diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index eca2248a00d..d9844103a95 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -6,7 +6,7 @@ -# Requirements +## Requirements diff --git a/.github/workflows/build-and-test-snapdragon.yml b/.github/workflows/build-and-test-snapdragon.yml index 7eb204ea2a6..deed8e808b7 100644 --- a/.github/workflows/build-and-test-snapdragon.yml +++ b/.github/workflows/build-and-test-snapdragon.yml @@ -49,28 +49,19 @@ jobs: cp docs/backend/snapdragon/CMakeUserPresets.json . cmake --preset arm64-android-snapdragon-release -B build cmake --build build - cmake --install build --prefix pkg-adb/llama.cpp + cmake --install build --prefix pkg-snapdragon/llama.cpp - name: Upload Llama.CPP Snapdragon Android Build Artifact if: ${{ always() && steps.build_llama_cpp_snapdragon_android.outcome == 'success' }} uses: actions/upload-artifact@v6 with: name: llama-cpp-android-arm64-snapdragon - path: pkg-adb/llama.cpp - - check-secret: - runs-on: ubuntu-latest - outputs: - has-key: ${{ steps.check.outputs.has-key }} - steps: - - id: check - run: echo "has-key=${{ secrets.QDC_API_KEY != '' }}" >> "$GITHUB_OUTPUT" + path: pkg-snapdragon/llama.cpp test-snapdragon-qdc: name: Test on QDC Android Device (${{ matrix.device }}) - needs: [android-ndk-snapdragon, check-secret] - if: needs.check-secret.outputs.has-key == 'true' - runs-on: ubuntu-latest + needs: [android-ndk-snapdragon] + runs-on: ubuntu-slim strategy: fail-fast: false matrix: @@ -81,10 +72,10 @@ jobs: uses: actions/checkout@v6 - name: Download build artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v7 with: name: llama-cpp-android-arm64-snapdragon - path: pkg-snapdragon/ + path: pkg-snapdragon/llama.cpp - name: Set up Python uses: actions/setup-python@v5 @@ -92,13 +83,25 @@ jobs: python-version: '3.x' cache: pip + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y curl unzip + - name: Install QDC SDK wheel run: | curl -fSL -o qdc_sdk.zip https://softwarecenter.qualcomm.com/api/download/software/tools/Qualcomm_Device_Cloud_SDK/All/0.2.3/qualcomm_device_cloud_sdk-0.2.3.zip unzip qdc_sdk.zip -d qdc_sdk pip install qdc_sdk/qualcomm_device_cloud_sdk-0.2.3-py3-none-any.whl + - name: Check QDC API key + id: check_secret + env: + QDC_API_KEY: ${{ secrets.QDC_API_KEY }} + run: echo "has-qdc-key=${{ env.QDC_API_KEY != '' }}" >> "$GITHUB_OUTPUT" + - name: Run QDC tests (${{ matrix.device }}) + if: steps.check_secret.outputs.has-qdc-key == 'true' run: | python scripts/snapdragon/qdc/run_qdc_jobs.py \ --test all \ diff --git a/.gitignore b/.gitignore index 6136524d75a..68a8e057323 100644 --- a/.gitignore +++ b/.gitignore @@ -34,7 +34,6 @@ /.vscode/ /nppBackup - # Coverage /gcovr-report/ @@ -74,6 +73,7 @@ !/models/templates # Zig + /zig-out/ /zig-cache/ @@ -93,6 +93,7 @@ !/examples/sycl/*.sh # Server Web UI temporary files + /tools/server/webui/node_modules /tools/server/webui/dist # we no longer use gz for index.html @@ -106,9 +107,11 @@ __pycache__/ poetry.toml # Nix + /result # Test binaries + /tests/test-backend-ops /tests/test-double-float /tests/test-grad0 @@ -124,6 +127,7 @@ poetry.toml /tests/test-tokenizer-1-spm # Scripts + !/scripts/install-oneapi.bat # Generated by scripts @@ -132,18 +136,24 @@ poetry.toml /wikitext-2-raw/ # Test models for lora adapters + /lora-tests # Local scripts + /run-vim.sh /run-chat.sh /run-spec.sh /.ccache/ # IDE + /*.code-workspace /.windsurf/ # emscripten a.out.* +# AGENTS + AGENTS.local.md +.pi/SYSTEM.md diff --git a/.pi/gg/SYSTEM.md b/.pi/gg/SYSTEM.md new file mode 100644 index 00000000000..5de6fe4eb98 --- /dev/null +++ b/.pi/gg/SYSTEM.md @@ -0,0 +1,33 @@ +You are a coding agent. Here are some very important rules that you must follow: + +General: +- By very precise and concise when writing code, comments, explanations, etc. +- PR and commit titles format: ` : `. Lookup recents for examples +- Don't try to build or run the code unless you are explicitly asked to do so + +Coding: +- When in doubt, always refer to the CONTRIBUTING.md file of the project +- When referencing issues or PRs in comments, use the format: + - C/C++ code: `// ref: <url>` + - Other (CMake, etc.): `# ref: <url>` + +Pull requests (PRs): +- New branch names are prefixed with "gg/" +- Before opening a pull request, ask the user to confirm the description +- When creating a pull request, look for the repository's PR template and follow it +- For the AI usage disclosure section, write "YES. llama.cpp + pi" +- Always create the pull requests in draft mode + +Commits: +- On every commit that you make, include a "Assisted-by: llama.cpp:local pi" tag +- Do not explicitly set the git author in commits - rely on the default git config + +Resources (read on demand): +- [CONTRIBUTING.md](CONTRIBUTING.md) +- [Build documentation](docs/build.md) +- [Server usage documentation](tools/server/README.md) +- [Server development documentation](tools/server/README-dev.md) +- [PEG parser](docs/development/parsing.md) +- [Auto parser](docs/autoparser.md) +- [Jinja engine](common/jinja/README.md) +- [PR template](.github/pull_request_template.md) diff --git a/CODEOWNERS b/CODEOWNERS index 612fcdda1c0..eed43d762c7 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -53,28 +53,29 @@ /examples/speculative/ @ggerganov /ggml/cmake/ @ggerganov /ggml/include/ @ggerganov +/ggml/src/ggml-backend-meta.cpp @JohannesGaessler /ggml/src/ggml-cann/ @ggml-org/ggml-cann /ggml/src/ggml-common.h @ggerganov /ggml/src/ggml-cpu/ @ggerganov /ggml/src/ggml-cpu/spacemit/ @alex-spacemit /ggml/src/ggml-cuda/ @ggml-org/ggml-cuda +/ggml/src/ggml-cuda/vendors/hip.h @IMbackK /ggml/src/ggml-cuda/fattn-wmma* @IMbackK +/ggml/src/ggml-hexagon/ @ggml-org/ggml-hexagon /ggml/src/ggml-hip/ @IMbackK -/ggml/src/ggml-cuda/vendors/hip.h @IMbackK /ggml/src/ggml-impl.h @ggerganov /ggml/src/ggml-metal/ @ggml-org/ggml-metal /ggml/src/ggml-opencl/ @ggml-org/ggml-opencl -/ggml/src/ggml-hexagon/ @ggml-org/ggml-hexagon +/ggml/src/ggml-openvino/ @cavusmustafa @wine99 /ggml/src/ggml-opt.cpp @JohannesGaessler /ggml/src/ggml-quants.* @ggerganov /ggml/src/ggml-rpc/ @ggml-org/ggml-rpc /ggml/src/ggml-sycl/ @ggml-org/ggml-sycl /ggml/src/ggml-threading.* @ggerganov -/ggml/src/ggml-vulkan/ @ggml-org/ggml-vulkan /ggml/src/ggml-virtgpu/ @kpouget +/ggml/src/ggml-vulkan/ @ggml-org/ggml-vulkan /ggml/src/ggml-webgpu/ @ggml-org/ggml-webgpu /ggml/src/ggml-zdnn/ @ggml-org/ggml-zdnn @Andreas-Krebbel @AlekseiNikiforovIBM -/ggml/src/ggml-openvino/ @cavusmustafa @wine99 /ggml/src/ggml.c @ggerganov /ggml/src/ggml.cpp @ggerganov /ggml/src/gguf.cpp @JohannesGaessler @Green-Sky diff --git a/common/arg.cpp b/common/arg.cpp index 85d84e5cc62..943d0766fb2 100644 --- a/common/arg.cpp +++ b/common/arg.cpp @@ -97,8 +97,13 @@ common_arg & common_arg::set_env(const char * env) { return *this; } -common_arg & common_arg::set_sparam() { - is_sparam = true; +common_arg & common_arg::set_sampling() { + is_sampling = true; + return *this; +} + +common_arg & common_arg::set_spec() { + is_spec = true; return *this; } @@ -568,8 +573,8 @@ static bool common_params_parse_ex(int argc, char ** argv, common_params_context postprocess_cpu_params(params.cpuparams, nullptr); postprocess_cpu_params(params.cpuparams_batch, ¶ms.cpuparams); - postprocess_cpu_params(params.speculative.cpuparams, ¶ms.cpuparams); - postprocess_cpu_params(params.speculative.cpuparams_batch, ¶ms.cpuparams_batch); + postprocess_cpu_params(params.speculative.draft.cpuparams, ¶ms.cpuparams); + postprocess_cpu_params(params.speculative.draft.cpuparams_batch, ¶ms.cpuparams_batch); if (params.prompt_cache_all && (params.interactive || params.interactive_first)) { throw std::invalid_argument("error: --prompt-cache-all not supported in interactive mode yet\n"); @@ -591,8 +596,8 @@ static bool common_params_parse_ex(int argc, char ** argv, common_params_context break; } } - common_params_handle_model(params.speculative.mparams_dft, params.hf_token, params.offline); - common_params_handle_model(params.vocoder.model, params.hf_token, params.offline); + common_params_handle_model(params.speculative.draft.mparams, params.hf_token, params.offline); + common_params_handle_model(params.vocoder.model, params.hf_token, params.offline); } // model is required (except for server) @@ -611,7 +616,7 @@ static bool common_params_parse_ex(int argc, char ** argv, common_params_context for (auto & seq_breaker : params.sampling.dry_sequence_breakers) { string_process_escapes(seq_breaker); } - for (auto & pair : params.speculative.replacements) { + for (auto & pair : params.speculative.draft.replacements) { string_process_escapes(pair.first); string_process_escapes(pair.second); } @@ -628,8 +633,8 @@ static bool common_params_parse_ex(int argc, char ** argv, common_params_context params.tensor_buft_overrides.push_back({nullptr, nullptr}); } - if (!params.speculative.tensor_buft_overrides.empty()) { - params.speculative.tensor_buft_overrides.push_back({nullptr, nullptr}); + if (!params.speculative.draft.tensor_buft_overrides.empty()) { + params.speculative.draft.tensor_buft_overrides.push_back({nullptr, nullptr}); } if (!params.chat_template.empty() && !common_chat_verify_template(params.chat_template, params.use_jinja)) { @@ -651,12 +656,15 @@ static void common_params_print_usage(common_params_context & ctx_arg) { }; std::vector<common_arg *> common_options; - std::vector<common_arg *> sparam_options; + std::vector<common_arg *> sampling_options; + std::vector<common_arg *> spec_options; std::vector<common_arg *> specific_options; for (auto & opt : ctx_arg.options) { // in case multiple LLAMA_EXAMPLE_* are set, we prioritize the LLAMA_EXAMPLE_* matching current example - if (opt.is_sparam) { - sparam_options.push_back(&opt); + if (opt.is_sampling) { + sampling_options.push_back(&opt); + } else if (opt.is_spec) { + spec_options.push_back(&opt); } else if (opt.in_example(ctx_arg.ex)) { specific_options.push_back(&opt); } else { @@ -666,7 +674,9 @@ static void common_params_print_usage(common_params_context & ctx_arg) { printf("----- common params -----\n\n"); print_options(common_options); printf("\n\n----- sampling params -----\n\n"); - print_options(sparam_options); + print_options(sampling_options); + printf("\n\n----- speculative params -----\n\n"); + print_options(spec_options); // TODO: maybe convert enum llama_example to string printf("\n\n----- example-specific params -----\n\n"); print_options(specific_options); @@ -674,12 +684,15 @@ static void common_params_print_usage(common_params_context & ctx_arg) { static void common_params_print_completion(common_params_context & ctx_arg) { std::vector<common_arg *> common_options; - std::vector<common_arg *> sparam_options; + std::vector<common_arg *> sampling_options; + std::vector<common_arg *> spec_options; std::vector<common_arg *> specific_options; for (auto & opt : ctx_arg.options) { - if (opt.is_sparam) { - sparam_options.push_back(&opt); + if (opt.is_sampling) { + sampling_options.push_back(&opt); + } else if (opt.is_spec) { + spec_options.push_back(&opt); } else if (opt.in_example(ctx_arg.ex)) { specific_options.push_back(&opt); } else { @@ -703,7 +716,8 @@ static void common_params_print_completion(common_params_context & ctx_arg) { }; print_options(common_options); - print_options(sparam_options); + print_options(sampling_options); + print_options(spec_options); print_options(specific_options); printf("\"\n\n"); @@ -1223,14 +1237,14 @@ common_params_context common_params_parser_init(common_params & params, llama_ex {"-lcs", "--lookup-cache-static"}, "FNAME", "path to static lookup cache to use for lookup decoding (not updated by generation)", [](common_params & params, const std::string & value) { - params.speculative.lookup_cache_static = value; + params.speculative.ngram_cache.lookup_cache_static = value; } ).set_examples({LLAMA_EXAMPLE_LOOKUP, LLAMA_EXAMPLE_SERVER})); add_opt(common_arg( {"-lcd", "--lookup-cache-dynamic"}, "FNAME", "path to dynamic lookup cache to use for lookup decoding (updated by generation)", [](common_params & params, const std::string & value) { - params.speculative.lookup_cache_dynamic = value; + params.speculative.ngram_cache.lookup_cache_dynamic = value; } ).set_examples({LLAMA_EXAMPLE_LOOKUP, LLAMA_EXAMPLE_SERVER})); add_opt(common_arg( @@ -1576,28 +1590,28 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.samplers = common_sampler_types_from_names(sampler_names, true); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_SAMPLERS; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"-s", "--seed"}, "SEED", string_format("RNG seed (default: %d, use random seed for %d)", params.sampling.seed, LLAMA_DEFAULT_SEED), [](common_params & params, const std::string & value) { params.sampling.seed = std::stoul(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--sampler-seq", "--sampling-seq"}, "SEQUENCE", string_format("simplified sequence for samplers that will be used (default: %s)", sampler_type_chars.c_str()), [](common_params & params, const std::string & value) { params.sampling.samplers = common_sampler_types_from_chars(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--ignore-eos"}, "ignore end of stream token and continue generating (implies --logit-bias EOS-inf)", [](common_params & params) { params.sampling.ignore_eos = true; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--temp", "--temperature"}, "N", string_format("temperature (default: %.2f)", (double)params.sampling.temp), @@ -1606,7 +1620,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.temp = std::max(params.sampling.temp, 0.0f); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_TEMP; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--top-k"}, "N", string_format("top-k sampling (default: %d, 0 = disabled)", params.sampling.top_k), @@ -1614,7 +1628,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.top_k = value; params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_TOP_K; } - ).set_sparam().set_env("LLAMA_ARG_TOP_K")); + ).set_sampling().set_env("LLAMA_ARG_TOP_K")); add_opt(common_arg( {"--top-p"}, "N", string_format("top-p sampling (default: %.2f, 1.0 = disabled)", (double)params.sampling.top_p), @@ -1622,7 +1636,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.top_p = std::stof(value); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_TOP_P; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--min-p"}, "N", string_format("min-p sampling (default: %.2f, 0.0 = disabled)", (double)params.sampling.min_p), @@ -1630,14 +1644,14 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.min_p = std::stof(value); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_MIN_P; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--top-nsigma", "--top-n-sigma"}, "N", string_format("top-n-sigma sampling (default: %.2f, -1.0 = disabled)", params.sampling.top_n_sigma), [](common_params & params, const std::string & value) { params.sampling.top_n_sigma = std::stof(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--xtc-probability"}, "N", string_format("xtc probability (default: %.2f, 0.0 = disabled)", (double)params.sampling.xtc_probability), @@ -1645,7 +1659,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.xtc_probability = std::stof(value); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_XTC_PROBABILITY; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--xtc-threshold"}, "N", string_format("xtc threshold (default: %.2f, 1.0 = disabled)", (double)params.sampling.xtc_threshold), @@ -1653,14 +1667,14 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.xtc_threshold = std::stof(value); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_XTC_THRESHOLD; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--typical", "--typical-p"}, "N", string_format("locally typical sampling, parameter p (default: %.2f, 1.0 = disabled)", (double)params.sampling.typ_p), [](common_params & params, const std::string & value) { params.sampling.typ_p = std::stof(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--repeat-last-n"}, "N", string_format("last n tokens to consider for penalize (default: %d, 0 = disabled, -1 = ctx_size)", params.sampling.penalty_last_n), @@ -1672,7 +1686,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.n_prev = std::max(params.sampling.n_prev, params.sampling.penalty_last_n); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_PENALTY_LAST_N; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--repeat-penalty"}, "N", string_format("penalize repeat sequence of tokens (default: %.2f, 1.0 = disabled)", (double)params.sampling.penalty_repeat), @@ -1680,28 +1694,28 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.penalty_repeat = std::stof(value); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_PENALTY_REPEAT; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--presence-penalty"}, "N", string_format("repeat alpha presence penalty (default: %.2f, 0.0 = disabled)", (double)params.sampling.penalty_present), [](common_params & params, const std::string & value) { params.sampling.penalty_present = std::stof(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--frequency-penalty"}, "N", string_format("repeat alpha frequency penalty (default: %.2f, 0.0 = disabled)", (double)params.sampling.penalty_freq), [](common_params & params, const std::string & value) { params.sampling.penalty_freq = std::stof(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--dry-multiplier"}, "N", string_format("set DRY sampling multiplier (default: %.2f, 0.0 = disabled)", (double)params.sampling.dry_multiplier), [](common_params & params, const std::string & value) { params.sampling.dry_multiplier = std::stof(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--dry-base"}, "N", string_format("set DRY sampling base value (default: %.2f)", (double)params.sampling.dry_base), @@ -1712,14 +1726,14 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.dry_base = potential_base; } } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--dry-allowed-length"}, "N", string_format("set allowed length for DRY sampling (default: %d)", params.sampling.dry_allowed_length), [](common_params & params, int value) { params.sampling.dry_allowed_length = value; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--dry-penalty-last-n"}, "N", string_format("set DRY penalty for the last n tokens (default: %d, 0 = disable, -1 = context size)", params.sampling.dry_penalty_last_n), @@ -1729,7 +1743,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex } params.sampling.dry_penalty_last_n = value; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--dry-sequence-breaker"}, "STRING", string_format("add sequence breaker for DRY sampling, clearing out default breakers (%s) in the process; use \"none\" to not use any sequence breakers\n", @@ -1755,7 +1769,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.dry_sequence_breakers.emplace_back(value); } } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--adaptive-target"}, "N", string_format("adaptive-p: select tokens near this probability (valid range 0.0 " @@ -1765,7 +1779,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex [](common_params & params, const std::string & value) { params.sampling.adaptive_target = std::stof(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--adaptive-decay"}, "N", string_format("adaptive-p: decay rate for target adaptation over time. lower values " @@ -1775,21 +1789,21 @@ common_params_context common_params_parser_init(common_params & params, llama_ex [](common_params & params, const std::string & value) { params.sampling.adaptive_decay = std::stof(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--dynatemp-range"}, "N", string_format("dynamic temperature range (default: %.2f, 0.0 = disabled)", (double)params.sampling.dynatemp_range), [](common_params & params, const std::string & value) { params.sampling.dynatemp_range = std::stof(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--dynatemp-exp"}, "N", string_format("dynamic temperature exponent (default: %.2f)", (double)params.sampling.dynatemp_exponent), [](common_params & params, const std::string & value) { params.sampling.dynatemp_exponent = std::stof(value); } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--mirostat"}, "N", string_format("use Mirostat sampling.\nTop K, Nucleus and Locally Typical samplers are ignored if used.\n" @@ -1798,7 +1812,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.mirostat = value; params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_MIROSTAT; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--mirostat-lr"}, "N", string_format("Mirostat learning rate, parameter eta (default: %.2f)", (double)params.sampling.mirostat_eta), @@ -1806,7 +1820,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.mirostat_eta = std::stof(value); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_MIROSTAT_ETA; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--mirostat-ent"}, "N", string_format("Mirostat target entropy, parameter tau (default: %.2f)", (double)params.sampling.mirostat_tau), @@ -1814,7 +1828,7 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.sampling.mirostat_tau = std::stof(value); params.sampling.user_sampling_config |= common_params_sampling_config::COMMON_PARAMS_SAMPLING_CONFIG_MIROSTAT_TAU; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"-l", "--logit-bias"}, "TOKEN_ID(+/-)BIAS", "modifies the likelihood of token appearing in the completion,\n" @@ -1836,28 +1850,28 @@ common_params_context common_params_parser_init(common_params & params, llama_ex throw std::invalid_argument("invalid input format"); } } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--grammar"}, "GRAMMAR", "BNF-like grammar to constrain generations (see samples in grammars/ dir)", [](common_params & params, const std::string & value) { params.sampling.grammar = {COMMON_GRAMMAR_TYPE_USER, value}; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"--grammar-file"}, "FNAME", "file to read grammar from", [](common_params & params, const std::string & value) { params.sampling.grammar = {COMMON_GRAMMAR_TYPE_USER, read_file(value)}; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"-j", "--json-schema"}, "SCHEMA", "JSON schema to constrain generations (https://json-schema.org/), e.g. `{}` for any JSON object\nFor schemas w/ external $refs, use --grammar + example/json_schema_to_grammar.py instead", [](common_params & params, const std::string & value) { params.sampling.grammar = {COMMON_GRAMMAR_TYPE_OUTPUT_FORMAT, json_schema_to_grammar(json::parse(value))}; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"-jf", "--json-schema-file"}, "FILE", "File containing a JSON schema to constrain generations (https://json-schema.org/), e.g. `{}` for any JSON object\nFor schemas w/ external $refs, use --grammar + example/json_schema_to_grammar.py instead", @@ -1874,14 +1888,14 @@ common_params_context common_params_parser_init(common_params & params, llama_ex ); params.sampling.grammar = {COMMON_GRAMMAR_TYPE_OUTPUT_FORMAT, json_schema_to_grammar(json::parse(schema))}; } - ).set_sparam()); + ).set_sampling()); add_opt(common_arg( {"-bs", "--backend-sampling"}, "enable backend sampling (experimental) (default: disabled)", [](common_params & params) { params.sampling.backend_sampling = true; } - ).set_sparam().set_env("LLAMA_ARG_BACKEND_SAMPLING")); + ).set_sampling().set_env("LLAMA_ARG_BACKEND_SAMPLING")); add_opt(common_arg( {"--pooling"}, "{none,mean,cls,last,rank}", "pooling type for embeddings, use model default if unspecified", @@ -2283,12 +2297,6 @@ common_params_context common_params_parser_init(common_params & params, llama_ex parse_tensor_buffer_overrides(value, params.tensor_buft_overrides); } ).set_env("LLAMA_ARG_OVERRIDE_TENSOR")); - add_opt(common_arg( - {"-otd", "--override-tensor-draft"}, "<tensor name pattern>=<buffer type>,...", - "override tensor buffer type for draft model", [](common_params & params, const std::string & value) { - parse_tensor_buffer_overrides(value, params.speculative.tensor_buft_overrides); - } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( {"-cmoe", "--cpu-moe"}, "keep all Mixture of Experts (MoE) weights in the CPU", @@ -2311,27 +2319,6 @@ common_params_context common_params_parser_init(common_params & params, llama_ex } } ).set_env("LLAMA_ARG_N_CPU_MOE")); - add_opt(common_arg( - {"-cmoed", "--cpu-moe-draft"}, - "keep all Mixture of Experts (MoE) weights in the CPU for the draft model", - [](common_params & params) { - params.speculative.tensor_buft_overrides.push_back(llm_ffn_exps_cpu_override()); - } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_CPU_MOE_DRAFT")); - add_opt(common_arg( - {"-ncmoed", "--n-cpu-moe-draft"}, "N", - "keep the Mixture of Experts (MoE) weights of the first N layers in the CPU for the draft model", - [](common_params & params, int value) { - if (value < 0) { - throw std::invalid_argument("invalid value"); - } - for (int i = 0; i < value; ++i) { - static std::list<std::string> buft_overrides_draft; - buft_overrides_draft.push_back(llm_ffn_exps_block_regex(i)); - params.speculative.tensor_buft_overrides.push_back({buft_overrides_draft.back().c_str(), ggml_backend_cpu_buffer_type()}); - } - } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_N_CPU_MOE_DRAFT")); GGML_ASSERT(params.n_gpu_layers < 0); // string_format would need to be extended for a default >= 0 add_opt(common_arg( {"-ngl", "--gpu-layers", "--n-gpu-layers"}, "N", @@ -2614,13 +2601,6 @@ common_params_context common_params_parser_init(common_params & params, llama_ex params.model.hf_repo = value; } ).set_env("LLAMA_ARG_HF_REPO")); - add_opt(common_arg( - {"-hfd", "-hfrd", "--hf-repo-draft"}, "<user>/<model>[:quant]", - "Same as --hf-repo, but for the draft model (default: unused)", - [](common_params & params, const std::string & value) { - params.speculative.mparams_dft.hf_repo = value; - } - ).set_env("LLAMA_ARG_HFD_REPO")); add_opt(common_arg( {"-hff", "--hf-file"}, "FILE", "Hugging Face model file. If specified, it will override the quant in --hf-repo (default: unused)", @@ -3330,170 +3310,235 @@ common_params_context common_params_parser_init(common_params & params, llama_ex } ).set_env("LLAMA_LOG_TIMESTAMPS")); + // // speculative parameters + // + + add_opt(common_arg( + {"--spec-draft-hf", "-hfd", "-hfrd", "--hf-repo-draft"}, "<user>/<model>[:quant]", + "Same as --hf-repo, but for the draft model (default: unused)", + [](common_params & params, const std::string & value) { + params.speculative.draft.mparams.hf_repo = value; + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_DRAFT_HF_REPO")); add_opt(common_arg( - {"-td", "--threads-draft"}, "N", + {"--spec-draft-threads", "-td", "--threads-draft"}, "N", "number of threads to use during generation (default: same as --threads)", [](common_params & params, int value) { - params.speculative.cpuparams.n_threads = value; - if (params.speculative.cpuparams.n_threads <= 0) { - params.speculative.cpuparams.n_threads = std::thread::hardware_concurrency(); + params.speculative.draft.cpuparams.n_threads = value; + if (params.speculative.draft.cpuparams.n_threads <= 0) { + params.speculative.draft.cpuparams.n_threads = std::thread::hardware_concurrency(); } } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"-tbd", "--threads-batch-draft"}, "N", + {"--spec-draft-threads-batch", "-tbd", "--threads-batch-draft"}, "N", "number of threads to use during batch and prompt processing (default: same as --threads-draft)", [](common_params & params, int value) { - params.speculative.cpuparams_batch.n_threads = value; - if (params.speculative.cpuparams_batch.n_threads <= 0) { - params.speculative.cpuparams_batch.n_threads = std::thread::hardware_concurrency(); + params.speculative.draft.cpuparams_batch.n_threads = value; + if (params.speculative.draft.cpuparams_batch.n_threads <= 0) { + params.speculative.draft.cpuparams_batch.n_threads = std::thread::hardware_concurrency(); } } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"-Cd", "--cpu-mask-draft"}, "M", + {"--spec-draft-cpu-mask", "-Cd", "--cpu-mask-draft"}, "M", "Draft model CPU affinity mask. Complements cpu-range-draft (default: same as --cpu-mask)", [](common_params & params, const std::string & mask) { - params.speculative.cpuparams.mask_valid = true; - if (!parse_cpu_mask(mask, params.speculative.cpuparams.cpumask)) { + params.speculative.draft.cpuparams.mask_valid = true; + if (!parse_cpu_mask(mask, params.speculative.draft.cpuparams.cpumask)) { throw std::invalid_argument("invalid cpumask"); } } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"-Crd", "--cpu-range-draft"}, "lo-hi", + {"--spec-draft-cpu-range", "-Crd", "--cpu-range-draft"}, "lo-hi", "Ranges of CPUs for affinity. Complements --cpu-mask-draft", [](common_params & params, const std::string & range) { - params.speculative.cpuparams.mask_valid = true; - if (!parse_cpu_range(range, params.speculative.cpuparams.cpumask)) { + params.speculative.draft.cpuparams.mask_valid = true; + if (!parse_cpu_range(range, params.speculative.draft.cpuparams.cpumask)) { throw std::invalid_argument("invalid range"); } } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"--cpu-strict-draft"}, "<0|1>", + {"--spec-draft-cpu-strict", "--cpu-strict-draft"}, "<0|1>", "Use strict CPU placement for draft model (default: same as --cpu-strict)", [](common_params & params, int value) { - params.speculative.cpuparams.strict_cpu = value; + params.speculative.draft.cpuparams.strict_cpu = value; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"--prio-draft"}, "N", - string_format("set draft process/thread priority : 0-normal, 1-medium, 2-high, 3-realtime (default: %d)\n", params.speculative.cpuparams.priority), + {"--spec-draft-prio", "--prio-draft"}, "N", + string_format("set draft process/thread priority : 0-normal, 1-medium, 2-high, 3-realtime (default: %d)\n", params.speculative.draft.cpuparams.priority), [](common_params & params, int prio) { if (prio < 0 || prio > 3) { throw std::invalid_argument("invalid value"); } - params.speculative.cpuparams.priority = (enum ggml_sched_priority) prio; + params.speculative.draft.cpuparams.priority = (enum ggml_sched_priority) prio; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"--poll-draft"}, "<0|1>", + {"--spec-draft-poll", "--poll-draft"}, "<0|1>", "Use polling to wait for draft model work (default: same as --poll])", [](common_params & params, int value) { - params.speculative.cpuparams.poll = value; + params.speculative.draft.cpuparams.poll = value; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"-Cbd", "--cpu-mask-batch-draft"}, "M", + {"--spec-draft-cpu-mask-batch", "-Cbd", "--cpu-mask-batch-draft"}, "M", "Draft model CPU affinity mask. Complements cpu-range-draft (default: same as --cpu-mask)", [](common_params & params, const std::string & mask) { - params.speculative.cpuparams_batch.mask_valid = true; - if (!parse_cpu_mask(mask, params.speculative.cpuparams_batch.cpumask)) { + params.speculative.draft.cpuparams_batch.mask_valid = true; + if (!parse_cpu_mask(mask, params.speculative.draft.cpuparams_batch.cpumask)) { throw std::invalid_argument("invalid cpumask"); } } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"-Crbd", "--cpu-range-batch-draft"}, "lo-hi", + {"--spec-draft-cpu-range-batch", "-Crbd", "--cpu-range-batch-draft"}, "lo-hi", "Ranges of CPUs for affinity. Complements --cpu-mask-draft-batch)", [](common_params & params, const std::string & range) { - params.speculative.cpuparams_batch.mask_valid = true; - if (!parse_cpu_range(range, params.speculative.cpuparams_batch.cpumask)) { + params.speculative.draft.cpuparams_batch.mask_valid = true; + if (!parse_cpu_range(range, params.speculative.draft.cpuparams_batch.cpumask)) { throw std::invalid_argument("invalid cpumask"); } } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE})); add_opt(common_arg( - {"--cpu-strict-batch-draft"}, "<0|1>", + {"--spec-draft-cpu-strict-batch", "--cpu-strict-batch-draft"}, "<0|1>", "Use strict CPU placement for draft model (default: --cpu-strict-draft)", [](common_params & params, int value) { - params.speculative.cpuparams_batch.strict_cpu = value; + params.speculative.draft.cpuparams_batch.strict_cpu = value; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"--prio-batch-draft"}, "N", - string_format("set draft process/thread priority : 0-normal, 1-medium, 2-high, 3-realtime (default: %d)\n", params.speculative.cpuparams_batch.priority), + {"--spec-draft-prio-batch", "--prio-batch-draft"}, "N", + string_format("set draft process/thread priority : 0-normal, 1-medium, 2-high, 3-realtime (default: %d)\n", params.speculative.draft.cpuparams_batch.priority), [](common_params & params, int prio) { if (prio < 0 || prio > 3) { throw std::invalid_argument("invalid value"); } - params.speculative.cpuparams_batch.priority = (enum ggml_sched_priority) prio; + params.speculative.draft.cpuparams_batch.priority = (enum ggml_sched_priority) prio; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"--poll-batch-draft"}, "<0|1>", + {"--spec-draft-poll-batch", "--poll-batch-draft"}, "<0|1>", "Use polling to wait for draft model work (default: --poll-draft)", [](common_params & params, int value) { - params.speculative.cpuparams_batch.poll = value; + params.speculative.draft.cpuparams_batch.poll = value; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"--draft", "--draft-n", "--draft-max"}, "N", - string_format("number of tokens to draft for speculative decoding (default: %d)", params.speculative.n_max), + {"--spec-draft-type-k", "-ctkd", "--cache-type-k-draft"}, "TYPE", + string_format( + "KV cache data type for K for the draft model\n" + "allowed values: %s\n" + "(default: %s)", + get_all_kv_cache_types().c_str(), + ggml_type_name(params.speculative.draft.cache_type_k) + ), + [](common_params & params, const std::string & value) { + params.speculative.draft.cache_type_k = kv_cache_type_from_str(value); + } + ).set_env("LLAMA_ARG_SPEC_DRAFT_CACHE_TYPE_K")); + add_opt(common_arg( + {"--spec-draft-type-v", "-ctvd", "--cache-type-v-draft"}, "TYPE", + string_format( + "KV cache data type for V for the draft model\n" + "allowed values: %s\n" + "(default: %s)", + get_all_kv_cache_types().c_str(), + ggml_type_name(params.speculative.draft.cache_type_v) + ), + [](common_params & params, const std::string & value) { + params.speculative.draft.cache_type_v = kv_cache_type_from_str(value); + } + ).set_env("LLAMA_ARG_SPEC_DRAFT_CACHE_TYPE_V")); + add_opt(common_arg( + {"--spec-draft-override-tensor", "-otd", "--override-tensor-draft"}, "<tensor name pattern>=<buffer type>,...", + "override tensor buffer type for draft model", [](common_params & params, const std::string & value) { + parse_tensor_buffer_overrides(value, params.speculative.draft.tensor_buft_overrides); + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + add_opt(common_arg( + {"--spec-draft-cpu-moe", "-cmoed", "--cpu-moe-draft"}, + "keep all Mixture of Experts (MoE) weights in the CPU for the draft model", + [](common_params & params) { + params.speculative.draft.tensor_buft_overrides.push_back(llm_ffn_exps_cpu_override()); + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_DRAFT_CPU_MOE")); + add_opt(common_arg( + {"--spec-draft-n-cpu-moe", "--spec-draft-ncmoe", "-ncmoed", "--n-cpu-moe-draft"}, "N", + "keep the Mixture of Experts (MoE) weights of the first N layers in the CPU for the draft model", [](common_params & params, int value) { - params.speculative.n_max = value; + if (value < 0) { + throw std::invalid_argument("invalid value"); + } + for (int i = 0; i < value; ++i) { + static std::list<std::string> buft_overrides_draft; + buft_overrides_draft.push_back(llm_ffn_exps_block_regex(i)); + params.speculative.draft.tensor_buft_overrides.push_back({buft_overrides_draft.back().c_str(), ggml_backend_cpu_buffer_type()}); + } + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_DRAFT_N_CPU_MOE")); + + add_opt(common_arg( + {"--spec-draft-n-max"}, "N", + string_format("number of tokens to draft for speculative decoding (default: %d)", params.speculative.draft.n_max), + [](common_params & params, int value) { + params.speculative.draft.n_max = value; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_LOOKUP, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_DRAFT_MAX")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_LOOKUP, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_DRAFT_N_MAX")); add_opt(common_arg( - {"--draft-min", "--draft-n-min"}, "N", - string_format("minimum number of draft tokens to use for speculative decoding (default: %d)", params.speculative.n_min), + {"--spec-draft-n-min"}, "N", + string_format("minimum number of draft tokens to use for speculative decoding (default: %d)", params.speculative.draft.n_min), [](common_params & params, int value) { - params.speculative.n_min = value; + params.speculative.draft.n_min = value; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_LOOKUP, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_DRAFT_MIN")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_LOOKUP, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_DRAFT_N_MIN")); + add_opt(common_arg( - {"--draft-p-split"}, "P", - string_format("speculative decoding split probability (default: %.2f)", (double)params.speculative.p_split), + {"--spec--draft-p-split", "--draft-p-split"}, "P", + string_format("speculative decoding split probability (default: %.2f)", (double)params.speculative.draft.p_split), [](common_params & params, const std::string & value) { - params.speculative.p_split = std::stof(value); + params.speculative.draft.p_split = std::stof(value); } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE}).set_env("LLAMA_ARG_DRAFT_P_SPLIT")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_DRAFT_P_SPLIT")); add_opt(common_arg( - {"--draft-p-min"}, "P", - string_format("minimum speculative decoding probability (greedy) (default: %.2f)", (double)params.speculative.p_min), + {"--spec-draft-p-min", "--draft-p-min"}, "P", + string_format("minimum speculative decoding probability (greedy) (default: %.2f)", (double)params.speculative.draft.p_min), [](common_params & params, const std::string & value) { - params.speculative.p_min = std::stof(value); + params.speculative.draft.p_min = std::stof(value); } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_DRAFT_P_MIN")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_DRAFT_P_MIN")); add_opt(common_arg( - {"-cd", "--ctx-size-draft"}, "N", - string_format("size of the prompt context for the draft model (default: %d, 0 = loaded from model)", params.speculative.n_ctx), + {"--spec-draft-ctx-size", "-cd", "--ctx-size-draft"}, "N", + string_format("size of the prompt context for the draft model (default: %d, 0 = loaded from model)", params.speculative.draft.n_ctx), [](common_params & params, int value) { - params.speculative.n_ctx = value; + params.speculative.draft.n_ctx = value; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_CTX_SIZE_DRAFT")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_DRAFT_CTX_SIZE")); add_opt(common_arg( - {"-devd", "--device-draft"}, "<dev1,dev2,..>", + {"--spec-draft-device", "-devd", "--device-draft"}, "<dev1,dev2,..>", "comma-separated list of devices to use for offloading the draft model (none = don't offload)\n" "use --list-devices to see a list of available devices", [](common_params & params, const std::string & value) { - params.speculative.devices = parse_device_list(value); + params.speculative.draft.devices = parse_device_list(value); } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); - GGML_ASSERT(params.speculative.n_gpu_layers < 0); // string_format would need to be extended for a default >= 0 + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + GGML_ASSERT(params.speculative.draft.n_gpu_layers < 0); // string_format would need to be extended for a default >= 0 add_opt(common_arg( - {"-ngld", "--gpu-layers-draft", "--n-gpu-layers-draft"}, "N", + {"--spec-draft-ngl", "-ngld", "--gpu-layers-draft", "--n-gpu-layers-draft"}, "N", string_format("max. number of draft model layers to store in VRAM, either an exact number, 'auto', or 'all' (default: %s)", - params.speculative.n_gpu_layers == -1 ? "auto" : "all"), + params.speculative.draft.n_gpu_layers == -1 ? "auto" : "all"), [](common_params & params, const std::string & value) { if (value == "auto") { - params.speculative.n_gpu_layers = -1; + params.speculative.draft.n_gpu_layers = -1; } else if (value == "all") { - params.speculative.n_gpu_layers = -2; + params.speculative.draft.n_gpu_layers = -2; } else { - params.speculative.n_gpu_layers = std::stoi(value); + params.speculative.draft.n_gpu_layers = std::stoi(value); } if (!llama_supports_gpu_offload()) { fprintf(stderr, "warning: no usable GPU found, --gpu-layers-draft option will be ignored\n"); @@ -3501,21 +3546,21 @@ common_params_context common_params_parser_init(common_params & params, llama_ex fprintf(stderr, "warning: consult docs/build.md for compilation instructions\n"); } } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_N_GPU_LAYERS_DRAFT")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_N_GPU_LAYERS_DRAFT")); add_opt(common_arg( - {"-md", "--model-draft"}, "FNAME", + {"--spec-draft-model", "-md", "--model-draft"}, "FNAME", "draft model for speculative decoding (default: unused)", [](common_params & params, const std::string & value) { - params.speculative.mparams_dft.path = value; + params.speculative.draft.mparams.path = value; } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_MODEL_DRAFT")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_DRAFT_MODEL")); add_opt(common_arg( - {"--spec-replace"}, "TARGET", "DRAFT", + {"--spec-draft-replace", "--spec-replace"}, "TARGET", "DRAFT", "translate the string in TARGET into DRAFT if the draft model and main model are not compatible", [](common_params & params, const std::string & tgt, const std::string & dft) { - params.speculative.replacements.push_back({ tgt, dft }); + params.speculative.draft.replacements.push_back({ tgt, dft }); } - ).set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( {"--spec-type"}, "[none|ngram-cache|ngram-simple|ngram-map-k|ngram-map-k4v|ngram-mod]", string_format("type of speculative decoding to use when no draft model is provided (default: %s)\n", @@ -3537,63 +3582,174 @@ common_params_context common_params_parser_init(common_params & params, llama_ex throw std::invalid_argument("unknown speculative decoding type without draft model"); } } - ).set_examples({LLAMA_EXAMPLE_SERVER}).set_env("LLAMA_ARG_SPEC_TYPE")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_SPEC_TYPE")); add_opt(common_arg( - {"--spec-ngram-size-n"}, "N", - string_format("ngram size N for ngram-simple/ngram-map speculative decoding, length of lookup n-gram (default: %d)", params.speculative.ngram_size_n), + {"--spec-ngram-mod-n-min"}, "N", + string_format("minimum number of ngram tokens to use for ngram-based speculative decoding (default: %d)", params.speculative.ngram_mod.n_min), + [](common_params & params, int value) { + if (value < 0 || value > 1024) { + throw std::invalid_argument("ngram n-min must be between 0 and 1024 inclusive"); + } + params.speculative.ngram_mod.n_min = value; + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + add_opt(common_arg( + {"--spec-ngram-mod-n-max"}, "N", + string_format("maximum number of ngram tokens to use for ngram-based speculative decoding (default: %d)", params.speculative.ngram_mod.n_max), + [](common_params & params, int value) { + if (value < 0 || value > 1024) { + throw std::invalid_argument("ngram n-max must be between 0 and 1024 inclusive"); + } + params.speculative.ngram_mod.n_max = value; + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + add_opt(common_arg( + {"--spec-ngram-mod-n-match"}, "N", + string_format("ngram-mod lookup length (default: %d)", params.speculative.ngram_mod.n_match), [](common_params & params, int value) { if (value < 1 || value > 1024) { throw std::invalid_argument("ngram size N must be between 1 and 1024 inclusive"); } - params.speculative.ngram_size_n = value; + params.speculative.ngram_mod.n_match = value; } - ).set_examples({LLAMA_EXAMPLE_SERVER})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + add_opt(common_arg( - {"--spec-ngram-size-m"}, "N", - string_format("ngram size M for ngram-simple/ngram-map speculative decoding, length of draft m-gram (default: %d)", params.speculative.ngram_size_m), + {"--spec-ngram-simple-size-n"}, "N", + string_format("ngram size N for ngram-simple speculative decoding, length of lookup n-gram (default: %d)", params.speculative.ngram_simple.size_n), + [](common_params & params, int value) { + if (value < 1 || value > 1024) { + throw std::invalid_argument("ngram size N must be between 1 and 1024 inclusive"); + } + params.speculative.ngram_simple.size_n = value; + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + add_opt(common_arg( + {"--spec-ngram-simple-size-m"}, "N", + string_format("ngram size M for ngram-simple speculative decoding, length of draft m-gram (default: %d)", params.speculative.ngram_simple.size_m), [](common_params & params, int value) { if (value < 1 || value > 1024) { throw std::invalid_argument("ngram size M must be between 1 and 1024 inclusive"); } - params.speculative.ngram_size_m = value; + params.speculative.ngram_simple.size_m = value; } - ).set_examples({LLAMA_EXAMPLE_SERVER})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"--spec-ngram-min-hits"}, "N", - string_format("minimum hits for ngram-map speculative decoding (default: %d)", params.speculative.ngram_min_hits), + {"--spec-ngram-simple-min-hits"}, "N", + string_format("minimum hits for ngram-simple speculative decoding (default: %d)", params.speculative.ngram_simple.min_hits), [](common_params & params, int value) { if (value < 1) { throw std::invalid_argument("ngram min hits must be at least 1"); } - params.speculative.ngram_min_hits = value; + params.speculative.ngram_simple.min_hits = value; } - ).set_examples({LLAMA_EXAMPLE_SERVER})); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + add_opt(common_arg( - {"-ctkd", "--cache-type-k-draft"}, "TYPE", - string_format( - "KV cache data type for K for the draft model\n" - "allowed values: %s\n" - "(default: %s)", - get_all_kv_cache_types().c_str(), - ggml_type_name(params.speculative.cache_type_k) - ), - [](common_params & params, const std::string & value) { - params.speculative.cache_type_k = kv_cache_type_from_str(value); + {"--spec-ngram-map-k-size-n"}, "N", + string_format("ngram size N for ngram-map-k speculative decoding, length of lookup n-gram (default: %d)", params.speculative.ngram_map_k.size_n), + [](common_params & params, int value) { + if (value < 1 || value > 1024) { + throw std::invalid_argument("ngram size N must be between 1 and 1024 inclusive"); + } + params.speculative.ngram_map_k.size_n = value; } - ).set_env("LLAMA_ARG_CACHE_TYPE_K_DRAFT")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); add_opt(common_arg( - {"-ctvd", "--cache-type-v-draft"}, "TYPE", - string_format( - "KV cache data type for V for the draft model\n" - "allowed values: %s\n" - "(default: %s)", - get_all_kv_cache_types().c_str(), - ggml_type_name(params.speculative.cache_type_v) - ), - [](common_params & params, const std::string & value) { - params.speculative.cache_type_v = kv_cache_type_from_str(value); + {"--spec-ngram-map-k-size-m"}, "N", + string_format("ngram size M for ngram-map-k speculative decoding, length of draft m-gram (default: %d)", params.speculative.ngram_map_k.size_m), + [](common_params & params, int value) { + if (value < 1 || value > 1024) { + throw std::invalid_argument("ngram size M must be between 1 and 1024 inclusive"); + } + params.speculative.ngram_map_k.size_m = value; } - ).set_env("LLAMA_ARG_CACHE_TYPE_V_DRAFT")); + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + add_opt(common_arg( + {"--spec-ngram-map-k-min-hits"}, "N", + string_format("minimum hits for ngram-map-k speculative decoding (default: %d)", params.speculative.ngram_map_k.min_hits), + [](common_params & params, int value) { + if (value < 1) { + throw std::invalid_argument("ngram min hits must be at least 1"); + } + params.speculative.ngram_map_k.min_hits = value; + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + + add_opt(common_arg( + {"--spec-ngram-map-k4v-size-n"}, "N", + string_format("ngram size N for ngram-map-k4v speculative decoding, length of lookup n-gram (default: %d)", params.speculative.ngram_map_k4v.size_n), + [](common_params & params, int value) { + if (value < 1 || value > 1024) { + throw std::invalid_argument("ngram size N must be between 1 and 1024 inclusive"); + } + params.speculative.ngram_map_k4v.size_n = value; + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + add_opt(common_arg( + {"--spec-ngram-map-k4v-size-m"}, "N", + string_format("ngram size M for ngram-map-k4v speculative decoding, length of draft m-gram (default: %d)", params.speculative.ngram_map_k4v.size_m), + [](common_params & params, int value) { + if (value < 1 || value > 1024) { + throw std::invalid_argument("ngram size M must be between 1 and 1024 inclusive"); + } + params.speculative.ngram_map_k4v.size_m = value; + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + add_opt(common_arg( + {"--spec-ngram-map-k4v-min-hits"}, "N", + string_format("minimum hits for ngram-map-k4v speculative decoding (default: %d)", params.speculative.ngram_map_k4v.min_hits), + [](common_params & params, int value) { + if (value < 1) { + throw std::invalid_argument("ngram min hits must be at least 1"); + } + params.speculative.ngram_map_k4v.min_hits = value; + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); + + // + // removed params + // + + add_opt(common_arg( + {"--draft", "--draft-n", "--draft-max"}, "N", + "the argument has been removed. use --spec-draft-n-max or --spec-ngram-mod-n-max", + [](common_params & /*params*/, int /*value*/) { + throw std::invalid_argument("the argument has been removed. use --spec-draft-n-max or --spec-ngram-mod-n-max"); + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_LOOKUP, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_DRAFT_MAX")); + add_opt(common_arg( + {"--draft-min", "--draft-n-min"}, "N", + "the argument has been removed. use --spec-draft-n-min or --spec-ngram-mod-n-min", + [](common_params & /*params*/, int /*value*/) { + throw std::invalid_argument("the argument has been removed. use --spec-draft-n-min or --spec-ngram-mod-n-min"); + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SPECULATIVE, LLAMA_EXAMPLE_LOOKUP, LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI}).set_env("LLAMA_ARG_DRAFT_MIN")); + add_opt(common_arg( + {"--spec-ngram-size-n"}, "N", + "the argument has been removed. use the respective --spec-ngram-*-size-n or --spec-ngram-mod-n-match", + [](common_params & /*params*/, int /*value*/) { + throw std::invalid_argument("the argument has been removed. use the respective --spec-ngram-*-size-n"); + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SERVER})); + add_opt(common_arg( + {"--spec-ngram-size-m"}, "N", + "the argument has been removed. use the respective --spec-ngram-*-size-m", + [](common_params & /*params*/, int /*value*/) { + throw std::invalid_argument("the argument has been removed. use the respective --spec-ngram-*-size-m"); + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SERVER})); + add_opt(common_arg( + {"--spec-ngram-min-hits"}, "N", + "the argument has been removed. use the respective --spec-ngram-*-min-hits", + [](common_params & /*params*/, int /*value*/) { + throw std::invalid_argument("the argument has been removed. use the respective --spec-ngram-*-min-hits"); + } + ).set_spec().set_examples({LLAMA_EXAMPLE_SERVER})); + + // + // TTS params + // add_opt(common_arg( {"-mv", "--model-vocoder"}, "FNAME", @@ -3617,6 +3773,10 @@ common_params_context common_params_parser_init(common_params & params, llama_ex } ).set_examples({LLAMA_EXAMPLE_TTS})); + // + // diffusion params + // + add_opt(common_arg( {"--diffusion-steps"}, "N", string_format("number of diffusion steps (default: %d)", params.diffusion.steps), @@ -3801,8 +3961,8 @@ common_params_context common_params_parser_init(common_params & params, llama_ex [](common_params & params) { params.model.hf_repo = "ggml-org/Qwen2.5-Coder-7B-Q8_0-GGUF"; params.model.hf_file = "qwen2.5-coder-7b-q8_0.gguf"; - params.speculative.mparams_dft.hf_repo = "ggml-org/Qwen2.5-Coder-0.5B-Q8_0-GGUF"; - params.speculative.mparams_dft.hf_file = "qwen2.5-coder-0.5b-q8_0.gguf"; + params.speculative.draft.mparams.hf_repo = "ggml-org/Qwen2.5-Coder-0.5B-Q8_0-GGUF"; + params.speculative.draft.mparams.hf_file = "qwen2.5-coder-0.5b-q8_0.gguf"; params.port = 8012; params.n_ubatch = 1024; params.n_batch = 1024; @@ -3817,8 +3977,8 @@ common_params_context common_params_parser_init(common_params & params, llama_ex [](common_params & params) { params.model.hf_repo = "ggml-org/Qwen2.5-Coder-14B-Q8_0-GGUF"; params.model.hf_file = "qwen2.5-coder-14b-q8_0.gguf"; - params.speculative.mparams_dft.hf_repo = "ggml-org/Qwen2.5-Coder-0.5B-Q8_0-GGUF"; - params.speculative.mparams_dft.hf_file = "qwen2.5-coder-0.5b-q8_0.gguf"; + params.speculative.draft.mparams.hf_repo = "ggml-org/Qwen2.5-Coder-0.5B-Q8_0-GGUF"; + params.speculative.draft.mparams.hf_file = "qwen2.5-coder-0.5b-q8_0.gguf"; params.port = 8012; params.n_ubatch = 1024; params.n_batch = 1024; @@ -3907,9 +4067,9 @@ common_params_context common_params_parser_init(common_params & params, llama_ex string_format("enable default speculative decoding config"), [](common_params & params) { params.speculative.type = COMMON_SPECULATIVE_TYPE_NGRAM_MOD; - params.speculative.ngram_size_n = 24; - params.speculative.n_min = 48; - params.speculative.n_max = 64; + params.speculative.ngram_mod.n_match = 24; + params.speculative.ngram_mod.n_min = 48; + params.speculative.ngram_mod.n_max = 64; } ).set_examples({LLAMA_EXAMPLE_SERVER, LLAMA_EXAMPLE_CLI})); diff --git a/common/arg.h b/common/arg.h index 55782a158d7..2c2a4e38a2b 100644 --- a/common/arg.h +++ b/common/arg.h @@ -25,7 +25,8 @@ struct common_arg { const char * value_hint_2 = nullptr; // for second arg value const char * env = nullptr; std::string help; - bool is_sparam = false; // is current arg a sampling param? + bool is_sampling = false; // is current arg a sampling param? + bool is_spec = false; // is current arg a speculative decoding param? bool is_preset_only = false; // is current arg preset-only (not treated as CLI arg) void (*handler_void) (common_params & params) = nullptr; void (*handler_string) (common_params & params, const std::string &) = nullptr; @@ -74,7 +75,8 @@ struct common_arg { common_arg & set_examples(std::initializer_list<enum llama_example> examples); common_arg & set_excludes(std::initializer_list<enum llama_example> excludes); common_arg & set_env(const char * env); - common_arg & set_sparam(); + common_arg & set_sampling(); + common_arg & set_spec(); common_arg & set_preset_only(); bool in_example(enum llama_example ex); bool is_exclude(enum llama_example ex); diff --git a/common/chat-diff-analyzer.cpp b/common/chat-diff-analyzer.cpp index 2f0bd14afa3..264ace4627c 100644 --- a/common/chat-diff-analyzer.cpp +++ b/common/chat-diff-analyzer.cpp @@ -296,7 +296,7 @@ void analyze_reasoning::compare_reasoning_presence() { return p.literal(reasoning_content) + p.space() + p.optional(p.tag("post", (p.marker() + p.space())) + p.rest()); }); auto parser_wrapped = build_tagged_peg_parser([&](common_peg_parser_builder &p) { - return p.tag("pre", p.marker() + p.space()) + p.literal(reasoning_content) + p.space() + p.tag("post", (p.marker() + p.space())) + p.rest(); + return p.tag("pre", p.marker() + p.space()) + p.literal(reasoning_content) + p.tag("post", (p.space() + p.marker() + p.space())) + p.rest(); }); // try the more aggressive parse first, if it fails, fall back to the delimiter one auto result = parser_wrapped.parse_anywhere_and_extract(comparison->output_B); @@ -306,11 +306,11 @@ void analyze_reasoning::compare_reasoning_presence() { if (result.result.success()) { if (!result.tags["pre"].empty() && !result.tags["post"].empty()) { mode = reasoning_mode::TAG_BASED; - start = trim_leading_whitespace(result.tags["pre"]); - end = trim_trailing_whitespace(result.tags["post"]); + start = result.tags["pre"]; + end = result.tags["post"]; } else if (!result.tags["post"].empty()) { mode = reasoning_mode::TAG_BASED; - end = trim_trailing_whitespace(result.tags["post"]); + end = result.tags["post"]; } } } diff --git a/common/common.cpp b/common/common.cpp index f7f33e8172a..793b8fee7b8 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -70,7 +70,7 @@ common_time_meas::~common_time_meas() { // CPU utils // -int32_t cpu_get_num_physical_cores() { +int32_t common_cpu_get_num_physical_cores() { #ifdef __linux__ // enumerate the set of thread siblings, num entries is num cores std::unordered_set<std::string> siblings; @@ -185,11 +185,11 @@ static int cpu_count_math_cpus(int n_cpu) { /** * Returns number of CPUs on system that are useful for math. */ -int32_t cpu_get_num_math() { +int32_t common_cpu_get_num_math() { #if defined(__x86_64__) && defined(__linux__) && !defined(__ANDROID__) int n_cpu = sysconf(_SC_NPROCESSORS_ONLN); if (n_cpu < 1) { - return cpu_get_num_physical_cores(); + return common_cpu_get_num_physical_cores(); } if (is_hybrid_cpu()) { cpu_set_t affinity; @@ -202,7 +202,7 @@ int32_t cpu_get_num_math() { } } #endif - return cpu_get_num_physical_cores(); + return common_cpu_get_num_physical_cores(); } // Helper for setting process priority @@ -263,7 +263,7 @@ bool set_process_priority(enum ggml_sched_priority prio) { // -void postprocess_cpu_params(cpu_params& cpuparams, const cpu_params* role_model) { +void postprocess_cpu_params(common_cpu_params & cpuparams, const common_cpu_params * role_model) { int32_t n_set = 0; if (cpuparams.n_threads < 0) { @@ -271,7 +271,7 @@ void postprocess_cpu_params(cpu_params& cpuparams, const cpu_params* role_model) if (role_model != nullptr) { cpuparams = *role_model; } else { - cpuparams.n_threads = cpu_get_num_math(); + cpuparams.n_threads = common_cpu_get_num_math(); } } @@ -1521,7 +1521,7 @@ struct llama_context_params common_context_params_to_llama(const common_params & return cparams; } -struct ggml_threadpool_params ggml_threadpool_params_from_cpu_params(const cpu_params & params) { +struct ggml_threadpool_params ggml_threadpool_params_from_cpu_params(const common_cpu_params & params) { struct ggml_threadpool_params tpp; ggml_threadpool_params_init(&tpp, params.n_threads); // setup the defaults diff --git a/common/common.h b/common/common.h index d2d3c10616f..a564b3b8c2b 100644 --- a/common/common.h +++ b/common/common.h @@ -54,7 +54,7 @@ struct common_control_vector_load_info; // CPU utils // -struct cpu_params { +struct common_cpu_params { int n_threads = -1; bool cpumask[GGML_MAX_N_THREADS] = {false}; // CPU affinity mask. bool mask_valid = false; // Default: any CPU @@ -63,8 +63,8 @@ struct cpu_params { uint32_t poll = 50; // Polling (busywait) level (0 - no polling, 100 - mostly polling) }; -int32_t cpu_get_num_physical_cores(); -int32_t cpu_get_num_math(); +int32_t common_cpu_get_num_physical_cores(); +int32_t common_cpu_get_num_math(); // // Common params @@ -297,34 +297,19 @@ struct common_params_model { struct common_ngram_mod; -struct common_params_speculative { - common_speculative_type type = COMMON_SPECULATIVE_TYPE_NONE; // type of speculative decoding - - // general-purpose speculative decoding parameters - - int32_t n_max = 16; // maximum number of tokens to draft during speculative decoding - int32_t n_min = 0; // minimum number of draft tokens to use for speculative decoding - float p_split = 0.1f; // speculative decoding split probability - float p_min = 0.75f; // minimum speculative decoding probability (greedy) - - // ngram-based speculative decoding - - uint16_t ngram_size_n = 12; // ngram size for lookup - uint16_t ngram_size_m = 48; // mgram size for speculative tokens - uint16_t ngram_min_hits = 1; // minimum hits at ngram/mgram lookup for mgram to be proposed - - std::shared_ptr<common_ngram_mod> ngram_mod; +// draft-model-based speculative decoding parameters +struct common_params_speculative_draft { + int32_t n_max = 16; // maximum number of tokens to draft during speculative decoding + int32_t n_min = 0; // minimum number of draft tokens to use for speculative decoding - std::string lookup_cache_static; // path of static ngram cache file for lookup decoding // NOLINT - std::string lookup_cache_dynamic; // path of dynamic ngram cache file for lookup decoding // NOLINT + float p_split = 0.1f; // speculative decoding split probability + float p_min = 0.75f; // minimum speculative decoding probability (greedy) - // draft-model speculative decoding + common_params_model mparams; - struct common_params_model mparams_dft; + llama_model * model = nullptr; // a llama_model that can be shared by multiple speculative contexts - llama_model * model_dft = nullptr; // a llama_model that can be shared by multiple speculative contexts - - llama_context_params cparams_dft; // these are the parameters for the draft llama_context + llama_context_params cparams; // these are the parameters for the draft llama_context int32_t n_ctx = 0; // draft context size int32_t n_gpu_layers = -1; // number of layers to store in VRAM for the draft model (-1 - use default) @@ -332,25 +317,60 @@ struct common_params_speculative { ggml_type cache_type_k = GGML_TYPE_F16; // KV cache data type for the K ggml_type cache_type_v = GGML_TYPE_F16; // KV cache data type for the V - struct cpu_params cpuparams; - struct cpu_params cpuparams_batch; + common_cpu_params cpuparams; + common_cpu_params cpuparams_batch; std::vector<ggml_backend_dev_t> devices; // devices to use for offloading std::vector<std::pair<std::string, std::string>> replacements; // main to speculative model replacements std::vector<llama_model_tensor_buft_override> tensor_buft_overrides; +}; + +struct common_params_speculative_ngram_mod { + int32_t n_match = 24; + + int32_t n_max = 64; + int32_t n_min = 48; + + // shared instance of the ngram container for all speculative decoding contexts + std::shared_ptr<common_ngram_mod> obj; +}; + +struct common_params_speculative_ngram_map { + uint16_t size_n = 12; // ngram size for lookup + uint16_t size_m = 48; // mgram size for speculative tokens + uint16_t min_hits = 1; // minimum hits at ngram/mgram lookup for mgram to be proposed +}; + +struct common_params_speculative_ngram_cache { + std::string lookup_cache_static; // path of static ngram cache file for lookup decoding + std::string lookup_cache_dynamic; // path of dynamic ngram cache file for lookup decoding +}; + +struct common_params_speculative { + // TODO: become a vector in order to support "chains of speculators" + common_speculative_type type = COMMON_SPECULATIVE_TYPE_NONE; + + common_params_speculative_draft draft; + + common_params_speculative_ngram_mod ngram_mod; + common_params_speculative_ngram_map ngram_simple; + common_params_speculative_ngram_map ngram_map_k; + common_params_speculative_ngram_map ngram_map_k4v; + + common_params_speculative_ngram_cache ngram_cache; bool has_dft() const { - return !mparams_dft.path.empty() || !mparams_dft.hf_repo.empty(); + return !draft.mparams.path.empty() || !draft.mparams.hf_repo.empty(); } }; struct common_params_vocoder { struct common_params_model model; - std::string speaker_file = ""; // speaker file path // NOLINT + std::string speaker_file; // speaker file path - bool use_guide_tokens = false; // enable guide tokens to improve TTS accuracy // NOLINT + bool use_guide_tokens = false; // enable guide tokens to improve TTS accuracy }; struct common_params_diffusion { @@ -433,8 +453,8 @@ struct common_params { enum llama_split_mode split_mode = LLAMA_SPLIT_MODE_LAYER; // how to split the model across GPUs - struct cpu_params cpuparams; - struct cpu_params cpuparams_batch; + common_cpu_params cpuparams; + common_cpu_params cpuparams_batch; ggml_backend_sched_eval_callback cb_eval = nullptr; void * cb_eval_user_data = nullptr; @@ -678,7 +698,7 @@ std::string common_params_get_system_info(const common_params & params); bool parse_cpu_range(const std::string & range, bool(&boolmask)[GGML_MAX_N_THREADS]); bool parse_cpu_mask(const std::string & mask, bool(&boolmask)[GGML_MAX_N_THREADS]); -void postprocess_cpu_params(cpu_params & cpuparams, const cpu_params * role_model = nullptr); +void postprocess_cpu_params(common_cpu_params & cpuparams, const common_cpu_params * role_model = nullptr); bool set_process_priority(enum ggml_sched_priority prio); // @@ -846,7 +866,7 @@ common_init_result_ptr common_init_from_params(common_params & params); struct llama_model_params common_model_params_to_llama ( common_params & params); struct llama_context_params common_context_params_to_llama(const common_params & params); -struct ggml_threadpool_params ggml_threadpool_params_from_cpu_params(const cpu_params & params); +struct ggml_threadpool_params ggml_threadpool_params_from_cpu_params(const common_cpu_params & params); // clear LoRA adapters from context, then apply new list of adapters void common_set_adapter_lora(struct llama_context * ctx, std::vector<common_adapter_lora_info> & lora); diff --git a/common/debug.cpp b/common/debug.cpp index 0df409a79db..102c6924dc9 100644 --- a/common/debug.cpp +++ b/common/debug.cpp @@ -1,9 +1,38 @@ #include "debug.h" +#include "common.h" #include "log.h" #include <cmath> +#include <regex> #include <string> +#include <vector> + +struct common_debug_cb_user_data::impl { + std::vector<uint8_t> data; + std::vector<std::regex> tensor_filters; + bool abort_on_nan{false}; +}; + +common_debug_cb_user_data::common_debug_cb_user_data() : pimpl(std::make_unique<impl>()) {} +common_debug_cb_user_data::~common_debug_cb_user_data() = default; + +common_debug_cb_user_data::common_debug_cb_user_data(common_params & params, const std::vector<std::string> & filter_patterns, bool abort_on_nan) + : pimpl(std::make_unique<impl>()) +{ + for (const auto & pattern : filter_patterns) { + try { + std::string anchored_pattern = "^" + pattern; + pimpl->tensor_filters.emplace_back(anchored_pattern, std::regex::optimize); + } catch (const std::regex_error & e) { + throw std::runtime_error("Invalid regex pattern '" + pattern + "': " + e.what()); + } + } + pimpl->abort_on_nan = abort_on_nan; + + params.cb_eval = common_debug_cb_eval; + params.cb_eval_user_data = this; +} static std::string common_ggml_ne_string(const ggml_tensor * t) { std::string str; @@ -47,8 +76,7 @@ static float common_ggml_get_float_value(const uint8_t * data, #define INDENT " " -template <bool abort> -void common_debug_print_tensor(uint8_t * data, ggml_type type, const int64_t * ne, const size_t * nb, int64_t n) { +static void common_debug_print_tensor(uint8_t * data, ggml_type type, const int64_t * ne, const size_t * nb, int64_t n, bool abort_on_nan) { GGML_ASSERT(n > 0); float sum = 0; for (int64_t i3 = 0; i3 < ne[3]; i3++) { @@ -94,7 +122,7 @@ void common_debug_print_tensor(uint8_t * data, ggml_type type, const int64_t * n LOG(INDENT "sum = %f\n", sum); } - if constexpr (abort) { + if (abort_on_nan) { if (std::isnan(sum)) { LOG("encountered NaN - aborting\n"); exit(0); @@ -112,8 +140,9 @@ void common_debug_print_tensor(uint8_t * data, ggml_type type, const int64_t * n * @param user_data user data to pass at each call back * @return true to receive data or continue the graph, false otherwise */ -template <bool abort_on_nan> bool common_debug_cb_eval(struct ggml_tensor * t, bool ask, void * user_data) { - auto * cb_data = (base_callback_data *) user_data; +bool common_debug_cb_eval(struct ggml_tensor * t, bool ask, void * user_data) { + auto * cb_data = (common_debug_cb_user_data *) user_data; + auto * pimpl = cb_data->pimpl.get(); const struct ggml_tensor * src0 = t->src[0]; const struct ggml_tensor * src1 = t->src[1]; @@ -122,10 +151,10 @@ template <bool abort_on_nan> bool common_debug_cb_eval(struct ggml_tensor * t, b return true; // Always retrieve data } - bool matches_filter = cb_data->tensor_filters.empty(); + bool matches_filter = pimpl->tensor_filters.empty(); if (!matches_filter) { - for (const auto & filter : cb_data->tensor_filters) { + for (const auto & filter : pimpl->tensor_filters) { if (std::regex_search(t->name, filter)) { matches_filter = true; break; @@ -148,20 +177,14 @@ template <bool abort_on_nan> bool common_debug_cb_eval(struct ggml_tensor * t, b if (!is_host) { auto n_bytes = ggml_nbytes(t); - cb_data->data.resize(n_bytes); - ggml_backend_tensor_get(t, cb_data->data.data(), 0, n_bytes); + pimpl->data.resize(n_bytes); + ggml_backend_tensor_get(t, pimpl->data.data(), 0, n_bytes); } if (!ggml_is_quantized(t->type) && matches_filter) { - uint8_t * data = is_host ? (uint8_t *) t->data : cb_data->data.data(); - common_debug_print_tensor<abort_on_nan>(data, t->type, t->ne, t->nb, 3); + uint8_t * data = is_host ? (uint8_t *) t->data : pimpl->data.data(); + common_debug_print_tensor(data, t->type, t->ne, t->nb, 3, pimpl->abort_on_nan); } return true; } - -// Explicit template instantiations -template bool common_debug_cb_eval<false>(ggml_tensor *, bool, void *); -template bool common_debug_cb_eval<true>(ggml_tensor *, bool, void *); -template void common_debug_print_tensor<false>(uint8_t *, ggml_type, const int64_t *, const size_t *, int64_t); -template void common_debug_print_tensor<true>(uint8_t *, ggml_type, const int64_t *, const size_t *, int64_t); diff --git a/common/debug.h b/common/debug.h index e563b40d68f..8b8f8c7aa9f 100644 --- a/common/debug.h +++ b/common/debug.h @@ -1,43 +1,31 @@ #pragma once -#include "common.h" + +#include <memory> #include <string> #include <vector> -#include <regex> // common debug functions and structs -// Print a tensor's detailed data -// data - the tensor's data in byte format -// type - the tensor's quantization type -// ne - the tensor dimensions array -// nb - the tensor strides array -// n - the number of rows/columns to fully print -template <bool abort_on_nan> void common_debug_print_tensor(uint8_t * data, ggml_type type, const int64_t * ne, const size_t * nb, int64_t n); +struct common_params; // Intended to use as callback for ggml_backend_sched_eval_callback // prints tensors that are processed in the computation graph -// by default prints all tensors, but can be configured by creating a `base_callback_data` instance with -// non-empty filter_patterns. See examples/debug.ccp for possible usage patterns -// The template parameter determines whether an error should be thrown whenever a NaN is encountered +// by default prints all tensors, but can be configured by creating a `common_debug_cb_user_data` instance with +// non-empty filter_patterns. See examples/debug.cpp for possible usage patterns +// `common_debug_cb_user_data` contains `abort_on_nan` flag that determines whether an error should be thrown whenever a NaN is encountered // in a tensor (useful for stopping debug sessions on first erroneous tensor) // The callback data will be passed as the third parameter (user_data) -template <bool abort_on_nan> bool common_debug_cb_eval(struct ggml_tensor * t, bool ask, void * user_data); -struct base_callback_data { - std::vector<uint8_t> data; - std::vector<std::regex> tensor_filters; - - base_callback_data() = default; - - base_callback_data(common_params & params, const std::vector<std::string> & filter_patterns) { - for (const auto & pattern : filter_patterns) { - try { - std::string anchored_pattern = "^" + pattern; - tensor_filters.emplace_back(anchored_pattern, std::regex::optimize); - } catch (const std::regex_error & e) { - throw std::runtime_error("Invalid regex pattern '" + pattern + "': " + e.what()); - } - } - params.cb_eval = common_debug_cb_eval<false>; - params.cb_eval_user_data = this; - } +bool common_debug_cb_eval(struct ggml_tensor * t, bool ask, void * user_data); + +struct common_debug_cb_user_data { + struct impl; + std::unique_ptr<impl> pimpl; + + common_debug_cb_user_data(); + ~common_debug_cb_user_data(); + + common_debug_cb_user_data(const common_debug_cb_user_data &) = delete; + common_debug_cb_user_data & operator=(const common_debug_cb_user_data &) = delete; + + common_debug_cb_user_data(common_params & params, const std::vector<std::string> & filter_patterns, bool abort_on_nan = false); }; diff --git a/common/download.cpp b/common/download.cpp index c4bb02d90c2..d6d47b2d2fc 100644 --- a/common/download.cpp +++ b/common/download.cpp @@ -627,7 +627,7 @@ static hf_cache::hf_file find_best_model(const hf_cache::hf_files & files, if (!tag.empty()) { tags.push_back(tag); } else { - tags = {"Q4_K_M", "Q4_0"}; + tags = {"Q4_K_M", "Q8_0"}; } for (const auto & t : tags) { diff --git a/common/fit.cpp b/common/fit.cpp index 4b952889070..aca3f4d4074 100644 --- a/common/fit.cpp +++ b/common/fit.cpp @@ -856,7 +856,7 @@ void common_memory_breakdown_print(const struct llama_context * ctx) { ggml_backend_dev_memory(dev, &free, &total); const size_t self = mb.model + mb.context + mb.compute; - const size_t unaccounted = total - self - free; + const int64_t unaccounted = static_cast<int64_t>(total) - static_cast<int64_t>(free) - static_cast<int64_t>(self); table_data.push_back({ template_gpu, @@ -867,7 +867,7 @@ void common_memory_breakdown_print(const struct llama_context * ctx) { std::to_string(mb.model / MiB), std::to_string(mb.context / MiB), std::to_string(mb.compute / MiB), - std::to_string(unaccounted / MiB)}); + std::to_string(unaccounted / static_cast<int64_t>(MiB))}); } // print memory breakdown for host: diff --git a/common/log.cpp b/common/log.cpp index dec4ef5fc70..4b4159db46f 100644 --- a/common/log.cpp +++ b/common/log.cpp @@ -49,7 +49,7 @@ enum common_log_col : int { }; // disable colors by default -static std::vector<const char *> g_col = { +static const char* g_col[] = { "", "", "", @@ -247,7 +247,6 @@ struct common_log { entries = std::move(new_entries); } - cv.notify_one(); } @@ -265,7 +264,6 @@ struct common_log { { std::unique_lock<std::mutex> lock(mtx); cv.wait(lock, [this]() { return head != tail; }); - cur = entries[head]; head = (head + 1) % entries.size(); @@ -301,7 +299,6 @@ struct common_log { tail = (tail + 1) % entries.size(); } - cv.notify_one(); } @@ -338,7 +335,7 @@ struct common_log { g_col[COMMON_LOG_COL_CYAN] = LOG_COL_CYAN; g_col[COMMON_LOG_COL_WHITE] = LOG_COL_WHITE; } else { - for (size_t i = 0; i < g_col.size(); i++) { + for (size_t i = 0; i < std::size(g_col); i++) { g_col[i] = ""; } } @@ -368,14 +365,20 @@ struct common_log * common_log_init() { } struct common_log * common_log_main() { - static struct common_log log; + // We intentionally leak (i.e. do not delete) the logger singleton because + // common_log destructor called at DLL teardown phase will cause hanging on Windows. + // OS will release resources anyway so it should not be a significant issue, + // though this design may cause logs to be lost if not flushed before the program exits. + // Refer to https://github.com/ggml-org/llama.cpp/issues/22142 for details. + static struct common_log * log; static std::once_flag init_flag; std::call_once(init_flag, [&]() { + log = new common_log; // Set default to auto-detect colors - log.set_colors(tty_can_use_colors()); + log->set_colors(tty_can_use_colors()); }); - return &log; + return log; } void common_log_pause(struct common_log * log) { diff --git a/common/log.h b/common/log.h index cf32ca185ca..8ee3e6b13b9 100644 --- a/common/log.h +++ b/common/log.h @@ -49,7 +49,11 @@ void common_log_default_callback(enum ggml_log_level level, const char * text, v struct common_log; struct common_log * common_log_init(); -struct common_log * common_log_main(); // singleton, automatically destroys itself on exit + +// Singleton, intentionally leaked to avoid Windows teardown hangs. +// Call common_log_flush() before exit if you want to ensure all logs are flushed. +struct common_log * common_log_main(); + void common_log_pause (struct common_log * log); // pause the worker thread, not thread-safe void common_log_resume(struct common_log * log); // resume the worker thread, not thread-safe void common_log_free (struct common_log * log); diff --git a/common/preset.cpp b/common/preset.cpp index 57ccd000b5c..9187a67f05a 100644 --- a/common/preset.cpp +++ b/common/preset.cpp @@ -43,7 +43,7 @@ static std::set<std::string> get_remote_preset_whitelist(const std::map<std::str for (const auto & it : key_to_opt) { const std::string & key = it.first; const common_arg & opt = it.second; - if (allowed_options.find(key) != allowed_options.end() || opt.is_sparam) { + if (allowed_options.find(key) != allowed_options.end() || opt.is_sampling) { allowed_keys.insert(key); // also add variant keys (args without leading dashes and env vars) for (const auto & arg : opt.get_args()) { diff --git a/common/reasoning-budget.cpp b/common/reasoning-budget.cpp index cc408a68699..74fce536777 100644 --- a/common/reasoning-budget.cpp +++ b/common/reasoning-budget.cpp @@ -122,6 +122,20 @@ static void common_reasoning_budget_accept(struct llama_sampler * smpl, llama_to } break; case REASONING_BUDGET_DONE: + // Re-arm on a new start tag: some models emit multiple <think> blocks + // per response, and each should get a fresh budget window. + if (ctx->start_matcher.advance(token)) { + ctx->state = REASONING_BUDGET_COUNTING; + ctx->remaining = ctx->budget; + ctx->end_matcher.reset(); + LOG_INF("reasoning-budget: re-activated on new start tag, budget=%d tokens\n", ctx->budget); + + if (ctx->remaining <= 0) { + ctx->state = REASONING_BUDGET_FORCING; + ctx->force_pos = 0; + LOG_INF("reasoning-budget: budget=0, forcing immediately\n"); + } + } break; } } diff --git a/common/speculative.cpp b/common/speculative.cpp index 20e38bec46c..c114bccde1a 100644 --- a/common/speculative.cpp +++ b/common/speculative.cpp @@ -61,18 +61,26 @@ static bool common_speculative_are_compatible( LOG_DBG("%s: vocab_type dft: %d\n", __func__, vocab_type_dft); if (vocab_type_tgt != vocab_type_dft) { - LOG_DBG("%s: draft model vocab type must match target model to use speculation but ", __func__); - LOG_DBG("vocab_type_dft = %d while vocab_type_tgt = %d\n", vocab_type_dft, vocab_type_tgt); + LOG_WRN("%s: draft model vocab type must match target model to use speculation but " + "vocab_type_dft = %d while vocab_type_tgt = %d\n", __func__, vocab_type_dft, vocab_type_tgt); return false; } - if ( - llama_vocab_get_add_bos(vocab_tgt) != llama_vocab_get_add_bos(vocab_dft) || - llama_vocab_get_add_eos(vocab_tgt) != llama_vocab_get_add_eos(vocab_dft) || - llama_vocab_bos(vocab_tgt) != llama_vocab_bos(vocab_dft) || - llama_vocab_eos(vocab_tgt) != llama_vocab_eos(vocab_dft) - ) { - LOG_DBG("%s: draft model special tokens must match target model to use speculation\n", __func__); + if (llama_vocab_get_add_bos(vocab_tgt) != llama_vocab_get_add_bos(vocab_dft) || + (llama_vocab_get_add_bos(vocab_tgt) && llama_vocab_bos(vocab_tgt) != llama_vocab_bos(vocab_dft))) { + LOG_WRN("%s: draft model bos tokens must match target model to use speculation. add: %d - %d, id: %d - %d)\n", + __func__, + llama_vocab_get_add_bos(vocab_tgt), llama_vocab_get_add_bos(vocab_dft), + llama_vocab_bos(vocab_tgt), llama_vocab_bos(vocab_dft)); + return false; + } + + if (llama_vocab_get_add_eos(vocab_tgt) != llama_vocab_get_add_eos(vocab_dft) || + (llama_vocab_get_add_eos(vocab_tgt) && llama_vocab_eos(vocab_tgt) != llama_vocab_eos(vocab_dft))) { + LOG_WRN("%s: draft model eos tokens must match target model to use speculation. add: %d - %d, id: %d - %d)\n", + __func__, + llama_vocab_get_add_eos(vocab_tgt), llama_vocab_get_add_eos(vocab_dft), + llama_vocab_eos(vocab_tgt), llama_vocab_eos(vocab_dft)); return false; } @@ -143,6 +151,9 @@ struct common_speculative_state { llama_tokens & result) = 0; virtual void accept(uint16_t n_accepted) = 0; + + virtual int32_t n_max(const common_params_speculative & params) const = 0; + virtual int32_t n_min(const common_params_speculative & params) const = 0; }; struct common_speculative_checkpoint { @@ -288,6 +299,8 @@ struct common_speculative_state_draft : public common_speculative_state { const llama_tokens & prompt_tgt, llama_token id_last, llama_tokens & result) override { + const auto & sparams = params.draft; + auto * spec = this; auto & batch = spec->batch; @@ -301,7 +314,7 @@ struct common_speculative_state_draft : public common_speculative_state { int reuse_i = 0; // index of part to be reused in prompt_dft int reuse_n = 0; // length of part to be reused in prompt_dft - const int n_ctx = llama_n_ctx(ctx_dft) - params.n_max; + const int n_ctx = llama_n_ctx(ctx_dft) - sparams.n_max; llama_tokens prompt_cnv; if (!spec->vocab_cmpt) { @@ -359,7 +372,7 @@ struct common_speculative_state_draft : public common_speculative_state { } result.clear(); - result.reserve(params.n_max); + result.reserve(sparams.n_max); bool needs_ckpt = use_ckpt && prompt_dft.size() > 0; if (reuse_n == 0 || (use_ckpt && reuse_i > 0)) { @@ -372,7 +385,7 @@ struct common_speculative_state_draft : public common_speculative_state { for (int i = reuse_i + reuse_n + 1; i < (int) prompt_dft.size(); ++i) { result.push_back(prompt_dft[i]); - if (params.n_max <= (int) result.size()) { + if (sparams.n_max <= (int) result.size()) { break; } } @@ -465,7 +478,7 @@ struct common_speculative_state_draft : public common_speculative_state { common_sampler_reset(smpl); // sample n_draft tokens from the draft model - for (int i = 0; i < params.n_max; ++i) { + for (int i = 0; i < sparams.n_max; ++i) { common_batch_clear(batch); common_sampler_sample(smpl, ctx_dft, 0, true); @@ -484,12 +497,12 @@ struct common_speculative_state_draft : public common_speculative_state { result.push_back(id); - if (params.n_max <= (int) result.size()) { + if (sparams.n_max <= (int) result.size()) { break; } // only collect very high-confidence draft tokens - if (cur_p->data[0].p < params.p_min) { + if (cur_p->data[0].p < sparams.p_min) { break; } @@ -510,10 +523,14 @@ struct common_speculative_state_draft : public common_speculative_state { detokenized = replace_to_tgt(detokenized); LOG_DBG("draft->main detokenized string: '%s'\n", detokenized.c_str()); result = common_tokenize(ctx_tgt, detokenized, false, true); - if (result.size() > (size_t)params.n_max) { - result.resize(params.n_max); + if (result.size() > (size_t) sparams.n_max) { + result.resize(sparams.n_max); } } + + if (result.size() < (size_t) sparams.n_min) { + result.clear(); + } } void accept(uint16_t n_accepted) override { @@ -521,6 +538,14 @@ struct common_speculative_state_draft : public common_speculative_state { GGML_UNUSED(n_accepted); } + int32_t n_max(const common_params_speculative & params) const override { + return params.draft.n_max; + } + + int32_t n_min(const common_params_speculative & params) const override { + return params.draft.n_min; + } + std::string replace_to_dft(const std::string & input) const { std::string result = input; @@ -573,6 +598,14 @@ struct common_speculative_state_eagle3 : public common_speculative_state { // noop GGML_UNUSED(n_accepted); } + + int32_t n_max(const common_params_speculative & params) const override { + return params.draft.n_max; + } + + int32_t n_min(const common_params_speculative & params) const override { + return params.draft.n_min; + } }; // state of self-speculation (simple implementation, not ngram-map) @@ -602,19 +635,27 @@ struct common_speculative_state_ngram_simple : public common_speculative_state { // noop GGML_UNUSED(n_accepted); } + + int32_t n_max(const common_params_speculative & /*params*/) const override { + return config.size_mgram; + } + + int32_t n_min(const common_params_speculative & /*params*/) const override { + return config.size_mgram; + } }; struct common_speculative_state_ngram_map_k : public common_speculative_state { // draft ngram map for speculative decoding without draft model - common_ngram_map map; + common_ngram_map config; common_speculative_state_ngram_map_k( enum common_speculative_type type, - common_ngram_map map) - : common_speculative_state(type), map(std::move(map)) {} + common_ngram_map config) + : common_speculative_state(type), config(std::move(config)) {} void begin(const llama_tokens & prompt) override { - common_ngram_map_begin(map, prompt); + common_ngram_map_begin(config, prompt); } void draft( @@ -622,12 +663,20 @@ struct common_speculative_state_ngram_map_k : public common_speculative_state { const llama_tokens & prompt_tgt, llama_token id_last, llama_tokens & result) override { - common_ngram_map_draft(map, prompt_tgt, id_last, result); + common_ngram_map_draft(config, prompt_tgt, id_last, result); GGML_UNUSED(params); } void accept(uint16_t n_accepted) override { - common_ngram_map_accept(map, n_accepted); + common_ngram_map_accept(config, n_accepted); + } + + int32_t n_max(const common_params_speculative & /*params*/) const override { + return config.size_value; + } + + int32_t n_min(const common_params_speculative & /*params*/) const override { + return config.size_value; } }; @@ -684,7 +733,7 @@ struct common_speculative_state_ngram_mod : public common_speculative_state { const llama_tokens & prompt_tgt, llama_token id_last, llama_tokens & result) override { - GGML_UNUSED(params); + const auto & sparams = params.ngram_mod; n_draft_last = 0; @@ -704,16 +753,16 @@ struct common_speculative_state_ngram_mod : public common_speculative_state { i_last = cur_len - n; } - result.resize(n + params.n_max); + result.resize(n + sparams.n_max); for (size_t i = 0; i < n - 1; ++i) { result[i] = prompt_tgt[cur_len - n + 1 + i]; } result[n - 1] = id_last; - for (int i = 0; i < params.n_max; ++i) { + for (int i = 0; i < sparams.n_max; ++i) { const llama_token token = mod.get(result.data() + i); if (token == common_ngram_mod::EMPTY) { - if (i < params.n_min) { + if (i < sparams.n_min) { result.clear(); return; } @@ -756,6 +805,14 @@ struct common_speculative_state_ngram_mod : public common_speculative_state { } } } + + int32_t n_max(const common_params_speculative & params) const override { + return params.ngram_mod.n_max; + } + + int32_t n_min(const common_params_speculative & params) const override { + return params.ngram_mod.n_min; + } }; struct common_speculative_state_ngram_cache : public common_speculative_state { @@ -849,6 +906,14 @@ struct common_speculative_state_ngram_cache : public common_speculative_state { // TODO: noop GGML_UNUSED(n_accepted); } + + int32_t n_max(const common_params_speculative & /*params*/) const override { + return n_draft; + } + + int32_t n_min(const common_params_speculative & /*params*/) const override { + return 0; + } }; struct common_speculative { @@ -857,11 +922,13 @@ struct common_speculative { common_speculative_state * curr_impl = nullptr; // current implementation in use (for stats) }; -static common_ngram_map get_common_ngram_map(const common_speculative_config & config) { - uint16_t size_key = config.params.ngram_size_n; - uint16_t size_value = config.params.ngram_size_m; - bool key_only = (config.type == COMMON_SPECULATIVE_TYPE_NGRAM_MAP_K); - uint16_t min_hits = config.params.ngram_min_hits; +static common_ngram_map get_common_ngram_map( + common_speculative_type type, + const common_params_speculative_ngram_map & config) { + uint16_t size_key = config.size_n; + uint16_t size_value = config.size_m; + bool key_only = type == COMMON_SPECULATIVE_TYPE_NGRAM_MAP_K; + uint16_t min_hits = config.min_hits; return common_ngram_map(size_key, size_value, key_only, min_hits); } @@ -919,8 +986,8 @@ common_speculative * common_speculative_init( common_params_speculative & params, llama_context * ctx_tgt) { llama_context * ctx_dft = nullptr; - if (params.model_dft) { - ctx_dft = llama_init_from_model(params.model_dft, params.cparams_dft); + if (params.draft.model) { + ctx_dft = llama_init_from_model(params.draft.model, params.draft.cparams); if (ctx_dft == nullptr) { LOG_ERR("%s", "failed to create draft context\n"); return nullptr; @@ -930,7 +997,7 @@ common_speculative * common_speculative_init( // Compute the implementations to use based on the config and their order of preference std::vector<common_speculative_config> configs = {}; // list of speculative configs to try { - bool has_draft = !params.mparams_dft.path.empty(); + bool has_draft = !params.draft.mparams.path.empty(); bool has_draft_eagle3 = false; // TODO PR-18039: if params.speculative.eagle3 bool has_ngram_cache = (params.type == COMMON_SPECULATIVE_TYPE_NGRAM_CACHE); @@ -953,16 +1020,17 @@ common_speculative * common_speculative_init( configs.push_back(common_speculative_config(COMMON_SPECULATIVE_TYPE_NGRAM_MAP_K4V, params)); } if (has_ngram_mod) { - // shared instance for all speculative decoding contexts - if (!params.ngram_mod) { - params.ngram_mod = std::make_shared<common_ngram_mod>(params.ngram_size_n, 4*1024*1024); + auto & sparams = params.ngram_mod; + + if (!sparams.obj) { + sparams.obj = std::make_shared<common_ngram_mod>(sparams.n_match, 4*1024*1024); - LOG_INF("%s: initialized ngram_mod with n=%d, size=%zu (%.3f MB)\n", __func__, - params.ngram_size_n, params.ngram_mod->size(), - (float)(params.ngram_mod->size_bytes())/1024/1024); + LOG_INF("%s: initialized ngram_mod with n_match=%d, size=%zu (%.3f MB)\n", __func__, + sparams.n_match, sparams.obj->size(), (float)(sparams.obj->size_bytes())/1024/1024); - if (params.ngram_size_n < 16) { - LOG_WRN("%s: ngram_mod n=%d is too small - poor quality is possible, see: https://github.com/ggml-org/llama.cpp/pull/19164\n", __func__, params.ngram_size_n); + if (sparams.n_match < 16) { + LOG_WRN("%s: ngram_mod n_match=%d is too small - poor quality is possible, " + "see: https://github.com/ggml-org/llama.cpp/pull/19164\n", __func__, sparams.n_match); } } @@ -992,7 +1060,7 @@ common_speculative * common_speculative_init( impls.push_back(std::make_unique<common_speculative_state_draft>(config.type, /* .ctx_tgt = */ ctx_tgt, /* .ctx_dft = */ ctx_dft, - /* .replacements = */ params.replacements, + /* .replacements = */ params.draft.replacements, /* .use_ckpt = */ use_ckpt )); break; @@ -1002,18 +1070,18 @@ common_speculative * common_speculative_init( break; } case COMMON_SPECULATIVE_TYPE_NGRAM_SIMPLE: { - common_ngram_map ngram_map = get_common_ngram_map(config); + common_ngram_map ngram_map = get_common_ngram_map(config.type, config.params.ngram_simple); uint16_t ngram_size_key = ngram_map.size_key; uint16_t mgram_size_value = ngram_map.size_value; auto config_simple = common_ngram_simple_config { - /* .size_ngram = */ ngram_size_key, - /* .size_mgram = */ mgram_size_value + /* .size_ngram = */ ngram_size_key, + /* .size_mgram = */ mgram_size_value }; auto state = std::make_unique<common_speculative_state_ngram_simple>( - /* .type = */ config.type, - /* .state = */ config_simple + /* .type = */ config.type, + /* .state = */ config_simple ); impls.push_back(std::move(state)); break; @@ -1022,18 +1090,17 @@ common_speculative * common_speculative_init( case COMMON_SPECULATIVE_TYPE_NGRAM_MAP_K4V: { impls.push_back(std::make_unique<common_speculative_state_ngram_map_k>( (config.type), - get_common_ngram_map(config) + get_common_ngram_map(config.type, config.params.ngram_map_k) )); break; } case COMMON_SPECULATIVE_TYPE_NGRAM_MOD: { - GGML_ASSERT(config.params.ngram_mod); - impls.push_back(std::make_unique<common_speculative_state_ngram_mod>(config.type, *config.params.ngram_mod)); + GGML_ASSERT(config.params.ngram_mod.obj); + impls.push_back(std::make_unique<common_speculative_state_ngram_mod>(config.type, *config.params.ngram_mod.obj)); break; } case COMMON_SPECULATIVE_TYPE_NGRAM_CACHE: { - auto state = create_state_ngram_cache( - params.lookup_cache_static, params.lookup_cache_dynamic, config); + auto state = create_state_ngram_cache(params.ngram_cache.lookup_cache_static, params.ngram_cache.lookup_cache_dynamic, config); impls.push_back(std::make_unique<common_speculative_state_ngram_cache>(state)); break; } @@ -1091,6 +1158,15 @@ llama_tokens common_speculative_draft( impl->n_call_draft++; } + { + const int n_min = impl->n_min(params); + + if (!result.empty() && (int) result.size() < n_min) { + LOG_DBG("%s: ignoring small draft: %d < %d\n", __func__, (int) result.size(), n_min); + result.clear(); + } + } + if (!result.empty()) { LOG_DBG("%s: called impl %s, hist size = %zu, call_count = %zu, gen = %zu\n", __func__, common_speculative_type_to_str(impl.get()->type).c_str(), prompt_tgt.size(), @@ -1100,7 +1176,7 @@ llama_tokens common_speculative_draft( impl->n_gen_drafts++; impl->n_gen_tokens += result.size(); - break; // We have a draft, so break out of the loop and return it. + break; // we have a draft, so break out of the loop and return it. } } @@ -1128,6 +1204,32 @@ void common_speculative_accept(common_speculative * spec, uint16_t n_accepted) { } } +int32_t common_speculative_n_max(const common_speculative * spec, const common_params_speculative & params) { + if (spec == nullptr) { + return 0; + } + + int32_t n_max = 0; + for (const auto & impl : spec->impls) { + n_max = std::max(n_max, impl->n_max(params)); + } + + return n_max; +} + +int32_t common_speculative_n_min(const common_speculative * spec, const common_params_speculative & params) { + if (spec == nullptr) { + return 0; + } + + int32_t n_min = 0; + for (const auto & impl : spec->impls) { + n_min = std::max(n_min, impl->n_min(params)); + } + + return n_min; +} + void common_speculative_print_stats(const common_speculative * spec) { if (spec == nullptr) { return; diff --git a/common/speculative.h b/common/speculative.h index bca78d32b5b..14744763170 100644 --- a/common/speculative.h +++ b/common/speculative.h @@ -33,6 +33,9 @@ llama_tokens common_speculative_draft( // informs the speculative decoder that n_accepted tokens were accepted by the target model void common_speculative_accept(common_speculative * spec, uint16_t n_accepted); +int32_t common_speculative_n_max(const common_speculative * spec, const common_params_speculative & params); +int32_t common_speculative_n_min(const common_speculative * spec, const common_params_speculative & params); + // print statistics about the speculative decoding void common_speculative_print_stats(const common_speculative * spec); diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index 93d5509e6af..90c2b7094c7 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -272,6 +272,22 @@ def index_tensors(self, remote_hf_model_id: str | None = None) -> dict[str, Call return tensors + @staticmethod + def _scale_is_trivial(scale: Tensor) -> bool: + return scale.numel() <= 1 and abs(float(scale.float().sum()) - 1.0) < 1e-6 + + def _write_scale_tensor(self, scale_name: str, scale: Tensor): + if not self._scale_is_trivial(scale): + scale_f32 = scale.float().numpy().flatten() + logger.info(f" + {scale_name} (per-tensor scale, shape [{scale_f32.size}])") + self.gguf_writer.add_tensor(scale_name, scale_f32) + + def _write_scales_tensor(self, scale_name: str, scales: list[float]): + if not np.allclose(scales, 1.0, atol=1e-6): + scale_vals = np.array(scales, dtype=np.float32) + logger.info(f" + {scale_name} (per-expert scale, shape [{len(scales)}])") + self.gguf_writer.add_tensor(scale_name, scale_vals) + def dequant_model(self): # If all quantized tensors were already handled (e.g. pure NVFP4), skip if self._is_nvfp4 and not any(k.endswith((".weight_scale", ".weight_scale_inv")) for k in self.model_tensors): @@ -494,7 +510,7 @@ def dequant_packed(w: Tensor, scale: Tensor, shape_tensor: Tensor, zero_point: T s = self.model_tensors[name] self.model_tensors[weight_name] = lambda w=w, s=s: dequant_simple(w(), s(), None) tensors_to_remove.append(name) - if name.endswith((".k_scale", ".v_scale")): + if name.endswith((".input_scale", ".k_scale", ".v_scale")): tensors_to_remove.append(name) elif quant_method is not None: raise NotImplementedError(f"Quant method is not yet supported: {quant_method!r}") @@ -602,10 +618,6 @@ def _nvfp4_pack(weight: Tensor, scale: Tensor) -> tuple[np.ndarray, list[int]]: raw = np.concatenate([d_grouped, qs_grouped], axis=-1).reshape(out_features, n_super * 36) return raw, [out_features, n_super * 64] - @staticmethod - def _nvfp4_scale2_is_trivial(scale2: Tensor) -> bool: - return scale2.numel() <= 1 and abs(float(scale2.float().sum()) - 1.0) < 1e-6 - def _repack_nvfp4(self, name: str, weight: Tensor, scale: Tensor, scale2: Tensor, input_scale: Tensor): if "language_model." in name: name = name.replace("language_model.", "") @@ -616,19 +628,8 @@ def _repack_nvfp4(self, name: str, weight: Tensor, scale: Tensor, scale2: Tensor logger.info(f"Repacked {new_name} with shape {shape} and quantization NVFP4") self.gguf_writer.add_tensor(new_name, raw, raw_dtype=gguf.GGMLQuantizationType.NVFP4) - # Emit per-tensor scale2 as a separate F32 tensor when non-trivial - if not self._nvfp4_scale2_is_trivial(scale2): - scale2_f32 = scale2.float().numpy().flatten() - scale_name = new_name.replace(".weight", ".scale") - logger.info(f" + {scale_name} (per-tensor NVFP4 scale2, shape [{scale2_f32.size}])") - self.gguf_writer.add_tensor(scale_name, scale2_f32) - - # Emit per-tensor input_scale as a separate F32 tensor when non-trivial - if not self._nvfp4_scale2_is_trivial(input_scale): - input_scale_f32 = input_scale.float().numpy().flatten() - input_scale_name = new_name.replace(".weight", ".input_scale") - logger.info(f" + {input_scale_name} (per-tensor NVFP4 input_scale, shape [{input_scale_f32.size}])") - self.gguf_writer.add_tensor(input_scale_name, input_scale_f32) + self._write_scale_tensor(new_name.replace(".weight", ".scale"), scale2) + self._write_scale_tensor(new_name.replace(".weight", ".input_scale"), input_scale) def _generate_nvfp4_tensors(self): # Per-layer expert merging to avoid holding all experts in memory @@ -719,24 +720,17 @@ def _flush_nvfp4_experts(self, key, expert_blocks, expert_scales, expert_input_s logger.info(f"Repacked {new_name} with shape [{len(experts)}, {shape[0]}, {shape[1]}] and quantization NVFP4") self.gguf_writer.add_tensor(new_name, merged, raw_dtype=gguf.GGMLQuantizationType.NVFP4) - # Emit per-expert scale2 tensor if any expert has non-trivial scale2 scales.sort(key=lambda x: x[0]) - scale_vals = np.array([s[1] for s in scales], dtype=np.float32) - if not np.allclose(scale_vals, 1.0, atol=1e-6): - scale_name = new_name.replace(".weight", ".scale") - logger.info(f" + {scale_name} (per-expert NVFP4 scale2, shape [{len(scales)}])") - self.gguf_writer.add_tensor(scale_name, scale_vals) + self._write_scales_tensor(new_name.replace(".weight", ".scale"), [s[1] for s in scales]) - # Emit per-expert input_scale tensor if any expert has non-trivial input_scale input_scales.sort(key=lambda x: x[0]) - input_scale_vals = np.array([s[1] for s in input_scales], dtype=np.float32) - if not np.allclose(input_scale_vals, 1.0, atol=1e-6): - input_scale_name = new_name.replace(".weight", ".input_scale") - logger.info(f" + {input_scale_name} (per-expert NVFP4 input_scale, shape [{len(input_scales)}])") - self.gguf_writer.add_tensor(input_scale_name, input_scale_vals) + self._write_scales_tensor(new_name.replace(".weight", ".input_scale"), [s[1] for s in input_scales]) del experts, merged + def _needs_nvfp4_processing(self) -> bool: + return True + def prepare_tensors(self): # detect NVFP4 quantization (ModelOpt format) quant_algo = (self.hparams.get("quantization_config") or {}).get("quant_algo") @@ -767,7 +761,7 @@ def prepare_tensors(self): # NVFP4 weights are repacked and written directly to gguf_writer. # This must run before dequant_model so NVFP4 tensors are removed # from model_tensors, leaving only non-NVFP4 (e.g. FP8) for dequant. - if self._is_nvfp4: + if self._is_nvfp4 and self._needs_nvfp4_processing(): self._generate_nvfp4_tensors() self.dequant_model() @@ -2199,6 +2193,10 @@ def __init__(self, *args, **kwargs): # merge configs self.preprocessor_config = {**self.preprocessor_config, **cfg} + def _needs_nvfp4_processing(self) -> bool: + # nvfp4 quantization applies to the text model only. + return False + def get_vision_config(self) -> dict[str, Any] | None: config_name = "vision_config" if not self.is_mistral_format else "vision_encoder" return self.global_config.get(config_name) @@ -4459,6 +4457,12 @@ def get_vision_config(self) -> dict[str, Any] | None: } return vision_config + def dequant_model(self): + if self._is_nvfp4: + # Skip nvfp4 quantization for vision/audio model. + return + super().dequant_model() + def set_gguf_parameters(self): if "image_mean" not in self.preprocessor_config: self.preprocessor_config["image_mean"] = [0.485, 0.456, 0.406] @@ -4482,6 +4486,10 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter if "input_conditioner" in name: return + # mtmd does not support video yet so skip tensors related to video. + if "radio_model.model.patch_generator.video_embedder" in name: + return + # RADIO's pos_embed doesn't have .weight suffix, but clip.cpp expects it if "patch_generator.pos_embed" in name: if not name.endswith(".weight"): @@ -10829,7 +10837,11 @@ def __init__(self, *args, **kwargs): # uses self.model_arch to build the tensor name map, and all MoE-specific # mappings would be missed if it were called with the default non-MoE arch. hparams = ModelBase.load_hparams(args[0], self.is_mistral_format) - if "num_experts_per_tok" in hparams: + has_moe_params = ( + "num_experts_per_tok" in hparams + or (isinstance(hparams.get("llm_config"), dict) and "num_experts_per_tok" in hparams["llm_config"]) + ) + if has_moe_params: self.model_arch = gguf.MODEL_ARCH.NEMOTRON_H_MOE self.is_moe = True @@ -10976,6 +10988,11 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter if name.startswith(("vision_model.", "mlp1.")): return + if name.startswith(("sound_encoder.")): + return + if name.startswith(("sound_projection.")): + return + # Strip language_model. prefix for VLM models (e.g., Nemotron Nano 12B v2 VL) if name.startswith("language_model."): name = name[len("language_model."):] diff --git a/docs/backend/SYCL.md b/docs/backend/SYCL.md index 1b86b3d4acb..7ebb4ec0297 100644 --- a/docs/backend/SYCL.md +++ b/docs/backend/SYCL.md @@ -51,6 +51,12 @@ The packages for FP32 and FP16 would have different accuracy and performance on ## News +- 2026.04 + + - Optimize mul_mat by reorder feature for data type: Q4_K, Q5_K, Q_K, Q8_0. + - Fused MoE. + - Upgrate CI and built package for oneAPI 2025.3.3, support Ubuntu 24.04 built package. + - 2026.03 - Support Flash-Attention: less memory usage, performance impact depends on LLM. @@ -349,6 +355,12 @@ Choose one of following methods to run. ./examples/sycl/test.sh ``` +- Run llama-server: + +```sh +./examples/sycl/start-svr.sh -m PATH/MODEL_FILE +``` + 2. Command line Launch inference @@ -637,10 +649,18 @@ Choose one of following methods to run. 1. Script +- Run test: + ``` examples\sycl\win-test.bat ``` +- Run llama-server: + +``` +examples\sycl\win-start-svr.bat -m PATH\MODEL_FILE +``` + 2. Command line Launch inference diff --git a/docs/ops.md b/docs/ops.md index 12b67151713..af0dd283675 100644 --- a/docs/ops.md +++ b/docs/ops.md @@ -26,7 +26,7 @@ Legend: | CLAMP | ❌ | ✅ | ✅ | ✅ | ✅ | 🟡 | 🟡 | 🟡 | ✅ | ❌ | ❌ | | CONCAT | ❌ | ✅ | ✅ | 🟡 | ✅ | 🟡 | ✅ | ✅ | ✅ | ❌ | ❌ | | CONT | ❌ | 🟡 | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | 🟡 | ❌ | ❌ | -| CONV_2D | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | +| CONV_2D | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | | CONV_2D_DW | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | CONV_3D | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | CONV_TRANSPOSE_1D | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | @@ -60,7 +60,7 @@ Legend: | GROUP_NORM | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | | HARDSIGMOID | ❌ | ✅ | ✅ | 🟡 | ✅ | ❌ | ✅ | 🟡 | ✅ | ❌ | ❌ | | HARDSWISH | ❌ | ✅ | ✅ | 🟡 | ✅ | ❌ | ✅ | 🟡 | ✅ | ❌ | ❌ | -| IM2COL | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | +| IM2COL | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | | IM2COL_3D | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | | L2_NORM | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | | LEAKY_RELU | ❌ | ✅ | ✅ | ✅ | 🟡 | ❌ | ✅ | 🟡 | ❌ | ❌ | ❌ | @@ -105,7 +105,7 @@ Legend: | SQR | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ❌ | ❌ | | SQRT | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 | 🟡 | ✅ | ❌ | ❌ | | SSM_CONV | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | -| SSM_SCAN | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | 🟡 | ❌ | ❌ | ❌ | +| SSM_SCAN | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | 🟡 | ✅ | ❌ | ❌ | | STEP | ❌ | ✅ | ✅ | 🟡 | ✅ | ❌ | ✅ | 🟡 | ✅ | ❌ | ❌ | | SUB | ❌ | ✅ | ✅ | ✅ | 🟡 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | | SUM | ❌ | 🟡 | ✅ | 🟡 | 🟡 | ❌ | 🟡 | 🟡 | 🟡 | ❌ | ❌ | diff --git a/docs/ops/WebGPU.csv b/docs/ops/WebGPU.csv index f11a3fa3726..681434bc74c 100644 --- a/docs/ops/WebGPU.csv +++ b/docs/ops/WebGPU.csv @@ -334,10 +334,18 @@ "WebGPU: WebGPU","GET_ROWS","type=q8_0,n=256,m=5,r=4,be1=1,be2=1,v=1","support","1","yes","WebGPU" "WebGPU: WebGPU","GET_ROWS","type=q8_0,n=256,m=5,r=4,be1=7,be2=1,v=0","support","1","yes","WebGPU" "WebGPU: WebGPU","GET_ROWS","type=q8_0,n=256,m=5,r=4,be1=7,be2=1,v=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","GET_ROWS","type=q1_0,n=256,m=5,r=4,be1=1,be2=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS","type=q1_0,n=256,m=5,r=4,be1=1,be2=1,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS","type=q1_0,n=256,m=5,r=4,be1=7,be2=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS","type=q1_0,n=256,m=5,r=4,be1=7,be2=1,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS","type=mxfp4,n=256,m=5,r=4,be1=1,be2=1,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS","type=mxfp4,n=256,m=5,r=4,be1=1,be2=1,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS","type=mxfp4,n=256,m=5,r=4,be1=7,be2=1,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS","type=mxfp4,n=256,m=5,r=4,be1=7,be2=1,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS","type=nvfp4,n=256,m=5,r=4,be1=1,be2=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS","type=nvfp4,n=256,m=5,r=4,be1=1,be2=1,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS","type=nvfp4,n=256,m=5,r=4,be1=7,be2=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS","type=nvfp4,n=256,m=5,r=4,be1=7,be2=1,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS","type=q2_K,n=256,m=5,r=4,be1=1,be2=1,v=0","support","1","yes","WebGPU" "WebGPU: WebGPU","GET_ROWS","type=q2_K,n=256,m=5,r=4,be1=1,be2=1,v=1","support","1","yes","WebGPU" "WebGPU: WebGPU","GET_ROWS","type=q2_K,n=256,m=5,r=4,be1=7,be2=1,v=0","support","1","yes","WebGPU" @@ -415,8 +423,12 @@ "WebGPU: WebGPU","GET_ROWS_BACK","type=q5_1,n=256,m=5,r=4,b=1,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS_BACK","type=q8_0,n=256,m=5,r=4,b=1,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS_BACK","type=q8_0,n=256,m=5,r=4,b=1,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS_BACK","type=q1_0,n=256,m=5,r=4,b=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS_BACK","type=q1_0,n=256,m=5,r=4,b=1,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS_BACK","type=mxfp4,n=256,m=5,r=4,b=1,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS_BACK","type=mxfp4,n=256,m=5,r=4,b=1,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS_BACK","type=nvfp4,n=256,m=5,r=4,b=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","GET_ROWS_BACK","type=nvfp4,n=256,m=5,r=4,b=1,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS_BACK","type=q2_K,n=256,m=5,r=4,b=1,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS_BACK","type=q2_K,n=256,m=5,r=4,b=1,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","GET_ROWS_BACK","type=q3_K,n=256,m=5,r=4,b=1,v=0","support","0","no","WebGPU" @@ -570,6 +582,18 @@ "WebGPU: WebGPU","SET_ROWS","type=q8_0,type_idx=i64,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=q8_0,type_idx=i64,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=q8_0,type_idx=i64,ne=[96,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[384,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[384,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[384,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=q1_0,type_idx=i64,ne=[384,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=mxfp4,type_idx=i64,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=mxfp4,type_idx=i64,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=mxfp4,type_idx=i64,ne=[96,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","WebGPU" @@ -582,6 +606,18 @@ "WebGPU: WebGPU","SET_ROWS","type=mxfp4,type_idx=i64,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=mxfp4,type_idx=i64,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=mxfp4,type_idx=i64,ne=[96,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[192,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[256,5,1,3],nr23=[1,1],r=1,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[256,11,1,1],nr23=[2,3],r=7,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[192,3,1,1],nr23=[2,3],r=2,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[256,5,7,3],nr23=[1,1],r=1,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[256,11,1,7],nr23=[2,3],r=7,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[192,3,7,1],nr23=[2,3],r=2,v=0","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[256,5,7,3],nr23=[1,1],r=1,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[256,11,1,7],nr23=[2,3],r=7,v=1","support","0","no","WebGPU" +"WebGPU: WebGPU","SET_ROWS","type=nvfp4,type_idx=i64,ne=[192,3,7,1],nr23=[2,3],r=2,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=q2_K,type_idx=i64,ne=[256,5,1,3],nr23=[1,1],r=1,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=q2_K,type_idx=i64,ne=[256,11,1,1],nr23=[2,3],r=7,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","SET_ROWS","type=q2_K,type_idx=i64,ne=[768,3,1,1],nr23=[2,3],r=2,v=0","support","0","no","WebGPU" @@ -926,94 +962,94 @@ "WebGPU: WebGPU","POOL_1D","pool_type=max,type_input=f32,ne_input=[10,3,2,1],k0=3,s0=2,p0=1","support","0","no","WebGPU" "WebGPU: WebGPU","POOL_1D","pool_type=max,type_input=f32,ne_input=[11,1,3,2],k0=3,s0=2,p0=1","support","0","no","WebGPU" "WebGPU: WebGPU","POOL_1D","pool_type=max,type_input=f32,ne_input=[128,2,1,3],k0=3,s0=2,p0=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[3000,128,1,1],ne_kernel=[3,128,1280,1],s0=1,s1=0,p0=1,p1=0,d0=1,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f32,ne_input=[3000,128,1,1],ne_kernel=[3,128,1280,1],s0=1,s1=0,p0=1,p1=0,d0=1,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[3000,128,1,1],ne_kernel=[3,128,1280,1],s0=1,s1=0,p0=1,p1=0,d0=1,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=0,p1=0,d0=1,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=0,p1=0,d0=3,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=3,p1=0,d0=1,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=3,p1=0,d0=3,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=0,p1=0,d0=1,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=0,p1=0,d0=3,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=3,p1=0,d0=1,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=3,p1=0,d0=3,d1=0,is_2D=0","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[10,10,3,1],ne_kernel=[3,3,3,1],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f32,ne_input=[10,10,3,1],ne_kernel=[3,3,3,1],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[10,10,3,1],ne_kernel=[3,3,3,1],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,32],ne_kernel=[3,3,1,32],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,32],ne_kernel=[3,3,2,32],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,1024],ne_kernel=[3,3,1,1024],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,1024],ne_kernel=[3,3,2,1024],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,2048],ne_kernel=[3,3,1,2048],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,2048],ne_kernel=[3,3,2,2048],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,2560],ne_kernel=[3,3,1,2560],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,2560],ne_kernel=[3,3,2,2560],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[5,5,1,32],ne_kernel=[3,4,1,32],s0=1,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" -"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[2,2,1536,729],ne_kernel=[2,2,1536,4096],s0=1,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","0","no","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[3000,128,1,1],ne_kernel=[3,128,1280,1],s0=1,s1=0,p0=1,p1=0,d0=1,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f32,ne_input=[3000,128,1,1],ne_kernel=[3,128,1280,1],s0=1,s1=0,p0=1,p1=0,d0=1,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[3000,128,1,1],ne_kernel=[3,128,1280,1],s0=1,s1=0,p0=1,p1=0,d0=1,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=0,p1=0,d0=1,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=0,p1=0,d0=3,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=3,p1=0,d0=1,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=1,s1=0,p0=3,p1=0,d0=3,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=0,p1=0,d0=1,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=0,p1=0,d0=3,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=3,p1=0,d0=1,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,2,2,1],ne_kernel=[3,2,2,1],s0=3,s1=0,p0=3,p1=0,d0=3,d1=0,is_2D=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[10,10,3,1],ne_kernel=[3,3,3,1],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f32,ne_input=[10,10,3,1],ne_kernel=[3,3,3,1],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[10,10,3,1],ne_kernel=[3,3,3,1],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=1,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=1,s1=3,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=1,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=0,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=0,p1=3,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=0,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=1,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=3,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,2,2],ne_kernel=[3,3,2,2],s0=3,s1=3,p0=3,p1=3,d0=3,d1=3,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,32],ne_kernel=[3,3,1,32],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,32],ne_kernel=[3,3,2,32],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,1024],ne_kernel=[3,3,1,1024],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,1024],ne_kernel=[3,3,2,1024],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,2048],ne_kernel=[3,3,1,2048],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,2048],ne_kernel=[3,3,2,2048],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,1,2560],ne_kernel=[3,3,1,2560],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[12,12,2,2560],ne_kernel=[3,3,2,2560],s0=1,s1=1,p0=1,p1=1,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[5,5,1,32],ne_kernel=[3,4,1,32],s0=1,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","IM2COL","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[2,2,1536,729],ne_kernel=[2,2,1536,4096],s0=1,s1=1,p0=0,p1=0,d0=1,d1=1,is_2D=1","support","1","yes","WebGPU" "WebGPU: WebGPU","IM2COL_3D","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[10,10,10,9],ne_kernel=[3,3,3,1],IC=3,s0=1,s1=1,s2=1,p0=1,p1=1,p2=1,d0=1,d1=1,d2=1,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","IM2COL_3D","type_input=f32,type_kernel=f16,dst_type=f32,ne_input=[10,10,10,9],ne_kernel=[3,3,3,1],IC=3,s0=1,s1=1,s2=1,p0=1,p1=1,p2=1,d0=1,d1=1,d2=1,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","IM2COL_3D","type_input=f32,type_kernel=f16,dst_type=f16,ne_input=[10,10,10,9],ne_kernel=[3,3,3,1],IC=3,s0=1,s1=1,s2=1,p0=1,p1=1,p2=1,d0=1,d1=1,d2=1,v=0","support","0","no","WebGPU" @@ -3065,1574 +3101,1574 @@ "WebGPU: WebGPU","IM2COL_3D","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,10,3],ne_kernel=[3,3,3,3],IC=1,s0=3,s1=3,s2=3,p0=3,p1=3,p2=3,d0=3,d1=3,d2=3,v=1","support","0","no","WebGPU" "WebGPU: WebGPU","IM2COL_3D","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,10,3],ne_kernel=[3,3,3,3],IC=3,s0=3,s1=3,s2=3,p0=3,p1=3,p2=3,d0=3,d1=3,d2=3,v=0","support","0","no","WebGPU" "WebGPU: WebGPU","IM2COL_3D","type_input=f32,type_kernel=f32,dst_type=f32,ne_input=[20,20,10,3],ne_kernel=[3,3,3,3],IC=3,s0=3,s1=3,s2=3,p0=3,p1=3,p2=3,d0=3,d1=3,d2=3,v=1","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=1,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=2,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,1,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,2,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,3,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[1,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[2,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[3,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,1,2],ne_kernel=[11,11,1,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,1],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,1,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,2,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,1,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,3,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[1,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[2,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[1,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[3,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f32,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","CONV_2D","ne_input=[141,133,25,2],ne_kernel=[11,11,25,12],type_kernel=f16,stride0=3,stride1=5,padding0=5,padding1=5,dilation0=2,dilation1=4,cwhn=0","support","1","yes","WebGPU" "WebGPU: WebGPU","CONV_2D_DW","ne_input=[17,34,9,1],ne_kernel=[3,3,1,9],stride=1,padding=0,dilation=1,cwhn=0","support","0","no","WebGPU" "WebGPU: WebGPU","CONV_2D_DW","ne_input=[17,34,9,1],ne_kernel=[3,3,1,9],stride=1,padding=0,dilation=1,cwhn=1","support","0","no","WebGPU" "WebGPU: WebGPU","CONV_2D_DW","ne_input=[32,8,64,1],ne_kernel=[3,3,1,64],stride=2,padding=1,dilation=1,cwhn=0","support","0","no","WebGPU" @@ -5011,9 +5047,12 @@ "WebGPU: WebGPU","CONV_TRANSPOSE_1D","ne_input=[3,2,1,1],ne_kernel=[3,2,2,1],s0=1,p0=0,d0=1","support","0","no","WebGPU" "WebGPU: WebGPU","CONV_TRANSPOSE_1D","ne_input=[3,2,1,1],ne_kernel=[3,1,2,1],s0=1,p0=0,d0=1","support","0","no","WebGPU" "WebGPU: WebGPU","CONV_TRANSPOSE_1D","ne_input=[2,1,1,1],ne_kernel=[3,1,1,1],s0=1,p0=0,d0=1","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_TRANSPOSE_2D","ne_input=[3,2,3,1],ne_kernel=[2,2,1,3],stride=1","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_TRANSPOSE_2D","ne_input=[10,10,9,1],ne_kernel=[3,3,1,9],stride=2","support","0","no","WebGPU" -"WebGPU: WebGPU","CONV_TRANSPOSE_2D","ne_input=[129,63,35,1],ne_kernel=[3,3,48,35],stride=1","support","0","no","WebGPU" +"WebGPU: WebGPU","CONV_TRANSPOSE_2D","kernel_type=f32,ne_input=[3,2,3,1],ne_kernel=[2,2,1,3],stride=1","support","0","no","WebGPU" +"WebGPU: WebGPU","CONV_TRANSPOSE_2D","kernel_type=f32,ne_input=[10,10,9,1],ne_kernel=[3,3,1,9],stride=2","support","0","no","WebGPU" +"WebGPU: WebGPU","CONV_TRANSPOSE_2D","kernel_type=f32,ne_input=[129,63,35,1],ne_kernel=[3,3,48,35],stride=1","support","0","no","WebGPU" +"WebGPU: WebGPU","CONV_TRANSPOSE_2D","kernel_type=f16,ne_input=[3,2,3,1],ne_kernel=[2,2,1,3],stride=1","support","0","no","WebGPU" +"WebGPU: WebGPU","CONV_TRANSPOSE_2D","kernel_type=f16,ne_input=[10,10,9,1],ne_kernel=[3,3,1,9],stride=2","support","0","no","WebGPU" +"WebGPU: WebGPU","CONV_TRANSPOSE_2D","kernel_type=f16,ne_input=[129,63,35,1],ne_kernel=[3,3,48,35],stride=1","support","0","no","WebGPU" "WebGPU: WebGPU","COUNT_EQUAL","type=f32,ne=[4,500,1,1]","support","0","no","WebGPU" "WebGPU: WebGPU","COUNT_EQUAL","type=f32,ne=[4,5000,1,1]","support","0","no","WebGPU" "WebGPU: WebGPU","ARGMAX","type=f32,ne=[32,1,1,1]","support","1","yes","WebGPU" @@ -5141,6 +5180,15 @@ "WebGPU: WebGPU","CPY","type_src=q8_0,type_dst=q8_0,ne=[96,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q8_0,type_dst=q8_0,ne=[96,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q8_0,type_dst=q8_0,ne=[96,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=q1_0,ne=[128,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=q1_0,ne=[128,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=q1_0,ne=[128,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=q1_0,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=q1_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=q1_0,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=q1_0,ne=[384,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=q1_0,ne=[384,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=q1_0,ne=[384,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=mxfp4,type_dst=mxfp4,ne=[32,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=mxfp4,type_dst=mxfp4,ne=[32,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=mxfp4,type_dst=mxfp4,ne=[32,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" @@ -5150,6 +5198,15 @@ "WebGPU: WebGPU","CPY","type_src=mxfp4,type_dst=mxfp4,ne=[96,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=mxfp4,type_dst=mxfp4,ne=[96,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=mxfp4,type_dst=mxfp4,ne=[96,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=nvfp4,ne=[64,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=nvfp4,ne=[64,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=nvfp4,ne=[64,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=nvfp4,ne=[128,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=nvfp4,ne=[128,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=nvfp4,ne=[128,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=nvfp4,ne=[192,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=nvfp4,ne=[192,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=nvfp4,ne=[192,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q2_K,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q2_K,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q2_K,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,3,1,2],permute_dst=[0,2,1,3],_src_transpose=0","support","0","no","WebGPU" @@ -5292,8 +5349,12 @@ "WebGPU: WebGPU","CPY","type_src=f16,type_dst=q5_1,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f16,type_dst=q8_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f16,type_dst=q8_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=f16,type_dst=q1_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=f16,type_dst=q1_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f16,type_dst=mxfp4,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f16,type_dst=mxfp4,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=f16,type_dst=nvfp4,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=f16,type_dst=nvfp4,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f16,type_dst=q2_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f16,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f16,type_dst=q3_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" @@ -5338,8 +5399,12 @@ "WebGPU: WebGPU","CPY","type_src=bf16,type_dst=q5_1,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=bf16,type_dst=q8_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=bf16,type_dst=q8_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=bf16,type_dst=q1_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=bf16,type_dst=q1_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=bf16,type_dst=mxfp4,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=bf16,type_dst=mxfp4,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=bf16,type_dst=nvfp4,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=bf16,type_dst=nvfp4,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=bf16,type_dst=q2_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=bf16,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=bf16,type_dst=q3_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" @@ -5384,8 +5449,12 @@ "WebGPU: WebGPU","CPY","type_src=f32,type_dst=q5_1,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f32,type_dst=q8_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f32,type_dst=q8_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=f32,type_dst=q1_0,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=f32,type_dst=q1_0,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f32,type_dst=mxfp4,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f32,type_dst=mxfp4,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=f32,type_dst=nvfp4,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=f32,type_dst=nvfp4,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f32,type_dst=q2_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f32,type_dst=q2_K,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=f32,type_dst=q3_K,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" @@ -5430,8 +5499,12 @@ "WebGPU: WebGPU","CPY","type_src=q5_1,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q8_0,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q8_0,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=q1_0,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=mxfp4,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=mxfp4,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" +"WebGPU: WebGPU","CPY","type_src=nvfp4,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q2_K,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q2_K,type_dst=f32,ne=[256,2,3,4],permute_src=[0,2,1,3],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" "WebGPU: WebGPU","CPY","type_src=q3_K,type_dst=f32,ne=[256,4,4,4],permute_src=[0,0,0,0],permute_dst=[0,0,0,0],_src_transpose=0","support","0","no","WebGPU" @@ -5874,8 +5947,6 @@ "WebGPU: WebGPU","SUB","type=f32,ne=[64,262144,1,1],nr=[1,1,1,1],nf=1,perm1=0","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL","type=f32,ne=[64,262144,1,1],nr=[1,1,1,1],nf=1,perm1=0","support","1","yes","WebGPU" "WebGPU: WebGPU","DIV","type=f32,ne=[64,262144,1,1],nr=[1,1,1,1],nf=1,perm1=0","support","1","yes","WebGPU" -"WebGPU: WebGPU","ADD1","type=f32,ne=[10,5,4,3]","support","0","no","WebGPU" -"WebGPU: WebGPU","ADD1","type=f32,ne=[1024,1024,1,1]","support","0","no","WebGPU" "WebGPU: WebGPU","SCALE","type=f32,ne=[10,10,10,10],scale=2.000000,bias=0.000000,inplace=0","support","1","yes","WebGPU" "WebGPU: WebGPU","SCALE","type=f32,ne=[10,10,10,10],scale=2.000000,bias=1.000000,inplace=0","support","1","yes","WebGPU" "WebGPU: WebGPU","SCALE","type=f32,ne=[10,10,10,10],scale=2.000000,bias=1.000000,inplace=1","support","1","yes","WebGPU" @@ -5997,9 +6068,9 @@ "WebGPU: WebGPU","SSM_CONV","type=f32,ne_a=[9,2048,4,1],ne_b=[9,2048,1,1]","support","1","yes","WebGPU" "WebGPU: WebGPU","SSM_CONV","type=f32,ne_a=[72,2048,1,1],ne_b=[9,2048,1,1]","support","1","yes","WebGPU" "WebGPU: WebGPU","SSM_CONV","type=f32,ne_a=[72,2048,4,1],ne_b=[9,2048,1,1]","support","1","yes","WebGPU" -"WebGPU: WebGPU","SSM_SCAN","type=f32,d_state=16,head_dim=1,n_head=1024,n_group=1,n_seq_tokens=32,n_seqs=4","support","0","no","WebGPU" -"WebGPU: WebGPU","SSM_SCAN","type=f32,d_state=128,head_dim=64,n_head=16,n_group=2,n_seq_tokens=32,n_seqs=4","support","0","no","WebGPU" -"WebGPU: WebGPU","SSM_SCAN","type=f32,d_state=256,head_dim=64,n_head=8,n_group=2,n_seq_tokens=32,n_seqs=4","support","0","no","WebGPU" +"WebGPU: WebGPU","SSM_SCAN","type=f32,d_state=16,head_dim=1,n_head=1024,n_group=1,n_seq_tokens=32,n_seqs=4","support","1","yes","WebGPU" +"WebGPU: WebGPU","SSM_SCAN","type=f32,d_state=128,head_dim=64,n_head=16,n_group=2,n_seq_tokens=32,n_seqs=4","support","1","yes","WebGPU" +"WebGPU: WebGPU","SSM_SCAN","type=f32,d_state=256,head_dim=64,n_head=8,n_group=2,n_seq_tokens=32,n_seqs=4","support","1","yes","WebGPU" "WebGPU: WebGPU","RWKV_WKV6","type=f32,head_count=32,head_size=64,n_seq_tokens=1,n_seqs=1","support","0","no","WebGPU" "WebGPU: WebGPU","RWKV_WKV6","type=f32,head_count=32,head_size=64,n_seq_tokens=32,n_seqs=1","support","0","no","WebGPU" "WebGPU: WebGPU","RWKV_WKV6","type=f32,head_count=32,head_size=64,n_seq_tokens=32,n_seqs=4","support","0","no","WebGPU" @@ -6084,6 +6155,15 @@ "WebGPU: WebGPU","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" @@ -6093,6 +6173,15 @@ "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=4,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=5,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=6,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=7,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=8,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=9,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=2,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=3,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" @@ -6513,6 +6602,68 @@ "WebGPU: WebGPU","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q8_0,type_b=f16,m=16,n=8,k=256,bs=[1536,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=8,k=256,bs=[1536,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f16,m=16,n=8,k=256,bs=[1536,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q4_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" @@ -6761,6 +6912,68 @@ "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f16,m=16,n=8,k=256,bs=[1536,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=16,n=8,k=256,bs=[1536,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[3,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[3,2],nr=[2,2],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=8,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,2,1,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,1,3,2],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=256,bs=[2,3],nr=[1,1],per=[0,3,2,1],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=1,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=8,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=16,k=1024,bs=[3,2],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f16,m=16,n=8,k=256,bs=[1536,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[2,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=iq2_xxs,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,2],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" @@ -6831,6 +7044,8 @@ "WebGPU: WebGPU","MUL_MAT","type_a=q5_1,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=32,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q8_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=128,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q2_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q3_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q5_K,type_b=f32,m=16,n=1,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" @@ -6865,7 +7080,9 @@ "WebGPU: WebGPU","MUL_MAT","type_a=q5_0,type_b=f32,m=1,n=64,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q5_1,type_b=f32,m=1,n=64,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q8_0,type_b=f32,m=1,n=64,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=q1_0,type_b=f32,m=1,n=64,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=mxfp4,type_b=f32,m=1,n=64,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT","type_a=nvfp4,type_b=f32,m=1,n=64,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q2_K,type_b=f32,m=1,n=64,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q3_K,type_b=f32,m=1,n=64,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT","type_a=q4_K,type_b=f32,m=1,n=64,k=256,bs=[1,1],nr=[1,1],per=[0,1,2,3],k_v=0,o=1","support","1","yes","WebGPU" @@ -7272,6 +7489,7 @@ "WebGPU: WebGPU","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=2,n_used=2,b=1,m=32,n=8192,k=64","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=16,n_used=16,b=1,m=50,n=200,k=64","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=f16,type_b=f32,n_mats=1,n_used=1,b=0,m=8,n=16,k=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=32,n_used=2,b=0,m=2880,n=32,k=2880","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=4,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=f32,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=5,k=256","support","1","yes","WebGPU" @@ -7488,6 +7706,78 @@ "WebGPU: WebGPU","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=17,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","1","yes","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=4,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q4_0,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=5,k=256","support","1","yes","WebGPU" @@ -7704,6 +7994,78 @@ "WebGPU: WebGPU","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=17,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q4_K,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","1","yes","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=mxfp4,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=nvfp4,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=nvfp4,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=4,k=256","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=nvfp4,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=5,k=256","support","0","no","WebGPU" @@ -7776,6 +8138,78 @@ "WebGPU: WebGPU","MUL_MAT_ID","type_a=nvfp4,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=17,k=256","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=nvfp4,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=nvfp4,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=1,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=2,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=4,n_used=4,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=1,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=2,b=1,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=0,m=512,n=129,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=4,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=5,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=17,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xxs,type_b=f32,n_mats=8,n_used=4,b=1,m=512,n=129,k=256","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q4_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q5_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","1","yes","WebGPU" @@ -7784,6 +8218,8 @@ "WebGPU: WebGPU","MUL_MAT_ID","type_a=q5_1,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q8_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","1","yes","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=q1_0,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q2_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q2_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q3_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","1","yes","WebGPU" @@ -7792,6 +8228,24 @@ "WebGPU: WebGPU","MUL_MAT_ID","type_a=q5_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q6_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","1","yes","WebGPU" "WebGPU: WebGPU","MUL_MAT_ID","type_a=q6_K,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","1","yes","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_xs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq2_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq3_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq3_xxs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq1_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq1_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq1_m,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq1_m,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq4_nl,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq4_nl,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq3_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq3_s,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq4_xs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=iq4_xs,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=bf16,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=1,k=256","support","0","no","WebGPU" +"WebGPU: WebGPU","MUL_MAT_ID","type_a=bf16,type_b=f32,n_mats=4,n_used=2,b=0,m=512,n=32,k=256","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=f32,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" @@ -8176,6 +8630,134 @@ "WebGPU: WebGPU","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=q8_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=q1_0,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=q4_0,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" @@ -8688,6 +9270,134 @@ "WebGPU: WebGPU","OUT_PROD","type_a=mxfp4,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=mxfp4,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=mxfp4,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f32,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=1,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=1,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[1,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[1,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[3,1],nr=[2,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[1,2],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,1],trans_b=0","support","0","no","WebGPU" +"WebGPU: WebGPU","OUT_PROD","type_a=nvfp4,type_b=f16,m=256,n=16,k=16,bs=[3,3],nr=[2,2],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,1],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[1,2],trans_b=0","support","0","no","WebGPU" "WebGPU: WebGPU","OUT_PROD","type_a=iq2_xxs,type_b=f32,m=256,n=1,k=1,bs=[1,1],nr=[2,1],trans_b=0","support","0","no","WebGPU" @@ -9772,10 +10482,12 @@ "WebGPU: WebGPU","ARGSORT","type=f32,ne=[1023,2,1,3],order=0","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[1024,2,1,3],order=0","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[1025,2,1,3],order=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","ARGSORT","type=f32,ne=[1025,256,1,1],order=0","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[2047,2,1,3],order=0","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[2048,2,1,3],order=0","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[2049,2,1,3],order=0","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[2,8,8192,1],order=0","support","1","yes","WebGPU" +"WebGPU: WebGPU","ARGSORT","type=f32,ne=[2048,512,1,1],order=0","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[3,1,1,1],order=0","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[4,1,1,1],order=0","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[7,1,1,1],order=0","support","1","yes","WebGPU" @@ -9819,10 +10531,12 @@ "WebGPU: WebGPU","ARGSORT","type=f32,ne=[1023,2,1,3],order=1","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[1024,2,1,3],order=1","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[1025,2,1,3],order=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","ARGSORT","type=f32,ne=[1025,256,1,1],order=1","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[2047,2,1,3],order=1","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[2048,2,1,3],order=1","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[2049,2,1,3],order=1","support","1","yes","WebGPU" "WebGPU: WebGPU","ARGSORT","type=f32,ne=[2,8,8192,1],order=1","support","1","yes","WebGPU" +"WebGPU: WebGPU","ARGSORT","type=f32,ne=[2048,512,1,1],order=1","support","1","yes","WebGPU" "WebGPU: WebGPU","TOP_K","type=f32,ne=[1,1,1,1],k=1,ties=0","support","1","yes","WebGPU" "WebGPU: WebGPU","TOP_K","type=f32,ne=[12,1,2,1],k=1,ties=0","support","1","yes","WebGPU" "WebGPU: WebGPU","TOP_K","type=f32,ne=[2,1,1,1],k=1,ties=0","support","1","yes","WebGPU" @@ -10209,6 +10923,9 @@ "WebGPU: WebGPU","CUMSUM","type=f32,ne=[375960,1,1,1]","support","1","yes","WebGPU" "WebGPU: WebGPU","CUMSUM","type=f32,ne=[20481,4,1,1]","support","1","yes","WebGPU" "WebGPU: WebGPU","XIELU","type=f32,ne=[10,5,4,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","XIELU","type=f16,ne=[10,5,4,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","XIELU","type=f32,ne=[512,16,1,1]","support","1","yes","WebGPU" +"WebGPU: WebGPU","XIELU","type=f16,ne=[512,16,1,1]","support","1","yes","WebGPU" "WebGPU: WebGPU","TRI","type=f32,ne=[10,10,4,3],tri_type=3","support","1","yes","WebGPU" "WebGPU: WebGPU","TRI","type=f32,ne=[10,10,4,3],tri_type=2","support","1","yes","WebGPU" "WebGPU: WebGPU","TRI","type=f32,ne=[10,10,4,3],tri_type=1","support","1","yes","WebGPU" @@ -10484,22 +11201,38 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10508,8 +11241,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10518,8 +11259,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10528,8 +11277,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10538,28 +11295,52 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10568,8 +11349,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10578,8 +11367,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10588,8 +11385,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10598,28 +11403,52 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10628,8 +11457,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10638,8 +11475,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10648,8 +11493,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10658,28 +11511,52 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10688,8 +11565,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10698,8 +11583,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10708,8 +11601,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10718,188 +11619,340 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10908,8 +11961,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10918,8 +11979,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10928,8 +11997,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10938,28 +12015,52 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10968,8 +12069,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10978,8 +12087,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10988,8 +12105,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -10998,28 +12123,52 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11028,8 +12177,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11038,8 +12195,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11048,8 +12213,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11058,28 +12231,52 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11088,8 +12285,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11098,8 +12303,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11108,8 +12321,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11118,508 +12339,916 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[1,3],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=64,hsv=64,nh=4,nr23=[4,3],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11628,8 +13257,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11638,8 +13275,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11648,8 +13293,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11658,28 +13311,52 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11688,8 +13365,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11698,8 +13383,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11708,8 +13401,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11718,108 +13419,196 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11828,8 +13617,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11838,8 +13635,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11848,8 +13653,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11858,28 +13671,52 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11888,8 +13725,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11898,8 +13743,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11908,8 +13761,16 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,2,1,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -11918,248 +13779,448 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,2,1,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,2,1,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f32,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=bf16,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q8_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_1,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q5_0,permute=[0,1,2,3]","support","0","no","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_1,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=q4_0,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=72,hsv=72,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=iq4_nl,permute=[0,1,2,3]","support","0","no","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=80,hsv=80,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" @@ -13504,6 +15565,118 @@ "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=320,hsv=256,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=320,hsv=256,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=320,hsv=256,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=1,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,2,1,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=75,mask=1,sinks=0,max_bias=8.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=113,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[1,1],kv=1024,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=1,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=3,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=32,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" +"WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=512,hsv=512,nh=4,nr23=[4,1],kv=512,nb=75,mask=0,sinks=0,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=1,nr23=[1,1],kv=113,nb=1,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=1,nr23=[1,1],kv=113,nb=3,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" "WebGPU: WebGPU","FLASH_ATTN_EXT","hsk=576,hsv=512,nh=1,nr23=[1,1],kv=113,nb=32,mask=1,sinks=1,max_bias=0.000000,logit_softcap=0.000000,prec=f32,type_KV=f16,permute=[0,1,2,3]","support","1","yes","WebGPU" diff --git a/examples/debug/debug.cpp b/examples/debug/debug.cpp index 7ba63b4ff60..761e7a2db54 100644 --- a/examples/debug/debug.cpp +++ b/examples/debug/debug.cpp @@ -202,10 +202,14 @@ static bool run(llama_context * ctx, const common_params & params) { print_tokenized_prompt(ctx, tokens, params.prompt); if (params.save_logits) { - output_data output {ctx, model, params}; - std::filesystem::path model_path{params.model.path}; - std::string model_name{model_path.stem().string()}; - save_output_data(output, model_name, params.logits_output_dir); + try { + output_data output {ctx, model, params}; + std::filesystem::path model_path{params.model.path}; + std::string model_name{model_path.stem().string()}; + save_output_data(output, model_name, params.logits_output_dir); + } catch (const std::exception & e) { + LOG_ERR("%s : error saving logits: %s\n", __func__, e.what()); + } } return true; @@ -223,7 +227,7 @@ int main(int argc, char ** argv) { llama_backend_init(); llama_numa_init(params.numa); - std::optional<base_callback_data> cb_data; + std::optional<common_debug_cb_user_data> cb_data; if (!params.save_logits) { cb_data.emplace(params, params.tensor_filter); } diff --git a/examples/eval-callback/eval-callback.cpp b/examples/eval-callback/eval-callback.cpp index 8832468451c..4ce8d600b1a 100644 --- a/examples/eval-callback/eval-callback.cpp +++ b/examples/eval-callback/eval-callback.cpp @@ -3,7 +3,6 @@ #include "debug.h" #include "log.h" #include "llama.h" -#include "llama-cpp.h" #include <clocale> #include <string> @@ -38,7 +37,7 @@ static bool run(llama_context * ctx, const common_params & params) { int main(int argc, char ** argv) { std::setlocale(LC_NUMERIC, "C"); - base_callback_data cb_data; + common_debug_cb_user_data cb_data; common_params params; @@ -53,7 +52,7 @@ int main(int argc, char ** argv) { // pass the callback to the backend scheduler // it will be executed for each node during the graph computation - params.cb_eval = common_debug_cb_eval<false>; + params.cb_eval = common_debug_cb_eval; params.cb_eval_user_data = &cb_data; params.warmup = false; diff --git a/examples/gen-docs/gen-docs.cpp b/examples/gen-docs/gen-docs.cpp index 7ba7d79f721..baf61bf27b5 100644 --- a/examples/gen-docs/gen-docs.cpp +++ b/examples/gen-docs/gen-docs.cpp @@ -73,12 +73,12 @@ static void write_help(std::ostringstream & ss, const md_file & md) { auto ctx_arg = common_params_parser_init(params, md.ex); std::vector<common_arg *> common_options; - std::vector<common_arg *> sparam_options; + std::vector<common_arg *> sampling_options; std::vector<common_arg *> specific_options; for (auto & opt : ctx_arg.options) { // in case multiple LLAMA_EXAMPLE_* are set, we prioritize the LLAMA_EXAMPLE_* matching current example - if (opt.is_sparam) { - sparam_options.push_back(&opt); + if (opt.is_sampling) { + sampling_options.push_back(&opt); } else if (opt.in_example(ctx_arg.ex)) { specific_options.push_back(&opt); } else { @@ -93,7 +93,7 @@ static void write_help(std::ostringstream & ss, const md_file & md) { ss << "### Common params\n\n"; write_table(ss, common_options); ss << "\n\n### Sampling params\n\n"; - write_table(ss, sparam_options); + write_table(ss, sampling_options); ss << "\n\n### " << md.specific_section_header << "\n\n"; write_table(ss, specific_options); diff --git a/examples/lookup/lookup-create.cpp b/examples/lookup/lookup-create.cpp index 6b8f258a4a5..c0f6c8fc202 100644 --- a/examples/lookup/lookup-create.cpp +++ b/examples/lookup/lookup-create.cpp @@ -37,9 +37,9 @@ int main(int argc, char ** argv){ common_ngram_cache ngram_cache; common_ngram_cache_update(ngram_cache, LLAMA_NGRAM_STATIC, LLAMA_NGRAM_STATIC, inp, inp.size(), true); - fprintf(stderr, "%s: hashing done, writing file to %s\n", __func__, params.speculative.lookup_cache_static.c_str()); + fprintf(stderr, "%s: hashing done, writing file to %s\n", __func__, params.speculative.ngram_cache.lookup_cache_static.c_str()); - common_ngram_cache_save(ngram_cache, params.speculative.lookup_cache_static); + common_ngram_cache_save(ngram_cache, params.speculative.ngram_cache.lookup_cache_static); return 0; } diff --git a/examples/lookup/lookup-stats.cpp b/examples/lookup/lookup-stats.cpp index 847976ddc7d..84642e05d1d 100644 --- a/examples/lookup/lookup-stats.cpp +++ b/examples/lookup/lookup-stats.cpp @@ -24,7 +24,7 @@ int main(int argc, char ** argv){ return 1; } - const int n_draft = params.speculative.n_max; + const int n_draft = params.speculative.draft.n_max; // init llama.cpp llama_backend_init(); @@ -49,18 +49,18 @@ int main(int argc, char ** argv){ { const int64_t t_start_draft_us = ggml_time_us(); - if (!params.speculative.lookup_cache_static.empty()) { + if (!params.speculative.ngram_cache.lookup_cache_static.empty()) { try { - ngram_cache_static = common_ngram_cache_load(params.speculative.lookup_cache_static); + ngram_cache_static = common_ngram_cache_load(params.speculative.ngram_cache.lookup_cache_static); } catch (std::ifstream::failure const &) { - LOG_ERR("failed to open static lookup cache: %s", params.speculative.lookup_cache_static.c_str()); + LOG_ERR("failed to open static lookup cache: %s", params.speculative.ngram_cache.lookup_cache_static.c_str()); exit(1); } } - if (!params.speculative.lookup_cache_dynamic.empty()) { + if (!params.speculative.ngram_cache.lookup_cache_dynamic.empty()) { try { - ngram_cache_dynamic = common_ngram_cache_load(params.speculative.lookup_cache_dynamic); + ngram_cache_dynamic = common_ngram_cache_load(params.speculative.ngram_cache.lookup_cache_dynamic); } catch (std::ifstream::failure const &) {} // if the file does not exist it will simply be created at the end of the program } diff --git a/examples/lookup/lookup.cpp b/examples/lookup/lookup.cpp index 74272f17e71..2d4c0e528d3 100644 --- a/examples/lookup/lookup.cpp +++ b/examples/lookup/lookup.cpp @@ -25,7 +25,7 @@ int main(int argc, char ** argv){ } // max. number of additional tokens to draft if match is found - const int n_draft = params.speculative.n_max; + const int n_draft = params.speculative.draft.n_max; // init llama.cpp llama_backend_init(); @@ -54,18 +54,18 @@ int main(int argc, char ** argv){ const int64_t t_start_draft_us = ggml_time_us(); common_ngram_cache_update(ngram_cache_context, LLAMA_NGRAM_MIN, LLAMA_NGRAM_MAX, inp, inp.size(), false); - if (!params.speculative.lookup_cache_static.empty()) { + if (!params.speculative.ngram_cache.lookup_cache_static.empty()) { try { - ngram_cache_static = common_ngram_cache_load(params.speculative.lookup_cache_static); + ngram_cache_static = common_ngram_cache_load(params.speculative.ngram_cache.lookup_cache_static); } catch (std::ifstream::failure const &) { - LOG_ERR("failed to open static lookup cache: %s", params.speculative.lookup_cache_static.c_str()); + LOG_ERR("failed to open static lookup cache: %s", params.speculative.ngram_cache.lookup_cache_static.c_str()); exit(1); } } - if (!params.speculative.lookup_cache_dynamic.empty()) { + if (!params.speculative.ngram_cache.lookup_cache_dynamic.empty()) { try { - ngram_cache_dynamic = common_ngram_cache_load(params.speculative.lookup_cache_dynamic); + ngram_cache_dynamic = common_ngram_cache_load(params.speculative.ngram_cache.lookup_cache_dynamic); } catch (std::ifstream::failure const &) {} // if the file does not exist it will simply be created at the end of the program } @@ -213,7 +213,7 @@ int main(int argc, char ** argv){ // Update dynamic ngram cache with context ngram cache and save it to disk: common_ngram_cache_merge(ngram_cache_dynamic, ngram_cache_context); - common_ngram_cache_save(ngram_cache_dynamic, params.speculative.lookup_cache_dynamic); + common_ngram_cache_save(ngram_cache_dynamic, params.speculative.ngram_cache.lookup_cache_dynamic); LOG("\n\n"); diff --git a/examples/speculative-simple/speculative-simple.cpp b/examples/speculative-simple/speculative-simple.cpp index 73394b74ee9..5b61b62a1bf 100644 --- a/examples/speculative-simple/speculative-simple.cpp +++ b/examples/speculative-simple/speculative-simple.cpp @@ -43,7 +43,7 @@ int main(int argc, char ** argv) { return 1; } - if (params.speculative.mparams_dft.path.empty()) { + if (params.speculative.draft.mparams.path.empty()) { LOG_ERR("%s: --model-draft is required\n", __func__); return 1; } @@ -77,7 +77,7 @@ int main(int argc, char ** argv) { // TODO: simplify this logic { - const auto & params_spec = params.speculative; + const auto & params_spec = params.speculative.draft; auto params_dft = params; @@ -85,15 +85,15 @@ int main(int argc, char ** argv) { params_dft.n_ctx = params_spec.n_ctx; params_dft.n_batch = llama_n_ctx_seq(ctx_tgt); params_dft.devices = params_spec.devices; - params_dft.model = params_spec.mparams_dft; + params_dft.model = params_spec.mparams; params_dft.n_gpu_layers = params_spec.n_gpu_layers; if (params_spec.cpuparams.n_threads > 0) { - params_dft.cpuparams.n_threads = params.speculative.cpuparams.n_threads; - params_dft.cpuparams_batch.n_threads = params.speculative.cpuparams_batch.n_threads; + params_dft.cpuparams.n_threads = params.speculative.draft.cpuparams.n_threads; + params_dft.cpuparams_batch.n_threads = params.speculative.draft.cpuparams_batch.n_threads; } - params_dft.tensor_buft_overrides = params.speculative.tensor_buft_overrides; + params_dft.tensor_buft_overrides = params.speculative.draft.tensor_buft_overrides; auto mparams_dft = common_model_params_to_llama(params_dft); @@ -103,8 +103,8 @@ int main(int argc, char ** argv) { return 1; } - params.speculative.model_dft = model_dft.get(); - params.speculative.cparams_dft = common_context_params_to_llama(params_dft); + params.speculative.draft.model = model_dft.get(); + params.speculative.draft.cparams = common_context_params_to_llama(params_dft); } // Tokenize the prompt @@ -187,16 +187,6 @@ int main(int argc, char ** argv) { // generate a new draft draft = common_speculative_draft(spec, params_spec, prompt_tgt, id_last); - if ((int) draft.size() > params_spec.n_max) { - LOG_WRN("draft size %zu exceeds max %d, truncating\n", draft.size(), params_spec.n_max); - draft.resize(params_spec.n_max); - } - - if ((int) draft.size() < params_spec.n_min) { - LOG_DBG("ignoring small draft: %zu < %d\n", draft.size(), params_spec.n_min); - draft.clear(); - } - // save the original draft size n_draft = draft.size(); @@ -220,19 +210,12 @@ int main(int argc, char ** argv) { } } - GGML_ASSERT(n_draft > 0); - // always have a token to evaluate from before - id_last common_batch_clear(batch_tgt); common_batch_add (batch_tgt, id_last, n_past++, { 0 }, true); // evaluate the target model on [id_last, draft0, draft1, ..., draftN-1] { - // do not waste time on small drafts - if (draft.size() < (size_t) params_spec.n_min) { - draft.clear(); - } - for (size_t i = 0; i < draft.size(); ++i) { common_batch_add(batch_tgt, draft[i], n_past + i, { 0 }, true); } @@ -340,7 +323,7 @@ int main(int argc, char ** argv) { LOG_INF("decoded %4d tokens in %8.3f seconds, speed: %8.3f t/s\n", n_predict, (t_dec_end - t_dec_start) / 1e6f, n_predict / ((t_dec_end - t_dec_start) / 1e6f)); LOG_INF("\n"); - LOG_INF("n_draft = %d\n", params_spec.n_max); + LOG_INF("n_draft = %d\n", params_spec.draft.n_max); LOG_INF("n_predict = %d\n", n_predict); LOG_INF("n_drafted = %d\n", n_drafted); LOG_INF("n_accept = %d\n", n_accept); diff --git a/examples/speculative/speculative.cpp b/examples/speculative/speculative.cpp index 8f56a659b3e..6ed9c9143a8 100644 --- a/examples/speculative/speculative.cpp +++ b/examples/speculative/speculative.cpp @@ -49,7 +49,7 @@ int main(int argc, char ** argv) { return 1; } - if (params.speculative.mparams_dft.path.empty()) { + if (params.speculative.draft.mparams.path.empty()) { LOG_ERR("%s: --model-draft is required\n", __func__); return 1; } @@ -58,7 +58,7 @@ int main(int argc, char ** argv) { const int n_seq_dft = params.n_parallel; // probability threshold for splitting a draft branch (only for n_seq_dft > 1) - const float p_draft_split = params.speculative.p_split; + const float p_draft_split = params.speculative.draft.p_split; std::default_random_engine rng(params.sampling.seed == LLAMA_DEFAULT_SEED ? std::random_device()() : params.sampling.seed); std::uniform_real_distribution<> u_dist; @@ -80,15 +80,15 @@ int main(int argc, char ** argv) { ctx_tgt = llama_init_tgt->context(); // load the draft model - params.devices = params.speculative.devices; - params.model = params.speculative.mparams_dft; - params.n_gpu_layers = params.speculative.n_gpu_layers; - if (params.speculative.cpuparams.n_threads > 0) { - params.cpuparams.n_threads = params.speculative.cpuparams.n_threads; + params.devices = params.speculative.draft.devices; + params.model = params.speculative.draft.mparams; + params.n_gpu_layers = params.speculative.draft.n_gpu_layers; + if (params.speculative.draft.cpuparams.n_threads > 0) { + params.cpuparams.n_threads = params.speculative.draft.cpuparams.n_threads; } - params.cpuparams_batch.n_threads = params.speculative.cpuparams_batch.n_threads; - params.tensor_buft_overrides = params.speculative.tensor_buft_overrides; + params.cpuparams_batch.n_threads = params.speculative.draft.cpuparams_batch.n_threads; + params.tensor_buft_overrides = params.speculative.draft.tensor_buft_overrides; auto llama_init_dft = common_init_from_params(params); @@ -183,7 +183,7 @@ int main(int argc, char ** argv) { //GGML_ASSERT(n_vocab == llama_vocab_n_tokens(model_dft)); // how many tokens to draft each time - int n_draft = params.speculative.n_max; + int n_draft = params.speculative.draft.n_max; int n_predict = 0; int n_drafted = 0; diff --git a/examples/sycl/start-svr.sh b/examples/sycl/start-svr.sh new file mode 100755 index 00000000000..55cd0210f3f --- /dev/null +++ b/examples/sycl/start-svr.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +# MIT license +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: MIT + +Help() { + cat << EOF +Usage: $(basename "$0") [OPTIONS] + +This script processes files with specified options. + +Options: + -h, --help Display this help message and exit. + -c, --context <value> Set context length. Bigger need more memory. + -p, --promote <value> Prompt to start generation with. + -m, --model <value> Full model file path. + -mg,--main-gpu <value> Set main GPU ID (0 - n) for single GPU mode. + -sm,--split-mode <value> How to split the model across multiple GPUs, one of: + - none: use one GPU only + - layer (default): split layers and KV across GPUs + - row: split rows across GPUs + -ngl,--n-gpu-layers <value> Max. number of layers to store in VRAM (default: -1) + -lv,--log-verbosity <value> Set the verbosity threshold. Messages with a higher verbosity will be + ignored. Values: + - 0: generic output + - 1: error + - 2: warning + - 3: info + - 4: debug + + +EOF +} + +BIN_FILE=./build/bin/llama-server +SEED=0 +GPUS_SETTING="" + +MODEL_FILE=../models/Qwen3.5-4B-Q4_0.gguf +NGL=99 +CONTEXT=4096 +GGML_SYCL_DEVICE=-1 +SPLIT_MODE=layer +LOG_VERBOSE=3 +while [[ $# -gt 0 ]]; do + case "$1" in + -c|--context) + CONTEXT=$2 + # Shift twice to consume both the option flag and its value + shift + shift + ;; + -m|--model) + MODEL_FILE="$2" + # Shift twice to consume both the option flag and its value + shift + shift + ;; + -mg|--main-gpu) + GGML_SYCL_DEVICE=$2 + SPLIT_MODE=none + # Shift twice to consume both the option flag and its value + shift + shift + ;; + -sm|--split-mode) + SPLIT_MODE=$2 + # Shift twice to consume both the option flag and its value + shift + shift + ;; + -ngl|--n-gpu-layers) + NGL=$2 + # Shift twice to consume both the option flag and its value + shift + shift + ;; + -lv|--log-verbosity) + LOG_VERBOSE=$2 + # Shift twice to consume both the option flag and its value + shift + shift + ;; + -h|--help) + Help + exit 0 + ;; + *) + # Handle unknown options or stop processing options + echo "Invalid option: $1" + # Optional: exit script or shift to treat remaining as positional args + exit 1 + ;; + esac +done + + + +source /opt/intel/oneapi/setvars.sh + +#export GGML_SYCL_DEBUG=1 + +#ZES_ENABLE_SYSMAN=1, Support to get free memory of GPU by sycl::aspect::ext_intel_free_memory. Recommended to use when --split-mode = layer. + +#support malloc device memory more than 4GB. +export UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=1 +echo "UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=${UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS}" + +if [ $GGML_SYCL_DEVICE -ne -1 ]; then + echo "Use $GGML_SYCL_DEVICE as main GPU" + #use signle GPU only + GPUS_SETTING="-mg $GGML_SYCL_DEVICE -sm ${SPLIT_MODE}" + export ONEAPI_DEVICE_SELECTOR="level_zero:${$GGML_SYCL_DEVICE}" + echo "ONEAPI_DEVICE_SELECTOR=${ONEAPI_DEVICE_SELECTOR}" +else + echo "Use all Intel GPUs, including iGPU & dGPU" + GPUS_SETTING="-sm ${SPLIT_MODE}" + fi + +echo "run cmd: ZES_ENABLE_SYSMAN=1 ${BIN_FILE} -m ${MODEL_FILE} -no-cnv -p "${INPUT_PROMPT}" -n 200 -e -ngl ${NGL} -s ${SEED} -c ${CONTEXT} ${GPUS_SETTING} -lv ${LOG_VERBOSE} --mmap " +ZES_ENABLE_SYSMAN=1 ${BIN_FILE} -m ${MODEL_FILE} -ngl ${NGL} -s ${SEED} -c ${CONTEXT} ${GPUS_SETTING} -lv ${LOG_VERBOSE} --mmap --host 0.0.0.0 --port 8000 + + diff --git a/examples/sycl/test.sh b/examples/sycl/test.sh index 140c191466e..14dcac56ad8 100755 --- a/examples/sycl/test.sh +++ b/examples/sycl/test.sh @@ -38,7 +38,7 @@ SEED=0 GPUS_SETTING="" INPUT_PROMPT="Building a website can be done in 10 simple steps:\nStep 1:" -MODEL_FILE=models/llama-2-7b.Q4_0.gguf +MODEL_FILE=../models/llama-2-7b.Q4_0.gguf NGL=99 CONTEXT=4096 GGML_SYCL_DEVICE=-1 @@ -122,9 +122,10 @@ if [ $GGML_SYCL_DEVICE -ne -1 ]; then export ONEAPI_DEVICE_SELECTOR="level_zero:${$GGML_SYCL_DEVICE}" echo "ONEAPI_DEVICE_SELECTOR=${ONEAPI_DEVICE_SELECTOR}" else - echo "Use all Intel GPUs, including iGPU & dGPU" + echo "Use all Intel GPUs, including iGPU & dGPU" + GPUS_SETTING="-sm ${SPLIT_MODE}" fi -echo "run cmd: ZES_ENABLE_SYSMAN=1 ${BIN_FILE} -m ${MODEL_FILE} -no-cnv -p "${INPUT_PROMPT}" -n 400 -e -ngl ${NGL} -s ${SEED} -c ${CONTEXT} ${GPUS_SETTING} -lv ${LOG_VERBOSE} --mmap " -ZES_ENABLE_SYSMAN=1 ${BIN_FILE} -m ${MODEL_FILE} -no-cnv -p "${INPUT_PROMPT}" -n 400 -e -ngl ${NGL} -s ${SEED} -c ${CONTEXT} ${GPUS_SETTING} -lv ${LOG_VERBOSE} --mmap +echo "run cmd: ZES_ENABLE_SYSMAN=1 ${BIN_FILE} -m ${MODEL_FILE} -no-cnv -p "${INPUT_PROMPT}" -n 200 -e -ngl ${NGL} -s ${SEED} -c ${CONTEXT} ${GPUS_SETTING} -lv ${LOG_VERBOSE} --mmap " +ZES_ENABLE_SYSMAN=1 ${BIN_FILE} -m ${MODEL_FILE} -no-cnv -p "${INPUT_PROMPT}" -n 200 -e -ngl ${NGL} -s ${SEED} -c ${CONTEXT} ${GPUS_SETTING} -lv ${LOG_VERBOSE} --mmap diff --git a/examples/sycl/win-start-svr.bat b/examples/sycl/win-start-svr.bat new file mode 100644 index 00000000000..4d850cbaa6f --- /dev/null +++ b/examples/sycl/win-start-svr.bat @@ -0,0 +1,179 @@ +:: MIT license +:: Copyright (C) 2024 Intel Corporation +:: SPDX-License-Identifier: MIT + +@echo off +setlocal EnableExtensions EnableDelayedExpansion + +set "BIN_FILE=.\build\bin\llama-server.exe" +set "SEED=0" +set "GPUS_SETTING=" + +set "MODEL_FILE=..\models\Qwen3.5-4B-Q4_0.gguf" +set "NGL=99" +set "CONTEXT=4096" +set "GGML_SYCL_DEVICE=-1" +set "SPLIT_MODE=layer" +set "LOG_VERBOSE=3" + +if "%~1"=="" goto after_args + +:parse_args +if "%~1"=="" goto after_args + +if /I "%~1"=="-c" ( + if "%~2"=="" goto missing_value + set "CONTEXT=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--context" ( + if "%~2"=="" goto missing_value + set "CONTEXT=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-m" ( + if "%~2"=="" goto missing_value + set "MODEL_FILE=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--model" ( + if "%~2"=="" goto missing_value + set "MODEL_FILE=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-mg" ( + if "%~2"=="" goto missing_value + set "GGML_SYCL_DEVICE=%~2" + set "SPLIT_MODE=none" + shift + shift + goto parse_args +) +if /I "%~1"=="--main-gpu" ( + if "%~2"=="" goto missing_value + set "GGML_SYCL_DEVICE=%~2" + set "SPLIT_MODE=none" + shift + shift + goto parse_args +) + +if /I "%~1"=="-sm" ( + if "%~2"=="" goto missing_value + set "SPLIT_MODE=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--split-mode" ( + if "%~2"=="" goto missing_value + set "SPLIT_MODE=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-ngl" ( + if "%~2"=="" goto missing_value + set "NGL=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--n-gpu-layers" ( + if "%~2"=="" goto missing_value + set "NGL=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-lv" ( + if "%~2"=="" goto missing_value + set "LOG_VERBOSE=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--log-verbosity" ( + if "%~2"=="" goto missing_value + set "LOG_VERBOSE=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-h" goto help +if /I "%~1"=="--help" goto help + +echo Invalid option: %~1 +exit /b 1 + +:missing_value +echo Missing value for option: %~1 +exit /b 1 + +:help +echo Usage: %~n0 [OPTIONS] +echo. +echo This script processes files with specified options. +echo. +echo Options: +echo -h, --help Display this help message and exit. +echo -c, --context ^<value^> Set context length. Bigger need more memory. +echo -m, --model ^<value^> Full model file path. +echo -mg,--main-gpu ^<value^> Set main GPU ID (0 - n) for single GPU mode. +echo -sm,--split-mode ^<value^> How to split the model across multiple GPUs, one of: +echo - none: use one GPU only +echo - layer (default): split layers and KV across GPUs +echo - row: split rows across GPUs +echo -ngl,--n-gpu-layers ^<value^> Max. number of layers to store in VRAM (default: -1) +echo -lv,--log-verbosity ^<value^> Set the verbosity threshold. Messages with a higher verbosity will be +echo ignored. Values: +echo - 0: generic output +echo - 1: error +echo - 2: warning +echo - 3: info +echo - 4: debug +exit /b 0 + +:after_args + +REM In Windows CMD, source is not available; call oneAPI setvars if present. +if exist "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" ( + call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" >nul +) else ( + echo Warning: oneAPI setvars.bat not found. Continuing without environment setup. +) + +REM Support malloc device memory more than 4GB. +set "UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=1" +echo UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=%UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS% + +if not "%GGML_SYCL_DEVICE%"=="-1" ( + echo Use %GGML_SYCL_DEVICE% as main GPU + REM Use single GPU only. + set "GPUS_SETTING=-mg %GGML_SYCL_DEVICE% -sm %SPLIT_MODE%" + set "ONEAPI_DEVICE_SELECTOR=level_zero:%GGML_SYCL_DEVICE%" + echo ONEAPI_DEVICE_SELECTOR=%ONEAPI_DEVICE_SELECTOR% +) else ( + echo Use all Intel GPUs, including iGPU ^& dGPU + set "GPUS_SETTING=-sm %SPLIT_MODE%" +) + +echo run cmd: ZES_ENABLE_SYSMAN=1 %BIN_FILE% -m "%MODEL_FILE%" -ngl %NGL% -s %SEED% -c %CONTEXT% %GPUS_SETTING% -lv %LOG_VERBOSE% --mmap --host 0.0.0.0 --port 8000 +set "ZES_ENABLE_SYSMAN=1" +%BIN_FILE% -m "%MODEL_FILE%" -ngl %NGL% -s %SEED% -c %CONTEXT% %GPUS_SETTING% -lv %LOG_VERBOSE% --mmap --host 0.0.0.0 --port 8000 + +endlocal + diff --git a/examples/sycl/win-test.bat b/examples/sycl/win-test.bat index 1f2dab8d0a8..781d17705db 100644 --- a/examples/sycl/win-test.bat +++ b/examples/sycl/win-test.bat @@ -2,10 +2,200 @@ :: Copyright (C) 2024 Intel Corporation :: SPDX-License-Identifier: MIT -set INPUT2="Building a website can be done in 10 simple steps:\nStep 1:" -@call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" intel64 --force -:: support malloc device memory more than 4GB. -set UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=1 -set LOAD_MODE="--mmap" -.\build\bin\llama-completion.exe -m models\llama-2-7b.Q4_0.gguf -no-cnv -p %INPUT2% -n 400 -e -ngl 99 -s 0 %LOAD_MODE% +@echo off +setlocal EnableExtensions EnableDelayedExpansion + +REM MIT license +REM Copyright (C) 2024 Intel Corporation +REM SPDX-License-Identifier: MIT + +set "BIN_FILE=.\build\bin\llama-completion.exe" +set "SEED=0" +set "GPUS_SETTING=" + +set "INPUT_PROMPT=Building a website can be done in 10 simple steps:^nStep 1:" +set "MODEL_FILE=..\models\llama-2-7b.Q4_0.gguf" +set "NGL=99" +set "CONTEXT=4096" +set "GGML_SYCL_DEVICE=-1" +set "SPLIT_MODE=layer" +set "LOG_VERBOSE=3" + +if "%~1"=="" goto after_args + +:parse_args +if "%~1"=="" goto after_args + +if /I "%~1"=="-c" ( + if "%~2"=="" goto missing_value + set "CONTEXT=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--context" ( + if "%~2"=="" goto missing_value + set "CONTEXT=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-p" ( + if "%~2"=="" goto missing_value + set "INPUT_PROMPT=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--promote" ( + if "%~2"=="" goto missing_value + set "INPUT_PROMPT=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-m" ( + if "%~2"=="" goto missing_value + set "MODEL_FILE=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--model" ( + if "%~2"=="" goto missing_value + set "MODEL_FILE=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-mg" ( + if "%~2"=="" goto missing_value + set "GGML_SYCL_DEVICE=%~2" + set "SPLIT_MODE=none" + shift + shift + goto parse_args +) +if /I "%~1"=="--main-gpu" ( + if "%~2"=="" goto missing_value + set "GGML_SYCL_DEVICE=%~2" + set "SPLIT_MODE=none" + shift + shift + goto parse_args +) + +if /I "%~1"=="-sm" ( + if "%~2"=="" goto missing_value + set "SPLIT_MODE=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--split-mode" ( + if "%~2"=="" goto missing_value + set "SPLIT_MODE=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-ngl" ( + if "%~2"=="" goto missing_value + set "NGL=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--n-gpu-layers" ( + if "%~2"=="" goto missing_value + set "NGL=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-lv" ( + if "%~2"=="" goto missing_value + set "LOG_VERBOSE=%~2" + shift + shift + goto parse_args +) +if /I "%~1"=="--log-verbosity" ( + if "%~2"=="" goto missing_value + set "LOG_VERBOSE=%~2" + shift + shift + goto parse_args +) + +if /I "%~1"=="-h" goto help +if /I "%~1"=="--help" goto help + +echo Invalid option: %~1 +exit /b 1 + +:missing_value +echo Missing value for option: %~1 +exit /b 1 + +:help +echo Usage: %~n0 [OPTIONS] +echo. +echo This script processes files with specified options. +echo. +echo Options: +echo -h, --help Display this help message and exit. +echo -c, --context ^<value^> Set context length. Bigger need more memory. +echo -p, --promote ^<value^> Prompt to start generation with. +echo -m, --model ^<value^> Full model file path. +echo -mg,--main-gpu ^<value^> Set main GPU ID (0 - n) for single GPU mode. +echo -sm,--split-mode ^<value^> How to split the model across multiple GPUs, one of: +echo - none: use one GPU only +echo - layer (default): split layers and KV across GPUs +echo - row: split rows across GPUs +echo -ngl,--n-gpu-layers ^<value^> Max. number of layers to store in VRAM (default: -1) +echo -lv,--log-verbosity ^<value^> Set the verbosity threshold. Messages with a higher verbosity will be +echo ignored. Values: +echo - 0: generic output +echo - 1: error +echo - 2: warning +echo - 3: info +echo - 4: debug +exit /b 0 + +:after_args + +REM In Windows CMD, source is not available; call oneAPI setvars if present. +if exist "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" ( + call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat" >nul +) else ( + echo Warning: oneAPI setvars.bat not found. Continuing without environment setup. +) + +REM Support malloc device memory more than 4GB. +set "UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=1" +echo UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS=%UR_L0_ENABLE_RELAXED_ALLOCATION_LIMITS% + +if not "%GGML_SYCL_DEVICE%"=="-1" ( + echo Use %GGML_SYCL_DEVICE% as main GPU + REM Use single GPU only. + set "GPUS_SETTING=-mg %GGML_SYCL_DEVICE% -sm %SPLIT_MODE%" + set "ONEAPI_DEVICE_SELECTOR=level_zero:%GGML_SYCL_DEVICE%" + echo ONEAPI_DEVICE_SELECTOR=%ONEAPI_DEVICE_SELECTOR% +) else ( + echo Use all Intel GPUs, including iGPU ^& dGPU + set "GPUS_SETTING=-sm %SPLIT_MODE%" +) + +echo run cmd: ZES_ENABLE_SYSMAN=1 %BIN_FILE% -m %MODEL_FILE% -no-cnv -p "%INPUT_PROMPT%" -n 200 -e -ngl %NGL% -s %SEED% -c %CONTEXT% %GPUS_SETTING% -lv %LOG_VERBOSE% --mmap +set "ZES_ENABLE_SYSMAN=1" +%BIN_FILE% -m "%MODEL_FILE%" -no-cnv -p "%INPUT_PROMPT%" -n 200 -e -ngl %NGL% -s %SEED% -c %CONTEXT% %GPUS_SETTING% -lv %LOG_VERBOSE% --mmap + +endlocal + diff --git a/ggml/CMakeLists.txt b/ggml/CMakeLists.txt index b9f7deb150d..f7b6f1f334f 100644 --- a/ggml/CMakeLists.txt +++ b/ggml/CMakeLists.txt @@ -5,7 +5,7 @@ project("ggml" C CXX ASM) ### GGML Version set(GGML_VERSION_MAJOR 0) set(GGML_VERSION_MINOR 10) -set(GGML_VERSION_PATCH 0) +set(GGML_VERSION_PATCH 1) set(GGML_VERSION_BASE "${GGML_VERSION_MAJOR}.${GGML_VERSION_MINOR}.${GGML_VERSION_PATCH}") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/") diff --git a/ggml/src/CMakeLists.txt b/ggml/src/CMakeLists.txt index 52754e1b9d6..3e48860bfc8 100644 --- a/ggml/src/CMakeLists.txt +++ b/ggml/src/CMakeLists.txt @@ -470,11 +470,10 @@ endforeach() target_link_libraries(ggml-base PRIVATE Threads::Threads) -find_library(MATH_LIBRARY m) -if (MATH_LIBRARY) - if (NOT WIN32 OR NOT DEFINED ENV{ONEAPI_ROOT}) - target_link_libraries(ggml-base PRIVATE ${MATH_LIBRARY}) - endif() +if (DEFINED MATH_LIBRARY) + target_link_libraries(ggml-base PRIVATE ${MATH_LIBRARY}) +elseif (NOT WIN32 AND NOT DEFINED ENV{ONEAPI_ROOT}) + target_link_libraries(ggml-base PRIVATE m) endif() if (CMAKE_SYSTEM_NAME MATCHES "Android") diff --git a/ggml/src/ggml-backend-meta.cpp b/ggml/src/ggml-backend-meta.cpp index 6d22f3421b1..fbc02d6458a 100644 --- a/ggml/src/ggml-backend-meta.cpp +++ b/ggml/src/ggml-backend-meta.cpp @@ -1205,40 +1205,57 @@ static void ggml_backend_meta_buffer_set_tensor(ggml_backend_buffer_t buffer, gg if (split_state.n_segments != 1) { GGML_ASSERT(split_state.axis >= 0 && split_state.axis < GGML_MAX_DIMS); - GGML_ASSERT(offset == 0); - GGML_ASSERT(size == ggml_nbytes(tensor)); GGML_ASSERT(tensor->ne[3] == 1); + size_t offset_data = 0; std::vector<size_t> simple_offsets(n_bufs, 0); if (split_state.axis == GGML_BACKEND_SPLIT_AXIS_0) { GGML_ASSERT(tensor->ne[2] == 1); + + const size_t row_stride = tensor->nb[1]; + GGML_ASSERT(offset % row_stride == 0); + GGML_ASSERT(size % row_stride == 0); + const int64_t r_start = offset / row_stride; + const int64_t r_count = size / row_stride; + GGML_ASSERT(r_start + r_count <= tensor->ne[1]); + const int64_t blck_size = ggml_blck_size(tensor->type); for (size_t s = 0; s < split_state.n_segments; s++) { for (size_t j = 0; j < n_bufs; j++) { ggml_tensor * simple_tensor = ggml_backend_meta_buffer_simple_tensor(tensor, j); GGML_ASSERT(split_state.ne[s*n_bufs + j] % blck_size == 0); const size_t nbytes = split_state.ne[s*n_bufs + j]/blck_size * tensor->nb[0]; - ggml_backend_tensor_set_2d(simple_tensor, (const char *) data + offset_data, simple_offsets[j], nbytes, - tensor->ne[1], simple_tensor->nb[1], tensor->nb[1]); + ggml_backend_tensor_set_2d(simple_tensor, (const char *) data + offset_data, + simple_offsets[j] + r_start * simple_tensor->nb[1], nbytes, + r_count, simple_tensor->nb[1], tensor->nb[1]); offset_data += nbytes; simple_offsets[j] += nbytes; } } - GGML_ASSERT(offset_data*tensor->ne[1] == size); + GGML_ASSERT(offset_data*r_count == size); return; } GGML_ASSERT(split_state.axis == GGML_BACKEND_SPLIT_AXIS_1); + + const size_t row_stride = tensor->nb[2]; + GGML_ASSERT(offset % row_stride == 0); + GGML_ASSERT(size % row_stride == 0); + const int64_t r_start = offset / row_stride; + const int64_t r_count = size / row_stride; + GGML_ASSERT(r_start + r_count <= tensor->ne[2]); + for (size_t s = 0; s < split_state.n_segments; s++) { for (size_t j = 0; j < n_bufs; j++) { ggml_tensor * simple_tensor = ggml_backend_meta_buffer_simple_tensor(tensor, j); const size_t nbytes = split_state.ne[s*n_bufs + j] * tensor->nb[1]; - ggml_backend_tensor_set_2d(simple_tensor, (const char *) data + offset_data, simple_offsets[j], nbytes, - tensor->ne[2], simple_tensor->nb[2], tensor->nb[2]); + ggml_backend_tensor_set_2d(simple_tensor, (const char *) data + offset_data, + simple_offsets[j] + r_start * simple_tensor->nb[2], nbytes, + r_count, simple_tensor->nb[2], tensor->nb[2]); offset_data += nbytes; simple_offsets[j] += nbytes; } } - GGML_ASSERT(offset_data*tensor->ne[2] == size); + GGML_ASSERT(offset_data*r_count == size); return; } @@ -1295,40 +1312,57 @@ static void ggml_backend_meta_buffer_get_tensor(ggml_backend_buffer_t buffer, co if (split_state.n_segments != 1) { GGML_ASSERT(split_state.axis >= 0 && split_state.axis < GGML_MAX_DIMS); - GGML_ASSERT(offset == 0); - GGML_ASSERT(size == ggml_nbytes(tensor)); GGML_ASSERT(tensor->ne[3] == 1); + size_t offset_data = 0; std::vector<size_t> simple_offsets(n_bufs, 0); if (split_state.axis == GGML_BACKEND_SPLIT_AXIS_0) { GGML_ASSERT(tensor->ne[2] == 1); + + const size_t row_stride = tensor->nb[1]; + GGML_ASSERT(offset % row_stride == 0); + GGML_ASSERT(size % row_stride == 0); + const int64_t r_start = offset / row_stride; + const int64_t r_count = size / row_stride; + GGML_ASSERT(r_start + r_count <= tensor->ne[1]); + const int64_t blck_size = ggml_blck_size(tensor->type); for (size_t s = 0; s < split_state.n_segments; s++) { for (size_t j = 0; j < n_bufs; j++) { const ggml_tensor * simple_tensor = ggml_backend_meta_buffer_simple_tensor(tensor, j); GGML_ASSERT(split_state.ne[s*n_bufs + j] % blck_size == 0); const size_t nbytes = split_state.ne[s*n_bufs + j]/blck_size * tensor->nb[0]; - ggml_backend_tensor_get_2d(simple_tensor, (char *) data + offset_data, simple_offsets[j], nbytes, - tensor->ne[1], simple_tensor->nb[1], tensor->nb[1]); + ggml_backend_tensor_get_2d(simple_tensor, (char *) data + offset_data, + simple_offsets[j] + r_start * simple_tensor->nb[1], nbytes, + r_count, simple_tensor->nb[1], tensor->nb[1]); offset_data += nbytes; simple_offsets[j] += nbytes; } } - GGML_ASSERT(offset_data*tensor->ne[1] == size); + GGML_ASSERT(offset_data*r_count == size); return; } GGML_ASSERT(split_state.axis == GGML_BACKEND_SPLIT_AXIS_1); + + const size_t row_stride = tensor->nb[2]; + GGML_ASSERT(offset % row_stride == 0); + GGML_ASSERT(size % row_stride == 0); + const int64_t r_start = offset / row_stride; + const int64_t r_count = size / row_stride; + GGML_ASSERT(r_start + r_count <= tensor->ne[2]); + for (size_t s = 0; s < split_state.n_segments; s++) { for (size_t j = 0; j < n_bufs; j++) { const ggml_tensor * simple_tensor = ggml_backend_meta_buffer_simple_tensor(tensor, j); const size_t nbytes = split_state.ne[s*n_bufs + j] * tensor->nb[1]; - ggml_backend_tensor_get_2d(simple_tensor, (char *) data + offset_data, simple_offsets[j], nbytes, - tensor->ne[2], simple_tensor->nb[2], tensor->nb[2]); + ggml_backend_tensor_get_2d(simple_tensor, (char *) data + offset_data, + simple_offsets[j] + r_start * simple_tensor->nb[2], nbytes, + r_count, simple_tensor->nb[2], tensor->nb[2]); offset_data += nbytes; simple_offsets[j] += nbytes; } } - GGML_ASSERT(offset_data*tensor->ne[2] == size); + GGML_ASSERT(offset_data*r_count == size); return; } @@ -1792,7 +1826,24 @@ static enum ggml_status ggml_backend_meta_graph_compute(ggml_backend_t backend, continue; } - i = get_i_delayed(i); + const int i_delayed = get_i_delayed(i); + + // If we can delay the AllReduce we need to consider the interaction with zero-sized tensor slices. + // A backend with such a slice would normally have valid data after participating in the AllReduce with a node that has + // its compute flag disabled and thus gets its data zeroed out. + // If the AllReduce is delayed then the nodes until that point also need to have their compute flag disabled. + if (i_delayed > i) { + for (size_t j = 0; j < n_backends; j++) { + auto & bcj = backend_ctx->backend_configs[j]; + if ((bcj.nodes[i]->flags & GGML_TENSOR_FLAG_COMPUTE) == 0) { + for (int ii = i + 1; ii <= i_delayed; ii++) { + bcj.nodes[ii]->flags &= ~GGML_TENSOR_FLAG_COMPUTE; + } + } + } + } + + i = i_delayed; for (size_t j = 0; j < n_backends; j++) { auto & bcj = backend_ctx->backend_configs[j]; diff --git a/ggml/src/ggml-backend-reg.cpp b/ggml/src/ggml-backend-reg.cpp index 0587109212e..8165ae2c8bb 100644 --- a/ggml/src/ggml-backend-reg.cpp +++ b/ggml/src/ggml-backend-reg.cpp @@ -181,6 +181,12 @@ struct ggml_backend_registry { return; } + for (auto & entry : backends) { + if (entry.reg == reg) { + return; + } + } + #ifndef NDEBUG GGML_LOG_DEBUG("%s: registered backend %s (%zu devices)\n", __func__, ggml_backend_reg_name(reg), ggml_backend_reg_dev_count(reg)); @@ -192,6 +198,12 @@ struct ggml_backend_registry { } void register_device(ggml_backend_dev_t device) { + for (auto & dev : devices) { + if (dev == device) { + return; + } + } + #ifndef NDEBUG GGML_LOG_DEBUG("%s: registered device %s (%s)\n", __func__, ggml_backend_dev_name(device), ggml_backend_dev_description(device)); #endif diff --git a/ggml/src/ggml-cann/aclnn_ops.cpp b/ggml/src/ggml-cann/aclnn_ops.cpp index a950475fc3b..2dc0f40917d 100644 --- a/ggml/src/ggml-cann/aclnn_ops.cpp +++ b/ggml/src/ggml-cann/aclnn_ops.cpp @@ -25,6 +25,7 @@ #include "ggml-impl.h" #include "ggml.h" + #include <aclnnop/aclnn_add.h> #include <aclnnop/aclnn_add_rms_norm.h> #include <aclnnop/aclnn_addcdiv.h> @@ -45,7 +46,9 @@ #include <aclnnop/aclnn_fused_infer_attention_score_v2.h> #include <aclnnop/aclnn_ger.h> #include <aclnnop/aclnn_group_norm.h> +#include <aclnnop/aclnn_gather_v2.h> #include <aclnnop/aclnn_grouped_matmul_v3.h> +#include <aclnnop/aclnn_scatter.h> #include <aclnnop/aclnn_gt_scalar.h> #include <aclnnop/aclnn_im2col.h> #include <aclnnop/aclnn_index_copy.h> @@ -62,6 +65,7 @@ #include <aclnnop/aclnn_permute.h> #include <aclnnop/aclnn_pow.h> #include <aclnnop/aclnn_pow_tensor_tensor.h> +#include <aclnnop/aclnn_recurrent_gated_delta_rule.h> #include <aclnnop/aclnn_reduce_sum.h> #include <aclnnop/aclnn_reflection_pad1d.h> #include <aclnnop/aclnn_repeat.h> @@ -69,11 +73,15 @@ #include <aclnnop/aclnn_rms_norm.h> #include <aclnnop/aclnn_roll.h> #include <aclnnop/aclnn_softmax.h> +#include <aclnnop/aclnn_softmax_cross_entropy_with_logits.h> #include <aclnnop/aclnn_sub.h> #include <aclnnop/aclnn_sum.h> #include <aclnnop/aclnn_threshold.h> #include <aclnnop/aclnn_tril.h> +#include <aclnnop/aclnn_triangular_solve.h> #include <aclnnop/aclnn_triu.h> +#include <aclnnop/aclnn_logical_not.h> +#include <aclnnop/aclnn_masked_fill_scalar.h> #include <aclnnop/aclnn_upsample_nearest_2d.h> #include <aclnnop/aclnn_weight_quant_batch_matmul_v2.h> #include <aclnnop/aclnn_zero.h> @@ -151,6 +159,107 @@ void ggml_cann_op_unary_gated(std::function<void(ggml_backend_cann_context &, ac GGML_CANN_CALL_ACLNN_OP(ctx, InplaceMul, acl_dst.get(), acl_src1.get()); } +// Fused SwiGLU using aclnnSwiGlu: splits input along innermost dim, applies +// SiLU to left half, multiplies by right half. +// +// Falls back to the generic two-kernel path when src[1] != nullptr (two +// independent halves) or swapped != 0 (reversed activation order), as +// aclnnSwiGlu only handles the single interleaved tensor in standard order. +// +// CANN tiling for SwiGlu requires (storageShapeDim + viewDims) to be even. +// aclCreateTensor always uses storageShapeDim=1, so viewDims must be odd. +// We use a 3D view (1+3=4, even) to satisfy this constraint while preserving +// correct split semantics along the innermost (ne[0]) dimension. +void ggml_cann_swiglu(ggml_backend_cann_context & ctx, ggml_tensor * dst) { + auto silu_fn = [](ggml_backend_cann_context & ctx, aclTensor * acl_src, aclTensor * acl_dst) { + GGML_CANN_CALL_ACLNN_OP(ctx, Silu, acl_src, acl_dst); + }; + + const int32_t swapped = ggml_get_op_params_i32(dst, 1); + if (dst->src[1] != nullptr || swapped != 0) { + ggml_cann_op_unary_gated(silu_fn, ctx, dst); + return; + } + + // aclnnSwiGlu requires the split dim (src->ne[0]) to be even; fall back otherwise. + if (dst->src[0]->ne[0] % 2 != 0) { + ggml_cann_op_unary_gated(silu_fn, ctx, dst); + return; + } + + ggml_tensor * src0 = dst->src[0]; + size_t elem_size = ggml_element_size(src0); + + // src0 GGML: [2*ne0, ne1, ne2, ne3] → 3D view [2*ne0, ne1, ne2*ne3] + // CANN reversed: [ne2*ne3, ne1, 2*ne0], split along CANN dim 2 (last). + int64_t ne0_x2 = src0->ne[0]; + int64_t ne1 = src0->ne[1]; + int64_t ne23 = src0->ne[2] * src0->ne[3]; + int64_t src3d_ne[] = { ne0_x2, ne1, ne23 }; + size_t src3d_nb[] = { (size_t)src0->nb[0], (size_t)src0->nb[1], (size_t)src0->nb[2] }; + acl_tensor_ptr acl_src = ggml_cann_create_tensor(src0->data, ggml_cann_type_mapping(src0->type), + elem_size, src3d_ne, src3d_nb, 3); + + // dst GGML: [ne0, ne1, ne2, ne3] → 3D view [ne0, ne1, ne2*ne3] + int64_t ne0 = dst->ne[0]; + int64_t dst3d_ne[] = { ne0, ne1, ne23 }; + size_t dst3d_nb[] = { (size_t)dst->nb[0], (size_t)dst->nb[1], (size_t)dst->nb[2] }; + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst->data, ggml_cann_type_mapping(dst->type), + elem_size, dst3d_ne, dst3d_nb, 3); + + // CANN tensor [ne23, ne1, 2*ne0]: split along CANN dim 2 (last) = 2*ne0. + GGML_CANN_CALL_ACLNN_OP(ctx, SwiGlu, acl_src.get(), (int64_t)2, acl_dst.get()); +} + +// Fused GeGLU using aclnnGeGluV3: splits input along ne[0] (CANN last dim), +// activates the LEFT half with GELU, multiplies by right half. +// approximate: 0=tanh, 1=none(erf). activateLeft=true matches GGML convention. +// outGelu is a required-but-discard output buffer. +// +// Falls back to the generic two-kernel path when src[1] != nullptr (two +// independent halves) or swapped != 0 (reversed activation order), as +// aclnnGeGluV3 only handles the single interleaved tensor in standard order. +void ggml_cann_geglu(ggml_backend_cann_context & ctx, ggml_tensor * dst, int64_t approximate) { + auto gelu_fn = [](ggml_backend_cann_context & ctx, aclTensor * acl_src, aclTensor * acl_dst) { + GGML_CANN_CALL_ACLNN_OP(ctx, Gelu, acl_src, acl_dst); + }; + + const int32_t swapped = ggml_get_op_params_i32(dst, 1); + if (dst->src[1] != nullptr || swapped != 0) { + ggml_cann_op_unary_gated(gelu_fn, ctx, dst); + return; + } + + // aclnnGeGluV3 requires the split dim (src->ne[0]) to be even; fall back otherwise. + if (dst->src[0]->ne[0] % 2 != 0) { + ggml_cann_op_unary_gated(gelu_fn, ctx, dst); + return; + } + + ggml_tensor * src0 = dst->src[0]; + acl_tensor_ptr acl_src = ggml_cann_create_tensor(src0); + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst); + + // Allocate a temporary buffer for the required outGelu output (same shape as dst). + // Build contiguous strides since the pool allocation is a fresh buffer. + size_t elem_size = ggml_element_size(dst); + int64_t ne[GGML_MAX_DIMS] = { dst->ne[0], dst->ne[1], dst->ne[2], dst->ne[3] }; + size_t nb[GGML_MAX_DIMS]; + nb[0] = elem_size; + for (int i = 1; i < GGML_MAX_DIMS; i++) { + nb[i] = nb[i - 1] * ne[i - 1]; + } + size_t gelu_out_size = nb[GGML_MAX_DIMS - 1] * ne[GGML_MAX_DIMS - 1]; + ggml_cann_pool_alloc gelu_out_alloc(ctx.pool(), gelu_out_size); + + acl_tensor_ptr acl_gelu_out = ggml_cann_create_tensor( + gelu_out_alloc.get(), ggml_cann_type_mapping(dst->type), elem_size, ne, nb, GGML_MAX_DIMS); + // V3 adds activateLeft param; true → Gelu(left)*right, matching GGML convention. + // GGML dim 0 → CANN last dim (index GGML_MAX_DIMS-1 = 3 for 4D tensor). + GGML_CANN_CALL_ACLNN_OP(ctx, GeGluV3, acl_src.get(), (int64_t)(GGML_MAX_DIMS - 1), approximate, true, + acl_dst.get(), acl_gelu_out.get()); +} + /** * @brief Repeats elements of a tensor along each dimension according to the * specified repeat array. @@ -445,28 +554,33 @@ void ggml_cann_l2_norm(ggml_backend_cann_context & ctx, ggml_tensor * dst) { ggml_cann_pool_alloc temp_buffer_allocator(ctx.pool(), n_bytes); void * buffer = temp_buffer_allocator.get(); - int64_t div_ne[] = { 1, src->ne[1], src->ne[2], src->ne[3] }; - size_t div_nb[GGML_MAX_DIMS]; - div_nb[0] = sizeof(float); + int64_t norm_ne[] = { 1, src->ne[1], src->ne[2], src->ne[3] }; + size_t norm_nb[GGML_MAX_DIMS]; + norm_nb[0] = sizeof(float); for (int i = 1; i < GGML_MAX_DIMS; ++i) { - div_nb[i] = div_nb[i - 1] * div_ne[i - 1]; + norm_nb[i] = norm_nb[i - 1] * norm_ne[i - 1]; } - acl_tensor_ptr acl_div = ggml_cann_create_tensor(buffer, ACL_FLOAT, type_size, div_ne, div_nb, GGML_MAX_DIMS); + acl_tensor_ptr acl_norm = ggml_cann_create_tensor(buffer, ACL_FLOAT, sizeof(float), norm_ne, norm_nb, GGML_MAX_DIMS); std::vector<int64_t> norm_dims = { 3 }; acl_int_array_ptr dims_array = ggml_cann_create_int_array(norm_dims.data(), norm_dims.size()); float p_value = 2.0f; acl_scalar_ptr p_scalar = ggml_cann_create_scalar(&p_value, aclDataType::ACL_FLOAT); - GGML_CANN_CALL_ACLNN_OP(ctx, Norm, acl_src.get(), p_scalar.get(), dims_array.get(), true, acl_div.get()); + GGML_CANN_CALL_ACLNN_OP(ctx, Norm, acl_src.get(), p_scalar.get(), dims_array.get(), true, acl_norm.get()); + + ggml_cann_pool_alloc clamp_buffer_allocator(ctx.pool()); + acl_tensor_ptr acl_clamped; - // Clamp norm to at least eps: scale = 1/fmaxf(norm, eps) - acl_scalar_ptr acl_min = ggml_cann_create_scalar(&eps, aclDataType::ACL_FLOAT); - float flt_max = FLT_MAX; - acl_scalar_ptr acl_max = ggml_cann_create_scalar(&flt_max, aclDataType::ACL_FLOAT); - GGML_CANN_CALL_ACLNN_OP(ctx, Clamp, acl_div.get(), acl_min.get(), acl_max.get(), acl_div.get()); + if (eps > 0.0f) { + void * clamp_buf = clamp_buffer_allocator.alloc(n_bytes); + acl_clamped = ggml_cann_create_tensor(clamp_buf, ACL_FLOAT, sizeof(float), norm_ne, norm_nb, GGML_MAX_DIMS); + acl_scalar_ptr eps_scalar = ggml_cann_create_scalar(&eps, aclDataType::ACL_FLOAT); + GGML_CANN_CALL_ACLNN_OP(ctx, ClampMin, acl_norm.get(), eps_scalar.get(), acl_clamped.get()); + } - GGML_CANN_CALL_ACLNN_OP(ctx, Div, acl_src.get(), acl_div.get(), acl_dst.get()); + aclTensor * acl_div_input = acl_clamped ? acl_clamped.get() : acl_norm.get(); + GGML_CANN_CALL_ACLNN_OP(ctx, Div, acl_src.get(), acl_div_input, acl_dst.get()); } void ggml_cann_cross_entropy_loss(ggml_backend_cann_context & ctx, ggml_tensor * dst) { @@ -482,56 +596,30 @@ void ggml_cann_cross_entropy_loss(ggml_backend_cann_context & ctx, ggml_tensor * logits_nb[1] = logits_nb[0] * logits_ne[0]; acl_tensor_ptr acl_logits = ggml_cann_create_tensor(src0->data, ACL_FLOAT, sizeof(float), logits_ne, logits_nb, 2); - size_t log_softmax_type_size = sizeof(float); - int64_t log_softmax_n_bytes = nr * nc * log_softmax_type_size; - ggml_cann_pool_alloc log_softmax_allocator(ctx.pool(), log_softmax_n_bytes); - void * log_softmax_buffer = log_softmax_allocator.get(); - - int64_t log_softmax_ne[] = { nc, nr }; - size_t log_softmax_nb[2]; - log_softmax_nb[0] = log_softmax_type_size; - log_softmax_nb[1] = log_softmax_nb[0] * log_softmax_ne[0]; - acl_tensor_ptr acl_log_softmax = ggml_cann_create_tensor(log_softmax_buffer, ACL_FLOAT, log_softmax_type_size, - log_softmax_ne, log_softmax_nb, 2); - - GGML_CANN_CALL_ACLNN_OP(ctx, LogSoftmax, acl_logits.get(), 1, acl_log_softmax.get()); - int64_t labels_ne[] = { nc, nr }; size_t labels_nb[2]; labels_nb[0] = ggml_type_size(src1->type); labels_nb[1] = labels_nb[0] * labels_ne[0]; acl_tensor_ptr acl_labels = ggml_cann_create_tensor(src1->data, ACL_FLOAT, sizeof(float), labels_ne, labels_nb, 2); - size_t mul_type_size = sizeof(float); - int64_t mul_n_bytes = nr * nc * mul_type_size; - ggml_cann_pool_alloc mul_allocator(ctx.pool(), mul_n_bytes); - void * mul_buffer = mul_allocator.get(); - - int64_t mul_ne[] = { nc, nr }; - size_t mul_nb[2]; - mul_nb[0] = mul_type_size; - mul_nb[1] = mul_nb[0] * mul_ne[0]; - acl_tensor_ptr acl_mul_result = ggml_cann_create_tensor(mul_buffer, ACL_FLOAT, mul_type_size, mul_ne, mul_nb, 2); - - GGML_CANN_CALL_ACLNN_OP(ctx, Mul, acl_log_softmax.get(), acl_labels.get(), acl_mul_result.get()); + size_t loss_per_sample_type_size = sizeof(float); + int64_t loss_per_sample_n_bytes = nr * loss_per_sample_type_size; + ggml_cann_pool_alloc loss_per_sample_allocator(ctx.pool(), loss_per_sample_n_bytes); + void * loss_per_sample_buffer = loss_per_sample_allocator.get(); - size_t sum_per_sample_type_size = sizeof(float); - int64_t sum_per_sample_n_bytes = nr * sum_per_sample_type_size; - ggml_cann_pool_alloc sum_per_sample_allocator(ctx.pool(), sum_per_sample_n_bytes); - void * sum_per_sample_buffer = sum_per_sample_allocator.get(); + int64_t loss_per_sample_ne[] = { nr }; + size_t loss_per_sample_nb[1]; + loss_per_sample_nb[0] = loss_per_sample_type_size; + acl_tensor_ptr acl_loss_per_sample = ggml_cann_create_tensor( + loss_per_sample_buffer, ACL_FLOAT, loss_per_sample_type_size, loss_per_sample_ne, loss_per_sample_nb, 1); - int64_t sum_per_sample_ne[] = { nr }; - size_t sum_per_sample_nb[1]; - sum_per_sample_nb[0] = sum_per_sample_type_size; - acl_tensor_ptr acl_sum_per_sample = ggml_cann_create_tensor( - sum_per_sample_buffer, ACL_FLOAT, sum_per_sample_type_size, sum_per_sample_ne, sum_per_sample_nb, 1); + size_t backprop_n_bytes = nr * nc * sizeof(float); + ggml_cann_pool_alloc backprop_allocator(ctx.pool(), backprop_n_bytes); + void * backprop_buffer = backprop_allocator.get(); + acl_tensor_ptr acl_backprop = ggml_cann_create_tensor(backprop_buffer, ACL_FLOAT, sizeof(float), logits_ne, logits_nb, 2); - std::vector<int64_t> sum_dims = { 1 }; - acl_int_array_ptr dims_array = ggml_cann_create_int_array(sum_dims.data(), sum_dims.size()); - bool keep_dims = false; - - GGML_CANN_CALL_ACLNN_OP(ctx, ReduceSum, acl_mul_result.get(), dims_array.get(), keep_dims, ACL_FLOAT, - acl_sum_per_sample.get()); + GGML_CANN_CALL_ACLNN_OP(ctx, SoftmaxCrossEntropyWithLogits, acl_logits.get(), acl_labels.get(), + acl_loss_per_sample.get(), acl_backprop.get()); size_t total_sum_type_size = sizeof(float); int64_t total_sum_n_bytes = 1 * total_sum_type_size; @@ -547,11 +635,12 @@ void ggml_cann_cross_entropy_loss(ggml_backend_cann_context & ctx, ggml_tensor * std::vector<int64_t> total_sum_dims = { 0 }; acl_int_array_ptr total_sum_dims_array = ggml_cann_create_int_array(total_sum_dims.data(), total_sum_dims.size()); + bool keep_dims = false; - GGML_CANN_CALL_ACLNN_OP(ctx, ReduceSum, acl_sum_per_sample.get(), total_sum_dims_array.get(), keep_dims, ACL_FLOAT, + GGML_CANN_CALL_ACLNN_OP(ctx, ReduceSum, acl_loss_per_sample.get(), total_sum_dims_array.get(), keep_dims, ACL_FLOAT, acl_total_sum.get()); - float value = -1.0f / static_cast<float>(nr); + float value = 1.0f / static_cast<float>(nr); acl_scalar_ptr scale_factor = ggml_cann_create_scalar(&value, aclDataType::ACL_FLOAT); acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst->data, ACL_FLOAT, sizeof(float), total_sum_ne, total_sum_nb, 1); @@ -589,6 +678,33 @@ void ggml_cann_group_norm(ggml_backend_cann_context & ctx, ggml_tensor * dst) { acl_mean_out.get(), acl_rstd_out.get()); } +void ggml_cann_set(ggml_backend_cann_context & ctx, ggml_tensor * dst) { + ggml_tensor * src0 = dst->src[0]; + ggml_tensor * src1 = dst->src[1]; + + size_t nb1 = ((int32_t *) dst->op_params)[0]; + size_t nb2 = ((int32_t *) dst->op_params)[1]; + size_t nb3 = ((int32_t *) dst->op_params)[2]; + size_t offset = ((int32_t *) dst->op_params)[3]; + bool inplace = (bool) ((int32_t *) dst->op_params)[4]; + + size_t param_nb[] = { ggml_element_size(src0), nb1, nb2, nb3 }; + + // Create a view of dst at the target offset with src1's dimensions + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst, src1->ne, param_nb, GGML_MAX_DIMS, ACL_FORMAT_ND, offset); + acl_tensor_ptr acl_src1 = ggml_cann_create_tensor(src1); + + if (!inplace) { + // First copy src0 to dst entirely + size_t cpy_size = ggml_nbytes(dst); + ACL_CHECK( + aclrtMemcpyAsync(dst->data, cpy_size, src0->data, cpy_size, ACL_MEMCPY_DEVICE_TO_DEVICE, ctx.stream())); + } + + // Copy src1 into the target region of dst + GGML_CANN_CALL_ACLNN_OP(ctx, InplaceCopy, acl_dst.get(), acl_src1.get()); +} + void ggml_cann_acc(ggml_backend_cann_context & ctx, ggml_tensor * dst) { ggml_tensor * src0 = dst->src[0]; ggml_tensor * src1 = dst->src[1]; @@ -652,6 +768,113 @@ void ggml_cann_sum(ggml_backend_cann_context & ctx, ggml_tensor * dst) { aclnn_reduce_sum(ctx, dst, reduce_dims, 4); } +void ggml_cann_cumsum(ggml_backend_cann_context & ctx, ggml_tensor * dst) { + ggml_tensor * src = dst->src[0]; + acl_tensor_ptr acl_src = ggml_cann_create_tensor(src); + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst); + // GGML cumsum operates along dim 0 (innermost / ne[0]). + // ggml_cann_create_tensor reverses dimensions to [ne3,ne2,ne1,ne0], + // so GGML dim 0 maps to CANN dim 3 (the last dim of the 4-D tensor). + GGML_CANN_CALL_ACLNN_OP(ctx, Cumsum, acl_src.get(), (int64_t)3, + ggml_cann_type_mapping(dst->type), acl_dst.get()); +} + +void ggml_cann_solve_tri(ggml_backend_cann_context & ctx, ggml_tensor * dst) { + ggml_tensor * src0 = dst->src[0]; // A: [N, N, B2, B3] lower triangular + ggml_tensor * src1 = dst->src[1]; // B: [K, N, B2, B3] + + acl_tensor_ptr acl_a = ggml_cann_create_tensor(src0); + acl_tensor_ptr acl_b = ggml_cann_create_tensor(src1); + acl_tensor_ptr acl_x = ggml_cann_create_tensor(dst); + + // mOut: triangular copy of A (required output), same shape as A. + const size_t a_bytes = ggml_nbytes(src0); + ggml_cann_pool_alloc m_alloc(ctx.pool(), a_bytes); + acl_tensor_ptr acl_m = ggml_cann_create_tensor( + m_alloc.get(), ggml_cann_type_mapping(src0->type), + ggml_type_size(src0->type), src0->ne, src0->nb, GGML_MAX_DIMS); + + // Solve AX = B: upper=false (lower tri), transpose=false, unitriangular=false. + GGML_CANN_CALL_ACLNN_OP(ctx, TriangularSolve, + acl_b.get(), acl_a.get(), false, false, false, + acl_x.get(), acl_m.get()); +} + +void ggml_cann_diag(ggml_backend_cann_context & ctx, ggml_tensor * dst) { + ggml_tensor * src = dst->src[0]; + + GGML_ASSERT(src->ne[1] == 1); + + const int64_t N = src->ne[0]; + const int64_t n_batch = src->ne[2] * src->ne[3]; + const size_t nb_f32 = sizeof(float); + + // Fill dst with zeros. + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst); + { + float zero = 0.0f; + acl_scalar_ptr acl_zero = ggml_cann_create_scalar(&zero, ACL_FLOAT); + GGML_CANN_CALL_ACLNN_OP(ctx, InplaceFillScalar, acl_dst.get(), acl_zero.get()); + } + + // Copy src vector onto the diagonal of dst via strided views. + // src viewed as [N, n_batch], contiguous strides. + int64_t ne_vec[2] = { N, n_batch }; + size_t nb_src_vec[2] = { nb_f32, N * nb_f32 }; + // dst diagonal view: stride (N+1)*4 steps along the diagonal. + size_t nb_dst_diag[2] = { (N + 1) * nb_f32, N * N * nb_f32 }; + + acl_tensor_ptr acl_src_vec = ggml_cann_create_tensor(src->data, ACL_FLOAT, nb_f32, ne_vec, nb_src_vec, 2); + acl_tensor_ptr acl_dst_diag = ggml_cann_create_tensor(dst->data, ACL_FLOAT, nb_f32, ne_vec, nb_dst_diag, 2); + + GGML_CANN_CALL_ACLNN_OP(ctx, InplaceCopy, acl_dst_diag.get(), acl_src_vec.get()); +} + +void ggml_cann_fill(ggml_backend_cann_context & ctx, ggml_tensor * dst) { + float c = ggml_get_op_params_f32(dst, 0); + + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst); + acl_scalar_ptr acl_c = ggml_cann_create_scalar(&c, ACL_FLOAT); + GGML_CANN_CALL_ACLNN_OP(ctx, InplaceFillScalar, acl_dst.get(), acl_c.get()); +} + +void ggml_cann_tri(ggml_backend_cann_context & ctx, ggml_tensor * dst) { + ggml_tensor * src = dst->src[0]; + + const int64_t S = src->ne[0]; + const int64_t n_batch = src->ne[2] * src->ne[3]; + const size_t nb_f32 = sizeof(float); + + int64_t ne3d[3] = { S, S, n_batch }; + size_t nb3d[3] = { nb_f32, S * nb_f32, S * S * nb_f32 }; + + const ggml_tri_type ttype = (ggml_tri_type) ggml_get_op_params_i32(dst, 0); + + acl_tensor_ptr acl_src = ggml_cann_create_tensor(src->data, ACL_FLOAT, nb_f32, ne3d, nb3d, 3); + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst->data, ACL_FLOAT, nb_f32, ne3d, nb3d, 3); + + switch (ttype) { + case GGML_TRI_TYPE_LOWER: + // Tril(-1): preserve row > col (strict lower), zero upper + diagonal. + GGML_CANN_CALL_ACLNN_OP(ctx, Tril, acl_src.get(), (int64_t)-1, acl_dst.get()); + break; + case GGML_TRI_TYPE_UPPER_DIAG: + // Triu(0): preserve row <= col (upper + diagonal), zero strict lower. + GGML_CANN_CALL_ACLNN_OP(ctx, Triu, acl_src.get(), (int64_t)0, acl_dst.get()); + break; + case GGML_TRI_TYPE_UPPER: + // Triu(1): preserve row < col (strict upper), zero lower + diagonal. + GGML_CANN_CALL_ACLNN_OP(ctx, Triu, acl_src.get(), (int64_t)1, acl_dst.get()); + break; + case GGML_TRI_TYPE_LOWER_DIAG: + // Tril(0): preserve row >= col (lower + diagonal), zero strict upper. + GGML_CANN_CALL_ACLNN_OP(ctx, Tril, acl_src.get(), (int64_t)0, acl_dst.get()); + break; + default: + GGML_ABORT("unsupported tri type"); + } +} + void ggml_cann_upsample_nearest2d(ggml_backend_cann_context & ctx, ggml_tensor * dst) { ggml_tensor * src = dst->src[0]; acl_tensor_ptr acl_src = ggml_cann_create_tensor(src, nullptr, nullptr, 0, ACL_FORMAT_NCHW); @@ -1695,152 +1918,90 @@ void ggml_cann_softmax(ggml_backend_cann_context & ctx, ggml_tensor * dst) { aclnn_softmax(ctx, softmax_tensor.get(), 3, acl_dst.get()); } -/** - * @brief Performs index select operation on a 4D tensor using the CANN backend. - * - * This function applies the `IndexSelect` operation along a specific dimension - * of the source tensor (`src_buffer`) using the indices from the index tensor (`index`). - * It iterates over the last two dimensions of the source tensor, creates the corresponding - * CANN tensors for the source, index, and output slices, and executes the `IndexSelect` - * operation for each slice. - * - * @param ctx The context for CANN backend operations. - * @param src_buffer The source buffer containing the 4D input tensor data. - * @param src_ne The dimensions of the source tensor. - * @param src_nb The strides (byte offsets) of the source tensor. - * @param dst_buffer The destination buffer where the output tensor data will be written. - * @param dst_ne The dimensions of the destination tensor. - * @param dst_nb The strides (byte offsets) of the destination tensor. - * @param index The index tensor specifying the indices to select from the source tensor. - * @param type The data type of the source and destination tensors. - */ -static void aclnn_index_select_4d(ggml_backend_cann_context & ctx, - void * src_buffer, - int64_t * src_ne, - size_t * src_nb, - void * dst_buffer, - int64_t * dst_ne, - size_t * dst_nb, - ggml_tensor * index, - ggml_type type) { - for (int64_t i = 0; i < src_ne[3]; i++) { - for (int64_t j = 0; j < src_ne[2]; j++) { - // src - acl_tensor_ptr acl_src_tensor = - ggml_cann_create_tensor((char *) src_buffer + i * src_nb[3] + j * src_nb[2], - ggml_cann_type_mapping(type), ggml_type_size(type), src_ne, src_nb, 2); - - // index - acl_tensor_ptr acl_index = ggml_cann_create_tensor( - (char *) index->data + (i % index->ne[2]) * index->nb[2] + (j % index->ne[1]) * index->nb[1], - ggml_cann_type_mapping(index->type), ggml_element_size(index), index->ne, index->nb, 1); - - // out - acl_tensor_ptr acl_out = - ggml_cann_create_tensor((char *) dst_buffer + i * dst_nb[3] + j * dst_nb[2], - ggml_cann_type_mapping(type), ggml_type_size(type), dst_ne, dst_nb, 2); - GGML_CANN_CALL_ACLNN_OP(ctx, IndexSelect, acl_src_tensor.get(), 0, acl_index.get(), acl_out.get()); - } - } -} - -/** - * @brief Performs inplace index copy operation on a 4D tensor using the CANN backend. - * - * This function applies the `IndexCopy` operation along a specific dimension of the - * destination tensor (`dst_buffer`) by copying elements from the source tensor (`src_buffer`) - * to positions specified by the index tensor (`index`). - * It iterates over the last two dimensions of the tensors, creates the corresponding - * CANN tensors for source, index, and destination slices, and performs the index copy - * operation for each slice. - * - * @param ctx The context for CANN backend operations. - * @param src_buffer The source buffer containing the 4D input tensor data to be copied. - * @param src_ne The dimensions of the source tensor. - * @param src_nb The strides (byte offsets) of the source tensor. - * @param dst_buffer The destination buffer where values will be copied to. - * @param dst_ne The dimensions of the destination tensor. - * @param dst_nb The strides (byte offsets) of the destination tensor. - * @param index The index tensor specifying target positions in the destination tensor. - * @param type The data type of the source and destination tensors. - */ -static void aclnn_index_copy_4d(ggml_backend_cann_context & ctx, - void * src_buffer, - int64_t * src_ne, - size_t * src_nb, - void * dst_buffer, - int64_t * dst_ne, - size_t * dst_nb, - ggml_tensor * index, - ggml_type type) { - for (int64_t i = 0; i < src_ne[3]; i++) { - for (int64_t j = 0; j < src_ne[2]; j++) { - // src - acl_tensor_ptr acl_src_tensor = - ggml_cann_create_tensor((char *) src_buffer + i * src_nb[3] + j * src_nb[2], - ggml_cann_type_mapping(type), ggml_type_size(type), src_ne, src_nb, 2); - - // index - acl_tensor_ptr acl_index = ggml_cann_create_tensor( - (char *) index->data + (i % index->ne[2]) * index->nb[2] + (j % index->ne[1]) * index->nb[1], - ggml_cann_type_mapping(index->type), ggml_element_size(index), index->ne, index->nb, 1); - - // out - acl_tensor_ptr acl_out = - ggml_cann_create_tensor((char *) dst_buffer + i * dst_nb[3] + j * dst_nb[2], - ggml_cann_type_mapping(type), ggml_type_size(type), dst_ne, dst_nb, 2); - GGML_CANN_CALL_ACLNN_OP(ctx, InplaceIndexCopy, acl_out.get(), 0, acl_index.get(), acl_src_tensor.get()); - } - } -} void ggml_cann_get_rows(ggml_backend_cann_context & ctx, ggml_tensor * dst) { - ggml_tensor * src0 = dst->src[0]; // src + ggml_tensor * src0 = dst->src[0]; // weight ggml_tensor * src1 = dst->src[1]; // index GGML_ASSERT(dst->type == GGML_TYPE_F32 || dst->type == GGML_TYPE_F16 || dst->type == GGML_TYPE_BF16); + // n_idx: number of row indices per (i2, i3) batch slice. + // ggml guarantees: src0->ne[2] == src1->ne[1], src0->ne[3] == src1->ne[2], src1->ne[3] == 1. + const int64_t n_idx = src1->ne[0]; + + // Gather all (i2, i3) batch slices from src into dst. + // ggml_cann_create_tensor reverses dims, so ACL sees [ne1, ne0]. + // GatherV2 with dim=0 gathers along ACL dim-0 == ggml ne[1] (the vocabulary / row axis). + // nb: the 4 strides of the source buffer (nb[0..1] for the 2D slice shape, + // nb[2..3] for computing per-batch-slice base pointer offsets). + auto gather_batched = [&](void * src_base, aclDataType acl_type, size_t type_size, + const size_t * nb) { + int64_t src_ne[2] = { src0->ne[0], src0->ne[1] }; + size_t src_nb_2d[2] = { nb[0], nb[1] }; + int64_t dst_ne[2] = { src0->ne[0], n_idx }; + size_t dst_nb_2d[2] = { dst->nb[0], dst->nb[1] }; + int64_t idx_ne[1] = { n_idx }; + size_t idx_nb[1] = { (size_t)ggml_element_size(src1) }; + + for (int64_t i3 = 0; i3 < src0->ne[3]; i3++) { + for (int64_t i2 = 0; i2 < src0->ne[2]; i2++) { + acl_tensor_ptr acl_src = ggml_cann_create_tensor( + (char *)src_base + i3 * nb[3] + i2 * nb[2], + acl_type, type_size, src_ne, src_nb_2d, 2); + acl_tensor_ptr acl_idx = ggml_cann_create_tensor( + (char *)src1->data + i3 * src1->nb[2] + i2 * src1->nb[1], + ggml_cann_type_mapping(src1->type), (size_t)ggml_element_size(src1), + idx_ne, idx_nb, 1); + acl_tensor_ptr acl_dst = ggml_cann_create_tensor( + (char *)dst->data + i3 * dst->nb[3] + i2 * dst->nb[2], + acl_type, type_size, dst_ne, dst_nb_2d, 2); + GGML_CANN_CALL_ACLNN_OP(ctx, GatherV2, acl_src.get(), 0, acl_idx.get(), acl_dst.get()); + } + } + }; + switch (src0->type) { case GGML_TYPE_BF16: case GGML_TYPE_F16: case GGML_TYPE_F32: if (src0->type == dst->type) { - aclnn_index_select_4d(ctx, src0->data, src0->ne, src0->nb, dst->data, dst->ne, dst->nb, src1, - dst->type); + gather_batched(src0->data, + ggml_cann_type_mapping(src0->type), ggml_type_size(src0->type), + src0->nb); } else { - acl_tensor_ptr acl_src0 = ggml_cann_create_tensor(src0); - ggml_cann_pool_alloc src_buffer_allocator(ctx.pool(), ggml_nelements(src0) * ggml_element_size(dst)); - void * src_trans_buffer = src_buffer_allocator.get(); - size_t src_trans_nb[GGML_MAX_DIMS]; - src_trans_nb[0] = dst->nb[0]; + // Cast src0 to dst type, then gather. + ggml_cann_pool_alloc src_cast_allocator(ctx.pool(), + ggml_nelements(src0) * ggml_element_size(dst)); + size_t src_cast_nb[GGML_MAX_DIMS]; + src_cast_nb[0] = ggml_type_size(dst->type); for (int i = 1; i < GGML_MAX_DIMS; i++) { - src_trans_nb[i] = src_trans_nb[i - 1] * src0->ne[i - 1]; + src_cast_nb[i] = src_cast_nb[i - 1] * src0->ne[i - 1]; } - acl_tensor_ptr src_trans_tensor = - ggml_cann_create_tensor(src_trans_buffer, ggml_cann_type_mapping(dst->type), - ggml_type_size(dst->type), src0->ne, src_trans_nb, GGML_MAX_DIMS); - aclnn_cast(ctx, acl_src0.get(), src_trans_tensor.get(), ggml_cann_type_mapping(dst->type)); - aclnn_index_select_4d(ctx, src_trans_buffer, src0->ne, src_trans_nb, dst->data, dst->ne, dst->nb, src1, - dst->type); + acl_tensor_ptr acl_src0 = ggml_cann_create_tensor(src0); + acl_tensor_ptr acl_src_cast = ggml_cann_create_tensor( + src_cast_allocator.get(), ggml_cann_type_mapping(dst->type), ggml_type_size(dst->type), + src0->ne, src_cast_nb, GGML_MAX_DIMS); + aclnn_cast(ctx, acl_src0.get(), acl_src_cast.get(), ggml_cann_type_mapping(dst->type)); + + gather_batched(src_cast_allocator.get(), + ggml_cann_type_mapping(dst->type), ggml_type_size(dst->type), + src_cast_nb); } break; case GGML_TYPE_Q8_0: { - // add 1 dim for bcast mul. + // Dequantize Q8_0 to dst type, then gather. size_t weight_nb[GGML_MAX_DIMS + 1], scale_nb[GGML_MAX_DIMS + 1], dequant_nb[GGML_MAX_DIMS + 1]; int64_t weight_ne[GGML_MAX_DIMS + 1], scale_ne[GGML_MAX_DIMS + 1], *dequant_ne; - int64_t scale_offset = 0; - // [3,4,5,64] -> [3,4,5,2,32] - weight_ne[0] = QK8_0; - weight_ne[1] = src0->ne[0] / QK8_0; - weight_nb[0] = sizeof(int8_t); - weight_nb[1] = weight_nb[0] * weight_ne[0]; + weight_ne[0] = QK8_0; + weight_ne[1] = src0->ne[0] / QK8_0; + weight_nb[0] = sizeof(int8_t); + weight_nb[1] = weight_nb[0] * weight_ne[0]; for (int i = 2; i < GGML_MAX_DIMS + 1; i++) { weight_ne[i] = src0->ne[i - 1]; weight_nb[i] = weight_nb[i - 1] * weight_ne[i - 1]; } - // [3,4,5,64] -> [3,4,5,2,1] scale_ne[0] = 1; scale_ne[1] = src0->ne[0] / QK8_0; scale_nb[0] = sizeof(uint16_t); @@ -1849,31 +2010,33 @@ void ggml_cann_get_rows(ggml_backend_cann_context & ctx, ggml_tensor * dst) { scale_ne[i] = src0->ne[i - 1]; scale_nb[i] = scale_nb[i - 1] * scale_ne[i - 1]; } - // [3,4,5,64] -> [3,4,5,2,32] dequant_ne = weight_ne; dequant_nb[0] = ggml_type_size(dst->type); for (int i = 1; i < GGML_MAX_DIMS + 1; i++) { dequant_nb[i] = dequant_nb[i - 1] * dequant_ne[i - 1]; } - scale_offset = ggml_nelements(src0) * sizeof(int8_t); - ggml_cann_pool_alloc dequant_buffer_allocator(ctx.pool(), - ggml_nelements(src0) * ggml_type_size(dst->type)); - acl_tensor_ptr acl_weight_tensor = ggml_cann_create_tensor(src0->data, ACL_INT8, sizeof(int8_t), - weight_ne, weight_nb, GGML_MAX_DIMS + 1); - acl_tensor_ptr acl_scale_tensor = - ggml_cann_create_tensor(src0->data, ACL_FLOAT16, sizeof(uint16_t), scale_ne, scale_nb, - GGML_MAX_DIMS + 1, ACL_FORMAT_ND, scale_offset); - acl_tensor_ptr dequant_tensor = - ggml_cann_create_tensor(dequant_buffer_allocator.get(), ggml_cann_type_mapping(dst->type), - ggml_type_size(dst->type), dequant_ne, dequant_nb, GGML_MAX_DIMS + 1); - aclnn_mul(ctx, acl_weight_tensor.get(), acl_scale_tensor.get(), dequant_tensor.get()); - dequant_nb[0] = ggml_type_size(dst->type); + const int64_t scale_offset = ggml_nelements(src0) * sizeof(int8_t); + ggml_cann_pool_alloc dequant_allocator(ctx.pool(), + ggml_nelements(src0) * ggml_type_size(dst->type)); + acl_tensor_ptr acl_weight = ggml_cann_create_tensor(src0->data, ACL_INT8, sizeof(int8_t), + weight_ne, weight_nb, GGML_MAX_DIMS + 1); + acl_tensor_ptr acl_scale = ggml_cann_create_tensor( + src0->data, ACL_FLOAT16, sizeof(uint16_t), scale_ne, scale_nb, + GGML_MAX_DIMS + 1, ACL_FORMAT_ND, scale_offset); + acl_tensor_ptr acl_dequant = ggml_cann_create_tensor( + dequant_allocator.get(), ggml_cann_type_mapping(dst->type), + ggml_type_size(dst->type), dequant_ne, dequant_nb, GGML_MAX_DIMS + 1); + aclnn_mul(ctx, acl_weight.get(), acl_scale.get(), acl_dequant.get()); + + // Reinterpret dequant buffer as 4D [src0->ne] with contiguous strides. dequant_ne = src0->ne; + dequant_nb[0] = ggml_type_size(dst->type); for (int i = 1; i < GGML_MAX_DIMS; i++) { dequant_nb[i] = dequant_nb[i - 1] * src0->ne[i - 1]; } - aclnn_index_select_4d(ctx, dequant_buffer_allocator.get(), dequant_ne, dequant_nb, dst->data, dst->ne, - dst->nb, src1, dst->type); + gather_batched(dequant_allocator.get(), + ggml_cann_type_mapping(dst->type), ggml_type_size(dst->type), + dequant_nb); break; } default: @@ -1883,31 +2046,70 @@ void ggml_cann_get_rows(ggml_backend_cann_context & ctx, ggml_tensor * dst) { } void ggml_cann_set_rows(ggml_backend_cann_context & ctx, ggml_tensor * dst) { - ggml_tensor * src0 = dst->src[0]; // src - ggml_tensor * src1 = dst->src[1]; // index + ggml_tensor * src0 = dst->src[0]; // source values + ggml_tensor * src1 = dst->src[1]; // row indices + + // n_idx: number of source rows to scatter per batch slice. + // ggml guarantees: src0->ne[1] == src1->ne[0]. + const int64_t n_idx = src1->ne[0]; + + // Copy n_idx rows of src [ne0, n_idx] into dst [ne0, ne1] at positions given by a 1D index. + // ggml_cann_create_tensor reverses dims, so ACL sees [ne1, ne0] for dst. + // InplaceIndexCopy with dim=0 copies along ACL dim-0 == ggml ne[1] (the row axis). + // src_nb: the 4 strides of the source buffer (nb[0..1] for the 2D slice shape, + // nb[2..3] for computing per-batch-slice base pointer offsets). + auto scatter_batched = [&](void * src_base, aclDataType acl_type, size_t type_size, + const size_t * src_nb) { + int64_t d_ne[2] = { dst->ne[0], dst->ne[1] }; + size_t d_nb[2] = { dst->nb[0], dst->nb[1] }; + int64_t s_ne[2] = { dst->ne[0], n_idx }; + size_t s_nb_2d[2] = { src_nb[0], src_nb[1] }; + int64_t i_ne[1] = { n_idx }; + size_t i_nb[1] = { (size_t)ggml_element_size(src1) }; + + for (int64_t i3 = 0; i3 < dst->ne[3]; i3++) { + for (int64_t i2 = 0; i2 < dst->ne[2]; i2++) { + acl_tensor_ptr acl_dst = ggml_cann_create_tensor( + (char *)dst->data + i3 * dst->nb[3] + i2 * dst->nb[2], + acl_type, type_size, d_ne, d_nb, 2); + acl_tensor_ptr acl_idx = ggml_cann_create_tensor( + (char *)src1->data + (i3 % src1->ne[2]) * src1->nb[2] + (i2 % src1->ne[1]) * src1->nb[1], + ggml_cann_type_mapping(src1->type), (size_t)ggml_element_size(src1), + i_ne, i_nb, 1); + acl_tensor_ptr acl_src = ggml_cann_create_tensor( + (char *)src_base + i3 * src_nb[3] + i2 * src_nb[2], + acl_type, type_size, s_ne, s_nb_2d, 2); + GGML_CANN_CALL_ACLNN_OP(ctx, InplaceIndexCopy, acl_dst.get(), 0, acl_idx.get(), acl_src.get()); + } + } + }; switch (dst->type) { case GGML_TYPE_F32: - { - aclnn_index_copy_4d(ctx, src0->data, src0->ne, src0->nb, dst->data, dst->ne, dst->nb, src1, dst->type); - break; - } + scatter_batched(src0->data, + ggml_cann_type_mapping(dst->type), ggml_type_size(dst->type), + src0->nb); + break; case GGML_TYPE_F16: case GGML_TYPE_BF16: { - acl_tensor_ptr acl_src0 = ggml_cann_create_tensor(src0); - ggml_cann_pool_alloc src_buffer_allocator(ctx.pool(), ggml_nelements(src0) * sizeof(uint16_t)); - void * src_trans_buffer = src_buffer_allocator.get(); - size_t src_trans_nb[GGML_MAX_DIMS]; - src_trans_nb[0] = sizeof(uint16_t); + // Cast src0 (F32) to dst type first. + ggml_cann_pool_alloc src_cast_allocator(ctx.pool(), + ggml_nelements(src0) * ggml_type_size(dst->type)); + size_t src_cast_nb[GGML_MAX_DIMS]; + src_cast_nb[0] = ggml_type_size(dst->type); for (int i = 1; i < GGML_MAX_DIMS; i++) { - src_trans_nb[i] = src_trans_nb[i - 1] * src0->ne[i - 1]; + src_cast_nb[i] = src_cast_nb[i - 1] * src0->ne[i - 1]; } - acl_tensor_ptr src_trans_tensor = ggml_cann_create_tensor( - src_trans_buffer, ggml_cann_type_mapping(dst->type), ggml_type_size(dst->type), src0->ne, src_trans_nb, GGML_MAX_DIMS); - aclnn_cast(ctx, acl_src0.get(), src_trans_tensor.get(), ggml_cann_type_mapping(dst->type)); - aclnn_index_copy_4d(ctx, src_trans_buffer, src0->ne, src_trans_nb, dst->data, dst->ne, dst->nb, src1, - dst->type); + acl_tensor_ptr acl_src0 = ggml_cann_create_tensor(src0); + acl_tensor_ptr acl_src_cast = ggml_cann_create_tensor( + src_cast_allocator.get(), ggml_cann_type_mapping(dst->type), ggml_type_size(dst->type), + src0->ne, src_cast_nb, GGML_MAX_DIMS); + aclnn_cast(ctx, acl_src0.get(), acl_src_cast.get(), ggml_cann_type_mapping(dst->type)); + + scatter_batched(src_cast_allocator.get(), + ggml_cann_type_mapping(dst->type), ggml_type_size(dst->type), + src_cast_nb); break; } default: @@ -3268,29 +3470,50 @@ void ggml_cann_pad_reflect_1d(ggml_backend_cann_context & ctx, ggml_tensor * dst int64_t paddingsArray[2] = { opts[0], opts[1] }; acl_int_array_ptr paddings = ggml_cann_create_int_array(paddingsArray, 2); - for (int64_t i = 0; i < src0->ne[3]; i++) { - acl_tensor_ptr acl_src = - ggml_cann_create_tensor((char *) src0->data + i * src0->ne[3], ggml_cann_type_mapping(src0->type), - ggml_element_size(src0), src0->ne, src0->nb, 3); + // Collapsing ne[2]*ne[3] into a single batch dimension requires that dim3 + // is contiguous with respect to dim2 in both src and dst. + GGML_ASSERT(src0->nb[3] == src0->nb[2] * src0->ne[2]); + GGML_ASSERT(dst->nb[3] == dst->nb[2] * dst->ne[2]); - acl_tensor_ptr acl_dst = - ggml_cann_create_tensor((char *) dst->data + i * src0->ne[3], ggml_cann_type_mapping(dst->type), - ggml_element_size(dst), dst->ne, dst->nb, 3); + int64_t src_ne_3d[3] = { src0->ne[0], src0->ne[1], src0->ne[2] * src0->ne[3] }; + int64_t dst_ne_3d[3] = { dst->ne[0], dst->ne[1], dst->ne[2] * dst->ne[3] }; - GGML_CANN_CALL_ACLNN_OP(ctx, ReflectionPad1d, acl_src.get(), paddings.get(), acl_dst.get()); - } + acl_tensor_ptr acl_src = ggml_cann_create_tensor(src0->data, ggml_cann_type_mapping(src0->type), + ggml_element_size(src0), src_ne_3d, src0->nb, 3); + + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst->data, ggml_cann_type_mapping(dst->type), + ggml_element_size(dst), dst_ne_3d, dst->nb, 3); + + GGML_CANN_CALL_ACLNN_OP(ctx, ReflectionPad1d, acl_src.get(), paddings.get(), acl_dst.get()); } void ggml_cann_count_equal(ggml_backend_cann_context & ctx, ggml_tensor * dst) { ggml_tensor * src0 = dst->src[0]; ggml_tensor * src1 = dst->src[1]; + // Write element-wise equality (0 or 1) into a temporary buffer to avoid + // modifying src0 in-place. Use the same type as src0 so ReduceSum can + // consume it directly without a type cast. + ggml_cann_pool_alloc eq_alloc(ctx.pool(), ggml_nelements(src0) * ggml_element_size(src0)); + size_t eq_nb[GGML_MAX_DIMS]; + eq_nb[0] = ggml_element_size(src0); + for (int i = 1; i < GGML_MAX_DIMS; i++) { + eq_nb[i] = eq_nb[i - 1] * src0->ne[i - 1]; + } + acl_tensor_ptr acl_eq = ggml_cann_create_tensor( + eq_alloc.get(), ggml_cann_type_mapping(src0->type), ggml_element_size(src0), + src0->ne, eq_nb, GGML_MAX_DIMS); + acl_tensor_ptr acl_self = ggml_cann_create_tensor(src0); acl_tensor_ptr acl_other = ggml_cann_create_tensor(src1); - - GGML_CANN_CALL_ACLNN_OP(ctx, InplaceEqTensor, acl_self.get(), acl_other.get()); - - ggml_cann_sum(ctx, dst); + GGML_CANN_CALL_ACLNN_OP(ctx, EqTensor, acl_self.get(), acl_other.get(), acl_eq.get()); + + // Sum the 0/1 values into dst. + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst); + int64_t dims[4] = { 0, 1, 2, 3 }; + acl_int_array_ptr dims_arr = ggml_cann_create_int_array(dims, 4); + GGML_CANN_CALL_ACLNN_OP(ctx, ReduceSum, acl_eq.get(), dims_arr.get(), true, + ggml_cann_type_mapping(dst->type), acl_dst.get()); } void ggml_cann_step(ggml_backend_cann_context & ctx, ggml_tensor * dst) { @@ -3306,6 +3529,27 @@ void ggml_cann_step(ggml_backend_cann_context & ctx, ggml_tensor * dst) { GGML_CANN_CALL_ACLNN_OP(ctx, GtScalar, acl_src.get(), alpha.get(), acl_dst.get()); } +void ggml_cann_softplus(ggml_backend_cann_context & ctx, ggml_tensor * dst) { + ggml_tensor * src0 = dst->src[0]; + + acl_tensor_ptr acl_src = ggml_cann_create_tensor(src0); + acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst); + + float beta_val = 1.0f; + float threshold_val = 20.0f; + acl_scalar_ptr beta = ggml_cann_create_scalar(&beta_val, ACL_FLOAT); + acl_scalar_ptr threshold = ggml_cann_create_scalar(&threshold_val, ACL_FLOAT); + + GGML_CANN_CALL_ACLNN_OP(ctx, Softplus, acl_src.get(), beta.get(), threshold.get(), acl_dst.get()); +} + +void ggml_cann_geglu_quick(ggml_backend_cann_context & ctx, ggml_tensor * dst) { + auto gelu_quick_fn = [](ggml_backend_cann_context & ctx, aclTensor * acl_src, aclTensor * acl_dst) { + GGML_CANN_CALL_ACLNN_OP(ctx, GeluV2, acl_src, 0, acl_dst); + }; + ggml_cann_op_unary_gated(gelu_quick_fn, ctx, dst); +} + /** * @brief Performs expert-specific matrix multiplication (MoE) with * floating-point precision using the CANN backend. @@ -3892,46 +4136,65 @@ void ggml_cann_flash_attn_ext(ggml_backend_cann_context & ctx, ggml_tensor * dst } static void ggml_cann_out_prod_fp(ggml_backend_cann_context & ctx, ggml_tensor * dst) { - ggml_tensor * src0 = dst->src[0]; // weight - ggml_tensor * src1 = dst->src[1]; // input + ggml_tensor * src0 = dst->src[0]; // weight [ne00=m, ne01=K, ne02, ne03] + ggml_tensor * src1 = dst->src[1]; // input [ne10=n, ne11=K, ne12, ne13] GGML_TENSOR_BINARY_OP_LOCALS - acl_tensor_ptr acl_dst = ggml_cann_create_tensor(dst); - GGML_CANN_CALL_ACLNN_OP(ctx, InplaceZero, acl_dst.get()); + // dst[i,j] = sum_k src0[i,k] * src1[j,k] i.e. dst = src0 @ src1^T. + // + // ggml_cann_create_tensor reverses dimension order, so ACL sees: + // acl_src0 slice: ggml[m,K] -> ACL[K,m] + // acl_src1 slice: ggml[n,K] -> ACL[K,n] + // acl_dst slice: ggml[m,n] -> ACL[n,m] + // + // Build a transposed view of src1 by swapping ne[0]/ne[1]: + // src1_t: ggml[K,n] (swapped strides) -> ACL[n,K] + // + // Matmul(src1_t [n,K], src0 [K,m]) = [n,m] = acl_dst ✓ + // + // The outer batch loop is kept because src0 may have fewer batch slices than + // dst (ne02 <= ne2, ne03 <= ne3): this is a strided-broadcast not supported + // by standard CANN Matmul broadcasting. + + const aclDataType src0_acl_type = ggml_cann_type_mapping(src0->type); + const aclDataType src1_acl_type = ggml_cann_type_mapping(src1->type); + const aclDataType dst_acl_type = ggml_cann_type_mapping(dst->type); + const size_t src0_type_sz = ggml_type_size(src0->type); + const size_t src1_type_sz = ggml_type_size(src1->type); + const size_t dst_type_sz = ggml_type_size(dst->type); const int64_t dps2 = ne2 / ne02; const int64_t dps3 = ne3 / ne03; + for (int64_t i3 = 0; i3 < ne3; i3++) { for (int64_t i2 = 0; i2 < ne2; i2++) { const int64_t i02 = i2 / dps2; const int64_t i03 = i3 / dps3; - const int64_t i12 = i2; - const int64_t i13 = i3; - acl_tensor_ptr accumulator = - ggml_cann_create_tensor((char *) dst->data + i2 * nb2 + i3 * nb3, ggml_cann_type_mapping(dst->type), - ggml_type_size(dst->type), dst->ne, dst->nb, 2); - - // The outer product needs to be accumulated in this dimension. - for (int64_t i1 = 0; i1 < ne11; i1++) { - acl_tensor_ptr acl_input = ggml_cann_create_tensor( - (char *) src1->data + i1 * nb11 + i12 * nb12 + i13 * nb13, ggml_cann_type_mapping(src0->type), - ggml_type_size(src0->type), src1->ne, src1->nb, 1); - - acl_tensor_ptr acl_weight = ggml_cann_create_tensor( - (char *) src0->data + i1 * nb01 + i02 * nb02 + i03 * nb03, ggml_cann_type_mapping(src0->type), - ggml_type_size(src0->type), src0->ne, src0->nb, 1); - - ggml_cann_pool_alloc output_allocator(ctx.pool()); - void * output_buffer = output_allocator.alloc(ggml_nbytes(dst)); - acl_tensor_ptr acl_out = ggml_cann_create_tensor(output_buffer, ggml_cann_type_mapping(dst->type), - ggml_type_size(dst->type), dst->ne, dst->nb, 2); - - GGML_CANN_CALL_ACLNN_OP(ctx, Ger, acl_input.get(), acl_weight.get(), acl_out.get()); - float alpha_value = 1.0f; - aclScalar * alpha = aclCreateScalar(&alpha_value, ACL_FLOAT); - GGML_CANN_CALL_ACLNN_OP(ctx, InplaceAdd, accumulator.get(), acl_out.get(), alpha); - } + // src0 2D slice at [i02, i03]: ggml [m, K] -> ACL [K, m] + int64_t src0_ne[2] = { ne00, ne01 }; + size_t src0_nb[2] = { nb00, nb01 }; + acl_tensor_ptr acl_src0_s = ggml_cann_create_tensor( + (char *) src0->data + i02 * nb02 + i03 * nb03, + src0_acl_type, src0_type_sz, src0_ne, src0_nb, 2); + + // src1 transposed 2D slice at [i2, i3]: swap ne/nb -> ggml[K,n] -> ACL[n,K] + int64_t src1_t_ne[2] = { ne11, ne10 }; + size_t src1_t_nb[2] = { nb11, nb10 }; + acl_tensor_ptr acl_src1_t = ggml_cann_create_tensor( + (char *) src1->data + i2 * nb12 + i3 * nb13, + src1_acl_type, src1_type_sz, src1_t_ne, src1_t_nb, 2); + + // dst 2D slice at [i2, i3]: ggml [m, n] -> ACL [n, m] + int64_t dst_ne[2] = { ne0, ne1 }; + size_t dst_nb[2] = { nb0, nb1 }; + acl_tensor_ptr acl_dst_s = ggml_cann_create_tensor( + (char *) dst->data + i2 * nb2 + i3 * nb3, + dst_acl_type, dst_type_sz, dst_ne, dst_nb, 2); + + // Matmul(src1_t [n,K], src0 [K,m]) = [n,m] = acl_dst_s ✓ + GGML_CANN_CALL_ACLNN_OP(ctx, Matmul, + acl_src1_t.get(), acl_src0_s.get(), acl_dst_s.get(), (int8_t) 1); } } } @@ -4170,3 +4433,4 @@ void ggml_cann_gated_linear_attn(ggml_backend_cann_context & ctx, ggml_tensor * } } } + diff --git a/ggml/src/ggml-cann/aclnn_ops.h b/ggml/src/ggml-cann/aclnn_ops.h index 7f5ba4d3302..cdbf9260f85 100644 --- a/ggml/src/ggml-cann/aclnn_ops.h +++ b/ggml/src/ggml-cann/aclnn_ops.h @@ -32,6 +32,9 @@ #include <aclnnop/aclnn_cat.h> #include <aclnnop/aclnn_clamp.h> #include <aclnnop/aclnn_cos.h> +#include <aclnnop/aclnn_cumsum.h> +#include <aclnnop/aclnn_tril.h> +#include <aclnnop/aclnn_triu.h> #include <aclnnop/aclnn_exp.h> #include <aclnnop/aclnn_gelu.h> #include <aclnnop/aclnn_gelu_v2.h> @@ -47,6 +50,9 @@ #include <aclnnop/aclnn_sign.h> #include <aclnnop/aclnn_silu.h> #include <aclnnop/aclnn_sin.h> +#include <aclnnop/aclnn_softplus.h> +#include <aclnnop/aclnn_swi_glu.h> +#include <aclnnop/aclnn_geglu.h> #include <aclnnop/aclnn_slice.h> #include <aclnnop/aclnn_sqrt.h> #include <aclnnop/aclnn_tanh.h> @@ -69,6 +75,9 @@ */ void ggml_cann_repeat(ggml_backend_cann_context & ctx, ggml_tensor * dst); +void ggml_cann_swiglu(ggml_backend_cann_context & ctx, ggml_tensor * dst); +void ggml_cann_geglu(ggml_backend_cann_context & ctx, ggml_tensor * dst, int64_t approximate); + /** * @brief Applies the Leaky ReLU activation function to a tensor using the CANN * backend. @@ -325,6 +334,48 @@ void ggml_cann_sum_rows(ggml_backend_cann_context & ctx, ggml_tensor * dst); void ggml_cann_sum(ggml_backend_cann_context & ctx, ggml_tensor * dst); +/** + * @brief Computes the cumulative sum of a ggml tensor along dim 0 using the + * CANN backend. + * + * @param ctx The CANN context used for operations. + * @param dst The destination tensor. dst->op is `GGML_OP_CUMSUM`. + */ +void ggml_cann_cumsum(ggml_backend_cann_context & ctx, ggml_tensor * dst); + +/** + * @brief Computes a triangular mask (tril/triu) of a square ggml tensor + * using the CANN backend. + * + * @param ctx The CANN context used for operations. + * @param dst The destination tensor. dst->op is `GGML_OP_TRI`. + */ +void ggml_cann_tri(ggml_backend_cann_context & ctx, ggml_tensor * dst); + +/** + * @brief Solves a triangular linear system AX=B using the CANN backend. + * + * @param ctx The CANN context used for operations. + * @param dst The destination tensor. dst->op is `GGML_OP_SOLVE_TRI`. + */ +void ggml_cann_solve_tri(ggml_backend_cann_context & ctx, ggml_tensor * dst); + +/** + * @brief Creates a diagonal matrix from a vector using the CANN backend. + * + * @param ctx The CANN context used for operations. + * @param dst The destination tensor. dst->op is `GGML_OP_DIAG`. + */ +void ggml_cann_diag(ggml_backend_cann_context & ctx, ggml_tensor * dst); + +/** + * @brief Fills a tensor with a constant scalar value using the CANN backend. + * + * @param ctx The CANN context used for operations. + * @param dst The destination tensor. dst->op is `GGML_OP_FILL`. + */ +void ggml_cann_fill(ggml_backend_cann_context & ctx, ggml_tensor * dst); + /** * @brief Upsamples a ggml tensor using nearest neighbor interpolation using * the CANN backend. @@ -461,6 +512,9 @@ void ggml_cann_timestep_embedding(ggml_backend_cann_context & ctx, ggml_tensor * // @see ggml_cann_dup. void ggml_cann_cpy(ggml_backend_cann_context & ctx, ggml_tensor * dst); +// @see ggml_cann_acc, but copies src1 into dst instead of adding. +void ggml_cann_set(ggml_backend_cann_context & ctx, ggml_tensor * dst); + /** * @brief Computes the softmax activation with optional masking. * @@ -813,6 +867,8 @@ void ggml_cann_count_equal(ggml_backend_cann_context & ctx, ggml_tensor * dst); * dst->op is expected to be `GGML_OP_STEP`. */ void ggml_cann_step(ggml_backend_cann_context & ctx, ggml_tensor * dst); +void ggml_cann_softplus(ggml_backend_cann_context & ctx, ggml_tensor * dst); +void ggml_cann_geglu_quick(ggml_backend_cann_context & ctx, ggml_tensor * dst); /** * @brief Performs the Flash Attention extended operator using the CANN backend. diff --git a/ggml/src/ggml-cann/ggml-cann.cpp b/ggml/src/ggml-cann/ggml-cann.cpp index 5fc484b342b..3618ba7f6f6 100644 --- a/ggml/src/ggml-cann/ggml-cann.cpp +++ b/ggml/src/ggml-cann/ggml-cann.cpp @@ -1428,6 +1428,22 @@ static bool ggml_backend_cann_buffer_cpy_tensor(ggml_backend_buffer_t buffer, return false; } +/** + * @brief Set a region of a tensor's device memory to a specified value. + * + * @param buffer The CANN buffer containing the tensor. + * @param tensor Pointer to the tensor whose memory will be set. + * @param value The value to which each byte in the region will be set. + * @param offset Byte offset within the tensor's data to start setting. + * @param size Number of bytes to set. + */ +static void ggml_backend_cann_buffer_memset_tensor(ggml_backend_buffer_t buffer, ggml_tensor * tensor, uint8_t value, size_t offset, size_t size) { + ggml_backend_cann_buffer_context * ctx = (ggml_backend_cann_buffer_context *) buffer->context; + + ggml_cann_set_device(ctx->device); + ACL_CHECK(aclrtMemset((char *) tensor->data + offset, size, value, size)); +} + /** * @brief Clear a CANN buffer by setting all its memory to a specified value. * @@ -1454,7 +1470,7 @@ static const ggml_backend_buffer_i ggml_backend_cann_buffer_interface = { /* .free_buffer = */ ggml_backend_cann_buffer_free_buffer, /* .get_base = */ ggml_backend_cann_buffer_get_base, /* .init_tensor = */ ggml_backend_cann_buffer_init_tensor, - /* .memset_tensor = */ NULL, + /* .memset_tensor = */ ggml_backend_cann_buffer_memset_tensor, /* .set_tensor = */ ggml_backend_cann_buffer_set_tensor, /* .get_tensor = */ ggml_backend_cann_buffer_get_tensor, /* .set_tensor_2d = */ NULL, @@ -1835,6 +1851,9 @@ static bool ggml_cann_compute_forward(ggml_backend_cann_context & ctx, struct gg case GGML_UNARY_OP_STEP: ggml_cann_step(ctx, dst); break; + case GGML_UNARY_OP_SOFTPLUS: + ggml_cann_softplus(ctx, dst); + break; default: return false; } @@ -1845,20 +1864,16 @@ static bool ggml_cann_compute_forward(ggml_backend_cann_context & ctx, struct gg GGML_CANN_CALL_OP_UNARY_GATED(Relu); break; case GGML_GLU_OP_GEGLU: + ggml_cann_geglu(ctx, dst, 0); // approximate=0 → tanh + break; case GGML_GLU_OP_GEGLU_ERF: - // aclnnGelu internally uses the erf-based approximation. - GGML_CANN_CALL_OP_UNARY_GATED(Gelu); + ggml_cann_geglu(ctx, dst, 1); // approximate=1 → erf break; case GGML_GLU_OP_SWIGLU: - GGML_CANN_CALL_OP_UNARY_GATED(Silu); + ggml_cann_swiglu(ctx, dst); break; case GGML_GLU_OP_GEGLU_QUICK: - { - auto lambda = [](ggml_backend_cann_context & ctx, aclTensor * acl_src, aclTensor * acl_dst) { - GGML_CANN_CALL_ACLNN_OP(ctx, GeluV2, acl_src, 0, acl_dst); - }; - ggml_cann_op_unary_gated(lambda, ctx, dst); - } + ggml_cann_geglu_quick(ctx, dst); break; default: return false; @@ -1920,6 +1935,9 @@ static bool ggml_cann_compute_forward(ggml_backend_cann_context & ctx, struct gg case GGML_OP_CPY: ggml_cann_cpy(ctx, dst); break; + case GGML_OP_SET: + ggml_cann_set(ctx, dst); + break; case GGML_OP_CONT: ggml_cann_dup(ctx, dst); break; @@ -1989,6 +2007,21 @@ static bool ggml_cann_compute_forward(ggml_backend_cann_context & ctx, struct gg case GGML_OP_SSM_CONV: ggml_cann_ssm_conv(ctx, dst); break; + case GGML_OP_CUMSUM: + ggml_cann_cumsum(ctx, dst); + break; + case GGML_OP_TRI: + ggml_cann_tri(ctx, dst); + break; + case GGML_OP_FILL: + ggml_cann_fill(ctx, dst); + break; + case GGML_OP_DIAG: + ggml_cann_diag(ctx, dst); + break; + case GGML_OP_SOLVE_TRI: + ggml_cann_solve_tri(ctx, dst); + break; default: return false; } @@ -2324,6 +2357,7 @@ static enum ggml_status ggml_backend_cann_graph_compute(ggml_backend_t backend, if (use_cann_graph) { // If no matching graph is found, the graph needs to be recaptured. graph_capture_required = !cann_ctx->graph_lru_cache.find_and_move_to_front(cgraph); + if (graph_capture_required) { // If no matching graph is found, add a new ACL graph. ggml_cann_graph * new_graph = ggml_cann_graph::create_from_cgraph(cgraph); @@ -2382,6 +2416,7 @@ static bool ggml_backend_cann_supports_op(ggml_backend_dev_t dev, const ggml_ten case GGML_UNARY_OP_SGN: case GGML_UNARY_OP_STEP: case GGML_UNARY_OP_GELU_ERF: + case GGML_UNARY_OP_SOFTPLUS: return true; default: return false; @@ -2572,6 +2607,7 @@ static bool ggml_backend_cann_supports_op(ggml_backend_dev_t dev, const ggml_ten case GGML_OP_SUM_ROWS: case GGML_OP_ARGSORT: case GGML_OP_ACC: + case GGML_OP_SET: case GGML_OP_GROUP_NORM: return true; case GGML_OP_PAD: @@ -2649,6 +2685,16 @@ static bool ggml_backend_cann_supports_op(ggml_backend_dev_t dev, const ggml_ten } case GGML_OP_SSM_CONV: return true; + case GGML_OP_CUMSUM: + return op->src[0]->type == GGML_TYPE_F32; + case GGML_OP_TRI: + return op->src[0]->type == GGML_TYPE_F32; + case GGML_OP_FILL: + return op->src[0]->type == GGML_TYPE_F32; + case GGML_OP_DIAG: + return op->src[0]->type == GGML_TYPE_F32; + case GGML_OP_SOLVE_TRI: + return op->src[0]->type == GGML_TYPE_F32; default: return false; } diff --git a/ggml/src/ggml-cpu/CMakeLists.txt b/ggml/src/ggml-cpu/CMakeLists.txt index beebc4760d2..c1c225f0197 100644 --- a/ggml/src/ggml-cpu/CMakeLists.txt +++ b/ggml/src/ggml-cpu/CMakeLists.txt @@ -485,6 +485,13 @@ function(ggml_add_cpu_backend_variant_impl tag_name) if (GGML_RV_ZIHINTPAUSE) string(APPEND MARCH_STR "_zihintpause") endif() + if (GGML_CPU_RISCV64_SPACEMIT) + # `xsmtvdotii' is only required for GCC >= 15. + if (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND + CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 15) + string(APPEND MARCH_STR "_xsmtvdotii") + endif() + endif() list(APPEND ARCH_FLAGS "-march=${MARCH_STR}" -mabi=lp64d) else() diff --git a/ggml/src/ggml-cpu/amx/mmq.cpp b/ggml/src/ggml-cpu/amx/mmq.cpp index 93a6d397f79..d9383a04be8 100644 --- a/ggml/src/ggml-cpu/amx/mmq.cpp +++ b/ggml/src/ggml-cpu/amx/mmq.cpp @@ -2005,12 +2005,12 @@ void tinygemm_kernel_amx(int M, int N, int KB, const void * RESTRICT _A, const v const int lda = KB * sizeof(TA); //const int ldb = KB * sizeof(TB); - static thread_local packed_B_t Tile0[TILE_N * TILE_K]; - static thread_local packed_B_t Tile1[TILE_N * TILE_K]; - static thread_local int8_t Tile23[TILE_M * TILE_K]; + alignas(64) static thread_local packed_B_t Tile0[TILE_N * TILE_K]; + alignas(64) static thread_local packed_B_t Tile1[TILE_N * TILE_K]; + alignas(64) static thread_local int8_t Tile23[TILE_M * TILE_K]; - static thread_local int32_t TileC0[TILE_M * TILE_N * 4]; - static thread_local int32_t TileC1[TILE_M * TILE_N * 4]; + alignas(64) static thread_local int32_t TileC0[TILE_M * TILE_N * 4]; + alignas(64) static thread_local int32_t TileC1[TILE_M * TILE_N * 4]; // double buffering C to interleave avx512 and amx int32_t * C_cur = TileC0; @@ -2187,21 +2187,21 @@ void tinygemm_kernel_amx(int M, int N, int KB, const void * RESTRICT _A, const v const int m1 = std::max(M - TILE_M, 0); //const int lda = KB * sizeof(TA); - static thread_local int8_t Tile0[TILE_N * TILE_K]; - static thread_local int8_t Tile1[TILE_N * TILE_K]; - static thread_local int8_t Tile23[TILE_M * TILE_K]; + alignas(64) static thread_local int8_t Tile0[TILE_N * TILE_K]; + alignas(64) static thread_local int8_t Tile1[TILE_N * TILE_K]; + alignas(64) static thread_local int8_t Tile23[TILE_M * TILE_K]; // mat mul result for each group - static thread_local int32_t Tile4[TILE_M * TILE_N]; - static thread_local int32_t Tile5[TILE_M * TILE_N]; - static thread_local int32_t Tile6[TILE_M * TILE_N]; - static thread_local int32_t Tile7[TILE_M * TILE_N]; + alignas(64) static thread_local int32_t Tile4[TILE_M * TILE_N]; + alignas(64) static thread_local int32_t Tile5[TILE_M * TILE_N]; + alignas(64) static thread_local int32_t Tile6[TILE_M * TILE_N]; + alignas(64) static thread_local int32_t Tile7[TILE_M * TILE_N]; // sum of each QK_K block, contains 8 groups, int32 - static thread_local int32_t Sumi4[TILE_M * TILE_N]; - static thread_local int32_t Sumi5[TILE_M * TILE_N]; - static thread_local int32_t Sumi6[TILE_M * TILE_N]; - static thread_local int32_t Sumi7[TILE_M * TILE_N]; + alignas(64) static thread_local int32_t Sumi4[TILE_M * TILE_N]; + alignas(64) static thread_local int32_t Sumi5[TILE_M * TILE_N]; + alignas(64) static thread_local int32_t Sumi6[TILE_M * TILE_N]; + alignas(64) static thread_local int32_t Sumi7[TILE_M * TILE_N]; const int k_group_size = std::is_same<TB, block_q6_K>::value ? 16 : 32; for (int i = 0; i < KB; ++i) { diff --git a/ggml/src/ggml-cpu/arch/arm/repack.cpp b/ggml/src/ggml-cpu/arch/arm/repack.cpp index 80ff5ce549b..a7534443091 100644 --- a/ggml/src/ggml-cpu/arch/arm/repack.cpp +++ b/ggml/src/ggml-cpu/arch/arm/repack.cpp @@ -5023,6 +5023,71 @@ void ggml_gemm_q8_0_4x8_q8_0(int n, UNUSED(ncols_interleaved); UNUSED(blocklen); +#if defined(__aarch64__) && defined(__ARM_FEATURE_SVE) && defined(__ARM_FEATURE_MATMUL_INT8) + if (svcntb() * 8 == 256) { + const block_q8_0x4 * b_ptr_base = (const block_q8_0x4 *) vx; + + static const uint32_t idx_arr[8] = {0, 1, 4, 5, 2, 3, 6, 7}; + svuint32_t idx = svld1(svptrue_b32(), idx_arr); + static const uint32_t idx_arr1[8] = {0, 1, 2, 3, 1, 2, 3, 0}; + svuint32_t idx_sc1 = svld1(svptrue_b32(), idx_arr1); + static const uint32_t idx_arr2[8] = {0, 1, 2, 3, 0, 1, 2, 3}; + svuint32_t idx_sc2 = svld1(svptrue_b32(), idx_arr2); + + for (int y = 0; y < nr; y += 4) { + const block_q8_0x4 * a_ptr_base = (const block_q8_0x4 *) vy + (y / 4) * nb; + + for (int x = 0; x < nc; x += ncols_interleaved) { + const block_q8_0x4 * b_ptr = b_ptr_base + (x / 4) * nb; + const block_q8_0x4 * a_ptr = a_ptr_base; + + svfloat32_t acc_f32_01 = svdup_f32(0); + svfloat32_t acc_f32_23 = svdup_f32(0); + + for (int b = 0; b < nb; b++) { + + svint32_t acc_01 = svdup_s32(0); + svint32_t acc_23 = svdup_s32(0); + + // Process 4 chunks of 8 positions each + for (int chunk = 0; chunk < 4; chunk++) { + svint8_t s_a01 = svld1rq_s8(svptrue_b8(), a_ptr->qs + chunk * 32); + svint8_t s_a23 = svld1rq_s8(svptrue_b8(), a_ptr->qs + chunk * 32 + 16); + svint8_t s_b0123 = svld1_s8(svptrue_b8(), b_ptr->qs + chunk * 32); + + acc_01 = svmmla_s32(acc_01, s_a01, s_b0123); + acc_23 = svmmla_s32(acc_23, s_a23, s_b0123); + } + + // Reorder outputs from 2×2 tiles to row-major + // acc[01] = [r0c0, r0c1, r1c0, r1c1, r0c2, r0c3, r1c2, r1c3] + // acc[23] = [r2c0, r2c1, r3c0, r3c1, r2c2, r2c3, r3c2, r3c3] + + svint32_t row01 = svtbl_s32(acc_01, idx); + svint32_t row23 = svtbl_s32(acc_23, idx); + + svfloat16_t temp1 = svld1_f16(svptrue_pat_b16(SV_VL4), (const __fp16 *) a_ptr->d); + svfloat16_t temp2 = svld1_f16(svptrue_pat_b16(SV_VL4), (const __fp16 *) b_ptr->d); + svfloat32_t sv_a_d = svtbl_f32(svcvt_f32_f16_x(svptrue_b32(), svzip1_f16(temp1, temp1)), idx_sc1); + svfloat32_t sv_b_d = svtbl_f32(svcvt_f32_f16_x(svptrue_b32(), svzip1_f16(temp2, temp2)), idx_sc2); + + acc_f32_01 = svmla_f32_x(svptrue_b32(), acc_f32_01, svcvt_f32_s32_x(svptrue_b32(), row01), svmul_lane_f32(sv_b_d, sv_a_d, 0)); + acc_f32_23 = svmla_f32_x(svptrue_b32(), acc_f32_23, svcvt_f32_s32_x(svptrue_b32(), row23), svmul_lane_f32(sv_b_d, sv_a_d, 2)); + a_ptr++; + b_ptr++; + } + + svbool_t pg4 = svptrue_pat_b32(SV_VL4); + svst1_f32(pg4, s + (y+0) * bs + x, acc_f32_01); + svst1_f32(pg4, s + (y+1) * bs + x, svext_f32(acc_f32_01, acc_f32_01, 4)); + svst1_f32(pg4, s + (y+2) * bs + x, acc_f32_23); + svst1_f32(pg4, s + (y+3) * bs + x, svext_f32(acc_f32_23, acc_f32_23, 4)); + } + } + return; + } +#endif // SVE compile-time end + #if defined(__aarch64__) && defined(__ARM_NEON) && defined(__ARM_FEATURE_MATMUL_INT8) const block_q8_0x4 * b_ptr_base = (const block_q8_0x4 *) vx; diff --git a/ggml/src/ggml-cpu/arch/riscv/quants.c b/ggml/src/ggml-cpu/arch/riscv/quants.c index d3278d6489f..9ebfaae1ddc 100644 --- a/ggml/src/ggml-cpu/arch/riscv/quants.c +++ b/ggml/src/ggml-cpu/arch/riscv/quants.c @@ -123,7 +123,7 @@ void quantize_row_q8_K(const float * GGML_RESTRICT x, void * GGML_RESTRICT y, in assert(k % QK_K == 0); size_t nb = k / QK_K; -#if defined __riscv_v_intrinsic +#if defined __riscv_v block_q8_K * y_blocks = (block_q8_K *)y; const size_t vlmax_f32m8 = __riscv_vsetvlmax_e32m8(); @@ -480,7 +480,8 @@ void ggml_vec_dot_q8_0_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const voi #endif } -void ggml_vec_dot_q2_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { +#if defined __riscv_xtheadvector +void ggml_vec_dot_q2_K_q8_K_xtheadvector(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(nrc == 1); UNUSED(nrc); UNUSED(bx); @@ -492,8 +493,6 @@ void ggml_vec_dot_q2_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi const int nb = n / QK_K; -#if defined __riscv_xtheadvector - float sumf = 0; uint8_t atmp[16]; @@ -588,246 +587,281 @@ void ggml_vec_dot_q2_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi } *s = sumf; +} +#endif -#elif defined __riscv_v +#if defined __riscv_v +void ggml_vec_dot_q2_K_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_q2_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; float sumf = 0; uint8_t atmp[16]; - const int vector_length = __riscv_vlenb() * 8; uint8_t temp_01[32] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - switch (vector_length) { - case 256: - for (int i = 0; i < nb; ++i) { - const uint8_t * q2 = x[i].qs; - const int8_t * q8 = y[i].qs; - const uint8_t * sc = x[i].scales; + for (int i = 0; i < nb; ++i) { + const uint8_t * q2 = x[i].qs; + const int8_t * q8 = y[i].qs; + const uint8_t * sc = x[i].scales; + const float dall = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); + uint8_t *patmp = atmp; + int vsums; + int tmp, t1, t2, t3, t4, t5, t6, t7; + __asm__ __volatile__( + "vsetivli zero, 16, e8, m1\n\t" + "vmv.v.x v8, zero\n\t" + "lb zero, 15(%[sc])\n\t" + "vle8.v v1, (%[sc])\n\t" + "vle8.v v2, (%[bsums])\n\t" + "addi %[tmp], %[bsums], 16\n\t" + "vand.vi v0, v1, 0xF\n\t" + "vsrl.vi v1, v1, 4\n\t" + "vle8.v v3, (%[tmp])\n\t" + "vse8.v v0, (%[scale])\n\t" + "vsetivli zero, 16, e16, m2\n\t" + "vzext.vf2 v0, v1\n\t" + "vwmul.vv v4, v0, v2\n\t" + "vsetivli zero, 16, e32, m4\n\t" + "vredsum.vs v8, v4, v8\n\t" + "vmv.x.s %[vsums], v8" + : [tmp] "=&r" (tmp), [vsums] "=&r" (vsums) + : [sc] "r" (sc), [scale] "r" (atmp), [bsums] "r" (y[i].bsums) + : "memory" + , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" + , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" + , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" + , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" + ); + sumf += dmin * vsums; + int isum = 0; + + for (int j = 0; j < QK_K/128; ++j) { + __asm__ __volatile__( + "lb zero, 31(%[q2])\n\t" + "addi %[tmp], %[q2], 16\n\t" + "addi %[t1], %[q8], 16\n\t" + "vsetivli zero, 16, e8, m1\n\t" + "vle8.v v0, (%[q2])\n\t" + "vle8.v v1, (%[tmp])\n\t" + "vsrl.vi v2, v0, 2\n\t" + "vsrl.vi v3, v1, 2\n\t" + "vsrl.vi v4, v0, 4\n\t" + "addi %[tmp], %[q8], 32\n\t" + "vle8.v v8, (%[q8])\n\t" + "vle8.v v9, (%[t1])\n\t" + "addi %[t1], %[t1], 32\n\t" + "vsrl.vi v5, v1, 4\n\t" + "vsrl.vi v6, v0, 6\n\t" + "vsrl.vi v7, v1, 6\n\t" + "vle8.v v10, (%[tmp])\n\t" + "vle8.v v11, (%[t1])\n\t" + "addi %[tmp], %[tmp], 32\n\t" + "addi %[t1], %[t1], 32\n\t" + "vand.vi v0, v0, 0x3\n\t" + "vand.vi v1, v1, 0x3\n\t" + "vand.vi v2, v2, 0x3\n\t" + "vle8.v v12, (%[tmp])\n\t" + "vle8.v v13, (%[t1])\n\t" + "addi %[tmp], %[tmp], 32\n\t" + "addi %[t1], %[t1], 32\n\t" + "vand.vi v3, v3, 0x3\n\t" + "vand.vi v4, v4, 0x3\n\t" + "vand.vi v5, v5, 0x3\n\t" + "vle8.v v14, (%[tmp])\n\t" + "vle8.v v15, (%[t1])\n\t" + "vwmul.vv v16, v0, v8\n\t" + "vwmul.vv v18, v1, v9\n\t" + "vwmul.vv v20, v2, v10\n\t" + "vwmul.vv v22, v3, v11\n\t" + "vwmul.vv v24, v4, v12\n\t" + "vwmul.vv v26, v5, v13\n\t" + "vwmul.vv v28, v6, v14\n\t" + "vwmul.vv v30, v7, v15\n\t" + "vsetivli zero, 8, e16, m1\n\t" + "vmv.v.x v0, zero\n\t" + "lbu %[tmp], 0(%[scale])\n\t" + "vwredsum.vs v8, v16, v0\n\t" + "vwredsum.vs v9, v18, v0\n\t" + "lbu %[t1], 1(%[scale])\n\t" + "vwredsum.vs v10, v20, v0\n\t" + "vwredsum.vs v11, v22, v0\n\t" + "lbu %[t2], 2(%[scale])\n\t" + "vwredsum.vs v12, v24, v0\n\t" + "vwredsum.vs v13, v26, v0\n\t" + "lbu %[t3], 3(%[scale])\n\t" + "vwredsum.vs v14, v28, v0\n\t" + "vwredsum.vs v15, v30, v0\n\t" + "lbu %[t4], 4(%[scale])\n\t" + "vwredsum.vs v8, v17, v8\n\t" + "vwredsum.vs v9, v19, v9\n\t" + "lbu %[t5], 5(%[scale])\n\t" + "vwredsum.vs v10, v21, v10\n\t" + "vwredsum.vs v11, v23, v11\n\t" + "lbu %[t6], 6(%[scale])\n\t" + "vwredsum.vs v12, v25, v12\n\t" + "vwredsum.vs v13, v27, v13\n\t" + "lbu %[t7], 7(%[scale])\n\t" + "vwredsum.vs v14, v29, v14\n\t" + "vwredsum.vs v15, v31, v15\n\t" + "vsetivli zero, 4, e32, m1\n\t" + "vmul.vx v0, v8, %[tmp]\n\t" + "vmul.vx v1, v9, %[t1]\n\t" + "vmacc.vx v0, %[t2], v10\n\t" + "vmacc.vx v1, %[t3], v11\n\t" + "vmacc.vx v0, %[t4], v12\n\t" + "vmacc.vx v1, %[t5], v13\n\t" + "vmacc.vx v0, %[t6], v14\n\t" + "vmacc.vx v1, %[t7], v15\n\t" + "vmv.x.s %[tmp], v0\n\t" + "vmv.x.s %[t1], v1\n\t" + "add %[isum], %[isum], %[tmp]\n\t" + "add %[isum], %[isum], %[t1]" + : [tmp] "=&r" (tmp), [t1] "=&r" (t1), [t2] "=&r" (t2), [t3] "=&r" (t3) + , [t4] "=&r" (t4), [t5] "=&r" (t5), [t6] "=&r" (t6), [t7] "=&r" (t7) + , [isum] "+&r" (isum) + : [q2] "r" (q2), [scale] "r" (patmp), [q8] "r" (q8) + : "memory" + , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" + , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" + , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" + , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" + ); + q2 += 32; q8 += 128; patmp += 8; + } + + sumf += dall * isum; + } + + *s = sumf; +} + +void ggml_vec_dot_q2_K_q8_K_vl256(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); - const float dall = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); + const block_q2_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; - size_t vl = 16; + const int nb = n / QK_K; - vuint8m1_t scales = __riscv_vle8_v_u8m1(sc, vl); - vuint8m1_t aux = __riscv_vand_vx_u8m1(scales, 0x0F, vl); + float sumf = 0; + uint8_t atmp[16]; - vint16m1_t q8sums = __riscv_vle16_v_i16m1(y[i].bsums, vl); + uint8_t temp_01[32] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - vuint8mf2_t scales_2 = __riscv_vle8_v_u8mf2(sc, vl); - vuint8mf2_t mins8 = __riscv_vsrl_vx_u8mf2(scales_2, 0x4, vl); - vint16m1_t mins = __riscv_vreinterpret_v_u16m1_i16m1(__riscv_vzext_vf2_u16m1(mins8, vl)); - vint32m2_t prod = __riscv_vwmul_vv_i32m2(q8sums, mins, vl); - vint32m1_t vsums = __riscv_vredsum_vs_i32m2_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl); + for (int i = 0; i < nb; ++i) { + const uint8_t * q2 = x[i].qs; + const int8_t * q8 = y[i].qs; + const uint8_t * sc = x[i].scales; - sumf += dmin * __riscv_vmv_x_s_i32m1_i32(vsums); + const float dall = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); + const float dmin = -y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); - vl = 32; + size_t vl = 16; - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - vuint8m1_t v_b = __riscv_vle8_v_u8m1(temp_01, vl); + vuint8m1_t scales = __riscv_vle8_v_u8m1(sc, vl); + vuint8m1_t aux = __riscv_vand_vx_u8m1(scales, 0x0F, vl); - uint8_t is = 0; - int isum = 0; + vint16m1_t q8sums = __riscv_vle16_v_i16m1(y[i].bsums, vl); - for (int j = 0; j < QK_K / 128; ++j) { - // load Q2 - vuint8m1_t q2_x = __riscv_vle8_v_u8m1(q2, vl); + vuint8mf2_t scales_2 = __riscv_vle8_v_u8mf2(sc, vl); + vuint8mf2_t mins8 = __riscv_vsrl_vx_u8mf2(scales_2, 0x4, vl); + vint16m1_t mins = __riscv_vreinterpret_v_u16m1_i16m1(__riscv_vzext_vf2_u16m1(mins8, vl)); + vint32m2_t prod = __riscv_vwmul_vv_i32m2(q8sums, mins, vl); + vint32m1_t vsums = __riscv_vredsum_vs_i32m2_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl); - vuint8m1_t q2_0 = __riscv_vand_vx_u8m1(q2_x, 0x03, vl); - vuint8m1_t q2_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x2, vl), 0x03, vl); - vuint8m1_t q2_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x4, vl), 0x03, vl); - vuint8m1_t q2_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x6, vl), 0x03, vl); + sumf += dmin * __riscv_vmv_x_s_i32m1_i32(vsums); - // duplicate scale elements for product - vuint8m1_t sc0 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 0 + is, vl), vl); - vuint8m1_t sc1 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 2 + is, vl), vl); - vuint8m1_t sc2 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 4 + is, vl), vl); - vuint8m1_t sc3 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 6 + is, vl), vl); + vl = 32; - vint16m2_t p0 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_0, sc0, vl)); - vint16m2_t p1 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_1, sc1, vl)); - vint16m2_t p2 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_2, sc2, vl)); - vint16m2_t p3 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_3, sc3, vl)); + vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); + vuint8m1_t v_b = __riscv_vle8_v_u8m1(temp_01, vl); - // load Q8 - vint8m1_t q8_0 = __riscv_vle8_v_i8m1(q8, vl); - vint8m1_t q8_1 = __riscv_vle8_v_i8m1(q8 + 32, vl); - vint8m1_t q8_2 = __riscv_vle8_v_i8m1(q8 + 64, vl); - vint8m1_t q8_3 = __riscv_vle8_v_i8m1(q8 + 96, vl); + uint8_t is = 0; + int isum = 0; - vint32m4_t s0 = __riscv_vwmul_vv_i32m4(p0, __riscv_vwcvt_x_x_v_i16m2(q8_0, vl), vl); - vint32m4_t s1 = __riscv_vwmul_vv_i32m4(p1, __riscv_vwcvt_x_x_v_i16m2(q8_1, vl), vl); - vint32m4_t s2 = __riscv_vwmul_vv_i32m4(p2, __riscv_vwcvt_x_x_v_i16m2(q8_2, vl), vl); - vint32m4_t s3 = __riscv_vwmul_vv_i32m4(p3, __riscv_vwcvt_x_x_v_i16m2(q8_3, vl), vl); + for (int j = 0; j < QK_K / 128; ++j) { + // load Q2 + vuint8m1_t q2_x = __riscv_vle8_v_u8m1(q2, vl); - vint32m1_t isum0 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s0, s1, vl), vzero, vl); - vint32m1_t isum1 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s2, s3, vl), isum0, vl); + vuint8m1_t q2_0 = __riscv_vand_vx_u8m1(q2_x, 0x03, vl); + vuint8m1_t q2_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x2, vl), 0x03, vl); + vuint8m1_t q2_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x4, vl), 0x03, vl); + vuint8m1_t q2_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q2_x, 0x6, vl), 0x03, vl); - isum += __riscv_vmv_x_s_i32m1_i32(isum1); + // duplicate scale elements for product + vuint8m1_t sc0 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 0 + is, vl), vl); + vuint8m1_t sc1 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 2 + is, vl), vl); + vuint8m1_t sc2 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 4 + is, vl), vl); + vuint8m1_t sc3 = __riscv_vrgather_vv_u8m1(aux, __riscv_vadd_vx_u8m1(v_b, 6 + is, vl), vl); - q2 += 32; - q8 += 128; - is = 8; - } + vint16m2_t p0 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_0, sc0, vl)); + vint16m2_t p1 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_1, sc1, vl)); + vint16m2_t p2 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_2, sc2, vl)); + vint16m2_t p3 = __riscv_vreinterpret_v_u16m2_i16m2(__riscv_vwmulu_vv_u16m2(q2_3, sc3, vl)); - sumf += dall * isum; - } - break; - case 128: - for (int i = 0; i < nb; ++i) { - const uint8_t * q2 = x[i].qs; - const int8_t * q8 = y[i].qs; - const uint8_t * sc = x[i].scales; - const float dall = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); - const float dmin = -y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); - uint8_t *patmp = atmp; - int vsums; - int tmp, t1, t2, t3, t4, t5, t6, t7; - __asm__ __volatile__( - "vsetivli zero, 16, e8, m1\n\t" - "vmv.v.x v8, zero\n\t" - "lb zero, 15(%[sc])\n\t" - "vle8.v v1, (%[sc])\n\t" - "vle8.v v2, (%[bsums])\n\t" - "addi %[tmp], %[bsums], 16\n\t" - "vand.vi v0, v1, 0xF\n\t" - "vsrl.vi v1, v1, 4\n\t" - "vle8.v v3, (%[tmp])\n\t" - "vse8.v v0, (%[scale])\n\t" - "vsetivli zero, 16, e16, m2\n\t" - "vzext.vf2 v0, v1\n\t" - "vwmul.vv v4, v0, v2\n\t" - "vsetivli zero, 16, e32, m4\n\t" - "vredsum.vs v8, v4, v8\n\t" - "vmv.x.s %[vsums], v8" - : [tmp] "=&r" (tmp), [vsums] "=&r" (vsums) - : [sc] "r" (sc), [scale] "r" (atmp), [bsums] "r" (y[i].bsums) - : "memory" - , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" - , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" - , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" - , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" - ); - sumf += dmin * vsums; - int isum = 0; - - for (int j = 0; j < QK_K/128; ++j) { - __asm__ __volatile__( - "lb zero, 31(%[q2])\n\t" - "addi %[tmp], %[q2], 16\n\t" - "addi %[t1], %[q8], 16\n\t" - "vsetivli zero, 16, e8, m1\n\t" - "vle8.v v0, (%[q2])\n\t" - "vle8.v v1, (%[tmp])\n\t" - "vsrl.vi v2, v0, 2\n\t" - "vsrl.vi v3, v1, 2\n\t" - "vsrl.vi v4, v0, 4\n\t" - "addi %[tmp], %[q8], 32\n\t" - "vle8.v v8, (%[q8])\n\t" - "vle8.v v9, (%[t1])\n\t" - "addi %[t1], %[t1], 32\n\t" - "vsrl.vi v5, v1, 4\n\t" - "vsrl.vi v6, v0, 6\n\t" - "vsrl.vi v7, v1, 6\n\t" - "vle8.v v10, (%[tmp])\n\t" - "vle8.v v11, (%[t1])\n\t" - "addi %[tmp], %[tmp], 32\n\t" - "addi %[t1], %[t1], 32\n\t" - "vand.vi v0, v0, 0x3\n\t" - "vand.vi v1, v1, 0x3\n\t" - "vand.vi v2, v2, 0x3\n\t" - "vle8.v v12, (%[tmp])\n\t" - "vle8.v v13, (%[t1])\n\t" - "addi %[tmp], %[tmp], 32\n\t" - "addi %[t1], %[t1], 32\n\t" - "vand.vi v3, v3, 0x3\n\t" - "vand.vi v4, v4, 0x3\n\t" - "vand.vi v5, v5, 0x3\n\t" - "vle8.v v14, (%[tmp])\n\t" - "vle8.v v15, (%[t1])\n\t" - "vwmul.vv v16, v0, v8\n\t" - "vwmul.vv v18, v1, v9\n\t" - "vwmul.vv v20, v2, v10\n\t" - "vwmul.vv v22, v3, v11\n\t" - "vwmul.vv v24, v4, v12\n\t" - "vwmul.vv v26, v5, v13\n\t" - "vwmul.vv v28, v6, v14\n\t" - "vwmul.vv v30, v7, v15\n\t" - "vsetivli zero, 8, e16, m1\n\t" - "vmv.v.x v0, zero\n\t" - "lbu %[tmp], 0(%[scale])\n\t" - "vwredsum.vs v8, v16, v0\n\t" - "vwredsum.vs v9, v18, v0\n\t" - "lbu %[t1], 1(%[scale])\n\t" - "vwredsum.vs v10, v20, v0\n\t" - "vwredsum.vs v11, v22, v0\n\t" - "lbu %[t2], 2(%[scale])\n\t" - "vwredsum.vs v12, v24, v0\n\t" - "vwredsum.vs v13, v26, v0\n\t" - "lbu %[t3], 3(%[scale])\n\t" - "vwredsum.vs v14, v28, v0\n\t" - "vwredsum.vs v15, v30, v0\n\t" - "lbu %[t4], 4(%[scale])\n\t" - "vwredsum.vs v8, v17, v8\n\t" - "vwredsum.vs v9, v19, v9\n\t" - "lbu %[t5], 5(%[scale])\n\t" - "vwredsum.vs v10, v21, v10\n\t" - "vwredsum.vs v11, v23, v11\n\t" - "lbu %[t6], 6(%[scale])\n\t" - "vwredsum.vs v12, v25, v12\n\t" - "vwredsum.vs v13, v27, v13\n\t" - "lbu %[t7], 7(%[scale])\n\t" - "vwredsum.vs v14, v29, v14\n\t" - "vwredsum.vs v15, v31, v15\n\t" - "vsetivli zero, 4, e32, m1\n\t" - "vmul.vx v0, v8, %[tmp]\n\t" - "vmul.vx v1, v9, %[t1]\n\t" - "vmacc.vx v0, %[t2], v10\n\t" - "vmacc.vx v1, %[t3], v11\n\t" - "vmacc.vx v0, %[t4], v12\n\t" - "vmacc.vx v1, %[t5], v13\n\t" - "vmacc.vx v0, %[t6], v14\n\t" - "vmacc.vx v1, %[t7], v15\n\t" - "vmv.x.s %[tmp], v0\n\t" - "vmv.x.s %[t1], v1\n\t" - "add %[isum], %[isum], %[tmp]\n\t" - "add %[isum], %[isum], %[t1]" - : [tmp] "=&r" (tmp), [t1] "=&r" (t1), [t2] "=&r" (t2), [t3] "=&r" (t3) - , [t4] "=&r" (t4), [t5] "=&r" (t5), [t6] "=&r" (t6), [t7] "=&r" (t7) - , [isum] "+&r" (isum) - : [q2] "r" (q2), [scale] "r" (patmp), [q8] "r" (q8) - : "memory" - , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" - , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" - , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" - , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" - ); - q2 += 32; q8 += 128; patmp += 8; - } + // load Q8 + vint8m1_t q8_0 = __riscv_vle8_v_i8m1(q8, vl); + vint8m1_t q8_1 = __riscv_vle8_v_i8m1(q8 + 32, vl); + vint8m1_t q8_2 = __riscv_vle8_v_i8m1(q8 + 64, vl); + vint8m1_t q8_3 = __riscv_vle8_v_i8m1(q8 + 96, vl); - sumf += dall * isum; + vint32m4_t s0 = __riscv_vwmul_vv_i32m4(p0, __riscv_vwcvt_x_x_v_i16m2(q8_0, vl), vl); + vint32m4_t s1 = __riscv_vwmul_vv_i32m4(p1, __riscv_vwcvt_x_x_v_i16m2(q8_1, vl), vl); + vint32m4_t s2 = __riscv_vwmul_vv_i32m4(p2, __riscv_vwcvt_x_x_v_i16m2(q8_2, vl), vl); + vint32m4_t s3 = __riscv_vwmul_vv_i32m4(p3, __riscv_vwcvt_x_x_v_i16m2(q8_3, vl), vl); + + vint32m1_t isum0 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s0, s1, vl), vzero, vl); + vint32m1_t isum1 = __riscv_vredsum_vs_i32m4_i32m1(__riscv_vadd_vv_i32m4(s2, s3, vl), isum0, vl); + + isum += __riscv_vmv_x_s_i32m1_i32(isum1); + + q2 += 32; + q8 += 128; + is = 8; } - break; - default: - assert(false && "Unsupported vector length"); - break; + + sumf += dall * isum; } *s = sumf; +} +#endif +void ggml_vec_dot_q2_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { +#if defined __riscv_xtheadvector + ggml_vec_dot_q2_K_q8_K_xtheadvector(n, s, bs, vx, bx, vy, by, nrc); +#elif defined __riscv_v + switch (__riscv_vlenb() * 8) { + case 128: + ggml_vec_dot_q2_K_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); + break; + default: + ggml_vec_dot_q2_K_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); + break; + } #else - - UNUSED(x); - UNUSED(y); - UNUSED(nb); - ggml_vec_dot_q2_K_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); #endif } -void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { +#if defined __riscv_xtheadvector +void ggml_vec_dot_q3_K_q8_K_xtheadvector(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); assert(nrc == 1); UNUSED(nrc); @@ -843,8 +877,6 @@ void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi const int nb = n / QK_K; -#if defined __riscv_xtheadvector - uint32_t utmp[4]; float sumf = 0; @@ -970,257 +1002,274 @@ void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi } *s = sumf; +} +#endif -#elif defined __riscv_v +#if defined __riscv_v +void ggml_vec_dot_q3_K_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const uint32_t kmask1 = 0x03030303; + const uint32_t kmask2 = 0x0f0f0f0f; + + const block_q3_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; uint32_t utmp[4]; float sumf = 0; uint32_t aux[3]; - const int vector_length = __riscv_vlenb() * 8; - switch (vector_length) { - case 256: - for (int i = 0; i < nb; ++i) { + for (int i = 0; i < nb; ++i) { + const uint8_t * restrict q3 = x[i].qs; + const uint8_t * restrict qh = x[i].hmask; + const int8_t * restrict q8 = y[i].qs; + + int8_t * scale = (int8_t *)utmp; + int tmp, t1, t2, t3, t4, t5, t6, t7; + __asm__ __volatile__( + "vsetivli zero, 12, e8, m1\n\t" + "vle8.v v0, (%[s6b])\n\t" + "vmv1r.v v2, v0\n\t" + "vsetivli zero, 2, e64, m1\n\t" + "vmv.v.x v9, %[sh]\n\t"\ + "vslidedown.vi v1, v0, 1\n\t" + "vslide1up.vx v8, v9, zero\n\t" // {0, 0, 4, 4} + "vslideup.vi v0, v2, 1\n\t" // {aux[0], aux[1], aux[0], aux[1]} + "vsetivli zero, 4, e32, m1\n\t" + "vid.v v9\n\t" + "vmv.x.s %[tmp], v1\n\t" + "vsll.vi v9, v9, 1\n\t" // {0, 2, 4, 6} + "vmv.v.x v1, %[tmp]\n\t" // {aux[2], aux[2], aux[2], aux[2]} + "vsrl.vv v4, v1, v9\n\t" + "vsrl.vv v2, v0, v8\n\t" + "vand.vx v5, v4, %[kmask1]\n\t" + "vand.vx v3, v2, %[kmask2]\n\t" + "vsll.vi v6, v5, 4\n\t" + "vor.vv v7, v6, v3\n\t" + "vsetivli zero, 16, e8, m1\n\t" + "vsub.vx v0, v7, %[c]\n\t" + "vse8.v v0, (%[scale])" + : [tmp] "=&r" (tmp) + : [sh] "r" (0x0000000400000004), [s6b] "r" (x[i].scales), [c] "r" (32) + , [scale] "r" (scale), [kmask1] "r" (kmask1), [kmask2] "r" (kmask2) + : "memory" + , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" + , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" + , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" + , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" + ); + + uint8_t m = 1; + int isum = 0; + for (int j = 0; j < QK_K; j += 128) { + __asm__ __volatile__( + "lb zero, 31(%[q3])\n\t" + "vsetvli zero, %[vl32], e8, m2, ta, mu\n\t" + "vle8.v v8, (%[q3])\n\t" + "vsrl.vi v10, v8, 2\n\t" + "vsrl.vi v12, v8, 4\n\t" + "vsrl.vi v14, v8, 6\n\t" + "lb zero, 64(%[q8])\n\t" + "vand.vi v8, v8, 3\n\t" + "vand.vi v10, v10, 3\n\t" + "vand.vi v12, v12, 3\n\t" + "vle8.v v2, (%[qh])\n\t" + "lb zero, 127(%[q8])\n\t" + "vand.vx v4, v2, %[m]\n\t" + "slli %[m], %[m], 1\n\t" + "vmseq.vx v0, v4, zero\n\t" + "vadd.vi v8, v8, -4, v0.t\n\t" + "lb zero, 0(%[q8])\n\t" + "vand.vx v4, v2, %[m]\n\t" + "slli %[m], %[m], 1\n\t" + "vmseq.vx v0, v4, zero\n\t" + "vadd.vi v10, v10, -4, v0.t\n\t" + "vand.vx v4, v2, %[m]\n\t" + "slli %[m], %[m], 1\n\t" + "vmseq.vx v0, v4, zero\n\t" + "vadd.vi v12, v12, -4, v0.t\n\t" + "vand.vx v4, v2, %[m]\n\t" + "slli %[m], %[m], 1\n\t" + "vmseq.vx v0, v4, zero\n\t" + "vadd.vi v14, v14, -4, v0.t\n\t" + "vsetvli zero, %[vl128], e8, m8\n\t" + "vle8.v v0, (%[q8])\n\t" + "lb %[tmp], 0(%[scale])\n\t" + "lb %[t1], 1(%[scale])\n\t" + "lb %[t2], 2(%[scale])\n\t" + "lb %[t3], 3(%[scale])\n\t" + "vsetvli zero, %[vl64], e8, m4\n\t" + "vwmul.vv v16, v0, v8\n\t" + "vwmul.vv v24, v4, v12\n\t" + "vsetivli zero, 16, e16, m2\n\t" + "vmv.v.x v0, zero\n\t" + "vwredsum.vs v8, v16, v0\n\t" + "lb %[t4], 4(%[scale])\n\t" + "lb %[t5], 5(%[scale])\n\t" + "vwredsum.vs v9, v18, v0\n\t" + "vwredsum.vs v10, v20, v0\n\t" + "vwredsum.vs v11, v22, v0\n\t" + "vwredsum.vs v12, v24, v0\n\t" + "lb %[t6], 6(%[scale])\n\t" + "lb %[t7], 7(%[scale])\n\t" + "vwredsum.vs v13, v26, v0\n\t" + "vwredsum.vs v14, v28, v0\n\t" + "vwredsum.vs v15, v30, v0\n\t" + "vsetivli zero, 4, e32, m1\n\t" + "vmul.vx v0, v8, %[tmp]\n\t" + "vmul.vx v1, v9, %[t1]\n\t" + "vmacc.vx v0, %[t2], v10\n\t" + "vmacc.vx v1, %[t3], v11\n\t" + "vmacc.vx v0, %[t4], v12\n\t" + "vmacc.vx v1, %[t5], v13\n\t" + "vmacc.vx v0, %[t6], v14\n\t" + "vmacc.vx v1, %[t7], v15\n\t" + "vmv.x.s %[tmp], v0\n\t" + "vmv.x.s %[t1], v1\n\t" + "add %[isum], %[isum], %[tmp]\n\t" + "add %[isum], %[isum], %[t1]" + : [tmp] "=&r" (tmp), [t1] "=&r" (t1), [t2] "=&r" (t2), [t3] "=&r" (t3) + , [t4] "=&r" (t4), [t5] "=&r" (t5), [t6] "=&r" (t6), [t7] "=&r" (t7) + , [m] "+&r" (m), [isum] "+&r" (isum) + : [vl128] "r" (128), [vl64] "r" (64), [vl32] "r" (32) + , [q3] "r" (q3), [qh] "r" (qh), [scale] "r" (scale), [q8] "r" (q8) + : "memory" + , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" + , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" + , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" + , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" + ); + q3 += 32; q8 += 128; scale += 8; + } + + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + sumf += d * isum; + } - const uint8_t * GGML_RESTRICT q3 = x[i].qs; - const uint8_t * GGML_RESTRICT qh = x[i].hmask; - const int8_t * GGML_RESTRICT q8 = y[i].qs; + *s = sumf; +} - memcpy(aux, x[i].scales, 12); - utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4); - utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4); - utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4); - utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4); +void ggml_vec_dot_q3_K_q8_K_vl256(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); - int8_t * scale = (int8_t *)utmp; - for (int j = 0; j < 16; ++j) scale[j] -= 32; + const uint32_t kmask1 = 0x03030303; + const uint32_t kmask2 = 0x0f0f0f0f; + const block_q3_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; - size_t vl = 32; - uint8_t m = 1; + const int nb = n / QK_K; + uint32_t utmp[4]; + float sumf = 0; + uint32_t aux[3]; - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - vuint8m1_t vqh = __riscv_vle8_v_u8m1(qh, vl); + for (int i = 0; i < nb; ++i) { + const uint8_t * GGML_RESTRICT q3 = x[i].qs; + const uint8_t * GGML_RESTRICT qh = x[i].hmask; + const int8_t * GGML_RESTRICT q8 = y[i].qs; - int sum_t = 0; + memcpy(aux, x[i].scales, 12); + utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4); + utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4); + utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4); + utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4); - for (int j = 0; j < QK_K; j += 128) { + int8_t * scale = (int8_t *)utmp; + for (int j = 0; j < 16; ++j) scale[j] -= 32; - vl = 32; - // load Q3 - vuint8m1_t q3_x = __riscv_vle8_v_u8m1(q3, vl); + size_t vl = 32; + uint8_t m = 1; - vint8m1_t q3_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q3_x, 0x03, vl)); - vint8m1_t q3_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x2, vl), 0x03 , vl)); - vint8m1_t q3_2 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x4, vl), 0x03 , vl)); - vint8m1_t q3_3 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x6, vl), 0x03 , vl)); + vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); + vuint8m1_t vqh = __riscv_vle8_v_u8m1(qh, vl); - // compute mask for subtraction - vuint8m1_t qh_m0 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_0 = __riscv_vmseq_vx_u8m1_b8(qh_m0, 0, vl); - vint8m1_t q3_m0 = __riscv_vsub_vx_i8m1_mu(vmask_0, q3_0, q3_0, 0x4, vl); - m <<= 1; + int sum_t = 0; - vuint8m1_t qh_m1 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_1 = __riscv_vmseq_vx_u8m1_b8(qh_m1, 0, vl); - vint8m1_t q3_m1 = __riscv_vsub_vx_i8m1_mu(vmask_1, q3_1, q3_1, 0x4, vl); - m <<= 1; + for (int j = 0; j < QK_K; j += 128) { - vuint8m1_t qh_m2 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_2 = __riscv_vmseq_vx_u8m1_b8(qh_m2, 0, vl); - vint8m1_t q3_m2 = __riscv_vsub_vx_i8m1_mu(vmask_2, q3_2, q3_2, 0x4, vl); - m <<= 1; + vl = 32; - vuint8m1_t qh_m3 = __riscv_vand_vx_u8m1(vqh, m, vl); - vbool8_t vmask_3 = __riscv_vmseq_vx_u8m1_b8(qh_m3, 0, vl); - vint8m1_t q3_m3 = __riscv_vsub_vx_i8m1_mu(vmask_3, q3_3, q3_3, 0x4, vl); - m <<= 1; + // load Q3 + vuint8m1_t q3_x = __riscv_vle8_v_u8m1(q3, vl); - // load Q8 and take product with Q3 - vint16m2_t a0 = __riscv_vwmul_vv_i16m2(q3_m0, __riscv_vle8_v_i8m1(q8, vl), vl); - vint16m2_t a1 = __riscv_vwmul_vv_i16m2(q3_m1, __riscv_vle8_v_i8m1(q8+32, vl), vl); - vint16m2_t a2 = __riscv_vwmul_vv_i16m2(q3_m2, __riscv_vle8_v_i8m1(q8+64, vl), vl); - vint16m2_t a3 = __riscv_vwmul_vv_i16m2(q3_m3, __riscv_vle8_v_i8m1(q8+96, vl), vl); + vint8m1_t q3_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q3_x, 0x03, vl)); + vint8m1_t q3_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x2, vl), 0x03 , vl)); + vint8m1_t q3_2 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x4, vl), 0x03 , vl)); + vint8m1_t q3_3 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(q3_x, 0x6, vl), 0x03 , vl)); - vl = 16; + // compute mask for subtraction + vuint8m1_t qh_m0 = __riscv_vand_vx_u8m1(vqh, m, vl); + vbool8_t vmask_0 = __riscv_vmseq_vx_u8m1_b8(qh_m0, 0, vl); + vint8m1_t q3_m0 = __riscv_vsub_vx_i8m1_mu(vmask_0, q3_0, q3_0, 0x4, vl); + m <<= 1; - // retrieve lane to multiply with scale - vint32m2_t aux0_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 0), (scale[0]), vl); - vint32m2_t aux0_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 1), (scale[1]), vl); - vint32m2_t aux1_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 0), (scale[2]), vl); - vint32m2_t aux1_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 1), (scale[3]), vl); - vint32m2_t aux2_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 0), (scale[4]), vl); - vint32m2_t aux2_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 1), (scale[5]), vl); - vint32m2_t aux3_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 0), (scale[6]), vl); - vint32m2_t aux3_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 1), (scale[7]), vl); + vuint8m1_t qh_m1 = __riscv_vand_vx_u8m1(vqh, m, vl); + vbool8_t vmask_1 = __riscv_vmseq_vx_u8m1_b8(qh_m1, 0, vl); + vint8m1_t q3_m1 = __riscv_vsub_vx_i8m1_mu(vmask_1, q3_1, q3_1, 0x4, vl); + m <<= 1; - vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux0_0, aux0_1, vl), vzero, vl); - vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux1_0, aux1_1, vl), isum0, vl); - vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux2_0, aux2_1, vl), isum1, vl); - vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux3_0, aux3_1, vl), isum2, vl); + vuint8m1_t qh_m2 = __riscv_vand_vx_u8m1(vqh, m, vl); + vbool8_t vmask_2 = __riscv_vmseq_vx_u8m1_b8(qh_m2, 0, vl); + vint8m1_t q3_m2 = __riscv_vsub_vx_i8m1_mu(vmask_2, q3_2, q3_2, 0x4, vl); + m <<= 1; - sum_t += __riscv_vmv_x_s_i32m1_i32(isum3); + vuint8m1_t qh_m3 = __riscv_vand_vx_u8m1(vqh, m, vl); + vbool8_t vmask_3 = __riscv_vmseq_vx_u8m1_b8(qh_m3, 0, vl); + vint8m1_t q3_m3 = __riscv_vsub_vx_i8m1_mu(vmask_3, q3_3, q3_3, 0x4, vl); + m <<= 1; - q3 += 32; q8 += 128; scale += 8; + // load Q8 and take product with Q3 + vint16m2_t a0 = __riscv_vwmul_vv_i16m2(q3_m0, __riscv_vle8_v_i8m1(q8, vl), vl); + vint16m2_t a1 = __riscv_vwmul_vv_i16m2(q3_m1, __riscv_vle8_v_i8m1(q8+32, vl), vl); + vint16m2_t a2 = __riscv_vwmul_vv_i16m2(q3_m2, __riscv_vle8_v_i8m1(q8+64, vl), vl); + vint16m2_t a3 = __riscv_vwmul_vv_i16m2(q3_m3, __riscv_vle8_v_i8m1(q8+96, vl), vl); - } + vl = 16; - const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + // retrieve lane to multiply with scale + vint32m2_t aux0_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 0), (scale[0]), vl); + vint32m2_t aux0_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a0, 1), (scale[1]), vl); + vint32m2_t aux1_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 0), (scale[2]), vl); + vint32m2_t aux1_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a1, 1), (scale[3]), vl); + vint32m2_t aux2_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 0), (scale[4]), vl); + vint32m2_t aux2_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a2, 1), (scale[5]), vl); + vint32m2_t aux3_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 0), (scale[6]), vl); + vint32m2_t aux3_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(a3, 1), (scale[7]), vl); - sumf += d*sum_t; + vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux0_0, aux0_1, vl), vzero, vl); + vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux1_0, aux1_1, vl), isum0, vl); + vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux2_0, aux2_1, vl), isum1, vl); + vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(aux3_0, aux3_1, vl), isum2, vl); - } - break; - case 128: - for (int i = 0; i < nb; ++i) { - const uint8_t * restrict q3 = x[i].qs; - const uint8_t * restrict qh = x[i].hmask; - const int8_t * restrict q8 = y[i].qs; - - int8_t * scale = (int8_t *)utmp; - int tmp, t1, t2, t3, t4, t5, t6, t7; - __asm__ __volatile__( - "vsetivli zero, 12, e8, m1\n\t" - "vle8.v v0, (%[s6b])\n\t" - "vmv1r.v v2, v0\n\t" - "vsetivli zero, 2, e64, m1\n\t" - "vmv.v.x v9, %[sh]\n\t"\ - "vslidedown.vi v1, v0, 1\n\t" - "vslide1up.vx v8, v9, zero\n\t" // {0, 0, 4, 4} - "vslideup.vi v0, v2, 1\n\t" // {aux[0], aux[1], aux[0], aux[1]} - "vsetivli zero, 4, e32, m1\n\t" - "vid.v v9\n\t" - "vmv.x.s %[tmp], v1\n\t" - "vsll.vi v9, v9, 1\n\t" // {0, 2, 4, 6} - "vmv.v.x v1, %[tmp]\n\t" // {aux[2], aux[2], aux[2], aux[2]} - "vsrl.vv v4, v1, v9\n\t" - "vsrl.vv v2, v0, v8\n\t" - "vand.vx v5, v4, %[kmask1]\n\t" - "vand.vx v3, v2, %[kmask2]\n\t" - "vsll.vi v6, v5, 4\n\t" - "vor.vv v7, v6, v3\n\t" - "vsetivli zero, 16, e8, m1\n\t" - "vsub.vx v0, v7, %[c]\n\t" - "vse8.v v0, (%[scale])" - : [tmp] "=&r" (tmp) - : [sh] "r" (0x0000000400000004), [s6b] "r" (x[i].scales), [c] "r" (32) - , [scale] "r" (scale), [kmask1] "r" (kmask1), [kmask2] "r" (kmask2) - : "memory" - , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" - , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" - , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" - , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" - ); + sum_t += __riscv_vmv_x_s_i32m1_i32(isum3); - uint8_t m = 1; - int isum = 0; - for (int j = 0; j < QK_K; j += 128) { - __asm__ __volatile__( - "lb zero, 31(%[q3])\n\t" - "vsetvli zero, %[vl32], e8, m2, ta, mu\n\t" - "vle8.v v8, (%[q3])\n\t" - "vsrl.vi v10, v8, 2\n\t" - "vsrl.vi v12, v8, 4\n\t" - "vsrl.vi v14, v8, 6\n\t" - "lb zero, 64(%[q8])\n\t" - "vand.vi v8, v8, 3\n\t" - "vand.vi v10, v10, 3\n\t" - "vand.vi v12, v12, 3\n\t" - "vle8.v v2, (%[qh])\n\t" - "lb zero, 127(%[q8])\n\t" - "vand.vx v4, v2, %[m]\n\t" - "slli %[m], %[m], 1\n\t" - "vmseq.vx v0, v4, zero\n\t" - "vadd.vi v8, v8, -4, v0.t\n\t" - "lb zero, 0(%[q8])\n\t" - "vand.vx v4, v2, %[m]\n\t" - "slli %[m], %[m], 1\n\t" - "vmseq.vx v0, v4, zero\n\t" - "vadd.vi v10, v10, -4, v0.t\n\t" - "vand.vx v4, v2, %[m]\n\t" - "slli %[m], %[m], 1\n\t" - "vmseq.vx v0, v4, zero\n\t" - "vadd.vi v12, v12, -4, v0.t\n\t" - "vand.vx v4, v2, %[m]\n\t" - "slli %[m], %[m], 1\n\t" - "vmseq.vx v0, v4, zero\n\t" - "vadd.vi v14, v14, -4, v0.t\n\t" - "vsetvli zero, %[vl128], e8, m8\n\t" - "vle8.v v0, (%[q8])\n\t" - "lb %[tmp], 0(%[scale])\n\t" - "lb %[t1], 1(%[scale])\n\t" - "lb %[t2], 2(%[scale])\n\t" - "lb %[t3], 3(%[scale])\n\t" - "vsetvli zero, %[vl64], e8, m4\n\t" - "vwmul.vv v16, v0, v8\n\t" - "vwmul.vv v24, v4, v12\n\t" - "vsetivli zero, 16, e16, m2\n\t" - "vmv.v.x v0, zero\n\t" - "vwredsum.vs v8, v16, v0\n\t" - "lb %[t4], 4(%[scale])\n\t" - "lb %[t5], 5(%[scale])\n\t" - "vwredsum.vs v9, v18, v0\n\t" - "vwredsum.vs v10, v20, v0\n\t" - "vwredsum.vs v11, v22, v0\n\t" - "vwredsum.vs v12, v24, v0\n\t" - "lb %[t6], 6(%[scale])\n\t" - "lb %[t7], 7(%[scale])\n\t" - "vwredsum.vs v13, v26, v0\n\t" - "vwredsum.vs v14, v28, v0\n\t" - "vwredsum.vs v15, v30, v0\n\t" - "vsetivli zero, 4, e32, m1\n\t" - "vmul.vx v0, v8, %[tmp]\n\t" - "vmul.vx v1, v9, %[t1]\n\t" - "vmacc.vx v0, %[t2], v10\n\t" - "vmacc.vx v1, %[t3], v11\n\t" - "vmacc.vx v0, %[t4], v12\n\t" - "vmacc.vx v1, %[t5], v13\n\t" - "vmacc.vx v0, %[t6], v14\n\t" - "vmacc.vx v1, %[t7], v15\n\t" - "vmv.x.s %[tmp], v0\n\t" - "vmv.x.s %[t1], v1\n\t" - "add %[isum], %[isum], %[tmp]\n\t" - "add %[isum], %[isum], %[t1]" - : [tmp] "=&r" (tmp), [t1] "=&r" (t1), [t2] "=&r" (t2), [t3] "=&r" (t3) - , [t4] "=&r" (t4), [t5] "=&r" (t5), [t6] "=&r" (t6), [t7] "=&r" (t7) - , [m] "+&r" (m), [isum] "+&r" (isum) - : [vl128] "r" (128), [vl64] "r" (64), [vl32] "r" (32) - , [q3] "r" (q3), [qh] "r" (qh), [scale] "r" (scale), [q8] "r" (q8) - : "memory" - , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" - , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" - , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" - , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" - ); - q3 += 32; q8 += 128; scale += 8; - } + q3 += 32; q8 += 128; scale += 8; - const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; - sumf += d * isum; } - break; - default: - assert(false && "Unsupported vector length"); - break; - } - *s = sumf; - -#else + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; - UNUSED(kmask1); - UNUSED(kmask2); - UNUSED(x); - UNUSED(y); - UNUSED(nb); + sumf += d*sum_t; - ggml_vec_dot_q3_K_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); -#endif + } + *s = sumf; } -void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { +void ggml_vec_dot_q3_K_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); assert(nrc == 1); UNUSED(nrc); @@ -1228,27 +1277,289 @@ void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi UNUSED(by); UNUSED(bs); - const block_q4_K * GGML_RESTRICT x = vx; + const uint32_t kmask1 = 0x03030303; + const uint32_t kmask2 = 0x0f0f0f0f; + + const block_q3_K * GGML_RESTRICT x = vx; const block_q8_K * GGML_RESTRICT y = vy; const int nb = n / QK_K; - static const uint32_t kmask1 = 0x3f3f3f3f; - static const uint32_t kmask2 = 0x0f0f0f0f; - static const uint32_t kmask3 = 0x03030303; + // mask for processing 16 elements per prod register + const vuint16m1_t va_index = __riscv_vid_v_u16m1(32); + const vbool16_t va_mask = __riscv_vmsgtu_vx_u16m1_b16(va_index, 15, 32); uint32_t utmp[4]; - -#if defined __riscv_xtheadvector - - const uint8_t * scales = (const uint8_t*)&utmp[0]; - const uint8_t * mins = (const uint8_t*)&utmp[2]; - float sumf = 0; + uint32_t aux[3]; for (int i = 0; i < nb; ++i) { - const float d = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); - const float dmin = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); + const uint8_t * GGML_RESTRICT q3 = x[i].qs; + const uint8_t * GGML_RESTRICT qh = x[i].hmask; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + + memcpy(aux, x[i].scales, 12); + utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4); + utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4); + utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4); + utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4); + + int8_t * scale = (int8_t *)utmp; + for (int j = 0; j < 16; ++j) scale[j] -= 32; + + + size_t vl = 32; + uint8_t m = 1; + + vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); + vuint8mf2_t vqh = __riscv_vle8_v_u8mf2(qh, vl); + + int sum_t = 0; + + vint32m2_t vaux_0 = __riscv_vmv_v_x_i32m2(0, vl); + vint32m2_t vaux_1 = __riscv_vmv_v_x_i32m2(0, vl); + vint32m2_t vaux_2 = __riscv_vmv_v_x_i32m2(0, vl); + vint32m2_t vaux_3 = __riscv_vmv_v_x_i32m2(0, vl); + + for (int j = 0; j < QK_K; j += 128) { + + vl = 32; + + // load Q3 + vuint8mf2_t q3_x = __riscv_vle8_v_u8mf2(q3, vl); + + vint8mf2_t q3_0 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(q3_x, 0x03, vl)); + vint8mf2_t q3_1 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(q3_x, 0x2, vl), 0x03 , vl)); + vint8mf2_t q3_2 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(q3_x, 0x4, vl), 0x03 , vl)); + vint8mf2_t q3_3 = __riscv_vreinterpret_v_u8mf2_i8mf2(__riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(q3_x, 0x6, vl), 0x03 , vl)); + + // compute mask for subtraction + vuint8mf2_t qh_m0 = __riscv_vand_vx_u8mf2(vqh, m, vl); + vbool16_t vmask_0 = __riscv_vmseq_vx_u8mf2_b16(qh_m0, 0, vl); + vint8mf2_t q3_m0 = __riscv_vsub_vx_i8mf2_mu(vmask_0, q3_0, q3_0, 0x4, vl); + m <<= 1; + + vuint8mf2_t qh_m1 = __riscv_vand_vx_u8mf2(vqh, m, vl); + vbool16_t vmask_1 = __riscv_vmseq_vx_u8mf2_b16(qh_m1, 0, vl); + vint8mf2_t q3_m1 = __riscv_vsub_vx_i8mf2_mu(vmask_1, q3_1, q3_1, 0x4, vl); + m <<= 1; + + vuint8mf2_t qh_m2 = __riscv_vand_vx_u8mf2(vqh, m, vl); + vbool16_t vmask_2 = __riscv_vmseq_vx_u8mf2_b16(qh_m2, 0, vl); + vint8mf2_t q3_m2 = __riscv_vsub_vx_i8mf2_mu(vmask_2, q3_2, q3_2, 0x4, vl); + m <<= 1; + + vuint8mf2_t qh_m3 = __riscv_vand_vx_u8mf2(vqh, m, vl); + vbool16_t vmask_3 = __riscv_vmseq_vx_u8mf2_b16(qh_m3, 0, vl); + vint8mf2_t q3_m3 = __riscv_vsub_vx_i8mf2_mu(vmask_3, q3_3, q3_3, 0x4, vl); + m <<= 1; + + // load Q8 and take product + vint16m1_t va_q_0 = __riscv_vwmul_vv_i16m1(q3_m0, __riscv_vle8_v_i8mf2(q8, vl), vl); + vint16m1_t va_q_1 = __riscv_vwmul_vv_i16m1(q3_m1, __riscv_vle8_v_i8mf2(q8+32, vl), vl); + vint16m1_t va_q_2 = __riscv_vwmul_vv_i16m1(q3_m2, __riscv_vle8_v_i8mf2(q8+64, vl), vl); + vint16m1_t va_q_3 = __riscv_vwmul_vv_i16m1(q3_m3, __riscv_vle8_v_i8mf2(q8+96, vl), vl); + + // accumulate + vaux_0 = __riscv_vwmacc_vx_i32m2(vaux_0, scale[0], va_q_0, 16); + vaux_1 = __riscv_vwmacc_vx_i32m2(vaux_1, scale[2], va_q_1, 16); + vaux_2 = __riscv_vwmacc_vx_i32m2(vaux_2, scale[4], va_q_2, 16); + vaux_3 = __riscv_vwmacc_vx_i32m2(vaux_3, scale[6], va_q_3, 16); + // + vaux_0 = __riscv_vwmacc_vx_i32m2_m(va_mask, vaux_0, scale[1], va_q_0, vl); + vaux_1 = __riscv_vwmacc_vx_i32m2_m(va_mask, vaux_1, scale[3], va_q_1, vl); + vaux_2 = __riscv_vwmacc_vx_i32m2_m(va_mask, vaux_2, scale[5], va_q_2, vl); + vaux_3 = __riscv_vwmacc_vx_i32m2_m(va_mask, vaux_3, scale[7], va_q_3, vl); + + q3 += 32; q8 += 128; scale += 8; + } + + vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_0, vaux_1, vl), vzero, vl); + vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_2, vaux_3, vl), isum0, vl); + + sum_t += __riscv_vmv_x_s_i32m1_i32(isum1); + + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + sumf += d*sum_t; + } + + *s = sumf; +} + +void ggml_vec_dot_q3_K_q8_K_vl1024(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const uint32_t kmask1 = 0x03030303; + const uint32_t kmask2 = 0x0f0f0f0f; + + const block_q3_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + // mask for processing 16 elements per prod register + const vuint16mf2_t va_index = __riscv_vid_v_u16mf2(32); + const vbool32_t va_mask = __riscv_vmsgtu_vx_u16mf2_b32(va_index, 15, 32); + + uint32_t utmp[4]; + float sumf = 0; + uint32_t aux[3]; + + for (int i = 0; i < nb; ++i) { + const uint8_t * GGML_RESTRICT q3 = x[i].qs; + const uint8_t * GGML_RESTRICT qh = x[i].hmask; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + + memcpy(aux, x[i].scales, 12); + utmp[3] = ((aux[1] >> 4) & kmask2) | (((aux[2] >> 6) & kmask1) << 4); + utmp[2] = ((aux[0] >> 4) & kmask2) | (((aux[2] >> 4) & kmask1) << 4); + utmp[1] = (aux[1] & kmask2) | (((aux[2] >> 2) & kmask1) << 4); + utmp[0] = (aux[0] & kmask2) | (((aux[2] >> 0) & kmask1) << 4); + + int8_t * scale = (int8_t *)utmp; + for (int j = 0; j < 16; ++j) scale[j] -= 32; + + + size_t vl = 32; + uint8_t m = 1; + + vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); + vuint8mf4_t vqh = __riscv_vle8_v_u8mf4(qh, vl); + + int sum_t = 0; + + vint32m1_t vaux_0 = __riscv_vmv_v_x_i32m1(0, vl); + vint32m1_t vaux_1 = __riscv_vmv_v_x_i32m1(0, vl); + vint32m1_t vaux_2 = __riscv_vmv_v_x_i32m1(0, vl); + vint32m1_t vaux_3 = __riscv_vmv_v_x_i32m1(0, vl); + + for (int j = 0; j < QK_K; j += 128) { + + vl = 32; + + // load Q3 + vuint8mf4_t q3_x = __riscv_vle8_v_u8mf4(q3, vl); + + vint8mf4_t q3_0 = __riscv_vreinterpret_v_u8mf4_i8mf4(__riscv_vand_vx_u8mf4(q3_x, 0x03, vl)); + vint8mf4_t q3_1 = __riscv_vreinterpret_v_u8mf4_i8mf4(__riscv_vand_vx_u8mf4(__riscv_vsrl_vx_u8mf4(q3_x, 0x2, vl), 0x03 , vl)); + vint8mf4_t q3_2 = __riscv_vreinterpret_v_u8mf4_i8mf4(__riscv_vand_vx_u8mf4(__riscv_vsrl_vx_u8mf4(q3_x, 0x4, vl), 0x03 , vl)); + vint8mf4_t q3_3 = __riscv_vreinterpret_v_u8mf4_i8mf4(__riscv_vand_vx_u8mf4(__riscv_vsrl_vx_u8mf4(q3_x, 0x6, vl), 0x03 , vl)); + + // compute mask for subtraction + vuint8mf4_t qh_m0 = __riscv_vand_vx_u8mf4(vqh, m, vl); + vbool32_t vmask_0 = __riscv_vmseq_vx_u8mf4_b32(qh_m0, 0, vl); + vint8mf4_t q3_m0 = __riscv_vsub_vx_i8mf4_mu(vmask_0, q3_0, q3_0, 0x4, vl); + m <<= 1; + + vuint8mf4_t qh_m1 = __riscv_vand_vx_u8mf4(vqh, m, vl); + vbool32_t vmask_1 = __riscv_vmseq_vx_u8mf4_b32(qh_m1, 0, vl); + vint8mf4_t q3_m1 = __riscv_vsub_vx_i8mf4_mu(vmask_1, q3_1, q3_1, 0x4, vl); + m <<= 1; + + vuint8mf4_t qh_m2 = __riscv_vand_vx_u8mf4(vqh, m, vl); + vbool32_t vmask_2 = __riscv_vmseq_vx_u8mf4_b32(qh_m2, 0, vl); + vint8mf4_t q3_m2 = __riscv_vsub_vx_i8mf4_mu(vmask_2, q3_2, q3_2, 0x4, vl); + m <<= 1; + + vuint8mf4_t qh_m3 = __riscv_vand_vx_u8mf4(vqh, m, vl); + vbool32_t vmask_3 = __riscv_vmseq_vx_u8mf4_b32(qh_m3, 0, vl); + vint8mf4_t q3_m3 = __riscv_vsub_vx_i8mf4_mu(vmask_3, q3_3, q3_3, 0x4, vl); + m <<= 1; + + // load Q8 and take product + vint16mf2_t va_q_0 = __riscv_vwmul_vv_i16mf2(q3_m0, __riscv_vle8_v_i8mf4(q8, vl), vl); + vint16mf2_t va_q_1 = __riscv_vwmul_vv_i16mf2(q3_m1, __riscv_vle8_v_i8mf4(q8+32, vl), vl); + vint16mf2_t va_q_2 = __riscv_vwmul_vv_i16mf2(q3_m2, __riscv_vle8_v_i8mf4(q8+64, vl), vl); + vint16mf2_t va_q_3 = __riscv_vwmul_vv_i16mf2(q3_m3, __riscv_vle8_v_i8mf4(q8+96, vl), vl); + + // accumulate + vaux_0 = __riscv_vwmacc_vx_i32m1(vaux_0, scale[0], va_q_0, 16); + vaux_1 = __riscv_vwmacc_vx_i32m1(vaux_1, scale[2], va_q_1, 16); + vaux_2 = __riscv_vwmacc_vx_i32m1(vaux_2, scale[4], va_q_2, 16); + vaux_3 = __riscv_vwmacc_vx_i32m1(vaux_3, scale[6], va_q_3, 16); + // + vaux_0 = __riscv_vwmacc_vx_i32m1_m(va_mask, vaux_0, scale[1], va_q_0, vl); + vaux_1 = __riscv_vwmacc_vx_i32m1_m(va_mask, vaux_1, scale[3], va_q_1, vl); + vaux_2 = __riscv_vwmacc_vx_i32m1_m(va_mask, vaux_2, scale[5], va_q_2, vl); + vaux_3 = __riscv_vwmacc_vx_i32m1_m(va_mask, vaux_3, scale[7], va_q_3, vl); + + q3 += 32; q8 += 128; scale += 8; + } + + vint32m1_t isum0 = __riscv_vredsum_vs_i32m1_i32m1(__riscv_vadd_vv_i32m1(vaux_0, vaux_1, vl), vzero, vl); + vint32m1_t isum1 = __riscv_vredsum_vs_i32m1_i32m1(__riscv_vadd_vv_i32m1(vaux_2, vaux_3, vl), isum0, vl); + + sum_t += __riscv_vmv_x_s_i32m1_i32(isum1); + + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + sumf += d*sum_t; + } + + *s = sumf; +} +#endif + +void ggml_vec_dot_q3_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { +#if defined __riscv_xtheadvector + ggml_vec_dot_q3_K_q8_K_xtheadvector(n, s, bs, vx, bx, vy, by, nrc); +#elif defined __riscv_v + switch (__riscv_vlenb() * 8) { + case 128: + ggml_vec_dot_q3_K_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); + break; + case 256: + ggml_vec_dot_q3_K_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); + break; + case 512: + ggml_vec_dot_q3_K_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); + break; + case 1024: + ggml_vec_dot_q3_K_q8_K_vl1024(n, s, bs, vx, bx, vy, by, nrc); + break; + default: + ggml_vec_dot_q3_K_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); + break; + } +#else + ggml_vec_dot_q3_K_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); +#endif +} + +#if defined __riscv_xtheadvector +static NOINLINE void ggml_vec_dot_q4_K_q8_K_xtheadvector(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_q4_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + static const uint32_t kmask1 = 0x3f3f3f3f; + static const uint32_t kmask2 = 0x0f0f0f0f; + static const uint32_t kmask3 = 0x03030303; + + uint32_t utmp[4]; + + const uint8_t * scales = (const uint8_t*)&utmp[0]; + const uint8_t * mins = (const uint8_t*)&utmp[2]; + + float sumf = 0; + + for (int i = 0; i < nb; ++i) { + const float d = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); + const float dmin = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); int tmp, tmp2, sumi; __asm__ __volatile__( @@ -1354,277 +1665,317 @@ void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi } *s = sumf; +} +#endif -#elif defined __riscv_v +#if defined __riscv_v +static NOINLINE void ggml_vec_dot_q4_K_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_q4_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + static const uint32_t kmask1 = 0x3f3f3f3f; + static const uint32_t kmask2 = 0x0f0f0f0f; + static const uint32_t kmask3 = 0x03030303; + + uint32_t utmp[4]; const uint8_t * scales = (const uint8_t*)&utmp[0]; const uint8_t * mins = (const uint8_t*)&utmp[2]; float sumf = 0; - const int vector_length = __riscv_vlenb() * 8; + for (int i = 0; i < nb; ++i) { + const float d = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); + const float dmin = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); + + float ftmp, ft2; + const uint8_t * restrict q40; + const uint8_t * restrict q41; + const uint8_t * restrict q42; + const uint8_t * restrict q43; + const int8_t * restrict q80; + const int8_t * restrict q81; + const int8_t * restrict q82; + const int8_t * restrict q83; + int s0, s1, s2, s3; + + __asm__ __volatile__( + "li %[s1], 8\n\t" + "vsetivli zero, 4, e32, m1, ta, ma\n\t" + "vle32.v v1, (%[s6b])\n\t" + "vslide1down.vx v1, v1, zero\n\t" + "vmv.v.x v16, zero\n\t" + "vslidedown.vi v2, v1, 2\n\t" + "vmv1r.v v3, v2\n\t" + "vslideup.vi v2, v3, 1\n\t" // {aux[2], aux[2]} + "vsetivli zero, 2, e32, m1, ta, ma\n\t" + "vmv.v.i v4, 4\n\t" + "vand.vx v8, v1, %[kmask1]\n\t" + "vslide1up.vx v5, v4, zero\n\t" // {0, 4} + "vsrl.vi v6, v1, 6\n\t" + "vsrl.vv v7, v2, v5\n\t" + "vsse32.v v8, (%[utmp]), %[s1]\n\t" + "vand.vx v0, v6, %[kmask3]\n\t" + "vand.vx v2, v7, %[kmask2]\n\t" + "vsll.vi v6, v0, 4\n\t" + "addi %[s0], %[utmp], 4\n\t" + "vor.vv v1, v6, v2\n\t" + "vsse32.v v1, (%[s0]), %[s1]\n\t" + "vsetivli zero, 8, e16, m1, ta, ma\n\t" + "vle32.v v2, (%[bsums])\n\t" + "vnsrl.wi v0, v2, 0\n\t" + "vnsrl.wi v1, v2, 16\n\t" + "vadd.vv v2, v0, v1\n\t" + "vle8.v v3, (%[mins])\n\t" + "vzext.vf2 v4, v3\n\t" + "vwmul.vv v6, v4, v2\n\t" + "vsetivli zero, 4, e32, m1, ta, ma\n\t" + "vredsum.vs v0, v6, v16\n\t" + "vredsum.vs v0, v7, v0\n\t" + "vfcvt.f.x.v v0, v0\n\t" + "vfmv.f.s %[ftmp], v0\n\t" + "vsetivli zero, 16, e8, m1, ta, ma\n\t" + "vle8.v v0, (%[xs])\n\t" + "fnmsub.s %[sumf], %[dmin], %[ftmp], %[sumf]\n\t" + "addi %[q40], %[xs], 64\n\t" + "addi %[q41], %[xs], 16\n\t" + "addi %[q42], %[xs], 32\n\t" + "addi %[q43], %[xs], 48\n\t" + "addi %[q80], %[ys], 64\n\t" + "vle8.v v1, (%[q41])\n\t" + "vle8.v v2, (%[q42])\n\t" + "addi %[q81], %[ys], 16\n\t" + "addi %[q41], %[q41], 64\n\t" + "addi %[q82], %[ys], 32\n\t" + "vle8.v v3, (%[q43])\n\t" + "vle8.v v8, (%[ys])\n\t" + "addi %[q42], %[q42], 64\n\t" + "addi %[q83], %[ys], 48\n\t" + "addi %[q43], %[q43], 64\n\t" + "vsrl.vi v4, v0, 4\n\t" + "vle8.v v9, (%[q81])\n\t" + "vle8.v v10, (%[q82])\n\t" + "vand.vi v0, v0, 0xF\n\t" + "addi %[q81], %[q81], 64\n\t" + "vsrl.vi v5, v1, 4\n\t" + "addi %[q82], %[q82], 64\n\t" + "vle8.v v11, (%[q83])\n\t" + "vle8.v v12, (%[q80])\n\t" + "vand.vi v1, v1, 0xF\n\t" + "addi %[q83], %[q83], 64\n\t" + "vsrl.vi v6, v2, 4\n\t" + "addi %[q80], %[q80], 64\n\t" + "vle8.v v13, (%[q81])\n\t" + "vle8.v v14, (%[q82])\n\t" + "vand.vi v2, v2, 0xF\n\t" + "addi %[q81], %[q81], 64\n\t" + "vsrl.vi v7, v3, 4\n\t" + "addi %[q82], %[q82], 64\n\t" + "vwmul.vv v16, v0, v8\n\t" + "vle8.v v15, (%[q83])\n\t" + "vle8.v v0, (%[q40])\n\t" + "vand.vi v3, v3, 0xF\n\t" + "addi %[q83], %[q83], 64\n\t" + "vwmul.vv v24, v2, v12\n\t" + "vwmul.vv v20, v4, v10\n\t" + "vwmul.vv v28, v6, v14\n\t" + "vwmacc.vv v16, v1, v9\n\t" + "vle8.v v1, (%[q41])\n\t" + "vle8.v v2, (%[q42])\n\t" + "vwmacc.vv v24, v3, v13\n\t" + "vwmacc.vv v20, v5, v11\n\t" + "vwmacc.vv v28, v7, v15\n\t" + "addi %[q40], %[q80], 64\n\t" + "addi %[q41], %[q81], 64\n\t" + "vle8.v v3, (%[q43])\n\t" + "vle8.v v8, (%[q80])\n\t" + "addi %[q42], %[q82], 64\n\t" + "addi %[q43], %[q83], 64\n\t" + "vsrl.vi v4, v0, 4\n\t" + "vle8.v v9, (%[q81])\n\t" + "vle8.v v10, (%[q82])\n\t" + "vand.vi v0, v0, 0xF\n\t" + "vsrl.vi v5, v1, 4\n\t" + "vsrl.vi v7, v3, 4\n\t" + "vand.vi v3, v3, 0xF\n\t" + "vle8.v v11, (%[q83])\n\t" + "vle8.v v12, (%[q40])\n\t" + "vand.vi v1, v1, 0xF\n\t" + "vsrl.vi v6, v2, 4\n\t" + "vand.vi v2, v2, 0xF\n\t" + "vwmul.vv v18, v0, v8\n\t" + "vle8.v v13, (%[q41])\n\t" + "vle8.v v14, (%[q42])\n\t" + "vwmul.vv v26, v2, v12\n\t" + "vwmul.vv v22, v4, v10\n\t" + "vwmul.vv v30, v6, v14\n\t" + "vwmacc.vv v18, v1, v9\n\t" + "vle8.v v15, (%[q43])\n\t" + "vwmacc.vv v26, v3, v13\n\t" + "vwmacc.vv v22, v5, v11\n\t" + "vwmacc.vv v30, v7, v15\n\t" + "vmv.v.x v0, zero\n\t" + "vsetivli zero, 16, e16, m2, ta, ma\n\t" + "vwredsum.vs v4, v16, v0\n\t" + "lbu %[s0], 0(%[scale])\n\t" + "vwredsum.vs v5, v20, v0\n\t" + "lbu %[s1], 1(%[scale])\n\t" + "vwredsum.vs v6, v24, v0\n\t" + "lbu %[s2], 2(%[scale])\n\t" + "vwredsum.vs v7, v28, v0\n\t" + "lbu %[s3], 3(%[scale])\n\t" + "vwredsum.vs v8, v18, v0\n\t" + "lbu %[q40], 4(%[scale])\n\t" + "vwredsum.vs v9, v22, v0\n\t" + "lbu %[q41], 5(%[scale])\n\t" + "vwredsum.vs v10, v26, v0\n\t" + "lbu %[q42], 6(%[scale])\n\t" + "vwredsum.vs v11, v30, v0\n\t" + "lbu %[q43], 7(%[scale])\n\t" + "vsetivli zero, 4, e32, m1, ta, ma\n\t" + "vmul.vx v0, v4, %[s0]\n\t" + "vmul.vx v1, v8, %[q40]\n\t" + "vmacc.vx v0, %[s1], v5\n\t" + "vmacc.vx v1, %[q41], v9\n\t" + "vmacc.vx v0, %[s2], v6\n\t" + "vmacc.vx v1, %[q42], v10\n\t" + "vmacc.vx v0, %[s3], v7\n\t" + "vmacc.vx v1, %[q43], v11\n\t" + "vfcvt.f.x.v v0, v0\n\t" + "vfcvt.f.x.v v1, v1\n\t" + "vfmv.f.s %[ft2], v0\n\t" + "vfmv.f.s %[ftmp], v1\n\t" + "fadd.s %[ft2], %[ft2], %[ftmp]\n\t" + "fmadd.s %[sumf], %[d], %[ft2], %[sumf]" + : [ftmp] "=&f" (ftmp), [sumf] "+&f" (sumf), [ft2] "=&f" (ft2) + , [s0] "=&r" (s0), [s1] "=&r" (s1), [s2] "=&r" (s2), [s3] "=&r" (s3) + , [q40] "=&r" (q40), [q41] "=&r" (q41), [q42] "=&r" (q42), [q43] "=&r" (q43) + , [q80] "=&r" (q80), [q81] "=&r" (q81), [q82] "=&r" (q82), [q83] "=&r" (q83) + : [d] "f" (d), [ys] "r" (y[i].qs), [xs] "r" (x[i].qs), [scale] "r" (scales) + , [bsums] "r" (y[i].bsums), [mins] "r" (mins), [utmp] "r" (utmp) + , [s6b] "r" (&x[i]), [kmask1] "r" (kmask1), [dmin] "f" (dmin) + , [kmask2] "r" (kmask2), [kmask3] "r" (kmask3) + : "memory" + , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" + , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" + , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" + , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" + ); + } - switch (vector_length) { - case 256: - for (int i = 0; i < nb; ++i) { + *s = sumf; +} - size_t vl = 8; +static NOINLINE void ggml_vec_dot_q4_K_q8_K_vl256(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); - const float d = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); - const float dmin = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); + const block_q4_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; - vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl); - vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl); - vint16mf2_t q8sums = __riscv_vadd_vv_i16mf2(q8sums_0, q8sums_1, vl); + const int nb = n / QK_K; - memcpy(utmp, x[i].scales, 12); - utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); - const uint32_t uaux = utmp[1] & kmask1; - utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); - utmp[2] = uaux; - utmp[0] &= kmask1; + static const uint32_t kmask1 = 0x3f3f3f3f; + static const uint32_t kmask2 = 0x0f0f0f0f; + static const uint32_t kmask3 = 0x03030303; - vuint8mf4_t mins8 = __riscv_vle8_v_u8mf4(mins, vl); - vint16mf2_t v_mins = __riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vzext_vf2_u16mf2(mins8, vl)); - vint32m1_t prod = __riscv_vwmul_vv_i32m1(q8sums, v_mins, vl); + uint32_t utmp[4]; - vint32m1_t sumi = __riscv_vredsum_vs_i32m1_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl); - sumf -= dmin * __riscv_vmv_x_s_i32m1_i32(sumi); + const uint8_t * scales = (const uint8_t*)&utmp[0]; + const uint8_t * mins = (const uint8_t*)&utmp[2]; - const uint8_t * GGML_RESTRICT q4 = x[i].qs; - const int8_t * GGML_RESTRICT q8 = y[i].qs; + float sumf = 0; + for (int i = 0; i < nb; ++i) { + size_t vl = 8; - vl = 32; + const float d = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); + const float dmin = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); - int32_t sum_1 = 0; - int32_t sum_2 = 0; + vint16mf2_t q8sums_0 = __riscv_vlse16_v_i16mf2(y[i].bsums, 4, vl); + vint16mf2_t q8sums_1 = __riscv_vlse16_v_i16mf2(y[i].bsums+1, 4, vl); + vint16mf2_t q8sums = __riscv_vadd_vv_i16mf2(q8sums_0, q8sums_1, vl); - vint16m1_t vzero = __riscv_vmv_v_x_i16m1(0, 1); + memcpy(utmp, x[i].scales, 12); + utmp[3] = ((utmp[2] >> 4) & kmask2) | (((utmp[1] >> 6) & kmask3) << 4); + const uint32_t uaux = utmp[1] & kmask1; + utmp[1] = (utmp[2] & kmask2) | (((utmp[0] >> 6) & kmask3) << 4); + utmp[2] = uaux; + utmp[0] &= kmask1; - for (int j = 0; j < QK_K/64; ++j) { - // load Q4 - vuint8m1_t q4_x = __riscv_vle8_v_u8m1(q4, vl); + vuint8mf4_t mins8 = __riscv_vle8_v_u8mf4(mins, vl); + vint16mf2_t v_mins = __riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vzext_vf2_u16mf2(mins8, vl)); + vint32m1_t prod = __riscv_vwmul_vv_i32m1(q8sums, v_mins, vl); - // load Q8 and multiply it with lower Q4 nibble - vint8m1_t q8_0 = __riscv_vle8_v_i8m1(q8, vl); - vint8m1_t q4_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q4_x, 0x0F, vl)); - vint16m2_t qv_0 = __riscv_vwmul_vv_i16m2(q4_0, q8_0, vl); - vint16m1_t vs_0 = __riscv_vredsum_vs_i16m2_i16m1(qv_0, vzero, vl); + vint32m1_t sumi = __riscv_vredsum_vs_i32m1_i32m1(prod, __riscv_vmv_v_x_i32m1(0, 1), vl); + sumf -= dmin * __riscv_vmv_x_s_i32m1_i32(sumi); - sum_1 += __riscv_vmv_x_s_i16m1_i16(vs_0) * scales[2*j+0]; + const uint8_t * GGML_RESTRICT q4 = x[i].qs; + const int8_t * GGML_RESTRICT q8 = y[i].qs; - // load Q8 and multiply it with upper Q4 nibble - vint8m1_t q8_1 = __riscv_vle8_v_i8m1(q8+32, vl); - vint8m1_t q4_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vsrl_vx_u8m1(q4_x, 0x04, vl)); - vint16m2_t qv_1 = __riscv_vwmul_vv_i16m2(q4_1, q8_1, vl); - vint16m1_t vs_1 = __riscv_vredsum_vs_i16m2_i16m1(qv_1, vzero, vl); + vl = 32; - sum_2 += __riscv_vmv_x_s_i16m1_i16(vs_1) * scales[2*j+1]; + int32_t sum_1 = 0; + int32_t sum_2 = 0; - q4 += 32; q8 += 64; + vint16m1_t vzero = __riscv_vmv_v_x_i16m1(0, 1); - } + for (int j = 0; j < QK_K/64; ++j) { + // load Q4 + vuint8m1_t q4_x = __riscv_vle8_v_u8m1(q4, vl); - sumf += d*(sum_1 + sum_2); + // load Q8 and multiply it with lower Q4 nibble + vint8m1_t q8_0 = __riscv_vle8_v_i8m1(q8, vl); + vint8m1_t q4_0 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vand_vx_u8m1(q4_x, 0x0F, vl)); + vint16m2_t qv_0 = __riscv_vwmul_vv_i16m2(q4_0, q8_0, vl); + vint16m1_t vs_0 = __riscv_vredsum_vs_i16m2_i16m1(qv_0, vzero, vl); - } - break; - case 128: - for (int i = 0; i < nb; ++i) { - const float d = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); - const float dmin = y[i].d * GGML_CPU_FP16_TO_FP32(x[i].dmin); - - float ftmp, ft2; - const uint8_t * restrict q40; - const uint8_t * restrict q41; - const uint8_t * restrict q42; - const uint8_t * restrict q43; - const int8_t * restrict q80; - const int8_t * restrict q81; - const int8_t * restrict q82; - const int8_t * restrict q83; - int s0, s1, s2, s3; + sum_1 += __riscv_vmv_x_s_i16m1_i16(vs_0) * scales[2*j+0]; + + // load Q8 and multiply it with upper Q4 nibble + vint8m1_t q8_1 = __riscv_vle8_v_i8m1(q8+32, vl); + vint8m1_t q4_1 = __riscv_vreinterpret_v_u8m1_i8m1(__riscv_vsrl_vx_u8m1(q4_x, 0x04, vl)); + vint16m2_t qv_1 = __riscv_vwmul_vv_i16m2(q4_1, q8_1, vl); + vint16m1_t vs_1 = __riscv_vredsum_vs_i16m2_i16m1(qv_1, vzero, vl); + + sum_2 += __riscv_vmv_x_s_i16m1_i16(vs_1) * scales[2*j+1]; + + q4 += 32; q8 += 64; - __asm__ __volatile__( - "li %[s1], 8\n\t" - "vsetivli zero, 4, e32, m1, ta, ma\n\t" - "vle32.v v1, (%[s6b])\n\t" - "vslide1down.vx v1, v1, zero\n\t" - "vmv.v.x v16, zero\n\t" - "vslidedown.vi v2, v1, 2\n\t" - "vmv1r.v v3, v2\n\t" - "vslideup.vi v2, v3, 1\n\t" // {aux[2], aux[2]} - "vsetivli zero, 2, e32, m1, ta, ma\n\t" - "vmv.v.i v4, 4\n\t" - "vand.vx v8, v1, %[kmask1]\n\t" - "vslide1up.vx v5, v4, zero\n\t" // {0, 4} - "vsrl.vi v6, v1, 6\n\t" - "vsrl.vv v7, v2, v5\n\t" - "vsse32.v v8, (%[utmp]), %[s1]\n\t" - "vand.vx v0, v6, %[kmask3]\n\t" - "vand.vx v2, v7, %[kmask2]\n\t" - "vsll.vi v6, v0, 4\n\t" - "addi %[s0], %[utmp], 4\n\t" - "vor.vv v1, v6, v2\n\t" - "vsse32.v v1, (%[s0]), %[s1]\n\t" - "vsetivli zero, 8, e16, m1, ta, ma\n\t" - "vle32.v v2, (%[bsums])\n\t" - "vnsrl.wi v0, v2, 0\n\t" - "vnsrl.wi v1, v2, 16\n\t" - "vadd.vv v2, v0, v1\n\t" - "vle8.v v3, (%[mins])\n\t" - "vzext.vf2 v4, v3\n\t" - "vwmul.vv v6, v4, v2\n\t" - "vsetivli zero, 4, e32, m1, ta, ma\n\t" - "vredsum.vs v0, v6, v16\n\t" - "vredsum.vs v0, v7, v0\n\t" - "vfcvt.f.x.v v0, v0\n\t" - "vfmv.f.s %[ftmp], v0\n\t" - "vsetivli zero, 16, e8, m1, ta, ma\n\t" - "vle8.v v0, (%[xs])\n\t" - "fnmsub.s %[sumf], %[dmin], %[ftmp], %[sumf]\n\t" - "addi %[q40], %[xs], 64\n\t" - "addi %[q41], %[xs], 16\n\t" - "addi %[q42], %[xs], 32\n\t" - "addi %[q43], %[xs], 48\n\t" - "addi %[q80], %[ys], 64\n\t" - "vle8.v v1, (%[q41])\n\t" - "vle8.v v2, (%[q42])\n\t" - "addi %[q81], %[ys], 16\n\t" - "addi %[q41], %[q41], 64\n\t" - "addi %[q82], %[ys], 32\n\t" - "vle8.v v3, (%[q43])\n\t" - "vle8.v v8, (%[ys])\n\t" - "addi %[q42], %[q42], 64\n\t" - "addi %[q83], %[ys], 48\n\t" - "addi %[q43], %[q43], 64\n\t" - "vsrl.vi v4, v0, 4\n\t" - "vle8.v v9, (%[q81])\n\t" - "vle8.v v10, (%[q82])\n\t" - "vand.vi v0, v0, 0xF\n\t" - "addi %[q81], %[q81], 64\n\t" - "vsrl.vi v5, v1, 4\n\t" - "addi %[q82], %[q82], 64\n\t" - "vle8.v v11, (%[q83])\n\t" - "vle8.v v12, (%[q80])\n\t" - "vand.vi v1, v1, 0xF\n\t" - "addi %[q83], %[q83], 64\n\t" - "vsrl.vi v6, v2, 4\n\t" - "addi %[q80], %[q80], 64\n\t" - "vle8.v v13, (%[q81])\n\t" - "vle8.v v14, (%[q82])\n\t" - "vand.vi v2, v2, 0xF\n\t" - "addi %[q81], %[q81], 64\n\t" - "vsrl.vi v7, v3, 4\n\t" - "addi %[q82], %[q82], 64\n\t" - "vwmul.vv v16, v0, v8\n\t" - "vle8.v v15, (%[q83])\n\t" - "vle8.v v0, (%[q40])\n\t" - "vand.vi v3, v3, 0xF\n\t" - "addi %[q83], %[q83], 64\n\t" - "vwmul.vv v24, v2, v12\n\t" - "vwmul.vv v20, v4, v10\n\t" - "vwmul.vv v28, v6, v14\n\t" - "vwmacc.vv v16, v1, v9\n\t" - "vle8.v v1, (%[q41])\n\t" - "vle8.v v2, (%[q42])\n\t" - "vwmacc.vv v24, v3, v13\n\t" - "vwmacc.vv v20, v5, v11\n\t" - "vwmacc.vv v28, v7, v15\n\t" - "addi %[q40], %[q80], 64\n\t" - "addi %[q41], %[q81], 64\n\t" - "vle8.v v3, (%[q43])\n\t" - "vle8.v v8, (%[q80])\n\t" - "addi %[q42], %[q82], 64\n\t" - "addi %[q43], %[q83], 64\n\t" - "vsrl.vi v4, v0, 4\n\t" - "vle8.v v9, (%[q81])\n\t" - "vle8.v v10, (%[q82])\n\t" - "vand.vi v0, v0, 0xF\n\t" - "vsrl.vi v5, v1, 4\n\t" - "vsrl.vi v7, v3, 4\n\t" - "vand.vi v3, v3, 0xF\n\t" - "vle8.v v11, (%[q83])\n\t" - "vle8.v v12, (%[q40])\n\t" - "vand.vi v1, v1, 0xF\n\t" - "vsrl.vi v6, v2, 4\n\t" - "vand.vi v2, v2, 0xF\n\t" - "vwmul.vv v18, v0, v8\n\t" - "vle8.v v13, (%[q41])\n\t" - "vle8.v v14, (%[q42])\n\t" - "vwmul.vv v26, v2, v12\n\t" - "vwmul.vv v22, v4, v10\n\t" - "vwmul.vv v30, v6, v14\n\t" - "vwmacc.vv v18, v1, v9\n\t" - "vle8.v v15, (%[q43])\n\t" - "vwmacc.vv v26, v3, v13\n\t" - "vwmacc.vv v22, v5, v11\n\t" - "vwmacc.vv v30, v7, v15\n\t" - "vmv.v.x v0, zero\n\t" - "vsetivli zero, 16, e16, m2, ta, ma\n\t" - "vwredsum.vs v4, v16, v0\n\t" - "lbu %[s0], 0(%[scale])\n\t" - "vwredsum.vs v5, v20, v0\n\t" - "lbu %[s1], 1(%[scale])\n\t" - "vwredsum.vs v6, v24, v0\n\t" - "lbu %[s2], 2(%[scale])\n\t" - "vwredsum.vs v7, v28, v0\n\t" - "lbu %[s3], 3(%[scale])\n\t" - "vwredsum.vs v8, v18, v0\n\t" - "lbu %[q40], 4(%[scale])\n\t" - "vwredsum.vs v9, v22, v0\n\t" - "lbu %[q41], 5(%[scale])\n\t" - "vwredsum.vs v10, v26, v0\n\t" - "lbu %[q42], 6(%[scale])\n\t" - "vwredsum.vs v11, v30, v0\n\t" - "lbu %[q43], 7(%[scale])\n\t" - "vsetivli zero, 4, e32, m1, ta, ma\n\t" - "vmul.vx v0, v4, %[s0]\n\t" - "vmul.vx v1, v8, %[q40]\n\t" - "vmacc.vx v0, %[s1], v5\n\t" - "vmacc.vx v1, %[q41], v9\n\t" - "vmacc.vx v0, %[s2], v6\n\t" - "vmacc.vx v1, %[q42], v10\n\t" - "vmacc.vx v0, %[s3], v7\n\t" - "vmacc.vx v1, %[q43], v11\n\t" - "vfcvt.f.x.v v0, v0\n\t" - "vfcvt.f.x.v v1, v1\n\t" - "vfmv.f.s %[ft2], v0\n\t" - "vfmv.f.s %[ftmp], v1\n\t" - "fadd.s %[ft2], %[ft2], %[ftmp]\n\t" - "fmadd.s %[sumf], %[d], %[ft2], %[sumf]" - : [ftmp] "=&f" (ftmp), [sumf] "+&f" (sumf), [ft2] "=&f" (ft2) - , [s0] "=&r" (s0), [s1] "=&r" (s1), [s2] "=&r" (s2), [s3] "=&r" (s3) - , [q40] "=&r" (q40), [q41] "=&r" (q41), [q42] "=&r" (q42), [q43] "=&r" (q43) - , [q80] "=&r" (q80), [q81] "=&r" (q81), [q82] "=&r" (q82), [q83] "=&r" (q83) - : [d] "f" (d), [ys] "r" (y[i].qs), [xs] "r" (x[i].qs), [scale] "r" (scales) - , [bsums] "r" (y[i].bsums), [mins] "r" (mins), [utmp] "r" (utmp) - , [s6b] "r" (&x[i]), [kmask1] "r" (kmask1), [dmin] "f" (dmin) - , [kmask2] "r" (kmask2), [kmask3] "r" (kmask3) - : "memory" - , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" - , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" - , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" - , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" - ); } - break; - default: - assert(false && "Unsupported vector length"); - break; + + sumf += d*(sum_1 + sum_2); + } *s = sumf; +} +#endif +void ggml_vec_dot_q4_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { +#if defined __riscv_xtheadvector + ggml_vec_dot_q4_K_q8_K_xtheadvector(n, s, bs, vx, bx, vy, by, nrc); +#elif defined __riscv_v + switch (__riscv_vlenb() * 8) { + case 128: + ggml_vec_dot_q4_K_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); + break; + default: // 256 and above + ggml_vec_dot_q4_K_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); + break; + } #else - - UNUSED(x); - UNUSED(y); - UNUSED(kmask1); - UNUSED(kmask2); - UNUSED(kmask3); - UNUSED(nb); - UNUSED(utmp); - ggml_vec_dot_q4_K_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); #endif } @@ -1725,7 +2076,6 @@ void ggml_vec_dot_q5_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi aux32 += __riscv_vmv_x_s_i32m1_i32(vacc2); q5 += 32; q8 += 64; - } sums += aux32 * d; @@ -1748,7 +2098,8 @@ void ggml_vec_dot_q5_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi #endif } -void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { +#if defined __riscv_xtheadvector +static NOINLINE void ggml_vec_dot_q6_K_q8_K_xtheadvector(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); assert(nrc == 1); UNUSED(nrc); @@ -1761,8 +2112,6 @@ void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi const int nb = n / QK_K; -#if defined __riscv_xtheadvector - float sumf = 0; for (int i = 0; i < nb; ++i) { @@ -1841,224 +2190,462 @@ void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi } *s = sumf; +} +#endif -#elif defined __riscv_v +#if defined __riscv_v +static NOINLINE void ggml_vec_dot_q6_K_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_q6_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + float sumf = 0.0f; + for (int i = 0; i < nb; ++i) { + __builtin_prefetch(&x[i + 1].d, 0, 1); + + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + const uint8_t * restrict q6 = x[i].ql; + const uint8_t * restrict qh = x[i].qh; + const int8_t * restrict q8 = y[i].qs; + + const int8_t * restrict scale = x[i].scales; + + int q6h; + float ftmp; + + for (int j = 0; j < QK_K/128; ++j) { + __asm__ __volatile__( + "addi %[q6h], %[q6], 32\n\t" + "ld t0, 0(%[scale])\n\t" + "addi %[scale], %[scale], 8\n\t" + "slli t6, t0, 1 * 8\n\t" + "lb zero, 0(%[q6])\n\t" + "slli t5, t0, 2 * 8\n\t" + "slli t4, t0, 3 * 8\n\t" + "lb zero, 0(%[q6h])\n\t" + "slli t3, t0, 4 * 8\n\t" + "slli t2, t0, 5 * 8\n\t" + "lb zero, 0(%[qh])\n\t" + "lb zero, 31(%[q6h])\n\t" + "slli t1, t0, 6 * 8\n\t" + "srai a7, t0, 56\n\t" + "vsetvli zero, %[vl32], e8, m2\n\t" + "vle8.v v8, (%[q6])\n\t" + "srai t6, t6, 56\n\t" + "srai t5, t5, 56\n\t" + "srai t4, t4, 56\n\t" + "srai t3, t3, 56\n\t" + "vle8.v v10, (%[q6h])\n\t" + "addi %[q6], %[q6], 64\n\t" + "slli t0, t0, 7 * 8\n\t" + "srai t2, t2, 56\n\t" + "srai t1, t1, 56\n\t" + "srai t0, t0, 56\n\t" + "vle8.v v4, (%[qh])\n\t" + "vsrl.vi v12, v8, 4\n\t" + "vsrl.vi v14, v10, 4\n\t" + "lb zero, 0(%[q8])\n\t" + "vand.vi v8, v8, 0xF\n\t" + "vand.vi v10, v10, 0xF\n\t" + "lb zero, 32(%[q8])\n\t" + "vsll.vi v0, v4, 4\n\t" + "vsll.vi v2, v4, 2\n\t" + "lb zero, 64(%[q8])\n\t" + "vsrl.vi v6, v4, 2\n\t" + "vand.vx v0, v0, %[mask]\n\t" + "lb zero, 96(%[q8])\n\t" + "vand.vx v2, v2, %[mask]\n\t" + "vand.vx v4, v4, %[mask]\n\t" + "vand.vx v6, v6, %[mask]\n\t" + "vor.vv v8, v8, v0\n\t" + "lb zero, 127(%[q8])\n\t" + "vor.vv v10, v10, v2\n\t" + "vor.vv v12, v12, v4\n\t" + "vor.vv v14, v14, v6\n\t" + "vsetvli zero, %[vl128], e8, m8\n\t" + "vle8.v v0, (%[q8])\n\t" + "vsub.vx v8, v8, %[vl32]\n\t" + "vsetvli zero, %[vl64], e8, m4\n\t" + "vwmul.vv v16, v0, v8\n\t" + "vwmul.vv v24, v4, v12\n\t" + "vsetivli zero, 16, e16, m2\n\t" + "vmv.v.x v0, zero\n\t" + "vwredsum.vs v10, v16, v0\n\t" + "vwredsum.vs v9, v18, v0\n\t" + "vwredsum.vs v8, v20, v0\n\t" + "vwredsum.vs v7, v22, v0\n\t" + "vwredsum.vs v11, v24, v0\n\t" + "vwredsum.vs v12, v26, v0\n\t" + "vwredsum.vs v13, v28, v0\n\t" + "vwredsum.vs v14, v30, v0\n\t" + "vsetivli zero, 4, e32, m1\n\t" + "vmul.vx v0, v10, t0\n\t" + "vmul.vx v1, v9, t1\n\t" + "vmacc.vx v0, t2, v8\n\t" + "vmacc.vx v1, t3, v7\n\t" + "vmacc.vx v0, t4, v11\n\t" + "vmacc.vx v1, t5, v12\n\t" + "vmacc.vx v0, t6, v13\n\t" + "vmacc.vx v1, a7, v14\n\t" + "vadd.vv v0, v0, v1\n\t" + "vfcvt.f.x.v v0, v0\n\t" + "vfmv.f.s %[ftmp], v0\n\t" + "fmadd.s %[sumf], %[d], %[ftmp], %[sumf]" + : [q6] "+&r" (q6), [q6h] "=&r" (q6h) + , [scale] "+&r" (scale) + , [sumf] "+&f" (sumf), [ftmp] "=&f" (ftmp) + : [qh] "r" (qh), [q8] "r" (q8) + , [vl32] "r" (32), [vl64] "r" (64), [vl128] "r" (128) + , [mask] "r" (0x30), [d] "f" (d) + : "memory" + , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" + , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" + , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" + , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" + , "t0", "t1", "t2", "t3", "t4", "t5", "t6", "a7" + , "a6", "a5", "a4", "a3" + ); + qh += 32; q8 += 128; + } + } + + *s = sumf; +} + +static NOINLINE void ggml_vec_dot_q6_K_q8_K_vl256(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_q6_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; float sumf = 0; - const int vector_length = __riscv_vlenb() * 8; + for (int i = 0; i < nb; ++i) { + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; - switch (vector_length) { - case 256: - for (int i = 0; i < nb; ++i) { + const uint8_t * GGML_RESTRICT q6 = x[i].ql; + const uint8_t * GGML_RESTRICT qh = x[i].qh; + const int8_t * GGML_RESTRICT q8 = y[i].qs; - const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + const int8_t * GGML_RESTRICT scale = x[i].scales; - const uint8_t * GGML_RESTRICT q6 = x[i].ql; - const uint8_t * GGML_RESTRICT qh = x[i].qh; - const int8_t * GGML_RESTRICT q8 = y[i].qs; + size_t vl; - const int8_t * GGML_RESTRICT scale = x[i].scales; + vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - size_t vl; + int sum_t = 0; + int is = 0; - vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); + for (int j = 0; j < QK_K/128; ++j) { + + vl = 32; + + // load qh + vuint8m1_t qh_x = __riscv_vle8_v_u8m1(qh, vl); + + // load Q6 + vuint8m1_t q6_0 = __riscv_vle8_v_u8m1(q6, vl); + vuint8m1_t q6_1 = __riscv_vle8_v_u8m1(q6+32, vl); + + vuint8m1_t q6a_0 = __riscv_vand_vx_u8m1(q6_0, 0x0F, vl); + vuint8m1_t q6a_1 = __riscv_vand_vx_u8m1(q6_1, 0x0F, vl); + vuint8m1_t q6s_0 = __riscv_vsrl_vx_u8m1(q6_0, 0x04, vl); + vuint8m1_t q6s_1 = __riscv_vsrl_vx_u8m1(q6_1, 0x04, vl); + + vuint8m1_t qh_0 = __riscv_vand_vx_u8m1(qh_x, 0x03, vl); + vuint8m1_t qh_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x2, vl), 0x03 , vl); + vuint8m1_t qh_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x4, vl), 0x03 , vl); + vuint8m1_t qh_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x6, vl), 0x03 , vl); + + vuint8m1_t qhi_0 = __riscv_vor_vv_u8m1(q6a_0, __riscv_vsll_vx_u8m1(qh_0, 0x04, vl), vl); + vuint8m1_t qhi_1 = __riscv_vor_vv_u8m1(q6a_1, __riscv_vsll_vx_u8m1(qh_1, 0x04, vl), vl); + vuint8m1_t qhi_2 = __riscv_vor_vv_u8m1(q6s_0, __riscv_vsll_vx_u8m1(qh_2, 0x04, vl), vl); + vuint8m1_t qhi_3 = __riscv_vor_vv_u8m1(q6s_1, __riscv_vsll_vx_u8m1(qh_3, 0x04, vl), vl); + + vint8m1_t a_0 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_0), 32, vl); + vint8m1_t a_1 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_1), 32, vl); + vint8m1_t a_2 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_2), 32, vl); + vint8m1_t a_3 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_3), 32, vl); + + // load Q8 and take product + vint16m2_t va_q_0 = __riscv_vwmul_vv_i16m2(a_0, __riscv_vle8_v_i8m1(q8, vl), vl); + vint16m2_t va_q_1 = __riscv_vwmul_vv_i16m2(a_1, __riscv_vle8_v_i8m1(q8+32, vl), vl); + vint16m2_t va_q_2 = __riscv_vwmul_vv_i16m2(a_2, __riscv_vle8_v_i8m1(q8+64, vl), vl); + vint16m2_t va_q_3 = __riscv_vwmul_vv_i16m2(a_3, __riscv_vle8_v_i8m1(q8+96, vl), vl); + + vl = 16; + + vint32m2_t vaux_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 0), scale[is+0], vl); + vint32m2_t vaux_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 1), scale[is+1], vl); + vint32m2_t vaux_2 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 0), scale[is+2], vl); + vint32m2_t vaux_3 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 1), scale[is+3], vl); + vint32m2_t vaux_4 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 0), scale[is+4], vl); + vint32m2_t vaux_5 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 1), scale[is+5], vl); + vint32m2_t vaux_6 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 0), scale[is+6], vl); + vint32m2_t vaux_7 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 1), scale[is+7], vl); + + vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_0, vaux_1, vl), vzero, vl); + vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_2, vaux_3, vl), isum0, vl); + vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_4, vaux_5, vl), isum1, vl); + vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_6, vaux_7, vl), isum2, vl); - int sum_t = 0; - int is = 0; + sum_t += __riscv_vmv_x_s_i32m1_i32(isum3); + + q6 += 64; qh += 32; q8 += 128; is=8; + + } + + sumf += d * sum_t; + + } + + *s = sumf; +} + +static NOINLINE void ggml_vec_dot_q6_K_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_q6_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + // mask for processing 16 elements per prod register + const vuint16m1_t va_index = __riscv_vid_v_u16m1(32); + const vbool16_t va_mask = __riscv_vmsgtu_vx_u16m1_b16(va_index, 15, 32); + + float sumf = 0; + + for (int i = 0; i < nb; ++i) { + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + const uint8_t * GGML_RESTRICT q6 = x[i].ql; + const uint8_t * GGML_RESTRICT qh = x[i].qh; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + + const int8_t * GGML_RESTRICT scale = x[i].scales; + + size_t vl = 32; + + vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); + + int sum_t = 0; + int is = 0; + + vint32m2_t vaux_0 = __riscv_vmv_v_x_i32m2(0, vl); + vint32m2_t vaux_1 = __riscv_vmv_v_x_i32m2(0, vl); + vint32m2_t vaux_2 = __riscv_vmv_v_x_i32m2(0, vl); + vint32m2_t vaux_3 = __riscv_vmv_v_x_i32m2(0, vl); + + for (int j = 0; j < QK_K/128; ++j) { + // load qh + vuint8mf2_t qh_x = __riscv_vle8_v_u8mf2(qh, vl); + + // load Q6 + vuint8mf2_t q6_0 = __riscv_vle8_v_u8mf2(q6, vl); + vuint8mf2_t q6_1 = __riscv_vle8_v_u8mf2(q6+32, vl); + + vuint8mf2_t q6a_0 = __riscv_vand_vx_u8mf2(q6_0, 0x0F, vl); + vuint8mf2_t q6a_1 = __riscv_vand_vx_u8mf2(q6_1, 0x0F, vl); + vuint8mf2_t q6s_0 = __riscv_vsrl_vx_u8mf2(q6_0, 0x04, vl); + vuint8mf2_t q6s_1 = __riscv_vsrl_vx_u8mf2(q6_1, 0x04, vl); + + vuint8mf2_t qh_0 = __riscv_vand_vx_u8mf2(qh_x, 0x03, vl); + vuint8mf2_t qh_1 = __riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(qh_x, 0x2, vl), 0x03 , vl); + vuint8mf2_t qh_2 = __riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(qh_x, 0x4, vl), 0x03 , vl); + vuint8mf2_t qh_3 = __riscv_vand_vx_u8mf2(__riscv_vsrl_vx_u8mf2(qh_x, 0x6, vl), 0x03 , vl); + + vuint8mf2_t qhi_0 = __riscv_vor_vv_u8mf2(q6a_0, __riscv_vsll_vx_u8mf2(qh_0, 0x04, vl), vl); + vuint8mf2_t qhi_1 = __riscv_vor_vv_u8mf2(q6a_1, __riscv_vsll_vx_u8mf2(qh_1, 0x04, vl), vl); + vuint8mf2_t qhi_2 = __riscv_vor_vv_u8mf2(q6s_0, __riscv_vsll_vx_u8mf2(qh_2, 0x04, vl), vl); + vuint8mf2_t qhi_3 = __riscv_vor_vv_u8mf2(q6s_1, __riscv_vsll_vx_u8mf2(qh_3, 0x04, vl), vl); + + vint8mf2_t a_0 = __riscv_vsub_vx_i8mf2(__riscv_vreinterpret_v_u8mf2_i8mf2(qhi_0), 32, vl); + vint8mf2_t a_1 = __riscv_vsub_vx_i8mf2(__riscv_vreinterpret_v_u8mf2_i8mf2(qhi_1), 32, vl); + vint8mf2_t a_2 = __riscv_vsub_vx_i8mf2(__riscv_vreinterpret_v_u8mf2_i8mf2(qhi_2), 32, vl); + vint8mf2_t a_3 = __riscv_vsub_vx_i8mf2(__riscv_vreinterpret_v_u8mf2_i8mf2(qhi_3), 32, vl); + + // load Q8 and take product + vint16m1_t va_q_0 = __riscv_vwmul_vv_i16m1(a_0, __riscv_vle8_v_i8mf2(q8, vl), vl); + vint16m1_t va_q_1 = __riscv_vwmul_vv_i16m1(a_1, __riscv_vle8_v_i8mf2(q8+32, vl), vl); + vint16m1_t va_q_2 = __riscv_vwmul_vv_i16m1(a_2, __riscv_vle8_v_i8mf2(q8+64, vl), vl); + vint16m1_t va_q_3 = __riscv_vwmul_vv_i16m1(a_3, __riscv_vle8_v_i8mf2(q8+96, vl), vl); + + // accumulate + vaux_0 = __riscv_vwmacc_vx_i32m2(vaux_0, scale[is+0], va_q_0, 16); + vaux_1 = __riscv_vwmacc_vx_i32m2(vaux_1, scale[is+2], va_q_1, 16); + vaux_2 = __riscv_vwmacc_vx_i32m2(vaux_2, scale[is+4], va_q_2, 16); + vaux_3 = __riscv_vwmacc_vx_i32m2(vaux_3, scale[is+6], va_q_3, 16); + // + vaux_0 = __riscv_vwmacc_vx_i32m2_m(va_mask, vaux_0, scale[is+1], va_q_0, vl); + vaux_1 = __riscv_vwmacc_vx_i32m2_m(va_mask, vaux_1, scale[is+3], va_q_1, vl); + vaux_2 = __riscv_vwmacc_vx_i32m2_m(va_mask, vaux_2, scale[is+5], va_q_2, vl); + vaux_3 = __riscv_vwmacc_vx_i32m2_m(va_mask, vaux_3, scale[is+7], va_q_3, vl); + + q6 += 64; qh += 32; q8 += 128; is=8; + } + + vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_0, vaux_1, vl), vzero, vl); + vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_2, vaux_3, vl), isum0, vl); + + sum_t += __riscv_vmv_x_s_i32m1_i32(isum1); + + sumf += d * sum_t; + + } + + *s = sumf; +} + +static NOINLINE void ggml_vec_dot_q6_K_q8_K_vl1024(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_q6_K * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; - for (int j = 0; j < QK_K/128; ++j) { + const int nb = n / QK_K; - vl = 32; + // mask for processing 16 elements per prod register + const vuint16mf2_t va_index = __riscv_vid_v_u16mf2(32); + const vbool32_t va_mask = __riscv_vmsgtu_vx_u16mf2_b32(va_index, 15, 32); - // load qh - vuint8m1_t qh_x = __riscv_vle8_v_u8m1(qh, vl); + float sumf = 0; - // load Q6 - vuint8m1_t q6_0 = __riscv_vle8_v_u8m1(q6, vl); - vuint8m1_t q6_1 = __riscv_vle8_v_u8m1(q6+32, vl); + for (int i = 0; i < nb; ++i) { + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; - vuint8m1_t q6a_0 = __riscv_vand_vx_u8m1(q6_0, 0x0F, vl); - vuint8m1_t q6a_1 = __riscv_vand_vx_u8m1(q6_1, 0x0F, vl); - vuint8m1_t q6s_0 = __riscv_vsrl_vx_u8m1(q6_0, 0x04, vl); - vuint8m1_t q6s_1 = __riscv_vsrl_vx_u8m1(q6_1, 0x04, vl); + const uint8_t * GGML_RESTRICT q6 = x[i].ql; + const uint8_t * GGML_RESTRICT qh = x[i].qh; + const int8_t * GGML_RESTRICT q8 = y[i].qs; - vuint8m1_t qh_0 = __riscv_vand_vx_u8m1(qh_x, 0x03, vl); - vuint8m1_t qh_1 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x2, vl), 0x03 , vl); - vuint8m1_t qh_2 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x4, vl), 0x03 , vl); - vuint8m1_t qh_3 = __riscv_vand_vx_u8m1(__riscv_vsrl_vx_u8m1(qh_x, 0x6, vl), 0x03 , vl); + const int8_t * GGML_RESTRICT scale = x[i].scales; - vuint8m1_t qhi_0 = __riscv_vor_vv_u8m1(q6a_0, __riscv_vsll_vx_u8m1(qh_0, 0x04, vl), vl); - vuint8m1_t qhi_1 = __riscv_vor_vv_u8m1(q6a_1, __riscv_vsll_vx_u8m1(qh_1, 0x04, vl), vl); - vuint8m1_t qhi_2 = __riscv_vor_vv_u8m1(q6s_0, __riscv_vsll_vx_u8m1(qh_2, 0x04, vl), vl); - vuint8m1_t qhi_3 = __riscv_vor_vv_u8m1(q6s_1, __riscv_vsll_vx_u8m1(qh_3, 0x04, vl), vl); + size_t vl = 32; - vint8m1_t a_0 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_0), 32, vl); - vint8m1_t a_1 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_1), 32, vl); - vint8m1_t a_2 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_2), 32, vl); - vint8m1_t a_3 = __riscv_vsub_vx_i8m1(__riscv_vreinterpret_v_u8m1_i8m1(qhi_3), 32, vl); + vint32m1_t vzero = __riscv_vmv_v_x_i32m1(0, 1); - // load Q8 and take product - vint16m2_t va_q_0 = __riscv_vwmul_vv_i16m2(a_0, __riscv_vle8_v_i8m1(q8, vl), vl); - vint16m2_t va_q_1 = __riscv_vwmul_vv_i16m2(a_1, __riscv_vle8_v_i8m1(q8+32, vl), vl); - vint16m2_t va_q_2 = __riscv_vwmul_vv_i16m2(a_2, __riscv_vle8_v_i8m1(q8+64, vl), vl); - vint16m2_t va_q_3 = __riscv_vwmul_vv_i16m2(a_3, __riscv_vle8_v_i8m1(q8+96, vl), vl); + int sum_t = 0; + int is = 0; - vl = 16; + vint32m1_t vaux_0 = __riscv_vmv_v_x_i32m1(0, vl); + vint32m1_t vaux_1 = __riscv_vmv_v_x_i32m1(0, vl); + vint32m1_t vaux_2 = __riscv_vmv_v_x_i32m1(0, vl); + vint32m1_t vaux_3 = __riscv_vmv_v_x_i32m1(0, vl); - vint32m2_t vaux_0 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 0), scale[is+0], vl); - vint32m2_t vaux_1 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_0, 1), scale[is+1], vl); - vint32m2_t vaux_2 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 0), scale[is+2], vl); - vint32m2_t vaux_3 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_1, 1), scale[is+3], vl); - vint32m2_t vaux_4 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 0), scale[is+4], vl); - vint32m2_t vaux_5 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_2, 1), scale[is+5], vl); - vint32m2_t vaux_6 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 0), scale[is+6], vl); - vint32m2_t vaux_7 = __riscv_vwmul_vx_i32m2(__riscv_vget_v_i16m2_i16m1(va_q_3, 1), scale[is+7], vl); + for (int j = 0; j < QK_K/128; ++j) { + // load qh + vuint8mf4_t qh_x = __riscv_vle8_v_u8mf4(qh, vl); + + // load Q6 + vuint8mf4_t q6_0 = __riscv_vle8_v_u8mf4(q6, vl); + vuint8mf4_t q6_1 = __riscv_vle8_v_u8mf4(q6+32, vl); + + vuint8mf4_t q6a_0 = __riscv_vand_vx_u8mf4(q6_0, 0x0F, vl); + vuint8mf4_t q6a_1 = __riscv_vand_vx_u8mf4(q6_1, 0x0F, vl); + vuint8mf4_t q6s_0 = __riscv_vsrl_vx_u8mf4(q6_0, 0x04, vl); + vuint8mf4_t q6s_1 = __riscv_vsrl_vx_u8mf4(q6_1, 0x04, vl); + + vuint8mf4_t qh_0 = __riscv_vand_vx_u8mf4(qh_x, 0x03, vl); + vuint8mf4_t qh_1 = __riscv_vand_vx_u8mf4(__riscv_vsrl_vx_u8mf4(qh_x, 0x2, vl), 0x03 , vl); + vuint8mf4_t qh_2 = __riscv_vand_vx_u8mf4(__riscv_vsrl_vx_u8mf4(qh_x, 0x4, vl), 0x03 , vl); + vuint8mf4_t qh_3 = __riscv_vand_vx_u8mf4(__riscv_vsrl_vx_u8mf4(qh_x, 0x6, vl), 0x03 , vl); + + vuint8mf4_t qhi_0 = __riscv_vor_vv_u8mf4(q6a_0, __riscv_vsll_vx_u8mf4(qh_0, 0x04, vl), vl); + vuint8mf4_t qhi_1 = __riscv_vor_vv_u8mf4(q6a_1, __riscv_vsll_vx_u8mf4(qh_1, 0x04, vl), vl); + vuint8mf4_t qhi_2 = __riscv_vor_vv_u8mf4(q6s_0, __riscv_vsll_vx_u8mf4(qh_2, 0x04, vl), vl); + vuint8mf4_t qhi_3 = __riscv_vor_vv_u8mf4(q6s_1, __riscv_vsll_vx_u8mf4(qh_3, 0x04, vl), vl); + + vint8mf4_t a_0 = __riscv_vsub_vx_i8mf4(__riscv_vreinterpret_v_u8mf4_i8mf4(qhi_0), 32, vl); + vint8mf4_t a_1 = __riscv_vsub_vx_i8mf4(__riscv_vreinterpret_v_u8mf4_i8mf4(qhi_1), 32, vl); + vint8mf4_t a_2 = __riscv_vsub_vx_i8mf4(__riscv_vreinterpret_v_u8mf4_i8mf4(qhi_2), 32, vl); + vint8mf4_t a_3 = __riscv_vsub_vx_i8mf4(__riscv_vreinterpret_v_u8mf4_i8mf4(qhi_3), 32, vl); + + // load Q8 and take product + vint16mf2_t va_q_0 = __riscv_vwmul_vv_i16mf2(a_0, __riscv_vle8_v_i8mf4(q8, vl), vl); + vint16mf2_t va_q_1 = __riscv_vwmul_vv_i16mf2(a_1, __riscv_vle8_v_i8mf4(q8+32, vl), vl); + vint16mf2_t va_q_2 = __riscv_vwmul_vv_i16mf2(a_2, __riscv_vle8_v_i8mf4(q8+64, vl), vl); + vint16mf2_t va_q_3 = __riscv_vwmul_vv_i16mf2(a_3, __riscv_vle8_v_i8mf4(q8+96, vl), vl); + + // accumulate + vaux_0 = __riscv_vwmacc_vx_i32m1(vaux_0, scale[is+0], va_q_0, 16); + vaux_1 = __riscv_vwmacc_vx_i32m1(vaux_1, scale[is+2], va_q_1, 16); + vaux_2 = __riscv_vwmacc_vx_i32m1(vaux_2, scale[is+4], va_q_2, 16); + vaux_3 = __riscv_vwmacc_vx_i32m1(vaux_3, scale[is+6], va_q_3, 16); + // + vaux_0 = __riscv_vwmacc_vx_i32m1_m(va_mask, vaux_0, scale[is+1], va_q_0, vl); + vaux_1 = __riscv_vwmacc_vx_i32m1_m(va_mask, vaux_1, scale[is+3], va_q_1, vl); + vaux_2 = __riscv_vwmacc_vx_i32m1_m(va_mask, vaux_2, scale[is+5], va_q_2, vl); + vaux_3 = __riscv_vwmacc_vx_i32m1_m(va_mask, vaux_3, scale[is+7], va_q_3, vl); - vint32m1_t isum0 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_0, vaux_1, vl), vzero, vl); - vint32m1_t isum1 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_2, vaux_3, vl), isum0, vl); - vint32m1_t isum2 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_4, vaux_5, vl), isum1, vl); - vint32m1_t isum3 = __riscv_vredsum_vs_i32m2_i32m1(__riscv_vadd_vv_i32m2(vaux_6, vaux_7, vl), isum2, vl); + q6 += 64; qh += 32; q8 += 128; is=8; - sum_t += __riscv_vmv_x_s_i32m1_i32(isum3); + } - q6 += 64; qh += 32; q8 += 128; is=8; + vint32m1_t isum0 = __riscv_vredsum_vs_i32m1_i32m1(__riscv_vadd_vv_i32m1(vaux_0, vaux_1, vl), vzero, vl); + vint32m1_t isum1 = __riscv_vredsum_vs_i32m1_i32m1(__riscv_vadd_vv_i32m1(vaux_2, vaux_3, vl), isum0, vl); - } + sum_t += __riscv_vmv_x_s_i32m1_i32(isum1); - sumf += d * sum_t; + sumf += d * sum_t; - } - break; - case 128: - for (int i = 0; i < nb; ++i) { - - __builtin_prefetch(&x[i + 1].d, 0, 1); - - const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; - - const uint8_t * restrict q6 = x[i].ql; - const uint8_t * restrict qh = x[i].qh; - const int8_t * restrict q8 = y[i].qs; - - const int8_t * restrict scale = x[i].scales; - - int q6h; - float ftmp; - - for (int j = 0; j < QK_K/128; ++j) { - __asm__ __volatile__( - "addi %[q6h], %[q6], 32\n\t" - "ld t0, 0(%[scale])\n\t" - "addi %[scale], %[scale], 8\n\t" - "slli t6, t0, 1 * 8\n\t" - "lb zero, 0(%[q6])\n\t" - "slli t5, t0, 2 * 8\n\t" - "slli t4, t0, 3 * 8\n\t" - "lb zero, 0(%[q6h])\n\t" - "slli t3, t0, 4 * 8\n\t" - "slli t2, t0, 5 * 8\n\t" - "lb zero, 0(%[qh])\n\t" - "lb zero, 31(%[q6h])\n\t" - "slli t1, t0, 6 * 8\n\t" - "srai a7, t0, 56\n\t" - "vsetvli zero, %[vl32], e8, m2\n\t" - "vle8.v v8, (%[q6])\n\t" - "srai t6, t6, 56\n\t" - "srai t5, t5, 56\n\t" - "srai t4, t4, 56\n\t" - "srai t3, t3, 56\n\t" - "vle8.v v10, (%[q6h])\n\t" - "addi %[q6], %[q6], 64\n\t" - "slli t0, t0, 7 * 8\n\t" - "srai t2, t2, 56\n\t" - "srai t1, t1, 56\n\t" - "srai t0, t0, 56\n\t" - "vle8.v v4, (%[qh])\n\t" - "vsrl.vi v12, v8, 4\n\t" - "vsrl.vi v14, v10, 4\n\t" - "lb zero, 0(%[q8])\n\t" - "vand.vi v8, v8, 0xF\n\t" - "vand.vi v10, v10, 0xF\n\t" - "lb zero, 32(%[q8])\n\t" - "vsll.vi v0, v4, 4\n\t" - "vsll.vi v2, v4, 2\n\t" - "lb zero, 64(%[q8])\n\t" - "vsrl.vi v6, v4, 2\n\t" - "vand.vx v0, v0, %[mask]\n\t" - "lb zero, 96(%[q8])\n\t" - "vand.vx v2, v2, %[mask]\n\t" - "vand.vx v4, v4, %[mask]\n\t" - "vand.vx v6, v6, %[mask]\n\t" - "vor.vv v8, v8, v0\n\t" - "lb zero, 127(%[q8])\n\t" - "vor.vv v10, v10, v2\n\t" - "vor.vv v12, v12, v4\n\t" - "vor.vv v14, v14, v6\n\t" - "vsetvli zero, %[vl128], e8, m8\n\t" - "vle8.v v0, (%[q8])\n\t" - "vsub.vx v8, v8, %[vl32]\n\t" - "vsetvli zero, %[vl64], e8, m4\n\t" - "vwmul.vv v16, v0, v8\n\t" - "vwmul.vv v24, v4, v12\n\t" - "vsetivli zero, 16, e16, m2\n\t" - "vmv.v.x v0, zero\n\t" - "vwredsum.vs v10, v16, v0\n\t" - "vwredsum.vs v9, v18, v0\n\t" - "vwredsum.vs v8, v20, v0\n\t" - "vwredsum.vs v7, v22, v0\n\t" - "vwredsum.vs v11, v24, v0\n\t" - "vwredsum.vs v12, v26, v0\n\t" - "vwredsum.vs v13, v28, v0\n\t" - "vwredsum.vs v14, v30, v0\n\t" - "vsetivli zero, 4, e32, m1\n\t" - "vmul.vx v0, v10, t0\n\t" - "vmul.vx v1, v9, t1\n\t" - "vmacc.vx v0, t2, v8\n\t" - "vmacc.vx v1, t3, v7\n\t" - "vmacc.vx v0, t4, v11\n\t" - "vmacc.vx v1, t5, v12\n\t" - "vmacc.vx v0, t6, v13\n\t" - "vmacc.vx v1, a7, v14\n\t" - "vadd.vv v0, v0, v1\n\t" - "vfcvt.f.x.v v0, v0\n\t" - "vfmv.f.s %[ftmp], v0\n\t" - "fmadd.s %[sumf], %[d], %[ftmp], %[sumf]" - : [q6] "+&r" (q6), [q6h] "=&r" (q6h) - , [scale] "+&r" (scale) - , [sumf] "+&f" (sumf), [ftmp] "=&f" (ftmp) - : [qh] "r" (qh), [q8] "r" (q8) - , [vl32] "r" (32), [vl64] "r" (64), [vl128] "r" (128) - , [mask] "r" (0x30), [d] "f" (d) - : "memory" - , "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7" - , "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15" - , "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23" - , "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" - , "t0", "t1", "t2", "t3", "t4", "t5", "t6", "a7" - , "a6", "a5", "a4", "a3" - ); - qh += 32; q8 += 128; - } - } - break; - default: - assert(false && "Unsupported vector length"); - break; } *s = sumf; +} +#endif +void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { +#if defined __riscv_xtheadvector + ggml_vec_dot_q6_K_q8_K_xtheadvector(n, s, bs, vx, bx, vy, by, nrc); +#elif defined __riscv_v + switch (__riscv_vlenb() * 8) { + case 128: + ggml_vec_dot_q6_K_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); + break; + case 256: + ggml_vec_dot_q6_K_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); + break; + case 512: + ggml_vec_dot_q6_K_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); + break; + case 1024: + ggml_vec_dot_q6_K_q8_K_vl1024(n, s, bs, vx, bx, vy, by, nrc); + break; + default: + ggml_vec_dot_q6_K_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); + break; + } #else - - UNUSED(x); - UNUSED(y); - UNUSED(nb); - ggml_vec_dot_q6_K_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_iq1_s_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); assert(nrc == 1); @@ -2266,10 +2853,190 @@ static NOINLINE void ggml_vec_dot_iq1_s_q8_K_vl256(int n, float * GGML_RESTRICT *s = sumf; } + +static NOINLINE void ggml_vec_dot_iq1_s_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_iq1_s * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + float sumf = 0; + for (int i = 0; i < nb; ++i) { + // Load qh once for the entire superblock. + vuint16mf4_t qh = __riscv_vle16_v_u16mf4(x[i].qh, 8); + + // Calculate ls. + vuint16mf4_t temp = __riscv_vsrl_vx_u16mf4(qh, 12, 8); + temp = __riscv_vand_vx_u16mf4(temp, 7, 8); + vint32mf2_t ls = __riscv_vreinterpret_v_u32mf2_i32mf2(__riscv_vwmulu_vx_u32mf2(temp, 2, 8)); + ls = __riscv_vadd_vx_i32mf2(ls, 1, 8); + + // Calculate delta. + vbool64_t mask = __riscv_vmseq_vx_u16mf4_b64(__riscv_vand_vx_u16mf4(qh, 0x8000, 8), 0, 8); + vint32mf2_t delta_neg = __riscv_vmv_v_x_i32mf2(-1, 8); + vint32mf2_t delta_pos = __riscv_vmv_v_x_i32mf2(1, 8); + vint32mf2_t delta = __riscv_vmerge_vvm_i32mf2(delta_neg, delta_pos, mask, 8); + + // Load qs. + vuint8mf2_t qs = __riscv_vle8_v_u8mf2(x[i].qs, 32); + + // Prepare the indices. + const uint64_t shift = 0x0009000600030000; + vuint16m1_t qh_shift = __riscv_vreinterpret_v_u64m1_u16m1(__riscv_vmv_v_x_u64m1(shift, 8)); + vuint16m1_t qh_gather_index = __riscv_vreinterpret_v_i16m1_u16m1( + __riscv_vdiv_vx_i16m1(__riscv_vreinterpret_v_u16m1_i16m1(__riscv_vid_v_u16m1(32)), 4, 32)); + vuint16m1_t qh_ext = __riscv_vlmul_ext_v_u16mf2_u16m1(__riscv_vlmul_ext_v_u16mf4_u16mf2(qh)); + vuint16m1_t qh_index = __riscv_vrgather_vv_u16m1(qh_ext, qh_gather_index, 32); + qh_index = __riscv_vsrl_vv_u16m1(qh_index, qh_shift, 32); + qh_index = __riscv_vand_vx_u16m1(qh_index, 7, 32); + qh_index = __riscv_vsll_vx_u16m1(qh_index, 8, 32); + qh_index = __riscv_vor_vv_u16m1(qh_index, __riscv_vzext_vf2_u16m1(qs, 32), 32); + vuint16m1_t index = __riscv_vsll_vx_u16m1(qh_index, 3, 32); + + // Final lsums. + int32_t lsums_s[8]; + vint32m1_t one_scalar = __riscv_vmv_v_x_i32m1(0, 1); + + // Sub-blocks 1-8 + { + vint8m4_t grid0 = __riscv_vreinterpret_v_i64m4_i8m4(__riscv_vluxei16_v_i64m4((const int64_t*)iq1s_grid, index, 32)); + vint8m4_t q80 = __riscv_vle8_v_i8m4(y[i].qs, 256); + vint16m8_t lsum0 = __riscv_vwmul_vv_i16m8(grid0, q80, 256); + lsums_s[0] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(lsum0, 0), one_scalar, 32)); + lsums_s[1] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(lsum0, 1), one_scalar, 32)); + lsums_s[2] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(lsum0, 2), one_scalar, 32)); + lsums_s[3] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(lsum0, 3), one_scalar, 32)); + lsums_s[4] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(lsum0, 4), one_scalar, 32)); + lsums_s[5] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(lsum0, 5), one_scalar, 32)); + lsums_s[6] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(lsum0, 6), one_scalar, 32)); + lsums_s[7] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(lsum0, 7), one_scalar, 32)); + } + __asm__ __volatile__("" ::: "memory"); + vint32mf2_t lsums = __riscv_vle32_v_i32mf2(&lsums_s[0], 8); + + // Calculate the bsums. + vint16mf2_t bsums_0 = __riscv_vle16_v_i16mf2(y[i].bsums, 16); + const vuint32mf2_t bsums_i32 = __riscv_vreinterpret_v_u16mf2_u32mf2(__riscv_vreinterpret_v_i16mf2_u16mf2(bsums_0)); + const vint16mf4_t bsums_i32_0 = __riscv_vreinterpret_v_u16mf4_i16mf4(__riscv_vnsrl_wx_u16mf4(bsums_i32, 0, 8)); + const vint16mf4_t bsums_i32_1 = __riscv_vreinterpret_v_u16mf4_i16mf4(__riscv_vnsrl_wx_u16mf4(bsums_i32, 16, 8)); + const vint32mf2_t bsums = __riscv_vwadd_vv_i32mf2(bsums_i32_0, bsums_i32_1, 8); + + // Accumulation. + vint32mf2_t sumi_v = __riscv_vmul_vv_i32mf2(ls, lsums, 8); + vint32mf2_t sumi1_v = __riscv_vmul_vv_i32mf2(__riscv_vmul_vv_i32mf2(ls, delta, 8), bsums, 8); + + // Update sumf. + int sumi = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32mf2_i32m1(sumi_v, __riscv_vmv_v_x_i32m1(0.0f, 1), 8)); + int sumi1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32mf2_i32m1(sumi1_v, __riscv_vmv_v_x_i32m1(0.0f, 1), 8)); + sumf += GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d * (sumi + IQ1S_DELTA * sumi1); + } + + *s = sumf; +} + +static NOINLINE void ggml_vec_dot_iq1_s_q8_K_vl1024(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_iq1_s * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + // Mask for processing 32 elements per lsum register. + vuint16m1_t l_index = __riscv_vid_v_u16m1(64); + vbool16_t l_mask = __riscv_vmsgtu_vx_u16m1_b16(l_index, 31, 64); + + float sumf = 0; + for (int i = 0; i < nb; ++i) { + // Load qh once for the entire superblock. + vuint16mf4_t qh = __riscv_vle16_v_u16mf4(x[i].qh, 8); + + // Calculate ls. + vuint16mf4_t temp = __riscv_vsrl_vx_u16mf4(qh, 12, 8); + temp = __riscv_vand_vx_u16mf4(temp, 7, 8); + vint32mf2_t ls = __riscv_vreinterpret_v_u32mf2_i32mf2(__riscv_vwmulu_vx_u32mf2(temp, 2, 8)); + ls = __riscv_vadd_vx_i32mf2(ls, 1, 8); + + // Calculate delta. + vbool64_t mask = __riscv_vmseq_vx_u16mf4_b64(__riscv_vand_vx_u16mf4(qh, 0x8000, 8), 0, 8); + vint32mf2_t delta_neg = __riscv_vmv_v_x_i32mf2(-1, 8); + vint32mf2_t delta_pos = __riscv_vmv_v_x_i32mf2(1, 8); + vint32mf2_t delta = __riscv_vmerge_vvm_i32mf2(delta_neg, delta_pos, mask, 8); + + // Load qs. + vuint8mf2_t qs = __riscv_vle8_v_u8mf2(x[i].qs, 32); + + // Prepare the indices. + const uint64_t shift = 0x0009000600030000; + vuint16m1_t qh_shift = __riscv_vreinterpret_v_u64m1_u16m1(__riscv_vmv_v_x_u64m1(shift, 8)); + vuint16m1_t qh_gather_index = __riscv_vreinterpret_v_i16m1_u16m1( + __riscv_vdiv_vx_i16m1(__riscv_vreinterpret_v_u16m1_i16m1(__riscv_vid_v_u16m1(32)), 4, 32)); + vuint16m1_t qh_ext = __riscv_vlmul_ext_v_u16mf2_u16m1(__riscv_vlmul_ext_v_u16mf4_u16mf2(qh)); + vuint16m1_t qh_index = __riscv_vrgather_vv_u16m1(qh_ext, qh_gather_index, 32); + qh_index = __riscv_vsrl_vv_u16m1(qh_index, qh_shift, 32); + qh_index = __riscv_vand_vx_u16m1(qh_index, 7, 32); + qh_index = __riscv_vsll_vx_u16m1(qh_index, 8, 32); + qh_index = __riscv_vor_vv_u16m1(qh_index, __riscv_vzext_vf2_u16m1(qs, 32), 32); + vuint16mf2_t index = __riscv_vlmul_trunc_v_u16m1_u16mf2(__riscv_vsll_vx_u16m1(qh_index, 3, 32)); + + // Final lsums. + int32_t lsums_s[8]; + vint32m1_t one_scalar = __riscv_vmv_v_x_i32m1(0, 1); + + // Sub-blocks 1-8 + { + vint8m2_t grid0 = __riscv_vreinterpret_v_i64m2_i8m2(__riscv_vluxei16_v_i64m2((const int64_t*)iq1s_grid, index, 32)); + vint8m2_t q80 = __riscv_vle8_v_i8m2(y[i].qs, 256); + vint16m4_t lsum0 = __riscv_vwmul_vv_i16m4(grid0, q80, 256); + + // Reduce. + lsums_s[0] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( __riscv_vget_v_i16m4_i16m1(lsum0, 0), one_scalar, 32)); + lsums_s[1] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(l_mask, __riscv_vget_v_i16m4_i16m1(lsum0, 0), one_scalar, 64)); + lsums_s[2] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( __riscv_vget_v_i16m4_i16m1(lsum0, 1), one_scalar, 32)); + lsums_s[3] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(l_mask, __riscv_vget_v_i16m4_i16m1(lsum0, 1), one_scalar, 64)); + lsums_s[4] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( __riscv_vget_v_i16m4_i16m1(lsum0, 2), one_scalar, 32)); + lsums_s[5] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(l_mask, __riscv_vget_v_i16m4_i16m1(lsum0, 2), one_scalar, 64)); + lsums_s[6] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( __riscv_vget_v_i16m4_i16m1(lsum0, 3), one_scalar, 32)); + lsums_s[7] = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(l_mask, __riscv_vget_v_i16m4_i16m1(lsum0, 3), one_scalar, 64)); + } + __asm__ __volatile__("" ::: "memory"); + vint32mf2_t lsums = __riscv_vle32_v_i32mf2(&lsums_s[0], 8); + + // Calculate the bsums. + vint16mf2_t bsums_0 = __riscv_vle16_v_i16mf2(y[i].bsums, 16); + const vuint32mf2_t bsums_i32 = __riscv_vreinterpret_v_u16mf2_u32mf2(__riscv_vreinterpret_v_i16mf2_u16mf2(bsums_0)); + const vint16mf4_t bsums_i32_0 = __riscv_vreinterpret_v_u16mf4_i16mf4(__riscv_vnsrl_wx_u16mf4(bsums_i32, 0, 8)); + const vint16mf4_t bsums_i32_1 = __riscv_vreinterpret_v_u16mf4_i16mf4(__riscv_vnsrl_wx_u16mf4(bsums_i32, 16, 8)); + const vint32mf2_t bsums = __riscv_vwadd_vv_i32mf2(bsums_i32_0, bsums_i32_1, 8); + + // Accumulation. + vint32mf2_t sumi_v = __riscv_vmul_vv_i32mf2(ls, lsums, 8); + vint32mf2_t sumi1_v = __riscv_vmul_vv_i32mf2(__riscv_vmul_vv_i32mf2(ls, delta, 8), bsums, 8); + + // Update sumf. + int sumi = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32mf2_i32m1(sumi_v, __riscv_vmv_v_x_i32m1(0.0f, 1), 8)); + int sumi1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32mf2_i32m1(sumi1_v, __riscv_vmv_v_x_i32m1(0.0f, 1), 8)); + sumf += GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d * (sumi + IQ1S_DELTA * sumi1); + } + + *s = sumf; +} #endif void ggml_vec_dot_iq1_s_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_iq1_s_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); @@ -2277,6 +3044,12 @@ void ggml_vec_dot_iq1_s_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const vo case 256: ggml_vec_dot_iq1_s_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; + case 512: + ggml_vec_dot_iq1_s_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); + break; + case 1024: + ggml_vec_dot_iq1_s_q8_K_vl1024(n, s, bs, vx, bx, vy, by, nrc); + break; default: ggml_vec_dot_iq1_s_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); break; @@ -2286,7 +3059,7 @@ void ggml_vec_dot_iq1_s_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const vo #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_iq1_m_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); assert(nrc == 1); @@ -2566,10 +3339,287 @@ static NOINLINE void ggml_vec_dot_iq1_m_q8_K_vl256(int n, float * GGML_RESTRICT *s = sumf; } + +static NOINLINE void ggml_vec_dot_iq1_m_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_iq1_m * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + iq1m_scale_t scale; + + // Mask for processing 16 elements per lsum register. + const vuint16m1_t l_index = __riscv_vid_v_u16m1(32); + const vbool16_t l_mask = __riscv_vmsgtu_vx_u16m1_b16(l_index, 15, 32); + + float sumf = 0.0f; + for (int i = 0; i < nb; ++i) { + const int8_t * q8 = y[i].qs; + const uint8_t * qs = x[i].qs; + const uint8_t * qh = x[i].qh; + const uint16_t * sc = (const uint16_t *)x[i].scales; + + scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); + + // Accumulators. + vint32m2_t acc1 = __riscv_vmv_v_x_i32m2(0, 32); + vint32m2_t acc2 = __riscv_vmv_v_x_i32m2(0, 32); + + // We process all the sub-blocks together. + #pragma GCC unroll 1 + for (int ib = 0; ib < QK_K/256; ib++) { + // Load qh for all 16 sub-blocks. + const vuint8mf4_t qh_8 = __riscv_vle8_v_u8mf4(qh, 16); + const vuint16mf2_t qh_16_lo = __riscv_vzext_vf2_u16mf2(qh_8, 16); + const vuint16mf2_t qh_16_hi = __riscv_vsll_vx_u16mf2(qh_16_lo, 8, 16); + const vuint16m1_t qhb = __riscv_vzext_vf2_u16m1( + __riscv_vreinterpret_v_u16mf2_u8mf2(__riscv_vor_vv_u16mf2(qh_16_lo, qh_16_hi, 16)), 32); + __asm__ __volatile__("" ::: "memory"); + + // Prepare grid indices. + const vuint16m1_t qsb = __riscv_vzext_vf2_u16m1(__riscv_vle8_v_u8mf2(&qs[0], 32), 32); + const vuint16m1_t shift = __riscv_vreinterpret_v_u32m1_u16m1(__riscv_vmv_v_x_u32m1(0x00040008, 16)); + vuint16m1_t index = __riscv_vor_vv_u16m1(qsb, __riscv_vand_vx_u16m1(__riscv_vsll_vv_u16m1(qhb, shift, 32), 0x700, 32), 32); + index = __riscv_vsll_vx_u16m1(index, 3, 32); + __asm__ __volatile__("" ::: "memory"); + + // Load the grid. + const vint8m4_t iq1b = __riscv_vreinterpret_v_i64m4_i8m4(__riscv_vreinterpret_v_u64m4_i64m4( + __riscv_vluxei16_v_u64m4(iq1s_grid, index, 32))); + + // Prepare the deltas. + const vbool16_t mask = __riscv_vmsgtu_vx_u16m1_b16( + __riscv_vand_vv_u16m1(qhb, __riscv_vreinterpret_v_u32m1_u16m1(__riscv_vmv_v_x_u32m1(0x00800008, 16)), 32), 0, 32); + const vint64m4_t delta_pos = __riscv_vmv_v_x_i64m4(0x0101010101010101, 32); + const vint8m4_t delta = __riscv_vreinterpret_v_i64m4_i8m4( + __riscv_vmerge_vxm_i64m4(delta_pos, 0xffffffffffffffff, mask, 32)); + + // Load q8 for sub-blocks. + const vint8m4_t q8b = __riscv_vle8_v_i8m4(q8, 256); + + // Calculate the lsums. + const vint16m8_t lsum1 = __riscv_vwmul_vv_i16m8(iq1b, q8b, 256); + const vint16m8_t lsum2 = __riscv_vwmul_vv_i16m8(delta, q8b, 256); + + // Prepare the scales. + const int16_t ls_0 = 2*((sc[0] >> 0) & 0x7) + 1; + const int16_t ls_1 = 2*((sc[0] >> 3) & 0x7) + 1; + const int16_t ls_2 = 2*((sc[0] >> 6) & 0x7) + 1; + const int16_t ls_3 = 2*((sc[0] >> 9) & 0x7) + 1; + const int16_t ls_4 = 2*((sc[1] >> 0) & 0x7) + 1; + const int16_t ls_5 = 2*((sc[1] >> 3) & 0x7) + 1; + const int16_t ls_6 = 2*((sc[1] >> 6) & 0x7) + 1; + const int16_t ls_7 = 2*((sc[1] >> 9) & 0x7) + 1; + const int16_t ls_8 = 2*((sc[2] >> 0) & 0x7) + 1; + const int16_t ls_9 = 2*((sc[2] >> 3) & 0x7) + 1; + const int16_t ls_10 = 2*((sc[2] >> 6) & 0x7) + 1; + const int16_t ls_11 = 2*((sc[2] >> 9) & 0x7) + 1; + const int16_t ls_12 = 2*((sc[3] >> 0) & 0x7) + 1; + const int16_t ls_13 = 2*((sc[3] >> 3) & 0x7) + 1; + const int16_t ls_14 = 2*((sc[3] >> 6) & 0x7) + 1; + const int16_t ls_15 = 2*((sc[3] >> 9) & 0x7) + 1; + + // Accumulate in acc0 and acc1 for each sub-block. + acc1 = __riscv_vwmacc_vx_i32m2( acc1, ls_0, __riscv_vget_v_i16m8_i16m1(lsum1, 0), 16); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc1, ls_1, __riscv_vget_v_i16m8_i16m1(lsum1, 0), 32); + acc2 = __riscv_vwmacc_vx_i32m2( acc2, ls_0, __riscv_vget_v_i16m8_i16m1(lsum2, 0), 16); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc2, ls_1, __riscv_vget_v_i16m8_i16m1(lsum2, 0), 32); + // + acc1 = __riscv_vwmacc_vx_i32m2( acc1, ls_2, __riscv_vget_v_i16m8_i16m1(lsum1, 1), 16); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc1, ls_3, __riscv_vget_v_i16m8_i16m1(lsum1, 1), 32); + acc2 = __riscv_vwmacc_vx_i32m2( acc2, ls_2, __riscv_vget_v_i16m8_i16m1(lsum2, 1), 16); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc2, ls_3, __riscv_vget_v_i16m8_i16m1(lsum2, 1), 32); + // + acc1 = __riscv_vwmacc_vx_i32m2( acc1, ls_4, __riscv_vget_v_i16m8_i16m1(lsum1, 2), 16); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc1, ls_5, __riscv_vget_v_i16m8_i16m1(lsum1, 2), 32); + acc2 = __riscv_vwmacc_vx_i32m2( acc2, ls_4, __riscv_vget_v_i16m8_i16m1(lsum2, 2), 16); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc2, ls_5, __riscv_vget_v_i16m8_i16m1(lsum2, 2), 32); + // + acc1 = __riscv_vwmacc_vx_i32m2( acc1, ls_6, __riscv_vget_v_i16m8_i16m1(lsum1, 3), 16); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc1, ls_7, __riscv_vget_v_i16m8_i16m1(lsum1, 3), 32); + acc2 = __riscv_vwmacc_vx_i32m2( acc2, ls_6, __riscv_vget_v_i16m8_i16m1(lsum2, 3), 16); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc2, ls_7, __riscv_vget_v_i16m8_i16m1(lsum2, 3), 32); + // + acc1 = __riscv_vwmacc_vx_i32m2( acc1, ls_8, __riscv_vget_v_i16m8_i16m1(lsum1, 4), 16); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc1, ls_9, __riscv_vget_v_i16m8_i16m1(lsum1, 4), 32); + acc2 = __riscv_vwmacc_vx_i32m2( acc2, ls_8, __riscv_vget_v_i16m8_i16m1(lsum2, 4), 16); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc2, ls_9, __riscv_vget_v_i16m8_i16m1(lsum2, 4), 32); + // + acc1 = __riscv_vwmacc_vx_i32m2( acc1, ls_10, __riscv_vget_v_i16m8_i16m1(lsum1, 5), 16); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc1, ls_11, __riscv_vget_v_i16m8_i16m1(lsum1, 5), 32); + acc2 = __riscv_vwmacc_vx_i32m2( acc2, ls_10, __riscv_vget_v_i16m8_i16m1(lsum2, 5), 16); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc2, ls_11, __riscv_vget_v_i16m8_i16m1(lsum2, 5), 32); + // + acc1 = __riscv_vwmacc_vx_i32m2( acc1, ls_12, __riscv_vget_v_i16m8_i16m1(lsum1, 6), 16); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc1, ls_13, __riscv_vget_v_i16m8_i16m1(lsum1, 6), 32); + acc2 = __riscv_vwmacc_vx_i32m2( acc2, ls_12, __riscv_vget_v_i16m8_i16m1(lsum2, 6), 16); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc2, ls_13, __riscv_vget_v_i16m8_i16m1(lsum2, 6), 32); + // + acc1 = __riscv_vwmacc_vx_i32m2( acc1, ls_14, __riscv_vget_v_i16m8_i16m1(lsum1, 7), 16); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc1, ls_15, __riscv_vget_v_i16m8_i16m1(lsum1, 7), 32); + acc2 = __riscv_vwmacc_vx_i32m2( acc2, ls_14, __riscv_vget_v_i16m8_i16m1(lsum2, 7), 16); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask, acc2, ls_15, __riscv_vget_v_i16m8_i16m1(lsum2, 7), 32); + + __asm__ __volatile__("" ::: "memory"); + } + + // Reduce and accumulate in `sumf`. + vint32m1_t one = __riscv_vmv_v_x_i32m1(0, 1); + int sumi1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32m2_i32m1(acc1, one, 32)); + int sumi2 = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32m2_i32m1(acc2, one, 32)); + sumf += y[i].d * GGML_CPU_FP16_TO_FP32(scale.f16) * (sumi1 + IQ1M_DELTA * sumi2); + } + + *s = sumf; +} + +static NOINLINE void ggml_vec_dot_iq1_m_q8_K_vl1024(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_iq1_m * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + iq1m_scale_t scale; + float sumf = 0.0f; + for (int i = 0; i < nb; ++i) { + const int8_t * q8 = y[i].qs; + const uint8_t * qs = x[i].qs; + const uint8_t * qh = x[i].qh; + const uint16_t * sc = (const uint16_t *)x[i].scales; + + scale.u16 = (sc[0] >> 12) | ((sc[1] >> 8) & 0x00f0) | ((sc[2] >> 4) & 0x0f00) | (sc[3] & 0xf000); + + // Accumulators. + vint32m2_t acc1 = __riscv_vmv_v_x_i32m2(0, 64); + vint32m2_t acc2 = __riscv_vmv_v_x_i32m2(0, 64); + + // We process all the sub-blocks together. + #pragma GCC unroll 1 + for (int ib = 0; ib < QK_K/256; ib++) { + // Load qh for all 16 sub-blocks. + const vuint8mf8_t qh_8 = __riscv_vle8_v_u8mf8(qh, 16); + const vuint16mf4_t qh_16_lo = __riscv_vzext_vf2_u16mf4(qh_8, 16); + const vuint16mf4_t qh_16_hi = __riscv_vsll_vx_u16mf4(qh_16_lo, 8, 16); + const vuint16mf2_t qhb = __riscv_vzext_vf2_u16mf2( + __riscv_vreinterpret_v_u16mf4_u8mf4(__riscv_vor_vv_u16mf4(qh_16_lo, qh_16_hi, 16)), 32); + __asm__ __volatile__("" ::: "memory"); + + // Prepare grid indices. + const vuint16mf2_t qsb = __riscv_vzext_vf2_u16mf2(__riscv_vle8_v_u8mf4(&qs[0], 32), 32); + const vuint16mf2_t shift = __riscv_vreinterpret_v_u32mf2_u16mf2(__riscv_vmv_v_x_u32mf2(0x00040008, 16)); + vuint16mf2_t index = __riscv_vor_vv_u16mf2(qsb, __riscv_vand_vx_u16mf2(__riscv_vsll_vv_u16mf2(qhb, shift, 32), 0x700, 32), 32); + index = __riscv_vsll_vx_u16mf2(index, 3, 32); + __asm__ __volatile__("" ::: "memory"); + + // Load the grid. + const vint8m2_t iq1b = __riscv_vreinterpret_v_i64m2_i8m2(__riscv_vreinterpret_v_u64m2_i64m2( + __riscv_vluxei16_v_u64m2(iq1s_grid, index, 32))); + + // Prepare the deltas. + const vbool32_t mask = __riscv_vmsgtu_vx_u16mf2_b32( + __riscv_vand_vv_u16mf2(qhb, __riscv_vreinterpret_v_u32mf2_u16mf2(__riscv_vmv_v_x_u32mf2(0x00800008, 16)), 32), 0, 32); + const vint64m2_t delta_pos = __riscv_vmv_v_x_i64m2(0x0101010101010101, 32); + const vint8m2_t delta = __riscv_vreinterpret_v_i64m2_i8m2( + __riscv_vmerge_vxm_i64m2(delta_pos, 0xffffffffffffffff, mask, 32)); + + // Load q8 for sub-blocks. + const vint8m2_t q8b = __riscv_vle8_v_i8m2(q8, 256); + + // Calculate the lsums. + const vint16m4_t lsum1 = __riscv_vwmul_vv_i16m4(iq1b, q8b, 256); + const vint16m4_t lsum2 = __riscv_vwmul_vv_i16m4(delta, q8b, 256); + + // Prepare the scales. + const int16_t ls_0 = 2*((sc[0] >> 0) & 0x7) + 1; + const int16_t ls_1 = 2*((sc[0] >> 3) & 0x7) + 1; + const int16_t ls_2 = 2*((sc[0] >> 6) & 0x7) + 1; + const int16_t ls_3 = 2*((sc[0] >> 9) & 0x7) + 1; + const int16_t ls_4 = 2*((sc[1] >> 0) & 0x7) + 1; + const int16_t ls_5 = 2*((sc[1] >> 3) & 0x7) + 1; + const int16_t ls_6 = 2*((sc[1] >> 6) & 0x7) + 1; + const int16_t ls_7 = 2*((sc[1] >> 9) & 0x7) + 1; + const int16_t ls_8 = 2*((sc[2] >> 0) & 0x7) + 1; + const int16_t ls_9 = 2*((sc[2] >> 3) & 0x7) + 1; + const int16_t ls_10 = 2*((sc[2] >> 6) & 0x7) + 1; + const int16_t ls_11 = 2*((sc[2] >> 9) & 0x7) + 1; + const int16_t ls_12 = 2*((sc[3] >> 0) & 0x7) + 1; + const int16_t ls_13 = 2*((sc[3] >> 3) & 0x7) + 1; + const int16_t ls_14 = 2*((sc[3] >> 6) & 0x7) + 1; + const int16_t ls_15 = 2*((sc[3] >> 9) & 0x7) + 1; + + // Mask for processing 16 elements per lsum register. + const vuint16m1_t l_index = __riscv_vid_v_u16m1(64); + + // Accumulate in acc1 and acc2 for each sub-block. + acc1 = __riscv_vwmacc_vx_i32m2(acc1, ls_0, __riscv_vget_v_i16m4_i16m1(lsum1, 0), 16); + acc2 = __riscv_vwmacc_vx_i32m2(acc2, ls_0, __riscv_vget_v_i16m4_i16m1(lsum2, 0), 16); + acc1 = __riscv_vwmacc_vx_i32m2(acc1, ls_4, __riscv_vget_v_i16m4_i16m1(lsum1, 1), 16); + acc2 = __riscv_vwmacc_vx_i32m2(acc2, ls_4, __riscv_vget_v_i16m4_i16m1(lsum2, 1), 16); + acc1 = __riscv_vwmacc_vx_i32m2(acc1, ls_8, __riscv_vget_v_i16m4_i16m1(lsum1, 2), 16); + acc2 = __riscv_vwmacc_vx_i32m2(acc2, ls_8, __riscv_vget_v_i16m4_i16m1(lsum2, 2), 16); + acc1 = __riscv_vwmacc_vx_i32m2(acc1, ls_12, __riscv_vget_v_i16m4_i16m1(lsum1, 3), 16); + acc2 = __riscv_vwmacc_vx_i32m2(acc2, ls_12, __riscv_vget_v_i16m4_i16m1(lsum2, 3), 16); + // + const vbool16_t l_mask_16_32 = __riscv_vmsgtu_vx_u16m1_b16(l_index, 15, 64); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_16_32, acc1, ls_1, __riscv_vget_v_i16m4_i16m1(lsum1, 0), 32); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_16_32, acc2, ls_1, __riscv_vget_v_i16m4_i16m1(lsum2, 0), 32); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_16_32, acc1, ls_5, __riscv_vget_v_i16m4_i16m1(lsum1, 1), 32); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_16_32, acc2, ls_5, __riscv_vget_v_i16m4_i16m1(lsum2, 1), 32); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_16_32, acc1, ls_9, __riscv_vget_v_i16m4_i16m1(lsum1, 2), 32); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_16_32, acc2, ls_9, __riscv_vget_v_i16m4_i16m1(lsum2, 2), 32); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_16_32, acc1, ls_13, __riscv_vget_v_i16m4_i16m1(lsum1, 3), 32); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_16_32, acc2, ls_13, __riscv_vget_v_i16m4_i16m1(lsum2, 3), 32); + // + const vbool16_t l_mask_32_48 = __riscv_vmsgtu_vx_u16m1_b16(l_index, 31, 64); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_32_48, acc1, ls_2, __riscv_vget_v_i16m4_i16m1(lsum1, 0), 48); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_32_48, acc2, ls_2, __riscv_vget_v_i16m4_i16m1(lsum2, 0), 48); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_32_48, acc1, ls_6, __riscv_vget_v_i16m4_i16m1(lsum1, 1), 48); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_32_48, acc2, ls_6, __riscv_vget_v_i16m4_i16m1(lsum2, 1), 48); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_32_48, acc1, ls_10, __riscv_vget_v_i16m4_i16m1(lsum1, 2), 48); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_32_48, acc2, ls_10, __riscv_vget_v_i16m4_i16m1(lsum2, 2), 48); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_32_48, acc1, ls_14, __riscv_vget_v_i16m4_i16m1(lsum1, 3), 48); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_32_48, acc2, ls_14, __riscv_vget_v_i16m4_i16m1(lsum2, 3), 48); + // + const vbool16_t l_mask_48_64 = __riscv_vmsgtu_vx_u16m1_b16(l_index, 47, 64); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_48_64, acc1, ls_3, __riscv_vget_v_i16m4_i16m1(lsum1, 0), 64); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_48_64, acc2, ls_3, __riscv_vget_v_i16m4_i16m1(lsum2, 0), 64); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_48_64, acc1, ls_7, __riscv_vget_v_i16m4_i16m1(lsum1, 1), 64); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_48_64, acc2, ls_7, __riscv_vget_v_i16m4_i16m1(lsum2, 1), 64); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_48_64, acc1, ls_11, __riscv_vget_v_i16m4_i16m1(lsum1, 2), 64); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_48_64, acc2, ls_11, __riscv_vget_v_i16m4_i16m1(lsum2, 2), 64); + acc1 = __riscv_vwmacc_vx_i32m2_m(l_mask_48_64, acc1, ls_15, __riscv_vget_v_i16m4_i16m1(lsum1, 3), 64); + acc2 = __riscv_vwmacc_vx_i32m2_m(l_mask_48_64, acc2, ls_15, __riscv_vget_v_i16m4_i16m1(lsum2, 3), 64); + + __asm__ __volatile__("" ::: "memory"); + } + + // Reduce and accumulate in `sumf`. + vint32m1_t one = __riscv_vmv_v_x_i32m1(0, 1); + int sumi1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32m2_i32m1(acc1, one, 64)); + int sumi2 = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32m2_i32m1(acc2, one, 64)); + sumf += y[i].d * GGML_CPU_FP16_TO_FP32(scale.f16) * (sumi1 + IQ1M_DELTA * sumi2); + } + + *s = sumf; +} #endif void ggml_vec_dot_iq1_m_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_iq1_m_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); @@ -2577,6 +3627,12 @@ void ggml_vec_dot_iq1_m_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const vo case 256: ggml_vec_dot_iq1_m_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; + case 512: + ggml_vec_dot_iq1_m_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); + break; + case 1024: + ggml_vec_dot_iq1_m_q8_K_vl1024(n, s, bs, vx, bx, vy, by, nrc); + break; default: ggml_vec_dot_iq1_m_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); break; @@ -2586,7 +3642,7 @@ void ggml_vec_dot_iq1_m_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const vo #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static const uint8_t sign_gather_indices_arr[64] = { 0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1, 2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4, 5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7 @@ -2789,10 +3845,275 @@ static NOINLINE void ggml_vec_dot_iq2_s_q8_K_vl256(int n, float * GGML_RESTRICT } *s = 0.125f * sumf; } + +static NOINLINE void ggml_vec_dot_iq2_s_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + UNUSED(nrc); UNUSED(bx); UNUSED(by); UNUSED(bs); + + const block_iq2_s * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + const uint64_t * grid64 = (const uint64_t *)iq2s_grid; + + vuint8m2_t v_ids = __riscv_vid_v_u8m2(128); + vuint8m2_t v_sign_gather_indices = __riscv_vsrl_vx_u8m2(v_ids, 3, 128); + + vuint8m2_t v_ones = __riscv_vmv_v_x_u8m2(1, 128); + vuint8m2_t v_shift_amts = __riscv_vand_vx_u8m2(v_ids, 7, 128); + vuint8m2_t v_sign_masks = __riscv_vsll_vv_u8m2(v_ones, v_shift_amts, 128); + + uint16_t gather_qh_arr[16] = {0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3}; + vuint16mf2_t v_gather_qh = __riscv_vle16_v_u16mf2(gather_qh_arr, 16); + + uint16_t shift_qh_arr[16] = {11, 9, 7, 5, 11, 9, 7, 5, 11, 9, 7, 5, 11, 9, 7, 5}; + vuint16mf2_t v_shift_qh = __riscv_vle16_v_u16mf2(shift_qh_arr, 16); + + // Masks for selecting lower/upper 16 lanes within a 32-lane i16m1 register + vuint16m1_t v_ids16 = __riscv_vid_v_u16m1(32); + vbool16_t m_hi16 = __riscv_vmsgeu_vx_u16m1_b16(v_ids16, 16, 32); + float sumf = 0.0f; + + for (int i = 0; i < nb; ++i) { + const float combined_scale = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + const uint8_t * GGML_RESTRICT qs = x[i].qs; + const uint8_t * GGML_RESTRICT qh = x[i].qh; + const uint8_t * GGML_RESTRICT scales = x[i].scales; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + + const uint8_t * signs_ptr = qs + 32; + + float sum_block = 0.0f; + + for (int ib = 0; ib < 2; ++ib) { + vuint8mf4_t v_qs_u8 = __riscv_vle8_v_u8mf4(qs, 16); + qs += 16; + + vuint8mf8_t v_qh_raw = __riscv_vle8_v_u8mf8(qh, 4); + qh += 4; + + vuint16mf4_t v_qh_u16 = __riscv_vwcvtu_x_x_v_u16mf4(v_qh_raw, 4); + vuint16mf2_t v_qh_u16_ext = __riscv_vlmul_ext_v_u16mf4_u16mf2(v_qh_u16); + vuint16mf2_t v_qh_expanded = __riscv_vrgather_vv_u16mf2(v_qh_u16_ext, v_gather_qh, 16); + v_qh_expanded = __riscv_vsll_vv_u16mf2(v_qh_expanded, v_shift_qh, 16); + v_qh_expanded = __riscv_vand_vx_u16mf2(v_qh_expanded, 0x1800, 16); + + vuint16mf2_t v_qs_u16 = __riscv_vwcvtu_x_x_v_u16mf2(v_qs_u8, 16); + v_qs_u16 = __riscv_vsll_vx_u16mf2(v_qs_u16, 3, 16); + + vuint16mf2_t v_grid_offsets = __riscv_vor_vv_u16mf2(v_qs_u16, v_qh_expanded, 16); + vuint64m2_t v_grid_vals = __riscv_vluxei16_v_u64m2(grid64, v_grid_offsets, 16); + vuint8m2_t v_grid_u8 = __riscv_vreinterpret_v_u64m2_u8m2(v_grid_vals); + vint8m2_t v_grid_i8 = __riscv_vreinterpret_v_u8m2_i8m2(v_grid_u8); + + vuint8mf4_t v_signs_raw = __riscv_vle8_v_u8mf4(signs_ptr, 16); + signs_ptr += 16; + + vuint8m2_t v_signs_source = __riscv_vlmul_ext_v_u8mf4_u8m2(v_signs_raw); + vuint8m2_t v_signs_bcast = __riscv_vrgather_vv_u8m2(v_signs_source, v_sign_gather_indices, 128); + vuint8m2_t v_sign_bits = __riscv_vand_vv_u8m2(v_signs_bcast, v_sign_masks, 128); + vbool4_t m_negative = __riscv_vmsne_vx_u8m2_b4(v_sign_bits, 0, 128); + vint8m2_t v_q8 = __riscv_vle8_v_i8m2(q8, 128); + q8 += 128; + + vint8m2_t v_q8_signed = __riscv_vrsub_vx_i8m2_mu(m_negative, v_q8, v_q8, 0, 128); + vint16m4_t v_dot = __riscv_vwmul_vv_i16m4(v_grid_i8, v_q8_signed, 128); + + vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, 1); + vint16m1_t v0 = __riscv_vget_v_i16m4_i16m1(v_dot, 0); + vint16m1_t v1 = __riscv_vget_v_i16m4_i16m1(v_dot, 1); + vint16m1_t v2 = __riscv_vget_v_i16m4_i16m1(v_dot, 2); + vint16m1_t v3 = __riscv_vget_v_i16m4_i16m1(v_dot, 3); + + int32_t s0 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(v0, v_zero, 16)); + int32_t s1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(m_hi16, v0, v_zero, 32)); + int32_t s2 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(v1, v_zero, 16)); + int32_t s3 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(m_hi16, v1, v_zero, 32)); + int32_t s4 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(v2, v_zero, 16)); + int32_t s5 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(m_hi16, v2, v_zero, 32)); + int32_t s6 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( v3, v_zero, 16)); + int32_t s7 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(m_hi16, v3, v_zero, 32)); + + uint8_t sc0 = scales[0]; + uint8_t sc1 = scales[1]; + uint8_t sc2 = scales[2]; + uint8_t sc3 = scales[3]; + scales += 4; + + sum_block += s0 * (2 * (sc0 & 0xF) + 1); + sum_block += s1 * (2 * (sc0 >> 4) + 1); + sum_block += s2 * (2 * (sc1 & 0xF) + 1); + sum_block += s3 * (2 * (sc1 >> 4) + 1); + sum_block += s4 * (2 * (sc2 & 0xF) + 1); + sum_block += s5 * (2 * (sc2 >> 4) + 1); + sum_block += s6 * (2 * (sc3 & 0xF) + 1); + sum_block += s7 * (2 * (sc3 >> 4) + 1); + } + + sumf += sum_block * combined_scale; + } + *s = 0.125f * sumf; +} + +static NOINLINE void ggml_vec_dot_iq2_s_q8_K_vl1024(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + UNUSED(nrc); UNUSED(bx); UNUSED(by); UNUSED(bs); + + const block_iq2_s * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + const uint64_t * grid64 = (const uint64_t *)iq2s_grid; + vuint8m2_t v_ids = __riscv_vid_v_u8m2(256); + vuint8m2_t v_sign_gather_indices = __riscv_vsrl_vx_u8m2(v_ids, 3, 256); + + vuint8m2_t v_ones = __riscv_vmv_v_x_u8m2(1, 256); + vuint8m2_t v_shift_amts = __riscv_vand_vx_u8m2(v_ids, 7, 256); + vuint8m2_t v_sign_masks = __riscv_vsll_vv_u8m2(v_ones, v_shift_amts, 256); + + uint16_t gather_qh_arr[32] = { + 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7 + }; + vuint16mf2_t v_gather_qh = __riscv_vle16_v_u16mf2(gather_qh_arr, 32); + + uint16_t shift_qh_arr[32] = { + 11, 9, 7, 5, 11, 9, 7, 5, 11, 9, 7, 5, 11, 9, 7, 5, + 11, 9, 7, 5, 11, 9, 7, 5, 11, 9, 7, 5, 11, 9, 7, 5 + }; + vuint16mf2_t v_shift_qh = __riscv_vle16_v_u16mf2(shift_qh_arr, 32); + + // Masks for 4 groups of 16 lanes within a 64-lane i16m4 chunk + vuint16m4_t v_ids64 = __riscv_vid_v_u16m4(64); + vbool4_t m_g0 = __riscv_vmsltu_vx_u16m4_b4(v_ids64, 16, 64); + vbool4_t m_g1 = __riscv_vmand_mm_b4( + __riscv_vmsgeu_vx_u16m4_b4(v_ids64, 16, 64), + __riscv_vmsltu_vx_u16m4_b4(v_ids64, 32, 64), 64); + vbool4_t m_g2 = __riscv_vmand_mm_b4( + __riscv_vmsgeu_vx_u16m4_b4(v_ids64, 32, 64), + __riscv_vmsltu_vx_u16m4_b4(v_ids64, 48, 64), 64); + vbool4_t m_g3 = __riscv_vmsgeu_vx_u16m4_b4(v_ids64, 48, 64); + + float sumf = 0.0f; + + for (int i = 0; i < nb; ++i) { + const float combined_scale = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + const uint8_t * GGML_RESTRICT qs = x[i].qs; + const uint8_t * GGML_RESTRICT qh = x[i].qh; + const uint8_t * GGML_RESTRICT scales = x[i].scales; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + + const uint8_t * signs_ptr = qs + 32; + + float sum_block = 0.0f; + + vuint8mf4_t v_qs_u8 = __riscv_vle8_v_u8mf4(qs, 32); + qs += 32; + + vuint8mf8_t v_qh_raw = __riscv_vle8_v_u8mf8(qh, 8); + qh += 8; + + vuint16mf4_t v_qh_u16 = __riscv_vwcvtu_x_x_v_u16mf4(v_qh_raw, 8); + vuint16mf2_t v_qh_u16_ext = __riscv_vlmul_ext_v_u16mf4_u16mf2(v_qh_u16); + vuint16mf2_t v_qh_expanded = __riscv_vrgather_vv_u16mf2(v_qh_u16_ext, v_gather_qh, 32); + v_qh_expanded = __riscv_vsll_vv_u16mf2(v_qh_expanded, v_shift_qh, 32); + v_qh_expanded = __riscv_vand_vx_u16mf2(v_qh_expanded, 0x1800, 32); + + vuint16mf2_t v_qs_u16 = __riscv_vwcvtu_x_x_v_u16mf2(v_qs_u8, 32); + v_qs_u16 = __riscv_vsll_vx_u16mf2(v_qs_u16, 3, 32); + + vuint16mf2_t v_grid_offsets = __riscv_vor_vv_u16mf2(v_qs_u16, v_qh_expanded, 32); + vuint64m2_t v_grid_vals = __riscv_vluxei16_v_u64m2(grid64, v_grid_offsets, 32); + vuint8m2_t v_grid_u8 = __riscv_vreinterpret_v_u64m2_u8m2(v_grid_vals); + vint8m2_t v_grid_i8 = __riscv_vreinterpret_v_u8m2_i8m2(v_grid_u8); + + //loading signs + vuint8mf2_t v_signs_raw = __riscv_vle8_v_u8mf2(signs_ptr, 32); + signs_ptr += 32; + + vuint8m2_t v_signs_source = __riscv_vlmul_ext_v_u8mf2_u8m2(v_signs_raw); + vuint8m2_t v_signs_bcast = __riscv_vrgather_vv_u8m2(v_signs_source, v_sign_gather_indices, 256); + vuint8m2_t v_sign_bits = __riscv_vand_vv_u8m2(v_signs_bcast, v_sign_masks, 256); + vbool4_t m_negative = __riscv_vmsne_vx_u8m2_b4(v_sign_bits, 0, 256); + + vint8m2_t v_q8 = __riscv_vle8_v_i8m2(q8, 256); + q8 += 256; + + vint8m2_t v_q8_signed = __riscv_vrsub_vx_i8m2_mu(m_negative, v_q8, v_q8, 0, 256); + vint16m4_t v_dot = __riscv_vwmul_vv_i16m4(v_grid_i8, v_q8_signed, 256); + + vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, 1); + + vint16m4_t c = v_dot; + + int32_t s0 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g0, c, v_zero, 64)); + int32_t s1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g1, c, v_zero, 64)); + int32_t s2 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g2, c, v_zero, 64)); + int32_t s3 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g3, c, v_zero, 64)); + + c = __riscv_vslidedown_vx_i16m4(c, 64, 256); + int32_t s4 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g0, c, v_zero, 64)); + int32_t s5 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g1, c, v_zero, 64)); + int32_t s6 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g2, c, v_zero, 64)); + int32_t s7 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g3, c, v_zero, 64)); + + c = __riscv_vslidedown_vx_i16m4(c, 64, 256); + int32_t s8 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g0, c, v_zero, 64)); + int32_t s9 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g1, c, v_zero, 64)); + int32_t s10 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g2, c, v_zero, 64)); + int32_t s11 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g3, c, v_zero, 64)); + + c = __riscv_vslidedown_vx_i16m4(c, 64, 256); + int32_t s12 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g0, c, v_zero, 64)); + int32_t s13 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g1, c, v_zero, 64)); + int32_t s14 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g2, c, v_zero, 64)); + int32_t s15 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m4_i32m1_m(m_g3, c, v_zero, 64)); + + int32_t sums_arr[16] = { s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15 }; + + // Load 8 scale bytes and split into 16 nibbles + vuint8mf2_t v_sc8 = __riscv_vle8_v_u8mf2(scales, 8); + scales += 8; + + vuint8mf2_t v_lo8 = __riscv_vand_vx_u8mf2(v_sc8, 0x0F, 8); + vuint8mf2_t v_hi8 = __riscv_vsrl_vx_u8mf2(v_sc8, 4, 8); + + vuint8m1_t v_idx16 = __riscv_vid_v_u8m1(16); + vuint8m1_t v_half = __riscv_vsrl_vx_u8m1(v_idx16, 1, 16); + vbool8_t m_even = __riscv_vmseq_vx_u8m1_b8(__riscv_vand_vx_u8m1(v_idx16, 1, 16), 0, 16); + + vuint8m1_t v_lo_ext = __riscv_vlmul_ext_v_u8mf2_u8m1(v_lo8); + vuint8m1_t v_hi_ext = __riscv_vlmul_ext_v_u8mf2_u8m1(v_hi8); + vuint8m1_t v_lo_g = __riscv_vrgather_vv_u8m1(v_lo_ext, v_half, 16); + vuint8m1_t v_hi_g = __riscv_vrgather_vv_u8m1(v_hi_ext, v_half, 16); + vuint8m1_t v_nib = __riscv_vmerge_vvm_u8m1(v_lo_g, v_hi_g, m_even, 16); + + static const uint8_t iq2s_scale_lut_16_local[16] = { + 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 + }; + vuint8m1_t v_lut = __riscv_vle8_v_u8m1(iq2s_scale_lut_16_local, 16); + vuint8m1_t v_sc8v = __riscv_vrgather_vv_u8m1(v_lut, v_nib, 16); + + vint32m4_t v_sums = __riscv_vle32_v_i32m4(sums_arr, 16); + vuint16m2_t v_sc16 = __riscv_vwcvtu_x_x_v_u16m2(v_sc8v, 16); + vuint32m4_t v_sc32u = __riscv_vwcvtu_x_x_v_u32m4(v_sc16, 16); + vint32m4_t v_sc32 = __riscv_vreinterpret_v_u32m4_i32m4(v_sc32u); + vint32m4_t v_prod = __riscv_vmul_vv_i32m4(v_sums, v_sc32, 16); + + vint32m1_t v_zero32 = __riscv_vmv_v_x_i32m1(0, 1); + int32_t sum_part = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32m4_i32m1(v_prod, v_zero32, 16)); + sum_block += sum_part; + + sumf += sum_block * combined_scale; + } + *s = 0.125f * sumf; +} #endif void ggml_vec_dot_iq2_s_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_iq2_s_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); @@ -2800,8 +4121,11 @@ void ggml_vec_dot_iq2_s_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const vo case 256: ggml_vec_dot_iq2_s_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; + case 512: + ggml_vec_dot_iq2_s_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); + break; default: - ggml_vec_dot_iq2_s_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); + ggml_vec_dot_iq2_s_q8_K_vl1024(n, s, bs, vx, bx, vy, by, nrc); break; } #else @@ -2809,7 +4133,7 @@ void ggml_vec_dot_iq2_s_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const vo #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static const int8_t keven_signs_q2xs[1024] = { 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, 1, -1, @@ -2947,59 +4271,140 @@ static NOINLINE void ggml_vec_dot_iq2_xs_q8_K_vl256(int n, float * GGML_RESTRICT int32_t sum_int = 0; - // Loop over 4 subblocks of 64 elements (QK_K = 256) - for (int ib64 = 0; ib64 < QK_K / 64; ++ib64) { - // Load 8 uint16 indices (controls 64 values) - vuint16mf2_t v_qs = __riscv_vle16_v_u16mf2(qs, 8); - qs += 8; + for (int ib128 = 0; ib128 < 2; ++ib128) { + + vuint16m1_t v_qs = __riscv_vle16_v_u16m1(qs, 16); + qs += 16; - // Extract indices for grid (low 9 bits) and signs (high 7 bits) - // Multiply by 8 (<< 3) for byte offsets into the uint64 tables - vuint16mf2_t vidx_grid = __riscv_vsll_vx_u16mf2(__riscv_vand_vx_u16mf2(v_qs, 511, 8), 3, 8); - vuint16mf2_t vidx_sign = __riscv_vsll_vx_u16mf2(__riscv_vsrl_vx_u16mf2(v_qs, 9, 8), 3, 8); + // Prepare offsets for grid and signs + vuint16m1_t vidx_grid = __riscv_vsll_vx_u16m1(__riscv_vand_vx_u16m1(v_qs, 511, 16), 3, 16); + vuint16m1_t vidx_sign = __riscv_vsll_vx_u16m1(__riscv_vsrl_vx_u16m1(v_qs, 9, 16), 3, 16); - vuint64m2_t vq2_64 = __riscv_vluxei16_v_u64m2(grid64, vidx_grid, 8); - vuint64m2_t vs2_64 = __riscv_vluxei16_v_u64m2(signs64, vidx_sign, 8); + // Indexed load 128 weights (16 x 8-byte chunks) + vuint64m4_t vq2_64 = __riscv_vluxei16_v_u64m4(grid64, vidx_grid, 16); + vuint64m4_t vs2_64 = __riscv_vluxei16_v_u64m4(signs64, vidx_sign, 16); - vint8m2_t q2u = __riscv_vreinterpret_v_u8m2_i8m2(__riscv_vreinterpret_v_u64m2_u8m2(vq2_64)); - vint8m2_t q2s = __riscv_vreinterpret_v_u8m2_i8m2(__riscv_vreinterpret_v_u64m2_u8m2(vs2_64)); + vint8m4_t q2u = __riscv_vreinterpret_v_u8m4_i8m4(__riscv_vreinterpret_v_u64m4_u8m4(vq2_64)); + vint8m4_t q2s = __riscv_vreinterpret_v_u8m4_i8m4(__riscv_vreinterpret_v_u64m4_u8m4(vs2_64)); - vint8m2_t q2_final = __riscv_vmul_vv_i8m2(q2u, q2s, 64); + // Apply signs to get dequantized IQ2 values + vint8m4_t q2_final = __riscv_vmul_vv_i8m4(q2u, q2s, 128); + asm volatile("" ::: "memory"); - vint8m2_t q8v = __riscv_vle8_v_i8m2(q8, 64); - q8 += 64; + // Load corresponding Q8 weights + vint8m4_t q8v = __riscv_vle8_v_i8m4(q8, 128); + q8 += 128; + + vint16m8_t prod = __riscv_vwmul_vv_i16m8(q2_final, q8v, 128); + asm volatile("" ::: "memory"); - vint16m4_t prod = __riscv_vwmul_vv_i16m4(q2_final, q8v, 64); + uint8_t sc0 = scales[0]; + uint8_t sc1 = scales[1]; + uint8_t sc2 = scales[2]; + uint8_t sc3 = scales[3]; + scales += 4; vint32m1_t zero_vec = __riscv_vmv_v_x_i32m1(0, 1); - int32_t sum0 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( - __riscv_vget_v_i16m4_i16m1(prod, 0), zero_vec, 16)); - int32_t sum1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( - __riscv_vget_v_i16m4_i16m1(prod, 1), zero_vec, 16)); - int32_t sum2 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( - __riscv_vget_v_i16m4_i16m1(prod, 2), zero_vec, 16)); - int32_t sum3 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( - __riscv_vget_v_i16m4_i16m1(prod, 3), zero_vec, 16)); + // 9. Reduce each 16-element chunk and apply corresponding nibble scale - const uint8_t scale_byte_1 = scales[0]; - const uint8_t scale_byte_2 = scales[1]; - scales += 2; + int32_t s0 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 0), zero_vec, 16)); + sum_int += s0 * ((sc0 & 0x0F) * 2 + 1); - sum_int += sum0 * ((scale_byte_1 & 0x0F) * 2 + 1); - sum_int += sum1 * ((scale_byte_1 >> 4) * 2 + 1); - sum_int += sum2 * ((scale_byte_2 & 0x0F) * 2 + 1); - sum_int += sum3 * ((scale_byte_2 >> 4) * 2 + 1); + int32_t s1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 1), zero_vec, 16)); + sum_int += s1 * ((sc0 >> 4) * 2 + 1); + + int32_t s2 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 2), zero_vec, 16)); + sum_int += s2 * ((sc1 & 0x0F) * 2 + 1); + + int32_t s3 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 3), zero_vec, 16)); + sum_int += s3 * ((sc1 >> 4) * 2 + 1); + + int32_t s4 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 4), zero_vec, 16)); + sum_int += s4 * ((sc2 & 0x0F) * 2 + 1); + + int32_t s5 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 5), zero_vec, 16)); + sum_int += s5 * ((sc2 >> 4) * 2 + 1); + + int32_t s6 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 6), zero_vec, 16)); + sum_int += s6 * ((sc3 & 0x0F) * 2 + 1); + + int32_t s7 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 7), zero_vec, 16)); + sum_int += s7 * ((sc3 >> 4) * 2 + 1); } - sumf += d * sum_int; + sumf += d * (float)sum_int; + } + *s = 0.125f * sumf; +} + +static NOINLINE void ggml_vec_dot_iq2_xs_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); UNUSED(bx); UNUSED(by); UNUSED(bs); + + const block_iq2_xs * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs; + const uint64_t * grid64 = (const uint64_t *)iq2xs_grid; + + float sumf = 0.0f; + for (int i = 0; i < nb; ++i) { + const float combined_scale = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + const uint16_t * GGML_RESTRICT qs = x[i].qs; + const uint8_t * GGML_RESTRICT scales = x[i].scales; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + + vint8m4_t q8_all = __riscv_vle8_v_i8m4(q8, 256); + + // Load indices --- + vuint16m1_t v_qs = __riscv_vle16_v_u16m1(qs, 32); + + // Extract low 9 bits and multiply by 8 (shift left 3) for byte offset into uint64 table + vuint16m1_t vidx_grid = __riscv_vsll_vx_u16m1(__riscv_vand_vx_u16m1(v_qs, 511, 32), 3, 32); + + // Extract high 7 bits (shift right 9) and multiply by 8 (shift left 3) for byte offset + vuint16m1_t vidx_sign = __riscv_vsll_vx_u16m1(__riscv_vsrl_vx_u16m1(v_qs, 9, 32), 3, 32); + + vuint64m4_t vq2_64 = __riscv_vluxei16_v_u64m4(grid64, vidx_grid, 32); + vuint64m4_t vs2_64 = __riscv_vluxei16_v_u64m4(signs64, vidx_sign, 32); + + vint8m4_t q2_all = __riscv_vreinterpret_v_u8m4_i8m4(__riscv_vreinterpret_v_u64m4_u8m4(vq2_64)); + vint8m4_t s2_all = __riscv_vreinterpret_v_u8m4_i8m4(__riscv_vreinterpret_v_u64m4_u8m4(vs2_64)); + + vint8m4_t q2_signed = __riscv_vmul_vv_i8m4(q2_all, s2_all, 256); + vint16m8_t dot_all = __riscv_vwmul_vv_i16m8(q2_signed, q8_all, 256); + float sum = 0.0f; + vint32m1_t zero_vec = __riscv_vmv_v_x_i32m1(0, 1); + +#pragma GCC unroll 1 + for (int j = 0; j < 8; ++j) { + uint8_t sc = scales[j]; + int16_t sc_lo = 2 * (sc & 0x0F) + 1; + int16_t sc_hi = 2 * (sc >> 4) + 1; + + vint32m1_t sum_v0 = __riscv_vwredsum_vs_i16m8_i32m1( + __riscv_vslidedown_vx_i16m8(dot_all, j * 32, 16), zero_vec, 16); + int32_t isum0 = __riscv_vmv_x_s_i32m1_i32(sum_v0); + + vint32m1_t sum_v1 = __riscv_vwredsum_vs_i16m8_i32m1( + __riscv_vslidedown_vx_i16m8(dot_all, j * 32 + 16, 16), zero_vec, 16); + int32_t isum1 = __riscv_vmv_x_s_i32m1_i32(sum_v1); + + sum += (float)isum0 * sc_lo + (float)isum1 * sc_hi; + } + + sumf += sum * combined_scale; } *s = 0.125f * sumf; } #endif void ggml_vec_dot_iq2_xs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_iq2_xs_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); @@ -3007,8 +4412,8 @@ void ggml_vec_dot_iq2_xs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const v case 256: ggml_vec_dot_iq2_xs_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; - default: - ggml_vec_dot_iq2_xs_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); + default: // 512 and above + ggml_vec_dot_iq2_xs_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); break; } #else @@ -3016,7 +4421,7 @@ void ggml_vec_dot_iq2_xs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const v #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_iq2_xxs_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); assert(nrc == 1); @@ -3201,24 +4606,99 @@ static NOINLINE void ggml_vec_dot_iq2_xxs_q8_K_vl256(int n, float * GGML_RESTRIC } *s = 0.125f * sumf; } + +static NOINLINE void ggml_vec_dot_iq2_xxs_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); UNUSED(bx); UNUSED(by); UNUSED(bs); + + const block_iq2_xxs * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs; + const uint64_t * grid64 = (const uint64_t *)iq2xxs_grid; + // Shift pattern {0,7,14,21} repeated 8 times for all 8 sub-blocks + uint8_t shift_arr[32] = { + 0, 7, 14, 21, 0, 7, 14, 21, 0, 7, 14, 21, 0, 7, 14, 21, + 0, 7, 14, 21, 0, 7, 14, 21, 0, 7, 14, 21, 0, 7, 14, 21 + }; + vuint8mf2_t v_shifts = __riscv_vle8_v_u8mf2(shift_arr, 32); + + // Gather pattern to broadcast the 8 sub-block scales across the 32 lookup slots + uint8_t gather_arr[32] = { + 0,0,0,0, 1,1,1,1, 2,2,2,2, 3,3,3,3, + 4,4,4,4, 5,5,5,5, 6,6,6,6, 7,7,7,7 + }; + vuint8mf2_t v_sign_gather_idx = __riscv_vle8_v_u8mf2(gather_arr, 32); + + float sumf = 0.0f; + for (int i = 0; i < nb; ++i) { + const float combined_scale = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + const uint8_t * GGML_RESTRICT q2_ptr = (const uint8_t *) x[i].qs; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + vint8m4_t q8_all = __riscv_vle8_v_i8m4(q8, 256); + + // De-interleave all 8 Index/Scale pairs for the 8x32-element sub-blocks + vuint32mf2x2_t tuple = __riscv_vlseg2e32_v_u32mf2x2((const uint32_t*)q2_ptr, 8); + vuint32mf2_t v_ind32 = __riscv_vget_v_u32mf2x2_u32mf2(tuple, 0); + vuint32mf2_t v_sc32 = __riscv_vget_v_u32mf2x2_u32mf2(tuple, 1); + + vuint8mf2_t v_raw_q2 = __riscv_vreinterpret_v_u32mf2_u8mf2(v_ind32); + vuint16m1_t vidx_q2 = __riscv_vwcvtu_x_x_v_u16m1(v_raw_q2, 32); + vidx_q2 = __riscv_vsll_vx_u16m1(vidx_q2, 3, 32); + + vuint32m2_t v_s = __riscv_vrgatherei16_vv_u32m2(__riscv_vlmul_ext_v_u32mf2_u32m2(v_sc32), __riscv_vwcvtu_x_x_v_u16m1(v_sign_gather_idx,32), 32); + v_s = __riscv_vsrl_vv_u32m2(v_s, __riscv_vwcvtu_x_x_v_u32m2(__riscv_vwcvtu_x_x_v_u16m1(v_shifts,32),32), 32); + v_s = __riscv_vand_vx_u32m2(v_s, 127, 32); + vuint16m1_t vidx_s2 = __riscv_vsll_vx_u16m1(__riscv_vncvt_x_x_w_u16m1(v_s, 32), 3, 32); + + vuint64m4_t vq2_64 = __riscv_vluxei16_v_u64m4(grid64, vidx_q2, 32); + vuint64m4_t vs2_64 = __riscv_vluxei16_v_u64m4(signs64, vidx_s2, 32); + vint8m4_t q2_all = __riscv_vreinterpret_v_u8m4_i8m4(__riscv_vreinterpret_v_u64m4_u8m4(vq2_64)); + vint8m4_t s2_all = __riscv_vreinterpret_v_u8m4_i8m4(__riscv_vreinterpret_v_u64m4_u8m4(vs2_64)); + + vint8m4_t q8s_all = __riscv_vmul_vv_i8m4(q8_all, s2_all, 256); + vint16m8_t dot_all = __riscv_vwmul_vv_i16m8(q8s_all, q2_all, 256); + + float sum = 0.0f; + vint32m1_t zero_vec = __riscv_vmv_v_x_i32m1(0, 1); + + for (int j = 0; j < 8; ++j) { + uint32_t s_p = __riscv_vmv_x_s_u32mf2_u32(__riscv_vslidedown_vx_u32mf2(v_sc32, j, 8)); + int16_t sc = 2 * ((s_p >> 28) & 0xF) + 1; + dot_all=__riscv_vslidedown_vx_i16m8(dot_all,j*32,32); + vint32m1_t sum_v = __riscv_vwredsum_vs_i16m8_i32m1(dot_all, zero_vec, 32); + int32_t isum = __riscv_vmv_x_s_i32m1_i32(sum_v); + sum += (float)isum * sc; + } + + sumf += sum * combined_scale; + } + *s = 0.125f * sumf; +} #endif void ggml_vec_dot_iq2_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_iq2_xxs_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); break; - default: // 256 and above + case 256: ggml_vec_dot_iq2_xxs_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; + default: // 512 and above + ggml_vec_dot_iq2_xxs_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); + break; } #else ggml_vec_dot_iq2_xxs_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_iq3_s_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); UNUSED(nrc); UNUSED(bx); UNUSED(by); UNUSED(bs); @@ -3408,19 +4888,108 @@ static NOINLINE void ggml_vec_dot_iq3_s_q8_K_vl256(int n, float * GGML_RESTRICT } *s = sumf; } + +static NOINLINE void ggml_vec_dot_iq3_s_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + UNUSED(nrc); UNUSED(bx); UNUSED(by); UNUSED(bs); + const block_iq3_s * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + const uint32_t * grid32 = (const uint32_t *)iq3s_grid; + + // Generate Constants + vuint8mf2_t v_id_32 = __riscv_vid_v_u8mf2(32); + vuint8mf2_t v_qh_gather = __riscv_vsrl_vx_u8mf2(v_id_32, 3, 32); + vuint8mf2_t v_qh_shifts = __riscv_vand_vx_u8mf2(v_id_32, 7, 32); + vuint8m2_t v_id_128 = __riscv_vid_v_u8m2(128); + vuint8m2_t v_sign_gather = __riscv_vsrl_vx_u8m2(v_id_128, 3, 128); // byte index + vuint8m2_t v_sign_shift_amts = __riscv_vand_vx_u8m2(v_id_128, 7, 128); // bit shift + vuint8m2_t v_one_128 = __riscv_vmv_v_x_u8m2(1, 128); + vuint8m2_t v_sign_masks = __riscv_vsll_vv_u8m2(v_one_128, v_sign_shift_amts, 128); + vuint8m2_t v_scale_indices = __riscv_vsrl_vx_u8m2(v_id_128, 5, 128); + + float sumf = 0.0f; + + for (int i = 0; i < nb; ++i) { + const float combined_scale = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + const uint8_t * GGML_RESTRICT qs = x[i].qs; + const uint8_t * GGML_RESTRICT qh = x[i].qh; + const uint8_t * GGML_RESTRICT scales = x[i].scales; + const uint8_t * GGML_RESTRICT signs = x[i].signs; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + + float sum_block = 0.0f; + for (int ib = 0; ib < 2; ++ib) { + vuint8mf2_t v_qs_u8 = __riscv_vle8_v_u8mf2(qs, 32); + qs += 32; + vuint8mf2_t v_qh_loaded = __riscv_vle8_v_u8mf2(qh, 4); + qh += 4; + vuint8mf2_t v_qh_expanded = __riscv_vrgather_vv_u8mf2(v_qh_loaded, v_qh_gather, 32); + v_qh_expanded = __riscv_vsrl_vv_u8mf2(v_qh_expanded, v_qh_shifts, 32); + v_qh_expanded = __riscv_vand_vx_u8mf2(v_qh_expanded, 1, 32); + vuint16m1_t v_qs_u16 = __riscv_vwcvtu_x_x_v_u16m1(v_qs_u8, 32); + v_qs_u16 = __riscv_vsll_vx_u16m1(v_qs_u16, 2, 32); // * 4 + + vuint16m1_t v_qh_u16 = __riscv_vwcvtu_x_x_v_u16m1(v_qh_expanded, 32); + v_qh_u16 = __riscv_vsll_vx_u16m1(v_qh_u16, 10, 32); // * 256 * 4 + + vuint16m1_t v_grid_offsets = __riscv_vor_vv_u16m1(v_qs_u16, v_qh_u16, 32); + vuint32m2_t v_grid_packed = __riscv_vluxei16_v_u32m2(grid32, v_grid_offsets, 32); + vuint8m2_t v_grid_u8 = __riscv_vreinterpret_v_u32m2_u8m2(v_grid_packed); + vuint8mf2_t v_signs_raw = __riscv_vle8_v_u8mf2(signs, 16); + signs += 16; + + vuint8m2_t v_signs_source = __riscv_vlmul_ext_v_u8mf2_u8m2(v_signs_raw); + vuint8m2_t v_signs_bcast = __riscv_vrgather_vv_u8m2(v_signs_source, v_sign_gather, 128); + vuint8m2_t v_sign_bits = __riscv_vand_vv_u8m2(v_signs_bcast, v_sign_masks, 128); + vbool4_t m_negative = __riscv_vmsne_vx_u8m2_b4(v_sign_bits, 0, 128); + + vint8m2_t v_q8 = __riscv_vle8_v_i8m2(q8, 128); + q8 += 128; + + vint8m2_t v_q8_signed = __riscv_vrsub_vx_i8m2_mu(m_negative, v_q8, v_q8, 0, 128); + vint16m4_t v_dot = __riscv_vwmulsu_vv_i16m4(v_q8_signed, v_grid_u8, 128); + uint16_t sc_raw; + memcpy(&sc_raw, scales, 2); + scales += 2; // Advance 2 bytes + + uint8_t sc_unpacked[4]; + sc_unpacked[0] = (sc_raw & 0xF); + sc_unpacked[1] = (sc_raw >> 4) & 0xF; + sc_unpacked[2] = (sc_raw >> 8) & 0xF; + sc_unpacked[3] = (sc_raw >> 12) & 0xF; + + vuint8mf2_t v_sc_4 = __riscv_vle8_v_u8mf2(sc_unpacked, 4); + v_sc_4 = __riscv_vmul_vx_u8mf2(v_sc_4, 2, 4); + v_sc_4 = __riscv_vadd_vx_u8mf2(v_sc_4, 1, 4); + vuint8m2_t v_sc_4_expanded = __riscv_vlmul_ext_v_u8mf2_u8m2(v_sc_4); + vuint8m2_t v_scales_bcast = __riscv_vrgather_vv_u8m2(v_sc_4_expanded, v_scale_indices, 128); + vint16m4_t v_scales_i16 = __riscv_vreinterpret_v_u16m4_i16m4(__riscv_vwcvtu_x_x_v_u16m4(v_scales_bcast, 128)); + vint32m8_t v_weighted_sum = __riscv_vwmul_vv_i32m8(v_dot, v_scales_i16, 128); + vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, 1); + int32_t s_val = __riscv_vmv_x_s_i32m1_i32(__riscv_vredsum_vs_i32m8_i32m1(v_weighted_sum, v_zero, 128)); + + sum_block += s_val; + } + sumf += sum_block * combined_scale; + } + *s = sumf; +} #endif void ggml_vec_dot_iq3_s_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: - ggml_vec_dot_iq3_s_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); + ggml_vec_dot_iq3_s_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); break; case 256: ggml_vec_dot_iq3_s_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; - default: - ggml_vec_dot_iq3_s_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); + default: // 512 and above + ggml_vec_dot_iq3_s_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); break; } #else @@ -3428,7 +4997,7 @@ void ggml_vec_dot_iq3_s_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const vo #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_iq3_xxs_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); UNUSED(nrc); UNUSED(bx); UNUSED(by); UNUSED(bs); @@ -3614,10 +5183,181 @@ static NOINLINE void ggml_vec_dot_iq3_xxs_q8_K_vl256(int n, float * GGML_RESTRIC } *s = 0.25f * sumf; } + +static NOINLINE void ggml_vec_dot_iq3_xxs_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); UNUSED(bx); UNUSED(by); UNUSED(bs); + const block_iq3_xxs * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + const int nb = n / QK_K; + + const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs; + const uint32_t * grid32 = (const uint32_t *)iq3xxs_grid; + + // generate constants for unpacking metadata words into sign indices + vuint32m1_t v_shifts; + { + vuint32m1_t v_base = __riscv_vid_v_u32m1(16); + vuint32m1_t v_mod4 = __riscv_vand_vx_u32m1(v_base, 3, 16); + v_shifts = __riscv_vmul_vx_u32m1(v_mod4, 7, 16); + } + + vuint16mf2_t v_gather_idx; + { + vuint16mf2_t v_idx = __riscv_vid_v_u16mf2(16); + v_gather_idx = __riscv_vsrl_vx_u16mf2(v_idx, 2, 16); + } + + float sumf = 0.0f; + + for (int i = 0; i < nb; ++i) { + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + const uint8_t * GGML_RESTRICT q3_indices = x[i].qs; + const uint8_t * GGML_RESTRICT metadata = x[i].qs + QK_K/4; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + + float block_sum = 0.0f; + for (int ib128 = 0; ib128 < 2; ++ib128) { + + vint8m2_t v_q8 = __riscv_vle8_v_i8m2(q8, 128); + q8 += 128; + vuint8mf2_t v_q3_idx_u8 = __riscv_vle8_v_u8mf2(q3_indices, 32); + q3_indices += 32; + + vuint16m1_t v_q3_idx_u16 = __riscv_vwmulu_vx_u16m1(v_q3_idx_u8, 4, 32); + vuint32m2_t v_q3_mag_u32 = __riscv_vluxei16_v_u32m2(grid32, v_q3_idx_u16, 32); + vint8m2_t v_q3_magnitudes = __riscv_vreinterpret_v_u8m2_i8m2( + __riscv_vreinterpret_v_u32m2_u8m2(v_q3_mag_u32)); + vuint32m1_t v_aux = __riscv_vreinterpret_v_u8m1_u32m1(__riscv_vle8_v_u8m1(metadata, 16)); + metadata += 4 * sizeof(uint32_t); + + vuint32m1_t v_aux_expanded = __riscv_vrgatherei16_vv_u32m1(v_aux, v_gather_idx, 16); + + vuint32m1_t v_s_raw = __riscv_vand_vx_u32m1( + __riscv_vsrl_vv_u32m1(v_aux_expanded, v_shifts, 16), 127, 16); + vuint16mf2_t sign_byte_offset = __riscv_vsll_vx_u16mf2( + __riscv_vncvt_x_x_w_u16mf2(v_s_raw, 16), 3, 16); + vuint64m2_t v_s_u64 = __riscv_vluxei16_v_u64m2(signs64, sign_byte_offset, 16); + vint8m2_t v_signs = __riscv_vreinterpret_v_u8m2_i8m2( + __riscv_vreinterpret_v_u64m2_u8m2(v_s_u64)); + vint8m2_t v_q3_signed = __riscv_vmul_vv_i8m2(v_q3_magnitudes, v_signs, 128); + vint16m4_t prod = __riscv_vwmul_vv_i16m4(v_q3_signed, v_q8, 128); + + vint32m1_t zero_vec = __riscv_vmv_v_x_i32m1(0, 1); + int32_t group0_sum = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( + __riscv_vget_v_i16m4_i16m1(prod, 0), zero_vec, 32)); + int32_t group1_sum = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( + __riscv_vget_v_i16m4_i16m1(prod, 1), zero_vec, 32)); + int32_t group2_sum = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( + __riscv_vget_v_i16m4_i16m1(prod, 2), zero_vec, 32)); + int32_t group3_sum = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( + __riscv_vget_v_i16m4_i16m1(prod, 3), zero_vec, 32)); + + vuint32m1_t v_scales_raw = __riscv_vsrl_vx_u32m1(v_aux, 28, 4); + vuint32m1_t v_scales = __riscv_vadd_vx_u32m1( + __riscv_vsll_vx_u32m1(v_scales_raw, 1, 4), + 1, 4); + int32_t scale0 = (int32_t)__riscv_vmv_x_s_u32m1_u32(v_scales); + int32_t scale1 = (int32_t)__riscv_vmv_x_s_u32m1_u32(__riscv_vslidedown_vx_u32m1(v_scales, 1, 4)); + int32_t scale2 = (int32_t)__riscv_vmv_x_s_u32m1_u32(__riscv_vslidedown_vx_u32m1(v_scales, 2, 4)); + int32_t scale3 = (int32_t)__riscv_vmv_x_s_u32m1_u32(__riscv_vslidedown_vx_u32m1(v_scales, 3, 4)); + + block_sum += (float)(group0_sum * scale0 + group1_sum * scale1 + + group2_sum * scale2 + group3_sum * scale3); + } + + sumf += d * block_sum; + } + *s = 0.25f * sumf; +} + +static NOINLINE void ggml_vec_dot_iq3_xxs_q8_K_vl1024(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(n % QK_K == 0); + assert(nrc == 1); + UNUSED(nrc); UNUSED(bx); UNUSED(by); UNUSED(bs); + + const block_iq3_xxs * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + const int nb = n / QK_K; + + const uint64_t * signs64 = (const uint64_t *)keven_signs_q2xs; + const uint32_t * grid32 = (const uint32_t *)iq3xxs_grid; + + vuint32m1_t v_shifts; + { + vuint32m1_t v_id = __riscv_vid_v_u32m1(32); + vuint32m1_t v_mod4 = __riscv_vand_vx_u32m1(v_id, 3, 32); + v_shifts = __riscv_vmul_vx_u32m1(v_mod4, 7, 32); + } + vuint16mf2_t v_gather_idx; + { + vuint16mf2_t v_id_16 = __riscv_vid_v_u16mf2(32); + v_gather_idx = __riscv_vsrl_vx_u16mf2(v_id_16, 2, 32); + } + + float sumf = 0.0f; + uint32_t aux32[8]; // Buffer for block metadata + + for (int i = 0; i < nb; ++i) { + const float d = GGML_CPU_FP16_TO_FP32(x[i].d) * y[i].d; + + const uint8_t * GGML_RESTRICT q3_indices = x[i].qs; + const uint8_t * GGML_RESTRICT metadata = x[i].qs + QK_K/4; + const int8_t * GGML_RESTRICT q8 = y[i].qs; + + vint8m2_t v_q8 = __riscv_vle8_v_i8m2(q8, 256); + vuint8mf2_t v_q3_idx_raw = __riscv_vle8_v_u8mf2(q3_indices, 64); + vuint16m1_t v_q3_idx_u16 = __riscv_vwmulu_vx_u16m1(v_q3_idx_raw, 4, 64); + + vuint32m2_t v_q3_grid_vals = __riscv_vluxei16_v_u32m2(grid32, v_q3_idx_u16, 64); + + vint8m2_t v_q3_mags = __riscv_vreinterpret_v_u8m2_i8m2( + __riscv_vreinterpret_v_u32m2_u8m2(v_q3_grid_vals)); + + memcpy(aux32, metadata, 8 * sizeof(uint32_t)); + vuint32m1_t v_aux_8 = __riscv_vle32_v_u32m1(aux32, 8); + + vuint32m1_t v_aux_32 = __riscv_vrgatherei16_vv_u32m1(v_aux_8, v_gather_idx, 32); + + vuint32m1_t v_sign_idx_raw = __riscv_vand_vx_u32m1( + __riscv_vsrl_vv_u32m1(v_aux_32, v_shifts, 32), 127, 32); + + vuint16mf2_t v_sign_offsets = __riscv_vsll_vx_u16mf2( + __riscv_vncvt_x_x_w_u16mf2(v_sign_idx_raw, 32), 3, 32); + + vuint64m2_t v_signs_u64 = __riscv_vluxei16_v_u64m2(signs64, v_sign_offsets, 32); + + vint8m2_t v_signs = __riscv_vreinterpret_v_u8m2_i8m2( + __riscv_vreinterpret_v_u64m2_u8m2(v_signs_u64)); + + vint8m2_t v_q3_final = __riscv_vmul_vv_i8m2(v_q3_mags, v_signs, 256); + + vint16m4_t v_dot = __riscv_vwmul_vv_i16m4(v_q8, v_q3_final, 256); + float block_sum = 0.0f; + vint32m1_t v_zero = __riscv_vmv_v_x_i32m1(0, 1); + vint16m4_t v_accum = v_dot; + + for (int j = 0; j < 8; ++j) { + float scale = (float)(2 * (aux32[j] >> 28) + 1); + + vint32m1_t v_partial_sum = __riscv_vwredsum_vs_i16m4_i32m1(v_accum, v_zero, 32); + + int32_t partial_sum_i = __riscv_vmv_x_s_i32m1_i32(v_partial_sum); + block_sum += partial_sum_i * scale; + v_accum = __riscv_vslidedown_vx_i16m4(v_accum, 32, 32); + + } + + sumf += d * block_sum; + } + *s = 0.25f * sumf; +} #endif void ggml_vec_dot_iq3_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_iq3_xxs_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); @@ -3625,8 +5365,11 @@ void ggml_vec_dot_iq3_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const case 256: ggml_vec_dot_iq3_xxs_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; - default: - ggml_vec_dot_iq3_xxs_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); + case 512: + ggml_vec_dot_iq3_xxs_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); + break; + default: // 1024 and above + ggml_vec_dot_iq3_xxs_q8_K_vl1024(n, s, bs, vx, bx, vy, by, nrc); break; } #else @@ -3634,7 +5377,7 @@ void ggml_vec_dot_iq3_xxs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_iq4_nl_q8_0_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(nrc == 1); UNUSED(nrc); @@ -3749,7 +5492,7 @@ static NOINLINE void ggml_vec_dot_iq4_nl_q8_0_vl256(int n, float * GGML_RESTRICT #endif void ggml_vec_dot_iq4_nl_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_iq4_nl_q8_0_vl128(n, s, bs, vx, bx, vy, by, nrc); @@ -3763,7 +5506,7 @@ void ggml_vec_dot_iq4_nl_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const v #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_iq4_xs_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(nrc == 1); UNUSED(nrc); @@ -3909,10 +5652,205 @@ static NOINLINE void ggml_vec_dot_iq4_xs_q8_K_vl256(int n, float * GGML_RESTRICT *s = sumf; } + +static NOINLINE void ggml_vec_dot_iq4_xs_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + assert(n % QK_K == 0); + + const block_iq4_xs * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + const vint8m4_t values = __riscv_vle8_v_i8m4(kvalues_iq4nl, 16); + float sumf = 0; + + // Indices for re-ordering IQ4 data. + const uint16_t index[32] = { + 0, 1, 16, 17, + 2, 3, 18, 19, + 4, 5,20, 21, + 6, 7, 22, 23, + 8, 9, 24, 25, + 10, 11, 26, 27, + 12, 13,28, 29, + 14, 15, 30, 31, + }; + const vuint16m1_t i_vec = __riscv_vle16_v_u16m1(index, 32); + + for (int ibl = 0; ibl < nb; ++ibl) { + const int8_t * q8 = y[ibl].qs; + const uint8_t * iq4 = x[ibl].qs; + uint16_t h = x[ibl].scales_h; + + int sumi = 0; + + #pragma GCC unroll 1 + // Process the entire super-block together. + for (int ib = 0; ib < QK_K / 256; ++ib) { + // Weights and activations. + const vuint8m2_t iq4_packed = __riscv_vle8_v_u8m2(iq4, 128); + iq4 += 128; + + // Unpack the weight blocks. + const vuint8m2_t iq4bits_lo = __riscv_vand_vx_u8m2(iq4_packed, 0xf, 128); + const vuint8m2_t iq4bits_hi = __riscv_vsrl_vx_u8m2(iq4_packed, 4, 128); + const vuint8m4_t iq4bits = __riscv_vcreate_v_u8m2_u8m4(iq4bits_lo, iq4bits_hi); + const vuint8m4_t iq4bits_reorder = __riscv_vreinterpret_v_u64m4_u8m4(__riscv_vrgatherei16_vv_u64m4(__riscv_vreinterpret_v_u8m4_u64m4(iq4bits), i_vec, 32)); + const vint8m4_t iq4b = __riscv_vrgather_vv_i8m4(values, iq4bits_reorder, 256); + + __asm__ __volatile__("" ::: "memory"); + + // Multiply with activations. + const vint8m4_t q8b = __riscv_vle8_v_i8m4(q8, 256); + const vint16m8_t prod = __riscv_vwmul_vv_i16m8(iq4b, q8b, 256); + q8 += 256; + + // Reduce separately. + const int acc0 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 0), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 1), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc2 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 2), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc3 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 3), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc4 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 4), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc5 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 5), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc6 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 6), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc7 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1(__riscv_vget_v_i16m8_i16m1(prod, 7), __riscv_vmv_v_x_i32m1(0, 1), 32)); + + + const int ls0 = ((x[ibl].scales_l[0] & 0xf) | ((h << 4) & 0x30)) - 32; + const int ls1 = ((x[ibl].scales_l[0] >> 4) | ((h << 2) & 0x30)) - 32; + const int ls2 = ((x[ibl].scales_l[1] & 0xf) | ((h << 0) & 0x30)) - 32; + const int ls3 = ((x[ibl].scales_l[1] >> 4) | ((h >> 2) & 0x30)) - 32; + h >>= 8; + const int ls4 = ((x[ibl].scales_l[2] & 0xf) | ((h << 4) & 0x30)) - 32; + const int ls5 = ((x[ibl].scales_l[2] >> 4) | ((h << 2) & 0x30)) - 32; + const int ls6 = ((x[ibl].scales_l[3] & 0xf) | ((h << 0) & 0x30)) - 32; + const int ls7 = ((x[ibl].scales_l[3] >> 4) | ((h >> 2) & 0x30)) - 32; + + sumi += acc0 * ls0; + sumi += acc1 * ls1; + sumi += acc2 * ls2; + sumi += acc3 * ls3; + sumi += acc4 * ls4; + sumi += acc5 * ls5; + sumi += acc6 * ls6; + sumi += acc7 * ls7; + + __asm__ __volatile__("" ::: "memory"); + } + + sumf += GGML_CPU_FP16_TO_FP32(x[ibl].d) * y[ibl].d * (sumi); + } + + *s = sumf; +} + +static NOINLINE void ggml_vec_dot_iq4_xs_q8_K_vl1024(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + assert(n % QK_K == 0); + + const block_iq4_xs * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + const vint8m2_t values = __riscv_vle8_v_i8m2(kvalues_iq4nl, 16); + float sumf = 0; + + // Indices for re-ordering IQ4 data. + const uint16_t index[32] = { + 0, 1, 16, 17, + 2, 3, 18, 19, + 4, 5,20, 21, + 6, 7, 22, 23, + 8, 9, 24, 25, + 10, 11, 26, 27, + 12, 13,28, 29, + 14, 15, 30, 31, + }; + const vuint16mf2_t i_vec = __riscv_vle16_v_u16mf2(index, 32); + + for (int ibl = 0; ibl < nb; ++ibl) { + const int8_t * q8 = y[ibl].qs; + const uint8_t * iq4 = x[ibl].qs; + uint16_t h = x[ibl].scales_h; + + int sumi = 0; + + #pragma GCC unroll 1 + // Process the entire super-block together. + for (int ib = 0; ib < QK_K / 256; ++ib) { + // Weights and activations. + const vuint8m1_t iq4_packed = __riscv_vle8_v_u8m1(iq4, 128); + iq4 += 128; + + // Unpack the weight blocks. + const vuint8m1_t iq4bits_lo = __riscv_vand_vx_u8m1(iq4_packed, 0xf, 128); + const vuint8m1_t iq4bits_hi = __riscv_vsrl_vx_u8m1(iq4_packed, 4, 128); + const vuint8m2_t iq4bits = __riscv_vcreate_v_u8m1_u8m2(iq4bits_lo, iq4bits_hi); + const vuint8m2_t iq4bits_reorder = __riscv_vreinterpret_v_u64m2_u8m2(__riscv_vrgatherei16_vv_u64m2(__riscv_vreinterpret_v_u8m2_u64m2(iq4bits), i_vec, 32)); + const vint8m2_t iq4b = __riscv_vrgather_vv_i8m2(values, iq4bits_reorder, 256); + + __asm__ __volatile__("" ::: "memory"); + + // Multiply with activations. + const vint8m2_t q8b = __riscv_vle8_v_i8m2(q8, 256); + const vint16m4_t prod = __riscv_vwmul_vv_i16m4(iq4b, q8b, 256); + q8 += 256; + + // Mask for processing 32 elements per prod register. + const vuint16m1_t p_index = __riscv_vid_v_u16m1(64); + const vbool16_t p_mask = __riscv_vmsgtu_vx_u16m1_b16(p_index, 31, 64); + + // Reduce separately. + const int acc0 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( __riscv_vget_v_i16m4_i16m1(prod, 0), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc1 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(p_mask, __riscv_vget_v_i16m4_i16m1(prod, 0), __riscv_vmv_v_x_i32m1(0, 1), 64)); + const int acc2 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( __riscv_vget_v_i16m4_i16m1(prod, 1), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc3 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(p_mask, __riscv_vget_v_i16m4_i16m1(prod, 1), __riscv_vmv_v_x_i32m1(0, 1), 64)); + const int acc4 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( __riscv_vget_v_i16m4_i16m1(prod, 2), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc5 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(p_mask, __riscv_vget_v_i16m4_i16m1(prod, 2), __riscv_vmv_v_x_i32m1(0, 1), 64)); + const int acc6 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1( __riscv_vget_v_i16m4_i16m1(prod, 3), __riscv_vmv_v_x_i32m1(0, 1), 32)); + const int acc7 = __riscv_vmv_x_s_i32m1_i32(__riscv_vwredsum_vs_i16m1_i32m1_m(p_mask, __riscv_vget_v_i16m4_i16m1(prod, 3), __riscv_vmv_v_x_i32m1(0, 1), 64)); + + const int ls0 = ((x[ibl].scales_l[0] & 0xf) | ((h << 4) & 0x30)) - 32; + const int ls1 = ((x[ibl].scales_l[0] >> 4) | ((h << 2) & 0x30)) - 32; + const int ls2 = ((x[ibl].scales_l[1] & 0xf) | ((h << 0) & 0x30)) - 32; + const int ls3 = ((x[ibl].scales_l[1] >> 4) | ((h >> 2) & 0x30)) - 32; + h >>= 8; + const int ls4 = ((x[ibl].scales_l[2] & 0xf) | ((h << 4) & 0x30)) - 32; + const int ls5 = ((x[ibl].scales_l[2] >> 4) | ((h << 2) & 0x30)) - 32; + const int ls6 = ((x[ibl].scales_l[3] & 0xf) | ((h << 0) & 0x30)) - 32; + const int ls7 = ((x[ibl].scales_l[3] >> 4) | ((h >> 2) & 0x30)) - 32; + + sumi += acc0 * ls0; + sumi += acc1 * ls1; + sumi += acc2 * ls2; + sumi += acc3 * ls3; + sumi += acc4 * ls4; + sumi += acc5 * ls5; + sumi += acc6 * ls6; + sumi += acc7 * ls7; + + __asm__ __volatile__("" ::: "memory"); + } + + sumf += GGML_CPU_FP16_TO_FP32(x[ibl].d) * y[ibl].d * (sumi); + } + + *s = sumf; +} #endif void ggml_vec_dot_iq4_xs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_iq4_xs_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); @@ -3920,6 +5858,12 @@ void ggml_vec_dot_iq4_xs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const v case 256: ggml_vec_dot_iq4_xs_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; + case 512: + ggml_vec_dot_iq4_xs_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); + break; + case 1024: + ggml_vec_dot_iq4_xs_q8_K_vl1024(n, s, bs, vx, bx, vy, by, nrc); + break; default: ggml_vec_dot_iq4_xs_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); break; @@ -3929,7 +5873,7 @@ void ggml_vec_dot_iq4_xs_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const v #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_tq1_0_q8_K_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(nrc == 1); UNUSED(nrc); @@ -4132,10 +6076,112 @@ static NOINLINE void ggml_vec_dot_tq1_0_q8_K_vl256(int n, float * GGML_RESTRICT *s = sumf; } + +static NOINLINE void ggml_vec_dot_tq1_0_q8_K_vl512(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { + assert(nrc == 1); + UNUSED(nrc); + UNUSED(bx); + UNUSED(by); + UNUSED(bs); + + const block_tq1_0 * GGML_RESTRICT x = vx; + const block_q8_K * GGML_RESTRICT y = vy; + + const int nb = n / QK_K; + + float sumf = 0.0f; + uint8_t pow[16] = {1, 1, 1, 1, 3, 3, 3, 3, 9, 9, 9, 9, 27, 27, 27, 27}; + + for (int i = 0; i < nb; i++) { + // First loop. + vint16m1_t suml1; + { + const int vl = 32; + vuint8mf2_t tq = __riscv_vle8_v_u8mf2(x[i].qs, vl); + + vuint16m1_t tq0 = __riscv_vsrl_vx_u16m1(__riscv_vwmulu_vx_u16m1(tq, 3, vl), 8, vl); + vuint16m1_t tq1 = __riscv_vsrl_vx_u16m1(__riscv_vwmulu_vx_u16m1(__riscv_vmul_vx_u8mf2(tq, 3, vl), 3, vl), 8, vl); + vuint16m1_t tq2 = __riscv_vsrl_vx_u16m1(__riscv_vwmulu_vx_u16m1(__riscv_vmul_vx_u8mf2(tq, 9, vl), 3, vl), 8, vl); + vuint16m1_t tq3 = __riscv_vsrl_vx_u16m1(__riscv_vwmulu_vx_u16m1(__riscv_vmul_vx_u8mf2(tq, 27, vl), 3, vl), 8, vl); + vuint16m1_t tq4 = __riscv_vsrl_vx_u16m1(__riscv_vwmulu_vx_u16m1(__riscv_vmul_vx_u8mf2(tq, 81, vl), 3, vl), 8, vl); + + vint16m1_t q80 = __riscv_vwcvt_x_x_v_i16m1(__riscv_vle8_v_i8mf2(y[i].qs + 0, vl), vl); + vint16m1_t q81 = __riscv_vwcvt_x_x_v_i16m1(__riscv_vle8_v_i8mf2(y[i].qs + 32, vl), vl); + vint16m1_t q82 = __riscv_vwcvt_x_x_v_i16m1(__riscv_vle8_v_i8mf2(y[i].qs + 64, vl), vl); + vint16m1_t q83 = __riscv_vwcvt_x_x_v_i16m1(__riscv_vle8_v_i8mf2(y[i].qs + 96, vl), vl); + vint16m1_t q84 = __riscv_vwcvt_x_x_v_i16m1(__riscv_vle8_v_i8mf2(y[i].qs + 128, vl), vl); + + vint16m1_t sum0 = __riscv_vmul_vv_i16m1(__riscv_vreinterpret_v_u16m1_i16m1(__riscv_vsub_vx_u16m1(tq0, 1, vl)), q80, vl); + vint16m1_t sum1 = __riscv_vmul_vv_i16m1(__riscv_vreinterpret_v_u16m1_i16m1(__riscv_vsub_vx_u16m1(tq1, 1, vl)), q81, vl); + vint16m1_t sum2 = __riscv_vmul_vv_i16m1(__riscv_vreinterpret_v_u16m1_i16m1(__riscv_vsub_vx_u16m1(tq2, 1, vl)), q82, vl); + vint16m1_t sum3 = __riscv_vmul_vv_i16m1(__riscv_vreinterpret_v_u16m1_i16m1(__riscv_vsub_vx_u16m1(tq3, 1, vl)), q83, vl); + vint16m1_t sum4 = __riscv_vmul_vv_i16m1(__riscv_vreinterpret_v_u16m1_i16m1(__riscv_vsub_vx_u16m1(tq4, 1, vl)), q84, vl); + + vint16m1_t sumi0 = __riscv_vadd_vv_i16m1(sum0, sum1, vl); + vint16m1_t sumi1 = __riscv_vadd_vv_i16m1(sum2, sum3, vl); + suml1 = __riscv_vadd_vv_i16m1(sum4, __riscv_vadd_vv_i16m1(sumi0, sumi1, vl), vl); + } + + // Second loop. + vint16mf2_t suml2; + { + const int vl = 16; + vuint8mf4_t tq = __riscv_vle8_v_u8mf4(x[i].qs + 32, vl); + + vuint16mf2_t tq0 = __riscv_vsrl_vx_u16mf2(__riscv_vwmulu_vx_u16mf2(tq, 3 * 1, vl), 8, vl); + vuint16mf2_t tq1 = __riscv_vsrl_vx_u16mf2(__riscv_vwmulu_vx_u16mf2(__riscv_vmul_vx_u8mf4(tq, 3, vl), 3, vl), 8, vl); + vuint16mf2_t tq2 = __riscv_vsrl_vx_u16mf2(__riscv_vwmulu_vx_u16mf2(__riscv_vmul_vx_u8mf4(tq, 9, vl), 3, vl), 8, vl); + vuint16mf2_t tq3 = __riscv_vsrl_vx_u16mf2(__riscv_vwmulu_vx_u16mf2(__riscv_vmul_vx_u8mf4(tq, 27, vl), 3, vl), 8, vl); + vuint16mf2_t tq4 = __riscv_vsrl_vx_u16mf2(__riscv_vwmulu_vx_u16mf2(__riscv_vmul_vx_u8mf4(tq, 81, vl), 3, vl), 8, vl); + + vint16mf2_t q80 = __riscv_vwcvt_x_x_v_i16mf2(__riscv_vle8_v_i8mf4(y[i].qs + 160, vl), vl); + vint16mf2_t q81 = __riscv_vwcvt_x_x_v_i16mf2(__riscv_vle8_v_i8mf4(y[i].qs + 176, vl), vl); + vint16mf2_t q82 = __riscv_vwcvt_x_x_v_i16mf2(__riscv_vle8_v_i8mf4(y[i].qs + 192, vl), vl); + vint16mf2_t q83 = __riscv_vwcvt_x_x_v_i16mf2(__riscv_vle8_v_i8mf4(y[i].qs + 208, vl), vl); + vint16mf2_t q84 = __riscv_vwcvt_x_x_v_i16mf2(__riscv_vle8_v_i8mf4(y[i].qs + 224, vl), vl); + + vint16mf2_t sum0 = __riscv_vmul_vv_i16mf2(__riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vsub_vx_u16mf2(tq0, 1, vl)), q80, vl); + vint16mf2_t sum1 = __riscv_vmul_vv_i16mf2(__riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vsub_vx_u16mf2(tq1, 1, vl)), q81, vl); + vint16mf2_t sum2 = __riscv_vmul_vv_i16mf2(__riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vsub_vx_u16mf2(tq2, 1, vl)), q82, vl); + vint16mf2_t sum3 = __riscv_vmul_vv_i16mf2(__riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vsub_vx_u16mf2(tq3, 1, vl)), q83, vl); + vint16mf2_t sum4 = __riscv_vmul_vv_i16mf2(__riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vsub_vx_u16mf2(tq4, 1, vl)), q84, vl); + + vint16mf2_t sumi0 = __riscv_vadd_vv_i16mf2(sum0, sum1, vl); + vint16mf2_t sumi1 = __riscv_vadd_vv_i16mf2(sum2, sum3, vl); + suml2 = __riscv_vadd_vv_i16mf2(sum4, __riscv_vadd_vv_i16mf2(sumi0, sumi1, vl), vl); + } + + // Third loop. + vint16mf2_t suml3; + { + const int vl = 16; + + uint32_t qh; + memcpy(&qh, &x[i].qh[0], 4); + // Prevent fusion with vmv. + __asm__ __volatile__("" : "+r"(qh)); + vuint8mf4_t tq = __riscv_vlmul_trunc_v_u8mf2_u8mf4(__riscv_vreinterpret_v_u32mf2_u8mf2(__riscv_vmv_v_x_u32mf2(qh, vl / 4))); + + vuint8mf4_t p = __riscv_vle8_v_u8mf4(pow, vl); + + vuint16mf2_t tq0 = __riscv_vsrl_vx_u16mf2(__riscv_vwmulu_vx_u16mf2(__riscv_vmul_vv_u8mf4(tq, p, vl), 3, vl), 8, vl); + + vint16mf2_t q80 = __riscv_vwcvt_x_x_v_i16mf2(__riscv_vle8_v_i8mf4(y[i].qs + 240, vl), vl); + + suml3 = __riscv_vmul_vv_i16mf2(__riscv_vreinterpret_v_u16mf2_i16mf2(__riscv_vsub_vx_u16mf2(tq0, 1, vl)), q80, vl); + } + + vint32m1_t sum = __riscv_vwredsum_vs_i16m1_i32m1(suml1, __riscv_vmv_v_x_i32m1(0, 1), 32); + sum = __riscv_vwredsum_vs_i16mf2_i32m1(__riscv_vadd_vv_i16mf2(suml2, suml3, 16), sum, 16); + sumf += __riscv_vmv_x_s_i32m1_i32(sum) * y[i].d * GGML_CPU_FP16_TO_FP32(x[i].d); + } + + *s = sumf; +} #endif void ggml_vec_dot_tq1_0_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_tq1_0_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); @@ -4143,8 +6189,8 @@ void ggml_vec_dot_tq1_0_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const vo case 256: ggml_vec_dot_tq1_0_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; - default: - ggml_vec_dot_tq1_0_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); + default: // 512 and above + ggml_vec_dot_tq1_0_q8_K_vl512(n, s, bs, vx, bx, vy, by, nrc); break; } #else @@ -4152,7 +6198,7 @@ void ggml_vec_dot_tq1_0_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const vo #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_tq2_0_q8_K_vl128(const int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(n % QK_K == 0); assert(nrc == 1); @@ -4308,24 +6354,21 @@ static NOINLINE void ggml_vec_dot_tq2_0_q8_K_vl256(int n, float * GGML_RESTRICT #endif void ggml_vec_dot_tq2_0_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_tq2_0_q8_K_vl128(n, s, bs, vx, bx, vy, by, nrc); break; - case 256: + default: // 256 and above ggml_vec_dot_tq2_0_q8_K_vl256(n, s, bs, vx, bx, vy, by, nrc); break; - default: - ggml_vec_dot_tq2_0_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); - break; } #else ggml_vec_dot_tq2_0_q8_K_generic(n, s, bs, vx, bx, vy, by, nrc); #endif } -#if defined __riscv_v_intrinsic +#if defined __riscv_v static NOINLINE void ggml_vec_dot_mxfp4_q8_0_vl128(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { assert(nrc == 1); UNUSED(nrc); @@ -4440,7 +6483,7 @@ static NOINLINE void ggml_vec_dot_mxfp4_q8_0_vl256(int n, float * GGML_RESTRICT #endif void ggml_vec_dot_mxfp4_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, size_t bx, const void * GGML_RESTRICT vy, size_t by, int nrc) { -#if defined __riscv_v_intrinsic +#if defined __riscv_v switch (__riscv_vlenb() * 8) { case 128: ggml_vec_dot_mxfp4_q8_0_vl128(n, s, bs, vx, bx, vy, by, nrc); diff --git a/ggml/src/ggml-cpu/arch/x86/quants.c b/ggml/src/ggml-cpu/arch/x86/quants.c index 0a3e071e57c..94b19b82bbc 100644 --- a/ggml/src/ggml-cpu/arch/x86/quants.c +++ b/ggml/src/ggml-cpu/arch/x86/quants.c @@ -2300,9 +2300,8 @@ void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi #if defined __AVX2__ - const __m256i m4 = _mm256_set1_epi8(0xF); - const __m256i m2 = _mm256_set1_epi8(3); - const __m256i m32s = _mm256_set1_epi8(32); + const __m256i m3 = _mm256_set1_epi8(3); + const __m256i m15 = _mm256_set1_epi8(15); __m256 acc = _mm256_setzero_ps(); @@ -2314,53 +2313,45 @@ void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi const uint8_t * GGML_RESTRICT qh = x[i].qh; const int8_t * GGML_RESTRICT q8 = y[i].qs; + const __m256i q8sums = _mm256_loadu_si256((const __m256i*)y[i].bsums); const __m128i scales = _mm_loadu_si128((const __m128i*)x[i].scales); + const __m256i scales_16 = _mm256_cvtepi8_epi16(scales); + const __m256i q8sclsub = _mm256_slli_epi32(_mm256_madd_epi16(q8sums, scales_16), 5); __m256i sumi = _mm256_setzero_si256(); int is = 0; for (int j = 0; j < QK_K/128; ++j) { - - const __m128i scale_0 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 0)); - const __m128i scale_1 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 1)); - const __m128i scale_2 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 2)); - const __m128i scale_3 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 3)); - is += 4; - const __m256i q4bits1 = _mm256_loadu_si256((const __m256i*)q4); q4 += 32; const __m256i q4bits2 = _mm256_loadu_si256((const __m256i*)q4); q4 += 32; const __m256i q4bitsH = _mm256_loadu_si256((const __m256i*)qh); qh += 32; - const __m256i q4h_0 = _mm256_slli_epi16(_mm256_and_si256(q4bitsH, m2), 4); - const __m256i q4h_1 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 2), m2), 4); - const __m256i q4h_2 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 4), m2), 4); - const __m256i q4h_3 = _mm256_slli_epi16(_mm256_and_si256(_mm256_srli_epi16(q4bitsH, 6), m2), 4); + const __m256i q4h_0 = _mm256_slli_epi16(_mm256_and_si256(q4bitsH, m3), 4); + const __m256i q4h_1 = _mm256_slli_epi16(_mm256_and_si256(q4bitsH, _mm256_set1_epi8(12)), 2); + const __m256i q4h_2 = _mm256_and_si256(q4bitsH, _mm256_set1_epi8(48)); + const __m256i q4h_3 = _mm256_srli_epi16(_mm256_and_si256(q4bitsH, _mm256_set1_epi8(-64)), 2); - const __m256i q4_0 = _mm256_or_si256(_mm256_and_si256(q4bits1, m4), q4h_0); - const __m256i q4_1 = _mm256_or_si256(_mm256_and_si256(q4bits2, m4), q4h_1); - const __m256i q4_2 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits1, 4), m4), q4h_2); - const __m256i q4_3 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits2, 4), m4), q4h_3); + const __m256i q4_0 = _mm256_or_si256(_mm256_and_si256(q4bits1, m15), q4h_0); + const __m256i q4_1 = _mm256_or_si256(_mm256_and_si256(q4bits2, m15), q4h_1); + const __m256i q4_2 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits1, 4), m15), q4h_2); + const __m256i q4_3 = _mm256_or_si256(_mm256_and_si256(_mm256_srli_epi16(q4bits2, 4), m15), q4h_3); const __m256i q8_0 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; const __m256i q8_1 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; const __m256i q8_2 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; const __m256i q8_3 = _mm256_loadu_si256((const __m256i*)q8); q8 += 32; - __m256i q8s_0 = _mm256_maddubs_epi16(m32s, q8_0); - __m256i q8s_1 = _mm256_maddubs_epi16(m32s, q8_1); - __m256i q8s_2 = _mm256_maddubs_epi16(m32s, q8_2); - __m256i q8s_3 = _mm256_maddubs_epi16(m32s, q8_3); - __m256i p16_0 = _mm256_maddubs_epi16(q4_0, q8_0); __m256i p16_1 = _mm256_maddubs_epi16(q4_1, q8_1); __m256i p16_2 = _mm256_maddubs_epi16(q4_2, q8_2); __m256i p16_3 = _mm256_maddubs_epi16(q4_3, q8_3); - p16_0 = _mm256_sub_epi16(p16_0, q8s_0); - p16_1 = _mm256_sub_epi16(p16_1, q8s_1); - p16_2 = _mm256_sub_epi16(p16_2, q8s_2); - p16_3 = _mm256_sub_epi16(p16_3, q8s_3); + const __m128i scale_0 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 0)); + const __m128i scale_1 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 1)); + const __m128i scale_2 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 2)); + const __m128i scale_3 = _mm_shuffle_epi8(scales, get_scale_shuffle(is + 3)); + is += 4; p16_0 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_0), p16_0); p16_1 = _mm256_madd_epi16(_mm256_cvtepi8_epi16(scale_1), p16_1); @@ -2372,6 +2363,7 @@ void ggml_vec_dot_q6_K_q8_K(int n, float * GGML_RESTRICT s, size_t bs, const voi } + sumi = _mm256_sub_epi32(sumi, q8sclsub); acc = _mm256_fmadd_ps(_mm256_broadcast_ss(&d), _mm256_cvtepi32_ps(sumi), acc); } diff --git a/ggml/src/ggml-cpu/llamafile/sgemm.cpp b/ggml/src/ggml-cpu/llamafile/sgemm.cpp index 34e320e2f50..e13828e3be6 100644 --- a/ggml/src/ggml-cpu/llamafile/sgemm.cpp +++ b/ggml/src/ggml-cpu/llamafile/sgemm.cpp @@ -2321,6 +2321,9 @@ class tinyBLAS_Q0_PPC { } void matmul(int64_t m, int64_t n) { + #if defined(_AIX) || defined(__BIG_ENDIAN__) + mnpack(0, m, 0, n); + #else const int64_t mc = 64; const int64_t kc = 64; int64_t nc = 64; @@ -2334,7 +2337,6 @@ class tinyBLAS_Q0_PPC { } else { n_aligned = (n / 64) * 64; } - if (n_aligned > 0) { if (n_aligned % 64 == 0) nc = 64; else if (n_aligned == n) nc = n; @@ -2352,6 +2354,7 @@ class tinyBLAS_Q0_PPC { } else { mnpack(0, m, 0, n); } + #endif } private: @@ -3191,12 +3194,16 @@ class tinyBLAS_PPC { } void matmul(int64_t m, int64_t n) { + #if defined(_AIX) || defined(__BIG_ENDIAN__) + mnpack(0, m, 0, n); + #else int64_t mc = 256; int64_t nc = 256; int64_t kc = 256; if (m % mc == 0 && n % nc == 0 && k % kc == 0) { matmul_tiled(m, n, mc, nc, kc); } else { mnpack(0, m, 0, n); } + #endif } private: diff --git a/ggml/src/ggml-cpu/vec.h b/ggml/src/ggml-cpu/vec.h index a0375a28de0..bcd68da9aa9 100644 --- a/ggml/src/ggml-cpu/vec.h +++ b/ggml/src/ggml-cpu/vec.h @@ -1036,12 +1036,12 @@ inline static float ggml_gelu_quick_f32(float x) { return x*(1.0f/(1.0f+expf(GELU_QUICK_COEF*x))); } -//inline static void ggml_vec_gelu_quick_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { -// const uint16_t * i16 = (const uint16_t *) x; -// for (int i = 0; i < n; ++i) { -// y[i] = ggml_table_gelu_quick_f16[i16[i]]; -// } -//} +inline static void ggml_vec_gelu_quick_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { + const uint16_t * i16 = (const uint16_t *) x; + for (int i = 0; i < n; ++i) { + y[i] = ggml_table_gelu_quick_f16[i16[i]]; + } +} #ifdef GGML_GELU_QUICK_FP16 inline static void ggml_vec_gelu_quick_f32(const int n, float * y, const float * x) { @@ -1060,13 +1060,6 @@ inline static void ggml_vec_gelu_quick_f32(const int n, float * y, const float * } #endif -inline static void ggml_vec_gelu_quick_f16(const int n, ggml_fp16_t * y, const ggml_fp16_t * x) { - for (int i = 0; i < n; ++i) { - float v = GGML_CPU_FP16_TO_FP32(x[i]); - y[i] = GGML_CPU_FP32_TO_FP16(v*(1.0f/(1.0f+expf(GELU_QUICK_COEF*v)))); - } -} - // Sigmoid Linear Unit (SiLU) function inline static float ggml_silu_f32(float x) { return x/(1.0f + expf(-x)); diff --git a/ggml/src/ggml-cuda/common.cuh b/ggml/src/ggml-cuda/common.cuh index 3aec1742ee1..10817505d9f 100644 --- a/ggml/src/ggml-cuda/common.cuh +++ b/ggml/src/ggml-cuda/common.cuh @@ -830,6 +830,18 @@ static __device__ __forceinline__ float ggml_cuda_ue4m3_to_fp32(uint8_t x) { #endif // defined(GGML_USE_HIP) && defined(CDNA3) && defined(FP8_AVAILABLE) && HIP_VERSION >= 60200000 } +static __device__ __forceinline__ uint8_t ggml_cuda_fp32_to_ue4m3(float x) { +#if defined(BLACKWELL_MMA_AVAILABLE) // This is used for NVFP4 subblock scale quantizations only + if (!(x > 0.0f)) { + return 0; + } + const __nv_fp8_e4m3 xf(x); + return xf.__x; +#else + NO_DEVICE_CODE; // Used only for NVFP4 Scales for Activations, only for Blackwell +#endif // defined(BLACKWELL_MMA_AVAILABLE) +} + __device__ __forceinline__ uint8_t ggml_cuda_float_to_fp4_e2m1(float x, float e) { const uint8_t sign_bit = (x < 0.0f) << 3; float ax = fabsf(x) * e; diff --git a/ggml/src/ggml-cuda/concat.cu b/ggml/src/ggml-cuda/concat.cu index e9ffd274b99..102f944f924 100644 --- a/ggml/src/ggml-cuda/concat.cu +++ b/ggml/src/ggml-cuda/concat.cu @@ -1,96 +1,79 @@ #include "concat.cuh" // contiguous kernels -static __global__ void concat_f32_dim0(const float * x, const float * y, float * dst, const int ne0, const int ne00) { - int nidx = threadIdx.x + blockIdx.x * blockDim.x; - if (nidx >= ne0) { - return; - } - - int offset_dst = - nidx + - blockIdx.y * ne0 + - blockIdx.z * ne0 * gridDim.y; - - if (nidx < ne00) { // src0 - int offset_src = - nidx + - blockIdx.y * ne00 + - blockIdx.z * ne00 * gridDim.y; - dst[offset_dst] = x[offset_src]; - } else { - int offset_src = - (nidx - ne00) + - blockIdx.y * (ne0 - ne00) + - blockIdx.z * (ne0 - ne00) * gridDim.y; - dst[offset_dst] = y[offset_src]; - } -} - -static __global__ void concat_f32_dim1(const float * x, const float * y, float * dst, const int ne0, const int ne01) { - int nidx = threadIdx.x + blockIdx.x * blockDim.x; - if (nidx >= ne0) { - return; - } +template <int dim> +static __global__ void __launch_bounds__(CUDA_CONCAT_BLOCK_SIZE) concat_f32_cont(const float * x, + const float * y, + float * dst, + int64_t ne00, + int64_t ne01, + int64_t ne02, + int64_t ne0, + int64_t ne1, + int64_t ne2) { + static_assert(dim >= 0 && dim <= 2, "dim must be in [0, 2]"); + + const int64_t n = ne0 * ne1 * ne2; + + for (int64_t i = (int64_t) blockIdx.x * blockDim.x + threadIdx.x; i < n; i += (int64_t) blockDim.x * gridDim.x) { + if constexpr (dim == 0) { + const int64_t row = i / ne0; + const int64_t i0 = i - row * ne0; + + if (i0 < ne00) { + dst[i] = x[row * ne00 + i0]; + } else { + dst[i] = y[row * (ne0 - ne00) + (i0 - ne00)]; + } + } else if constexpr (dim == 1) { + const int64_t dst_plane = ne0 * ne1; + const int64_t src0_plane = ne0 * ne01; + const int64_t src1_plane = dst_plane - src0_plane; + const int64_t i2 = i / dst_plane; + const int64_t i01 = i - i2 * dst_plane; + + if (i01 < src0_plane) { + dst[i] = x[i2 * src0_plane + i01]; + } else { + dst[i] = y[i2 * src1_plane + (i01 - src0_plane)]; + } + } else { + const int64_t src0_size = ne0 * ne1 * ne02; - int offset_dst = - nidx + - blockIdx.y * ne0 + - blockIdx.z * ne0 * gridDim.y; - - if (blockIdx.y < (unsigned)ne01) { // src0 - int offset_src = - nidx + - blockIdx.y * ne0 + - blockIdx.z * ne0 * ne01; - dst[offset_dst] = x[offset_src]; - } else { - int offset_src = - nidx + - (blockIdx.y - ne01) * ne0 + - blockIdx.z * ne0 * (gridDim.y - ne01); - dst[offset_dst] = y[offset_src]; + if (i < src0_size) { + dst[i] = x[i]; + } else { + dst[i] = y[i - src0_size]; + } + } } } -static __global__ void concat_f32_dim2(const float * x, const float * y, float * dst, const int ne0, const int ne02) { - int nidx = threadIdx.x + blockIdx.x * blockDim.x; - if (nidx >= ne0) { - return; - } - - int offset_dst = - nidx + - blockIdx.y * ne0 + - blockIdx.z * ne0 * gridDim.y; - - if (blockIdx.z < (unsigned)ne02) { // src0 - int offset_src = - nidx + - blockIdx.y * ne0 + - blockIdx.z * ne0 * gridDim.y; - dst[offset_dst] = x[offset_src]; - } else { - int offset_src = - nidx + - blockIdx.y * ne0 + - (blockIdx.z - ne02) * ne0 * gridDim.y; - dst[offset_dst] = y[offset_src]; - } -} +static void concat_f32_cuda(const float * x, + const float * y, + float * dst, + int64_t ne00, + int64_t ne01, + int64_t ne02, + int64_t ne0, + int64_t ne1, + int64_t ne2, + int dim, + cudaStream_t stream) { + const int64_t n = ne0 * ne1 * ne2; + const int num_blocks = (n + CUDA_CONCAT_BLOCK_SIZE - 1) / CUDA_CONCAT_BLOCK_SIZE; -static void concat_f32_cuda(const float * x, const float * y, float * dst, int ne00, int ne01, int ne02, int ne0, int ne1, int ne2, int dim, cudaStream_t stream) { - int num_blocks = (ne0 + CUDA_CONCAT_BLOCK_SIZE - 1) / CUDA_CONCAT_BLOCK_SIZE; - dim3 gridDim(num_blocks, ne1, ne2); if (dim == 0) { - concat_f32_dim0<<<gridDim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne0, ne00); + concat_f32_cont<0> + <<<num_blocks, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne00, ne01, ne02, ne0, ne1, ne2); return; } if (dim == 1) { - concat_f32_dim1<<<gridDim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne0, ne01); + concat_f32_cont<1> + <<<num_blocks, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne00, ne01, ne02, ne0, ne1, ne2); return; } - concat_f32_dim2<<<gridDim, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne0, ne02); + concat_f32_cont<2><<<num_blocks, CUDA_CONCAT_BLOCK_SIZE, 0, stream>>>(x, y, dst, ne00, ne01, ne02, ne0, ne1, ne2); } // non-contiguous kernel (slow) diff --git a/ggml/src/ggml-cuda/fattn-mma-f16.cuh b/ggml/src/ggml-cuda/fattn-mma-f16.cuh index e185449d491..3f01e858de7 100644 --- a/ggml/src/ggml-cuda/fattn-mma-f16.cuh +++ b/ggml/src/ggml-cuda/fattn-mma-f16.cuh @@ -66,6 +66,9 @@ static constexpr __host__ __device__ fattn_mma_config ggml_cuda_fattn_mma_get_co GGML_CUDA_FATTN_MMA_CONFIG_CASE(256, 256, 32, 128, 2, 32, 128, 128, 128, 2, true); GGML_CUDA_FATTN_MMA_CONFIG_CASE(256, 256, 64, 128, 2, 32, 128, 128, 128, 2, true); + GGML_CUDA_FATTN_MMA_CONFIG_CASE(320, 256, 32, 128, 2, 32, 128, 128, 128, 1, false); + GGML_CUDA_FATTN_MMA_CONFIG_CASE(320, 256, 64, 256, 1, 32, 128, 128, 128, 1, false); + GGML_CUDA_FATTN_MMA_CONFIG_CASE(512, 512, 8, 64, 4, 32, 256, 256, 128, 1, false); GGML_CUDA_FATTN_MMA_CONFIG_CASE(512, 512, 16, 64, 4, 32, 256, 256, 128, 1, false); GGML_CUDA_FATTN_MMA_CONFIG_CASE(512, 512, 32, 128, 2, 32, 128, 128, 128, 1, false); @@ -85,6 +88,9 @@ static constexpr __host__ __device__ fattn_mma_config ggml_cuda_fattn_mma_get_co GGML_CUDA_FATTN_MMA_CONFIG_CASE(256, 256, 32, 128, 2, 64, 128, 128, 64, 2, true); GGML_CUDA_FATTN_MMA_CONFIG_CASE(256, 256, 64, 128, 2, 64, 128, 128, 64, 2, true); + GGML_CUDA_FATTN_MMA_CONFIG_CASE(320, 256, 32, 128, 2, 32, 128, 128, 128, 1, false); + GGML_CUDA_FATTN_MMA_CONFIG_CASE(320, 256, 64, 256, 1, 32, 128, 128, 128, 1, false); + GGML_CUDA_FATTN_MMA_CONFIG_CASE(512, 512, 8, 64, 4, 32, 96, 64, 128, 1, false); GGML_CUDA_FATTN_MMA_CONFIG_CASE(512, 512, 16, 64, 4, 32, 96, 64, 128, 1, false); GGML_CUDA_FATTN_MMA_CONFIG_CASE(512, 512, 32, 128, 2, 32, 128, 128, 128, 1, false); @@ -118,6 +124,9 @@ static constexpr __host__ __device__ fattn_mma_config ggml_cuda_fattn_mma_get_co GGML_CUDA_FATTN_MMA_CONFIG_CASE(256, 256, 32, 128, 2, 64, 128, 128, 64, 2, true); GGML_CUDA_FATTN_MMA_CONFIG_CASE(256, 256, 64, 128, 2, 64, 128, 128, 64, 2, true); + GGML_CUDA_FATTN_MMA_CONFIG_CASE(320, 256, 32, 128, 2, 64, 160, 128, 64, 2, true); + GGML_CUDA_FATTN_MMA_CONFIG_CASE(320, 256, 64, 128, 2, 64, 160, 128, 64, 2, false); + GGML_CUDA_FATTN_MMA_CONFIG_CASE(512, 512, 16, 64, 4, 32, 128, 128, 128, 1, false); GGML_CUDA_FATTN_MMA_CONFIG_CASE(512, 512, 32, 128, 2, 32, 128, 128, 128, 1, false); GGML_CUDA_FATTN_MMA_CONFIG_CASE(512, 512, 64, 256, 1, 32, 128, 128, 128, 1, false); @@ -1217,7 +1226,7 @@ static __device__ __forceinline__ void flash_attn_ext_f16_process_tile( float KQ_max_scale[cols_per_thread]; #pragma unroll for (int col = 0; col < cols_per_thread; ++col) { - const int jc = cols_per_warp == 8 ? T_C_KQ::get_j(col) : T_C_KQ::get_i(2*col); + const int jc = (threadIdx.y/np)*cols_per_warp + (cols_per_warp == 8 ? T_C_KQ::get_j(col) : T_C_KQ::get_i(2*col)); const float sink = sinks_f[jc % ncols2]; const float KQ_max_new = fmaxf(KQ_max[col], sink); @@ -1825,6 +1834,10 @@ extern DECL_FATTN_MMA_F16_CASE(576, 512, 1, 16); extern DECL_FATTN_MMA_F16_CASE(576, 512, 2, 16); extern DECL_FATTN_MMA_F16_CASE(576, 512, 4, 16); +// Mistral Small 4 (DKQ=320, DV=256), GQA=32-only build: +extern DECL_FATTN_MMA_F16_CASE(320, 256, 1, 32); +extern DECL_FATTN_MMA_F16_CASE(320, 256, 2, 32); + // For GLM 4.7 Flash extern DECL_FATTN_MMA_F16_CASE(576, 512, 4, 4); extern DECL_FATTN_MMA_F16_CASE(576, 512, 8, 4); diff --git a/ggml/src/ggml-cuda/fattn-tile.cu b/ggml/src/ggml-cuda/fattn-tile.cu index 25b16e83cac..d60634cc0e9 100644 --- a/ggml/src/ggml-cuda/fattn-tile.cu +++ b/ggml/src/ggml-cuda/fattn-tile.cu @@ -38,6 +38,10 @@ void ggml_cuda_flash_attn_ext_tile(ggml_backend_cuda_context & ctx, ggml_tensor GGML_ASSERT(V->ne[0] == K->ne[0]); ggml_cuda_flash_attn_ext_tile_case<256, 256>(ctx, dst); } break; + case 320: { + GGML_ASSERT(V->ne[0] == 256); + ggml_cuda_flash_attn_ext_tile_case<320, 256>(ctx, dst); + } break; case 512: { GGML_ASSERT(V->ne[0] == K->ne[0]); ggml_cuda_flash_attn_ext_tile_case<512, 512>(ctx, dst); diff --git a/ggml/src/ggml-cuda/fattn-tile.cuh b/ggml/src/ggml-cuda/fattn-tile.cuh index 26721cc4c7d..928b856f9d2 100644 --- a/ggml/src/ggml-cuda/fattn-tile.cuh +++ b/ggml/src/ggml-cuda/fattn-tile.cuh @@ -68,6 +68,8 @@ static constexpr __host__ __device__ uint32_t ggml_cuda_fattn_tile_get_config_nv GGML_CUDA_FATTN_TILE_CONFIG_CASE(256, 256, 16, 256, 2, 64, 64) GGML_CUDA_FATTN_TILE_CONFIG_CASE(256, 256, 32, 256, 2, 64, 64) + GGML_CUDA_FATTN_TILE_CONFIG_CASE(320, 256, 32, 256, 2, 64, 64) + GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 4, 128, 2, 64, 64) GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 8, 256, 2, 64, 64) GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 16, 256, 2, 64, 64) @@ -128,6 +130,8 @@ static constexpr __host__ __device__ uint32_t ggml_cuda_fattn_tile_get_config_nv GGML_CUDA_FATTN_TILE_CONFIG_CASE(256, 256, 16, 256, 2, 32, 128) GGML_CUDA_FATTN_TILE_CONFIG_CASE(256, 256, 32, 256, 2, 32, 64) + GGML_CUDA_FATTN_TILE_CONFIG_CASE(320, 256, 32, 256, 2, 32, 64) + GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 4, 128, 2, 32, 64) GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 8, 256, 2, 32, 64) GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 16, 256, 2, 32, 64) @@ -195,6 +199,8 @@ static constexpr __host__ __device__ uint32_t ggml_cuda_fattn_tile_get_config_am GGML_CUDA_FATTN_TILE_CONFIG_CASE(256, 256, 16, 256, 2, 32, 128) GGML_CUDA_FATTN_TILE_CONFIG_CASE(256, 256, 32, 256, 2, 32, 128) + GGML_CUDA_FATTN_TILE_CONFIG_CASE(320, 256, 32, 512, 1, 128, 64) + GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 4, 128, 2, 64, 64) GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 8, 256, 2, 64, 64) GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 16, 256, 2, 64, 64) @@ -264,6 +270,8 @@ static constexpr __host__ __device__ uint32_t ggml_cuda_fattn_tile_get_config_am GGML_CUDA_FATTN_TILE_CONFIG_CASE(256, 256, 16, 256, 5, 32, 256) GGML_CUDA_FATTN_TILE_CONFIG_CASE(256, 256, 32, 256, 3, 64, 128) + GGML_CUDA_FATTN_TILE_CONFIG_CASE(320, 256, 32, 256, 2, 128, 64) + GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 4, 128, 2, 64, 64) GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 8, 256, 2, 64, 64) GGML_CUDA_FATTN_TILE_CONFIG_CASE(512, 512, 16, 256, 4, 64, 64) @@ -1144,14 +1152,16 @@ static void launch_fattn_tile_switch_ncols1(ggml_backend_cuda_context & ctx, ggm } } - if (Q->ne[1] > 8/ncols2) { - constexpr int cols_per_block = 16; - const int nwarps = ggml_cuda_fattn_tile_get_nthreads (DKQ, DV, cols_per_block, cc) / warp_size; - const int nbatch_fa = ggml_cuda_fattn_tile_get_nbatch_fa(DKQ, DV, cols_per_block, cc); - fattn_kernel_t fattn_kernel = flash_attn_tile<DKQ, DV, cols_per_block/ncols2, ncols2, use_logit_softcap>; - launch_fattn<DV, cols_per_block/ncols2, ncols2> - (ctx, dst, fattn_kernel, nwarps, nbytes_shared, nbatch_fa, true, true, false, warp_size); - return; + if constexpr (ncols2 <= 16) { + if (Q->ne[1] > 8/ncols2) { + constexpr int cols_per_block = 16; + const int nwarps = ggml_cuda_fattn_tile_get_nthreads (DKQ, DV, cols_per_block, cc) / warp_size; + const int nbatch_fa = ggml_cuda_fattn_tile_get_nbatch_fa(DKQ, DV, cols_per_block, cc); + fattn_kernel_t fattn_kernel = flash_attn_tile<DKQ, DV, cols_per_block/ncols2, ncols2, use_logit_softcap>; + launch_fattn<DV, cols_per_block/ncols2, ncols2> + (ctx, dst, fattn_kernel, nwarps, nbytes_shared, nbatch_fa, true, true, false, warp_size); + return; + } } if constexpr (ncols2 <= 8) { @@ -1210,6 +1220,14 @@ static void launch_fattn_tile_switch_ncols2(ggml_backend_cuda_context & ctx, ggm const int gqa_limit = nvidia && gqa_ratio <= 4 && DV <= 256 ? 16 : INT_MAX; const bool use_gqa_opt = mask && max_bias == 0.0f && Q->ne[1] <= gqa_limit && K->ne[1] % FATTN_KQ_STRIDE == 0; + if constexpr (DKQ == 320) { // Mistral Small 4 + if (use_gqa_opt && gqa_ratio % 32 == 0) { + launch_fattn_tile_switch_ncols1<DKQ, DV, 32, use_logit_softcap>(ctx, dst); + return; + } + GGML_ABORT("flash-attn tile (320/256): expected GQA ratio multiple of 32"); + } + if constexpr (DKQ == 576) { if (use_gqa_opt && gqa_ratio % 16 == 0) { launch_fattn_tile_switch_ncols1<DKQ, DV, 16, use_logit_softcap>(ctx, dst); @@ -1221,7 +1239,7 @@ static void launch_fattn_tile_switch_ncols2(ggml_backend_cuda_context & ctx, ggm } } - if constexpr (DKQ <= 512) { + if constexpr (DKQ <= 512 && DKQ != 320) { if (use_gqa_opt && gqa_ratio % 8 == 0) { launch_fattn_tile_switch_ncols1<DKQ, DV, 8, use_logit_softcap>(ctx, dst); return; @@ -1275,5 +1293,6 @@ extern DECL_FATTN_TILE_CASE( 96, 96); extern DECL_FATTN_TILE_CASE(112, 112); extern DECL_FATTN_TILE_CASE(128, 128); extern DECL_FATTN_TILE_CASE(256, 256); +extern DECL_FATTN_TILE_CASE(320, 256); extern DECL_FATTN_TILE_CASE(512, 512); extern DECL_FATTN_TILE_CASE(576, 512); diff --git a/ggml/src/ggml-cuda/fattn.cu b/ggml/src/ggml-cuda/fattn.cu index ea6607cd337..8256591b21d 100644 --- a/ggml/src/ggml-cuda/fattn.cu +++ b/ggml/src/ggml-cuda/fattn.cu @@ -143,6 +143,22 @@ static void ggml_cuda_flash_attn_ext_mma_f16(ggml_backend_cuda_context & ctx, gg GGML_ASSERT(V->ne[0] == 256); ggml_cuda_flash_attn_ext_mma_f16_switch_ncols2<256, 256>(ctx, dst); break; + case 320: + // For Mistral Small 4, go straight to the ncols1 switch (ncols2=32-only build). + GGML_ASSERT(V->ne[0] == 256); + { + float max_bias = 0.0f; + memcpy(&max_bias, (const float *) KQV->op_params + 1, sizeof(float)); + + const bool use_gqa_opt = mask && max_bias == 0.0f; + GGML_ASSERT(use_gqa_opt); + GGML_ASSERT(Q->ne[2] % K->ne[2] == 0); + const int gqa_ratio = Q->ne[2] / K->ne[2]; + GGML_ASSERT(gqa_ratio % 32 == 0); + + ggml_cuda_flash_attn_ext_mma_f16_switch_ncols1<320, 256, 32>(ctx, dst); + } + break; case 512: GGML_ASSERT(V->ne[0] == 512); ggml_cuda_flash_attn_ext_mma_f16_switch_ncols2<512, 512>(ctx, dst); @@ -352,6 +368,14 @@ static best_fattn_kernel ggml_cuda_get_best_fattn_kernel(const int device, const return BEST_FATTN_KERNEL_NONE; } break; + case 320: + if (V->ne[0] != 256 || !gqa_opt_applies) { + return BEST_FATTN_KERNEL_NONE; + } + if (gqa_ratio % 32 != 0) { + return BEST_FATTN_KERNEL_NONE; + } + break; case 512: if (V->ne[0] != K->ne[0]) { return BEST_FATTN_KERNEL_NONE; diff --git a/ggml/src/ggml-cuda/ggml-cuda.cu b/ggml/src/ggml-cuda/ggml-cuda.cu index 1c2c3b4ac69..fd8dd91714c 100644 --- a/ggml/src/ggml-cuda/ggml-cuda.cu +++ b/ggml/src/ggml-cuda/ggml-cuda.cu @@ -3640,6 +3640,357 @@ static bool ggml_cuda_can_fuse(const struct ggml_cgraph * cgraph, return false; } +// try and fuse nodes and return the number of nodes to skip +static int ggml_cuda_try_fuse(ggml_backend_cuda_context * cuda_ctx, ggml_cgraph * cgraph, int i) { + + static bool disable_fusion = getenv("GGML_CUDA_DISABLE_FUSION") != nullptr && std::atoi(getenv("GGML_CUDA_DISABLE_FUSION")); + if (disable_fusion) { + return 0; + } + + ggml_tensor * node = cgraph->nodes[i]; + + //topk-moe + if (cgraph->nodes[i]->op == GGML_OP_UNARY || cgraph->nodes[i]->op == GGML_OP_SOFT_MAX || + cgraph->nodes[i]->op == GGML_OP_ARGSORT) { + ggml_cuda_topk_moe_args args; + const bool can_fuse = ggml_cuda_topk_moe_fusion(cgraph, i, args); + std::vector<ggml_op> ops; + + if (can_fuse) { + const ggml_tensor * logits = node->src[0]; + ggml_tensor * weights = nullptr; + ggml_tensor * ids = nullptr; + const ggml_tensor * bias = nullptr; + const ggml_tensor * clamp = nullptr; + const ggml_tensor * scale = nullptr; + + if (!args.delayed_softmax) { + ggml_op gating_op = args.sigmoid ? GGML_OP_UNARY : GGML_OP_SOFT_MAX; + int out_nodes[2]; // nodes which can't be elided + + if (args.prob_bias) { + bias = cgraph->nodes[i + 2]->src[1]; + ops.insert(ops.end(), { gating_op, GGML_OP_RESHAPE, GGML_OP_ADD, GGML_OP_ARGSORT, GGML_OP_VIEW, + GGML_OP_GET_ROWS }); + out_nodes[0] = i + 4; + ids = cgraph->nodes[i + 4]; + } else { + ops.insert(ops.end(), + { gating_op, GGML_OP_RESHAPE, GGML_OP_ARGSORT, GGML_OP_VIEW, GGML_OP_GET_ROWS }); + out_nodes[0] = i + 3; + ids = cgraph->nodes[i + 3]; + } + + if (args.norm) { + ops.insert(ops.end(), + { GGML_OP_RESHAPE, GGML_OP_SUM_ROWS, GGML_OP_CLAMP, GGML_OP_DIV, GGML_OP_RESHAPE }); + clamp = cgraph->nodes[i + ops.size() - 3]; + } + if (args.scale) { + ops.insert(ops.end(), { GGML_OP_SCALE }); + scale = cgraph->nodes[i + ops.size() - 1]; + } + + weights = cgraph->nodes[i + ops.size() - 1]; + out_nodes[1] = i + ops.size() - 1; + + if (ggml_can_fuse_subgraph(cgraph, i, ops.size(), ops.data(), out_nodes, 2) && + ggml_cuda_should_use_topk_moe(node, logits, weights, ids) && + ggml_cuda_check_fusion_memory_ranges(cgraph, i, ops.size(), out_nodes, 2, /*is_topk_moe=*/true)) { + ggml_cuda_op_topk_moe(*cuda_ctx, logits, weights, ids, clamp, scale, bias, args); + return ops.size() - 1; + } + } else if (!args.norm && !args.prob_bias) { + //special case gpt-oss, no norm, no bias. + ops.insert(ops.end(), { GGML_OP_ARGSORT, GGML_OP_VIEW, GGML_OP_GET_ROWS, GGML_OP_RESHAPE, + GGML_OP_SOFT_MAX, GGML_OP_RESHAPE }); + weights = cgraph->nodes[i + 5]; + ids = cgraph->nodes[i + 1]; + const ggml_tensor * softmax = cgraph->nodes[i + 4]; + + int out_nodes[2] = { i + 1, i + 5 }; + if (ggml_can_fuse_subgraph(cgraph, i, ops.size(), ops.data(), out_nodes, 2) && + ggml_cuda_should_use_topk_moe(softmax, logits, weights, ids) && + ggml_cuda_check_fusion_memory_ranges(cgraph, i, ops.size(), out_nodes, 2, /*is_topk_moe=*/true)) { + ggml_cuda_op_topk_moe(*cuda_ctx, logits, weights, ids, clamp, scale, bias, args); + return ops.size() - 1; + } + } + } + } + + //RoPE + view + set-rows + if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_ROPE, GGML_OP_VIEW, GGML_OP_SET_ROWS }, {})) { + ggml_tensor * rope = cgraph->nodes[i]; + ggml_tensor * set_rows = cgraph->nodes[i + 2]; + + ggml_cuda_op_rope_fused(*cuda_ctx, rope, set_rows); + return 2; + } + + // multi-(add or mul) + if (node->op == GGML_OP_ADD || node->op == GGML_OP_MUL) { + int n_fuse = 0; + ggml_op ops[8]; + std::fill(ops, ops + 8, node->op); + + for (; n_fuse <= 6; ++n_fuse) { + if (!ggml_can_fuse(cgraph, i + n_fuse, ops + n_fuse, 2)) { + break; + } + if (cgraph->nodes[i + n_fuse] != cgraph->nodes[i + n_fuse + 1]->src[0]) { + break; + } + if (!ggml_are_same_layout(cgraph->nodes[i + n_fuse]->src[1], cgraph->nodes[i + n_fuse + 1]->src[1])) { + break; + } + } + + n_fuse++; + + if (n_fuse > 1) { + ggml_tensor fused_node; + memcpy(&fused_node, node, sizeof(ggml_tensor)); + for (int j = 0; j < n_fuse - 1; ++j) { + fused_node.src[j + 2] = cgraph->nodes[i + j + 1]->src[1]; + } + fused_node.data = cgraph->nodes[i + n_fuse - 1]->data; + if (node->op == GGML_OP_ADD) { + ggml_cuda_op_fused_add(*cuda_ctx, &fused_node, n_fuse); + } else { + ggml_cuda_op_fused_mul(*cuda_ctx, &fused_node, n_fuse); + } + return n_fuse - 1; + } + } + + bool fused_mul_mat_vec = false; + int fused_node_count = 0; + + // gate + glu + up + for (ggml_op op : { GGML_OP_MUL_MAT, GGML_OP_MUL_MAT_ID }) { + const ggml_op bias_op = op == GGML_OP_MUL_MAT ? GGML_OP_ADD : GGML_OP_ADD_ID; + + if (ggml_cuda_can_fuse(cgraph, i, { op, bias_op, op, bias_op, GGML_OP_GLU }, {})) { + ggml_tensor * glu = cgraph->nodes[i + 4]; + ggml_tensor * gate_bias_n = glu->src[0]; + ggml_tensor * up_bias_n = glu->src[1]; + + //we don't assume the order for {gate, up}. Instead infer it from the bias tensor + ggml_tensor * gate_n = nullptr; + ggml_tensor * up_n = nullptr; + + if (gate_bias_n->src[0] == cgraph->nodes[i] || gate_bias_n->src[1] == cgraph->nodes[i]) { + gate_n = cgraph->nodes[i]; + up_n = cgraph->nodes[i + 2]; + } else if (gate_bias_n->src[0] == cgraph->nodes[i + 2] || gate_bias_n->src[1] == cgraph->nodes[i + 2]) { + gate_n = cgraph->nodes[i + 2]; + up_n = cgraph->nodes[i]; + } else { + continue; + } + + auto get_bias_tensor = [](const ggml_tensor * bias_node, const ggml_tensor * mul_node, ggml_op op_bias) { + if (op_bias == GGML_OP_ADD) { + if (bias_node->src[0] == mul_node) { + return bias_node->src[1]; + } + if (bias_node->src[1] == mul_node) { + return bias_node->src[0]; + } + return (ggml_tensor *) nullptr; + } + GGML_ASSERT(op_bias == GGML_OP_ADD_ID); + GGML_ASSERT(bias_node->src[0] == mul_node); + return bias_node->src[1]; + }; + + ggml_tensor * up_bias_tensor = get_bias_tensor(up_bias_n, up_n, bias_op); + ggml_tensor * gate_bias_tensor = get_bias_tensor(gate_bias_n, gate_n, bias_op); + + if (!up_bias_tensor || !gate_bias_tensor) { + continue; + } + + // we don't support repeating adds + if (bias_op == GGML_OP_ADD && (!ggml_are_same_shape(gate_bias_n->src[0], gate_bias_n->src[1]) || + !ggml_are_same_shape(up_bias_n->src[0], up_bias_n->src[1]))) { + continue; + } + + const ggml_tensor * src0 = up_n->src[0]; + const ggml_tensor * src1 = up_n->src[1]; + const ggml_tensor * ids = up_n->src[2]; + + if (ggml_cuda_should_fuse_mul_mat_vec_f(up_n)) { + ggml_cuda_mm_fusion_args_host fusion_data{}; + fusion_data.gate = gate_n->src[0]; + fusion_data.x_bias = up_bias_tensor; + fusion_data.gate_bias = gate_bias_tensor; + fusion_data.glu_op = ggml_get_glu_op(glu); + + ggml_cuda_mul_mat_vec_f(*cuda_ctx, src0, src1, ids, glu, &fusion_data); + fused_mul_mat_vec = true; + fused_node_count = 5; + break; + } + + if (ggml_cuda_should_fuse_mul_mat_vec_q(up_n)) { + ggml_cuda_mm_fusion_args_host fusion_data{}; + fusion_data.gate = gate_n->src[0]; + fusion_data.x_bias = up_bias_tensor; + fusion_data.gate_bias = gate_bias_tensor; + fusion_data.glu_op = ggml_get_glu_op(glu); + + ggml_cuda_mul_mat_vec_q(*cuda_ctx, src0, src1, ids, glu, &fusion_data); + fused_mul_mat_vec = true; + fused_node_count = 5; + break; + } + } else if (ggml_cuda_can_fuse(cgraph, i, { op, op, GGML_OP_GLU }, {})) { + ggml_tensor * glu = cgraph->nodes[i + 2]; + ggml_tensor * gate = glu->src[0]; + ggml_tensor * up = glu->src[1]; + + bool ok = (gate == cgraph->nodes[i] && up == cgraph->nodes[i + 1]) || + (gate == cgraph->nodes[i + 1] && up == cgraph->nodes[i]); + + if (!ok) { + continue; + } + + const ggml_tensor * src0 = up->src[0]; + const ggml_tensor * src1 = up->src[1]; + const ggml_tensor * ids = up->src[2]; + + if (ggml_cuda_should_fuse_mul_mat_vec_f(up)) { + ggml_cuda_mm_fusion_args_host fusion_data{}; + fusion_data.gate = gate->src[0]; + fusion_data.glu_op = ggml_get_glu_op(glu); + + ggml_cuda_mul_mat_vec_f(*cuda_ctx, src0, src1, ids, glu, &fusion_data); + fused_mul_mat_vec = true; + fused_node_count = 3; + break; + } + + if (ggml_cuda_should_fuse_mul_mat_vec_q(up)) { + ggml_cuda_mm_fusion_args_host fusion_data{}; + fusion_data.gate = gate->src[0]; + fusion_data.glu_op = ggml_get_glu_op(glu); + + ggml_cuda_mul_mat_vec_q(*cuda_ctx, src0, src1, ids, glu, &fusion_data); + fused_mul_mat_vec = true; + fused_node_count = 3; + break; + } + } + } + + if (fused_mul_mat_vec) { + return fused_node_count - 1; + } + + fused_mul_mat_vec = false; + fused_node_count = 0; + + // gate + add + glu + up + add + for (ggml_op op : { GGML_OP_MUL_MAT, GGML_OP_MUL_MAT_ID }) { + const ggml_op bias_op = op == GGML_OP_MUL_MAT ? GGML_OP_ADD : GGML_OP_ADD_ID; + + if (!ggml_can_fuse(cgraph, i, { op, bias_op })) { + continue; + } + + ggml_tensor * mm_node = cgraph->nodes[i]; + ggml_tensor * bias_node = cgraph->nodes[i + 1]; + + ggml_tensor * bias_tensor = nullptr; + if (bias_op == GGML_OP_ADD) { + if (bias_node->src[0] == mm_node) { + bias_tensor = bias_node->src[1]; + } else if (bias_node->src[1] == mm_node) { + bias_tensor = bias_node->src[0]; + } else { + continue; + } + } else { + if (bias_node->src[0] != mm_node) { + continue; + } + bias_tensor = bias_node->src[1]; + } + + const ggml_tensor * src0 = mm_node->src[0]; + const ggml_tensor * src1 = mm_node->src[1]; + const ggml_tensor * ids = mm_node->src[2]; + + if (bias_op == GGML_OP_ADD_ID && bias_node->src[2] != ids) { + continue; + } + + if (bias_op == GGML_OP_ADD && !ggml_are_same_shape(bias_node->src[0], bias_node->src[1])) { + continue; + } + + ggml_cuda_mm_fusion_args_host fusion_data{}; + fusion_data.x_bias = bias_tensor; + + if (ggml_cuda_should_fuse_mul_mat_vec_f(mm_node)) { + ggml_cuda_mul_mat_vec_f(*cuda_ctx, src0, src1, ids, bias_node, &fusion_data); + fused_mul_mat_vec = true; + fused_node_count = 2; + break; + } + + if (ggml_cuda_should_fuse_mul_mat_vec_q(mm_node)) { + ggml_cuda_mul_mat_vec_q(*cuda_ctx, src0, src1, ids, bias_node, &fusion_data); + fused_mul_mat_vec = true; + fused_node_count = 2; + break; + } + } + + if (fused_mul_mat_vec) { + return fused_node_count - 1; + } + + if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL, GGML_OP_ADD }, {})) { + ggml_cuda_op_rms_norm_fused_add(*cuda_ctx, node, cgraph->nodes[i + 1], cgraph->nodes[i + 2]); + return 2; + } + + if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL }, {})) { + ggml_cuda_op_rms_norm_fused(*cuda_ctx, node, cgraph->nodes[i + 1]); + return 1; + } + + if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_SSM_CONV, GGML_OP_UNARY }, { GGML_UNARY_OP_SILU })) { + ggml_cuda_op_ssm_conv(*cuda_ctx, node, cgraph->nodes[i + 1]); + return 1; + } + + if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_UNARY, GGML_OP_MUL }, { GGML_UNARY_OP_SILU }) || + ggml_cuda_can_fuse(cgraph, i, { GGML_OP_UNARY, GGML_OP_MUL }, { GGML_UNARY_OP_SIGMOID }) || + ggml_cuda_can_fuse(cgraph, i, { GGML_OP_UNARY, GGML_OP_MUL }, { GGML_UNARY_OP_SOFTPLUS })) { + ggml_cuda_op_unary_mul(*cuda_ctx, node, cgraph->nodes[i + 1]); + return 1; + } + + if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_UNARY, GGML_OP_SQR }, { GGML_UNARY_OP_RELU })) { + ggml_cuda_op_relu_sqr(*cuda_ctx, node, cgraph->nodes[i + 1]); + return 1; + } + + if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_SCALE, GGML_OP_UNARY, GGML_OP_SCALE }, { GGML_UNARY_OP_TANH })) { + ggml_cuda_op_softcap(*cuda_ctx, cgraph->nodes[i + 2], node); + return 2; + } + + return 0; +} + static void ggml_cuda_graph_evaluate_and_capture(ggml_backend_cuda_context * cuda_ctx, ggml_cgraph * cgraph, const bool use_cuda_graph, const bool cuda_graph_update_required, const void * graph_key) { bool graph_evaluated_or_captured = false; @@ -3786,355 +4137,11 @@ static void ggml_cuda_graph_evaluate_and_capture(ggml_backend_cuda_context * cud continue; } - // start of fusion operations - static bool disable_fusion = (getenv("GGML_CUDA_DISABLE_FUSION") != nullptr); - if (!disable_fusion) { - ggml_cuda_topk_moe_args args; - - if (cgraph->nodes[i]->op == GGML_OP_UNARY || cgraph->nodes[i]->op == GGML_OP_SOFT_MAX || - cgraph->nodes[i]->op == GGML_OP_ARGSORT) { - const bool can_fuse = ggml_cuda_topk_moe_fusion(cgraph, i, args); - - std::vector<ggml_op> ops; - - if (can_fuse) { - const ggml_tensor * logits = node->src[0]; - ggml_tensor * weights = nullptr; - ggml_tensor * ids = nullptr; - const ggml_tensor * bias = nullptr; - const ggml_tensor * clamp = nullptr; - const ggml_tensor * scale = nullptr; - - if (!args.delayed_softmax) { - ggml_op gating_op = args.sigmoid ? GGML_OP_UNARY : GGML_OP_SOFT_MAX; - int out_nodes[2]; // nodes which can't be elided - - if (args.prob_bias) { - bias = cgraph->nodes[i + 2]->src[1]; - ops.insert(ops.end(), { gating_op, GGML_OP_RESHAPE, GGML_OP_ADD, GGML_OP_ARGSORT, - GGML_OP_VIEW, GGML_OP_GET_ROWS }); - out_nodes[0] = i + 4; - ids = cgraph->nodes[i + 4]; - } else { - ops.insert(ops.end(), { gating_op, GGML_OP_RESHAPE, GGML_OP_ARGSORT, GGML_OP_VIEW, - GGML_OP_GET_ROWS }); - out_nodes[0] = i + 3; - ids = cgraph->nodes[i + 3]; - } - - if (args.norm) { - ops.insert(ops.end(), { GGML_OP_RESHAPE, GGML_OP_SUM_ROWS, GGML_OP_CLAMP, - GGML_OP_DIV, GGML_OP_RESHAPE }); - clamp = cgraph->nodes[i + ops.size() - 3]; - } - if (args.scale) { - ops.insert(ops.end(), { GGML_OP_SCALE }); - scale = cgraph->nodes[i + ops.size() - 1]; - } - - weights = cgraph->nodes[i + ops.size() - 1]; - out_nodes[1] = i + ops.size() - 1; - - if (ggml_can_fuse_subgraph(cgraph, i, ops.size(), ops.data(), out_nodes, 2) && - ggml_cuda_should_use_topk_moe(node, logits, weights, ids) && - ggml_cuda_check_fusion_memory_ranges(cgraph, i, ops.size(), out_nodes, 2, /*is_topk_moe=*/ true)) { - ggml_cuda_op_topk_moe(*cuda_ctx, logits, weights, ids, clamp, scale, bias, args); - i += ops.size() - 1; - continue; - } - } else if (!args.norm && !args.prob_bias) { - //special case gpt-oss, no norm, no bias. - ops.insert(ops.end(), { GGML_OP_ARGSORT, GGML_OP_VIEW, GGML_OP_GET_ROWS, - GGML_OP_RESHAPE, GGML_OP_SOFT_MAX, GGML_OP_RESHAPE }); - weights = cgraph->nodes[i + 5]; - ids = cgraph->nodes[i + 1]; - const ggml_tensor * softmax = cgraph->nodes[i + 4]; - - int out_nodes[2] = { i + 1, i + 5 }; - if (ggml_can_fuse_subgraph(cgraph, i, ops.size(), ops.data(), out_nodes, 2) && - ggml_cuda_should_use_topk_moe(softmax, logits, weights, ids) && - ggml_cuda_check_fusion_memory_ranges(cgraph, i, ops.size(), out_nodes, 2, /*is_topk_moe=*/ true)) { - ggml_cuda_op_topk_moe(*cuda_ctx, logits, weights, ids, clamp, scale, bias, args); - i += ops.size() - 1; - continue; - } - } - } - } - - if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_ROPE, GGML_OP_VIEW, GGML_OP_SET_ROWS }, {})) { - ggml_tensor * rope = cgraph->nodes[i]; - ggml_tensor * set_rows = cgraph->nodes[i + 2]; - - ggml_cuda_op_rope_fused(*cuda_ctx, rope, set_rows); - i += 2; - continue; - } - - if (node->op == GGML_OP_ADD || node->op == GGML_OP_MUL) { - int n_fuse = 0; - ggml_op ops[8]; - std::fill(ops, ops + 8, node->op); - - for (; n_fuse <= 6; ++n_fuse){ - if (!ggml_can_fuse(cgraph, i + n_fuse, ops + n_fuse, 2)) { - break; - } - if (cgraph->nodes[i + n_fuse] != cgraph->nodes[i + n_fuse + 1]->src[0]) { - break; - } - if (!ggml_are_same_layout(cgraph->nodes[i + n_fuse]->src[1], cgraph->nodes[i + n_fuse + 1]->src[1])) { - break; - } - } - - n_fuse++; + int nodes_to_skip = ggml_cuda_try_fuse(cuda_ctx, cgraph, i); - if (n_fuse > 1) { - ggml_tensor fused_node; - memcpy(&fused_node, node, sizeof(ggml_tensor)); - for (int j = 0; j < n_fuse - 1; ++j) { - fused_node.src[j + 2] = cgraph->nodes[i + j + 1]->src[1]; - } - fused_node.data = cgraph->nodes[i + n_fuse - 1]->data; - if (node->op == GGML_OP_ADD) { - ggml_cuda_op_fused_add(*cuda_ctx, &fused_node, n_fuse); - } else { - ggml_cuda_op_fused_mul(*cuda_ctx, &fused_node, n_fuse); - } - i += n_fuse - 1; - - continue; - } - } - - bool fused_mul_mat_vec = false; - int fused_node_count = 0; - - for (ggml_op op : { GGML_OP_MUL_MAT, GGML_OP_MUL_MAT_ID }) { - const ggml_op bias_op = op == GGML_OP_MUL_MAT ? GGML_OP_ADD : GGML_OP_ADD_ID; - - if (ggml_cuda_can_fuse(cgraph, i, { op, bias_op, op, bias_op, GGML_OP_GLU }, {})) { - ggml_tensor * glu = cgraph->nodes[i + 4]; - ggml_tensor * gate_bias_n = glu->src[0]; - ggml_tensor * up_bias_n = glu->src[1]; - - //we don't assume the order for {gate, up}. Instead infer it from the bias tensor - ggml_tensor * gate_n = nullptr; - ggml_tensor * up_n = nullptr; - - if (gate_bias_n->src[0] == cgraph->nodes[i] || gate_bias_n->src[1] == cgraph->nodes[i]) { - gate_n = cgraph->nodes[i]; - up_n = cgraph->nodes[i + 2]; - } else if (gate_bias_n->src[0] == cgraph->nodes[i + 2] || gate_bias_n->src[1] == cgraph->nodes[i + 2]) { - gate_n = cgraph->nodes[i + 2]; - up_n = cgraph->nodes[i]; - } else { - continue; - } - - auto get_bias_tensor = [](const ggml_tensor * bias_node, const ggml_tensor * mul_node, ggml_op op_bias) { - if (op_bias == GGML_OP_ADD) { - if (bias_node->src[0] == mul_node) { - return bias_node->src[1]; - } - if (bias_node->src[1] == mul_node) { - return bias_node->src[0]; - } - return (ggml_tensor *) nullptr; - } - GGML_ASSERT(op_bias == GGML_OP_ADD_ID); - GGML_ASSERT(bias_node->src[0] == mul_node); - return bias_node->src[1]; - }; - - ggml_tensor * up_bias_tensor = get_bias_tensor(up_bias_n, up_n, bias_op); - ggml_tensor * gate_bias_tensor = get_bias_tensor(gate_bias_n, gate_n, bias_op); - - if (!up_bias_tensor || !gate_bias_tensor) { - continue; - } - - // we don't support repeating adds - if (bias_op == GGML_OP_ADD && - (!ggml_are_same_shape(gate_bias_n->src[0], gate_bias_n->src[1]) || - !ggml_are_same_shape(up_bias_n->src[0], up_bias_n->src[1]))) { - continue; - } - - const ggml_tensor * src0 = up_n->src[0]; - const ggml_tensor * src1 = up_n->src[1]; - const ggml_tensor * ids = up_n->src[2]; - - if (ggml_cuda_should_fuse_mul_mat_vec_f(up_n)) { - ggml_cuda_mm_fusion_args_host fusion_data{}; - fusion_data.gate = gate_n->src[0]; - fusion_data.x_bias = up_bias_tensor; - fusion_data.gate_bias = gate_bias_tensor; - fusion_data.glu_op = ggml_get_glu_op(glu); - - ggml_cuda_mul_mat_vec_f(*cuda_ctx, src0, src1, ids, glu, &fusion_data); - fused_mul_mat_vec = true; - fused_node_count = 5; - break; - } - - if (ggml_cuda_should_fuse_mul_mat_vec_q(up_n)) { - ggml_cuda_mm_fusion_args_host fusion_data{}; - fusion_data.gate = gate_n->src[0]; - fusion_data.x_bias = up_bias_tensor; - fusion_data.gate_bias = gate_bias_tensor; - fusion_data.glu_op = ggml_get_glu_op(glu); - - ggml_cuda_mul_mat_vec_q(*cuda_ctx, src0, src1, ids, glu, &fusion_data); - fused_mul_mat_vec = true; - fused_node_count = 5; - break; - } - } else if (ggml_cuda_can_fuse(cgraph, i, { op, op, GGML_OP_GLU }, {})) { - ggml_tensor * glu = cgraph->nodes[i + 2]; - ggml_tensor * gate = glu->src[0]; - ggml_tensor * up = glu->src[1]; - - bool ok = (gate == cgraph->nodes[i] && up == cgraph->nodes[i + 1]) - || (gate == cgraph->nodes[i + 1] && up == cgraph->nodes[i]); - - if (!ok) continue; - - const ggml_tensor * src0 = up->src[0]; - const ggml_tensor * src1 = up->src[1]; - const ggml_tensor * ids = up->src[2]; - - if (ggml_cuda_should_fuse_mul_mat_vec_f(up)) { - ggml_cuda_mm_fusion_args_host fusion_data{}; - fusion_data.gate = gate->src[0]; - fusion_data.glu_op = ggml_get_glu_op(glu); - - ggml_cuda_mul_mat_vec_f(*cuda_ctx, src0, src1, ids, glu, &fusion_data); - fused_mul_mat_vec = true; - fused_node_count = 3; - break; - } - - if (ggml_cuda_should_fuse_mul_mat_vec_q(up)) { - ggml_cuda_mm_fusion_args_host fusion_data{}; - fusion_data.gate = gate->src[0]; - fusion_data.glu_op = ggml_get_glu_op(glu); - - ggml_cuda_mul_mat_vec_q(*cuda_ctx, src0, src1, ids, glu, &fusion_data); - fused_mul_mat_vec = true; - fused_node_count = 3; - break; - } - } - } - - if (fused_mul_mat_vec) { - i += fused_node_count - 1; - continue; - } - - fused_mul_mat_vec = false; - fused_node_count = 0; - - for (ggml_op op : { GGML_OP_MUL_MAT, GGML_OP_MUL_MAT_ID }) { - const ggml_op bias_op = op == GGML_OP_MUL_MAT ? GGML_OP_ADD : GGML_OP_ADD_ID; - - if (!ggml_can_fuse(cgraph, i, { op, bias_op })) { - continue; - } - - ggml_tensor * mm_node = cgraph->nodes[i]; - ggml_tensor * bias_node = cgraph->nodes[i + 1]; - - ggml_tensor * bias_tensor = nullptr; - if (bias_op == GGML_OP_ADD) { - if (bias_node->src[0] == mm_node) { - bias_tensor = bias_node->src[1]; - } else if (bias_node->src[1] == mm_node) { - bias_tensor = bias_node->src[0]; - } else { - continue; - } - } else { - if (bias_node->src[0] != mm_node) { - continue; - } - bias_tensor = bias_node->src[1]; - } - - const ggml_tensor * src0 = mm_node->src[0]; - const ggml_tensor * src1 = mm_node->src[1]; - const ggml_tensor * ids = mm_node->src[2]; - - if (bias_op == GGML_OP_ADD_ID && bias_node->src[2] != ids) { - continue; - } - - if (bias_op == GGML_OP_ADD && !ggml_are_same_shape(bias_node->src[0], bias_node->src[1])) { - continue; - } - - ggml_cuda_mm_fusion_args_host fusion_data{}; - fusion_data.x_bias = bias_tensor; - - if (ggml_cuda_should_fuse_mul_mat_vec_f(mm_node)) { - ggml_cuda_mul_mat_vec_f(*cuda_ctx, src0, src1, ids, bias_node, &fusion_data); - fused_mul_mat_vec = true; - fused_node_count = 2; - break; - } - - if (ggml_cuda_should_fuse_mul_mat_vec_q(mm_node)) { - ggml_cuda_mul_mat_vec_q(*cuda_ctx, src0, src1, ids, bias_node, &fusion_data); - fused_mul_mat_vec = true; - fused_node_count = 2; - break; - } - } - - if (fused_mul_mat_vec) { - i += fused_node_count - 1; - continue; - } - - if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL, GGML_OP_ADD}, {})) { - ggml_cuda_op_rms_norm_fused_add(*cuda_ctx, node, cgraph->nodes[i+1], cgraph->nodes[i+2]); - i += 2; - continue; - } - - if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_RMS_NORM, GGML_OP_MUL}, {})) { - ggml_cuda_op_rms_norm_fused(*cuda_ctx, node, cgraph->nodes[i+1]); - i++; - continue; - } - - if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_SSM_CONV, GGML_OP_UNARY }, { GGML_UNARY_OP_SILU })) { - ggml_cuda_op_ssm_conv(*cuda_ctx, node, cgraph->nodes[i+1]); - i++; - continue; - } - - if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_UNARY, GGML_OP_MUL }, { GGML_UNARY_OP_SILU }) || - ggml_cuda_can_fuse(cgraph, i, { GGML_OP_UNARY, GGML_OP_MUL }, { GGML_UNARY_OP_SIGMOID }) || - ggml_cuda_can_fuse(cgraph, i, { GGML_OP_UNARY, GGML_OP_MUL }, { GGML_UNARY_OP_SOFTPLUS })) { - ggml_cuda_op_unary_mul(*cuda_ctx, node, cgraph->nodes[i+1]); - i++; - continue; - } - - if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_UNARY, GGML_OP_SQR }, { GGML_UNARY_OP_RELU })) { - ggml_cuda_op_relu_sqr(*cuda_ctx, node, cgraph->nodes[i+1]); - i++; - continue; - } - - if (ggml_cuda_can_fuse(cgraph, i, { GGML_OP_SCALE, GGML_OP_UNARY, GGML_OP_SCALE }, { GGML_UNARY_OP_TANH })) { - i += 2; - ggml_cuda_op_softcap(*cuda_ctx, cgraph->nodes[i], node); - continue; - } + if (nodes_to_skip != 0) { + i += nodes_to_skip; + continue; } #ifndef NDEBUG assert(node->buffer->buft == ggml_backend_cuda_buffer_type(cuda_ctx->device)); diff --git a/ggml/src/ggml-cuda/mma.cuh b/ggml/src/ggml-cuda/mma.cuh index b0f674635f1..79bb2934c5f 100644 --- a/ggml/src/ggml-cuda/mma.cuh +++ b/ggml/src/ggml-cuda/mma.cuh @@ -1015,25 +1015,35 @@ namespace ggml_cuda_mma { #endif // AMD_MFMA_AVAILABLE } - static __device__ __forceinline__ void mma_block_scaled(tile<16, 8, float> & D, - const tile<16, 8, int> & A, - const tile<8, 8, int> & B, - uint32_t a_scale, - uint32_t b_scale) { + template <ggml_type type> + static __device__ __forceinline__ void mma_block_scaled_fp4(tile<16, 8, float> & D, + const tile<16, 8, int> & A, + const tile<8, 8, int> & B, + uint32_t a_scale, + uint32_t b_scale) { #ifdef BLACKWELL_MMA_AVAILABLE const int * Axi = (const int *) A.x; const int * Bxi = (const int *) B.x; float * Dxi = (float *) D.x; - asm volatile( - "mma.sync.aligned.kind::mxf4.block_scale.scale_vec::2X.m16n8k64.row.col.f32.e2m1.e2m1.f32.ue8m0 " - "{%0, %1, %2, %3}, {%4, %5, %6, %7}, {%8, %9}, {%0, %1, %2, %3}, " - "%10, {0, 0}, %11, {0, 0};" - : "+f"(Dxi[0]), "+f"(Dxi[1]), "+f"(Dxi[2]), "+f"(Dxi[3]) - : "r"(Axi[0]), "r"(Axi[1]), "r"(Axi[2]), "r"(Axi[3]), "r"(Bxi[0]), "r"(Bxi[1]), "r"(a_scale), "r"(b_scale)); + if constexpr (type == GGML_TYPE_MXFP4) { + asm volatile( + "mma.sync.aligned.kind::mxf4.block_scale.scale_vec::2X.m16n8k64.row.col.f32.e2m1.e2m1.f32.ue8m0 " + "{%0, %1, %2, %3}, {%4, %5, %6, %7}, {%8, %9}, {%0, %1, %2, %3}, " + "%10, {0, 0}, %11, {0, 0};" + : "+f"(Dxi[0]), "+f"(Dxi[1]), "+f"(Dxi[2]), "+f"(Dxi[3]) + : "r"(Axi[0]), "r"(Axi[1]), "r"(Axi[2]), "r"(Axi[3]), "r"(Bxi[0]), "r"(Bxi[1]), "r"(a_scale), "r"(b_scale)); + } else { + asm volatile( + "mma.sync.aligned.kind::mxf4nvf4.block_scale.scale_vec::4X.m16n8k64.row.col.f32.e2m1.e2m1.f32.ue4m3 " + "{%0, %1, %2, %3}, {%4, %5, %6, %7}, {%8, %9}, {%0, %1, %2, %3}, " + "%10, {0, 0}, %11, {0, 0};" + : "+f"(Dxi[0]), "+f"(Dxi[1]), "+f"(Dxi[2]), "+f"(Dxi[3]) + : "r"(Axi[0]), "r"(Axi[1]), "r"(Axi[2]), "r"(Axi[3]), "r"(Bxi[0]), "r"(Bxi[1]), "r"(a_scale), "r"(b_scale)); + } #else GGML_UNUSED_VARS(D, A, B, a_scale, b_scale); -#endif // BLACKWELL_MMA_AVAILABLE +#endif // BLACKWELL_MMA_AVAILABLE } static __device__ __forceinline__ void mma( diff --git a/ggml/src/ggml-cuda/mmq.cu b/ggml/src/ggml-cuda/mmq.cu index 3f01ff5bfb0..e1add5e0331 100644 --- a/ggml/src/ggml-cuda/mmq.cu +++ b/ggml/src/ggml-cuda/mmq.cu @@ -122,7 +122,7 @@ void ggml_cuda_mul_mat_q( || GGML_CUDA_CC_IS_CDNA(cc); // TODO: tighter pool buffer size vs q8 path - const bool use_native_mxfp4 = blackwell_mma_available(cc) && src0->type == GGML_TYPE_MXFP4; + const bool use_native_fp4 = blackwell_mma_available(cc) && (src0->type == GGML_TYPE_MXFP4 || src0->type == GGML_TYPE_NVFP4); if (!ids) { const size_t nbytes_src1_q8_1 = ne13*ne12 * ne11*ne10_padded * sizeof(block_q8_1)/QK8_1 + @@ -133,9 +133,9 @@ void ggml_cuda_mul_mat_q( const int64_t s11 = src1->nb[1] / ts_src1; const int64_t s12 = src1->nb[2] / ts_src1; const int64_t s13 = src1->nb[3] / ts_src1; - if (use_native_mxfp4) { + if (use_native_fp4) { static_assert(sizeof(block_fp4_mmq) == 4 * sizeof(block_q8_1)); - quantize_mmq_mxfp4_cuda(src1_d, nullptr, src1_q8_1.get(), src0->type, ne10, s11, s12, s13, ne10_padded, + quantize_mmq_fp4_cuda(src1_d, nullptr, src1_q8_1.get(), src0->type, ne10, s11, s12, s13, ne10_padded, ne11, ne12, ne13, stream); } else { @@ -146,10 +146,8 @@ void ggml_cuda_mul_mat_q( } // Stride depends on quantization format - const int64_t s12 = use_native_mxfp4 ? - ne11 * ne10_padded * sizeof(block_fp4_mmq) / - (8 * QK_MXFP4 * sizeof(int)) // block_fp4_mmq holds 256 values (8 blocks of 32) - : + const int64_t s12 = use_native_fp4 ? + ne11 * ne10_padded * sizeof(block_fp4_mmq) / (QK_K * sizeof(int)) : // block_fp4_mmq holds 256 values ne11 * ne10_padded * sizeof(block_q8_1) / (QK8_1 * sizeof(int)); const int64_t s13 = ne12*s12; @@ -198,8 +196,8 @@ void ggml_cuda_mul_mat_q( const int64_t s12 = src1->nb[2] / ts_src1; const int64_t s13 = src1->nb[3] / ts_src1; - if (use_native_mxfp4) { - quantize_mmq_mxfp4_cuda(src1_d, ids_src1.get(), src1_q8_1.get(), src0->type, ne10, s11, s12, s13, + if (use_native_fp4) { + quantize_mmq_fp4_cuda(src1_d, ids_src1.get(), src1_q8_1.get(), src0->type, ne10, s11, s12, s13, ne10_padded, ne11_flat, ne12_flat, ne13_flat, stream); } else { quantize_mmq_q8_1_cuda(src1_d, ids_src1.get(), src1_q8_1.get(), src0->type, ne10, s11, s12, s13, @@ -208,8 +206,9 @@ void ggml_cuda_mul_mat_q( CUDA_CHECK(cudaGetLastError()); } - const int64_t s12 = use_native_mxfp4 ? ne11 * ne10_padded * sizeof(block_fp4_mmq) / (8 * QK_MXFP4 * sizeof(int)) : - ne11 * ne10_padded * sizeof(block_q8_1) / (QK8_1 * sizeof(int)); + static_assert(QK_K == 8 * QK_MXFP4, "QK_K needs to be 8 * QK_MXFP4"); + const int64_t s12 = use_native_fp4 ? ne11 * ne10_padded * sizeof(block_fp4_mmq) / (QK_K * sizeof(int)) : + ne11 * ne10_padded * sizeof(block_q8_1) / (QK8_1 * sizeof(int)); const int64_t s13 = ne12*s12; // Note that ne02 is used instead of ne12 because the number of y channels determines the z dimension of the CUDA grid. diff --git a/ggml/src/ggml-cuda/mmq.cuh b/ggml/src/ggml-cuda/mmq.cuh index b1a319de9be..edf546d8f1e 100644 --- a/ggml/src/ggml-cuda/mmq.cuh +++ b/ggml/src/ggml-cuda/mmq.cuh @@ -10,9 +10,9 @@ using namespace ggml_cuda_mma; #define MMQ_DP4A_MAX_BATCH_SIZE 64 // Max. batch size to use for dp4a MMQ kernels when FP16 tensor cores are available. -#define MMQ_ITER_K 256 -#define MMQ_ITER_K_MXFP4_FP4 512 -#define MMQ_NWARPS 8 +#define MMQ_ITER_K 256 +#define MMQ_ITER_K_FP4 512 +#define MMQ_NWARPS 8 typedef void (*load_tiles_mmq_t)(const char * __restrict__ x, int * x_tile, const int kbx0, const int i_max, const int stride); typedef void (*vec_dot_mmq_t)(const int * __restrict__ x, const int * __restrict__ y, float * __restrict__ sum, const int k00); @@ -46,9 +46,12 @@ struct block_q8_1_mmq { int8_t qs[4*QK8_1]; // 128 values quantized to 8 bit each }; +// this struct is used for fp4 data types (currently only used for Blackwell) +// mxfp4 has block size 32, each int32 of d4 contains 2 e8m0 scales in the lower 16 bits +// nvfp4 has block size 16, each int32 of d4 contains 4 ue4m3 scales struct block_fp4_mmq { - uint32_t d4[4]; // 8 E8M0 scales (1 per 32 values), 2 packed per uint32: d4[0]={s0,s1}, d4[1]={s2,s3}, etc. - int8_t qs[4 * 32]; // 256 FP4 values packed as 4-bit pairs (2 per byte), 8 blocks of 32 values + uint32_t d4[4]; + int8_t qs[4 * 32]; // 256 FP4 values packed as 4-bit pairs (2 per byte) }; static_assert(sizeof(block_q8_1_mmq) == 4*QK8_1 + 4*sizeof(half2), "Unexpected block_q8_1_mmq size"); @@ -143,10 +146,11 @@ static int get_mmq_y_host(const int cc) { static constexpr __device__ int get_iter_k([[maybe_unused]] const ggml_type type) { #if defined(BLACKWELL_MMA_AVAILABLE) - return type == GGML_TYPE_MXFP4 ? MMQ_ITER_K_MXFP4_FP4 : MMQ_ITER_K; -#else - return MMQ_ITER_K; +if (type == GGML_TYPE_NVFP4 || type == GGML_TYPE_MXFP4) { + return MMQ_ITER_K_FP4; +} #endif // defined(BLACKWELL_MMA_AVAILABLE) + return MMQ_ITER_K; } static constexpr __device__ int get_mmq_y_device() { @@ -213,8 +217,8 @@ static constexpr __host__ __device__ tile_x_sizes mmq_get_dp4a_tile_x_sizes(ggml } #define MMQ_MMA_TILE_X_K_Q8_0 (2*MMQ_TILE_NE_K + 2*MMQ_TILE_NE_K/QI8_0 + 4) -#define MMQ_MMA_TILE_X_K_FP4 (2*MMQ_TILE_NE_K + 8 + 4) // MXFP4 -#define MMQ_MMA_TILE_X_K_NVFP4 (2*MMQ_TILE_NE_K + MMQ_TILE_NE_K/2 + 4) // NVFP4 +#define MMQ_MMA_TILE_X_K_FP4 (2*MMQ_TILE_NE_K + 8 + 4) // MXFP4 and NVFP4 Blackwell +#define MMQ_MMA_TILE_X_K_NVFP4 (2*MMQ_TILE_NE_K + MMQ_TILE_NE_K/2 + 4) // NVFP4 Generic #define MMQ_MMA_TILE_X_K_Q8_1 (2*MMQ_TILE_NE_K + 2*MMQ_TILE_NE_K/QI8_0 + 4) #define MMQ_MMA_TILE_X_K_Q2_K (2*MMQ_TILE_NE_K + MMQ_TILE_NE_K + 4) #define MMQ_MMA_TILE_X_K_Q3_K (2*MMQ_TILE_NE_K + MMQ_TILE_NE_K/2 + 4) @@ -240,7 +244,11 @@ static constexpr __host__ __device__ int mmq_get_mma_tile_x_k(ggml_type type) { case GGML_TYPE_Q8_0: return MMQ_MMA_TILE_X_K_Q8_0; // tile sizes are the same for Q8_1 and FP4 for blackwell case GGML_TYPE_MXFP4: return MMQ_MMA_TILE_X_K_Q8_1; +#if defined(BLACKWELL_MMA_AVAILABLE) + case GGML_TYPE_NVFP4: return MMQ_MMA_TILE_X_K_FP4; +#else case GGML_TYPE_NVFP4: return MMQ_MMA_TILE_X_K_NVFP4; +#endif // defined(BLACKWELL_MMA_AVAILABLE) case GGML_TYPE_Q2_K: return MMQ_MMA_TILE_X_K_Q2_K; case GGML_TYPE_Q3_K: return MMQ_MMA_TILE_X_K_Q3_K; case GGML_TYPE_Q4_K: return MMQ_MMA_TILE_X_K_Q8_1; @@ -934,6 +942,128 @@ static __device__ __forceinline__ void load_tiles_mxfp4_fp4(const char * __restr } } +#ifdef BLACKWELL_MMA_AVAILABLE +template <int mmq_y, bool need_check> +static __device__ __forceinline__ void load_tiles_nvfp4_nvfp4(const char * __restrict__ x, + int * __restrict__ x_tile, + const int kbx0, + const int i_max, + const int stride) { + constexpr int nwarps = mmq_get_nwarps_device(); + constexpr int warp_size = ggml_cuda_get_physical_warp_size(); + constexpr int iter_k = get_iter_k(GGML_TYPE_NVFP4); + constexpr int threads_per_row = iter_k / QK_NVFP4; // each thread processes 1 block + constexpr int rows_per_warp = warp_size / threads_per_row; + + uint32_t * x_u32 = (uint32_t *) x_tile; + + const int txi = threadIdx.x; + const int kbx = txi % threads_per_row; + const int row_in_warp = txi / threads_per_row; + + const block_nvfp4 * bxi_base = (const block_nvfp4 *) x + kbx0 + kbx; + uint32_t * x_u32_scale = x_u32 + 64 + kbx; + +#pragma unroll + for (int i0 = 0; i0 < mmq_y; i0 += rows_per_warp * nwarps) { + int i = i0 + threadIdx.y * rows_per_warp + row_in_warp; + + if constexpr (need_check) { + i = min(i, i_max); + } + + const block_nvfp4 * bxi = bxi_base + i * stride; + const int row_base = i * MMQ_MMA_TILE_X_K_FP4; + const int q_base = row_base + 8 * kbx; + + const uint32_t * src_qs = reinterpret_cast<const uint32_t *>(bxi->qs); + +#pragma unroll + for (int sub = 0; sub < QK_NVFP4 / QK_NVFP4_SUB; ++sub) { + x_u32[q_base + 2 * sub + 0] = src_qs[2 * sub + 0]; + x_u32[q_base + 2 * sub + 1] = src_qs[2 * sub + 1]; + } + + x_u32_scale[row_base] = get_int_b4(bxi->d, 0); + } +} + +// Shared MMA kernel for MXFP4 and NVFP4 on Blackwell. +// Both quantizations encode values as e2m1 (FP4) and produce one uint32 scale per +// m16n8k64 MMA call; only the PTX kind (scale_vec::2X ue8m0 vs scale_vec::4X ue4m3) +// and the per-type stride constant differ. +template <int mmq_x, int mmq_y, ggml_type type> +static __device__ __forceinline__ void vec_dot_fp4_fp4_mma(const int * __restrict__ x, + const int * __restrict__ y, + float * __restrict__ sum, + const int k00) { + static_assert(type == GGML_TYPE_MXFP4 || type == GGML_TYPE_NVFP4, + "vec_dot_fp4_fp4_mma: type must be MXFP4 or NVFP4"); + + typedef tile<16, 8, int> tile_A; + typedef tile<8, 8, int> tile_B; + typedef tile<16, 8, float> tile_C; + + constexpr int stride = MMQ_MMA_TILE_X_K_FP4; + constexpr int granularity = mmq_get_granularity_device(mmq_x); + constexpr int rows_per_warp = 2 * granularity; + constexpr int ntx = rows_per_warp / tile_C::I; + constexpr int nfrags = MMQ_TILE_NE_K / tile_A::J; + + y += (threadIdx.y % ntx) * (tile_C::J * MMQ_TILE_Y_K); + + const int * x_qs = (const int *) x; + const uint32_t * x_sc = (const uint32_t *) (x_qs + 2 * MMQ_TILE_NE_K); + const int * y_qs = (const int *) y + 4; + const uint32_t * y_sc = (const uint32_t *) y; + + // 2 threads per quad supply the packed scale register to the block_scale MMA, + // see https://docs.nvidia.com/cuda/parallel-thread-execution/#warp-level-block-scaling + const int tidx_A = threadIdx.x / 4 + (threadIdx.x % 2) * 8; + const int tidx_B = threadIdx.x / 4; + const int i0 = (threadIdx.y / ntx) * rows_per_warp; + + tile_A A[ntx][nfrags]; + uint32_t scaleA[ntx][nfrags]; + +#pragma unroll + for (int n = 0; n < ntx; ++n) { +#pragma unroll + for (int frag = 0; frag < nfrags; ++frag) { + const int k0 = k00 + frag * tile_A::J; + load_ldmatrix(A[n][frag], x_qs + (i0 + n * tile_A::I) * stride + k0, stride); + scaleA[n][frag] = x_sc[(i0 + n * tile_A::I + tidx_A) * stride + k0 / tile_A::J]; + } + } + +#pragma unroll + for (int j0 = 0; j0 < mmq_x; j0 += ntx * tile_C::J) { + tile_B B[nfrags]; + uint32_t scaleB[nfrags]; + +#pragma unroll + for (int frag = 0; frag < nfrags; ++frag) { + const int k0 = frag * tile_B::J; + load_generic(B[frag], y_qs + j0 * MMQ_TILE_Y_K + k0, MMQ_TILE_Y_K); + scaleB[frag] = y_sc[(j0 + tidx_B) * MMQ_TILE_Y_K + frag]; + } + +#pragma unroll + for (int n = 0; n < ntx; ++n) { +#pragma unroll + for (int frag = 0; frag < nfrags; ++frag) { + tile_C C = {}; + mma_block_scaled_fp4<type>(C, A[n][frag], B[frag], scaleA[n][frag], scaleB[frag]); +#pragma unroll + for (int l = 0; l < tile_C::ne; ++l) { + sum[(j0 / tile_C::J + n) * tile_C::ne + l] += C.x[l]; + } + } + } + } +} +#endif // BLACKWELL_MMA_AVAILABLE + template <int mmq_y, bool need_check> static __device__ __forceinline__ void load_tiles_nvfp4(const char * __restrict__ x, @@ -1163,77 +1293,6 @@ static __device__ __forceinline__ void vec_dot_q8_0_q8_1_mma( #endif // defined(AMD_MFMA_AVAILABLE) || defined(AMD_WMMA_AVAILABLE) } -template <int mmq_x, int mmq_y> -static __device__ __forceinline__ void vec_dot_mxfp4_mxfp4_mma(const int * __restrict__ x, - const int * __restrict__ y, - float * __restrict__ sum, - const int k00) { - typedef tile<16, 8, int> tile_A; - typedef tile<8, 8, int> tile_B; - typedef tile<16, 8, float> tile_C; // Output is float for native scaled MMA - - constexpr int granularity = mmq_get_granularity_device(mmq_x); - constexpr int rows_per_warp = 2 * granularity; - constexpr int ntx = rows_per_warp / tile_C::I; // Number of x minitiles per warp. - - y += (threadIdx.y % ntx) * (tile_C::J * MMQ_TILE_Y_FP4_K); - - // Match layout from load_tiles_mxfp4_fp4 - const int * x_qs = (const int *) x; - const uint32_t * x_sc = (const uint32_t *) (x_qs + 2 * MMQ_TILE_NE_K); - const int * y_qs = (const int *) y + 4; - const uint32_t * y_sc = (const uint32_t *) y; - - // tile_A has a length of 64 logical values vs. 32 values in block_mxfp4 - tile_A A[ntx][MMQ_TILE_NE_K / (2 * QI_MXFP4)]; - uint32_t scaleA[ntx][MMQ_TILE_NE_K / (2 * QI_MXFP4)]; - - // Block scale - // Each thread has to point to a 4 byte scale value - // https://docs.nvidia.com/cuda/parallel-thread-execution/#warp-level-block-scaling - - const int i0 = (threadIdx.y / ntx) * rows_per_warp; - -#pragma unroll - for (int n = 0; n < ntx; ++n) { -#pragma unroll - for (int k01 = 0; k01 < MMQ_TILE_NE_K; k01 += 2 * QI_MXFP4) { - const int k0 = k00 + k01; - - load_ldmatrix(A[n][k01 / (2 * QI_MXFP4)], x_qs + (i0 + n * tile_A::I) * MMQ_MMA_TILE_X_K_FP4 + k0, - MMQ_MMA_TILE_X_K_FP4); - - // based on block-scaling document, 2 threads in each quad need to supply to the scale value - const int tidx = threadIdx.x / 4 + (threadIdx.x % 2) * 8; - scaleA[n][k01 / (2 * QI_MXFP4)] = - *(x_sc + (i0 + n * tile_A::I + tidx) * MMQ_MMA_TILE_X_K_FP4 + k0 / (2 * QI_MXFP4)); - } - } - -#pragma unroll - for (int j0 = 0; j0 < mmq_x; j0 += ntx * tile_C::J) { -#pragma unroll - for (int k01 = 0; k01 < MMQ_TILE_NE_K; k01 += 2 * QI_MXFP4) { - tile_B B; - uint32_t scaleB; // 2xN scales - - load_generic(B, y_qs + j0 * MMQ_TILE_Y_FP4_K + k01, MMQ_TILE_Y_FP4_K); - - scaleB = y_sc[(j0 + threadIdx.x / 4) * MMQ_TILE_Y_FP4_K + k01 / (2 * QI_MXFP4)]; - -#pragma unroll - for (int n = 0; n < ntx; ++n) { - tile_C C; - - mma_block_scaled(C, A[n][k01 / (2 * QI_MXFP4)], B, scaleA[n][k01 / (2 * QI_MXFP4)], scaleB); -#pragma unroll - for (int l = 0; l < tile_C::ne; ++l) { - sum[(j0 / tile_C::J + n) * tile_C::ne + l] += C.x[l]; - } - } - } - } -} template <int mmq_x, int mmq_y> static __device__ __forceinline__ void vec_dot_q8_1_q8_1_dp4a( @@ -3259,7 +3318,7 @@ struct mmq_type_traits<mmq_x, mmq_y, need_check, GGML_TYPE_MXFP4> { static constexpr int vdr = VDR_MXFP4_Q8_1_MMQ; #ifdef BLACKWELL_MMA_AVAILABLE static constexpr load_tiles_mmq_t load_tiles = load_tiles_mxfp4_fp4<mmq_y, need_check>; - static constexpr vec_dot_mmq_t vec_dot_mma = vec_dot_mxfp4_mxfp4_mma<mmq_x, mmq_y>; + static constexpr vec_dot_mmq_t vec_dot_mma = vec_dot_fp4_fp4_mma<mmq_x, mmq_y, GGML_TYPE_MXFP4>; #else static constexpr load_tiles_mmq_t load_tiles = load_tiles_mxfp4<mmq_y, need_check>; static constexpr vec_dot_mmq_t vec_dot_mma = vec_dot_q8_0_q8_1_mma<mmq_x, mmq_y, MMQ_Q8_1_DS_LAYOUT_D4>; @@ -3270,8 +3329,13 @@ struct mmq_type_traits<mmq_x, mmq_y, need_check, GGML_TYPE_MXFP4> { template <int mmq_x, int mmq_y, bool need_check> struct mmq_type_traits<mmq_x, mmq_y, need_check, GGML_TYPE_NVFP4> { static constexpr int vdr = VDR_NVFP4_Q8_1_MMQ; +#ifdef BLACKWELL_MMA_AVAILABLE + static constexpr load_tiles_mmq_t load_tiles = load_tiles_nvfp4_nvfp4<mmq_y, need_check>; + static constexpr vec_dot_mmq_t vec_dot_mma = vec_dot_fp4_fp4_mma<mmq_x, mmq_y, GGML_TYPE_NVFP4>; +#else static constexpr load_tiles_mmq_t load_tiles = load_tiles_nvfp4<mmq_y, need_check>; static constexpr vec_dot_mmq_t vec_dot_mma = vec_dot_q8_0_16_q8_1_mma<mmq_x, mmq_y>; +#endif // BLACKWELL_MMA_AVAILABLE static constexpr vec_dot_mmq_t vec_dot_dp4a = vec_dot_q8_0_16_q8_1_dp4a<mmq_x, mmq_y>; }; @@ -3406,7 +3470,7 @@ static __device__ __forceinline__ void mul_mat_q_process_tile( #if defined(BLACKWELL_MMA_AVAILABLE) // FP4 tile stores 8 blocks - constexpr int ne_block = (type == GGML_TYPE_MXFP4) ? 8 * QK_MXFP4 : 4 * QK8_1; + constexpr int ne_block = (type == GGML_TYPE_MXFP4 || type == GGML_TYPE_NVFP4) ? QK_K : 4 * QK8_1; #else constexpr int ne_block = 4 * QK8_1; #endif // defined(BLACKWELL_MMA_AVAILABLE) @@ -3478,10 +3542,10 @@ template <ggml_type type, int mmq_x, bool need_check> static __global__ void mul_mat_q( const char * __restrict__ x, const int * __restrict__ y, const int32_t * __restrict__ ids_dst, const int32_t * __restrict__ expert_bounds, float * __restrict__ dst, float * __restrict__ tmp_fixup, - const int ncols_x, const int nrows_x, const int ncols_dst, const int stride_row_x, const int ncols_y, const int stride_col_dst, - const int channel_ratio, const int nchannels_y, const int stride_channel_x, const int stride_channel_y, const int stride_channel_dst, - const int sample_ratio, const int nsamples_y, const int stride_sample_x, const int stride_sample_y, const int stride_sample_dst, - const int ncols_max) { + const uint3 blocks_per_ne00, const int nrows_x, const int ncols_dst, const int stride_row_x, const int ncols_y, const int stride_col_dst, + const uint3 channel_ratio, const uint3 nchannels_y, const int stride_channel_x, const int stride_channel_y, const int stride_channel_dst, + const uint3 sample_ratio, const uint3 nsamples_y, const int stride_sample_x, const int stride_sample_y, const int stride_sample_dst, + const uint3 ntx) { // Skip unused template specializations for faster compilation: if (mmq_x > get_mmq_x_max_device() || mmq_x % mmq_get_granularity_device(mmq_x) != 0) { @@ -3495,8 +3559,7 @@ static __global__ void mul_mat_q( constexpr int qk = ggml_cuda_type_traits<type>::qk; constexpr int mmq_y = get_mmq_y_device(); - const int ntx = (ncols_max + mmq_x - 1) / mmq_x; // Number of tiles x - const int nty = (nrows_x + mmq_y - 1) / mmq_y; // Number of tiles y + const uint32_t nty = (nrows_x + mmq_y - 1) / mmq_y; // Number of tiles y // Initialize the ids for writing back data with just the index. // For regular matrix multiplications this is never changed. @@ -3517,8 +3580,9 @@ static __global__ void mul_mat_q( // On non-CDNA AMD or old CUDA the performance with stream-k was worse, use conventional tiling instead: #if (defined(GGML_USE_HIP) && !defined(CDNA)) || __CUDA_ARCH__ < GGML_CUDA_CC_VOLTA { - const int wt = blockIdx.z / nchannels_y; - const int zt = blockIdx.z - wt*nchannels_y; + const uint2 tmp2 = fast_div_modulo(blockIdx.z, nchannels_y); + const int wt = tmp2.x; + const int zt = tmp2.y; const int jt = blockIdx.y; const int it = blockIdx.x; @@ -3561,40 +3625,40 @@ static __global__ void mul_mat_q( const int tile_x_max_i = nrows_x - it*mmq_y - 1; const int tile_y_max_j = col_diff - jt*mmq_x - 1; - const int offset_x = (wt/sample_ratio)*stride_sample_x + (zt/channel_ratio)*stride_channel_x + it*mmq_y*stride_row_x; + const int offset_x = fastdiv(wt, sample_ratio)*stride_sample_x + fastdiv(zt, channel_ratio)*stride_channel_x + it*mmq_y*stride_row_x; constexpr bool fixup = false; mul_mat_q_process_tile<type, mmq_x, need_check, fixup> (x, offset_x, y + offset_y, ids_dst_shared, dst + offset_dst, tmp_fixup, stride_row_x, ncols_y, stride_col_dst, - tile_x_max_i, tile_y_max_j, 0, ncols_x/qk); + tile_x_max_i, tile_y_max_j, 0, blocks_per_ne00.z); return; } #endif // (defined(GGML_USE_HIP) && !defined(CDNA4) && !defined(CDNA3)) || __CUDA_ARCH__ < GGML_CUDA_CC_VOLTA - constexpr int ITER_K = get_iter_k(type); - - const int64_t blocks_per_ne00 = ncols_x / qk; - constexpr int blocks_per_iter = ITER_K / qk; + constexpr int ITER_K = get_iter_k(type); + constexpr int blocks_per_iter = ITER_K / qk; // kbc == k block continuous, current index in continuous ijk space. - int64_t kbc = (int64_t) blockIdx.x *nsamples_y*nchannels_y*ntx*nty*blocks_per_ne00 / gridDim.x; - int64_t kbc_stop = (int64_t)(blockIdx.x + 1)*nsamples_y*nchannels_y*ntx*nty*blocks_per_ne00 / gridDim.x; + int kbc = int64_t(blockIdx.x) *(nsamples_y.z*nchannels_y.z*ntx.z*nty*blocks_per_ne00.z) / gridDim.x; + int kbc_stop = int64_t(blockIdx.x + 1)*(nsamples_y.z*nchannels_y.z*ntx.z*nty*blocks_per_ne00.z) / gridDim.x; - kbc -= (kbc % blocks_per_ne00) % blocks_per_iter; - kbc_stop -= (kbc_stop % blocks_per_ne00) % blocks_per_iter; + kbc -= fastmodulo(kbc, blocks_per_ne00) % blocks_per_iter; + kbc_stop -= fastmodulo(kbc_stop, blocks_per_ne00) % blocks_per_iter; // kb0 == k index when doing the matrix multiplication for an output tile. - int kb0_start = kbc % blocks_per_ne00; - int kb0_stop = min(blocks_per_ne00, kb0_start + kbc_stop - kbc); - while (kbc < kbc_stop && kb0_stop == blocks_per_ne00) { - int tmp = kbc; - const int it = tmp / (nsamples_y*nchannels_y*ntx*blocks_per_ne00); - tmp -= it * (nsamples_y*nchannels_y*ntx*blocks_per_ne00); - const int wt = tmp / (nchannels_y*ntx*blocks_per_ne00); - tmp -= wt * (nchannels_y*ntx*blocks_per_ne00); - const int zt = tmp / (ntx*blocks_per_ne00); - tmp -= zt * (ntx*blocks_per_ne00); - const int jt = tmp / blocks_per_ne00; + int kb0_start = fastmodulo(kbc, blocks_per_ne00); + int kb0_stop = min(blocks_per_ne00.z, uint32_t(kb0_start + kbc_stop - kbc)); + while (kbc < kbc_stop && kb0_stop == int(blocks_per_ne00.z)) { + int tmp = fastdiv(kbc, blocks_per_ne00); + uint2 tmp2 = fast_div_modulo(tmp, ntx); + const int jt = tmp2.y; + tmp = tmp2.x; + tmp2 = fast_div_modulo(tmp, nchannels_y); + const int zt = tmp2.y; + tmp = tmp2.x; + tmp2 = fast_div_modulo(tmp, nsamples_y); + const int wt = tmp2.y; + const int it = tmp2.x; // Defaults for regular matrix multiplication: int col_low = 0; @@ -3612,11 +3676,11 @@ static __global__ void mul_mat_q( offset_dst = 0; if (jt*mmq_x >= col_diff) { - kbc += blocks_per_ne00; - kbc -= kbc % blocks_per_ne00; + kbc += blocks_per_ne00.z; + kbc -= fastmodulo(kbc, blocks_per_ne00); kb0_start = 0; - kb0_stop = min(blocks_per_ne00, kbc_stop - kbc); + kb0_stop = min(blocks_per_ne00.z, uint32_t(kbc_stop - kbc)); continue; } @@ -3641,32 +3705,34 @@ static __global__ void mul_mat_q( const int tile_x_max_i = nrows_x - it*mmq_y - 1; const int tile_y_max_j = col_diff - jt*mmq_x - 1; - const int offset_x = (wt/sample_ratio)*stride_sample_x + (zt/channel_ratio)*stride_channel_x + it*mmq_y*stride_row_x; + const int offset_x = fastdiv(wt, sample_ratio)*stride_sample_x + fastdiv(zt, channel_ratio)*stride_channel_x + it*mmq_y*stride_row_x; constexpr bool fixup = false; // All but (potentially) the last iterations write their data to dst rather than the fixup buffer. mul_mat_q_process_tile<type, mmq_x, need_check, fixup> (x, offset_x, y + offset_y, ids_dst_shared, dst + offset_dst, tmp_fixup, stride_row_x, ncols_y, stride_col_dst, tile_x_max_i, tile_y_max_j, kb0_start, kb0_stop); - kbc += blocks_per_ne00; - kbc -= kbc % blocks_per_ne00; + kbc += blocks_per_ne00.z; + kbc -= fastmodulo(kbc, blocks_per_ne00); kb0_start = 0; - kb0_stop = min(blocks_per_ne00, kbc_stop - kbc); + kb0_stop = min(blocks_per_ne00.z, uint32_t(kbc_stop - kbc)); } if (kbc >= kbc_stop) { return; } - int tmp = kbc; - const int it = tmp / (nsamples_y*nchannels_y*ntx*blocks_per_ne00); - tmp -= it * (nsamples_y*nchannels_y*ntx*blocks_per_ne00); - const int wt = tmp / (nchannels_y*ntx*blocks_per_ne00); - tmp -= wt * (nchannels_y*ntx*blocks_per_ne00); - const int zt = tmp / (ntx*blocks_per_ne00); - tmp -= zt * (ntx*blocks_per_ne00); - const int jt = tmp / blocks_per_ne00; + int tmp = fastdiv(kbc, blocks_per_ne00); + uint2 tmp2 = fast_div_modulo(tmp, ntx); + const int jt = tmp2.y; + tmp = tmp2.x; + tmp2 = fast_div_modulo(tmp, nchannels_y); + const int zt = tmp2.y; + tmp = tmp2.x; + tmp2 = fast_div_modulo(tmp, nsamples_y); + const int wt = tmp2.y; + const int it = tmp2.x; // Defaults for regular matrix multiplication: int col_low = 0; @@ -3708,7 +3774,7 @@ static __global__ void mul_mat_q( const int tile_x_max_i = nrows_x - it*mmq_y - 1; const int tile_y_max_j = col_diff - jt*mmq_x - 1; - const int offset_x = (wt/sample_ratio)*stride_sample_x + (zt/channel_ratio)*stride_channel_x + it*mmq_y*stride_row_x; + const int offset_x = fastdiv(wt, sample_ratio)*stride_sample_x + fastdiv(zt, channel_ratio)*stride_channel_x + it*mmq_y*stride_row_x; constexpr bool fixup = true; // Last index writes its data to fixup buffer to avoid data races with other blocks. mul_mat_q_process_tile<type, mmq_x, need_check, fixup> @@ -3717,46 +3783,37 @@ static __global__ void mul_mat_q( } template <ggml_type type, int mmq_x, bool need_check> -static __global__ void mul_mat_q_stream_k_fixup(const int32_t * ids_dst, - const int32_t * expert_bounds, - float * __restrict__ dst, - const float * __restrict__ tmp_last_tile, - const int ncols_x, - const int nrows_x, - const int ncols_dst, - const size_t stride_col_dst, - const int nchannels_y, - const size_t stride_channel_dst, - const int nsamples_y, - const size_t stride_sample_dst, - const int ncols_max) { - constexpr int mmq_y = get_mmq_y_device(); - constexpr int qk = ggml_cuda_type_traits<type>::qk; - constexpr int ITER_K = get_iter_k(type); - - constexpr int blocks_per_iter = ITER_K / qk; - const int64_t blocks_per_ne00 = ncols_x / qk; +__launch_bounds__(ggml_cuda_get_physical_warp_size()*mmq_get_nwarps_device()/2, 1) +static __global__ void mul_mat_q_stream_k_fixup( + const int32_t * __restrict__ ids_dst, const int32_t * __restrict__ expert_bounds, float * __restrict__ dst, + float * __restrict__ tmp_last_tile, const uint3 blocks_per_ne00, const int nrows_x, const int ncols_dst, + const int stride_col_dst, const uint3 nchannels_y, const int stride_channel_dst, const uint3 nsamples_y, + const int stride_sample_dst, const uint3 ntx) { + constexpr int mmq_y = get_mmq_y_device(); + constexpr int qk = ggml_cuda_type_traits<type>::qk; + constexpr int ITER_K = get_iter_k(type); + constexpr int blocks_per_iter = ITER_K / qk; - constexpr int nwarps = mmq_get_nwarps_device(); + constexpr int nwarps = mmq_get_nwarps_device()/2; constexpr int warp_size = ggml_cuda_get_physical_warp_size(); - float sum[mmq_x*mmq_y / (nwarps*warp_size)] = {0.0f}; + float sum[mmq_x / nwarps] = {0.0f}; + const int i = blockIdx.y*warp_size + threadIdx.x; - const int ntx = (ncols_max + mmq_x - 1) / mmq_x; - const int nty = (nrows_x + mmq_y - 1) / mmq_y; + const int nty = (nrows_x + mmq_y - 1) / mmq_y; const int bidx0 = blockIdx.x; // kbc == k block continuous, current index in continuous ijk space. - int64_t kbc0 = (int64_t) bidx0 *nsamples_y*nchannels_y*ntx*nty*blocks_per_ne00 / gridDim.x; - int64_t kbc0_stop = (int64_t)(bidx0 + 1)*nsamples_y*nchannels_y*ntx*nty*blocks_per_ne00 / gridDim.x; + int kbc0 = int64_t(blockIdx.x) *(nsamples_y.z*nchannels_y.z*ntx.z*nty*blocks_per_ne00.z) / gridDim.x; + int kbc0_stop = int64_t(blockIdx.x + 1)*(nsamples_y.z*nchannels_y.z*ntx.z*nty*blocks_per_ne00.z) / gridDim.x; - kbc0 -= (kbc0 % blocks_per_ne00) % blocks_per_iter; - kbc0_stop -= (kbc0_stop % blocks_per_ne00) % blocks_per_iter; + kbc0 -= fastmodulo(kbc0, blocks_per_ne00) % blocks_per_iter; + kbc0_stop -= fastmodulo(kbc0_stop, blocks_per_ne00) % blocks_per_iter; const bool did_not_have_any_data = kbc0 == kbc0_stop; - const bool wrote_beginning_of_tile = kbc0 % blocks_per_ne00 == 0; - const bool did_not_write_last = kbc0/blocks_per_ne00 == kbc0_stop/blocks_per_ne00 && kbc0_stop % blocks_per_ne00 != 0; + const bool wrote_beginning_of_tile = fastmodulo(kbc0, blocks_per_ne00) == 0; + const bool did_not_write_last = fastdiv(kbc0, blocks_per_ne00) == fastdiv(kbc0_stop, blocks_per_ne00) && fastmodulo(kbc0_stop, blocks_per_ne00) != 0; if (did_not_have_any_data || wrote_beginning_of_tile || did_not_write_last) { return; } @@ -3765,11 +3822,11 @@ static __global__ void mul_mat_q_stream_k_fixup(const int32_t * ids_dst, // Iterate over previous blocks and sum up partial sums written to fixup buffer. // All CUDA blocks that get here must have a previous block that needs a fixup. - int64_t bidx = bidx0 - 1; - int64_t kbc_stop = kbc0; + int bidx = bidx0 - 1; + int kbc_stop = kbc0; while(true) { - int64_t kbc = bidx*nsamples_y*nchannels_y*ntx*nty*blocks_per_ne00 / gridDim.x; - kbc -= (kbc % blocks_per_ne00) % blocks_per_iter; + int kbc = int64_t(bidx)*(nsamples_y.z*nchannels_y.z*ntx.z*nty*blocks_per_ne00.z) / gridDim.x; + kbc -= fastmodulo(kbc, blocks_per_ne00) % blocks_per_iter; if (kbc == kbc_stop) { // Did not have any data. bidx--; @@ -3779,20 +3836,16 @@ static __global__ void mul_mat_q_stream_k_fixup(const int32_t * ids_dst, any_fixup = true; + #pragma unroll for (int j0 = 0; j0 < mmq_x; j0 += nwarps) { const int j = j0 + threadIdx.y; -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += warp_size) { - const int i = i0 + threadIdx.x; - - sum[(j0/nwarps) * (mmq_y/warp_size) + i0/warp_size] += tmp_last_tile[bidx*(mmq_x*mmq_y) + j*mmq_y + i]; - } + sum[j0/nwarps] += tmp_last_tile[bidx*(mmq_x*mmq_y) + j*mmq_y + i]; } // If this block started in a previous tile we are done and don't need to combine additional partial results. - if (kbc % blocks_per_ne00 == 0 || kbc/blocks_per_ne00 < kbc0/blocks_per_ne00) { + if (fastmodulo(kbc, blocks_per_ne00) == 0 || fastdiv(kbc, blocks_per_ne00) < fastdiv(kbc0, blocks_per_ne00)) { break; } bidx--; @@ -3803,14 +3856,16 @@ static __global__ void mul_mat_q_stream_k_fixup(const int32_t * ids_dst, return; } - int tmp = kbc0; - const int it = tmp / (nsamples_y*nchannels_y*ntx*blocks_per_ne00); - tmp -= it * (nsamples_y*nchannels_y*ntx*blocks_per_ne00); - const int wt = tmp / (nchannels_y*ntx*blocks_per_ne00); - tmp -= wt * (nchannels_y*ntx*blocks_per_ne00); - const int zt = tmp / (ntx*blocks_per_ne00); - tmp -= zt * (ntx*blocks_per_ne00); - const int jt = tmp / blocks_per_ne00; + int tmp = fastdiv(kbc0, blocks_per_ne00); + uint2 tmp2 = fast_div_modulo(tmp, ntx); + const int jt = tmp2.y; + tmp = tmp2.x; + tmp2 = fast_div_modulo(tmp, nchannels_y); + const int zt = tmp2.y; + tmp = tmp2.x; + tmp2 = fast_div_modulo(tmp, nsamples_y); + const int wt = tmp2.y; + const int it = tmp2.x; if (!ids_dst) { const int offset_dst = wt*stride_sample_dst + zt*stride_channel_dst + jt*mmq_x*stride_col_dst + it*mmq_y; @@ -3818,6 +3873,9 @@ static __global__ void mul_mat_q_stream_k_fixup(const int32_t * ids_dst, const int i_max = nrows_x - it*mmq_y - 1; const int j_max = ncols_dst - jt*mmq_x - 1; + if (need_check && i > i_max) { + return; + } #pragma unroll for (int j0 = 0; j0 < mmq_x; j0 += nwarps) { @@ -3827,16 +3885,7 @@ static __global__ void mul_mat_q_stream_k_fixup(const int32_t * ids_dst, return; } -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += warp_size) { - const int i = i0 + threadIdx.x; - - if (need_check && i > i_max) { - continue; - } - - dst[j*stride_col_dst + i] += sum[(j0/nwarps) * (mmq_y/warp_size) + i0/warp_size]; - } + dst[j*stride_col_dst + i] += sum[j0/nwarps]; } return; } @@ -3856,6 +3905,9 @@ static __global__ void mul_mat_q_stream_k_fixup(const int32_t * ids_dst, const int i_max = nrows_x - it*mmq_y - 1; const int j_max = col_diff - jt*mmq_x - 1; + if (need_check && i > i_max) { + return; + } #pragma unroll for (int j0 = 0; j0 < mmq_x; j0 += nwarps) { @@ -3865,16 +3917,7 @@ static __global__ void mul_mat_q_stream_k_fixup(const int32_t * ids_dst, return; } -#pragma unroll - for (int i0 = 0; i0 < mmq_y; i0 += warp_size) { - const int i = i0 + threadIdx.x; - - if (need_check && i > i_max) { - continue; - } - - dst[ids_dst_shared[j]*stride_col_dst + i] += sum[(j0/nwarps) * (mmq_y/warp_size) + i0/warp_size]; - } + dst[ids_dst_shared[j]*stride_col_dst + i] += sum[j0/nwarps]; } } @@ -3922,29 +3965,44 @@ static void launch_mul_mat_q(ggml_backend_cuda_context & ctx, const mmq_args & a const int channel_ratio = args.nchannels_y / args.nchannels_x; const int sample_ratio = args.nsamples_y / args.nsamples_x; + const uint3 blocks_per_ne00_fd = init_fastdiv_values(args.ncols_x / ggml_cuda_type_traits<type>::qk); + const uint3 ntx_fd = init_fastdiv_values(ntx); + const uint3 nchannels_y_fd = init_fastdiv_values(args.nchannels_y); + const uint3 nsamples_y_fd = init_fastdiv_values(args.nsamples_y); + const uint3 channel_ratio_fd = init_fastdiv_values(channel_ratio); + const uint3 sample_ratio_fd = init_fastdiv_values(sample_ratio); + if (!args.use_stream_k) { if (args.nrows_x % mmq_y == 0) { constexpr bool need_check = false; mul_mat_q<type, mmq_x, need_check><<<block_nums_xy_tiling, block_dims, nbytes_shared, stream>>> (args.x, args.y, args.ids_dst, args.expert_bounds, args.dst, nullptr, - args.ncols_x, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, - channel_ratio, args.nchannels_y, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, - sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, - args.ncols_max); + blocks_per_ne00_fd, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, + channel_ratio_fd, nchannels_y_fd, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, + sample_ratio_fd, nsamples_y_fd, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, + ntx_fd); } else { constexpr bool need_check = true; mul_mat_q<type, mmq_x, need_check><<<block_nums_xy_tiling, block_dims, nbytes_shared, stream>>> (args.x, args.y, args.ids_dst, args.expert_bounds, args.dst, nullptr, - args.ncols_x, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, - channel_ratio, args.nchannels_y, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, - sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, - args.ncols_max); + blocks_per_ne00_fd, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, + channel_ratio_fd, nchannels_y_fd, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, + sample_ratio_fd, nsamples_y_fd, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, + ntx_fd); } return; } - const dim3 block_nums_stream_k(nsm, 1, 1); - const bool fixup_needed = ntx*nty*ntzw % nsm != 0; + // For the stream-k kernel it is possible to run it with tiling by setting the number of CUDA blocks equal to the number of tiles. + // This is worthwhile if the efficiency of tiling is high and skipping the fixup kernel is more important. + const int ntiles_dst = ntx * nty * ntzw; + const int tiles_nwaves = (ntiles_dst + nsm - 1) / nsm; + const int tiles_efficiency_percent = 100 * ntiles_dst / (nsm*tiles_nwaves); + const dim3 block_nums_stream_k(GGML_CUDA_CC_IS_NVIDIA(cc) && tiles_efficiency_percent >= 90 ? ntiles_dst : nsm, 1, 1); + + GGML_ASSERT(ntiles_dst * blocks_per_ne00_fd.z < (1 << 30)); // Assert that variable kbc will not overflow. + + const bool fixup_needed = ntiles_dst % block_nums_stream_k.x != 0; ggml_cuda_pool & pool = ctx.pool(id); ggml_cuda_pool_alloc<float> tmp_fixup(pool); @@ -3952,40 +4010,45 @@ static void launch_mul_mat_q(ggml_backend_cuda_context & ctx, const mmq_args & a tmp_fixup.alloc(block_nums_stream_k.x * mmq_x*mmq_y); } + const dim3 block_nums_fixup(block_nums_stream_k.x, mmq_y/warp_size, 1); + const dim3 block_dims_fixup(block_dims.x, block_dims.y/2, block_dims.z); + if (args.nrows_x % mmq_y == 0) { constexpr bool need_check = false; mul_mat_q<type, mmq_x, need_check><<<block_nums_stream_k, block_dims, nbytes_shared, stream>>> (args.x, args.y, args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, - args.ncols_x, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, - channel_ratio, args.nchannels_y, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, - sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, - args.ncols_max); + blocks_per_ne00_fd, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, + channel_ratio_fd, nchannels_y_fd, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, + sample_ratio_fd, nsamples_y_fd, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, + ntx_fd); if (!fixup_needed) { return; } - mul_mat_q_stream_k_fixup<type, mmq_x, need_check><<<block_nums_stream_k, block_dims, 0, stream>>> - (args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, args.ncols_x, args.nrows_x, args.ncols_dst, - args.nrows_dst, args.nchannels_y, args.stride_channel_dst, args.nsamples_y, args.stride_sample_dst, - args.ncols_max); + CUDA_CHECK(cudaGetLastError()); + mul_mat_q_stream_k_fixup<type, mmq_x, need_check><<<block_nums_fixup, block_dims_fixup, 0, stream>>> + (args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, blocks_per_ne00_fd, args.nrows_x, args.ncols_dst, + args.nrows_dst, nchannels_y_fd, args.stride_channel_dst, nsamples_y_fd, args.stride_sample_dst, + ntx_fd); } else { constexpr bool need_check = true; mul_mat_q<type, mmq_x, need_check><<<block_nums_stream_k, block_dims, nbytes_shared, stream>>> (args.x, args.y, args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, - args.ncols_x, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, - channel_ratio, args.nchannels_y, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, - sample_ratio, args.nsamples_y, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, - args.ncols_max); + blocks_per_ne00_fd, args.nrows_x, args.ncols_dst, args.stride_row_x, args.ncols_y, args.nrows_dst, + channel_ratio_fd, nchannels_y_fd, args.stride_channel_x, args.stride_channel_y, args.stride_channel_dst, + sample_ratio_fd, nsamples_y_fd, args.stride_sample_x, args.stride_sample_y, args.stride_sample_dst, + ntx_fd); if (!fixup_needed) { return; } - mul_mat_q_stream_k_fixup<type, mmq_x, need_check><<<block_nums_stream_k, block_dims, 0, stream>>> - (args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, args.ncols_x, args.nrows_x, args.ncols_dst, - args.nrows_dst, args.nchannels_y, args.stride_channel_dst, args.nsamples_y, args.stride_sample_dst, - args.ncols_max); + CUDA_CHECK(cudaGetLastError()); + mul_mat_q_stream_k_fixup<type, mmq_x, need_check><<<block_nums_fixup, block_dims_fixup, 0, stream>>> + (args.ids_dst, args.expert_bounds, args.dst, tmp_fixup.ptr, blocks_per_ne00_fd, args.nrows_x, args.ncols_dst, + args.nrows_dst, nchannels_y_fd, args.stride_channel_dst, nsamples_y_fd, args.stride_sample_dst, + ntx_fd); } } diff --git a/ggml/src/ggml-cuda/mmvq.cu b/ggml/src/ggml-cuda/mmvq.cu index 8f55cace1a1..da48f313a38 100644 --- a/ggml/src/ggml-cuda/mmvq.cu +++ b/ggml/src/ggml-cuda/mmvq.cu @@ -115,6 +115,7 @@ static constexpr __host__ __device__ int get_mmvq_mmid_max_batch_pascal_older(gg case GGML_TYPE_IQ4_NL: return 6; case GGML_TYPE_IQ4_XS: return 5; case GGML_TYPE_MXFP4: return 4; + case GGML_TYPE_NVFP4: return 4; case GGML_TYPE_Q2_K: return 4; case GGML_TYPE_Q3_K: return 4; case GGML_TYPE_Q4_0: return 6; @@ -135,6 +136,7 @@ static constexpr __host__ __device__ int get_mmvq_mmid_max_batch_turing_plus(ggm case GGML_TYPE_IQ3_S: return 6; case GGML_TYPE_IQ3_XXS: return 7; case GGML_TYPE_MXFP4: return 7; + case GGML_TYPE_NVFP4: return 8; case GGML_TYPE_Q2_K: return 7; case GGML_TYPE_Q3_K: return 5; default: return MMVQ_MAX_BATCH_SIZE; @@ -221,6 +223,7 @@ static constexpr __host__ __device__ int get_mmvq_mmid_max_batch_rdna4(ggml_type case GGML_TYPE_IQ4_NL: return 7; case GGML_TYPE_IQ4_XS: return 5; case GGML_TYPE_MXFP4: return 5; + case GGML_TYPE_NVFP4: return 5; case GGML_TYPE_Q3_K: return 4; case GGML_TYPE_Q4_0: return 7; case GGML_TYPE_Q4_1: return 7; diff --git a/ggml/src/ggml-cuda/quantize.cu b/ggml/src/ggml-cuda/quantize.cu index 4300ffc148c..52f664719ae 100644 --- a/ggml/src/ggml-cuda/quantize.cu +++ b/ggml/src/ggml-cuda/quantize.cu @@ -70,6 +70,102 @@ __device__ __forceinline__ uint8_t compute_e8m0_scale(float amax) { return static_cast<uint8_t>(biased); } + +static __global__ void quantize_mmq_nvfp4( + const float * __restrict__ x, const int32_t * __restrict__ ids, void * __restrict__ vy, + const int64_t ne00, const int64_t s01, const int64_t s02, const int64_t s03, + const int64_t ne0, const int64_t ne1, const int64_t ne2) { +#if defined(BLACKWELL_MMA_AVAILABLE) + + const int64_t i0_base = ((int64_t) blockDim.x * blockIdx.y + threadIdx.x) * QK_NVFP4_SUB; + if (i0_base >= ne0) { + return; + } + + const int64_t i1 = blockIdx.x; + const int64_t i2 = blockIdx.z % ne2; + const int64_t i3 = blockIdx.z / ne2; + const int64_t i01 = ids ? ids[i1] : i1; + const int64_t k_block = i0_base / QK_K; + const int64_t blocks_per_col = (ne0 + QK_K - 1) / QK_K; + if (k_block >= blocks_per_col) { + return; + } + + const int64_t ib = blockIdx.z * ((int64_t) blocks_per_col * ne1) + k_block * ne1 + blockIdx.x; + block_fp4_mmq * y = (block_fp4_mmq *) vy; + block_fp4_mmq * yb = y + ib; + + const int sub = (i0_base % QK_K) / QK_NVFP4_SUB; + + float vals_raw[QK_NVFP4_SUB]; + float amax_raw = 0.0f; + const int64_t base_idx = i3 * s03 + i2 * s02 + i01 * s01; +#pragma unroll + for (int k = 0; k < QK_NVFP4_SUB; k++) { + const int64_t i00 = i0_base + k; + if (i00 < ne00) { + const float v = x[base_idx + i00]; + vals_raw[k] = v; + amax_raw = fmaxf(amax_raw, fabsf(v)); + } else { + vals_raw[k] = 0.0f; + } + } + + static constexpr int test_offsets[5] = { 0, -1, 1, -2, 2}; + const int first_fp8_code = (int) ggml_cuda_fp32_to_ue4m3(amax_raw / 6.0f); + + float best_err = FLT_MAX; + uint8_t fp8_code = 0; + float subblock_scale = 0.0f; + +#pragma unroll // Check +/- 2 to find best code to reduce NVFP4 activation loss. Negligible overhead on Blackwell. + for (int i = 0; i < 5; i++) { + const int test_code = first_fp8_code + test_offsets[i]; + if (test_code < 0 || test_code > 0x7e) { + continue; + } + const uint8_t code = (uint8_t) test_code; + const float test_scale = ggml_cuda_ue4m3_to_fp32(code); + const float test_inv_scale = test_scale > 0.0f ? 0.5f / test_scale : 0.0f; + float cur_err = 0.0f; +#pragma unroll + for (int k = 0; k < QK_NVFP4_SUB; ++k) { + const float v = vals_raw[k]; + const uint8_t q = ggml_cuda_float_to_fp4_e2m1(v, test_inv_scale); + const float err_diff = fabsf(v) - fabsf(kvalues_mxfp4[q & 0x7]) * test_scale; + cur_err = fmaf(err_diff, err_diff, cur_err); + } + + if (cur_err < best_err) { + best_err = cur_err; + fp8_code = test_code; + subblock_scale = test_scale; + } + } + + const float inv_scale = subblock_scale > 0.0f ? 0.5f / subblock_scale : 0.0f; + uint32_t q0 = 0; + uint32_t q1 = 0; +#pragma unroll // this is faster than the previous __nv_fp4x4_e2m1 + for (int k = 0; k < QK_NVFP4_SUB / 4; ++k) { + q0 |= (uint32_t) ggml_cuda_float_to_fp4_e2m1(vals_raw[k + 0], inv_scale) << (8 * k); + q0 |= (uint32_t) ggml_cuda_float_to_fp4_e2m1(vals_raw[k + 8], inv_scale) << (8 * k + 4); + q1 |= (uint32_t) ggml_cuda_float_to_fp4_e2m1(vals_raw[k + 4], inv_scale) << (8 * k); + q1 |= (uint32_t) ggml_cuda_float_to_fp4_e2m1(vals_raw[k + 12], inv_scale) << (8 * k + 4); + } + + uint32_t * yqs = reinterpret_cast<uint32_t *>(yb->qs); + yqs[2 * sub + 0] = q0; + yqs[2 * sub + 1] = q1; + reinterpret_cast<uint8_t *>(yb->d4)[sub] = fp8_code; +#else + NO_DEVICE_CODE; // This is for Blackwell NVFP4 activations only. +#endif // defined(BLACKWELL_MMA_AVAILABLE) + +} + // quantize values in the format mxfp4 is stored which is interleaved nibbles // i.e. a block a0-a31 is represented as a0a16,a1a17 ...a15a31 static __global__ void quantize_mmq_mxfp4(const float * __restrict__ x, @@ -316,28 +412,32 @@ void quantize_mmq_q8_1_cuda( } } -void quantize_mmq_mxfp4_cuda(const float * x, - const int32_t * ids, - void * vy, - [[maybe_unused]] const ggml_type type_src0, - const int64_t ne00, - const int64_t s01, - const int64_t s02, - const int64_t s03, - const int64_t ne0, - const int64_t ne1, - const int64_t ne2, - const int64_t ne3, - cudaStream_t stream) { - GGML_ASSERT(ne0 % (2 * QK_MXFP4) == 0); - - constexpr int nwarps = 8; - constexpr int vals_per_warp = 2 * QK_MXFP4; - constexpr int vals_per_block = nwarps * vals_per_warp; - - const int64_t block_num_y = (ne0 + vals_per_block - 1) / vals_per_block; - const dim3 num_blocks(ne1, block_num_y, ne2 * ne3); - const dim3 block_size(WARP_SIZE, nwarps, 1); - - quantize_mmq_mxfp4<<<num_blocks, block_size, 0, stream>>>(x, ids, vy, ne00, s01, s02, s03, ne0, ne1, ne2); +void quantize_mmq_fp4_cuda( + const float * x, const int32_t * ids, void * vy, const ggml_type type_src0, + const int64_t ne00, const int64_t s01, const int64_t s02, const int64_t s03, + const int64_t ne0, const int64_t ne1, const int64_t ne2, const int64_t ne3, cudaStream_t stream) { + GGML_ASSERT(type_src0 == GGML_TYPE_MXFP4 || type_src0 == GGML_TYPE_NVFP4); + GGML_ASSERT(ne0 > 0); + + if (type_src0 == GGML_TYPE_NVFP4) { + GGML_ASSERT(ne00 % QK_NVFP4 == 0); + constexpr int nvfp4_block_size = 128; + const int64_t block_num_y = (ne0 + QK_NVFP4_SUB * nvfp4_block_size - 1) / (QK_NVFP4_SUB * nvfp4_block_size); + const dim3 block_size(nvfp4_block_size, 1, 1); + const dim3 num_blocks(ne1, block_num_y, ne2 * ne3); + quantize_mmq_nvfp4<<<num_blocks, block_size, 0, stream>>>( + x, ids, vy, ne00, s01, s02, s03, ne0, ne1, ne2); + } else { + GGML_ASSERT(ne0 % (2 * QK_MXFP4) == 0); + + constexpr int nwarps = 8; + constexpr int vals_per_warp = 2 * QK_MXFP4; + constexpr int vals_per_block = nwarps * vals_per_warp; + + const int64_t block_num_y = (ne0 + vals_per_block - 1) / vals_per_block; + const dim3 num_blocks(ne1, block_num_y, ne2 * ne3); + const dim3 block_size(WARP_SIZE, nwarps, 1); + + quantize_mmq_mxfp4<<<num_blocks, block_size, 0, stream>>>(x, ids, vy, ne00, s01, s02, s03, ne0, ne1, ne2); + } } diff --git a/ggml/src/ggml-cuda/quantize.cuh b/ggml/src/ggml-cuda/quantize.cuh index 6a91df63578..768a3ae6de6 100644 --- a/ggml/src/ggml-cuda/quantize.cuh +++ b/ggml/src/ggml-cuda/quantize.cuh @@ -26,7 +26,7 @@ void quantize_mmq_q8_1_cuda( ggml_type type_src0, int64_t ne00, int64_t s01, int64_t s02, int64_t s03, int64_t ne0, int64_t ne1, int64_t ne2, int64_t ne3, cudaStream_t stream); -void quantize_mmq_mxfp4_cuda(const float * x, +void quantize_mmq_fp4_cuda(const float * x, const int32_t * ids, void * vy, ggml_type type_src0, diff --git a/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_32.cu b/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_32.cu index 1f554d81e5e..8fc3b17976e 100644 --- a/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_32.cu +++ b/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_1-ncols2_32.cu @@ -2,4 +2,5 @@ #include "../fattn-mma-f16.cuh" +DECL_FATTN_MMA_F16_CASE(320, 256, 1, 32); DECL_FATTN_MMA_F16_CASE(576, 512, 1, 32); diff --git a/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_32.cu b/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_32.cu index 264751d65ec..abd2b21ce04 100644 --- a/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_32.cu +++ b/ggml/src/ggml-cuda/template-instances/fattn-mma-f16-instance-ncols1_2-ncols2_32.cu @@ -2,4 +2,5 @@ #include "../fattn-mma-f16.cuh" +DECL_FATTN_MMA_F16_CASE(320, 256, 2, 32); DECL_FATTN_MMA_F16_CASE(576, 512, 2, 32); diff --git a/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq320-dv256.cu b/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq320-dv256.cu new file mode 100644 index 00000000000..c91f508079d --- /dev/null +++ b/ggml/src/ggml-cuda/template-instances/fattn-tile-instance-dkq320-dv256.cu @@ -0,0 +1,5 @@ +// This file has been autogenerated by generate_cu_files.py, do not edit manually. + +#include "../fattn-tile.cuh" + +DECL_FATTN_TILE_CASE(320, 256); diff --git a/ggml/src/ggml-cuda/template-instances/generate_cu_files.py b/ggml/src/ggml-cuda/template-instances/generate_cu_files.py index 841059c15b5..5e9a1cb2eb3 100755 --- a/ggml/src/ggml-cuda/template-instances/generate_cu_files.py +++ b/ggml/src/ggml-cuda/template-instances/generate_cu_files.py @@ -3,7 +3,7 @@ from glob import glob import os -HEAD_SIZES_KQ = [40, 64, 72, 80, 96, 112, 128, 256, 512, 576] +HEAD_SIZES_KQ = [40, 64, 72, 80, 96, 112, 128, 256, 320, 512, 576] TYPES_KV = ["GGML_TYPE_F16", "GGML_TYPE_Q4_0", "GGML_TYPE_Q4_1", "GGML_TYPE_Q5_0", "GGML_TYPE_Q5_1", "GGML_TYPE_Q8_0", "GGML_TYPE_BF16"] @@ -62,7 +62,7 @@ def get_short_name(long_quant_name): os.remove(filename) for head_size_kq in HEAD_SIZES_KQ: - head_size_v = head_size_kq if head_size_kq != 576 else 512 + head_size_v = 256 if head_size_kq == 320 else (head_size_kq if head_size_kq != 576 else 512) with open(f"fattn-tile-instance-dkq{head_size_kq}-dv{head_size_v}.cu", "w") as f: f.write(SOURCE_FATTN_TILE.format(head_size_kq=head_size_kq, head_size_v=head_size_v)) @@ -84,13 +84,16 @@ def get_short_name(long_quant_name): continue if head_size_kq == 72: continue - if head_size_kq == 512 and ncols2 not in (4, 8): + # Skip compilation of unused ncols2 values for niche head sizes: + if head_size_kq == 320 and ncols2 != 32: # Mistral Small 4 continue - if head_size_kq != 576 and ncols2 in (16, 32): + if head_size_kq == 512 and ncols2 not in (4, 8): # Gemma 4 continue - if head_size_kq == 576 and ncols2 not in (4, 16, 32): + if head_size_kq == 576 and ncols2 not in (4, 16, 32): # Deepseek, GLM 4.7 Flash continue - head_size_v = head_size_kq if head_size_kq != 576 else 512 + if head_size_kq not in (320, 576) and ncols2 in (16, 32): + continue + head_size_v = 256 if head_size_kq == 320 else (head_size_kq if head_size_kq != 576 else 512) f.write(SOURCE_FATTN_MMA_CASE.format(ncols1=ncols1, ncols2=ncols2, head_size_kq=head_size_kq, head_size_v=head_size_v)) for type in TYPES_MMQ: diff --git a/ggml/src/ggml-hexagon/htp/hmx-matmul-ops.c b/ggml/src/ggml-hexagon/htp/hmx-matmul-ops.c index dbca8220fab..05e3c6c2b0f 100644 --- a/ggml/src/ggml-hexagon/htp/hmx-matmul-ops.c +++ b/ggml/src/ggml-hexagon/htp/hmx-matmul-ops.c @@ -1683,7 +1683,7 @@ int mat_mul_qk_0_d16a32_out_stationary(struct htp_context *ctx, float *restrict __fp16 *vtcm_scales = (__fp16 *) vtcm_seq_alloc(&vtcm_ptr, 256); assert((size_t)(vtcm_ptr - (uint8_t *)ctx->vtcm_base) <= vtcm_budget); - FARF(HIGH, "hmx-mm: m=%d k=%d n=%d wtype=%d block M=%zu N=%zu K=%zu vtcm=%zu/%zu", __func__, m, k, n, weight_type, + FARF(HIGH, "hmx-mm: m=%d k=%d n=%d wtype=%d block M=%zu N=%zu K=%zu vtcm=%zu/%zu", m, k, n, weight_type, M_BLOCK_SIZE, N_BLOCK_SIZE, K_BLOCK_SIZE, (size_t) (vtcm_ptr - (uint8_t *) ctx->vtcm_base), vtcm_budget); // initialize eye tile (32x32 identity matrix) diff --git a/ggml/src/ggml-hexagon/htp/main.c b/ggml/src/ggml-hexagon/htp/main.c index db277a25e5a..f58347304be 100644 --- a/ggml/src/ggml-hexagon/htp/main.c +++ b/ggml/src/ggml-hexagon/htp/main.c @@ -101,6 +101,26 @@ AEEResult htp_iface_open(const char * uri, remote_handle64 * handle) { } } +#if __HVX_ARCH__ >= 75 + { + // Set HMX clock + HAP_power_request_t request; + memset(&request, 0, sizeof(HAP_power_request_t)); + request.type = HAP_power_set_HMX_v2; + request.hmx_v2.set_clock = TRUE; + request.hmx_v2.target_corner = HAP_DCVS_EXP_VCORNER_MAX; + request.hmx_v2.min_corner = HAP_DCVS_EXP_VCORNER_MAX; + request.hmx_v2.max_corner = HAP_DCVS_EXP_VCORNER_MAX; + request.hmx_v2.perf_mode = HAP_CLK_PERF_HIGH; + FARF(ALWAYS, "Setting HMX clock\n"); + err = HAP_power_set((void *) &ctx, &request); + if (err != AEE_SUCCESS) { + FARF(ERROR, "Error setting HMX clock."); + return err; + } + } +#endif + return AEE_SUCCESS; } diff --git a/ggml/src/ggml-hexagon/libggml-htp.inf b/ggml/src/ggml-hexagon/libggml-htp.inf index 360d8b1228e..39cefcdda38 100644 --- a/ggml/src/ggml-hexagon/libggml-htp.inf +++ b/ggml/src/ggml-hexagon/libggml-htp.inf @@ -8,7 +8,7 @@ CatalogFile = libggml-htp.cat PnpLockDown = 1 [DestinationDirs] -Drivers_Dir = 6 +Drivers_Dir = 13 [SourceDisksNames] 1 = %DiskId% diff --git a/ggml/src/ggml-metal/ggml-metal-device.cpp b/ggml/src/ggml-metal/ggml-metal-device.cpp index 07d016d2227..d211bf79f14 100644 --- a/ggml/src/ggml-metal/ggml-metal-device.cpp +++ b/ggml/src/ggml-metal/ggml-metal-device.cpp @@ -677,7 +677,15 @@ ggml_metal_pipeline_with_params ggml_metal_library_get_pipeline_mul_mm(ggml_meta const ggml_type tsrc1 = op->src[1]->type; const bool bc_inp = op->src[0]->ne[0] % 32 != 0; - const bool bc_out = op->ne[0] % 64 != 0 || op->ne[1] % 32 != 0; + + constexpr int NRA = SZ_SIMDGROUP * N_MM_BLOCK_Y * N_MM_SIMD_GROUP_Y; + constexpr int NRB = SZ_SIMDGROUP * N_MM_BLOCK_X * N_MM_SIMD_GROUP_X; + + const bool has_tensor = ggml_metal_device_get_props(ggml_metal_library_get_device(lib))->has_tensor; + + const bool bc_out = has_tensor + ? (op->ne[0] % NRA != 0 || op->ne[1] % NRB != 0) + : (op->ne[0] % 64 != 0 || op->ne[1] % 32 != 0); snprintf(base, 256, "kernel_mul_mm_%s_%s", ggml_type_name(tsrc0), ggml_type_name(tsrc1)); snprintf(name, 256, "%s_bci=%d_bco=%d", base, bc_inp, bc_out); @@ -694,8 +702,20 @@ ggml_metal_pipeline_with_params ggml_metal_library_get_pipeline_mul_mm(ggml_meta ggml_metal_cv_free(cv); } - // when the output size is not multiple of 64x32, we need extra smem to prevent out-of-bounds writes - res.smem = bc_out ? 8192 : 4096 + 2048; + if (has_tensor) { + res.nr0 = NRA; + res.nr1 = NRB; + + const size_t smem_a = NRA * N_MM_NK_TOTAL * sizeof(ggml_fp16_t); + res.smem = smem_a; + } else { + res.nr0 = 64; + res.nr1 = 32; + + res.smem = bc_out ? 8192 : (4096 + 2048); + } + + res.nsg = N_MM_SIMD_GROUP_X * N_MM_SIMD_GROUP_Y; return res; } diff --git a/ggml/src/ggml-metal/ggml-metal-device.h b/ggml/src/ggml-metal/ggml-metal-device.h index b423501358e..a6c1dab5515 100644 --- a/ggml/src/ggml-metal/ggml-metal-device.h +++ b/ggml/src/ggml-metal/ggml-metal-device.h @@ -102,6 +102,8 @@ ggml_metal_library_t ggml_metal_library_init_from_source(ggml_metal_device_t dev void ggml_metal_library_free(ggml_metal_library_t lib); +ggml_metal_device_t ggml_metal_library_get_device(ggml_metal_library_t lib); + struct ggml_metal_pipeline_with_params ggml_metal_library_get_pipeline (ggml_metal_library_t lib, const char * name); struct ggml_metal_pipeline_with_params ggml_metal_library_compile_pipeline(ggml_metal_library_t lib, const char * base, const char * name, ggml_metal_cv_t cv); diff --git a/ggml/src/ggml-metal/ggml-metal-device.m b/ggml/src/ggml-metal/ggml-metal-device.m index 27b78c5e6d7..fe90aafe7bc 100644 --- a/ggml/src/ggml-metal/ggml-metal-device.m +++ b/ggml/src/ggml-metal/ggml-metal-device.m @@ -95,8 +95,8 @@ int ggml_metal_pipeline_max_theads_per_threadgroup(struct ggml_metal_pipeline_wi struct ggml_metal_library { id<MTLLibrary> obj; - id<MTLDevice> device; + ggml_metal_device_t dev; ggml_metal_pipelines_t pipelines; // cache of compiled pipelines NSLock * lock; @@ -251,7 +251,7 @@ ggml_metal_library_t ggml_metal_library_init(ggml_metal_device_t dev) { ggml_metal_library_t res = calloc(1, sizeof(struct ggml_metal_library)); res->obj = library; - res->device = device; + res->dev = dev; res->pipelines = ggml_metal_pipelines_init(); res->lock = [NSLock new]; @@ -318,7 +318,7 @@ ggml_metal_library_t ggml_metal_library_init_from_source(ggml_metal_device_t dev } res->obj = library; - res->device = device; + res->dev = dev; res->pipelines = ggml_metal_pipelines_init(); res->lock = [NSLock new]; @@ -341,6 +341,10 @@ void ggml_metal_library_free(ggml_metal_library_t lib) { free(lib); } +ggml_metal_device_t ggml_metal_library_get_device(ggml_metal_library_t lib) { + return lib->dev; +} + struct ggml_metal_pipeline_with_params ggml_metal_library_get_pipeline(ggml_metal_library_t lib, const char * name) { [lib->lock lock]; @@ -405,7 +409,8 @@ struct ggml_metal_pipeline_with_params ggml_metal_library_compile_pipeline(ggml_ return res; } - id<MTLComputePipelineState> obj = [lib->device newComputePipelineStateWithFunction:mtl_function error:&error]; + id<MTLDevice> device = ggml_metal_device_get_obj(lib->dev); + id<MTLComputePipelineState> obj = [device newComputePipelineStateWithFunction:mtl_function error:&error]; [mtl_function release]; @@ -699,7 +704,7 @@ ggml_metal_device_t ggml_metal_device_init(int device) { " auto sB = tB.slice(0, 0); \n" " mm.run(sB, sA, cT); \n" " \n" - " auto tC = tensor<device float, dextents<int32_t, 2>, tensor_inline>(C, dextents<int32_t, 2>(4, 4)); \n" + " auto tC = tensor<device float, dextents<int32_t, 2>, tensor_inline>(C, dextents<int32_t, 2>(16, 16)); \n" " \n" " cT.store(tC); \n" "}"; @@ -749,7 +754,7 @@ ggml_metal_device_t ggml_metal_device_init(int device) { " auto sB = tB.slice(0, 0); \n" " mm.run(sB, sA, cT); \n" " \n" - " auto tC = tensor<device float, dextents<int32_t, 2>, tensor_inline>(C, dextents<int32_t, 2>(4, 4)); \n" + " auto tC = tensor<device float, dextents<int32_t, 2>, tensor_inline>(C, dextents<int32_t, 2>(16, 16)); \n" " \n" " cT.store(tC); \n" "}"; diff --git a/ggml/src/ggml-metal/ggml-metal-impl.h b/ggml/src/ggml-metal/ggml-metal-impl.h index 379a8b33a14..ff74cafb5b7 100644 --- a/ggml/src/ggml-metal/ggml-metal-impl.h +++ b/ggml/src/ggml-metal/ggml-metal-impl.h @@ -1,6 +1,19 @@ #ifndef GGML_METAL_IMPL #define GGML_METAL_IMPL +// kernel parameters for mat-mat threadgroups +// +// TODO: become function constants + +#define SZ_SIMDGROUP 16 +#define N_MM_NK 2 +#define N_MM_NK_TOTAL (SZ_SIMDGROUP * N_MM_NK) + +#define N_MM_BLOCK_X 4 +#define N_MM_BLOCK_Y 2 +#define N_MM_SIMD_GROUP_X 2 +#define N_MM_SIMD_GROUP_Y 2 + // kernel parameters for mat-vec threadgroups // // N_R0: number of src0 rows to process per simdgroup diff --git a/ggml/src/ggml-metal/ggml-metal-ops.cpp b/ggml/src/ggml-metal/ggml-metal-ops.cpp index e173527909a..5fa162c875c 100644 --- a/ggml/src/ggml-metal/ggml-metal-ops.cpp +++ b/ggml/src/ggml-metal/ggml-metal-ops.cpp @@ -2195,7 +2195,12 @@ int ggml_metal_op_mul_mat(ggml_metal_op_t ctx, int idx) { const size_t smem = pipeline.smem; ggml_metal_encoder_set_threadgroup_memory_size(enc, smem, 0); - ggml_metal_encoder_dispatch_threadgroups(enc, ((ne11 + 31)/32), ((ne01 + 63)/64), ne12*ne13, 128, 1, 1); + + const int nr0 = pipeline.nr0; + const int nr1 = pipeline.nr1; + const int nsg = pipeline.nsg; + + ggml_metal_encoder_dispatch_threadgroups(enc, ((ne11 + nr1 - 1) / nr1), ((ne01 + nr0 - 1) / nr0), ne12 * ne13, 32, nsg, 1); } else { auto pipeline = ggml_metal_library_get_pipeline_mul_mv(lib, op); diff --git a/ggml/src/ggml-metal/ggml-metal.metal b/ggml/src/ggml-metal/ggml-metal.metal index 9f38c9d2968..c372eaedeae 100644 --- a/ggml/src/ggml-metal/ggml-metal.metal +++ b/ggml/src/ggml-metal/ggml-metal.metal @@ -9306,7 +9306,137 @@ constant bool FC_mul_mm_bc_inp [[function_constant(FC_MUL_MM + 0)]]; constant bool FC_mul_mm_bc_out [[function_constant(FC_MUL_MM + 1)]]; // each block_q contains 16*nl weights -template<typename S0, typename S0_4x4, typename S0_8x8, typename S1, typename S1_2x4, typename S1_8x8, typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread S0_4x4 &), typename T0, typename T0_4x4, typename T1, typename T1_2x4> +#ifdef GGML_METAL_HAS_TENSOR +template< + typename SA, typename SA_4x4, typename SA_8x8, + typename SB, typename SB_2x4, typename SB_8x8, + typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread SA_4x4 &), + typename T0, typename T0_4x4, typename T1, typename T1_2x4> +kernel void kernel_mul_mm( + constant ggml_metal_kargs_mul_mm & args, + device const char * srcA, + device const char * srcB, + device char * dst, + threadgroup char * shmem [[threadgroup(0)]], + uint3 tgpig [[threadgroup_position_in_grid]], + ushort tiitg [[thread_index_in_threadgroup]], + ushort sgitg [[simdgroup_index_in_threadgroup]]) { + (void) sgitg; + + // Matrix dimensions: A(M,K) x B(K,N) -> C(M,N) + const int K = args.ne00; + const int M = args.ne0; + const int N = args.ne1; + + // Batch dimension handling + const int im = tgpig.z; + const int i12 = im % args.ne12; + const int i13 = im / args.ne12; + + // Batch offsets for srcA and srcB + const uint64_t offset0 = (i12/args.r2)*args.nb02 + (i13/args.r3)*args.nb03; + + // Tile dimensions + constexpr int NRB = SZ_SIMDGROUP * N_MM_BLOCK_X * N_MM_SIMD_GROUP_X; + constexpr int NRA = SZ_SIMDGROUP * N_MM_BLOCK_Y * N_MM_SIMD_GROUP_Y; + + // Tile offsets in output matrix + const int ra = tgpig.y * NRA; + const int rb = tgpig.x * NRB; + + // Threadgroup memory for dequantized A tile only + threadgroup SA * sa = (threadgroup SA *)(shmem); + + // Work-item count for A loading + constexpr int A_WORK_ITEMS = NRA * N_MM_NK; + constexpr int NUM_THREADS = N_SIMDWIDTH * N_MM_SIMD_GROUP_X * N_MM_SIMD_GROUP_Y; + + // tA wraps threadgroup memory + auto tA = tensor(sa, dextents<int32_t, 2>(N_MM_NK_TOTAL, NRA)); + + // tB wraps device memory directly + device T1 * ptrB = (device T1 *)(srcB + args.nb12*i12 + args.nb13*i13); + const int strideB = args.nb11 / sizeof(T1); + auto tB = tensor(ptrB, dextents<int32_t, 2>(K, N), array<int, 2>({1, strideB})); + + // Configure matmul operation + mpp::tensor_ops::matmul2d< + mpp::tensor_ops::matmul2d_descriptor( + NRB, NRA, N_MM_NK_TOTAL, false, true, true, + mpp::tensor_ops::matmul2d_descriptor::mode::multiply_accumulate), + execution_simdgroups<N_MM_SIMD_GROUP_X * N_MM_SIMD_GROUP_Y>> mm; + + auto cT = mm.get_destination_cooperative_tensor<decltype(tB), decltype(tA), float>(); + + // Accumulate partial results over K dimension + for (int loop_k = 0; loop_k < K; loop_k += N_MM_NK_TOTAL) { + // === PHASE 1: Dequantization of A into threadgroup memory === + for (int work = tiitg; work < A_WORK_ITEMS; work += NUM_THREADS) { + const int row = work / N_MM_NK; + const int k_chunk = work % N_MM_NK; + const int k_pos = loop_k + k_chunk * 16; + const short k_base = k_chunk * 16; + + // Bounds check: skip device read if row is out of matrix bounds + if (ra + row < M) { + if (is_same<T0_4x4, block_q>::value && FC_mul_mm_bc_inp) { + // Element-wise reads when K is not aligned (nb01 not aligned for half4x4/float4x4). + // MSL spec Table 2.5: half4x4 requires 8-byte alignment. When K is odd, + // nb01 = K*2 is not 8-byte aligned, so odd-row pointers are misaligned. + // Mirrors the legacy kernel's existing guard. + device const T0 * row_ptr = (device const T0 *)(srcA + args.nb01 * (ra + row) + offset0); + + FOR_UNROLL (short i = 0; i < 16; i++) { + sa[row * N_MM_NK_TOTAL + (k_base + i)] = (k_pos + i < K) ? (SA) row_ptr[k_pos + i] : (SA)0; + } + } else { + const int block_idx = k_pos / (16 * nl); + const short il = (k_pos / 16) % nl; + + device const block_q * row_ptr = (device const block_q *)(srcA + args.nb01 * (ra + row) + offset0); + + SA_4x4 temp_a; + dequantize_func(row_ptr + block_idx, il, temp_a); + + FOR_UNROLL (short i = 0; i < 16; i++) { + // Zero-pad A for K positions beyond valid range (handles partial K iterations) + sa[row * N_MM_NK_TOTAL + (k_base + i)] = (k_pos + i < K) ? temp_a[i/4][i%4] : (SA)0; + } + } + } else { + // Zero-pad rows beyond matrix bounds + FOR_UNROLL (short i = 0; i < 16; i++) { + sa[row * N_MM_NK_TOTAL + (k_base + i)] = (SA)0; + } + } + } + + threadgroup_barrier(mem_flags::mem_threadgroup); + + // === PHASE 2: Tensor matmul === + auto mA = tA.slice(0, 0); + auto mB = tB.slice(loop_k, rb); + + mm.run(mB, mA, cT); + + threadgroup_barrier(mem_flags::mem_threadgroup); + } + + // Store result tile to output matrix (with batch offset) + // cT.store handles bounds checking via tD's extents (M, N) + device float * dstBatch = (device float *)dst + im * N * M; + + auto tD = tensor(dstBatch, dextents<int32_t, 2>(M, N), array<int, 2>({1, M})); + cT.store(tD.slice(ra, rb)); +} + +#else + +template< + typename S0, typename S0_4x4, typename S0_8x8, + typename S1, typename S1_2x4, typename S1_8x8, + typename block_q, short nl, void (*dequantize_func)(device const block_q *, short, thread S0_4x4 &), + typename T0, typename T0_4x4, typename T1, typename T1_2x4> kernel void kernel_mul_mm( constant ggml_metal_kargs_mul_mm & args, device const char * src0, @@ -9320,10 +9450,6 @@ kernel void kernel_mul_mm( threadgroup S0 * sa = (threadgroup S0 *)(shmem); threadgroup S1 * sb = (threadgroup S1 *)(shmem + 4096); -#ifdef GGML_METAL_HAS_TENSOR - threadgroup float * sc = (threadgroup float *)(shmem); -#endif - constexpr int NR0 = 64; constexpr int NR1 = 32; @@ -9363,7 +9489,6 @@ kernel void kernel_mul_mm( + args.nb11*(r1 + lr1) + args.nb10*iy); -#ifndef GGML_METAL_HAS_TENSOR S0_8x8 ma[4]; S1_8x8 mb[2]; @@ -9372,19 +9497,8 @@ kernel void kernel_mul_mm( for (short i = 0; i < 8; i++){ mc[i] = make_filled_simdgroup_matrix<float, 8>(0.f); } -#else - auto tA = tensor<threadgroup S0, dextents<int32_t, 2>, tensor_inline>(sa, dextents<int32_t, 2>(NK, NR0)); - auto tB = tensor<threadgroup S1, dextents<int32_t, 2>, tensor_inline>(sb, dextents<int32_t, 2>(NR1, NK )); - - mpp::tensor_ops::matmul2d< - mpp::tensor_ops::matmul2d_descriptor(NR1, NR0, NK, false, true, false, mpp::tensor_ops::matmul2d_descriptor::mode::multiply_accumulate), - execution_simdgroups<4>> mm; - - auto cT = mm.get_destination_cooperative_tensor<decltype(tA), decltype(tB), float>(); -#endif for (int loop_k = 0; loop_k < args.ne00; loop_k += NK) { -#ifndef GGML_METAL_HAS_TENSOR // load data and store to threadgroup memory if (is_same<T0_4x4, block_q>::value && FC_mul_mm_bc_inp) { threadgroup_barrier(mem_flags::mem_threadgroup); @@ -9454,66 +9568,6 @@ kernel void kernel_mul_mm( *(threadgroup S1_2x4 *)(sb + 64*ib + 8*ly) = (S1_2x4)(*((device T1_2x4 *) y)); } -#else - // load data and store to threadgroup memory - if (is_same<T0_4x4, block_q>::value && FC_mul_mm_bc_inp) { - threadgroup_barrier(mem_flags::mem_threadgroup); - - // no need for dequantization - for (short i = 0; i < 16; i++) { - const short sx = 2*il0 + i/8; - const short sy = (tiitg/NL0)/8; - - const short lx = i%8; - const short ly = (tiitg/NL0)%8; - //const short lx = (tiitg/NL0)%8; - //const short ly = i%8; - - *(sa + NK*(8*sy + ly) + 8*sx + lx) = loop_k + 16*il + i < args.ne00 ? *((device T0 *) x + i) : 0; - } - } else { - S0_4x4 temp_a; - dequantize_func(x, il, temp_a); - - threadgroup_barrier(mem_flags::mem_threadgroup); - - FOR_UNROLL (short i = 0; i < 16; i++) { - const short sx = 2*il0 + i/8; - const short sy = (tiitg/NL0)/8; - - const short lx = i%8; - const short ly = (tiitg/NL0)%8; - //const short lx = (tiitg/NL0)%8; - //const short ly = i%8; - - *(sa + NK*(8*sy + ly) + 8*sx + lx) = temp_a[i/4][i%4]; - } - } - - if (FC_mul_mm_bc_inp) { - for (short i = 0; i < 8; ++i) { - const short sx = (tiitg%NL1); - const short sy = (tiitg/NL1)/8; - - const short lx = i; - const short ly = (tiitg/NL1)%8; - //const short lx = (tiitg/NL1)%8; - //const short ly = i; - - *(sb + NK*(8*sy + ly) + 8*sx + lx) = loop_k + iy + i < args.ne00 ? (S1) *((device T1 *) y + i) : 0; - } - } else { - const short sx = (tiitg%NL1); - const short sy = (tiitg/NL1)/8; - - //const short lx = i; - const short ly = (tiitg/NL1)%8; - //const short lx = (tiitg/NL1)%8; - //const short ly = i; - - *(threadgroup S1_2x4 *)(sb + NK*(8*sy + ly) + 8*sx) = (S1_2x4)(*((device T1_2x4 *) y)); - } -#endif il = (il + 2 < nl) ? il + 2 : il % 2; x = (il < 2) ? x + (2 + nl - 1)/nl : x; @@ -9522,7 +9576,6 @@ kernel void kernel_mul_mm( threadgroup_barrier(mem_flags::mem_threadgroup); -#ifndef GGML_METAL_HAS_TENSOR // load matrices from threadgroup memory and conduct outer products threadgroup const S0 * lsma = (sa + 4*64*(sgitg%2)); threadgroup const S1 * lsmb = (sb + 2*64*(sgitg/2)); @@ -9549,24 +9602,10 @@ kernel void kernel_mul_mm( lsma += 8*64; lsmb += 4*64; } -#else - auto sA = tA.slice(0, 0); - auto sB = tB.slice(0, 0); - - mm.run(sB, sA, cT); -#endif } if (!FC_mul_mm_bc_out || (r0 + NR0 <= args.ne0 && r1 + NR1 <= args.ne1)) { // if no bounds checks on the output are needed, we can directly write to device memory -#ifdef GGML_METAL_HAS_TENSOR - device float * C = (device float *) dst + - r0 + \ - r1 * args.ne0 + im*args.ne1*args.ne0; - - auto tC = tensor<device float, dextents<int32_t, 2>, tensor_inline>(C, dextents<int32_t, 2>(args.ne0, NR1)); - cT.store(tC); -#else device float * C = (device float *) dst + (r0 + 32*(sgitg & 1)) + \ (r1 + 16*(sgitg >> 1)) * args.ne0 + im*args.ne1*args.ne0; @@ -9574,21 +9613,15 @@ kernel void kernel_mul_mm( for (short i = 0; i < 8; i++) { simdgroup_store(mc[i], C + 8*(i%4) + 8*args.ne0*(i/4), args.ne0, 0, false); } -#endif } else { // block is smaller than 64x32, we should avoid writing data outside of the matrix threadgroup_barrier(mem_flags::mem_threadgroup); threadgroup float * temp_str = ((threadgroup float *) shmem) + 32*(sgitg&1) + (16*(sgitg >> 1))*NR0; -#ifdef GGML_METAL_HAS_TENSOR - auto tC = tensor<threadgroup float, dextents<int32_t, 2>, tensor_inline>(sc, dextents<int32_t, 2>(NR0, NR1)); - cT.store(tC); -#else for (short i = 0; i < 8; i++) { simdgroup_store(mc[i], temp_str + 8*(i%4) + 8*NR0*(i/4), NR0, 0, false); } -#endif threadgroup_barrier(mem_flags::mem_threadgroup); @@ -9614,6 +9647,8 @@ kernel void kernel_mul_mm( } } +#endif // GGML_METAL_HAS_TENSOR + template<short ne20> // n_expert_used kernel void kernel_mul_mm_id_map0( constant ggml_metal_kargs_mul_mm_id_map0 & args, @@ -9789,7 +9824,7 @@ kernel void kernel_mul_mm_id( const short ib = 8*sx + sy; - *(sa + 64*ib + 8*ly + lx) = loop_k + 16*il + i < args.ne00 ? *((device T0 *) x + i) : 0; + *(sa + 64*ib + 8*ly + lx) = loop_k + 16*il + i < args.ne00 ? (S0) *((device T0 *) x + i) : (S0) 0; } } else { S0_4x4 temp_a; diff --git a/ggml/src/ggml-opencl/CMakeLists.txt b/ggml/src/ggml-opencl/CMakeLists.txt index 772fc537494..5ed83eeb48a 100644 --- a/ggml/src/ggml-opencl/CMakeLists.txt +++ b/ggml/src/ggml-opencl/CMakeLists.txt @@ -96,6 +96,8 @@ set(GGML_OPENCL_KERNELS mul_mv_q6_k_f32_flat mul_mv_q8_0_f32 mul_mv_q8_0_f32_flat + mul_mv_iq4_nl_f32 + mul_mv_iq4_nl_f32_flat mul_mv_mxfp4_f32 mul_mv_mxfp4_f32_flat mul_mv_id_q4_0_f32_8x_flat @@ -110,12 +112,15 @@ set(GGML_OPENCL_KERNELS mul_mm_q4_0_f32_l4_lm mul_mm_q4_1_f32_l4_lm mul_mm_q8_0_f32_l4_lm + mul_mm_iq4_nl_f32_l4_lm mul_mm_q4_k_f32_l4_lm mul_mm_q5_k_f32_l4_lm mul_mm_q6_k_f32_l4_lm mul_mm_q8_0_f32_8x4 gemv_noshuffle_q4_1_f32 gemm_noshuffle_q4_1_f32 + gemv_noshuffle_iq4_nl_f32 + gemm_noshuffle_iq4_nl_f32 gemv_noshuffle_general_q8_0_f32 gemv_noshuffle_q4_k_f32 gemm_noshuffle_q4_k_f32 diff --git a/ggml/src/ggml-opencl/ggml-opencl.cpp b/ggml/src/ggml-opencl/ggml-opencl.cpp index 8bc7ae65a6d..4d31591a4a6 100644 --- a/ggml/src/ggml-opencl/ggml-opencl.cpp +++ b/ggml/src/ggml-opencl/ggml-opencl.cpp @@ -545,6 +545,9 @@ struct ggml_backend_opencl_context { cl_kernel kernel_convert_block_q5_K_noshuffle; cl_kernel kernel_restore_block_q5_K_noshuffle; cl_kernel kernel_convert_block_q6_K, kernel_restore_block_q6_K; + cl_kernel kernel_convert_block_iq4_nl, kernel_restore_block_iq4_nl; + cl_kernel kernel_convert_block_iq4_nl_noshuffle; + cl_kernel kernel_restore_block_iq4_nl_noshuffle; cl_kernel kernel_mul_mat_q4_0_f32_1d_8x_flat, kernel_mul_mat_q4_0_f32_1d_16x_flat; cl_kernel kernel_mul_mv_q4_1_f32; cl_kernel kernel_mul_mv_q4_1_f32_flat; @@ -556,6 +559,8 @@ struct ggml_backend_opencl_context { cl_kernel kernel_mul_mv_q6_K_f32_flat; cl_kernel kernel_mul_mv_mxfp4_f32, kernel_mul_mv_mxfp4_f32_flat; cl_kernel kernel_mul_mv_q8_0_f32, kernel_mul_mv_q8_0_f32_flat; + cl_kernel kernel_mul_mv_iq4_nl_f32; + cl_kernel kernel_mul_mv_iq4_nl_f32_flat; cl_kernel kernel_solve_tri_f32; cl_kernel kernel_im2col_f32, kernel_im2col_f16; cl_kernel kernel_argsort_f32_i32; @@ -594,6 +599,7 @@ struct ggml_backend_opencl_context { cl_kernel kernel_mul_mm_q4_k_f32_l4_lm; cl_kernel kernel_mul_mm_q5_k_f32_l4_lm; cl_kernel kernel_mul_mm_q6_k_f32_l4_lm; + cl_kernel kernel_mul_mm_iq4_nl_f32_l4_lm; std::vector<ProfilingInfo> profiling_info; @@ -734,6 +740,8 @@ struct ggml_backend_opencl_context { cl_kernel kernel_gemm_noshuffle_q6_K_f32; cl_kernel kernel_gemv_noshuffle_q5_k_f32; cl_kernel kernel_gemm_noshuffle_q5_k_f32; + cl_kernel kernel_gemv_noshuffle_iq4_nl_f32; + cl_kernel kernel_gemm_noshuffle_iq4_nl_f32; #endif // GGML_OPENCL_USE_ADRENO_KERNELS void free() { @@ -954,6 +962,10 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve CL_CHECK((backend_ctx->kernel_restore_block_q6_K = clCreateKernel(backend_ctx->program_cvt, "kernel_restore_block_q6_K", &err), err)); CL_CHECK((backend_ctx->kernel_convert_block_q6_K_noshuffle = clCreateKernel(backend_ctx->program_cvt, "kernel_convert_block_q6_K_noshuffle", &err), err)); CL_CHECK((backend_ctx->kernel_restore_block_q6_K_noshuffle = clCreateKernel(backend_ctx->program_cvt, "kernel_restore_block_q6_K_noshuffle", &err), err)); + CL_CHECK((backend_ctx->kernel_convert_block_iq4_nl = clCreateKernel(backend_ctx->program_cvt, "kernel_convert_block_iq4_nl", &err), err)); + CL_CHECK((backend_ctx->kernel_restore_block_iq4_nl = clCreateKernel(backend_ctx->program_cvt, "kernel_restore_block_iq4_nl", &err), err)); + CL_CHECK((backend_ctx->kernel_convert_block_iq4_nl_noshuffle = clCreateKernel(backend_ctx->program_cvt, "kernel_convert_block_iq4_nl_noshuffle", &err), err)); + CL_CHECK((backend_ctx->kernel_restore_block_iq4_nl_noshuffle = clCreateKernel(backend_ctx->program_cvt, "kernel_restore_block_iq4_nl_noshuffle", &err), err)); GGML_LOG_CONT("."); } @@ -1359,6 +1371,40 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve GGML_LOG_CONT("."); } + // mul_mv_iq4_nl_f32 + { +#ifdef GGML_OPENCL_EMBED_KERNELS + const std::string kernel_src { + #include "mul_mv_iq4_nl_f32.cl.h" + }; +#else + const std::string kernel_src = read_file("mul_mv_iq4_nl_f32.cl"); +#endif + cl_program prog = + build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src.c_str(), compile_opts); + + CL_CHECK((backend_ctx->kernel_mul_mv_iq4_nl_f32 = clCreateKernel(prog, "kernel_mul_mv_iq4_nl_f32", &err), err)); + CL_CHECK(clReleaseProgram(prog)); + GGML_LOG_CONT("."); + } + + // mul_mv_iq4_nl_f32_flat + { +#ifdef GGML_OPENCL_EMBED_KERNELS + const std::string kernel_src { + #include "mul_mv_iq4_nl_f32_flat.cl.h" + }; +#else + const std::string kernel_src = read_file("mul_mv_iq4_nl_f32_flat.cl"); +#endif + cl_program prog = + build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src.c_str(), compile_opts); + + CL_CHECK((backend_ctx->kernel_mul_mv_iq4_nl_f32_flat = clCreateKernel(prog, "kernel_mul_mv_iq4_nl_f32_flat", &err), err)); + CL_CHECK(clReleaseProgram(prog)); + GGML_LOG_CONT("."); + } + // mul_mv_mxfp4_f32 { #ifdef GGML_OPENCL_EMBED_KERNELS @@ -1567,6 +1613,23 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve GGML_LOG_CONT("."); } + // mul_mm_iq4_nl_f32_l4_lm + { +#ifdef GGML_OPENCL_EMBED_KERNELS + const std::string kernel_src { + #include "mul_mm_iq4_nl_f32_l4_lm.cl.h" + }; +#else + const std::string kernel_src = read_file("mul_mm_iq4_nl_f32_l4_lm.cl"); +#endif + cl_program prog = + build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src.c_str(), compile_opts); + + CL_CHECK((backend_ctx->kernel_mul_mm_iq4_nl_f32_l4_lm = clCreateKernel(prog, "kernel_mul_mm_iq4_nl_f32_l4_lm", &err), err)); + CL_CHECK(clReleaseProgram(prog)); + GGML_LOG_CONT("."); + } + // mul_mm_q4_k_f32_l4_lm { #ifdef GGML_OPENCL_EMBED_KERNELS @@ -2647,6 +2710,45 @@ static void load_cl_kernels(ggml_backend_opencl_context *backend_ctx, ggml_cl_ve GGML_LOG_CONT("."); } + // gemm_noshuffle_iq4_nl_f32 + { +#ifdef GGML_OPENCL_EMBED_KERNELS + const std::string kernel_src { + #include "gemm_noshuffle_iq4_nl_f32.cl.h" + }; +#else + const std::string kernel_src = read_file("gemm_noshuffle_iq4_nl_f32.cl"); +#endif + cl_program prog = build_program_from_source(backend_ctx->context, backend_ctx->device, kernel_src.c_str(), compile_opts); + CL_CHECK((backend_ctx->kernel_gemm_noshuffle_iq4_nl_f32 = clCreateKernel(prog, "kernel_gemm_noshuffle_iq4_nl_f32", &err), err)); + CL_CHECK(clReleaseProgram(prog)); + GGML_LOG_CONT("."); + } + + // gemv_noshuffle_iq4_nl_f32 + { + std::string CL_gemv_compile_opts = std::string("-cl-std=") + opencl_c_std + + " -cl-mad-enable "; + if (backend_ctx->has_vector_subgroup_broadcast) { + CL_gemv_compile_opts += " -DVECTOR_SUB_GROUP_BROADCAST "; + } + +#ifdef GGML_OPENCL_EMBED_KERNELS + const std::string kernel_src { + #include "gemv_noshuffle_iq4_nl_f32.cl.h" + }; +#else + const std::string kernel_src = read_file("gemv_noshuffle_iq4_nl_f32.cl"); +#endif + + cl_program prog = build_program_from_source( + backend_ctx->context, backend_ctx->device, kernel_src.c_str(), CL_gemv_compile_opts); + + CL_CHECK((backend_ctx->kernel_gemv_noshuffle_iq4_nl_f32 = clCreateKernel(prog, "kernel_gemv_noshuffle_iq4_nl_f32", &err), err)); + CL_CHECK(clReleaseProgram(prog)); + GGML_LOG_CONT("."); + } + // mul_mm_q8_0_f32_8x4 { #ifdef GGML_OPENCL_EMBED_KERNELS @@ -3597,6 +3699,30 @@ struct ggml_tensor_extra_cl_q8_0 { } }; +struct ggml_tensor_extra_cl_iq4_nl { + cl_mem q = nullptr; + cl_mem q_img = nullptr; + + cl_mem d = nullptr; + cl_mem d_img = nullptr; + + size_t size_q = 0; + size_t size_d = 0; + + ~ggml_tensor_extra_cl_iq4_nl() { + reset(); + } + + void reset() { + if (q != nullptr) { CL_CHECK(clReleaseMemObject(q)); q = nullptr; } + if (d != nullptr) { CL_CHECK(clReleaseMemObject(d)); d = nullptr; } + q_img = nullptr; + d_img = nullptr; + size_q = 0; + size_d = 0; + } +}; + struct ggml_tensor_extra_cl_q4_K { // Quantized values cl_mem q = nullptr; @@ -4097,6 +4223,7 @@ static bool ggml_opencl_supports_op(ggml_backend_dev_t dev, const struct ggml_te return op->src[1]->type == GGML_TYPE_F32; } else if (op->src[0]->type == GGML_TYPE_Q4_0 || op->src[0]->type == GGML_TYPE_Q4_1 || op->src[0]->type == GGML_TYPE_MXFP4 || + op->src[0]->type == GGML_TYPE_IQ4_NL || op->src[0]->type == GGML_TYPE_Q4_K || op->src[0]->type == GGML_TYPE_Q5_K || op->src[0]->type == GGML_TYPE_Q6_K) { @@ -4295,6 +4422,12 @@ struct ggml_backend_opencl_buffer_context { for (ggml_tensor_extra_cl_q8_0 * e : temp_tensor_extras_q8_0_in_use) { delete e; } + for (ggml_tensor_extra_cl_iq4_nl * e : temp_tensor_extras_iq4_nl) { + delete e; + } + for (ggml_tensor_extra_cl_iq4_nl * e : temp_tensor_extras_iq4_nl_in_use) { + delete e; + } for (ggml_tensor_extra_cl_q4_K * e : temp_tensor_extras_q4_K) { delete e; } @@ -4390,6 +4523,21 @@ struct ggml_backend_opencl_buffer_context { return extra; } + ggml_tensor_extra_cl_iq4_nl * ggml_opencl_alloc_temp_tensor_extra_iq4_nl() { + ggml_tensor_extra_cl_iq4_nl * extra; + if (temp_tensor_extras_iq4_nl.empty()) { + extra = new ggml_tensor_extra_cl_iq4_nl(); + } else { + extra = temp_tensor_extras_iq4_nl.back(); + temp_tensor_extras_iq4_nl.pop_back(); + } + + temp_tensor_extras_iq4_nl_in_use.push_back(extra); + + extra->reset(); + return extra; + } + ggml_tensor_extra_cl_q4_K * ggml_opencl_alloc_temp_tensor_extra_q4_K() { ggml_tensor_extra_cl_q4_K * extra; if (temp_tensor_extras_q4_K.empty()) { @@ -4461,6 +4609,11 @@ struct ggml_backend_opencl_buffer_context { } temp_tensor_extras_q8_0_in_use.clear(); + for (ggml_tensor_extra_cl_iq4_nl * e : temp_tensor_extras_iq4_nl_in_use) { + temp_tensor_extras_iq4_nl.push_back(e); + } + temp_tensor_extras_iq4_nl_in_use.clear(); + for (ggml_tensor_extra_cl_q4_K * e : temp_tensor_extras_q4_K_in_use) { temp_tensor_extras_q4_K.push_back(e); } @@ -4492,6 +4645,8 @@ struct ggml_backend_opencl_buffer_context { std::vector<ggml_tensor_extra_cl_mxfp4 *> temp_tensor_extras_mxfp4_in_use; std::vector<ggml_tensor_extra_cl_q8_0 *> temp_tensor_extras_q8_0; std::vector<ggml_tensor_extra_cl_q8_0 *> temp_tensor_extras_q8_0_in_use; + std::vector<ggml_tensor_extra_cl_iq4_nl *> temp_tensor_extras_iq4_nl; + std::vector<ggml_tensor_extra_cl_iq4_nl *> temp_tensor_extras_iq4_nl_in_use; std::vector<ggml_tensor_extra_cl_q4_K *> temp_tensor_extras_q4_K; std::vector<ggml_tensor_extra_cl_q4_K *> temp_tensor_extras_q4_K_in_use; std::vector<ggml_tensor_extra_cl_q5_K *> temp_tensor_extras_q5_K; @@ -5123,6 +5278,87 @@ static void ggml_backend_opencl_buffer_set_tensor(ggml_backend_buffer_t buffer, return; } + if (tensor->type == GGML_TYPE_IQ4_NL) { + ggml_tensor_extra_cl * extra_orig = (ggml_tensor_extra_cl *)tensor->extra; + GGML_ASSERT(extra_orig && "Tensors in OpenCL backend should have been allocated and initialized"); + + ggml_backend_opencl_buffer_context * ctx = (ggml_backend_opencl_buffer_context *) buffer->context; + ggml_tensor_extra_cl_iq4_nl * extra = ctx->ggml_opencl_alloc_temp_tensor_extra_iq4_nl(); + + size_t size_d = ggml_nelements(tensor)/ggml_blck_size(tensor->type)*sizeof(ggml_fp16_t); + size_t size_q = ggml_nelements(tensor)/ggml_blck_size(tensor->type)*(ggml_blck_size(tensor->type)/2); + GGML_ASSERT(size_d + size_q == ggml_nbytes(tensor) && "Incorrect tensor size"); + + cl_int err; + cl_mem data_device = clCreateBuffer(context, CL_MEM_READ_WRITE, + ggml_nbytes(tensor), NULL, &err); + CL_CHECK(err); + CL_CHECK(clEnqueueWriteBuffer( + queue, data_device, CL_TRUE, 0, + ggml_nbytes(tensor), data, 0, NULL, NULL)); + + cl_buffer_region region; + + // Create subbuffer for scales. + region.origin = align_to(extra_orig->offset + tensor->view_offs + offset, backend_ctx->alignment); + region.size = size_d; + extra->d = clCreateSubBuffer( + extra_orig->data_device, CL_MEM_READ_WRITE, + CL_BUFFER_CREATE_TYPE_REGION, ®ion, &err); + CL_CHECK(err); + auto previous_origin = region.origin; + + // Create subbuffer for quants. + region.origin = align_to(previous_origin + size_d, backend_ctx->alignment); + region.size = size_q; + extra->q = clCreateSubBuffer( + extra_orig->data_device, CL_MEM_READ_WRITE, + CL_BUFFER_CREATE_TYPE_REGION, ®ion, &err); + CL_CHECK(err); + + #ifdef GGML_OPENCL_USE_ADRENO_KERNELS + cl_kernel kernel = backend_ctx->kernel_convert_block_iq4_nl; + if (use_adreno_kernels(backend_ctx, tensor)) { + kernel = backend_ctx->kernel_convert_block_iq4_nl_noshuffle; + } + #else + cl_kernel kernel = backend_ctx->kernel_convert_block_iq4_nl; + #endif + cl_ulong n_blk = ggml_nelements(tensor)/ggml_blck_size(tensor->type); + cl_uchar mask_0F = 0x0F; + cl_uchar mask_F0 = 0xF0; + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &data_device)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &extra->q)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra->d)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_uchar), &mask_0F)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_uchar), &mask_F0)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &n_blk)); + + size_t global_work_size[] = {(size_t)CEIL_DIV(n_blk, 64)*64, 1, 1}; + size_t local_work_size[] = {64, 1, 1}; + + cl_event evt; + CL_CHECK(clEnqueueNDRangeKernel(queue, kernel, 3, NULL, global_work_size, local_work_size, 0, NULL, &evt)); + CL_CHECK(clWaitForEvents(1, &evt)); + CL_CHECK(clReleaseMemObject(data_device)); + + tensor->extra = extra; + +#ifdef GGML_OPENCL_USE_ADRENO_KERNELS + if (use_adreno_kernels(backend_ctx, tensor)) { + int M = tensor->ne[1]; + int K = tensor->ne[0]; + GGML_ASSERT(K % 32 == 0); + + // Transpose q as ushort + transpose_2d_as_16b(backend_ctx, extra->q, extra->q, size_q, K/4, M); + // Transpose d as ushort + transpose_2d_as_16b(backend_ctx, extra->d, extra->d, size_d, K/32, M); + } +#endif + return; + } if (tensor->type == GGML_TYPE_Q4_K) { ggml_tensor_extra_cl * extra_orig = (ggml_tensor_extra_cl *)tensor->extra; GGML_ASSERT(extra_orig && "Tesnors in OpenCL backend should have been allocated and initialized"); @@ -5775,6 +6011,78 @@ static void ggml_backend_opencl_buffer_get_tensor(ggml_backend_buffer_t buffer, CL_CHECK(clReleaseMemObject(data_device)); return; } + if (tensor->type == GGML_TYPE_IQ4_NL) { + ggml_tensor_extra_cl_iq4_nl * extra = (ggml_tensor_extra_cl_iq4_nl *)tensor->extra; + + cl_int err; + cl_mem data_device = clCreateBuffer(context, CL_MEM_READ_WRITE, + ggml_nbytes(tensor), NULL, &err); + CL_CHECK(err); + +#ifdef GGML_OPENCL_USE_ADRENO_KERNELS + if (use_adreno_kernels(backend_ctx, tensor)) { + static ggml_cl_buffer buf_trans_q; + static ggml_cl_buffer buf_trans_d; + static ggml_cl_buffer buf_unpacked; + + cl_int M = tensor->ne[1]; + cl_int K = tensor->ne[0]; + GGML_ASSERT(K % 32 == 0); + + size_t size_q = (ggml_nelements(tensor)/ggml_blck_size(tensor->type))*(ggml_blck_size(tensor->type)/2); + size_t size_d = (ggml_nelements(tensor)/ggml_blck_size(tensor->type))*sizeof(ggml_fp16_t); + GGML_ASSERT(size_d + size_q == ggml_nbytes(tensor) && "Incorrect tensor size"); + + buf_trans_q.allocate(backend_ctx->context, size_q); + buf_trans_d.allocate(backend_ctx->context, size_d); + buf_unpacked.allocate(backend_ctx->context, ggml_nbytes(tensor)); + + // transpose q, d back + transpose_2d_as_16b(backend_ctx, extra->q, buf_trans_q.buffer, size_q, M, K/4); + transpose_2d_as_16b(backend_ctx, extra->d, buf_trans_d.buffer, size_d, M, K/32); + + cl_uchar mask_0F = 0x0F; + cl_uchar mask_F0 = 0xF0; + + cl_kernel kernel = backend_ctx->kernel_restore_block_iq4_nl_noshuffle; + cl_ulong n_blk = ggml_nelements(tensor)/ggml_blck_size(tensor->type); + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &buf_trans_q.buffer)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &buf_trans_d.buffer)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &buf_unpacked.buffer)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_uchar), &mask_0F)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_uchar), &mask_F0)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &n_blk)); + + size_t global_work_size[] = {(size_t)n_blk, 1, 1}; + size_t local_work_size[] = {1, 1, 1}; + + CL_CHECK(clEnqueueNDRangeKernel(queue, kernel, 3, NULL, global_work_size, local_work_size, 0, NULL, NULL)); + CL_CHECK(clEnqueueReadBuffer(queue, buf_unpacked.buffer, CL_TRUE, offset, size, data, 0, NULL, NULL)); + return; + } +#endif + cl_kernel kernel = backend_ctx->kernel_restore_block_iq4_nl; + cl_ulong n_blk = ggml_nelements(tensor)/ggml_blck_size(tensor->type); + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra->q)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &extra->d)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &data_device)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_ulong), &n_blk)); + + size_t global_work_size[] = {(size_t)n_blk, 1, 1}; + size_t local_work_size[] = {1, 1, 1}; + + cl_event evt; + CL_CHECK(clEnqueueNDRangeKernel(queue, kernel, 3, NULL, + global_work_size, local_work_size, 0, NULL, &evt)); + CL_CHECK(clWaitForEvents(1, &evt)); + CL_CHECK(clEnqueueReadBuffer( + queue, data_device, CL_TRUE, offset, + size, data, 0, NULL, NULL)); + CL_CHECK(clReleaseMemObject(data_device)); + return; + } if (tensor->type == GGML_TYPE_Q4_K) { ggml_tensor_extra_cl_q4_K * extra = (ggml_tensor_extra_cl_q4_K *)tensor->extra; @@ -9840,6 +10148,178 @@ static void ggml_cl_mul_mat_q4_1_f32_adreno(ggml_backend_t backend, const ggml_t #endif } +static void ggml_cl_mul_mat_iq4_nl_f32_adreno(ggml_backend_t backend, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { +#ifdef GGML_OPENCL_USE_ADRENO_KERNELS + GGML_ASSERT(src0); + GGML_ASSERT(src0->extra); + GGML_ASSERT(src1); + GGML_ASSERT(src1->extra); + GGML_ASSERT(dst); + GGML_ASSERT(dst->extra); + + ggml_backend_opencl_context *backend_ctx = (ggml_backend_opencl_context *)backend->context; + + ggml_tensor_extra_cl * extra1 = (ggml_tensor_extra_cl *)src1->extra; + ggml_tensor_extra_cl * extrad = (ggml_tensor_extra_cl *)dst->extra; + ggml_tensor_extra_cl_iq4_nl * extra0_iq4_nl = (ggml_tensor_extra_cl_iq4_nl *)src0->extra; + + cl_ulong offset1 = extra1->offset + src1->view_offs; + cl_ulong offsetd = extrad->offset + dst->view_offs; + + const int ne00 = src0->ne[0]; + const int ne01 = src0->ne[1]; + + const int ne1 = dst->ne[1]; + + GGML_ASSERT(ne00 % 32 == 0); + + cl_context context = backend_ctx->context; + cl_kernel kernel; + + cl_int err; + cl_image_format img_fmt; + cl_image_desc img_desc; + cl_buffer_region region; + + int M = ne01; + int N = ne1; + int K = ne00; + + if (ne1 == 1) { + cl_mem q_img = nullptr; + cl_mem b_sub_buf = nullptr; + cl_mem b_img = nullptr; + + // image for q + img_fmt = { CL_R, CL_UNSIGNED_INT32}; + memset(&img_desc, 0, sizeof(img_desc)); + img_desc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER; + img_desc.image_width = M * K / 2 / 4; + img_desc.buffer = extra0_iq4_nl->q; + CL_CHECK((q_img = clCreateImage(context, CL_MEM_READ_ONLY, &img_fmt, &img_desc, NULL, &err), err)); + + // subbuffer for activations + region.origin = offset1; + region.size = K * N * sizeof(float); + CL_CHECK((b_sub_buf = clCreateSubBuffer(extra1->data_device, 0, CL_BUFFER_CREATE_TYPE_REGION, ®ion, &err), err)); + + // image for activations + img_fmt = {CL_RGBA, CL_FLOAT}; + memset(&img_desc, 0, sizeof(img_desc)); + img_desc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER; + img_desc.image_width = K * N / 4; + img_desc.buffer = b_sub_buf; + CL_CHECK((b_img = clCreateImage(context, CL_MEM_READ_ONLY, &img_fmt, &img_desc, NULL, &err), err)); + + kernel = backend_ctx->kernel_gemv_noshuffle_iq4_nl_f32; + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &q_img)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &extra0_iq4_nl->d)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &b_img)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_mem), &extrad->data_device)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_ulong), &offsetd)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_int), &ne00)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(cl_int), &ne01)); + + size_t local_work_size[3] = {64, 4, 1}; + size_t global_work_size[3] = {(size_t)CEIL_DIV(ne01/2, 64)*64, 4, 1}; + + backend_ctx->enqueue_ndrange_kernel(kernel, 3, global_work_size, local_work_size, dst); + + CL_CHECK(clReleaseMemObject(q_img)); + CL_CHECK(clReleaseMemObject(b_sub_buf)); + CL_CHECK(clReleaseMemObject(b_img)); + } else { + cl_mem b_sub_buf = nullptr; + cl_mem b_sub_buf_trans = nullptr; + cl_mem b_img = nullptr; + cl_mem b_img_trans = nullptr; + + // subbuffer for activations + region.origin = offset1; + region.size = K * N * sizeof(float); + CL_CHECK((b_sub_buf = clCreateSubBuffer(extra1->data_device, 0, CL_BUFFER_CREATE_TYPE_REGION, ®ion, &err), err)); + + // image for activations + img_fmt = {CL_RGBA, CL_FLOAT}; + memset(&img_desc, 0, sizeof(img_desc)); + img_desc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER; + img_desc.image_width = K * N / 4; + img_desc.buffer = b_sub_buf; + CL_CHECK((b_img = clCreateImage(context, CL_MEM_READ_ONLY, &img_fmt, &img_desc, NULL, &err), err)); + + // pad N to multiple of 8 + int extra_elements = N % 8; + int padding = 0; + if (extra_elements > 0){ + padding = 8 - extra_elements; + } + + // subbuffer for transposed activations + region.origin = 0; + region.size = K * (N + padding) * sizeof(float)/2; + backend_ctx->prealloc_act_trans.allocate(context, region.size); + CL_CHECK((b_sub_buf_trans = clCreateSubBuffer(backend_ctx->prealloc_act_trans.buffer, 0, CL_BUFFER_CREATE_TYPE_REGION, ®ion, &err), err)); + + // image for transposed activations + img_fmt = {CL_RGBA, CL_HALF_FLOAT}; + memset(&img_desc, 0, sizeof(img_desc)); + img_desc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER; + img_desc.image_width = K * (N + padding) / 4; + img_desc.buffer = b_sub_buf_trans; + CL_CHECK((b_img_trans = clCreateImage(context, 0, &img_fmt, &img_desc, NULL, &err), err)); + + // transpose activations + int height_B = N/4; + if (height_B == 0) { + height_B = 1; + } + int width_B = K/4; + int padded_height_B = (N + padding)/4; + + kernel = backend_ctx->kernel_transpose_32_16; + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &b_img)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &b_img_trans)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(int), &height_B)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(int), &width_B)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(int), &padded_height_B)); + + size_t local_work_size_t[2] = { 1, 16 }; + size_t global_work_size_t[2] = { (size_t)width_B, (size_t)padded_height_B }; + backend_ctx->enqueue_ndrange_kernel(kernel, 2, global_work_size_t, local_work_size_t, dst); + + // gemm + kernel = backend_ctx->kernel_gemm_noshuffle_iq4_nl_f32; + int padded_N = N + padding; + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0_iq4_nl->q)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &extra0_iq4_nl->d)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &b_img_trans)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_mem), &extrad->data_device)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_ulong), &offsetd)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_int), &ne01)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(cl_int), &padded_N)); + CL_CHECK(clSetKernelArg(kernel, 7, sizeof(cl_int), &ne00)); + CL_CHECK(clSetKernelArg(kernel, 8, sizeof(cl_int), &ne1)); + + size_t global_work_size[3] = {(size_t)CEIL_DIV(ne1, 8), (size_t)CEIL_DIV(ne01, 4), 1}; + size_t local_work_size[3] = {1, 128, 1}; + + backend_ctx->enqueue_ndrange_kernel(kernel, 3, global_work_size, local_work_size, dst); + + CL_CHECK(clReleaseMemObject(b_sub_buf)); + CL_CHECK(clReleaseMemObject(b_sub_buf_trans)); + CL_CHECK(clReleaseMemObject(b_img)); + CL_CHECK(clReleaseMemObject(b_img_trans)); + } +#else + GGML_UNUSED(backend); + GGML_UNUSED(src0); + GGML_UNUSED(src1); + GGML_UNUSED(dst); +#endif +} + static void ggml_cl_mul_mat_q8_0_f32_adreno(ggml_backend_t backend, const ggml_tensor * src0, const ggml_tensor * src1, ggml_tensor * dst) { #ifdef GGML_OPENCL_USE_ADRENO_KERNELS GGML_ASSERT(src0); @@ -10634,6 +11114,7 @@ static void ggml_cl_mul_mat(ggml_backend_t backend, const ggml_tensor * src0, co ggml_tensor_extra_cl_q4_1 * extra0_q4_1 = (ggml_tensor_extra_cl_q4_1 *)src0->extra; ggml_tensor_extra_cl_mxfp4 * extra0_mxfp4 = (ggml_tensor_extra_cl_mxfp4 *)src0->extra; ggml_tensor_extra_cl_q8_0 * extra0_q8_0 = (ggml_tensor_extra_cl_q8_0 *)src0->extra; + ggml_tensor_extra_cl_iq4_nl * extra0_iq4_nl = (ggml_tensor_extra_cl_iq4_nl *)src0->extra; ggml_tensor_extra_cl_q4_K * extra0_q4_K = (ggml_tensor_extra_cl_q4_K *)src0->extra; ggml_tensor_extra_cl_q5_K * extra0_q5_K = (ggml_tensor_extra_cl_q5_K *)src0->extra; ggml_tensor_extra_cl_q6_K * extra0_q6_K = (ggml_tensor_extra_cl_q6_K *)src0->extra; @@ -10738,6 +11219,12 @@ static void ggml_cl_mul_mat(ggml_backend_t backend, const ggml_tensor * src0, co return; } + // iq4_nl x fp32 + if (src0t == GGML_TYPE_IQ4_NL && src1t == GGML_TYPE_F32) { + ggml_cl_mul_mat_iq4_nl_f32_adreno(backend, src0, src1, dst); + return; + } + // q8_0 x fp32 if (src0t == GGML_TYPE_Q8_0 && src1t == GGML_TYPE_F32 && enable_adreno_trans_weight(backend_ctx, src0)) { @@ -11302,6 +11789,48 @@ static void ggml_cl_mul_mat(ggml_backend_t backend, const ggml_tensor * src0, co backend_ctx->enqueue_ndrange_kernel(kernel, 3, global_work_size, local_work_size, dst); return; } + case GGML_TYPE_IQ4_NL: { + if (ne11 < 32) { + break; + } + if (!ggml_is_contiguous(src0) || !ggml_is_contiguous(src1)) { + break; + } + + kernel = backend_ctx->kernel_mul_mm_iq4_nl_f32_l4_lm; + nth0 = 128; // calculated as (BM*BN)/(TM*TN) + + int batch_stride_a = ne00*ne01; + int batch_stride_b = ne10*ne11; + int batch_stride_d = ne0*ne1; + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0_iq4_nl->q)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &extra0_iq4_nl->d)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra1->data_device)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_ulong), &offset1)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_mem), &extrad->data_device)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &offsetd)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(int), &ne00)); + CL_CHECK(clSetKernelArg(kernel, 7, sizeof(int), &ne01)); + CL_CHECK(clSetKernelArg(kernel, 8, sizeof(int), &ne02)); + CL_CHECK(clSetKernelArg(kernel, 9, sizeof(int), &ne11)); + CL_CHECK(clSetKernelArg(kernel, 10, sizeof(int), &ne12)); + CL_CHECK(clSetKernelArg(kernel, 11, sizeof(int), &ne10)); // stride_a + CL_CHECK(clSetKernelArg(kernel, 12, sizeof(int), &ne10)); // stride_b + CL_CHECK(clSetKernelArg(kernel, 13, sizeof(int), &ne01)); // stride_d + CL_CHECK(clSetKernelArg(kernel, 14, sizeof(int), &batch_stride_a)); + CL_CHECK(clSetKernelArg(kernel, 15, sizeof(int), &batch_stride_b)); + CL_CHECK(clSetKernelArg(kernel, 16, sizeof(int), &batch_stride_d)); + CL_CHECK(clSetKernelArg(kernel, 17, sizeof(int), &r2)); + CL_CHECK(clSetKernelArg(kernel, 18, sizeof(int), &r3)); + + // 64 is block tile size BM and BN - change here when BM and BN in the kernel are changed. + size_t global_work_size[] = {(size_t)(CEIL_DIV(ne01, 64)*nth0), (size_t)(CEIL_DIV(ne11, 64)), (size_t)ne12*ne13}; + size_t local_work_size[] = {(size_t)nth0, 1, 1}; + + backend_ctx->enqueue_ndrange_kernel(kernel, 3, global_work_size, local_work_size, dst); + return; + } case GGML_TYPE_Q4_K: { if (ne11 < 32) { break; @@ -11829,6 +12358,70 @@ static void ggml_cl_mul_mat(ggml_backend_t backend, const ggml_tensor * src0, co CL_CHECK(clSetKernelArg(kernel, 16, sizeof(int), &ne1)); CL_CHECK(clSetKernelArg(kernel, 17, sizeof(int), &r2)); CL_CHECK(clSetKernelArg(kernel, 18, sizeof(int), &r3)); +#endif // GGML_OPENCL_SOA_Q + break; + } + case GGML_TYPE_IQ4_NL: { +#ifdef GGML_OPENCL_SOA_Q + kernel = backend_ctx->kernel_mul_mv_iq4_nl_f32_flat; + + if (backend_ctx->gpu_family == INTEL) { + nth0 = 16; + nth1 = 1; + ndst = 8; + } else if (backend_ctx->gpu_family == ADRENO) { + nth0 = 64; + nth1 = 1; + ndst = 8; + } else { + GGML_ASSERT(false && "TODO: Unknown GPU"); + } + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0_iq4_nl->q)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_mem), &extra0_iq4_nl->d)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra1->data_device)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_ulong), &offset1)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_mem), &extrad->data_device)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &offsetd)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(int), &ne00)); + CL_CHECK(clSetKernelArg(kernel, 7, sizeof(int), &ne01)); + CL_CHECK(clSetKernelArg(kernel, 8, sizeof(int), &ne02)); + CL_CHECK(clSetKernelArg(kernel, 9, sizeof(int), &ne10)); + CL_CHECK(clSetKernelArg(kernel, 10, sizeof(int), &ne12)); + CL_CHECK(clSetKernelArg(kernel, 11, sizeof(int), &ne0)); + CL_CHECK(clSetKernelArg(kernel, 12, sizeof(int), &ne1)); + CL_CHECK(clSetKernelArg(kernel, 13, sizeof(int), &r2)); + CL_CHECK(clSetKernelArg(kernel, 14, sizeof(int), &r3)); +#else + kernel = backend_ctx->kernel_mul_mv_iq4_nl_f32; + + if (backend_ctx->gpu_family == INTEL) { + nth0 = 16; + nth1 = 1; + ndst = 4; + } else if (backend_ctx->gpu_family == ADRENO) { + nth0 = 64; + nth1 = 1; + ndst = 4; + } else { + GGML_ASSERT(false && "TODO: Unknown GPU"); + } + + CL_CHECK(clSetKernelArg(kernel, 0, sizeof(cl_mem), &extra0->data_device)); + CL_CHECK(clSetKernelArg(kernel, 1, sizeof(cl_ulong), &offset0)); + CL_CHECK(clSetKernelArg(kernel, 2, sizeof(cl_mem), &extra1->data_device)); + CL_CHECK(clSetKernelArg(kernel, 3, sizeof(cl_ulong), &offset1)); + CL_CHECK(clSetKernelArg(kernel, 4, sizeof(cl_mem), &extrad->data_device)); + CL_CHECK(clSetKernelArg(kernel, 5, sizeof(cl_ulong), &offsetd)); + CL_CHECK(clSetKernelArg(kernel, 6, sizeof(int), &ne00)); + CL_CHECK(clSetKernelArg(kernel, 7, sizeof(int), &ne01)); + CL_CHECK(clSetKernelArg(kernel, 8, sizeof(int), &ne02)); + CL_CHECK(clSetKernelArg(kernel, 9, sizeof(int), &ne10)); + CL_CHECK(clSetKernelArg(kernel, 10, sizeof(int), &ne12)); + CL_CHECK(clSetKernelArg(kernel, 11, sizeof(int), &ne0)); + CL_CHECK(clSetKernelArg(kernel, 12, sizeof(int), &ne1)); + CL_CHECK(clSetKernelArg(kernel, 13, sizeof(int), &r2)); + CL_CHECK(clSetKernelArg(kernel, 14, sizeof(int), &r3)); #endif // GGML_OPENCL_SOA_Q break; } @@ -12131,6 +12724,7 @@ static void ggml_cl_mul_mat(ggml_backend_t backend, const ggml_tensor * src0, co if (src0t == GGML_TYPE_Q4_0 || src0t == GGML_TYPE_MXFP4 || src0t == GGML_TYPE_Q4_1 || src0t == GGML_TYPE_Q8_0 || + src0t == GGML_TYPE_IQ4_NL || src0t == GGML_TYPE_Q2_K) { // Each SIMD group produces N_DST values in the result. Assuming each // workgroup has N_SIMDGROUP SIMD groups, then each workgroup will diff --git a/ggml/src/ggml-opencl/kernels/cvt.cl b/ggml/src/ggml-opencl/kernels/cvt.cl index 39af32d282b..f3937d8304c 100644 --- a/ggml/src/ggml-opencl/kernels/cvt.cl +++ b/ggml/src/ggml-opencl/kernels/cvt.cl @@ -87,6 +87,17 @@ struct block_q6_K { half d; // super-block scale }; +//------------------------------------------------------------------------------ +// block_iq4_nl +//------------------------------------------------------------------------------ +#define QK4_NL 32 + +struct block_iq4_nl +{ + half d; + uint8_t qs[QK4_NL / 2]; +}; + //------------------------------------------------------------------------------ // kernel_convert_block_q4_0 // Convert the block_q4_0 format to 2 separate arrays (AOS -> SOA). @@ -895,3 +906,99 @@ kernel void kernel_restore_block_q6_K_noshuffle( b->scales[i] = s[i]; } } + +//------------------------------------------------------------------------------ +// kernel_convert_block_iq4_nl +// Convert the block_iq4_nl format to 2 separate arrays (AOS -> SOA). +//------------------------------------------------------------------------------ +kernel void kernel_convert_block_iq4_nl( + global struct block_iq4_nl * src0, + global uchar * dst_q, + global half * dst_d, + uchar mask_0F, + uchar mask_F0, + ulong n_blk +) { + if (get_global_id(0) >= n_blk) { + return; + } + global struct block_iq4_nl * b = (global struct block_iq4_nl *) src0 + get_global_id(0); + global uchar * q = (global uchar *) dst_q + QK4_NL/2*get_global_id(0); + global half * d = (global half *) dst_d + get_global_id(0); + + *d = b->d; + + for (int i = 0; i < QK4_NL/2; ++i) { + q[i] = b->qs[i]; + } +} + +kernel void kernel_restore_block_iq4_nl( + global uchar * src_q, + global half * src_d, + global struct block_iq4_nl * dst, + ulong n_blk +) { + if (get_global_id(0) >= n_blk) { + return; + } + global struct block_iq4_nl * b = (global struct block_iq4_nl *) dst + get_global_id(0); + global uchar * q = (global uchar *) src_q + QK4_NL/2*get_global_id(0); + global half * d = (global half *) src_d + get_global_id(0); + + b->d = *d; + + for (int i = 0; i < QK4_NL/2; ++i) { + b->qs[i] = q[i]; + } +} + +kernel void kernel_convert_block_iq4_nl_noshuffle( + global struct block_iq4_nl * src0, + global uchar * dst_q, + global half * dst_d, + uchar mask_0F, + uchar mask_F0, + ulong n_blk +) { + if (get_global_id(0) >= n_blk) { + return; + } + global struct block_iq4_nl * b = (global struct block_iq4_nl *) src0 + get_global_id(0); + global uchar * q = (global uchar *) dst_q + QK4_NL/2*get_global_id(0); + global half * d = (global half *) dst_d + get_global_id(0); + + *d = b->d; + for (int i = 0; i < QK4_NL/4; ++i) { + uchar x0 = b->qs[2*i + 0]; + uchar x1 = b->qs[2*i + 1]; + + q[i + 0 ] = convert_uchar(x0 & mask_0F) | convert_uchar((x1 & mask_0F) << 4); + q[i + QK4_NL/4] = convert_uchar((x0 & mask_F0) >> 4) | convert_uchar(x1 & mask_F0); + } +} + +kernel void kernel_restore_block_iq4_nl_noshuffle( + global uchar * src_q, + global half * src_d, + global struct block_iq4_nl * dst, + uchar mask_0F, + uchar mask_F0, + ulong n_blk +) { + if (get_global_id(0) >= n_blk) { + return; + } + global struct block_iq4_nl * b = (global struct block_iq4_nl *) dst + get_global_id(0); + global uchar * q = (global uchar *) src_q + QK4_NL/2*get_global_id(0); + global half * d = (global half *) src_d + get_global_id(0); + + b->d = *d; + for (int i = 0; i < QK4_NL/4; ++i) { + uchar x0 = q[i + 0 ]; + uchar x1 = q[i + QK4_NL/4]; + + b->qs[2*i + 0] = convert_uchar((x0 & mask_0F) | ((x1 & mask_0F) << 4)); + b->qs[2*i + 1] = convert_uchar(((x0 & mask_F0) >> 4) | (x1 & mask_F0)); + } +} diff --git a/ggml/src/ggml-opencl/kernels/gemm_noshuffle_iq4_nl_f32.cl b/ggml/src/ggml-opencl/kernels/gemm_noshuffle_iq4_nl_f32.cl new file mode 100644 index 00000000000..6869d822862 --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/gemm_noshuffle_iq4_nl_f32.cl @@ -0,0 +1,150 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable +#pragma OPENCL EXTENSION cl_qcom_reqd_sub_group_size : enable + +#ifdef cl_qcom_reqd_sub_group_size +#define ADRENO_GPU 1 +#define REQD_SUBGROUP_SIZE_128 __attribute__((qcom_reqd_sub_group_size("full"))) +#endif + +constant half kvalues_iq4nl[16] = { + (half)-127.f, (half)-104.f, (half)-83.f, (half)-65.f, + (half) -49.f, (half) -35.f, (half)-22.f, (half)-10.f, + (half) 1.f, (half) 13.f, (half) 25.f, (half) 38.f, + (half) 53.f, (half) 69.f, (half) 89.f, (half)113.f +}; + +// Packed LUT: 2 FP16 values per uint, 8 unique constant loads instead of 16 +constant uint iq4nl_packed[8] = { + 0xD680D7F0u, // idx 0,1: -127, -104 + 0xD410D530u, // idx 2,3: -83, -65 + 0xD060D220u, // idx 4,5: -49, -35 + 0xC900CD80u, // idx 6,7: -22, -10 + 0x4A803C00u, // idx 8,9: 1, 13 + 0x50C04E40u, // idx 10,11: 25, 38 + 0x545052A0u, // idx 12,13: 53, 69 + 0x57105590u // idx 14,15: 89, 113 +}; + +// Packed dequant: 1 uint constant load (8-way divergence) + shift + as_half +#define IQ4_NL_DEQUANT(nibble) as_half((ushort)(iq4nl_packed[(nibble) >> 1] >> (((nibble) & 1u) << 4))) + +#ifdef ADRENO_GPU +REQD_SUBGROUP_SIZE_128 +#endif + +kernel void kernel_gemm_noshuffle_iq4_nl_f32( + global const ushort * src0_q, + global const half * src0_d, + read_only image1d_buffer_t src1, + global float * dst, + ulong offsetd, + int m, + int n, + int k, + int n_no_padding +) { + dst = (global float *)((global char *)dst + offsetd); + + int m_4 = m >> 2; + int n_4 = n >> 2; + + int gy = get_global_id(0); + int gx = get_global_id(1); + int gx_2 = gx << 2; + + half8 c0 = 0, c1 = 0, c2 = 0, c3 = 0; + half8 B; + half4 dequantized_weights; + + global const ushort * weight_ptr = src0_q + gx_2; + global const half * scale_ptr = src0_d + gx_2; + + for (int i = 0; i < k; i += 4) { + B.s0123 = read_imageh(src1, gy*2 + (i)*(n_4)); + B.s4567 = read_imageh(src1, gy*2 + (i)*(n_4)+1); + + ushort4 bits4 = vload4(0, weight_ptr + (i/4)*(m)); + + half4 scale = vload4(0, scale_ptr + (i/32)*(m)); + + // j=0 + dequantized_weights.s0 = IQ4_NL_DEQUANT(bits4.s0 & 0x000Fu) * scale.s0; + dequantized_weights.s1 = IQ4_NL_DEQUANT(bits4.s1 & 0x000Fu) * scale.s1; + dequantized_weights.s2 = IQ4_NL_DEQUANT(bits4.s2 & 0x000Fu) * scale.s2; + dequantized_weights.s3 = IQ4_NL_DEQUANT(bits4.s3 & 0x000Fu) * scale.s3; + c0 += B * dequantized_weights.s0; + c1 += B * dequantized_weights.s1; + c2 += B * dequantized_weights.s2; + c3 += B * dequantized_weights.s3; + + // j=1 + B.s0123 = read_imageh(src1, gy*2 + (i+1)*(n_4)); + B.s4567 = read_imageh(src1, gy*2 + (i+1)*(n_4)+1); + dequantized_weights.s0 = IQ4_NL_DEQUANT((bits4.s0 >> 4) & 0x000Fu) * scale.s0; + dequantized_weights.s1 = IQ4_NL_DEQUANT((bits4.s1 >> 4) & 0x000Fu) * scale.s1; + dequantized_weights.s2 = IQ4_NL_DEQUANT((bits4.s2 >> 4) & 0x000Fu) * scale.s2; + dequantized_weights.s3 = IQ4_NL_DEQUANT((bits4.s3 >> 4) & 0x000Fu) * scale.s3; + c0 += B * dequantized_weights.s0; + c1 += B * dequantized_weights.s1; + c2 += B * dequantized_weights.s2; + c3 += B * dequantized_weights.s3; + + // j=2 + B.s0123 = read_imageh(src1, gy*2 + (i+2)*(n_4)); + B.s4567 = read_imageh(src1, gy*2 + (i+2)*(n_4)+1); + dequantized_weights.s0 = IQ4_NL_DEQUANT((bits4.s0 >> 8) & 0x000Fu) * scale.s0; + dequantized_weights.s1 = IQ4_NL_DEQUANT((bits4.s1 >> 8) & 0x000Fu) * scale.s1; + dequantized_weights.s2 = IQ4_NL_DEQUANT((bits4.s2 >> 8) & 0x000Fu) * scale.s2; + dequantized_weights.s3 = IQ4_NL_DEQUANT((bits4.s3 >> 8) & 0x000Fu) * scale.s3; + c0 += B * dequantized_weights.s0; + c1 += B * dequantized_weights.s1; + c2 += B * dequantized_weights.s2; + c3 += B * dequantized_weights.s3; + + // j=3 + B.s0123 = read_imageh(src1, gy*2 + (i+3)*(n_4)); + B.s4567 = read_imageh(src1, gy*2 + (i+3)*(n_4)+1); + dequantized_weights.s0 = IQ4_NL_DEQUANT((bits4.s0 >> 12) & 0x000Fu) * scale.s0; + dequantized_weights.s1 = IQ4_NL_DEQUANT((bits4.s1 >> 12) & 0x000Fu) * scale.s1; + dequantized_weights.s2 = IQ4_NL_DEQUANT((bits4.s2 >> 12) & 0x000Fu) * scale.s2; + dequantized_weights.s3 = IQ4_NL_DEQUANT((bits4.s3 >> 12) & 0x000Fu) * scale.s3; + c0 += B * dequantized_weights.s0; + c1 += B * dequantized_weights.s1; + c2 += B * dequantized_weights.s2; + c3 += B * dequantized_weights.s3; + } + + int idx = (gy<<3)*m + (gx<<2); + + if(idx+3 < m*n_no_padding){ + vstore4((float4)(c0.s0, c1.s0, c2.s0, c3.s0), 0, dst + idx); + idx += m; + } + if(idx+3 < m*n_no_padding){ + vstore4((float4)(c0.s1, c1.s1, c2.s1, c3.s1), 0, dst + idx); + idx += m; + } + if(idx+3 < m*n_no_padding){ + vstore4((float4)(c0.s2, c1.s2, c2.s2, c3.s2), 0, dst + idx); + idx += m; + } + if(idx+3 < m*n_no_padding){ + vstore4((float4)(c0.s3, c1.s3, c2.s3, c3.s3), 0, dst + idx); + idx += m; + } + if(idx+3 < m*n_no_padding){ + vstore4((float4)(c0.s4, c1.s4, c2.s4, c3.s4), 0, dst + idx); + idx += m; + } + if(idx+3 < m*n_no_padding){ + vstore4((float4)(c0.s5, c1.s5, c2.s5, c3.s5), 0, dst + idx); + idx += m; + } + if(idx+3 < m*n_no_padding){ + vstore4((float4)(c0.s6, c1.s6, c2.s6, c3.s6), 0, dst + idx); + idx += m; + } + if(idx+3 < m*n_no_padding){ + vstore4((float4)(c0.s7, c1.s7, c2.s7, c3.s7), 0, dst + idx); + } +} diff --git a/ggml/src/ggml-opencl/kernels/gemv_noshuffle_iq4_nl_f32.cl b/ggml/src/ggml-opencl/kernels/gemv_noshuffle_iq4_nl_f32.cl new file mode 100644 index 00000000000..9386bf25a6f --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/gemv_noshuffle_iq4_nl_f32.cl @@ -0,0 +1,302 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable +#pragma OPENCL EXTENSION cl_khr_subgroups : enable + +#ifdef cl_qcom_reqd_sub_group_size +#pragma OPENCL EXTENSION cl_qcom_reqd_sub_group_size : enable +#define ADRENO_GPU 1 +#define REQD_SUBGROUP_SIZE_64 __attribute__((qcom_reqd_sub_group_size("half"))) +#endif + +#define QK4_NL 32 +#define NSUBGROUPS 4 +#define SUBGROUP_SIZE 64 + +constant half kvalues_iq4nl[16] = { + (half)-127.f, (half)-104.f, (half)-83.f, (half)-65.f, + (half) -49.f, (half) -35.f, (half)-22.f, (half)-10.f, + (half) 1.f, (half) 13.f, (half) 25.f, (half) 38.f, + (half) 53.f, (half) 69.f, (half) 89.f, (half)113.f +}; + +// Packed LUT: 2 FP16 values per uint, 8 unique constant loads instead of 16 +constant uint iq4nl_packed[8] = { + 0xD680D7F0u, // idx 0,1: -127, -104 + 0xD410D530u, // idx 2,3: -83, -65 + 0xD060D220u, // idx 4,5: -49, -35 + 0xC900CD80u, // idx 6,7: -22, -10 + 0x4A803C00u, // idx 8,9: 1, 13 + 0x50C04E40u, // idx 10,11: 25, 38 + 0x545052A0u, // idx 12,13: 53, 69 + 0x57105590u // idx 14,15: 89, 113 +}; + +// Packed dequant: 1 uint constant load (8-way divergence) + shift + as_half +#define IQ4_NL_DEQUANT(nibble) as_half((ushort)(iq4nl_packed[(nibble) >> 1] >> (((nibble) & 1u) << 4))) + +#define dequantizeBlockAccum_ns_sgbroadcast_1_hi(total_sums, bits4, scale, y) \ + float shared_y; \ + shared_y = sub_group_broadcast(y.s0, 0); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s0 & 0x000F)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s1 & 0x000F)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s1, 0); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0x00F0) >> 4)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0x00F0) >> 4)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s2, 0); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0x0F00) >> 8)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0x0F00) >> 8)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s3, 0); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0xF000) >> 12)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0xF000) >> 12)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s4, 0); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s2 & 0x000F)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s3 & 0x000F)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s5, 0); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0x00F0) >> 4)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0x00F0) >> 4)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s6, 0); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0x0F00) >> 8)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0x0F00) >> 8)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s7, 0); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0xF000) >> 12)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0xF000) >> 12)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s0, 1); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s4 & 0x000F)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s5 & 0x000F)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s1, 1); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0x00F0) >> 4)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0x00F0) >> 4)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s2, 1); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0x0F00) >> 8)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0x0F00) >> 8)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s3, 1); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0xF000) >> 12)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0xF000) >> 12)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s4, 1); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s6 & 0x000F)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s7 & 0x000F)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s5, 1); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0x00F0) >> 4)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0x00F0) >> 4)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s6, 1); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0x0F00) >> 8)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0x0F00) >> 8)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s7, 1); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0xF000) >> 12)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0xF000) >> 12)) * scale.s1 * shared_y; \ + + +#define dequantizeBlockAccum_ns_sgbroadcast_1_lo(total_sums, bits4, scale, y) \ + shared_y = sub_group_broadcast(y.s0, 2); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s0 & 0x000F)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s1 & 0x000F)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s1, 2); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0x00F0) >> 4)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0x00F0) >> 4)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s2, 2); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0x0F00) >> 8)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0x0F00) >> 8)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s3, 2); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0xF000) >> 12)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0xF000) >> 12)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s4, 2); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s2 & 0x000F)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s3 & 0x000F)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s5, 2); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0x00F0) >> 4)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0x00F0) >> 4)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s6, 2); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0x0F00) >> 8)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0x0F00) >> 8)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s7, 2); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0xF000) >> 12)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0xF000) >> 12)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s0, 3); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s4 & 0x000F)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s5 & 0x000F)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s1, 3); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0x00F0) >> 4)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0x00F0) >> 4)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s2, 3); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0x0F00) >> 8)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0x0F00) >> 8)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s3, 3); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0xF000) >> 12)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0xF000) >> 12)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s4, 3); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s6 & 0x000F)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s7 & 0x000F)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s5, 3); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0x00F0) >> 4)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0x00F0) >> 4)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s6, 3); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0x0F00) >> 8)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0x0F00) >> 8)) * scale.s1 * shared_y; \ + shared_y = sub_group_broadcast(y.s7, 3); \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0xF000) >> 12)) * scale.s0 * shared_y; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0xF000) >> 12)) * scale.s1 * shared_y; \ + + +#define dequantizeBlockAccum_ns_sgbroadcast_8_hi(total_sums, bits4, scale, y) \ + float8 shared_y; \ + shared_y = sub_group_broadcast(y, 0); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s0 & 0x000F)) * scale.s0 * shared_y.s0; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0x00F0) >> 4)) * scale.s0 * shared_y.s1; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0x0F00) >> 8)) * scale.s0 * shared_y.s2; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0xF000) >> 12)) * scale.s0 * shared_y.s3; \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s2 & 0x000F)) * scale.s0 * shared_y.s4; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0x00F0) >> 4)) * scale.s0 * shared_y.s5; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0x0F00) >> 8)) * scale.s0 * shared_y.s6; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0xF000) >> 12)) * scale.s0 * shared_y.s7; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s1 & 0x000F)) * scale.s1 * shared_y.s0; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0x00F0) >> 4)) * scale.s1 * shared_y.s1; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0x0F00) >> 8)) * scale.s1 * shared_y.s2; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0xF000) >> 12)) * scale.s1 * shared_y.s3; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s3 & 0x000F)) * scale.s1 * shared_y.s4; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0x00F0) >> 4)) * scale.s1 * shared_y.s5; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0x0F00) >> 8)) * scale.s1 * shared_y.s6; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0xF000) >> 12)) * scale.s1 * shared_y.s7; \ + shared_y = sub_group_broadcast(y, 1); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s4 & 0x000F)) * scale.s0 * shared_y.s0; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0x00F0) >> 4)) * scale.s0 * shared_y.s1; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0x0F00) >> 8)) * scale.s0 * shared_y.s2; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0xF000) >> 12)) * scale.s0 * shared_y.s3; \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s6 & 0x000F)) * scale.s0 * shared_y.s4; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0x00F0) >> 4)) * scale.s0 * shared_y.s5; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0x0F00) >> 8)) * scale.s0 * shared_y.s6; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0xF000) >> 12)) * scale.s0 * shared_y.s7; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s5 & 0x000F)) * scale.s1 * shared_y.s0; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0x00F0) >> 4)) * scale.s1 * shared_y.s1; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0x0F00) >> 8)) * scale.s1 * shared_y.s2; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0xF000) >> 12)) * scale.s1 * shared_y.s3; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s7 & 0x000F)) * scale.s1 * shared_y.s4; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0x00F0) >> 4)) * scale.s1 * shared_y.s5; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0x0F00) >> 8)) * scale.s1 * shared_y.s6; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0xF000) >> 12)) * scale.s1 * shared_y.s7; \ + + +#define dequantizeBlockAccum_ns_sgbroadcast_8_lo(total_sums, bits4, scale, y) \ + shared_y = sub_group_broadcast(y, 2); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s0 & 0x000F)) * scale.s0 * shared_y.s0; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0x00F0) >> 4)) * scale.s0 * shared_y.s1; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0x0F00) >> 8)) * scale.s0 * shared_y.s2; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s0 & 0xF000) >> 12)) * scale.s0 * shared_y.s3; \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s2 & 0x000F)) * scale.s0 * shared_y.s4; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0x00F0) >> 4)) * scale.s0 * shared_y.s5; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0x0F00) >> 8)) * scale.s0 * shared_y.s6; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s2 & 0xF000) >> 12)) * scale.s0 * shared_y.s7; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s1 & 0x000F)) * scale.s1 * shared_y.s0; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0x00F0) >> 4)) * scale.s1 * shared_y.s1; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0x0F00) >> 8)) * scale.s1 * shared_y.s2; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s1 & 0xF000) >> 12)) * scale.s1 * shared_y.s3; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s3 & 0x000F)) * scale.s1 * shared_y.s4; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0x00F0) >> 4)) * scale.s1 * shared_y.s5; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0x0F00) >> 8)) * scale.s1 * shared_y.s6; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s3 & 0xF000) >> 12)) * scale.s1 * shared_y.s7; \ + shared_y = sub_group_broadcast(y, 3); \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s4 & 0x000F)) * scale.s0 * shared_y.s0; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0x00F0) >> 4)) * scale.s0 * shared_y.s1; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0x0F00) >> 8)) * scale.s0 * shared_y.s2; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s4 & 0xF000) >> 12)) * scale.s0 * shared_y.s3; \ + total_sums.s0 += IQ4_NL_DEQUANT((bits4.s6 & 0x000F)) * scale.s0 * shared_y.s4; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0x00F0) >> 4)) * scale.s0 * shared_y.s5; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0x0F00) >> 8)) * scale.s0 * shared_y.s6; \ + total_sums.s0 += IQ4_NL_DEQUANT(((bits4.s6 & 0xF000) >> 12)) * scale.s0 * shared_y.s7; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s5 & 0x000F)) * scale.s1 * shared_y.s0; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0x00F0) >> 4)) * scale.s1 * shared_y.s1; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0x0F00) >> 8)) * scale.s1 * shared_y.s2; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s5 & 0xF000) >> 12)) * scale.s1 * shared_y.s3; \ + total_sums.s1 += IQ4_NL_DEQUANT((bits4.s7 & 0x000F)) * scale.s1 * shared_y.s4; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0x00F0) >> 4)) * scale.s1 * shared_y.s5; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0x0F00) >> 8)) * scale.s1 * shared_y.s6; \ + total_sums.s1 += IQ4_NL_DEQUANT(((bits4.s7 & 0xF000) >> 12)) * scale.s1 * shared_y.s7; \ + +#ifdef ADRENO_GPU +REQD_SUBGROUP_SIZE_64 +#endif +kernel void kernel_gemv_noshuffle_iq4_nl_f32( + read_only image1d_buffer_t src0_q, + global half2 * src0_d, + read_only image1d_buffer_t src1, + global float * dst, + ulong offsetd, + int ne00, + int ne01) +{ + uint groupId = get_local_id(1); + uint gid = get_global_id(0); + ushort slid = get_sub_group_local_id(); + + uint K = ne00; + uint M = ne01; + + uint LINE_STRIDE_A = M / 2; + uint BLOCK_STRIDE_A = NSUBGROUPS * M; + + private uint4 regA; + private half2 regS; + private float8 regB; + + private float2 totalSum = (float2)(0.0f); + + // loop along K in block granularity, skip 4 blocks every iter + for (uint k = groupId; k < (K / QK4_NL); k += NSUBGROUPS) { + regS = src0_d[gid + k * LINE_STRIDE_A]; // each fiber loads scale of two rows + // first 4 fibers in each wave load 8 B values to its private scope + if (slid < 4) { + regB.s0123 = read_imagef(src1, (slid * 2 + k * 8)); + regB.s4567 = read_imagef(src1, (1 + slid * 2 + k * 8)); + } + + // load half weights for two blocks in consecutive rows + regA.s0 = read_imageui(src0_q, (gid + k * BLOCK_STRIDE_A + LINE_STRIDE_A * 0)).x; + regA.s1 = read_imageui(src0_q, (gid + k * BLOCK_STRIDE_A + LINE_STRIDE_A * 1)).x; + regA.s2 = read_imageui(src0_q, (gid + k * BLOCK_STRIDE_A + LINE_STRIDE_A * 2)).x; + regA.s3 = read_imageui(src0_q, (gid + k * BLOCK_STRIDE_A + LINE_STRIDE_A * 3)).x; +#ifdef VECTOR_SUB_GROUP_BROADCAST + dequantizeBlockAccum_ns_sgbroadcast_8_hi(totalSum, as_ushort8(regA), regS, regB); +#else + dequantizeBlockAccum_ns_sgbroadcast_1_hi(totalSum, as_ushort8(regA), regS, regB); +#endif // VECTOR_SUB_GROUP_BROADCAST + + regA.s0 = read_imageui(src0_q, (gid + k * BLOCK_STRIDE_A + LINE_STRIDE_A * 4)).x; + regA.s1 = read_imageui(src0_q, (gid + k * BLOCK_STRIDE_A + LINE_STRIDE_A * 5)).x; + regA.s2 = read_imageui(src0_q, (gid + k * BLOCK_STRIDE_A + LINE_STRIDE_A * 6)).x; + regA.s3 = read_imageui(src0_q, (gid + k * BLOCK_STRIDE_A + LINE_STRIDE_A * 7)).x; +#ifdef VECTOR_SUB_GROUP_BROADCAST + dequantizeBlockAccum_ns_sgbroadcast_8_lo(totalSum, as_ushort8(regA), regS, regB); +#else + dequantizeBlockAccum_ns_sgbroadcast_1_lo(totalSum, as_ushort8(regA), regS, regB); +#endif // VECTOR_SUB_GROUP_BROADCAST + } + + // reduction in local memory, assumes #wave=4 + local float2 reduceLM[SUBGROUP_SIZE * 3]; + if (groupId == 1) { + reduceLM[SUBGROUP_SIZE * 0 + slid] = totalSum; + } + if (groupId == 2) { + reduceLM[SUBGROUP_SIZE * 1 + slid] = totalSum; + } + if (groupId == 3) { + reduceLM[SUBGROUP_SIZE * 2 + slid] = totalSum; + } + + barrier(CLK_LOCAL_MEM_FENCE); + + if (groupId == 0) { + totalSum += reduceLM[SUBGROUP_SIZE * 0 + slid]; + } + if (groupId == 0) { + totalSum += reduceLM[SUBGROUP_SIZE * 1 + slid]; + } + if (groupId == 0) { + totalSum += reduceLM[SUBGROUP_SIZE * 2 + slid]; + } + + // 2 outputs per fiber in wave 0 + if (groupId == 0) { + dst = (global float*)((global char*)dst + offsetd); + vstore2(totalSum, 0, &(dst[gid * 2])); + } + +} diff --git a/ggml/src/ggml-opencl/kernels/mul_mm_iq4_nl_f32_l4_lm.cl b/ggml/src/ggml-opencl/kernels/mul_mm_iq4_nl_f32_l4_lm.cl new file mode 100644 index 00000000000..11ff7f8d9dc --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/mul_mm_iq4_nl_f32_l4_lm.cl @@ -0,0 +1,171 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +#define LOAD_VEC_A 8 +#define LOAD_VEC_B 4 + +#define BM 64 +#define BN 64 +#define BK 32 +#define TM 4 +#define TN 8 + +constant float kvalues_iq4nl[16] = { + -127.f, -104.f, -83.f, -65.f, -49.f, -35.f, -22.f, -10.f, + 1.f, 13.f, 25.f, 38.f, 53.f, 69.f, 89.f, 113.f +}; + +kernel void kernel_mul_mm_iq4_nl_f32_l4_lm( + global uchar4 * src0_q, + global half * src0_d, + global float4 * src1, + ulong offset1, + global float * dst, + ulong offsetd, + + int ne00, + int ne01, + int ne02, + int ne11, + int ne12, + + int stride_a, + int stride_b, + int stride_d, + + int batch_stride_a, + int batch_stride_b, + int batch_stride_d, + + int r2, + int r3 +) { + src1 = (global float4*)((global char*)src1 + offset1); + dst = (global float *)((global char*)dst + offsetd); + + local float buf_a[BM * BK]; + local float buf_b[BN * BK]; + + const int batch_idx = get_global_id(2); + + const int i13 = batch_idx / ne12; + const int i12 = batch_idx % ne12; + + const int i03 = i13 / r3; + const int i02 = i12 / r2; + + const int batch_idx_a = i03 * ne02 + i02; + + const int ir = get_group_id(0); + const int ic = get_group_id(1); + + const int tid = get_local_id(0); + const int th_r = tid % (BM / TM); + const int th_c = tid / (BM / TM); + + const int loadr_a = get_local_id(0) % (BK / LOAD_VEC_A); + const int loadc_a = get_local_id(0) / (BK / LOAD_VEC_A); + const int loadr_b = get_local_id(0) % (BK / LOAD_VEC_B); + const int loadc_b = get_local_id(0) / (BK / LOAD_VEC_B); + + const int loadstride_a = get_local_size(0) * LOAD_VEC_A / BK; + const int loadstride_b = get_local_size(0) * LOAD_VEC_B / BK; + + int pos_a = (batch_idx_a * batch_stride_a + ir * BM * stride_a) / LOAD_VEC_A; + int pos_b = (batch_idx * batch_stride_b + ic * BN * stride_b) / LOAD_VEC_B; + + float sums[TM * TN]; + float cache_a[TM]; + float cache_b[TN]; + + for (int i = 0; i < TM * TN; i++) { + sums[i] = 0.0f; + } + + for (int block = 0; block < ne00; block += BK) { + for (int l = 0; l < BM; l += loadstride_a) { + if (ir*BM + loadc_a + l < ne01) { + int idx = pos_a + (loadc_a + l) * stride_a / LOAD_VEC_A + loadr_a; + int ib = idx / 4; + int iqs = idx % 4; + + float d = (float)src0_d[ib]; + global uchar4 * qs = src0_q + ib*4 + iqs; + uchar4 q = *qs; + // IQ4_NL: use lookup table instead of linear (nibble - 8) + float4 v1 = (float4)(kvalues_iq4nl[(q.s0 )&0x0F], kvalues_iq4nl[(q.s1 )&0x0F], + kvalues_iq4nl[(q.s2 )&0x0F], kvalues_iq4nl[(q.s3 )&0x0F])*d; + float4 v2 = (float4)(kvalues_iq4nl[(q.s0>>4)&0x0F], kvalues_iq4nl[(q.s1>>4)&0x0F], + kvalues_iq4nl[(q.s2>>4)&0x0F], kvalues_iq4nl[(q.s3>>4)&0x0F])*d; + + buf_a[(loadr_a * 4 + 0) * BM + loadc_a + l] = v1.s0; + buf_a[(loadr_a * 4 + 1) * BM + loadc_a + l] = v1.s1; + buf_a[(loadr_a * 4 + 2) * BM + loadc_a + l] = v1.s2; + buf_a[(loadr_a * 4 + 3) * BM + loadc_a + l] = v1.s3; + buf_a[(loadr_a * 4 + 16) * BM + loadc_a + l] = v2.s0; + buf_a[(loadr_a * 4 + 17) * BM + loadc_a + l] = v2.s1; + buf_a[(loadr_a * 4 + 18) * BM + loadc_a + l] = v2.s2; + buf_a[(loadr_a * 4 + 19) * BM + loadc_a + l] = v2.s3; + } else { + buf_a[(loadr_a * 4 + 0) * BM + loadc_a + l] = 0.0f; + buf_a[(loadr_a * 4 + 1) * BM + loadc_a + l] = 0.0f; + buf_a[(loadr_a * 4 + 2) * BM + loadc_a + l] = 0.0f; + buf_a[(loadr_a * 4 + 3) * BM + loadc_a + l] = 0.0f; + buf_a[(loadr_a * 4 + 16) * BM + loadc_a + l] = 0.0f; + buf_a[(loadr_a * 4 + 17) * BM + loadc_a + l] = 0.0f; + buf_a[(loadr_a * 4 + 18) * BM + loadc_a + l] = 0.0f; + buf_a[(loadr_a * 4 + 19) * BM + loadc_a + l] = 0.0f; + } + } + + for (int l = 0; l < BN; l += loadstride_b) { + if (ic*BN + loadc_b + l < ne11) { + int idx = pos_b + (loadc_b + l) * stride_b / LOAD_VEC_B + loadr_b; + buf_b[(loadr_b * LOAD_VEC_B + 0) * BN + loadc_b + l] = src1[idx].s0; + buf_b[(loadr_b * LOAD_VEC_B + 1) * BN + loadc_b + l] = src1[idx].s1; + buf_b[(loadr_b * LOAD_VEC_B + 2) * BN + loadc_b + l] = src1[idx].s2; + buf_b[(loadr_b * LOAD_VEC_B + 3) * BN + loadc_b + l] = src1[idx].s3; + } else { + buf_b[(loadr_b * LOAD_VEC_B + 0) * BN + loadc_b + l] = 0.0f; + buf_b[(loadr_b * LOAD_VEC_B + 1) * BN + loadc_b + l] = 0.0f; + buf_b[(loadr_b * LOAD_VEC_B + 2) * BN + loadc_b + l] = 0.0f; + buf_b[(loadr_b * LOAD_VEC_B + 3) * BN + loadc_b + l] = 0.0f; + } + } + + barrier(CLK_LOCAL_MEM_FENCE); + + pos_a += BK / LOAD_VEC_A; + pos_b += BK / LOAD_VEC_B; + + for (int i = 0; i < BK; i++) { + for (int j = 0; j < TM; j++) { + cache_a[j] = buf_a[(i) * BM + th_r * TM + j]; + } + + for (int j = 0; j < TN; j++) { + cache_b[j] = buf_b[(i) * BN + th_c * TN + j]; + } + + for (int cc = 0; cc < TN; cc++) { + for (int cr = 0; cr < TM; cr++) { + const int sums_idx = cc*TM + cr; + sums[sums_idx] = mad(cache_a[cr], cache_b[cc], sums[sums_idx]); + } + } + } + barrier(CLK_LOCAL_MEM_FENCE); + } + + const int dr = ir * BM + th_r * TM; + const int dc = ic * BN + th_c * TN; + + const int offsets = batch_idx * batch_stride_d; + + for (int cc = 0; cc < TN; cc++) { + for (int cr = 0; cr < TM; cr++) { + if (dr + cr < ne01 && dc + cc < ne11) { + dst[offsets + (dc + cc) * stride_d + dr + cr] = sums[cc * TM + cr]; + } + } + } +} diff --git a/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32.cl b/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32.cl new file mode 100644 index 00000000000..a6a325cd729 --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32.cl @@ -0,0 +1,164 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +#ifdef cl_intel_subgroups +#pragma OPENCL EXTENSION cl_intel_subgroups : enable +#else +#pragma OPENCL EXTENSION cl_khr_subgroups : enable +#endif + +#ifdef cl_intel_required_subgroup_size +#pragma OPENCL EXTENSION cl_intel_required_subgroup_size : enable +#define INTEL_GPU 1 +#define REQD_SUBGROUP_SIZE_16 __attribute__((intel_reqd_sub_group_size(16))) +#define REQD_SUBGROUP_SIZE_32 __attribute__((intel_reqd_sub_group_size(32))) +#elif defined(cl_qcom_reqd_sub_group_size) +#pragma OPENCL EXTENSION cl_qcom_reqd_sub_group_size : enable +#define ADRENO_GPU 1 +#define REQD_SUBGROUP_SIZE_64 __attribute__((qcom_reqd_sub_group_size("half"))) +#define REQD_SUBGROUP_SIZE_128 __attribute__((qcom_reqd_sub_group_size("full"))) +#endif + +#define QK4_NL 32 + +typedef char int8_t; +typedef uchar uint8_t; +typedef short int16_t; +typedef ushort uint16_t; +typedef int int32_t; +typedef uint uint32_t; + +constant float kvalues_iq4nl[16] = { + -127.f, -104.f, -83.f, -65.f, -49.f, -35.f, -22.f, -10.f, + 1.f, 13.f, 25.f, 38.f, 53.f, 69.f, 89.f, 113.f +}; + +//------------------------------------------------------------------------------ +// block_iq4_nl +//------------------------------------------------------------------------------ +struct block_iq4_nl +{ + half d; + uint8_t qs[QK4_NL / 2]; +}; + +//------------------------------------------------------------------------------ +// mul_vec_q_n_f32 +//------------------------------------------------------------------------------ +// Compute inner product between half a block of iq4_nl and 16 floats (yl). +// il indicates where the quants begin (0 or 8). +inline float block_iq4_nl_dot_y( + global struct block_iq4_nl * qb_curr, + private float * yl, + int il +) { + float d = qb_curr->d; + float acc = 0.f; + global uchar * qs = qb_curr->qs + il; + for (int i = 0; i < 8; ++i) { + acc += yl[i] * kvalues_iq4nl[qs[i] & 0x0F]; + acc += yl[i+8] * kvalues_iq4nl[qs[i] >> 4]; + } + return d * acc; +} + +#ifdef INTEL_GPU +#define N_DST 4 // each subgroup group works on 4 rows +#define N_SUBGROUP 1 // number of subgroups in a thread group +#define N_SUBGROUP_SIZE 16 // assuming subgroup size is 16 +#elif defined (ADRENO_GPU) +#define N_DST 4 +#define N_SUBGROUP 1 +#define N_SUBGROUP_SIZE 64 +#endif + +inline void mul_vec_q_n_f32( + global void * src0, + global float * src1, + global float * dst, + int ne00, + int ne01, + int ne02, + int ne10, + int ne12, + int ne0, + int ne1, + int r2, + int r3 +) { + + const ulong nb = ne00/QK4_NL; + + int r0 = get_group_id(0); + int r1 = get_group_id(1); + int im = get_group_id(2); + + int first_row = (r0 * N_SUBGROUP + get_sub_group_id()) * N_DST; + + int i12 = im%ne12; + int i13 = im/ne12; + + ulong offset0 = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); + + global struct block_iq4_nl * x = (global struct block_iq4_nl *) src0 + offset0; + global float * y = (global float *) src1 + r1*ne10 + im*ne00*ne1; + + float yl[16]; // src1 vector cache + float sumf[N_DST]={0.f}; + + int ix = get_sub_group_local_id()/2; + int il = 8*(get_sub_group_local_id()%2); + + global float * yb = y + ix * QK4_NL + il; + + // each thread in a SIMD group deals with half a block. + for (int ib = ix; ib < nb; ib += N_SUBGROUP_SIZE/2) { + for (int i = 0; i < 8; ++i) { + yl[i] = yb[i]; + yl[i+8] = yb[i+16]; + } + + for (int row = 0; row < N_DST; row++) { + sumf[row] += block_iq4_nl_dot_y(x+ib+row*nb, yl, il); + } + + yb += QK4_NL * (N_SUBGROUP_SIZE/2); + } + + float tot[N_DST] = { + sub_group_reduce_add(sumf[0]), sub_group_reduce_add(sumf[1]), + sub_group_reduce_add(sumf[2]), sub_group_reduce_add(sumf[3])}; + for (int row = 0; row < N_DST; ++row) { + if (get_sub_group_local_id() == 0 && first_row + row < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + row] = tot[row]; + } + } +} + +#ifdef INTEL_GPU +REQD_SUBGROUP_SIZE_16 +#elif defined (ADRENO_GPU) +REQD_SUBGROUP_SIZE_64 +#endif +kernel void kernel_mul_mv_iq4_nl_f32( + global void * src0, + ulong offset0, + global float * src1, + ulong offset1, + global float * dst, + ulong offsetd, + int ne00, + int ne01, + int ne02, + int ne10, + int ne12, + int ne0, + int ne1, + int r2, + int r3 +) { + src0 = (global void*)((global char*)src0 + offset0); + src1 = (global float*)((global char*)src1 + offset1); + dst = (global float*)((global char*)dst + offsetd); + + mul_vec_q_n_f32(src0, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3); +} diff --git a/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32_flat.cl b/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32_flat.cl new file mode 100644 index 00000000000..8c5b3f52e42 --- /dev/null +++ b/ggml/src/ggml-opencl/kernels/mul_mv_iq4_nl_f32_flat.cl @@ -0,0 +1,202 @@ +#pragma OPENCL EXTENSION cl_khr_fp16 : enable + +#ifdef cl_intel_subgroups +#pragma OPENCL EXTENSION cl_intel_subgroups : enable +#else +#pragma OPENCL EXTENSION cl_khr_subgroups : enable +#endif + +#ifdef cl_intel_required_subgroup_size +#pragma OPENCL EXTENSION cl_intel_required_subgroup_size : enable +#define INTEL_GPU 1 +#define REQD_SUBGROUP_SIZE_16 __attribute__((intel_reqd_sub_group_size(16))) +#define REQD_SUBGROUP_SIZE_32 __attribute__((intel_reqd_sub_group_size(32))) +#elif defined(cl_qcom_reqd_sub_group_size) +#pragma OPENCL EXTENSION cl_qcom_reqd_sub_group_size : enable +#define ADRENO_GPU 1 +#define REQD_SUBGROUP_SIZE_64 __attribute__((qcom_reqd_sub_group_size("half"))) +#define REQD_SUBGROUP_SIZE_128 __attribute__((qcom_reqd_sub_group_size("full"))) +#endif + +#define QK4_NL 32 + +typedef char int8_t; +typedef uchar uint8_t; +typedef short int16_t; +typedef ushort uint16_t; +typedef int int32_t; +typedef uint uint32_t; + +constant float kvalues_iq4nl[16] = { + -127.f, -104.f, -83.f, -65.f, -49.f, -35.f, -22.f, -10.f, + 1.f, 13.f, 25.f, 38.f, 53.f, 69.f, 89.f, 113.f +}; + +//------------------------------------------------------------------------------ +// block_iq4_nl +//------------------------------------------------------------------------------ +struct block_iq4_nl +{ + half d; + uint8_t qs[QK4_NL / 2]; +}; + +// Compute dot product between half a block of iq4_nl quants and activations. +// x points to the quant bytes, dh points to the scale. +// yl has 16 activation values: [0..7] for low nibbles, [8..15] for high nibbles. +// il indicates offset into the quant bytes (0 or 8). +inline float block_iq4_nl_dot_y_flat( + global uchar * x, + global half * dh, + private float * yl, + int il +) { + float d = *dh; + global uchar * qs = x + il; + float acc = 0.f; + for (int i = 0; i < 8; ++i) { + acc += yl[i] * kvalues_iq4nl[qs[i] & 0x0F]; + acc += yl[i+8] * kvalues_iq4nl[qs[i] >> 4]; + } + return d * acc; +} + +#undef N_DST +#undef N_SIMDGROUP +#undef N_SIMDWIDTH + +#ifdef INTEL_GPU +#define N_DST 8 // each subgroup works on 8 rows +#define N_SUBGROUP 1 // number of subgroups in a thread group +#define N_SUBGROUP_SIZE 16 // assuming subgroup size is 16 +#elif defined (ADRENO_GPU) +#define N_DST 8 +#define N_SUBGROUP 1 +#define N_SUBGROUP_SIZE 64 +#endif + +inline void mul_vec_q_n_f32_8x_flat( + global uchar * src0_q, + global half * src0_d, + global float * src1, + global float * dst, + int ne00, + int ne01, + int ne02, + int ne10, + int ne12, + int ne0, + int ne1, + int r2, + int r3 +) { + const ulong nb = ne00/QK4_NL; + + int r0 = get_group_id(0); + int r1 = get_group_id(1); + int im = get_group_id(2); + + int first_row = (r0 * N_SUBGROUP + get_sub_group_id()) * N_DST; + + int i12 = im%ne12; + int i13 = im/ne12; + + // The number of scales is the same as the number of blocks. + ulong offset0_d = first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02); + // Each block contains QK4_NL/2 uchars, hence offset for qs is as follows. + ulong offset0_q = (first_row * nb + (i12/r2)*(nb*ne01) + (i13/r3)*(nb*ne01*ne02)) * QK4_NL/2; + + global uchar * x = (global uchar *) src0_q + offset0_q; + global half * d = (global half *) src0_d + offset0_d; + global float * y = (global float *) src1 + r1*ne10 + im*ne00*ne1; + + float yl[16]; + float8 sumf = 0.f; + + int ix = get_sub_group_local_id()/2; + int il = 8*(get_sub_group_local_id()%2); + + global float * yb = y + ix*QK4_NL + il; + + for (int ib = ix; ib < nb; ib += N_SUBGROUP_SIZE/2) { + for (int i = 0; i < 8; ++i) { + yl[i] = yb[i]; + yl[i+8] = yb[i+16]; + } + + sumf.s0 += block_iq4_nl_dot_y_flat(x + ib*QK4_NL/2 + 0*nb*QK4_NL/2, d + ib + 0*nb, yl, il); + sumf.s1 += block_iq4_nl_dot_y_flat(x + ib*QK4_NL/2 + 1*nb*QK4_NL/2, d + ib + 1*nb, yl, il); + sumf.s2 += block_iq4_nl_dot_y_flat(x + ib*QK4_NL/2 + 2*nb*QK4_NL/2, d + ib + 2*nb, yl, il); + sumf.s3 += block_iq4_nl_dot_y_flat(x + ib*QK4_NL/2 + 3*nb*QK4_NL/2, d + ib + 3*nb, yl, il); + + sumf.s4 += block_iq4_nl_dot_y_flat(x + ib*QK4_NL/2 + 4*nb*QK4_NL/2, d + ib + 4*nb, yl, il); + sumf.s5 += block_iq4_nl_dot_y_flat(x + ib*QK4_NL/2 + 5*nb*QK4_NL/2, d + ib + 5*nb, yl, il); + sumf.s6 += block_iq4_nl_dot_y_flat(x + ib*QK4_NL/2 + 6*nb*QK4_NL/2, d + ib + 6*nb, yl, il); + sumf.s7 += block_iq4_nl_dot_y_flat(x + ib*QK4_NL/2 + 7*nb*QK4_NL/2, d + ib + 7*nb, yl, il); + + yb += QK4_NL * (N_SUBGROUP_SIZE/2); + } + + float8 tot = (float8)( + sub_group_reduce_add(sumf.s0), sub_group_reduce_add(sumf.s1), + sub_group_reduce_add(sumf.s2), sub_group_reduce_add(sumf.s3), + sub_group_reduce_add(sumf.s4), sub_group_reduce_add(sumf.s5), + sub_group_reduce_add(sumf.s6), sub_group_reduce_add(sumf.s7) + ); + + if (get_sub_group_local_id() == 0) { + if (first_row + 0 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 0] = tot.s0; + } + if (first_row + 1 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 1] = tot.s1; + } + if (first_row + 2 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 2] = tot.s2; + } + if (first_row + 3 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 3] = tot.s3; + } + + if (first_row + 4 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 4] = tot.s4; + } + if (first_row + 5 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 5] = tot.s5; + } + if (first_row + 6 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 6] = tot.s6; + } + if (first_row + 7 < ne01) { + dst[r1*ne0 + im*ne0*ne1 + first_row + 7] = tot.s7; + } + } +} + +#ifdef INTEL_GPU +REQD_SUBGROUP_SIZE_16 +#elif defined (ADRENO_GPU) +REQD_SUBGROUP_SIZE_64 +#endif +kernel void kernel_mul_mv_iq4_nl_f32_flat( + global uchar * src0_q, + global half * src0_d, + global float * src1, + ulong offset1, + global float * dst, + ulong offsetd, + int ne00, + int ne01, + int ne02, + int ne10, + int ne12, + int ne0, + int ne1, + int r2, + int r3 +) { + src1 = (global float*)((global char*)src1 + offset1); + dst = (global float*)((global char*)dst + offsetd); + + mul_vec_q_n_f32_8x_flat(src0_q, src0_d, src1, dst, ne00, ne01, ne02, ne10, ne12, ne0, ne1, r2, r3); +} diff --git a/ggml/src/ggml-rpc/ggml-rpc.cpp b/ggml/src/ggml-rpc/ggml-rpc.cpp index 2ded7397868..505bec73d37 100644 --- a/ggml/src/ggml-rpc/ggml-rpc.cpp +++ b/ggml/src/ggml-rpc/ggml-rpc.cpp @@ -1101,7 +1101,7 @@ bool rpc_server::set_tensor(const std::vector<uint8_t> & input) { fs::path cache_file = fs::path(cache_dir) / hash_str; std::ofstream ofs(cache_file, std::ios::binary); ofs.write((const char *)data, size); - GGML_LOG_INFO("[%s] saved to '%s'\n", __func__, cache_file.c_str()); + GGML_LOG_INFO("[%s] saved to '%s'\n", __func__, cache_file.string().c_str()); } ggml_backend_tensor_set(tensor, data, offset, size); return true; diff --git a/ggml/src/ggml-sycl/common.hpp b/ggml/src/ggml-sycl/common.hpp index 0101b27640a..5abf2290651 100644 --- a/ggml/src/ggml-sycl/common.hpp +++ b/ggml/src/ggml-sycl/common.hpp @@ -224,7 +224,7 @@ struct sycl_device_info { // cudaOccupancyMaxActiveBlocksPerMultiprocessor bool vmm; // virtual memory support size_t total_vram; - //sycl_hw_info hw_info; \\ device id and aarch, currently not used + sycl_hw_info hw_info; optimize_feature opt_feature; }; diff --git a/ggml/src/ggml-sycl/ggml-sycl.cpp b/ggml/src/ggml-sycl/ggml-sycl.cpp index 36923160d72..1eead625e76 100644 --- a/ggml/src/ggml-sycl/ggml-sycl.cpp +++ b/ggml/src/ggml-sycl/ggml-sycl.cpp @@ -104,6 +104,7 @@ static ggml_sycl_device_info ggml_sycl_init() { info.max_work_group_sizes[i] = prop.get_max_work_group_size(); info.devices[i].max_wg_per_cu = info.max_work_group_sizes[i] / prop.get_max_compute_units(); + info.devices[i].hw_info = get_device_hw_info(&device); } @@ -3703,9 +3704,16 @@ static void ggml_sycl_mul_mat(ggml_backend_sycl_context & ctx, const ggml_tensor // Dispatch becomes obscure with the reorder, MMVQ when the reorder optimization // is enabled takes precedence over DMMV, the current if-else implementation // requires disabling DMMV if both conditions are met + if (!g_ggml_sycl_prioritize_dmmv && ((should_reorder_tensor(ctx, dst) && ggml_sycl_supports_reorder_mmvq(src0->type)))) { - use_dequantize_mul_mat_vec = use_dequantize_mul_mat_vec && !use_mul_mat_vec_q; + // Arc770 get benefit with Q4_0 by skipping it. + if (!(ggml_sycl_info().devices[ctx.device].hw_info.arch == + gpu_arch::intel_gpu_acm_g10 && + src0->type == GGML_TYPE_Q4_0)) { + use_dequantize_mul_mat_vec = + use_dequantize_mul_mat_vec && !use_mul_mat_vec_q; + } } if (!split && src0->type == GGML_TYPE_F16 && ggml_is_permuted(src0) && ggml_is_permuted(src1) && src1->ne[1] == 1) { diff --git a/ggml/src/ggml-sycl/sycl_hw.cpp b/ggml/src/ggml-sycl/sycl_hw.cpp index 7041140034b..03b0c37a3cd 100644 --- a/ggml/src/ggml-sycl/sycl_hw.cpp +++ b/ggml/src/ggml-sycl/sycl_hw.cpp @@ -1,15 +1,67 @@ #include "sycl_hw.hpp" -// TODO: currently not used -/* -sycl_hw_info get_device_hw_info(sycl::device *device_ptr) { - sycl_hw_info res; - int32_t id = device_ptr->get_info<sycl::ext::intel::info::device::device_id>(); - res.device_id = id; +using namespace std; - syclex::architecture arch = device_ptr->get_info<syclex::info::device::architecture>(); - res.arch = arch; +/*defined in +* /opt/intel/oneapi/compiler/latest/include/sycl/ext/oneapi/experimental/device_architecture.def +*/ +static map<gpu_arch, std::pair<const char*, sycl_intel_gpu_family>> arch2name = { + {gpu_arch::intel_gpu_bdw, {"intel_gpu_bdw", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_skl, {"intel_gpu_skl", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_kbl, {"intel_gpu_kbl", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_cfl, {"intel_gpu_cfl", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_apl, {"intel_gpu_apl", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_glk, {"intel_gpu_glk", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_whl, {"intel_gpu_whl", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_aml, {"intel_gpu_aml", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_cml, {"intel_gpu_cml", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_icllp, {"intel_gpu_icllp", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_ehl, {"intel_gpu_ehl", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_tgllp, {"intel_gpu_tgllp", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_rkl, {"intel_gpu_rkl", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_adl_s, {"intel_gpu_adl_s", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_adl_p, {"intel_gpu_adl_p", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_adl_n, {"intel_gpu_adl_n", GPU_FAMILY_IGPU_NON_XE}}, + {gpu_arch::intel_gpu_dg1, {"intel_gpu_dg1", GPU_FAMILY_DGPU_CLIENT_GAME}}, + {gpu_arch::intel_gpu_acm_g10, {"intel_gpu_acm_g10", GPU_FAMILY_DGPU_CLIENT_GAME}}, + {gpu_arch::intel_gpu_acm_g11, {"intel_gpu_acm_g11", GPU_FAMILY_DGPU_CLIENT_GAME}}, + {gpu_arch::intel_gpu_acm_g12, {"intel_gpu_acm_g12", GPU_FAMILY_DGPU_CLIENT_GAME}}, + {gpu_arch::intel_gpu_pvc, {"intel_gpu_pvc", GPU_FAMILY_DGPU_CLOUD}}, + {gpu_arch::intel_gpu_pvc_vg, {"intel_gpu_pvc_vg", GPU_FAMILY_DGPU_CLOUD}}, + {gpu_arch::intel_gpu_mtl_u, {"intel_gpu_mtl_u", GPU_FAMILY_IGPU_XE}}, + {gpu_arch::intel_gpu_mtl_h, {"intel_gpu_mtl_h", GPU_FAMILY_IGPU_XE}}, + {gpu_arch::intel_gpu_arl_h, {"intel_gpu_arl_h", GPU_FAMILY_IGPU_XE}}, + {gpu_arch::intel_gpu_bmg_g21, {"intel_gpu_bmg_g21", GPU_FAMILY_DGPU_CLIENT_GAME}}, + {gpu_arch::intel_gpu_bmg_g31, {"intel_gpu_bmg_g31", GPU_FAMILY_DGPU_CLIENT_GAME}}, + {gpu_arch::intel_gpu_lnl_m, {"intel_gpu_lnl_m", GPU_FAMILY_IGPU_XE}}, + {gpu_arch::intel_gpu_ptl_h, {"intel_gpu_ptl_h", GPU_FAMILY_IGPU_XE}}, + {gpu_arch::intel_gpu_ptl_u, {"intel_gpu_ptl_u", GPU_FAMILY_IGPU_XE}}, + {gpu_arch::intel_gpu_wcl, {"intel_gpu_wcl", GPU_FAMILY_IGPU_XE}} +}; + + +sycl_hw_info get_device_hw_info(sycl::device* device_ptr) { + sycl_hw_info res; + int32_t id = + device_ptr->get_info<sycl::ext::intel::info::device::device_id>(); + res.device_id = id; + + res.name = device_ptr->get_info<sycl::info::device::name>(); - return res; + syclex::architecture arch = + device_ptr->get_info<syclex::info::device::architecture>(); + res.arch = arch; + + map<syclex::architecture, + std::pair<const char*, sycl_intel_gpu_family>>::iterator it = + arch2name.find(res.arch); + if (it != arch2name.end()) { + res.arch_name = it->second.first; + res.gpu_family = it->second.second; + } else { + res.arch_name = "unknown"; + res.gpu_family = GPU_FAMILY_UKNOWN; + } + + return res; } -*/ diff --git a/ggml/src/ggml-sycl/sycl_hw.hpp b/ggml/src/ggml-sycl/sycl_hw.hpp index 36b140bf037..a5d20462572 100644 --- a/ggml/src/ggml-sycl/sycl_hw.hpp +++ b/ggml/src/ggml-sycl/sycl_hw.hpp @@ -9,18 +9,30 @@ #include <sycl/sycl.hpp> namespace syclex = sycl::ext::oneapi::experimental; +using gpu_arch = sycl::ext::oneapi::experimental::architecture; + +// It's used to mark the GPU computing capacity +// The value must flow the order of performance. +enum sycl_intel_gpu_family { + GPU_FAMILY_UKNOWN = -1, + // iGPU without Xe core, before Meteor Lake iGPU(Xe) + GPU_FAMILY_IGPU_NON_XE = 0, + // iGPU with Xe core, Meteor Lake iGPU or newer. + GPU_FAMILY_IGPU_XE = 1, + // dGPU for gaming in client/data center (DG1/FLex 140 or newer). + GPU_FAMILY_DGPU_CLIENT_GAME = 2, + // dGPU for AI in cloud, PVC or newer. + GPU_FAMILY_DGPU_CLOUD = 3 +}; -// TODO: currently not used -/* struct sycl_hw_info { syclex::architecture arch; + const char* arch_name; int32_t device_id; + std::string name; + sycl_intel_gpu_family gpu_family; }; -bool is_in_vector(std::vector<int> &vec, int item); - sycl_hw_info get_device_hw_info(sycl::device *device_ptr); -*/ - #endif // SYCL_HW_HPP diff --git a/ggml/src/ggml-vulkan/ggml-vulkan.cpp b/ggml/src/ggml-vulkan/ggml-vulkan.cpp index d4acee8b1df..69c24bb5877 100644 --- a/ggml/src/ggml-vulkan/ggml-vulkan.cpp +++ b/ggml/src/ggml-vulkan/ggml-vulkan.cpp @@ -20,12 +20,19 @@ DispatchLoaderDynamic & ggml_vk_default_dispatcher(); #define VULKAN_HPP_DEFAULT_DISPATCHER ggml_vk_default_dispatcher() #include <vulkan/vulkan.hpp> -// SPIRV-Headers: LunarG Windows SDK uses Include/spirv-headers/spirv.hpp (not spirv/unified1/). MinGW/MSYS2 and -// Linux packages use Khronos layout spirv/unified1/spirv.hpp. See docs/build.md#vulkan. -#if defined(_WIN32) && !defined(__MINGW32__) -#include <spirv-headers/spirv.hpp> + +// SPIR-V Headers: different SDK installations expose different include paths. +// LunarG Vulkan SDK on Windows typically provides <spirv-headers/spirv.hpp>. +// Linux packages, MSYS2 and MinGW often use the Khronos layout <spirv/unified1/spirv.hpp>. +#if __has_include(<spirv/unified1/spirv.hpp>) +# include <spirv/unified1/spirv.hpp> +#elif __has_include(<spirv-headers/spirv.hpp>) +# include <spirv-headers/spirv.hpp> +#elif __has_include(<spirv.hpp>) +# include <spirv.hpp> #else -#include <spirv/unified1/spirv.hpp> + // Fallback to let the compiler throw a standard "file not found" error +# include <spirv/unified1/spirv.hpp> #endif #include <algorithm> @@ -13007,6 +13014,7 @@ static bool ggml_vk_build_graph(ggml_backend_vk_context * ctx, ggml_cgraph * cgr if (vk_perf_logger_enabled && vk_perf_logger_concurrent) { ctx->query_node_idx[ctx->query_idx] = node_idx; compute_ctx->s->buffer->buf.writeTimestamp(vk::PipelineStageFlagBits::eAllCommands, ctx->query_pool, ctx->query_idx++); + ggml_vk_sync_buffers(ctx, compute_ctx); } } // Add all fused nodes to the unsynchronized lists. @@ -14496,6 +14504,7 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg compute_ctx = ggml_vk_get_compute_ctx(ctx); ctx->query_idx = 0; compute_ctx->s->buffer->buf.writeTimestamp(vk::PipelineStageFlagBits::eAllCommands, ctx->query_pool, ctx->query_idx++); + ggml_vk_sync_buffers(ctx, compute_ctx); } ctx->prealloc_y_last_pipeline_used = nullptr; @@ -14732,6 +14741,7 @@ static ggml_status ggml_backend_vk_graph_compute(ggml_backend_t backend, ggml_cg ctx->query_nodes[ctx->query_idx] = cgraph->nodes[i]; ctx->query_fusion_names[ctx->query_idx] = fusion_string; compute_ctx->s->buffer->buf.writeTimestamp(vk::PipelineStageFlagBits::eAllCommands, ctx->query_pool, ctx->query_idx++); + ggml_vk_sync_buffers(ctx, compute_ctx); } else { // track a fusion string and number of fused ops for the current node_idx ctx->query_fusion_names[i] = fusion_string; diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq_funcs.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq_funcs.glsl index e99108dc50c..bc580aeeb83 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq_funcs.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq_funcs.glsl @@ -296,13 +296,22 @@ vec2 get_dm_scale(uint ib, uint iqs) { const uint ib_k = ib / 8; const uint iqs_k = (ib % 8) * 8 + iqs; const uint is = iqs_k / 8; - u8vec2 scale_dm; - if (is < 4) { - scale_dm = u8vec2(data_a[ib_k].scales[is] & 0x3F, data_a[ib_k].scales[is + 4] & 0x3F); - } else { - scale_dm = u8vec2((data_a[ib_k].scales[is+4] & 0xF) | ((data_a[ib_k].scales[is-4] & 0xC0) >> 2), - (data_a[ib_k].scales[is+4] >> 4) | ((data_a[ib_k].scales[is ] & 0xC0) >> 2)); - } + + const uvec3 scales = uvec3(data_a_packed32[ib_k].scales[0], + data_a_packed32[ib_k].scales[1], + data_a_packed32[ib_k].scales[2]); + const uint scalesoffs = (is & 3) * 8; + + const uint scidx0 = (is < 4) ? 0 : 2; + const uint scidxshift0 = scalesoffs; + const uint scidxshift1 = (is < 4) ? scalesoffs : scalesoffs + 2; + const uint mbidx0 = (is < 4) ? 1 : 2; + const uint mbidxshift0 = (is < 4) ? scalesoffs : scalesoffs + 4; + const uint mbidxshift1 = (is < 4) ? scalesoffs : scalesoffs + 2; + + const uint8_t sc = uint8_t(((scales[scidx0] >> scidxshift0) & 0xF) | ((scales[0] >> scidxshift1) & 0x30)); + const uint8_t mbyte = uint8_t(((scales[mbidx0] >> mbidxshift0) & 0xF) | ((scales[1] >> mbidxshift1) & 0x30)); + u8vec2 scale_dm = u8vec2(sc, mbyte); return FLOAT_TYPEV2(data_a_packed32[ib_k].dm) * FLOAT_TYPEV2(scale_dm); } diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl index 6e4a29d2fdd..73595168984 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl +++ b/ggml/src/ggml-vulkan/vulkan-shaders/mul_mm_funcs.glsl @@ -201,19 +201,20 @@ void load_a_to_shmem(const uint pos_a, const uint row, const uint col, const uin const vec2 loadd = vec2(data_a[ib].dm); - const uint scidx0 = (is < 4) ? is : (is + 4); - const uint scidx1 = (is < 4) ? is : (is - 4); - const uint scidxmask1 = (is < 4) ? 0x30 : 0xC0; - const uint scidxshift1 = (is < 4) ? 0 : 2; - const uint mbidx0 = is + 4; - const uint mbidx1 = (is < 4) ? is + 4 : is; - const uint mbidxmask0 = (is < 4) ? 0xF : 0xF0; - const uint mbidxshift0 = (is < 4) ? 0 : 4; - const uint mbidxmask1 = (is < 4) ? 0x30 : 0xC0; - const uint mbidxshift1 = (is < 4) ? 0 : 2; - - const uint8_t sc = uint8_t((data_a[ib].scales[scidx0] & 0xF) | ((data_a[ib].scales[scidx1] & scidxmask1) >> scidxshift1)); - const uint8_t mbyte = uint8_t((data_a[ib].scales[mbidx0] & mbidxmask0) >> mbidxshift0 | ((data_a[ib].scales[mbidx1] & mbidxmask1) >> mbidxshift1)); + const uvec3 scales = uvec3(data_a_packed32[ib].scales[0], + data_a_packed32[ib].scales[1], + data_a_packed32[ib].scales[2]); + const uint scalesoffs = (is & 3) * 8; + + const uint scidx0 = (is < 4) ? 0 : 2; + const uint scidxshift0 = scalesoffs; + const uint scidxshift1 = (is < 4) ? scalesoffs : scalesoffs + 2; + const uint mbidx0 = (is < 4) ? 1 : 2; + const uint mbidxshift0 = (is < 4) ? scalesoffs : scalesoffs + 4; + const uint mbidxshift1 = (is < 4) ? scalesoffs : scalesoffs + 2; + + const uint8_t sc = uint8_t(((scales[scidx0] >> scidxshift0) & 0xF) | ((scales[0] >> scidxshift1) & 0x30)); + const uint8_t mbyte = uint8_t(((scales[mbidx0] >> mbidxshift0) & 0xF) | ((scales[1] >> mbidxshift1) & 0x30)); const float d = loadd.x * sc; const float m = -loadd.y * mbyte; @@ -237,19 +238,20 @@ void load_a_to_shmem(const uint pos_a, const uint row, const uint col, const uin const vec2 loadd = vec2(data_a[ib].dm); - const uint scidx0 = (is < 4) ? is : (is + 4); - const uint scidx1 = (is < 4) ? is : (is - 4); - const uint scidxmask1 = (is < 4) ? 0x30 : 0xC0; - const uint scidxshift1 = (is < 4) ? 0 : 2; - const uint mbidx0 = is + 4; - const uint mbidx1 = (is < 4) ? is + 4 : is; - const uint mbidxmask0 = (is < 4) ? 0xF : 0xF0; - const uint mbidxshift0 = (is < 4) ? 0 : 4; - const uint mbidxmask1 = (is < 4) ? 0x30 : 0xC0; - const uint mbidxshift1 = (is < 4) ? 0 : 2; - - const uint8_t sc = uint8_t((data_a[ib].scales[scidx0] & 0xF) | ((data_a[ib].scales[scidx1] & scidxmask1) >> scidxshift1)); - const uint8_t mbyte = uint8_t(((data_a[ib].scales[mbidx0] & mbidxmask0) >> mbidxshift0) | ((data_a[ib].scales[mbidx1] & mbidxmask1) >> mbidxshift1)); + const uvec3 scales = uvec3(data_a_packed32[ib].scales[0], + data_a_packed32[ib].scales[1], + data_a_packed32[ib].scales[2]); + const uint scalesoffs = (is & 3) * 8; + + const uint scidx0 = (is < 4) ? 0 : 2; + const uint scidxshift0 = scalesoffs; + const uint scidxshift1 = (is < 4) ? scalesoffs : scalesoffs + 2; + const uint mbidx0 = (is < 4) ? 1 : 2; + const uint mbidxshift0 = (is < 4) ? scalesoffs : scalesoffs + 4; + const uint mbidxshift1 = (is < 4) ? scalesoffs : scalesoffs + 2; + + const uint8_t sc = uint8_t(((scales[scidx0] >> scidxshift0) & 0xF) | ((scales[0] >> scidxshift1) & 0x30)); + const uint8_t mbyte = uint8_t(((scales[mbidx0] >> mbidxshift0) & 0xF) | ((scales[1] >> mbidxshift1) & 0x30)); const float d = loadd.x * sc; const float m = -loadd.y * mbyte; diff --git a/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp b/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp index 449eae808e4..b7771ac230e 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu-shader-lib.hpp @@ -26,20 +26,23 @@ // Matrix multiplication parameters // Register tiling parameters -#define WEBGPU_MUL_MAT_TILE_M 8 -#define WEBGPU_MUL_MAT_TILE_N 8 -#define WEBGPU_MUL_MAT_WG_SIZE_M 8 -#define WEBGPU_MUL_MAT_WG_SIZE_N 8 -#define WEBGPU_MUL_MAT_TILE_K 32 +#define WEBGPU_MUL_MAT_TILE_M 4 +#define WEBGPU_MUL_MAT_TILE_N 4 +#define WEBGPU_MUL_MAT_WG_SIZE_M 8 +#define WEBGPU_MUL_MAT_WG_SIZE_N 8 +#define WEBGPU_MUL_MAT_REG_TILE_K_FLOAT 8 +#define WEBGPU_MUL_MAT_REG_TILE_K_QUANT 32 // Subgroup matrix parameters // The number of subgroups in the M dimension -#define WEBGPU_MUL_MAT_SUBGROUP_M 2 +#define WEBGPU_MUL_MAT_SUBGROUP_M 2 // The number of subgroups in the N dimension -#define WEBGPU_MUL_MAT_SUBGROUP_N 2 +#define WEBGPU_MUL_MAT_SUBGROUP_N 4 // The number of subgroup matrices each subgroup accumulates over -#define WEBGPU_MUL_MAT_SUBGROUP_MATRIX_M 4 -#define WEBGPU_MUL_MAT_SUBGROUP_MATRIX_N 2 +#define WEBGPU_MUL_MAT_SUBGROUP_MATRIX_M 4 +#define WEBGPU_MUL_MAT_SUBGROUP_MATRIX_N 2 +#define WEBGPU_MUL_MAT_SUBGROUP_TILE_K_FLOAT 32 +#define WEBGPU_MUL_MAT_SUBGROUP_TILE_K_QUANT 32 // Matrix-vector multiplication parameters #define WEBGPU_MUL_MAT_VEC_WG_SIZE 256 @@ -56,19 +59,32 @@ template <typename T> inline void ggml_webgpu_hash_combine(size_t & seed, const seed ^= std::hash<T>{}(value) + 0x9e3779b9 + (seed << 6) + (seed >> 2); } +// Calculates base address of a tensor ignoring the fake base pointer +inline uintptr_t ggml_webgpu_tensor_addr(const ggml_tensor * tensor) { + const ggml_tensor * base_tensor = tensor->view_src ? tensor->view_src : tensor; + return (uintptr_t) base_tensor->data + tensor->view_offs; +} + +inline bool ggml_webgpu_tensor_equal(const ggml_tensor * a, const ggml_tensor * b) { + return a->buffer == b->buffer && ggml_webgpu_tensor_addr(a) == ggml_webgpu_tensor_addr(b); +} + +inline bool ggml_webgpu_tensor_overlap(const ggml_tensor * a, const ggml_tensor * b) { + return a->buffer == b->buffer && ggml_webgpu_tensor_addr(a) < ggml_webgpu_tensor_addr(b) + ggml_nbytes(b) && + ggml_webgpu_tensor_addr(b) < ggml_webgpu_tensor_addr(a) + ggml_nbytes(a); +} + struct ggml_webgpu_shader_lib_context { ggml_tensor * src0; ggml_tensor * src1; ggml_tensor * src2; ggml_tensor * src3; ggml_tensor * src4; + ggml_tensor * src5; ggml_tensor * dst; uint32_t max_wg_size; size_t wg_mem_limit_bytes = 0; - bool inplace = false; - bool overlap = false; - bool src_overlap = false; bool supports_subgroups = false; bool supports_subgroup_matrix = false; uint32_t sg_mat_m = 0; @@ -85,6 +101,14 @@ struct webgpu_pipeline { struct ggml_webgpu_generic_shader_decisions { uint32_t wg_size = 0; + bool inplace = false; +}; + +struct ggml_webgpu_binary_shader_decisions { + uint32_t wg_size = 0; + bool inplace = false; + bool overlap = false; + bool src_overlap = false; }; struct ggml_webgpu_processed_shader { @@ -98,6 +122,32 @@ struct ggml_webgpu_ssm_conv_shader_decisions { uint32_t tokens_per_wg; }; +struct ggml_webgpu_ssm_scan_pipeline_key { + int type; + int d_state; + bool xbc_overlap; + + bool operator==(const ggml_webgpu_ssm_scan_pipeline_key & other) const { + return type == other.type && d_state == other.d_state && xbc_overlap == other.xbc_overlap; + } +}; + +struct ggml_webgpu_ssm_scan_pipeline_key_hash { + size_t operator()(const ggml_webgpu_ssm_scan_pipeline_key & key) const { + size_t seed = 0; + ggml_webgpu_hash_combine(seed, key.type); + ggml_webgpu_hash_combine(seed, key.d_state); + ggml_webgpu_hash_combine(seed, key.xbc_overlap); + return seed; + } +}; + +struct ggml_webgpu_ssm_scan_shader_decisions { + uint32_t wg_size; + uint32_t tokens_per_tile; + bool xbc_overlap = false; +}; + /** Argsort **/ struct ggml_webgpu_argsort_shader_lib_context { @@ -216,6 +266,13 @@ struct ggml_webgpu_rms_norm_mul_pipeline_key_hash { } }; +struct ggml_webgpu_rms_norm_mul_shader_decisions { + uint32_t wg_size = 0; + bool inplace = false; + bool overlap = false; + bool src_overlap = false; +}; + /** Pad **/ struct ggml_webgpu_pad_pipeline_key { bool circular; @@ -436,19 +493,28 @@ struct ggml_webgpu_unary_pipeline_key_hash { /** FlashAttention */ +enum ggml_webgpu_flash_attn_path : uint32_t { + GGML_WEBGPU_FLASH_ATTN_PATH_NONE = 0u, + GGML_WEBGPU_FLASH_ATTN_PATH_SUBGROUP_MATRIX = 1u, + GGML_WEBGPU_FLASH_ATTN_PATH_TILE = 2u, + GGML_WEBGPU_FLASH_ATTN_PATH_VEC = 3u, +}; + struct ggml_webgpu_flash_attn_pipeline_key { ggml_type kv_type; uint32_t head_dim_qk; uint32_t head_dim_v; bool kv_direct; + bool kv_overlap; bool has_mask; bool has_sinks; bool uses_logit_softcap; + uint32_t path; bool operator==(const ggml_webgpu_flash_attn_pipeline_key & other) const { return kv_type == other.kv_type && head_dim_qk == other.head_dim_qk && head_dim_v == other.head_dim_v && - kv_direct == other.kv_direct && has_mask == other.has_mask && has_sinks == other.has_sinks && - uses_logit_softcap == other.uses_logit_softcap; + kv_direct == other.kv_direct && kv_overlap == other.kv_overlap && has_mask == other.has_mask && + has_sinks == other.has_sinks && uses_logit_softcap == other.uses_logit_softcap && path == other.path; } }; @@ -459,39 +525,71 @@ struct ggml_webgpu_flash_attn_pipeline_key_hash { ggml_webgpu_hash_combine(seed, key.head_dim_qk); ggml_webgpu_hash_combine(seed, key.head_dim_v); ggml_webgpu_hash_combine(seed, key.kv_direct); + ggml_webgpu_hash_combine(seed, key.kv_overlap); ggml_webgpu_hash_combine(seed, key.has_mask); ggml_webgpu_hash_combine(seed, key.has_sinks); ggml_webgpu_hash_combine(seed, key.uses_logit_softcap); + ggml_webgpu_hash_combine(seed, key.path); return seed; } }; struct ggml_webgpu_flash_attn_decisions { - uint32_t q_tile = 0; - uint32_t kv_tile = 0; - uint32_t wg_size = 0; + uint32_t path = GGML_WEBGPU_FLASH_ATTN_PATH_NONE; + uint32_t q_tile = 0; + uint32_t kv_tile = 0; + uint32_t wg_size = 0; + bool kv_direct = false; + bool kv_overlap = false; }; -struct ggml_webgpu_flash_attn_vec_decisions { - uint32_t kv_tile = 0; - uint32_t wg_size = 0; -}; +inline constexpr uint32_t GGML_WEBGPU_FLASH_ATTN_TILE_KV_VEC_WIDTH = 4u; +inline constexpr uint32_t GGML_WEBGPU_FLASH_ATTN_TILE_Q_TILE = 4u; + +inline uint32_t ggml_webgpu_flash_attn_pick_vec_ne(const ggml_webgpu_flash_attn_pipeline_key & key) { + if (key.path != GGML_WEBGPU_FLASH_ATTN_PATH_VEC || key.kv_type != GGML_TYPE_F16 || + key.head_dim_qk != key.head_dim_v) { + return 1u; + } + + switch (key.head_dim_qk) { + case 64: + case 192: + case 576: + return 2u; + case 96: + return 4u; + default: + return 1u; + } +} inline ggml_webgpu_flash_attn_pipeline_key ggml_webgpu_flash_attn_make_pipeline_key( - const ggml_webgpu_shader_lib_context & context) { + const ggml_webgpu_shader_lib_context & context, + uint32_t path) { const bool has_mask = context.src3 != nullptr; const bool has_sinks = context.src4 != nullptr; - const bool kv_direct = (context.src1->type == GGML_TYPE_F16) && (context.src0->ne[0] % context.sg_mat_k == 0) && - (context.src1->ne[1] % GGML_WEBGPU_KV_SEQ_PAD == 0); + bool kv_direct = false; + if (path != GGML_WEBGPU_FLASH_ATTN_PATH_TILE) { + uint32_t kv_direct_align = GGML_WEBGPU_FLASH_ATTN_TILE_KV_VEC_WIDTH; + if (path == GGML_WEBGPU_FLASH_ATTN_PATH_SUBGROUP_MATRIX) { + kv_direct_align = context.sg_mat_k; + } + kv_direct = (context.src1->type == GGML_TYPE_F16) && + (context.src0->ne[0] % std::max(1u, kv_direct_align) == 0) && + (context.src1->ne[1] % GGML_WEBGPU_KV_SEQ_PAD == 0); + } ggml_webgpu_flash_attn_pipeline_key key = {}; key.kv_type = context.src1->type; key.head_dim_qk = (uint32_t) context.src0->ne[0]; key.head_dim_v = (uint32_t) context.src2->ne[0]; key.kv_direct = kv_direct; + key.kv_overlap = ggml_webgpu_tensor_overlap(context.src1, context.src2); key.has_mask = has_mask; key.has_sinks = has_sinks; key.uses_logit_softcap = ggml_get_op_params_f32(context.dst, 2) != 0.0f; + key.path = path; return key; } @@ -554,8 +652,16 @@ inline size_t ggml_webgpu_flash_attn_wg_mem_bytes(uint32_t q_tile, inline uint32_t ggml_webgpu_flash_attn_max_kv_tile(const ggml_webgpu_shader_lib_context & context, const ggml_webgpu_flash_attn_pipeline_key & key) { - const size_t limit_bytes = context.wg_mem_limit_bytes; - const size_t q_tile = context.sg_mat_m; + const size_t limit_bytes = context.wg_mem_limit_bytes; + uint32_t q_tile = context.sg_mat_m; + uint32_t kv_granularity = context.sg_mat_n; + if (key.path == GGML_WEBGPU_FLASH_ATTN_PATH_TILE) { + q_tile = GGML_WEBGPU_FLASH_ATTN_TILE_Q_TILE; + kv_granularity = std::max(1u, context.max_subgroup_size); + } else if (key.path == GGML_WEBGPU_FLASH_ATTN_PATH_VEC) { + q_tile = 1u; + kv_granularity = 8u; + } const size_t base_q_bytes = (key.head_dim_qk + key.head_dim_v) * q_tile * GGML_WEBGPU_F16_SIZE_BYTES + 2 * q_tile * GGML_WEBGPU_F32_SIZE_BYTES; size_t bytes_per_kv = 0; @@ -568,23 +674,98 @@ inline uint32_t ggml_webgpu_flash_attn_max_kv_tile(const ggml_webgpu_shader_lib_ bytes_per_kv += q_tile; bytes_per_kv *= GGML_WEBGPU_F16_SIZE_BYTES; const uint32_t max_kv_tile = (limit_bytes - base_q_bytes) / bytes_per_kv; - return (max_kv_tile / context.sg_mat_n) * context.sg_mat_n; + return (max_kv_tile / kv_granularity) * kv_granularity; } -inline uint32_t ggml_webgpu_flash_attn_vec_get_kv_tile(const ggml_webgpu_shader_lib_context & context) { - const ggml_webgpu_flash_attn_pipeline_key key = ggml_webgpu_flash_attn_make_pipeline_key(context); - const uint32_t min_kv_tile = ggml_webgpu_flash_attn_max_kv_tile(context, key); - uint32_t kv_tile = std::max(context.sg_mat_n, std::min(32u, min_kv_tile)); - kv_tile = (kv_tile / context.sg_mat_n) * context.sg_mat_n; - - if (key.kv_direct) { - kv_tile = std::min(kv_tile, GGML_WEBGPU_KV_SEQ_PAD); - while (GGML_WEBGPU_KV_SEQ_PAD % kv_tile != 0) { - kv_tile -= context.sg_mat_n; +inline ggml_webgpu_flash_attn_decisions ggml_webgpu_flash_attn_get_decisions( + const ggml_webgpu_shader_lib_context & context, + size_t storage_offset_alignment) { + ggml_webgpu_flash_attn_decisions decisions = {}; + const size_t alignment = std::max<size_t>(1u, storage_offset_alignment); + const auto * K = context.src1; + const auto * V = context.src2; + GGML_ASSERT(K != nullptr); + GGML_ASSERT(V != nullptr); + + const auto flash_attn_tensor_offset = [](const ggml_tensor * tensor) -> size_t { + constexpr uintptr_t ptr_base_addr = 0x1000u; + const ggml_tensor * base = tensor->view_src != nullptr ? tensor->view_src : tensor; + return reinterpret_cast<uintptr_t>(base->data) - ptr_base_addr + tensor->view_offs; + }; + + const uint32_t k_offset_elems = + (uint32_t) ((flash_attn_tensor_offset(K) & (alignment - 1)) / ggml_type_size(K->type)); + const uint32_t v_offset_elems = + (uint32_t) ((flash_attn_tensor_offset(V) & (alignment - 1)) / ggml_type_size(V->type)); + const bool f16_vec4_aligned = (k_offset_elems % GGML_WEBGPU_FLASH_ATTN_TILE_KV_VEC_WIDTH == 0u) && + (v_offset_elems % GGML_WEBGPU_FLASH_ATTN_TILE_KV_VEC_WIDTH == 0u); + const bool kv_vec_type_supported = + K->type == GGML_TYPE_F16 || K->type == GGML_TYPE_Q4_0 || K->type == GGML_TYPE_Q8_0; + const bool use_vec = context.supports_subgroups && (context.src0->ne[1] < 20) && (context.src0->ne[0] % 32 == 0) && + (context.src2->ne[0] % GGML_WEBGPU_FLASH_ATTN_TILE_KV_VEC_WIDTH == 0) && + kv_vec_type_supported && (K->type != GGML_TYPE_F16 || f16_vec4_aligned) && + (context.src2->type == K->type); + const bool use_tile = context.supports_subgroups && !context.supports_subgroup_matrix && K->type == GGML_TYPE_F16 && + V->type == GGML_TYPE_F16 && f16_vec4_aligned && + (context.src0->ne[0] % GGML_WEBGPU_FLASH_ATTN_TILE_KV_VEC_WIDTH == 0) && + (context.src2->ne[0] % GGML_WEBGPU_FLASH_ATTN_TILE_KV_VEC_WIDTH == 0) && !use_vec; + + decisions.path = use_vec ? GGML_WEBGPU_FLASH_ATTN_PATH_VEC : + use_tile ? GGML_WEBGPU_FLASH_ATTN_PATH_TILE : + context.supports_subgroup_matrix ? GGML_WEBGPU_FLASH_ATTN_PATH_SUBGROUP_MATRIX : + GGML_WEBGPU_FLASH_ATTN_PATH_NONE; + + if (decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_NONE) { + return decisions; + } + + const ggml_webgpu_flash_attn_pipeline_key key = ggml_webgpu_flash_attn_make_pipeline_key(context, decisions.path); + decisions.kv_direct = key.kv_direct; + const uint32_t max_kv_tile = ggml_webgpu_flash_attn_max_kv_tile(context, key); + // invalidate if even the smallest kv_tile doesn't fit in shared memory + if (max_kv_tile == 0) { + decisions.path = GGML_WEBGPU_FLASH_ATTN_PATH_NONE; + return decisions; + } + + if (decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_VEC) { + decisions.q_tile = 1u; + decisions.kv_tile = std::max(8u, std::min(32u, max_kv_tile)); + decisions.kv_tile = (decisions.kv_tile / 8u) * 8u; + decisions.wg_size = std::max(1u, std::min<uint32_t>(32u, context.max_subgroup_size)); + if (decisions.kv_direct) { + decisions.kv_tile = std::min(decisions.kv_tile, GGML_WEBGPU_KV_SEQ_PAD); + while (GGML_WEBGPU_KV_SEQ_PAD % decisions.kv_tile != 0) { + decisions.kv_tile -= 8u; + } } + return decisions; + } + + decisions.q_tile = + decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_TILE ? GGML_WEBGPU_FLASH_ATTN_TILE_Q_TILE : context.sg_mat_m; + decisions.kv_tile = decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_TILE ? + std::min(64u, max_kv_tile) : + std::min(max_kv_tile, context.sg_mat_n * GGML_WEBGPU_FLASH_ATTN_PREFERRED_KV_SG_TILES); + decisions.wg_size = decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_TILE ? + GGML_WEBGPU_FLASH_ATTN_PREFERRED_WG_SIZE : + std::max(context.max_subgroup_size, GGML_WEBGPU_FLASH_ATTN_PREFERRED_WG_SIZE); + + if (decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_TILE) { + const uint32_t tile_kv_granularity = std::max(1u, context.max_subgroup_size); + decisions.kv_tile = + std::max(tile_kv_granularity, (decisions.kv_tile / tile_kv_granularity) * tile_kv_granularity); } - return kv_tile; + if (decisions.kv_direct) { + GGML_ASSERT(decisions.kv_tile <= GGML_WEBGPU_KV_SEQ_PAD); + while (GGML_WEBGPU_KV_SEQ_PAD % decisions.kv_tile != 0) { + decisions.kv_tile -= decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_TILE ? + std::max(1u, context.max_subgroup_size) : + context.sg_mat_n; + } + } + return decisions; } /** Matrix Multiplication **/ @@ -807,6 +988,8 @@ class ggml_webgpu_shader_lib { solve_tri_pipelines; // type std::unordered_map<ggml_webgpu_ssm_conv_pipeline_key, webgpu_pipeline, ggml_webgpu_ssm_conv_pipeline_key_hash> ssm_conv_pipelines; // type/vectorized + std::unordered_map<ggml_webgpu_ssm_scan_pipeline_key, webgpu_pipeline, ggml_webgpu_ssm_scan_pipeline_key_hash> + ssm_scan_pipelines; // type/d_state std::unordered_map<ggml_webgpu_gated_delta_net_pipeline_key, webgpu_pipeline, ggml_webgpu_gated_delta_net_pipeline_key_hash> @@ -821,8 +1004,6 @@ class ggml_webgpu_shader_lib { repeat_pipelines; // type std::unordered_map<ggml_webgpu_flash_attn_pipeline_key, webgpu_pipeline, ggml_webgpu_flash_attn_pipeline_key_hash> flash_attn_pipelines; - std::unordered_map<ggml_webgpu_flash_attn_pipeline_key, webgpu_pipeline, ggml_webgpu_flash_attn_pipeline_key_hash> - flash_attn_vec_pipelines; std::unordered_map<ggml_webgpu_flash_attn_vec_reduce_pipeline_key, webgpu_pipeline, ggml_webgpu_flash_attn_vec_reduce_pipeline_key_hash> @@ -881,7 +1062,7 @@ class ggml_webgpu_shader_lib { webgpu_pipeline get_row_norm_pipeline(const ggml_webgpu_shader_lib_context & context) { ggml_webgpu_row_norm_pipeline_key key = {}; key.op = context.dst->op; - key.inplace = context.inplace; + key.inplace = ggml_webgpu_tensor_equal(context.src0, context.dst); auto it = row_norm_pipelines.find(key); if (it != row_norm_pipelines.end()) { @@ -911,8 +1092,12 @@ class ggml_webgpu_shader_lib { const uint32_t row_norm_wg_size = 128u; uint32_t wg_size = std::min(context.max_wg_size, row_norm_wg_size); defines.push_back(std::string("WG_SIZE=") + std::to_string(wg_size)); - auto processed = preprocessor.preprocess(wgsl_row_norm, defines); - row_norm_pipelines[key] = ggml_webgpu_create_pipeline(device, processed, variant); + auto processed = preprocessor.preprocess(wgsl_row_norm, defines); + auto decisions = std::make_shared<ggml_webgpu_generic_shader_decisions>(); + decisions->wg_size = wg_size; + decisions->inplace = key.inplace; + row_norm_pipelines[key] = ggml_webgpu_create_pipeline(device, processed, variant); + row_norm_pipelines[key].context = decisions; return row_norm_pipelines[key]; } @@ -987,7 +1172,7 @@ class ggml_webgpu_shader_lib { webgpu_pipeline get_set_pipeline(const ggml_webgpu_shader_lib_context & context) { ggml_webgpu_set_pipeline_key key = {}; key.type = context.dst->type; - key.inplace = context.inplace; + key.inplace = ggml_webgpu_tensor_equal(context.src0, context.dst); auto it = set_pipelines.find(key); if (it != set_pipelines.end()) { @@ -1020,6 +1205,7 @@ class ggml_webgpu_shader_lib { auto processed = preprocessor.preprocess(wgsl_set, defines); auto decisions = std::make_shared<ggml_webgpu_generic_shader_decisions>(); decisions->wg_size = context.max_wg_size; + decisions->inplace = key.inplace; webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); pipeline.context = decisions; set_pipelines[key] = pipeline; @@ -1147,6 +1333,7 @@ class ggml_webgpu_shader_lib { std::transform(type_upper.begin(), type_upper.end(), type_upper.begin(), ::toupper); switch (key.src_type) { + case GGML_TYPE_Q1_0: case GGML_TYPE_Q4_0: case GGML_TYPE_Q5_0: case GGML_TYPE_Q8_0: @@ -1183,8 +1370,10 @@ class ggml_webgpu_shader_lib { defines.push_back("DST_TYPE=f32"); - if ((key.src_type >= GGML_TYPE_Q4_0 && key.src_type <= GGML_TYPE_Q8_1) || - key.src_type == GGML_TYPE_IQ4_NL) { + if (key.src_type == GGML_TYPE_Q1_0) { + defines.push_back("BLOCK_SIZE=128u"); + } else if ((key.src_type >= GGML_TYPE_Q4_0 && key.src_type <= GGML_TYPE_Q8_1) || + key.src_type == GGML_TYPE_IQ4_NL) { defines.push_back("BLOCK_SIZE=32u"); } else if (key.src_type >= GGML_TYPE_Q2_K) { defines.push_back("BLOCK_SIZE=256u"); @@ -1212,7 +1401,7 @@ class ggml_webgpu_shader_lib { webgpu_pipeline get_scale_pipeline(const ggml_webgpu_shader_lib_context & context) { ggml_webgpu_scale_pipeline_key key = {}; - key.inplace = context.inplace; + key.inplace = ggml_webgpu_tensor_equal(context.src0, context.dst); auto it = scale_pipelines.find(key); if (it != scale_pipelines.end()) { @@ -1232,6 +1421,7 @@ class ggml_webgpu_shader_lib { auto processed = preprocessor.preprocess(wgsl_scale, defines); auto decisions = std::make_shared<ggml_webgpu_generic_shader_decisions>(); decisions->wg_size = context.max_wg_size; + decisions->inplace = key.inplace; webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); pipeline.context = decisions; scale_pipelines[key] = pipeline; @@ -1321,6 +1511,60 @@ class ggml_webgpu_shader_lib { return ssm_conv_pipelines[key]; } + webgpu_pipeline get_ssm_scan_pipeline(const ggml_webgpu_shader_lib_context & context) { + ggml_webgpu_ssm_scan_pipeline_key key = {}; + key.type = context.dst->type; + key.d_state = (int) context.src0->ne[0]; + key.xbc_overlap = ggml_webgpu_tensor_overlap(context.src1, context.src4) && + ggml_webgpu_tensor_overlap(context.src1, context.src5); + + auto it = ssm_scan_pipelines.find(key); + if (it != ssm_scan_pipelines.end()) { + return it->second; + } + + std::vector<std::string> defines; + std::string variant = "ssm_scan"; + + switch (key.type) { + case GGML_TYPE_F32: + variant += "_f32"; + break; + default: + GGML_ABORT("Unsupported type for ssm_scan shader"); + } + + const uint32_t wg_size = (uint32_t) key.d_state; + + constexpr uint32_t tokens_per_tile = 4u; + + defines.push_back("WG_SIZE=" + std::to_string(wg_size) + "u"); + defines.push_back("TOKENS_PER_TILE=" + std::to_string(tokens_per_tile) + "u"); + + if (context.supports_subgroups) { + defines.push_back("USE_SUBGROUP_REDUCTION"); + variant += "_sg_reduce"; + } else { + variant += "_wg_reduce"; + } + + if (key.xbc_overlap) { + defines.push_back("XBC_OVERLAP"); + } + + variant += "_d" + std::to_string(key.d_state); + + auto processed = preprocessor.preprocess(wgsl_ssm_scan, defines); + auto decisions = std::make_shared<ggml_webgpu_ssm_scan_shader_decisions>(); + decisions->wg_size = wg_size; + decisions->tokens_per_tile = tokens_per_tile; + decisions->xbc_overlap = key.xbc_overlap; + webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); + pipeline.context = decisions; + ssm_scan_pipelines[key] = pipeline; + return ssm_scan_pipelines[key]; + } + webgpu_pipeline get_gated_delta_net_pipeline(const ggml_webgpu_shader_lib_context & context) { ggml_webgpu_gated_delta_net_pipeline_key key = {}; key.type = context.dst->type; @@ -1428,6 +1672,24 @@ class ggml_webgpu_shader_lib { defines.push_back("MUL_ACC_" + type_upper); defines.push_back("U32_DEQUANT_HELPERS"); defines.push_back("SRC0_INNER_TYPE=u32"); + switch (context.src0->type) { + case GGML_TYPE_IQ1_S: + case GGML_TYPE_IQ1_M: + case GGML_TYPE_IQ2_S: + case GGML_TYPE_IQ3_S: + case GGML_TYPE_IQ4_NL: + case GGML_TYPE_IQ4_XS: + defines.push_back(type_upper + "_GRID"); + break; + case GGML_TYPE_IQ2_XXS: + case GGML_TYPE_IQ2_XS: + case GGML_TYPE_IQ3_XXS: + defines.push_back(type_upper + "_GRID"); + defines.push_back(type_upper + "_TABLES"); + break; + default: + break; + } break; } } @@ -1452,7 +1714,9 @@ class ggml_webgpu_shader_lib { uint32_t wg_size = WEBGPU_MUL_MAT_VEC_WG_SIZE; uint32_t outputs_per_wg = WEBGPU_MUL_MAT_VEC_FLOAT_OUTPUTS_PER_WG; - if (key.src0_type >= GGML_TYPE_Q2_K) { + if (key.src0_type == GGML_TYPE_Q1_0) { + outputs_per_wg = WEBGPU_MUL_MAT_VEC_LEGACY_Q_OUTPUTS_PER_WG; + } else if (key.src0_type >= GGML_TYPE_Q2_K) { outputs_per_wg = WEBGPU_MUL_MAT_VEC_K_Q_OUTPUTS_PER_WG; } else if (key.src0_type >= GGML_TYPE_Q4_0) { outputs_per_wg = WEBGPU_MUL_MAT_VEC_LEGACY_Q_OUTPUTS_PER_WG; @@ -1550,13 +1814,22 @@ class ggml_webgpu_shader_lib { // VEC/SCALAR controls defines.push_back(key.vectorized ? "VEC" : "SCALAR"); + const bool is_quant = ggml_is_quantized(context.src0->type); + + uint32_t tile_k; + if (key.use_subgroup_matrix) { + tile_k = is_quant ? WEBGPU_MUL_MAT_SUBGROUP_TILE_K_QUANT : WEBGPU_MUL_MAT_SUBGROUP_TILE_K_FLOAT; + } else { + tile_k = is_quant ? WEBGPU_MUL_MAT_REG_TILE_K_QUANT : WEBGPU_MUL_MAT_REG_TILE_K_FLOAT; + } + // Tiles defines.push_back("TILE_M=" + std::to_string(WEBGPU_MUL_MAT_TILE_M) + "u"); defines.push_back("TILE_N=" + std::to_string(WEBGPU_MUL_MAT_TILE_N) + "u"); - defines.push_back("TILE_K=" + std::to_string(WEBGPU_MUL_MAT_TILE_K) + "u"); // Subgroup matrix specifics if (key.use_subgroup_matrix) { + defines.push_back("TILE_K=" + std::to_string(tile_k) + "u"); defines.push_back("MAX_SUBGROUP_SIZE=" + std::to_string(context.max_subgroup_size) + "u"); defines.push_back("SUBGROUP_M=" + std::to_string(WEBGPU_MUL_MAT_SUBGROUP_M) + "u"); defines.push_back("SUBGROUP_N=" + std::to_string(WEBGPU_MUL_MAT_SUBGROUP_N) + "u"); @@ -1576,12 +1849,13 @@ class ggml_webgpu_shader_lib { if (!key.use_subgroup_matrix) { defines.push_back("WORKGROUP_SIZE_M=" + std::to_string(WEBGPU_MUL_MAT_WG_SIZE_M) + "u"); defines.push_back("WORKGROUP_SIZE_N=" + std::to_string(WEBGPU_MUL_MAT_WG_SIZE_N) + "u"); + defines.push_back("TILE_K=" + std::to_string(tile_k) + "u"); } auto processed = preprocessor.preprocess(shader_src, defines); auto decisions = std::make_shared<ggml_webgpu_mul_mat_shader_decisions>(); - decisions->tile_k = WEBGPU_MUL_MAT_TILE_K; + decisions->tile_k = tile_k; decisions->tile_m = WEBGPU_MUL_MAT_TILE_M; decisions->tile_n = WEBGPU_MUL_MAT_TILE_N; decisions->use_subgroup_matrix = key.use_subgroup_matrix; @@ -1778,10 +2052,14 @@ class ggml_webgpu_shader_lib { defines.push_back("SCALAR"); + // mul_mat_id is register-tile only. + const uint32_t tile_k = + ggml_is_quantized(context.src0->type) ? WEBGPU_MUL_MAT_REG_TILE_K_QUANT : WEBGPU_MUL_MAT_REG_TILE_K_FLOAT; + // Tiles defines.push_back("TILE_M=" + std::to_string(WEBGPU_MUL_MAT_TILE_M) + "u"); defines.push_back("TILE_N=" + std::to_string(WEBGPU_MUL_MAT_TILE_N) + "u"); - defines.push_back("TILE_K=" + std::to_string(WEBGPU_MUL_MAT_TILE_K) + "u"); + defines.push_back("TILE_K=" + std::to_string(tile_k) + "u"); defines.push_back("WORKGROUP_SIZE_M=" + std::to_string(WEBGPU_MUL_MAT_WG_SIZE_M) + "u"); defines.push_back("WORKGROUP_SIZE_N=" + std::to_string(WEBGPU_MUL_MAT_WG_SIZE_N) + "u"); @@ -1792,7 +2070,7 @@ class ggml_webgpu_shader_lib { auto processed = preprocessor.preprocess(wgsl_mul_mat_id, defines); auto decisions = std::make_shared<ggml_webgpu_mul_mat_shader_decisions>(); - decisions->tile_k = WEBGPU_MUL_MAT_TILE_K; + decisions->tile_k = tile_k; decisions->tile_m = WEBGPU_MUL_MAT_TILE_M; decisions->tile_n = WEBGPU_MUL_MAT_TILE_N; decisions->wg_size_m = WEBGPU_MUL_MAT_WG_SIZE_M; @@ -1812,8 +2090,8 @@ class ggml_webgpu_shader_lib { key.type = context.dst->type; key.op = op; key.is_unary = is_unary; - key.inplace = context.inplace; - key.ttype = (ggml_tri_type) ggml_get_op_params_i32(context.dst, 0); + key.inplace = ggml_webgpu_tensor_equal(context.src0, context.dst) || context.dst->op == GGML_OP_FILL; + key.ttype = (ggml_tri_type) ggml_get_op_params_i32(context.dst, 0); auto it = unary_pipelines.find(key); if (it != unary_pipelines.end()) { @@ -1871,6 +2149,7 @@ class ggml_webgpu_shader_lib { auto processed = preprocessor.preprocess(wgsl_unary, defines); auto decisions = std::make_shared<ggml_webgpu_generic_shader_decisions>(); decisions->wg_size = context.max_wg_size; + decisions->inplace = key.inplace; webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); pipeline.context = decisions; unary_pipelines[key] = pipeline; @@ -1879,9 +2158,9 @@ class ggml_webgpu_shader_lib { webgpu_pipeline get_rms_norm_mul_pipeline(const ggml_webgpu_shader_lib_context & context) { ggml_webgpu_rms_norm_mul_pipeline_key key = {}; - key.inplace = context.inplace; - key.overlap = context.overlap; - key.src_overlap = context.src_overlap; + key.inplace = ggml_webgpu_tensor_equal(context.src0, context.dst); + key.overlap = ggml_webgpu_tensor_equal(context.src1, context.dst); + key.src_overlap = ggml_webgpu_tensor_overlap(context.src0, context.src1); auto it = rms_norm_mul_pipelines.find(key); if (it != rms_norm_mul_pipelines.end()) { @@ -1905,12 +2184,15 @@ class ggml_webgpu_shader_lib { defines.push_back(std::string("WG_SIZE=") + std::to_string(context.max_wg_size)); - auto processed = preprocessor.preprocess(wgsl_rms_norm_mul, defines); - auto decisions = std::make_shared<ggml_webgpu_generic_shader_decisions>(); - decisions->wg_size = context.max_wg_size; - webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); - pipeline.context = decisions; - rms_norm_mul_pipelines[key] = pipeline; + auto processed = preprocessor.preprocess(wgsl_rms_norm_mul, defines); + auto pipeline_decisions = std::make_shared<ggml_webgpu_rms_norm_mul_shader_decisions>(); + pipeline_decisions->wg_size = context.max_wg_size; + pipeline_decisions->inplace = key.inplace; + pipeline_decisions->overlap = key.overlap; + pipeline_decisions->src_overlap = key.src_overlap; + webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); + pipeline.context = pipeline_decisions; + rms_norm_mul_pipelines[key] = pipeline; return rms_norm_mul_pipelines[key]; } @@ -1918,9 +2200,9 @@ class ggml_webgpu_shader_lib { ggml_webgpu_binary_pipeline_key key = {}; key.type = context.dst->type; key.op = context.dst->op; - key.inplace = context.inplace; - key.overlap = context.overlap; - key.src_overlap = context.src_overlap; + key.inplace = ggml_webgpu_tensor_equal(context.src0, context.dst); + key.overlap = ggml_webgpu_tensor_equal(context.src1, context.dst); + key.src_overlap = ggml_webgpu_tensor_overlap(context.src0, context.src1); auto it = binary_pipelines.find(key); if (it != binary_pipelines.end()) { @@ -1959,11 +2241,15 @@ class ggml_webgpu_shader_lib { defines.push_back(std::string("WG_SIZE=") + std::to_string(context.max_wg_size)); - auto processed = preprocessor.preprocess(wgsl_binary, defines); - auto decisions = std::make_shared<ggml_webgpu_generic_shader_decisions>(); - decisions->wg_size = context.max_wg_size; + auto processed = preprocessor.preprocess(wgsl_binary, defines); + auto pipeline_decisions = std::make_shared<ggml_webgpu_binary_shader_decisions>(); + pipeline_decisions->wg_size = context.max_wg_size; + pipeline_decisions->inplace = key.inplace; + pipeline_decisions->overlap = key.overlap; + pipeline_decisions->src_overlap = key.src_overlap; + webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); - pipeline.context = decisions; + pipeline.context = pipeline_decisions; binary_pipelines[key] = pipeline; return binary_pipelines[key]; } @@ -2044,14 +2330,20 @@ class ggml_webgpu_shader_lib { return repeat_pipelines[key]; } - webgpu_pipeline get_flash_attn_pipeline(const ggml_webgpu_shader_lib_context & context) { - const ggml_webgpu_flash_attn_pipeline_key key = ggml_webgpu_flash_attn_make_pipeline_key(context); - auto it = flash_attn_pipelines.find(key); + webgpu_pipeline get_flash_attn_pipeline(const ggml_webgpu_shader_lib_context & context, + size_t storage_offset_alignment) { + const ggml_webgpu_flash_attn_decisions decisions = + ggml_webgpu_flash_attn_get_decisions(context, storage_offset_alignment); + GGML_ASSERT(decisions.path != GGML_WEBGPU_FLASH_ATTN_PATH_NONE); + ggml_webgpu_flash_attn_pipeline_key key = ggml_webgpu_flash_attn_make_pipeline_key(context, decisions.path); + auto it = flash_attn_pipelines.find(key); if (it != flash_attn_pipelines.end()) { return it->second; } std::vector<std::string> defines; - std::string variant = "flash_attn"; + std::string variant = decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_VEC ? "flash_attn_vec" : + decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_TILE ? "flash_attn_tile" : + "flash_attn"; switch (key.kv_type) { case GGML_TYPE_F32: @@ -2073,7 +2365,12 @@ class ggml_webgpu_shader_lib { if (key.has_mask) { defines.push_back("MASK"); - variant += "_mask"; + if (key.path == GGML_WEBGPU_FLASH_ATTN_PATH_VEC) { + defines.push_back("BLK"); + variant += "_mask_blk"; + } else { + variant += "_mask"; + } } if (key.has_sinks) { defines.push_back("SINKS"); @@ -2087,6 +2384,10 @@ class ggml_webgpu_shader_lib { defines.push_back("KV_DIRECT"); variant += "_kvdirect"; } + if (key.kv_overlap) { + defines.push_back("KV_OVERLAP"); + variant += "_kv_overlap"; + } defines.push_back(std::string("HEAD_DIM_QK=") + std::to_string(key.head_dim_qk)); variant += std::string("_hsqk") + std::to_string(key.head_dim_qk); @@ -2094,129 +2395,38 @@ class ggml_webgpu_shader_lib { defines.push_back(std::string("HEAD_DIM_V=") + std::to_string(key.head_dim_v)); variant += std::string("_hsv") + std::to_string(key.head_dim_v); - defines.push_back(std::string("SG_MAT_M=") + std::to_string(context.sg_mat_m)); - defines.push_back(std::string("SG_MAT_N=") + std::to_string(context.sg_mat_n)); - defines.push_back(std::string("SG_MAT_K=") + std::to_string(context.sg_mat_k)); - - auto decisions = std::make_shared<ggml_webgpu_flash_attn_decisions>(); - decisions->q_tile = context.sg_mat_m; - - const uint32_t min_kv_tile = ggml_webgpu_flash_attn_max_kv_tile(context, key); - uint32_t kv_tile = std::min(min_kv_tile, context.sg_mat_n * GGML_WEBGPU_FLASH_ATTN_PREFERRED_KV_SG_TILES); - - if (key.kv_direct) { - kv_tile = std::min(kv_tile, GGML_WEBGPU_KV_SEQ_PAD); - while (GGML_WEBGPU_KV_SEQ_PAD % kv_tile != 0) { - kv_tile -= context.sg_mat_n; - } + const char * shader_src = wgsl_flash_attn; + if (key.path == GGML_WEBGPU_FLASH_ATTN_PATH_VEC) { + defines.push_back("KV_GRANULARITY=8"); + defines.push_back(std::string("VEC_NE=") + std::to_string(ggml_webgpu_flash_attn_pick_vec_ne(key)) + "u"); + shader_src = wgsl_flash_attn_vec_split; + } else if (key.path == GGML_WEBGPU_FLASH_ATTN_PATH_TILE) { + shader_src = wgsl_flash_attn_tile; + defines.push_back("MAX_SUBGROUP_SIZE=" + std::to_string(context.max_subgroup_size)); + defines.push_back("KV_STAGE_STRIDE=" + std::to_string(std::max(key.head_dim_qk, key.head_dim_v))); + variant += "_tile"; + } else { + defines.push_back(std::string("SG_MAT_M=") + std::to_string(context.sg_mat_m)); + defines.push_back(std::string("SG_MAT_N=") + std::to_string(context.sg_mat_n)); + defines.push_back(std::string("SG_MAT_K=") + std::to_string(context.sg_mat_k)); } - decisions->kv_tile = kv_tile; - decisions->wg_size = std::max(context.max_subgroup_size, GGML_WEBGPU_FLASH_ATTN_PREFERRED_WG_SIZE); - - defines.push_back(std::string("Q_TILE=") + std::to_string(decisions->q_tile)); - defines.push_back(std::string("KV_TILE=") + std::to_string(decisions->kv_tile)); - defines.push_back(std::string("WG_SIZE=") + std::to_string(decisions->wg_size)); + auto pipeline_decisions = std::make_shared<ggml_webgpu_flash_attn_decisions>(decisions); + pipeline_decisions->kv_overlap = key.kv_overlap; + defines.push_back(std::string("Q_TILE=") + std::to_string(decisions.q_tile)); + defines.push_back(std::string("KV_TILE=") + std::to_string(decisions.kv_tile)); + defines.push_back(std::string("WG_SIZE=") + std::to_string(decisions.wg_size)); webgpu_pipeline pipeline = - ggml_webgpu_create_pipeline(device, preprocessor.preprocess(wgsl_flash_attn, defines), variant); - pipeline.context = decisions; + ggml_webgpu_create_pipeline(device, preprocessor.preprocess(shader_src, defines), variant); + pipeline.context = pipeline_decisions; flash_attn_pipelines[key] = pipeline; return flash_attn_pipelines[key]; } - webgpu_pipeline get_flash_attn_vec_pipeline(const ggml_webgpu_shader_lib_context & context) { - const ggml_webgpu_flash_attn_pipeline_key key = ggml_webgpu_flash_attn_make_pipeline_key(context); - auto it = flash_attn_vec_pipelines.find(key); - if (it != flash_attn_vec_pipelines.end()) { - return it->second; - } - - std::vector<std::string> defines; - std::string variant = "flash_attn_vec"; - - switch (key.kv_type) { - case GGML_TYPE_F32: - defines.push_back("KV_F32"); - break; - case GGML_TYPE_F16: - defines.push_back("KV_F16"); - break; - case GGML_TYPE_Q4_0: - defines.push_back("KV_Q4_0"); - break; - case GGML_TYPE_Q8_0: - defines.push_back("KV_Q8_0"); - break; - default: - GGML_ABORT("Unsupported KV type for flash attention shader"); - } - variant += std::string("_") + ggml_type_name(key.kv_type); - - if (key.has_mask) { - defines.push_back("MASK"); - defines.push_back("BLK"); - variant += "_mask_blk"; - } - if (key.has_sinks) { - defines.push_back("SINKS"); - variant += "_sinks"; - } - if (key.uses_logit_softcap) { - defines.push_back("LOGIT_SOFTCAP"); - variant += "_lgsc"; - } - if (key.kv_direct) { - defines.push_back("KV_DIRECT"); - variant += "_kvdirect"; - } - - defines.push_back(std::string("HEAD_DIM_QK=") + std::to_string(key.head_dim_qk)); - variant += std::string("_hsqk") + std::to_string(key.head_dim_qk); - - defines.push_back(std::string("HEAD_DIM_V=") + std::to_string(key.head_dim_v)); - variant += std::string("_hsv") + std::to_string(key.head_dim_v); - - defines.push_back(std::string("SG_MAT_M=") + std::to_string(context.sg_mat_m)); - defines.push_back(std::string("SG_MAT_N=") + std::to_string(context.sg_mat_n)); - defines.push_back(std::string("SG_MAT_K=") + std::to_string(context.sg_mat_k)); - defines.push_back("Q_TILE=1"); - - auto decisions = std::make_shared<ggml_webgpu_flash_attn_vec_decisions>(); - decisions->kv_tile = ggml_webgpu_flash_attn_vec_get_kv_tile(context); - decisions->wg_size = std::max(1u, std::min<uint32_t>(32u, context.max_subgroup_size)); - uint32_t vec_ne = 1u; - - // Keep conservative defaults unless this is the f16 vec-split shape family. - if (key.kv_type == GGML_TYPE_F16 && key.head_dim_qk == key.head_dim_v) { - switch (key.head_dim_qk) { - case 64: - case 192: - case 576: - vec_ne = 2u; - break; - case 96: - vec_ne = 4u; - break; - default: - break; - } - } - - defines.push_back(std::string("KV_TILE=") + std::to_string(decisions->kv_tile)); - defines.push_back(std::string("WG_SIZE=") + std::to_string(decisions->wg_size)); - defines.push_back(std::string("VEC_NE=") + std::to_string(vec_ne) + "u"); - - webgpu_pipeline pipeline = - ggml_webgpu_create_pipeline(device, preprocessor.preprocess(wgsl_flash_attn_vec_split, defines), variant); - pipeline.context = decisions; - flash_attn_vec_pipelines[key] = pipeline; - return flash_attn_vec_pipelines[key]; - } - - webgpu_pipeline get_flash_attn_blk_pipeline(const ggml_webgpu_shader_lib_context & context) { + webgpu_pipeline get_flash_attn_blk_pipeline(const ggml_webgpu_shader_lib_context & context, uint32_t kv_tile) { ggml_webgpu_flash_attn_blk_pipeline_key key = {}; - key.kv_tile = ggml_webgpu_flash_attn_vec_get_kv_tile(context); + key.kv_tile = kv_tile; auto it = flash_attn_blk_pipelines.find(key); if (it != flash_attn_blk_pipelines.end()) { return it->second; @@ -2394,7 +2604,7 @@ class ggml_webgpu_shader_lib { webgpu_pipeline get_rope_pipeline(const ggml_webgpu_shader_lib_context & context) { ggml_webgpu_rope_pipeline_key key = {}; key.type = context.dst->type; - key.inplace = context.inplace; + key.inplace = ggml_webgpu_tensor_equal(context.src0, context.dst); key.has_ff = (context.src2 != nullptr); auto it = rope_pipelines.find(key); @@ -2433,6 +2643,7 @@ class ggml_webgpu_shader_lib { auto processed = preprocessor.preprocess(wgsl_rope, defines); auto decisions = std::make_shared<ggml_webgpu_generic_shader_decisions>(); decisions->wg_size = context.max_wg_size; + decisions->inplace = key.inplace; webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); pipeline.context = decisions; rope_pipelines[key] = pipeline; @@ -2444,7 +2655,7 @@ class ggml_webgpu_shader_lib { key.mask_type = context.src1 ? context.src1->type : GGML_TYPE_F32; key.has_mask = (context.src1 != nullptr); key.has_sink = (context.src2 != nullptr); - key.inplace = context.inplace; + key.inplace = ggml_webgpu_tensor_equal(context.src0, context.dst); auto it = soft_max_pipelines.find(key); if (it != soft_max_pipelines.end()) { @@ -2485,6 +2696,7 @@ class ggml_webgpu_shader_lib { auto processed = preprocessor.preprocess(wgsl_soft_max, defines); auto decisions = std::make_shared<ggml_webgpu_generic_shader_decisions>(); decisions->wg_size = context.max_wg_size; + decisions->inplace = key.inplace; webgpu_pipeline pipeline = ggml_webgpu_create_pipeline(device, processed, variant); pipeline.context = decisions; soft_max_pipelines[key] = pipeline; diff --git a/ggml/src/ggml-webgpu/ggml-webgpu.cpp b/ggml/src/ggml-webgpu/ggml-webgpu.cpp index acc486cfdda..f7fd73ae144 100644 --- a/ggml/src/ggml-webgpu/ggml-webgpu.cpp +++ b/ggml/src/ggml-webgpu/ggml-webgpu.cpp @@ -108,12 +108,9 @@ static inline uint32_t ggml_webgpu_u32_from_f32(float value) { // their locations. static void * const webgpu_ptr_base = (void *) (uintptr_t) 0x1000; // NOLINT -// Always returns the base offset of a tensor, regardless of views. -static uint64_t webgpu_tensor_offset(const ggml_tensor * tensor) { - if (tensor->view_src) { - return (uint8_t *) tensor->view_src->data - (uint8_t *) webgpu_ptr_base; - } - return (uint8_t *) tensor->data - (uint8_t *) webgpu_ptr_base; +static size_t ggml_webgpu_tensor_offset(const ggml_tensor * tensor) { + const ggml_tensor * base_tensor = tensor->view_src ? tensor->view_src : tensor; + return (size_t) ((uintptr_t) base_tensor->data - (uintptr_t) webgpu_ptr_base) + tensor->view_offs; } /* Struct definitions */ @@ -375,10 +372,6 @@ static void ggml_webgpu_create_buffer(wgpu::Device & device, buffer = device.CreateBuffer(&buffer_desc); } -static size_t ggml_webgpu_tensor_offset(const ggml_tensor * tensor) { - return webgpu_tensor_offset(tensor) + tensor->view_offs; -} - static wgpu::Buffer ggml_webgpu_tensor_buf(const ggml_tensor * tensor) { ggml_backend_webgpu_buffer_context * ctx = (ggml_backend_webgpu_buffer_context *) tensor->buffer->context; return ctx->buffer; @@ -389,23 +382,6 @@ static size_t ggml_webgpu_tensor_misalignment(webgpu_context & ctx, const ggml_t return offset & (ctx->global_ctx->capabilities.limits.minStorageBufferOffsetAlignment - 1); } -static bool ggml_webgpu_flash_attn_use_vec(webgpu_global_context & global_ctx, - const ggml_tensor * Q, - const ggml_tensor * K, - const ggml_tensor * V) { - const size_t alignment = global_ctx->capabilities.limits.minStorageBufferOffsetAlignment; - const uint32_t k_offset_elems = - (uint32_t) ((ggml_webgpu_tensor_offset(K) & (alignment - 1)) / ggml_type_size(K->type)); - const uint32_t v_offset_elems = - (uint32_t) ((ggml_webgpu_tensor_offset(V) & (alignment - 1)) / ggml_type_size(V->type)); - const bool f16_vec4_aligned = (k_offset_elems % 4u == 0u) && (v_offset_elems % 4u == 0u); - const bool kv_vec_type_supported = - K->type == GGML_TYPE_F16 || K->type == GGML_TYPE_Q4_0 || K->type == GGML_TYPE_Q8_0; - - return (Q->ne[1] < 20) && (Q->ne[0] % 32 == 0) && (V->ne[0] % 4 == 0) && kv_vec_type_supported && - (K->type != GGML_TYPE_F16 || f16_vec4_aligned) && (V->type == K->type); -} - static size_t ggml_webgpu_tensor_align_offset(webgpu_context & ctx, const ggml_tensor * t) { size_t offset = ggml_webgpu_tensor_offset(t); return offset & ~(ctx->global_ctx->capabilities.limits.minStorageBufferOffsetAlignment - 1); @@ -415,34 +391,31 @@ static size_t ggml_webgpu_tensor_binding_size(webgpu_context & ctx, ggml_tensor return ROUNDUP_POW2(ggml_nbytes(t) + ggml_webgpu_tensor_misalignment(ctx, t), WEBGPU_STORAGE_BUF_BINDING_MULT); } -// Used to determine if two tensors are the same for in-place operations -static bool ggml_webgpu_tensor_equal(ggml_tensor * a, ggml_tensor * b) { - return (ggml_webgpu_tensor_buf(a).Get() == ggml_webgpu_tensor_buf(b).Get()) && - (ggml_webgpu_tensor_offset(a) == ggml_webgpu_tensor_offset(b)); -} +struct ggml_webgpu_merged_binding_range { + size_t offset; + size_t size; +}; -// Used to determine if two tensors share the same buffer and their byte ranges overlap, -static bool ggml_webgpu_tensor_overlap(ggml_tensor * a, ggml_tensor * b) { - return (ggml_webgpu_tensor_buf(a).Get() == ggml_webgpu_tensor_buf(b).Get()) && - ggml_webgpu_tensor_offset(a) < (ggml_webgpu_tensor_offset(b) + ggml_nbytes(b)) && - ggml_webgpu_tensor_offset(b) < (ggml_webgpu_tensor_offset(a) + ggml_nbytes(a)); -} +static ggml_webgpu_merged_binding_range ggml_webgpu_tensor_merged_binding_range( + webgpu_context & ctx, + std::initializer_list<ggml_tensor *> tensors) { + size_t merged_offset = SIZE_MAX; + size_t merged_end = 0; -struct binary_overlap_flags { - bool inplace; // src0 == dst - bool overlap; // src1 == dst - bool src_overlap; -}; + for (ggml_tensor * tensor : tensors) { + const size_t bind_offset = ggml_webgpu_tensor_align_offset(ctx, tensor); + const size_t bind_end = bind_offset + ggml_webgpu_tensor_binding_size(ctx, tensor); -static binary_overlap_flags ggml_webgpu_detect_binary_overlap(ggml_tensor * src0, - ggml_tensor * src1, - ggml_tensor * dst) { - binary_overlap_flags flags = {}; - flags.inplace = ggml_webgpu_tensor_equal(src0, dst); - flags.overlap = ggml_webgpu_tensor_overlap(src1, dst); - flags.src_overlap = ggml_webgpu_tensor_overlap(src0, src1); + merged_offset = std::min(merged_offset, bind_offset); + merged_end = std::max(merged_end, bind_end); + } - return flags; + return { merged_offset, merged_end - merged_offset }; +} + +static uint32_t ggml_webgpu_tensor_merged_element_offset(const ggml_tensor * tensor, + const ggml_webgpu_merged_binding_range & merged_range) { + return (uint32_t) ((ggml_webgpu_tensor_offset(tensor) - merged_range.offset) / ggml_type_size(tensor->type)); } static wgpu::BindGroupEntry ggml_webgpu_make_bind_group_entry(uint32_t binding, @@ -770,18 +743,16 @@ static webgpu_encoded_op ggml_webgpu_set(webgpu_context & ctx, ggml_tensor * src0, ggml_tensor * src1, ggml_tensor * dst) { - const bool inplace = ggml_webgpu_tensor_equal(src0, dst); - ggml_webgpu_shader_lib_context shader_lib_ctx = {}; shader_lib_ctx.src0 = src0; shader_lib_ctx.src1 = src1; shader_lib_ctx.dst = dst; shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; - shader_lib_ctx.inplace = inplace; webgpu_pipeline pipeline = ctx->shader_lib->get_set_pipeline(shader_lib_ctx); - auto * decisions = static_cast<ggml_webgpu_generic_shader_decisions *>(pipeline.context.get()); + auto * decisions = static_cast<ggml_webgpu_generic_shader_decisions *>(pipeline.context.get()); + const bool inplace = decisions->inplace; const uint32_t ne = inplace ? (uint32_t) ggml_nelements(src1) : (uint32_t) ggml_nelements(dst); const uint32_t dst_type_size = (uint32_t) ggml_type_size(dst->type); @@ -1132,6 +1103,113 @@ static webgpu_encoded_op ggml_webgpu_ssm_conv(webgpu_context & ctx, return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x, wg_y); } +static webgpu_encoded_op ggml_webgpu_ssm_scan(webgpu_context & ctx, + ggml_tensor * src0, + ggml_tensor * src1, + ggml_tensor * src2, + ggml_tensor * src3, + ggml_tensor * src4, + ggml_tensor * src5, + ggml_tensor * src6, + ggml_tensor * dst) { + ggml_webgpu_shader_lib_context shader_lib_ctx = {}; + shader_lib_ctx.src0 = src0; + shader_lib_ctx.src1 = src1; + shader_lib_ctx.src4 = src4; + shader_lib_ctx.src5 = src5; + shader_lib_ctx.dst = dst; + shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; + shader_lib_ctx.supports_subgroups = ctx->global_ctx->capabilities.supports_subgroups; + + webgpu_pipeline pipeline = ctx->shader_lib->get_ssm_scan_pipeline(shader_lib_ctx); + auto * decisions = static_cast<ggml_webgpu_ssm_scan_shader_decisions *>(pipeline.context.get()); + const bool xbc_overlap = decisions->xbc_overlap; + + uint32_t offset_x = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src1) / ggml_type_size(src1->type)); + uint32_t offset_B = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src4) / ggml_type_size(src4->type)); + uint32_t offset_C = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src5) / ggml_type_size(src5->type)); + size_t xbc_bind_offset = 0; + size_t xbc_bind_size = 0; + if (xbc_overlap) { + const ggml_webgpu_merged_binding_range merged_range = + ggml_webgpu_tensor_merged_binding_range(ctx, { src1, src4, src5 }); + xbc_bind_offset = merged_range.offset; + xbc_bind_size = merged_range.size; + offset_x = ggml_webgpu_tensor_merged_element_offset(src1, merged_range); + offset_B = ggml_webgpu_tensor_merged_element_offset(src4, merged_range); + offset_C = ggml_webgpu_tensor_merged_element_offset(src5, merged_range); + } + + std::vector<uint32_t> params = { + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src0) / ggml_type_size(src0->type)), + offset_x, + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src2) / ggml_type_size(src2->type)), + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src3) / ggml_type_size(src3->type)), + offset_B, + offset_C, + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src6) / ggml_type_size(src6->type)), + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), + + (uint32_t) (src0->nb[1] / ggml_type_size(src0->type)), + (uint32_t) (src0->nb[2] / ggml_type_size(src0->type)), + (uint32_t) (src0->nb[3] / ggml_type_size(src0->type)), + + (uint32_t) (src1->nb[1] / ggml_type_size(src1->type)), + (uint32_t) (src1->nb[2] / ggml_type_size(src1->type)), + (uint32_t) (src1->nb[3] / ggml_type_size(src1->type)), + + (uint32_t) (src2->nb[1] / ggml_type_size(src2->type)), + (uint32_t) (src2->nb[2] / ggml_type_size(src2->type)), + + (uint32_t) src3->ne[0], + (uint32_t) (src3->nb[1] / ggml_type_size(src3->type)), + + (uint32_t) (src4->nb[1] / ggml_type_size(src4->type)), + (uint32_t) (src4->nb[2] / ggml_type_size(src4->type)), + (uint32_t) (src4->nb[3] / ggml_type_size(src4->type)), + + (uint32_t) (src5->nb[1] / ggml_type_size(src5->type)), + (uint32_t) (src5->nb[2] / ggml_type_size(src5->type)), + (uint32_t) (src5->nb[3] / ggml_type_size(src5->type)), + + (uint32_t) src0->ne[0], + (uint32_t) src0->ne[1], + (uint32_t) src0->ne[2], + (uint32_t) src4->ne[1], + (uint32_t) src1->ne[2], + (uint32_t) src1->ne[3], + (uint32_t) ggml_nelements(src1), + }; + + std::vector<wgpu::BindGroupEntry> entries = { + ggml_webgpu_make_tensor_bind_group_entry(ctx, 0, src0), + }; + if (xbc_overlap) { + entries.push_back( + ggml_webgpu_make_bind_group_entry(1, ggml_webgpu_tensor_buf(src1), xbc_bind_offset, xbc_bind_size)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 2, src2)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 3, src3)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 4, src6)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 5, dst)); + } else { + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, src1)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 2, src2)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 3, src3)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 4, src4)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 5, src5)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 6, src6)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 7, dst)); + } + + const uint32_t total_wg = (uint32_t) (src0->ne[1] * src0->ne[2] * src1->ne[3]); + const uint32_t max_wg_per_dim = ctx->global_ctx->capabilities.limits.maxComputeWorkgroupsPerDimension; + uint32_t wg_x; + uint32_t wg_y; + compute_2d_workgroups(total_wg, max_wg_per_dim, wg_x, wg_y); + + return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x, wg_y); +} + static webgpu_encoded_op ggml_webgpu_gated_delta_net(webgpu_context & ctx, ggml_tensor * src0, ggml_tensor * src1, @@ -1332,8 +1410,20 @@ static webgpu_encoded_op ggml_webgpu_mul_mat(webgpu_context & ctx, case GGML_TYPE_Q5_K: case GGML_TYPE_Q3_K: case GGML_TYPE_Q2_K: + case GGML_TYPE_Q1_0: use_fast = true; break; + case GGML_TYPE_IQ1_S: + case GGML_TYPE_IQ1_M: + case GGML_TYPE_IQ2_XXS: + case GGML_TYPE_IQ2_XS: + case GGML_TYPE_IQ2_S: + case GGML_TYPE_IQ3_XXS: + case GGML_TYPE_IQ3_S: + case GGML_TYPE_IQ4_NL: + case GGML_TYPE_IQ4_XS: + use_fast = is_vec; + break; default: break; } @@ -1567,7 +1657,6 @@ static webgpu_encoded_op ggml_webgpu_mul_mat_id(webgpu_context & ctx, return ggml_backend_webgpu_build_multi(ctx, dispatches); } -#ifndef __EMSCRIPTEN__ static webgpu_encoded_op ggml_webgpu_flash_attn(webgpu_context & ctx, ggml_tensor * Q, ggml_tensor * K, @@ -1585,13 +1674,44 @@ static webgpu_encoded_op ggml_webgpu_flash_attn(webgpu_context & ctx, float m0 = powf(2.0f, -(max_bias) / n_head_log2); float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2); - const int has_mask = (mask != nullptr); - const int has_sinks = (sinks != nullptr); + ggml_webgpu_shader_lib_context shader_lib_ctx = {}; + shader_lib_ctx.src0 = Q; + shader_lib_ctx.src1 = K; + shader_lib_ctx.src2 = V; + shader_lib_ctx.src3 = mask; + shader_lib_ctx.src4 = sinks; + shader_lib_ctx.dst = dst; + shader_lib_ctx.supports_subgroups = ctx->global_ctx->capabilities.supports_subgroups; + shader_lib_ctx.supports_subgroup_matrix = ctx->global_ctx->capabilities.supports_subgroup_matrix; + shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; + shader_lib_ctx.wg_mem_limit_bytes = ctx->global_ctx->capabilities.limits.maxComputeWorkgroupStorageSize; + shader_lib_ctx.sg_mat_m = ctx->global_ctx->capabilities.sg_mat_m; + shader_lib_ctx.sg_mat_n = ctx->global_ctx->capabilities.sg_mat_n; + shader_lib_ctx.sg_mat_k = ctx->global_ctx->capabilities.sg_mat_k; + shader_lib_ctx.max_subgroup_size = ctx->global_ctx->capabilities.max_subgroup_size; + webgpu_pipeline pipeline = ctx->shader_lib->get_flash_attn_pipeline( + shader_lib_ctx, ctx->global_ctx->capabilities.limits.minStorageBufferOffsetAlignment); + auto * decisions = static_cast<ggml_webgpu_flash_attn_decisions *>(pipeline.context.get()); + const int has_mask = (mask != nullptr); + const int has_sinks = (sinks != nullptr); + const bool kv_overlap = decisions->kv_overlap; + + uint32_t offset_k = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, K) / ggml_type_size(K->type)); + uint32_t offset_v = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, V) / ggml_type_size(V->type)); + size_t kv_bind_offset = 0; + size_t kv_bind_size = 0; + if (kv_overlap) { + const ggml_webgpu_merged_binding_range merged_range = ggml_webgpu_tensor_merged_binding_range(ctx, { K, V }); + kv_bind_offset = merged_range.offset; + kv_bind_size = merged_range.size; + offset_k = ggml_webgpu_tensor_merged_element_offset(K, merged_range); + offset_v = ggml_webgpu_tensor_merged_element_offset(V, merged_range); + } std::vector<uint32_t> params = { (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, Q) / ggml_type_size(Q->type)), - (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, K) / ggml_type_size(K->type)), - (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, V) / ggml_type_size(V->type)), + offset_k, + offset_v, has_mask ? (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, mask) / ggml_type_size(mask->type)) : 0, has_sinks ? (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, sinks) / ggml_type_size(sinks->type)) : 0, (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), @@ -1619,10 +1739,15 @@ static webgpu_encoded_op ggml_webgpu_flash_attn(webgpu_context & ctx, }; std::vector<wgpu::BindGroupEntry> entries = { ggml_webgpu_make_tensor_bind_group_entry(ctx, 0, Q), - ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, K), - ggml_webgpu_make_tensor_bind_group_entry(ctx, 2, V), }; - uint32_t binding_index = 3; + if (kv_overlap) { + entries.push_back( + ggml_webgpu_make_bind_group_entry(1, ggml_webgpu_tensor_buf(K), kv_bind_offset, kv_bind_size)); + } else { + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, K)); + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 2, V)); + } + uint32_t binding_index = kv_overlap ? 2u : 3u; if (has_mask) { entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, binding_index++, mask)); } @@ -1631,32 +1756,12 @@ static webgpu_encoded_op ggml_webgpu_flash_attn(webgpu_context & ctx, } entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, binding_index++, dst)); - ggml_webgpu_shader_lib_context shader_lib_ctx = {}; - shader_lib_ctx.src0 = Q; - shader_lib_ctx.src1 = K; - shader_lib_ctx.src2 = V; - shader_lib_ctx.src3 = mask; - shader_lib_ctx.src4 = sinks; - shader_lib_ctx.dst = dst; - shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; - shader_lib_ctx.wg_mem_limit_bytes = ctx->global_ctx->capabilities.limits.maxComputeWorkgroupStorageSize; - shader_lib_ctx.sg_mat_m = ctx->global_ctx->capabilities.sg_mat_m; - shader_lib_ctx.sg_mat_n = ctx->global_ctx->capabilities.sg_mat_n; - shader_lib_ctx.sg_mat_k = ctx->global_ctx->capabilities.sg_mat_k; - shader_lib_ctx.max_subgroup_size = ctx->global_ctx->capabilities.max_subgroup_size; - const bool use_vec = ggml_webgpu_flash_attn_use_vec(ctx->global_ctx, Q, K, V); - webgpu_pipeline pipeline = use_vec ? ctx->shader_lib->get_flash_attn_vec_pipeline(shader_lib_ctx) : - ctx->shader_lib->get_flash_attn_pipeline(shader_lib_ctx); - - if (!use_vec) { - auto * decisions = static_cast<ggml_webgpu_flash_attn_decisions *>(pipeline.context.get()); + if (decisions->path != GGML_WEBGPU_FLASH_ATTN_PATH_VEC) { uint32_t wg_per_head = CEIL_DIV(Q->ne[1], decisions->q_tile); uint32_t wg_x = wg_per_head * Q->ne[2] * Q->ne[3]; // wg per head * number of heads * number of batches return ggml_backend_webgpu_build(ctx, pipeline, params, entries, wg_x); } - auto * decisions = static_cast<ggml_webgpu_flash_attn_vec_decisions *>(pipeline.context.get()); - wgpu::Buffer blk_buf = {}; uint64_t blk_size_bytes = 0; uint32_t blk_nblk0 = 0; @@ -1695,10 +1800,12 @@ static webgpu_encoded_op ggml_webgpu_flash_attn(webgpu_context & ctx, tmp_bind_size = tmp_size_bytes; scratch_offset = ROUNDUP_POW2(scratch_offset + tmp_size_bytes, align_bytes); } else { - // nwg==1 writes final dst directly in vec-split; keep tmp binding valid without extra allocation. + // nwg==1 writes final dst directly in vec-split; bind tmp to a tiny non-overlapping scratch region. + tmp_size_bytes = WEBGPU_STORAGE_BUF_BINDING_MULT; tmp_buf = ggml_webgpu_tensor_buf(dst); - tmp_bind_offset = ggml_webgpu_tensor_align_offset(ctx, dst); - tmp_bind_size = ggml_webgpu_tensor_binding_size(ctx, dst); + tmp_bind_offset = scratch_offset; + tmp_bind_size = tmp_size_bytes; + scratch_offset = ROUNDUP_POW2(scratch_offset + tmp_size_bytes, align_bytes); } webgpu_pipeline blk_pipeline; @@ -1713,7 +1820,7 @@ static webgpu_encoded_op ggml_webgpu_flash_attn(webgpu_context & ctx, const uint64_t blk_elems = (uint64_t) blk_nblk0 * blk_nblk1 * blk_batch_count; blk_size_bytes = ROUNDUP_POW2(blk_elems * sizeof(uint32_t), WEBGPU_STORAGE_BUF_BINDING_MULT); const ggml_webgpu_shader_lib_context blk_shader_ctx = shader_lib_ctx; - blk_pipeline = ctx->shader_lib->get_flash_attn_blk_pipeline(blk_shader_ctx); + blk_pipeline = ctx->shader_lib->get_flash_attn_blk_pipeline(blk_shader_ctx, decisions->kv_tile); blk_params = { (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, mask) / ggml_type_size(mask->type)), // offset_mask @@ -1745,12 +1852,19 @@ static webgpu_encoded_op ggml_webgpu_flash_attn(webgpu_context & ctx, std::vector<wgpu::BindGroupEntry> split_entries = { ggml_webgpu_make_bind_group_entry(0, ggml_webgpu_tensor_buf(Q), ggml_webgpu_tensor_align_offset(ctx, Q), ggml_webgpu_tensor_binding_size(ctx, Q)), - ggml_webgpu_make_bind_group_entry(1, ggml_webgpu_tensor_buf(K), ggml_webgpu_tensor_align_offset(ctx, K), - ggml_webgpu_tensor_binding_size(ctx, K)), - ggml_webgpu_make_bind_group_entry(2, ggml_webgpu_tensor_buf(V), ggml_webgpu_tensor_align_offset(ctx, V), - ggml_webgpu_tensor_binding_size(ctx, V)), }; - uint32_t split_binding_index = 3; + if (kv_overlap) { + split_entries.push_back( + ggml_webgpu_make_bind_group_entry(1, ggml_webgpu_tensor_buf(K), kv_bind_offset, kv_bind_size)); + } else { + split_entries.push_back(ggml_webgpu_make_bind_group_entry(1, ggml_webgpu_tensor_buf(K), + ggml_webgpu_tensor_align_offset(ctx, K), + ggml_webgpu_tensor_binding_size(ctx, K))); + split_entries.push_back(ggml_webgpu_make_bind_group_entry(2, ggml_webgpu_tensor_buf(V), + ggml_webgpu_tensor_align_offset(ctx, V), + ggml_webgpu_tensor_binding_size(ctx, V))); + } + uint32_t split_binding_index = kv_overlap ? 2u : 3u; if (has_mask) { split_entries.push_back(ggml_webgpu_make_bind_group_entry(split_binding_index++, ggml_webgpu_tensor_buf(mask), ggml_webgpu_tensor_align_offset(ctx, mask), @@ -1820,22 +1934,20 @@ static webgpu_encoded_op ggml_webgpu_flash_attn(webgpu_context & ctx, return ggml_backend_webgpu_build_multi(ctx, dispatches); } -#endif // __EMSCRIPTEN__ static webgpu_encoded_op ggml_webgpu_unary_op(webgpu_context & ctx, ggml_tensor * src, ggml_tensor * dst) { bool is_unary = dst->op == GGML_OP_UNARY; - bool inplace = ggml_webgpu_tensor_equal(src, dst) || (dst->op == GGML_OP_FILL); ggml_webgpu_shader_lib_context shader_lib_ctx = {}; shader_lib_ctx.src0 = src; shader_lib_ctx.src1 = nullptr; shader_lib_ctx.dst = dst; shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; - shader_lib_ctx.inplace = inplace; webgpu_pipeline pipeline = ctx->shader_lib->get_unary_pipeline(shader_lib_ctx); - auto * decisions = static_cast<ggml_webgpu_generic_shader_decisions *>(pipeline.context.get()); + auto * decisions = static_cast<ggml_webgpu_generic_shader_decisions *>(pipeline.context.get()); + const bool inplace = decisions->inplace; uint32_t ne = (uint32_t) ggml_nelements(dst); @@ -1897,41 +2009,38 @@ static webgpu_encoded_op ggml_webgpu_binary_op(webgpu_context & ctx, ggml_tensor * src0, ggml_tensor * src1, ggml_tensor * dst) { - binary_overlap_flags flags = ggml_webgpu_detect_binary_overlap(src0, src1, dst); - ggml_webgpu_shader_lib_context shader_lib_ctx = {}; shader_lib_ctx.src0 = src0; shader_lib_ctx.src1 = src1; shader_lib_ctx.dst = dst; shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; - shader_lib_ctx.inplace = flags.inplace; - shader_lib_ctx.overlap = flags.overlap; - shader_lib_ctx.src_overlap = flags.src_overlap; - - webgpu_pipeline pipeline = ctx->shader_lib->get_binary_pipeline(shader_lib_ctx); - auto * decisions = static_cast<ggml_webgpu_generic_shader_decisions *>(pipeline.context.get()); + webgpu_pipeline pipeline = ctx->shader_lib->get_binary_pipeline(shader_lib_ctx); + auto * decisions = static_cast<ggml_webgpu_binary_shader_decisions *>(pipeline.context.get()); uint32_t ne = (uint32_t) ggml_nelements(dst); size_t src0_webgpu_tensor_align_offset = ggml_webgpu_tensor_align_offset(ctx, src0); size_t src1_webgpu_tensor_align_offset = ggml_webgpu_tensor_align_offset(ctx, src1); - uint32_t offset_merged_src0 = 0; - uint32_t offset_merged_src1 = 0; - if (flags.src_overlap) { - size_t min_off = std::min(src0_webgpu_tensor_align_offset, src1_webgpu_tensor_align_offset); - offset_merged_src0 = (uint32_t) ((src0_webgpu_tensor_align_offset - min_off) / ggml_type_size(src0->type)); - offset_merged_src1 = (uint32_t) ((src1_webgpu_tensor_align_offset - min_off) / ggml_type_size(src0->type)); + uint32_t offset_src0 = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src0) / ggml_type_size(src0->type)); + uint32_t offset_src1 = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src1) / ggml_type_size(src1->type)); + size_t merged_offset = 0; + size_t merged_size = 0; + if (decisions->src_overlap) { + const ggml_webgpu_merged_binding_range merged_range = + ggml_webgpu_tensor_merged_binding_range(ctx, { src0, src1 }); + merged_offset = merged_range.offset; + merged_size = merged_range.size; + offset_src0 = ggml_webgpu_tensor_merged_element_offset(src0, merged_range); + offset_src1 = ggml_webgpu_tensor_merged_element_offset(src1, merged_range); } std::vector<uint32_t> params = { ne, - (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src0) / ggml_type_size(src0->type)), - (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src1) / ggml_type_size(src1->type)), + offset_src0, + offset_src1, (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), - offset_merged_src0, - offset_merged_src1, (uint32_t) (src0->nb[0] / ggml_type_size(src0->type)), (uint32_t) (src0->nb[1] / ggml_type_size(src0->type)), (uint32_t) (src0->nb[2] / ggml_type_size(src0->type)), @@ -1951,12 +2060,9 @@ static webgpu_encoded_op ggml_webgpu_binary_op(webgpu_context & ctx, std::vector<wgpu::BindGroupEntry> entries; - if (flags.src_overlap) { - size_t merged_offset = std::min(src0_webgpu_tensor_align_offset, src1_webgpu_tensor_align_offset); - size_t merged_end = std::max(src0_webgpu_tensor_align_offset + ggml_webgpu_tensor_binding_size(ctx, src0), - src1_webgpu_tensor_align_offset + ggml_webgpu_tensor_binding_size(ctx, src1)); - entries.push_back(ggml_webgpu_make_bind_group_entry(0, ggml_webgpu_tensor_buf(src0), merged_offset, - merged_end - merged_offset)); + if (decisions->src_overlap) { + entries.push_back( + ggml_webgpu_make_bind_group_entry(0, ggml_webgpu_tensor_buf(src0), merged_offset, merged_size)); entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, dst)); } else { entries.push_back(ggml_webgpu_make_bind_group_entry(0, ggml_webgpu_tensor_buf(src0), @@ -1965,7 +2071,7 @@ static webgpu_encoded_op ggml_webgpu_binary_op(webgpu_context & ctx, entries.push_back(ggml_webgpu_make_bind_group_entry(1, ggml_webgpu_tensor_buf(src1), src1_webgpu_tensor_align_offset, ggml_webgpu_tensor_binding_size(ctx, src1))); - if (!flags.inplace && !flags.overlap) { + if (!decisions->inplace && !decisions->overlap) { entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 2, dst)); } } @@ -2071,29 +2177,15 @@ static std::optional<webgpu_encoded_op> ggml_webgpu_rms_norm_mul(webgpu_context GGML_ABORT("rms_norm must be equal to the one of mul_src0 and mul_src1"); } - bool overlap = (ggml_webgpu_tensor_equal(rn_dst, mul_src0) && ggml_webgpu_tensor_equal(mul_src1, dst)) || - (ggml_webgpu_tensor_equal(rn_dst, mul_src1) && ggml_webgpu_tensor_equal(mul_src0, dst)); - bool inplace = ggml_webgpu_tensor_equal(rn_src, dst); - bool src_overlap = ggml_webgpu_tensor_overlap(rn_src, mul_src); - - uint32_t offset_merged_rn_src = 0; - uint32_t offset_merged_mul_src = 0; - size_t rn_src_webgpu_tensor_align_offset = ggml_webgpu_tensor_align_offset(ctx, rn_src); - size_t mul_src_webgpu_tensor_align_offset = ggml_webgpu_tensor_align_offset(ctx, mul_src); - - if (src_overlap) { - size_t min_offset = std::min(rn_src_webgpu_tensor_align_offset, mul_src_webgpu_tensor_align_offset); - offset_merged_rn_src = - (uint32_t) ((rn_src_webgpu_tensor_align_offset - min_offset) / ggml_type_size(rn_src->type)); - offset_merged_mul_src = - (uint32_t) ((mul_src_webgpu_tensor_align_offset - min_offset) / ggml_type_size(mul_src->type)); - } + uint32_t offset_rn_src = (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, rn_src) / ggml_type_size(rn_src->type)); + uint32_t offset_mul_src = + (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, mul_src) / ggml_type_size(mul_src->type)); + size_t merged_offset = 0; + size_t merged_size = 0; std::vector<uint32_t> params = { - (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, rn_src) / ggml_type_size(rn_src->type)), - (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, mul_src) / ggml_type_size(mul_src->type)), - offset_merged_rn_src, - offset_merged_mul_src, + offset_rn_src, + offset_mul_src, (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), (uint32_t) (rn_src->nb[1] / ggml_type_size(rn_src->type)), (uint32_t) (rn_src->nb[2] / ggml_type_size(rn_src->type)), @@ -2117,16 +2209,32 @@ static std::optional<webgpu_encoded_op> ggml_webgpu_rms_norm_mul(webgpu_context std::vector<wgpu::BindGroupEntry> entries; - if (inplace || overlap) { + ggml_webgpu_shader_lib_context shader_lib_ctx = {}; + shader_lib_ctx.src0 = rn_src; + shader_lib_ctx.src1 = mul_src; + shader_lib_ctx.dst = dst; + shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; + + webgpu_pipeline pipeline = ctx->shader_lib->get_rms_norm_mul_pipeline(shader_lib_ctx); + auto * decisions = static_cast<ggml_webgpu_rms_norm_mul_shader_decisions *>(pipeline.context.get()); + + if (decisions->src_overlap) { + const ggml_webgpu_merged_binding_range merged_range = + ggml_webgpu_tensor_merged_binding_range(ctx, { rn_src, mul_src }); + merged_offset = merged_range.offset; + merged_size = merged_range.size; + offset_rn_src = ggml_webgpu_tensor_merged_element_offset(rn_src, merged_range); + offset_mul_src = ggml_webgpu_tensor_merged_element_offset(mul_src, merged_range); + params[0] = offset_rn_src; + params[1] = offset_mul_src; + } + + if (decisions->inplace || decisions->overlap) { entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 0, rn_src)); entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, mul_src)); - } else if (src_overlap) { - size_t merged_offset = std::min(rn_src_webgpu_tensor_align_offset, mul_src_webgpu_tensor_align_offset); - size_t merged_end = - std::max(rn_src_webgpu_tensor_align_offset + ggml_webgpu_tensor_binding_size(ctx, rn_src), - mul_src_webgpu_tensor_align_offset + ggml_webgpu_tensor_binding_size(ctx, mul_src)); - entries.push_back(ggml_webgpu_make_bind_group_entry(0, ggml_webgpu_tensor_buf(rn_src), merged_offset, - merged_end - merged_offset)); + } else if (decisions->src_overlap) { + entries.push_back( + ggml_webgpu_make_bind_group_entry(0, ggml_webgpu_tensor_buf(rn_src), merged_offset, merged_size)); entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, dst)); } else { entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 0, rn_src)); @@ -2134,20 +2242,10 @@ static std::optional<webgpu_encoded_op> ggml_webgpu_rms_norm_mul(webgpu_context entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 2, dst)); } - ggml_webgpu_shader_lib_context shader_lib_ctx = {}; - shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; - shader_lib_ctx.inplace = inplace; - shader_lib_ctx.overlap = overlap; - shader_lib_ctx.src_overlap = src_overlap; - - webgpu_pipeline pipeline = ctx->shader_lib->get_rms_norm_mul_pipeline(shader_lib_ctx); - return ggml_backend_webgpu_build(ctx, pipeline, params, entries, ggml_nrows(dst)); } static webgpu_encoded_op ggml_webgpu_row_norm(webgpu_context & ctx, ggml_tensor * src, ggml_tensor * dst) { - bool inplace = ggml_webgpu_tensor_equal(src, dst); - std::vector<uint32_t> params = { (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src) / ggml_type_size(src->type)), (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, dst) / ggml_type_size(dst->type)), @@ -2164,18 +2262,18 @@ static webgpu_encoded_op ggml_webgpu_row_norm(webgpu_context & ctx, ggml_tensor ggml_webgpu_u32_from_f32(ggml_get_op_params_f32(dst, 0)) // epsilon, treated as f32 in the shader }; - std::vector<wgpu::BindGroupEntry> entries = { ggml_webgpu_make_tensor_bind_group_entry(ctx, 0, src) }; - if (!inplace) { - entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, dst)); - } - ggml_webgpu_shader_lib_context shader_lib_ctx = {}; shader_lib_ctx.src0 = src; shader_lib_ctx.dst = dst; shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; - shader_lib_ctx.inplace = inplace; - webgpu_pipeline pipeline = ctx->shader_lib->get_row_norm_pipeline(shader_lib_ctx); + webgpu_pipeline pipeline = ctx->shader_lib->get_row_norm_pipeline(shader_lib_ctx); + auto * decisions = static_cast<ggml_webgpu_generic_shader_decisions *>(pipeline.context.get()); + + std::vector<wgpu::BindGroupEntry> entries = { ggml_webgpu_make_tensor_bind_group_entry(ctx, 0, src) }; + if (!decisions->inplace) { + entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, dst)); + } return ggml_backend_webgpu_build(ctx, pipeline, params, entries, ggml_nrows(src)); } @@ -2190,14 +2288,13 @@ static webgpu_encoded_op ggml_webgpu_rope(webgpu_context & ctx, shader_lib_ctx.src2 = src2; shader_lib_ctx.dst = dst; shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; - shader_lib_ctx.inplace = ggml_webgpu_tensor_equal(src0, dst); webgpu_pipeline pipeline = ctx->shader_lib->get_rope_pipeline(shader_lib_ctx); auto * decisions = static_cast<ggml_webgpu_generic_shader_decisions *>(pipeline.context.get()); - const int inplace = ggml_webgpu_tensor_equal(src0, dst); - const int has_freq_factor = (src2 != nullptr); + const bool inplace = decisions->inplace; + const int has_freq_factor = (src2 != nullptr); const int n_dims = ((int32_t *) dst->op_params)[1]; const int mode = ((int32_t *) dst->op_params)[2]; @@ -2324,14 +2421,11 @@ static webgpu_encoded_op ggml_webgpu_glu(webgpu_context & ctx, } static webgpu_encoded_op ggml_webgpu_scale(webgpu_context & ctx, ggml_tensor * src, ggml_tensor * dst) { - bool inplace = ggml_webgpu_tensor_equal(src, dst); - ggml_webgpu_shader_lib_context shader_lib_ctx = {}; shader_lib_ctx.src0 = src; shader_lib_ctx.src1 = nullptr; shader_lib_ctx.dst = dst; shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; - shader_lib_ctx.inplace = inplace; webgpu_pipeline pipeline = ctx->shader_lib->get_scale_pipeline(shader_lib_ctx); auto * decisions = static_cast<ggml_webgpu_generic_shader_decisions *>(pipeline.context.get()); @@ -2357,7 +2451,7 @@ static webgpu_encoded_op ggml_webgpu_scale(webgpu_context & ctx, ggml_tensor * s // bindgroups unchanged std::vector<wgpu::BindGroupEntry> entries = { ggml_webgpu_make_tensor_bind_group_entry(ctx, 0, src) }; - if (!inplace) { + if (!decisions->inplace) { entries.push_back(ggml_webgpu_make_tensor_bind_group_entry(ctx, 1, dst)); } @@ -2376,17 +2470,17 @@ static webgpu_encoded_op ggml_webgpu_soft_max(webgpu_context & ctx, shader_lib_ctx.src2 = src2; shader_lib_ctx.dst = dst; shader_lib_ctx.max_wg_size = ctx->global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; - shader_lib_ctx.inplace = ggml_webgpu_tensor_equal(src0, dst); - webgpu_pipeline pipeline = ctx->shader_lib->get_soft_max_pipeline(shader_lib_ctx); + webgpu_pipeline pipeline = ctx->shader_lib->get_soft_max_pipeline(shader_lib_ctx); + auto * decisions = static_cast<ggml_webgpu_generic_shader_decisions *>(pipeline.context.get()); - const int inplace = ggml_webgpu_tensor_equal(src0, dst); - const int has_mask = (src1 != nullptr); - const int has_sink = (src2 != nullptr); - float max_bias = ggml_get_op_params_f32(dst, 1); - float n_head_log2 = float(1u << (uint32_t) floor(log2(src0->ne[2]))); - float m0 = powf(2.0f, -(max_bias) / n_head_log2); - float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2); + const bool inplace = decisions->inplace; + const int has_mask = (src1 != nullptr); + const int has_sink = (src2 != nullptr); + float max_bias = ggml_get_op_params_f32(dst, 1); + float n_head_log2 = float(1u << (uint32_t) floor(log2(src0->ne[2]))); + float m0 = powf(2.0f, -(max_bias) / n_head_log2); + float m1 = powf(2.0f, -(max_bias / 2.0f) / n_head_log2); std::vector<uint32_t> params = { (uint32_t) (ggml_webgpu_tensor_misalignment(ctx, src0) / ggml_type_size(src0->type)), @@ -2710,11 +2804,7 @@ static std::optional<webgpu_encoded_op> ggml_webgpu_encode(webgpu_context ctx, case GGML_OP_MUL_MAT_ID: return ggml_webgpu_mul_mat_id(ctx, src0, src1, src2, node); case GGML_OP_FLASH_ATTN_EXT: -#ifndef __EMSCRIPTEN__ return ggml_webgpu_flash_attn(ctx, src0, src1, src2, node->src[3], node->src[4], node); -#else - return std::nullopt; -#endif case GGML_OP_ADD: case GGML_OP_SUB: case GGML_OP_MUL: @@ -2757,6 +2847,9 @@ static std::optional<webgpu_encoded_op> ggml_webgpu_encode(webgpu_context ctx, return ggml_webgpu_solve_tri(ctx, src0, src1, node); case GGML_OP_SSM_CONV: return ggml_webgpu_ssm_conv(ctx, src0, src1, node); + case GGML_OP_SSM_SCAN: + return ggml_webgpu_ssm_scan(ctx, src0, src1, src2, node->src[3], node->src[4], node->src[5], node->src[6], + node); case GGML_OP_GATED_DELTA_NET: return ggml_webgpu_gated_delta_net(ctx, src0, src1, src2, node->src[3], node->src[4], node->src[5], node); case GGML_OP_PAD: @@ -2815,7 +2908,10 @@ static void ggml_backend_webgpu_collect_profile_results(webgpu_context & } #endif +// Don't bother checking set_rows index overflow for now, since practically the WebGPU doesn't need to support +// models that would require it right now. static void ggml_backend_webgpu_check_set_rows(webgpu_context & ctx, uint32_t & num_inflight_batches) { +#ifdef GGML_WEBGPU_CHECK_SET_ROWS wgpu::CommandEncoder encoder = ctx->global_ctx->device.CreateCommandEncoder(); encoder.CopyBufferToBuffer(ctx->set_rows_dev_error_buf, 0, ctx->set_rows_host_error_buf, 0, ctx->set_rows_host_error_buf.GetSize()); @@ -2828,6 +2924,10 @@ static void ggml_backend_webgpu_check_set_rows(webgpu_context & ctx, uint32_t & GGML_ABORT("ggml_webgpu: SET_ROWS index > 2^32, unsupported."); } ctx->set_rows_host_error_buf.Unmap(); +#else + GGML_UNUSED(ctx); + GGML_UNUSED(num_inflight_batches); +#endif } static ggml_status ggml_backend_webgpu_graph_compute(ggml_backend_t backend, struct ggml_cgraph * cgraph) { @@ -2913,8 +3013,6 @@ static ggml_status ggml_backend_webgpu_graph_compute(ggml_backend_t backend, str ggml_backend_webgpu_check_set_rows(ctx, num_inflight_batches); } - ggml_backend_webgpu_wait_queue(ctx->global_ctx); - WEBGPU_CPU_PROFILE_TOTAL_END(graph_compute, ctx->global_ctx); return GGML_STATUS_SUCCESS; } @@ -2978,7 +3076,7 @@ static void ggml_backend_webgpu_set_tensor_async(ggml_backend_t backend, size_t size) { GGML_UNUSED(backend); auto * buf_ctx = (ggml_backend_webgpu_buffer_context *) tensor->buffer->context; - size_t total_offset = webgpu_tensor_offset(tensor) + tensor->view_offs + offset; + size_t total_offset = ggml_webgpu_tensor_offset(tensor) + offset; // Write aligned portion buf_ctx->global_ctx->queue.WriteBuffer(buf_ctx->buffer, total_offset, data, (size / 4) * 4); @@ -3060,7 +3158,7 @@ static void ggml_backend_webgpu_buffer_memset_tensor(ggml_backend_buffer_t buffe WEBGPU_LOG_DEBUG("ggml_backend_webgpu_buffer_memset_tensor(" << buf_ctx->label << ", " << tensor << ", " << value << ", " << offset << ", " << size << ")"); - size_t total_offset = webgpu_tensor_offset(tensor) + tensor->view_offs + offset; + size_t total_offset = ggml_webgpu_tensor_offset(tensor) + offset; // This is a trick to set all bytes of a u32 to the same 1 byte value. uint32_t val32 = (uint32_t) value * 0x01010101; @@ -3079,7 +3177,7 @@ static void ggml_backend_webgpu_buffer_set_tensor(ggml_backend_buffer_t buffer, WEBGPU_LOG_DEBUG("ggml_backend_webgpu_buffer_set_tensor(" << buf_ctx->label << ", " << tensor << ", " << data << ", " << offset << ", " << size << ")"); - size_t total_offset = webgpu_tensor_offset(tensor) + tensor->view_offs + offset; + size_t total_offset = ggml_webgpu_tensor_offset(tensor) + offset; buf_ctx->global_ctx->queue.WriteBuffer(buf_ctx->buffer, total_offset, data, (size / 4) * 4); @@ -3111,7 +3209,7 @@ static void ggml_backend_webgpu_buffer_get_tensor(ggml_backend_buffer_t buffer, << ", " << offset << ", " << size << ")"); wgpu::Device device = buf_ctx->global_ctx->device; - size_t total_offset = webgpu_tensor_offset(tensor) + tensor->view_offs + offset; + size_t total_offset = ggml_webgpu_tensor_offset(tensor) + offset; size_t final_size = size; if (size % 4 != 0) { @@ -3257,13 +3355,19 @@ static size_t ggml_backend_webgpu_buffer_type_get_alloc_size(ggml_backend_buffer ctx->webgpu_global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; shader_lib_ctx.wg_mem_limit_bytes = ctx->webgpu_global_ctx->capabilities.limits.maxComputeWorkgroupStorageSize; + shader_lib_ctx.supports_subgroups = ctx->webgpu_global_ctx->capabilities.supports_subgroups; + shader_lib_ctx.supports_subgroup_matrix = + ctx->webgpu_global_ctx->capabilities.supports_subgroup_matrix; shader_lib_ctx.sg_mat_m = ctx->webgpu_global_ctx->capabilities.sg_mat_m; shader_lib_ctx.sg_mat_n = ctx->webgpu_global_ctx->capabilities.sg_mat_n; shader_lib_ctx.sg_mat_k = ctx->webgpu_global_ctx->capabilities.sg_mat_k; shader_lib_ctx.max_subgroup_size = ctx->webgpu_global_ctx->capabilities.max_subgroup_size; - if (ggml_webgpu_flash_attn_use_vec(ctx->webgpu_global_ctx, Q, K, V)) { - const uint32_t kv_tile = ggml_webgpu_flash_attn_vec_get_kv_tile(shader_lib_ctx); + const ggml_webgpu_flash_attn_decisions decisions = ggml_webgpu_flash_attn_get_decisions( + shader_lib_ctx, ctx->webgpu_global_ctx->capabilities.limits.minStorageBufferOffsetAlignment); + + if (decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_VEC) { + const uint32_t kv_tile = decisions.kv_tile; const uint32_t vec_nwg_cap = std::max( 1u, std::min<uint32_t>(32u, ctx->webgpu_global_ctx->capabilities.max_subgroup_size)); @@ -3283,6 +3387,8 @@ static size_t ggml_backend_webgpu_buffer_type_get_alloc_size(ggml_backend_buffer const size_t tmp_size_bytes = ROUNDUP_POW2( (tmp_data_elems + tmp_stats_elems) * sizeof(float), WEBGPU_STORAGE_BUF_BINDING_MULT); res += tmp_size_bytes + align; + } else { + res += WEBGPU_STORAGE_BUF_BINDING_MULT + align; } if (mask != nullptr) { const uint32_t blk_nblk0 = CEIL_DIV((uint32_t) K->ne[1], kv_tile); @@ -3431,12 +3537,12 @@ static bool create_webgpu_device(ggml_backend_webgpu_reg_context * ctx) { ctx->webgpu_global_ctx->capabilities.supports_subgroups = ctx->webgpu_global_ctx->adapter.HasFeature(wgpu::FeatureName::Subgroups); + bool valid_subgroup_matrix_config = false; #ifndef __EMSCRIPTEN__ // Accept f16 subgroup matrix configurations (square or non-square). // NVIDIA GPUs typically report square configs (e.g. 16x16x16), // while Intel Xe2 GPUs report non-square configs (e.g. 8x16x16). // The shaders are already parameterized to handle any M/N/K dimensions. - bool valid_subgroup_matrix_config = false; if (ctx->webgpu_global_ctx->adapter.HasFeature(wgpu::FeatureName::ChromiumExperimentalSubgroupMatrix)) { for (size_t i = 0; i < subgroup_matrix_configs.configCount; i++) { const wgpu::SubgroupMatrixConfig config = subgroup_matrix_configs.configs[i]; @@ -3450,8 +3556,8 @@ static bool create_webgpu_device(ggml_backend_webgpu_reg_context * ctx) { } } } - ctx->webgpu_global_ctx->capabilities.supports_subgroup_matrix = valid_subgroup_matrix_config; #endif + ctx->webgpu_global_ctx->capabilities.supports_subgroup_matrix = valid_subgroup_matrix_config; // For subgroup matrix code to be the most efficient, we would like the subgroup size to be consistent and accurate. // Unfortunately, that is not possible, so we use the maximum subgroup size reported by the adapter. @@ -3499,12 +3605,12 @@ static bool create_webgpu_device(ggml_backend_webgpu_reg_context * ctx) { // Enable Dawn-specific toggles to increase native performance // TODO: Maybe WebGPU needs a "fast" mode where you can request compilers skip adding checks like these, // only for native performance? - const char * const deviceEnabledToggles[] = { "skip_validation", "disable_robustness", "disable_workgroup_init", - "disable_polyfills_on_integer_div_and_mod" }; - const char * const deviceDisabledToggles[] = { "timestamp_quantization" }; + const char * const deviceEnabledToggles[] = { "disable_robustness", "disable_workgroup_init", + "disable_polyfills_on_integer_div_and_mod" }; + const char * const deviceDisabledToggles[] = { "timestamp_quantization" }; wgpu::DawnTogglesDescriptor deviceTogglesDesc; deviceTogglesDesc.enabledToggles = deviceEnabledToggles; - deviceTogglesDesc.enabledToggleCount = 4; + deviceTogglesDesc.enabledToggleCount = 3; deviceTogglesDesc.disabledToggles = deviceDisabledToggles; deviceTogglesDesc.disabledToggleCount = 1; @@ -3628,6 +3734,7 @@ static bool ggml_backend_webgpu_device_supports_buft(ggml_backend_dev_t dev, ggm static bool ggml_webgpu_supported_qtype(ggml_type type) { switch (type) { + case GGML_TYPE_Q1_0: case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: case GGML_TYPE_Q5_0: @@ -3722,6 +3829,7 @@ static bool ggml_backend_webgpu_device_supports_op(ggml_backend_dev_t dev, const switch (src0->type) { case GGML_TYPE_F32: case GGML_TYPE_F16: + case GGML_TYPE_Q1_0: case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: case GGML_TYPE_Q5_0: @@ -3760,6 +3868,7 @@ static bool ggml_backend_webgpu_device_supports_op(ggml_backend_dev_t dev, const switch (src0->type) { case GGML_TYPE_F32: case GGML_TYPE_F16: + case GGML_TYPE_Q1_0: case GGML_TYPE_Q4_0: case GGML_TYPE_Q4_1: case GGML_TYPE_Q5_0: @@ -3782,33 +3891,67 @@ static bool ggml_backend_webgpu_device_supports_op(ggml_backend_dev_t dev, const break; case GGML_OP_FLASH_ATTN_EXT: { -#ifndef __EMSCRIPTEN__ - if (!ctx->webgpu_global_ctx->capabilities.supports_subgroup_matrix) { + supports_op = src0->type == GGML_TYPE_F32 && + (src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16 || + src1->type == GGML_TYPE_Q4_0 || src1->type == GGML_TYPE_Q8_0) && + src2->type == src1->type && op->type == GGML_TYPE_F32; + if (!supports_op) { break; } - // Head dimensions must be divisible by subgroup matrix dimensions - if (src0->ne[0] % ctx->webgpu_global_ctx->capabilities.sg_mat_k != 0 || - src2->ne[0] % ctx->webgpu_global_ctx->capabilities.sg_mat_n != 0) { + ggml_webgpu_shader_lib_context shader_lib_ctx = {}; + shader_lib_ctx.src0 = src0; + shader_lib_ctx.src1 = src1; + shader_lib_ctx.src2 = src2; + shader_lib_ctx.src3 = op->src[3]; + shader_lib_ctx.src4 = op->src[4]; + shader_lib_ctx.dst = const_cast<ggml_tensor *>(op); + shader_lib_ctx.supports_subgroups = ctx->webgpu_global_ctx->capabilities.supports_subgroups; + shader_lib_ctx.supports_subgroup_matrix = ctx->webgpu_global_ctx->capabilities.supports_subgroup_matrix; + shader_lib_ctx.wg_mem_limit_bytes = + ctx->webgpu_global_ctx->capabilities.limits.maxComputeWorkgroupStorageSize; + shader_lib_ctx.sg_mat_m = ctx->webgpu_global_ctx->capabilities.sg_mat_m; + shader_lib_ctx.sg_mat_n = ctx->webgpu_global_ctx->capabilities.sg_mat_n; + shader_lib_ctx.sg_mat_k = ctx->webgpu_global_ctx->capabilities.sg_mat_k; + shader_lib_ctx.max_subgroup_size = ctx->webgpu_global_ctx->capabilities.max_subgroup_size; + + const ggml_webgpu_flash_attn_decisions decisions = ggml_webgpu_flash_attn_get_decisions( + shader_lib_ctx, ctx->webgpu_global_ctx->capabilities.limits.minStorageBufferOffsetAlignment); + const size_t limit_bytes = ctx->webgpu_global_ctx->capabilities.limits.maxComputeWorkgroupStorageSize; + const bool has_mask = op->src[3] != nullptr; + if (decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_NONE) { + supports_op = false; break; } - // Head dimensions must fit in workgroup memory with minimum tile sizes - size_t limit_bytes = ctx->webgpu_global_ctx->capabilities.limits.maxComputeWorkgroupStorageSize; - const bool has_mask = op->src[3] != nullptr; - const bool kv_direct = src1->type == GGML_TYPE_F16 && - (src0->ne[0] % ctx->webgpu_global_ctx->capabilities.sg_mat_k) == 0 && - (src1->ne[1] % GGML_WEBGPU_KV_SEQ_PAD) == 0; - const size_t min_bytes = ggml_webgpu_flash_attn_wg_mem_bytes( - ctx->webgpu_global_ctx->capabilities.sg_mat_m, ctx->webgpu_global_ctx->capabilities.sg_mat_n, - (uint32_t) src0->ne[0], (uint32_t) src2->ne[0], has_mask, kv_direct); - if (min_bytes > limit_bytes) { + if (decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_VEC) { + const size_t min_bytes = + ggml_webgpu_flash_attn_wg_mem_bytes(decisions.q_tile, decisions.kv_tile, (uint32_t) src0->ne[0], + (uint32_t) src2->ne[0], has_mask, decisions.kv_direct); + if (min_bytes > limit_bytes) { + supports_op = false; + } break; } - supports_op = src0->type == GGML_TYPE_F32 && - (src1->type == GGML_TYPE_F32 || src1->type == GGML_TYPE_F16 || - src1->type == GGML_TYPE_Q4_0 || src1->type == GGML_TYPE_Q8_0) && - src2->type == src1->type && op->type == GGML_TYPE_F32; -#endif + if (decisions.path == GGML_WEBGPU_FLASH_ATTN_PATH_TILE) { + const size_t min_bytes = + ggml_webgpu_flash_attn_wg_mem_bytes(decisions.q_tile, decisions.kv_tile, (uint32_t) src0->ne[0], + (uint32_t) src2->ne[0], has_mask, decisions.kv_direct); + if (min_bytes > limit_bytes) { + supports_op = false; + } + break; + } + + if (!ctx->webgpu_global_ctx->capabilities.supports_subgroup_matrix) { + supports_op = false; + break; + } + const size_t min_bytes = + ggml_webgpu_flash_attn_wg_mem_bytes(decisions.q_tile, decisions.kv_tile, (uint32_t) src0->ne[0], + (uint32_t) src2->ne[0], has_mask, decisions.kv_direct); + if (min_bytes > limit_bytes) { + supports_op = false; + } break; } case GGML_OP_RMS_NORM: @@ -3896,6 +4039,10 @@ static bool ggml_backend_webgpu_device_supports_op(ggml_backend_dev_t dev, const case GGML_OP_SSM_CONV: supports_op = op->type == GGML_TYPE_F32; break; + case GGML_OP_SSM_SCAN: + supports_op = op->type == GGML_TYPE_F32 && + src0->ne[0] <= ctx->webgpu_global_ctx->capabilities.limits.maxComputeInvocationsPerWorkgroup; + break; case GGML_OP_GATED_DELTA_NET: { const uint32_t s_v = (uint32_t) src2->ne[0]; diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl index a748dc1b86c..605de7aa7be 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/binary.wgsl @@ -7,8 +7,6 @@ struct Params { offset_src0: u32, offset_src1: u32, offset_dst: u32, - offset_merged_src0: u32, - offset_merged_src1: u32, stride_src0_0: u32, stride_src0_1: u32, @@ -134,8 +132,8 @@ fn update(dst_i: u32, src0_i: u32, src1_i: u32) { @compute @workgroup_size(WG_SIZE) fn main(@builtin(global_invocation_id) gid: vec3<u32>) { if (gid.x < params.ne) { - let src0_i = params.offset_src0 + params.offset_merged_src0 + src0_index(gid.x); - let src1_i = params.offset_src1 + params.offset_merged_src1 + src1_index(gid.x); + let src0_i = params.offset_src0 + src0_index(gid.x); + let src1_i = params.offset_src1 + src1_index(gid.x); update(params.offset_dst + gid.x, src0_i, src1_i); } } diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn.wgsl index aa2d2e54db9..6d5d69fb8de 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn.wgsl @@ -138,26 +138,55 @@ struct Params { }; @group(0) @binding(0) var<storage, read_write> Q: array<f32>; +#ifdef KV_OVERLAP +@group(0) @binding(1) var<storage, read_write> K: array<KV_TYPE>; +#define V K +#else @group(0) @binding(1) var<storage, read_write> K: array<KV_TYPE>; @group(0) @binding(2) var<storage, read_write> V: array<KV_TYPE>; +#endif #if defined(MASK) && defined(SINKS) +#ifdef KV_OVERLAP +@group(0) @binding(2) var<storage, read_write> mask: array<f16>; +@group(0) @binding(3) var<storage, read_write> sinks: array<f32>; +#define DST_BINDING 4 +#define PARAMS_BINDING 5 +#else @group(0) @binding(3) var<storage, read_write> mask: array<f16>; @group(0) @binding(4) var<storage, read_write> sinks: array<f32>; #define DST_BINDING 5 #define PARAMS_BINDING 6 +#endif #elif defined(MASK) +#ifdef KV_OVERLAP +@group(0) @binding(2) var<storage, read_write> mask: array<f16>; +#define DST_BINDING 3 +#define PARAMS_BINDING 4 +#else @group(0) @binding(3) var<storage, read_write> mask: array<f16>; #define DST_BINDING 4 #define PARAMS_BINDING 5 +#endif #elif defined(SINKS) +#ifdef KV_OVERLAP +@group(0) @binding(2) var<storage, read_write> sinks: array<f32>; +#define DST_BINDING 3 +#define PARAMS_BINDING 4 +#else @group(0) @binding(3) var<storage, read_write> sinks: array<f32>; #define DST_BINDING 4 #define PARAMS_BINDING 5 +#endif +#else +#ifdef KV_OVERLAP +#define DST_BINDING 2 +#define PARAMS_BINDING 3 #else #define DST_BINDING 3 #define PARAMS_BINDING 4 #endif +#endif @group(0) @binding(DST_BINDING) var<storage, read_write> dst: array<vec4<f32>>; @group(0) @binding(PARAMS_BINDING) var<uniform> params: Params; diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_tile.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_tile.wgsl new file mode 100644 index 00000000000..37ea23b80c8 --- /dev/null +++ b/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_tile.wgsl @@ -0,0 +1,330 @@ +enable f16; +enable subgroups; + +#define HEAD_DIM_QK 64 +#define HEAD_DIM_V 64 +#define KV_STAGE_STRIDE 64 +#define Q_TILE 4 +#define KV_TILE 64 +#define WG_SIZE 128 + +struct Params { + offset_q: u32, + offset_k: u32, + offset_v: u32, + offset_mask: u32, + offset_sinks: u32, + offset_dst: u32, + + n_heads: u32, + seq_len_q: u32, + seq_len_kv: u32, + + stride_q1: u32, + stride_q2: u32, + stride_q3: u32, + stride_k1: u32, + stride_k2: u32, + stride_k3: u32, + stride_v1: u32, + stride_v2: u32, + stride_v3: u32, + stride_mask3: u32, + + q_per_kv: u32, + + scale: f32, + max_bias: f32, + logit_softcap: f32, + n_head_log2: f32, + m0: f32, + m1: f32, +}; + +@group(0) @binding(0) var<storage, read_write> Q: array<f32>; +#ifdef KV_OVERLAP +@group(0) @binding(1) var<storage, read_write> K: array<vec4<f16>>; +#define V K +#else +@group(0) @binding(1) var<storage, read_write> K: array<vec4<f16>>; +@group(0) @binding(2) var<storage, read_write> V: array<vec4<f16>>; +#endif + +#if defined(MASK) && defined(SINKS) +#ifdef KV_OVERLAP +@group(0) @binding(2) var<storage, read_write> mask: array<f16>; +@group(0) @binding(3) var<storage, read_write> sinks: array<f32>; +#define DST_BINDING 4 +#define PARAMS_BINDING 5 +#else +@group(0) @binding(3) var<storage, read_write> mask: array<f16>; +@group(0) @binding(4) var<storage, read_write> sinks: array<f32>; +#define DST_BINDING 5 +#define PARAMS_BINDING 6 +#endif +#elif defined(MASK) +#ifdef KV_OVERLAP +@group(0) @binding(2) var<storage, read_write> mask: array<f16>; +#define DST_BINDING 3 +#define PARAMS_BINDING 4 +#else +@group(0) @binding(3) var<storage, read_write> mask: array<f16>; +#define DST_BINDING 4 +#define PARAMS_BINDING 5 +#endif +#elif defined(SINKS) +#ifdef KV_OVERLAP +@group(0) @binding(2) var<storage, read_write> sinks: array<f32>; +#define DST_BINDING 3 +#define PARAMS_BINDING 4 +#else +@group(0) @binding(3) var<storage, read_write> sinks: array<f32>; +#define DST_BINDING 4 +#define PARAMS_BINDING 5 +#endif +#else +#ifdef KV_OVERLAP +#define DST_BINDING 2 +#define PARAMS_BINDING 3 +#else +#define DST_BINDING 3 +#define PARAMS_BINDING 4 +#endif +#endif + +@group(0) @binding(DST_BINDING) var<storage, read_write> dst: array<vec4<f32>>; +@group(0) @binding(PARAMS_BINDING) var<uniform> params: Params; + +const FLOAT_MIN: f32 = -1.0e9; +const Q_CHUNKS: u32 = HEAD_DIM_QK / 4u; +const V_CHUNKS: u32 = HEAD_DIM_V / 4u; +const SCORE_REGS_PER_LANE: u32 = (KV_TILE + MAX_SUBGROUP_SIZE - 1u) / MAX_SUBGROUP_SIZE; +const OUT_REGS_PER_LANE: u32 = (V_CHUNKS + MAX_SUBGROUP_SIZE - 1u) / MAX_SUBGROUP_SIZE; + +var<workgroup> q_shmem: array<f16, Q_TILE * HEAD_DIM_QK>; +var<workgroup> kv_shmem: array<f16, KV_TILE * KV_STAGE_STRIDE>; +var<workgroup> p_shmem: array<f32, Q_TILE * KV_TILE>; + +@compute @workgroup_size(WG_SIZE) +fn main(@builtin(workgroup_id) wg_id: vec3<u32>, + @builtin(local_invocation_id) local_id: vec3<u32>, + @builtin(subgroup_id) subgroup_id: u32, + @builtin(subgroup_size) subgroup_size: u32, + @builtin(num_subgroups) num_subgroups: u32, + @builtin(subgroup_invocation_id) sg_inv_id: u32) { + if (subgroup_size == 0u || num_subgroups < Q_TILE) { + return; + } + + let wg_per_head = (params.seq_len_q + Q_TILE - 1u) / Q_TILE; + let wg_per_batch = wg_per_head * params.n_heads; + + let dst2_stride = HEAD_DIM_V * params.n_heads; + let dst3_stride = dst2_stride * params.seq_len_q; + + let batch_idx = wg_id.x / wg_per_batch; + let q_batch_offset = params.offset_q + batch_idx * params.stride_q3; + let k_batch_offset = params.offset_k + batch_idx * params.stride_k3; + let v_batch_offset = params.offset_v + batch_idx * params.stride_v3; + let dst_batch_offset = params.offset_dst + batch_idx * dst3_stride; + let wg_in_batch = wg_id.x % wg_per_batch; + + let head_idx = wg_in_batch / wg_per_head; + let q_head_offset = q_batch_offset + head_idx * params.stride_q2; + let k_head_idx = head_idx / params.q_per_kv; + let v_head_offset = v_batch_offset + k_head_idx * params.stride_v2; + let k_head_offset = k_batch_offset + k_head_idx * params.stride_k2; + + let wg_in_head = wg_in_batch % wg_per_head; + let q_row_start = wg_in_head * Q_TILE; + let global_q_row = q_row_start + subgroup_id; + let row_active = subgroup_id < Q_TILE && global_q_row < params.seq_len_q; + +#ifdef MASK + let mask_global_offset = params.offset_mask + batch_idx * params.stride_mask3 + q_row_start * params.seq_len_kv; +#endif + + let dst_global_offset = dst_batch_offset + q_row_start * dst2_stride + head_idx * HEAD_DIM_V; + + let head = f32(head_idx); + let slope = select(1.0, + select(pow(params.m1, 2.0 * (head - params.n_head_log2) + 1.0), + pow(params.m0, head + 1.0), + head < params.n_head_log2), + params.max_bias > 0.0); + + for (var elem_idx = local_id.x; elem_idx < Q_TILE * HEAD_DIM_QK; elem_idx += WG_SIZE) { + let q_tile_row = elem_idx / HEAD_DIM_QK; + let q_col = elem_idx % HEAD_DIM_QK; + let head_q_row = q_row_start + q_tile_row; + let global_q_row_offset = q_head_offset + head_q_row * params.stride_q1; + q_shmem[elem_idx] = f16(select( + 0.0, + Q[global_q_row_offset + q_col] * params.scale, + head_q_row < params.seq_len_q)); + } + + workgroupBarrier(); + + var row_max = FLOAT_MIN; + var exp_sum = 0.0; + var out_regs: array<vec4<f32>, OUT_REGS_PER_LANE>; + for (var reg_idx = 0u; reg_idx < OUT_REGS_PER_LANE; reg_idx += 1u) { + out_regs[reg_idx] = vec4<f32>(0.0); + } + + let q_base = subgroup_id * HEAD_DIM_QK; + let subgroup_p_offset = subgroup_id * KV_TILE; + + for (var kv_tile = 0u; kv_tile < params.seq_len_kv; kv_tile += KV_TILE) { + let kv_count = min(KV_TILE, params.seq_len_kv - kv_tile); + let score_slots = min(SCORE_REGS_PER_LANE, (kv_count + subgroup_size - 1u) / subgroup_size); + let out_slots = min(OUT_REGS_PER_LANE, (V_CHUNKS + subgroup_size - 1u) / subgroup_size); + var local_scores: array<f32, SCORE_REGS_PER_LANE>; + for (var slot = 0u; slot < SCORE_REGS_PER_LANE; slot += 1u) { + local_scores[slot] = FLOAT_MIN; + } + + for (var vec_idx_local = local_id.x; vec_idx_local < kv_count * Q_CHUNKS; vec_idx_local += WG_SIZE) { + let kv_local = vec_idx_local / Q_CHUNKS; + let chunk = vec_idx_local % Q_CHUNKS; + let global_k_row = kv_tile + kv_local; + let k_vec_index = (k_head_offset + global_k_row * params.stride_k1 + chunk * 4u) >> 2u; + let k4 = K[k_vec_index]; + let kv_off = kv_local * KV_STAGE_STRIDE + chunk * 4u; + kv_shmem[kv_off + 0u] = k4.x; + kv_shmem[kv_off + 1u] = k4.y; + kv_shmem[kv_off + 2u] = k4.z; + kv_shmem[kv_off + 3u] = k4.w; + } + + workgroupBarrier(); + + var local_max = FLOAT_MIN; + if (row_active) { + for (var slot = 0u; slot < score_slots; slot += 1u) { + let kv_local = sg_inv_id + slot * subgroup_size; + if (kv_local >= kv_count) { + continue; + } + + let global_k_row = kv_tile + kv_local; + var dot_val = 0.0; + for (var chunk = 0u; chunk < Q_CHUNKS; chunk += 1u) { + let q_off = q_base + chunk * 4u; + let qv = vec4<f32>( + f32(q_shmem[q_off + 0u]), + f32(q_shmem[q_off + 1u]), + f32(q_shmem[q_off + 2u]), + f32(q_shmem[q_off + 3u])); + let kv_off = kv_local * KV_STAGE_STRIDE + chunk * 4u; + let kv = vec4<f32>( + f32(kv_shmem[kv_off + 0u]), + f32(kv_shmem[kv_off + 1u]), + f32(kv_shmem[kv_off + 2u]), + f32(kv_shmem[kv_off + 3u])); + dot_val += dot(qv, kv); + } +#ifdef LOGIT_SOFTCAP + dot_val = params.logit_softcap * tanh(dot_val); +#endif +#ifdef MASK + let mask_idx = mask_global_offset + subgroup_id * params.seq_len_kv + global_k_row; + dot_val += slope * f32(mask[mask_idx]); +#endif + local_scores[slot] = dot_val; + local_max = max(local_max, dot_val); + } + } + + let tile_max = subgroupMax(local_max); + let new_max = max(row_max, tile_max); + let cur_exp = exp(row_max - new_max); + exp_sum *= cur_exp; + for (var reg_idx = 0u; reg_idx < OUT_REGS_PER_LANE; reg_idx += 1u) { + out_regs[reg_idx] *= cur_exp; + } + + var local_sum = 0.0; + for (var slot = 0u; slot < score_slots; slot += 1u) { + let kv_local = sg_inv_id + slot * subgroup_size; + if (row_active && kv_local < kv_count) { + let p = exp(local_scores[slot] - new_max); + p_shmem[subgroup_p_offset + kv_local] = p; + local_sum += p; + } + } + + workgroupBarrier(); + + for (var vec_idx_local = local_id.x; vec_idx_local < kv_count * V_CHUNKS; vec_idx_local += WG_SIZE) { + let kv_local = vec_idx_local / V_CHUNKS; + let chunk = vec_idx_local % V_CHUNKS; + let global_v_row = kv_tile + kv_local; + let v_vec_index = (v_head_offset + global_v_row * params.stride_v1 + chunk * 4u) >> 2u; + let v4 = V[v_vec_index]; + let kv_off = kv_local * KV_STAGE_STRIDE + chunk * 4u; + kv_shmem[kv_off + 0u] = v4.x; + kv_shmem[kv_off + 1u] = v4.y; + kv_shmem[kv_off + 2u] = v4.z; + kv_shmem[kv_off + 3u] = v4.w; + } + + workgroupBarrier(); + + let tile_sum = subgroupAdd(local_sum); + exp_sum += tile_sum; + row_max = new_max; + + if (row_active) { + for (var reg_idx = 0u; reg_idx < out_slots; reg_idx += 1u) { + let chunk = sg_inv_id + reg_idx * subgroup_size; + if (chunk >= V_CHUNKS) { + continue; + } + + var acc = out_regs[reg_idx]; + for (var kv_local = 0u; kv_local < kv_count; kv_local += 1u) { + let p = p_shmem[subgroup_p_offset + kv_local]; + let kv_off = kv_local * KV_STAGE_STRIDE + chunk * 4u; + let v4 = vec4<f32>( + f32(kv_shmem[kv_off + 0u]), + f32(kv_shmem[kv_off + 1u]), + f32(kv_shmem[kv_off + 2u]), + f32(kv_shmem[kv_off + 3u])); + acc += p * v4; + } + out_regs[reg_idx] = acc; + } + } + + workgroupBarrier(); + } + +#ifdef SINKS + if (row_active) { + let sink_score = sinks[params.offset_sinks + head_idx]; + let sink_max = max(row_max, sink_score); + let sink_scale = exp(row_max - sink_max); + for (var reg_idx = 0u; reg_idx < OUT_REGS_PER_LANE; reg_idx += 1u) { + out_regs[reg_idx] *= sink_scale; + } + exp_sum = exp_sum * sink_scale + exp(sink_score - sink_max); + row_max = sink_max; + } +#endif + + if (row_active) { + let inv_exp_sum = select(0.0, 1.0 / exp_sum, exp_sum != 0.0); + let row_base = dst_global_offset + subgroup_id * dst2_stride; + let out_slots = min(OUT_REGS_PER_LANE, (V_CHUNKS + subgroup_size - 1u) / subgroup_size); + for (var reg_idx = 0u; reg_idx < out_slots; reg_idx += 1u) { + let chunk = sg_inv_id + reg_idx * subgroup_size; + if (chunk >= V_CHUNKS) { + continue; + } + let dst_vec_index = (row_base + chunk * 4u) >> 2u; + dst[dst_vec_index] = out_regs[reg_idx] * inv_exp_sum; + } + } +} diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_blk.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_blk.wgsl index 61107c6a985..b4f7c16c35d 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_blk.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_blk.wgsl @@ -15,7 +15,7 @@ struct Params { nblk1: u32, }; -@group(0) @binding(0) var<storage, read> mask: array<f16>; +@group(0) @binding(0) var<storage, read_write> mask: array<f16>; @group(0) @binding(1) var<storage, read_write> blk: array<u32>; @group(0) @binding(2) var<uniform> params: Params; diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_split.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_split.wgsl index a52575871ae..b1e234784a8 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_split.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/flash_attn_vec_split.wgsl @@ -1,8 +1,6 @@ -diagnostic(off, chromium.subgroup_matrix_uniformity); diagnostic(off, subgroup_uniformity); enable f16; enable subgroups; -enable chromium_experimental_subgroup_matrix; #ifdef KV_F32 #define KV_TYPE f32 @@ -13,19 +11,14 @@ enable chromium_experimental_subgroup_matrix; #define HEAD_DIM_QK 64 #define HEAD_DIM_V 64 - -#define SG_MAT_M 8 -#define SG_MAT_N 8 -#define SG_MAT_K 8 - -#define Q_TILE SG_MAT_M +#define KV_GRANULARITY 8 #define KV_TILE 16 #define WG_SIZE 64 #ifndef VEC_NE #define VEC_NE 4u #endif -#define KV_BLOCKS (KV_TILE / SG_MAT_N) +#define KV_BLOCKS (KV_TILE / KV_GRANULARITY) #define BLOCK_SIZE 32 #define BLOCKS_K ((HEAD_DIM_QK + BLOCK_SIZE - 1) / BLOCK_SIZE) @@ -97,6 +90,14 @@ struct Params { }; @group(0) @binding(0) var<storage, read_write> Q: array<f32>; +#ifdef KV_OVERLAP +#if defined(KV_Q4_0) || defined(KV_Q8_0) +@group(0) @binding(1) var<storage, read_write> K: array<KV_TYPE>; +#else +@group(0) @binding(1) var<storage, read_write> K: array<vec4<KV_TYPE>>; +#endif +#define V K +#else #if defined(KV_Q4_0) || defined(KV_Q8_0) @group(0) @binding(1) var<storage, read_write> K: array<KV_TYPE>; #else @@ -107,7 +108,22 @@ struct Params { #else @group(0) @binding(2) var<storage, read_write> V: array<vec4<KV_TYPE>>; #endif +#endif #if defined(MASK) && defined(SINKS) +#ifdef KV_OVERLAP +@group(0) @binding(2) var<storage, read_write> mask: array<f16>; +@group(0) @binding(3) var<storage, read_write> sinks: array<f32>; +#ifdef BLK +#define BLK_BINDING 4 +#define TMP_BINDING 5 +#define DST_BINDING 6 +#define PARAMS_BINDING 7 +#else +#define TMP_BINDING 4 +#define DST_BINDING 5 +#define PARAMS_BINDING 6 +#endif +#else @group(0) @binding(3) var<storage, read_write> mask: array<f16>; @group(0) @binding(4) var<storage, read_write> sinks: array<f32>; #ifdef BLK @@ -120,7 +136,21 @@ struct Params { #define DST_BINDING 6 #define PARAMS_BINDING 7 #endif +#endif #elif defined(MASK) +#ifdef KV_OVERLAP +@group(0) @binding(2) var<storage, read_write> mask: array<f16>; +#ifdef BLK +#define BLK_BINDING 3 +#define TMP_BINDING 4 +#define DST_BINDING 5 +#define PARAMS_BINDING 6 +#else +#define TMP_BINDING 3 +#define DST_BINDING 4 +#define PARAMS_BINDING 5 +#endif +#else @group(0) @binding(3) var<storage, read_write> mask: array<f16>; #ifdef BLK #define BLK_BINDING 4 @@ -132,16 +162,30 @@ struct Params { #define DST_BINDING 5 #define PARAMS_BINDING 6 #endif +#endif #elif defined(SINKS) +#ifdef KV_OVERLAP +@group(0) @binding(2) var<storage, read_write> sinks: array<f32>; +#define TMP_BINDING 3 +#define DST_BINDING 4 +#define PARAMS_BINDING 5 +#else @group(0) @binding(3) var<storage, read_write> sinks: array<f32>; #define TMP_BINDING 4 #define DST_BINDING 5 #define PARAMS_BINDING 6 +#endif +#else +#ifdef KV_OVERLAP +#define TMP_BINDING 2 +#define DST_BINDING 3 +#define PARAMS_BINDING 4 #else #define TMP_BINDING 3 #define DST_BINDING 4 #define PARAMS_BINDING 5 #endif +#endif #ifdef BLK @group(0) @binding(BLK_BINDING) var<storage, read_write> blk: array<u32>; @@ -153,7 +197,7 @@ struct Params { // Just a very small float value. const FLOAT_MIN: f32 = -1.0e9; -var<workgroup> q_shmem: array<f16, Q_TILE * HEAD_DIM_QK>; +var<workgroup> q_shmem: array<f16, HEAD_DIM_QK>; #ifndef KV_DIRECT const kv_shmem_size = KV_TILE * max(HEAD_DIM_QK, HEAD_DIM_V); @@ -161,31 +205,27 @@ const kv_shmem_size = KV_TILE * max(HEAD_DIM_QK, HEAD_DIM_V); var<workgroup> kv_shmem: array<f16, kv_shmem_size>; #endif -var<workgroup> o_shmem: array<f16, Q_TILE * HEAD_DIM_V>; +var<workgroup> o_shmem: array<f16, HEAD_DIM_V>; #ifdef MASK // storage for mask values -var<workgroup> mask_shmem: array<f16, Q_TILE * KV_TILE>; +var<workgroup> mask_shmem: array<f16, KV_TILE>; #endif // note that we reuse the same storage for both since we only need one at a time -var<workgroup> inter_shmem: array<f16, Q_TILE * KV_TILE>; +var<workgroup> inter_shmem: array<f16, KV_TILE>; // Storage for row max and exp sum during online softmax -var<workgroup> row_max_shmem: array<f32, Q_TILE>; -var<workgroup> exp_sum_shmem: array<f32, Q_TILE>; -var<workgroup> blk_state_wg: u32; - -fn calc_softmax_term(kv_idx: u32, q_tile_row: u32, slope: f32, has_bias: bool, apply_mask: bool) -> f32 { +fn calc_softmax_term(kv_idx: u32, slope: f32, has_bias: bool, apply_mask: bool) -> f32 { var v = select(FLOAT_MIN, - f32(inter_shmem[kv_idx + q_tile_row * KV_TILE]) * params.scale, + f32(inter_shmem[kv_idx]) * params.scale, kv_idx < KV_TILE); #ifdef LOGIT_SOFTCAP v = params.logit_softcap * tanh(v); #endif #ifdef MASK if (apply_mask) { - var mask_val = select(0.0,f32(mask_shmem[q_tile_row * KV_TILE + kv_idx]), kv_idx < KV_TILE); + var mask_val = select(0.0, f32(mask_shmem[kv_idx]), kv_idx < KV_TILE); v += select(mask_val, slope * mask_val, has_bias); } #endif @@ -199,19 +239,17 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, @builtin(subgroup_size) subgroup_size: u32, @builtin(num_subgroups) num_subgroups: u32, @builtin(subgroup_invocation_id) sg_inv_id: u32) { + // Vec path processes exactly one query row per workgroup, so subgroup 0 can + // keep the running softmax state in private storage. + var row_max = FLOAT_MIN; + var exp_sum = 0.0; - // initialize row max for online softmax - for (var i = local_id.x; i < Q_TILE; i += WG_SIZE) { - row_max_shmem[i] = FLOAT_MIN; - exp_sum_shmem[i] = 0.0; - } - - for (var i = local_id.x; i < Q_TILE * HEAD_DIM_V; i += WG_SIZE) { + for (var i = local_id.x; i < HEAD_DIM_V; i += WG_SIZE) { o_shmem[i] = 0.0; } // workgroups per head/batch - let wg_per_head = (params.seq_len_q + Q_TILE - 1u) / Q_TILE; + let wg_per_head = params.seq_len_q; let wg_per_batch = wg_per_head * params.n_heads; let dst2_stride = HEAD_DIM_V * params.n_heads; @@ -235,9 +273,9 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, let k_head_offset = k_batch_offset + k_head_idx * params.stride_k2; let v_head_offset = v_batch_offset + v_head_idx * params.stride_v2; - // starting Q row for this workgroup + // Vec path handles one Q row per workgroup. let wg_in_head = wg_in_batch % wg_per_head; - let q_row_start = wg_in_head * Q_TILE; + let q_row_start = wg_in_head; #ifdef MASK // mask offset @@ -248,21 +286,18 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, let has_bias = params.max_bias > 0.0; let slope = select(1.0, select(pow(params.m1, 2.0 * (head - params.n_head_log2) + 1.0), pow(params.m0, head + 1.0), head < params.n_head_log2), has_bias); - // load q tile into shared memory - for (var elem_idx = local_id.x; elem_idx < Q_TILE * HEAD_DIM_QK; elem_idx += WG_SIZE) { - let q_row = elem_idx / HEAD_DIM_QK; - let q_col = elem_idx % HEAD_DIM_QK; - let head_q_row = q_row_start + q_row; - let global_q_row_offset = q_head_offset + head_q_row * params.stride_q1; + // load the single Q row into shared memory + for (var elem_idx = local_id.x; elem_idx < HEAD_DIM_QK; elem_idx += WG_SIZE) { + let global_q_row_offset = q_head_offset + q_row_start * params.stride_q1; q_shmem[elem_idx] = f16(select( 0.0, - Q[global_q_row_offset + q_col], - head_q_row < params.seq_len_q && q_col < HEAD_DIM_QK)); + Q[global_q_row_offset + elem_idx], + q_row_start < params.seq_len_q)); } for (var kv_tile = iwg * KV_TILE; kv_tile < params.seq_len_kv; kv_tile += KV_TILE * params.nwg) { #ifdef BLK - let q_blk = q_row_start / Q_TILE; + let q_blk = q_row_start; let kv_blk = kv_tile / KV_TILE; let blk_batch = select(0u, batch_idx, params.stride_mask3 > 0u); let blk_idx = params.blk_base + (blk_batch * params.blk_nblk1 + q_blk) * params.blk_nblk0 + kv_blk; @@ -270,13 +305,9 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, #else let blk_state_local = 1u; #endif - if (local_id.x == 0u) { - blk_state_wg = blk_state_local; - } - workgroupBarrier(); - let blk_state = blk_state_wg; + let blk_state = blk_state_local; let skip_tile = blk_state == 0u; - for (var elem_idx = local_id.x; elem_idx < Q_TILE * KV_TILE; elem_idx += WG_SIZE) { + for (var elem_idx = local_id.x; elem_idx < KV_TILE; elem_idx += WG_SIZE) { inter_shmem[elem_idx] = f16(0.0); } @@ -360,20 +391,14 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, let num_of_threads = subgroup_size / VEC_NE; let tx = sg_inv_id % num_of_threads; let ty = sg_inv_id / num_of_threads; - for (var q_tile_row = subgroup_id; q_tile_row < Q_TILE; q_tile_row += num_subgroups) { - let global_q_row = q_row_start + q_tile_row; - if (global_q_row >= params.seq_len_q) { - continue; - } - let local_q_row_offset = q_tile_row * HEAD_DIM_QK; - + if (subgroup_id == 0u && q_row_start < params.seq_len_q) { for (var kv_base : u32 = 0u; kv_base < KV_TILE; kv_base += VEC_NE) { let kv_idx = kv_base + ty; var partial_sum: f32 = 0.0; let kv_valid = kv_idx < KV_TILE && (kv_tile + kv_idx) < params.seq_len_kv; if (kv_valid) { for (var i = tx; i < (HEAD_DIM_QK / 4u); i += num_of_threads) { - let q_off = local_q_row_offset + i * 4u; + let q_off = i * 4u; let qv = vec4<f32>( f32(q_shmem[q_off + 0u]), @@ -410,8 +435,7 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, let sum_bcast = subgroupShuffle(sum, num_of_threads * ty); if (tx == 0u && kv_valid) { - let dst_idx = q_tile_row * KV_TILE + kv_idx; - inter_shmem[dst_idx] = f16(sum_bcast); + inter_shmem[kv_idx] = f16(sum_bcast); } } } @@ -422,13 +446,10 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, let apply_mask = !skip_tile && (blk_state != 2u); if (apply_mask) { // load mask tile into shared memory for this KV block - for (var elem_idx = local_id.x; elem_idx < Q_TILE * KV_TILE; elem_idx += WG_SIZE) { - let mask_row = elem_idx / KV_TILE; - let mask_col = elem_idx % KV_TILE; - let global_q_row = q_row_start + mask_row; - let global_k_col = kv_tile + mask_col; - let mask_in_bounds = global_q_row < params.seq_len_q && global_k_col < params.seq_len_kv; - let mask_idx = mask_global_offset + mask_row * params.seq_len_kv + global_k_col; + for (var elem_idx = local_id.x; elem_idx < KV_TILE; elem_idx += WG_SIZE) { + let global_k_col = kv_tile + elem_idx; + let mask_in_bounds = q_row_start < params.seq_len_q && global_k_col < params.seq_len_kv; + let mask_idx = mask_global_offset + global_k_col; mask_shmem[elem_idx] = select(0.0, mask[mask_idx], mask_in_bounds); } } @@ -439,50 +460,40 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, workgroupBarrier(); // online softmax - if (!skip_tile) { - for (var q_tile_row = subgroup_id; q_tile_row < Q_TILE; q_tile_row += num_subgroups) { - let global_q_row = q_row_start + q_tile_row; - if (global_q_row >= params.seq_len_q) { - break; - } - - var prev_max = row_max_shmem[q_tile_row]; - var final_max = prev_max; - // pass 1: compute final max across the full KV tile in chunks - for (var kv_offset = 0u; kv_offset < KV_TILE; kv_offset += subgroup_size) { - let kv_idx = kv_offset + sg_inv_id; - let kv_valid = kv_tile + kv_idx < params.seq_len_kv && kv_idx < KV_TILE; - let softmax_term = select(FLOAT_MIN, - calc_softmax_term(kv_idx, q_tile_row, slope, has_bias, apply_mask), - kv_valid); - final_max = subgroupMax(max(final_max, softmax_term)); - } + if (!skip_tile && subgroup_id == 0u && q_row_start < params.seq_len_q) { + var prev_max = row_max; + var final_max = prev_max; + // pass 1: compute final max across the full KV tile in chunks + for (var kv_offset = 0u; kv_offset < KV_TILE; kv_offset += subgroup_size) { + let kv_idx = kv_offset + sg_inv_id; + let kv_valid = kv_tile + kv_idx < params.seq_len_kv && kv_idx < KV_TILE; + let softmax_term = select(FLOAT_MIN, + calc_softmax_term(kv_idx, slope, has_bias, apply_mask), + kv_valid); + final_max = subgroupMax(max(final_max, softmax_term)); + } - var total_exp_term: f32 = 0.0; - // pass 2: compute exp sum and write P using final_max - for (var kv_offset = 0u; kv_offset < KV_TILE; kv_offset += subgroup_size) { - let kv_idx = kv_offset + sg_inv_id; - let softmax_term = calc_softmax_term(kv_idx, q_tile_row, slope, has_bias, apply_mask); - let cur_p = select(0.0, - exp(softmax_term - final_max), - kv_tile + kv_idx < params.seq_len_kv && kv_idx < KV_TILE); - total_exp_term += subgroupAdd(cur_p); - if (kv_idx < KV_TILE) { - inter_shmem[kv_idx + q_tile_row * KV_TILE] = f16(cur_p); - } + var total_exp_term: f32 = 0.0; + // pass 2: compute exp sum and write P using final_max + for (var kv_offset = 0u; kv_offset < KV_TILE; kv_offset += subgroup_size) { + let kv_idx = kv_offset + sg_inv_id; + let softmax_term = calc_softmax_term(kv_idx, slope, has_bias, apply_mask); + let cur_p = select(0.0, + exp(softmax_term - final_max), + kv_tile + kv_idx < params.seq_len_kv && kv_idx < KV_TILE); + total_exp_term += subgroupAdd(cur_p); + if (kv_idx < KV_TILE) { + inter_shmem[kv_idx] = f16(cur_p); } + } - let cur_exp = exp(prev_max - final_max); + let cur_exp = exp(prev_max - final_max); - if (sg_inv_id == 0) { - row_max_shmem[q_tile_row] = final_max; - exp_sum_shmem[q_tile_row] = exp_sum_shmem[q_tile_row] * cur_exp + total_exp_term; - } + row_max = final_max; + exp_sum = exp_sum * cur_exp + total_exp_term; - for (var elem_idx = sg_inv_id; elem_idx < HEAD_DIM_V; elem_idx += subgroup_size) { - let idx = q_tile_row * HEAD_DIM_V + elem_idx; - o_shmem[idx] = f16(f32(o_shmem[idx]) * cur_exp); - } + for (var elem_idx = sg_inv_id; elem_idx < HEAD_DIM_V; elem_idx += subgroup_size) { + o_shmem[elem_idx] = f16(f32(o_shmem[elem_idx]) * cur_exp); } } @@ -562,15 +573,13 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, workgroupBarrier(); if (!skip_tile) { - // we have P (Q_TILE x KV_TILE) in inter_shmem and V (KV_TILE x head_dim_v) in kv_shmem + // we have P (KV_TILE) in inter_shmem and V (KV_TILE x head_dim_v) in kv_shmem // we want to compute O += P * V across the full KV tile let ne_threads : u32 = VEC_NE; let nl_threads = max(1u, subgroup_size / ne_threads); let tx_pv = sg_inv_id % nl_threads; let ty_pv = sg_inv_id / nl_threads; - for (var q_tile_row = subgroup_id; - q_tile_row < Q_TILE; - q_tile_row += num_subgroups) { + if (subgroup_id == 0u && q_row_start < params.seq_len_q) { for (var vec_col = tx_pv; vec_col < (HEAD_DIM_V / 4u); vec_col += nl_threads) { var lo = vec4<f32>(0.0, 0.0, 0.0, 0.0); for (var cc = 0u; cc < KV_TILE / ne_threads; cc += 1u) { @@ -580,7 +589,7 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, continue; } - let p = f32(inter_shmem[kv_idx + q_tile_row * KV_TILE]); + let p = f32(inter_shmem[kv_idx]); #ifdef KV_DIRECT let v_idx = v_head_offset + v_row * params.stride_v1 + vec_col * 4u; let v4 = vec4<f32>(V[v_idx >> 2u]); @@ -621,11 +630,10 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, if (ty_pv == 0u) { let elem_base = vec_col * 4u; - let o_base_idx = q_tile_row * HEAD_DIM_V + elem_base; - o_shmem[o_base_idx + 0u] = f16(f32(o_shmem[o_base_idx + 0u]) + lo_x); - o_shmem[o_base_idx + 1u] = f16(f32(o_shmem[o_base_idx + 1u]) + lo_y); - o_shmem[o_base_idx + 2u] = f16(f32(o_shmem[o_base_idx + 2u]) + lo_z); - o_shmem[o_base_idx + 3u] = f16(f32(o_shmem[o_base_idx + 3u]) + lo_w); + o_shmem[elem_base + 0u] = f16(f32(o_shmem[elem_base + 0u]) + lo_x); + o_shmem[elem_base + 1u] = f16(f32(o_shmem[elem_base + 1u]) + lo_y); + o_shmem[elem_base + 2u] = f16(f32(o_shmem[elem_base + 2u]) + lo_z); + o_shmem[elem_base + 3u] = f16(f32(o_shmem[elem_base + 3u]) + lo_w); } } } @@ -637,70 +645,46 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, #ifdef SINKS // Sinks are global terms and must be applied exactly once across split workgroups. - if (iwg == 0u) { - for (var q_tile_row = subgroup_id; - q_tile_row < Q_TILE; - q_tile_row += num_subgroups) { - let global_q_row = q_row_start + q_tile_row; - if (global_q_row >= params.seq_len_q) { - break; - } - - var prev_max = row_max_shmem[q_tile_row]; - - // for non-sink threads, exp(FLOAT_MIN) effectively zeroes out their contribution to the sum - let sink_val = select(FLOAT_MIN, sinks[params.offset_sinks + head_idx], sg_inv_id == 0); - let new_max = subgroupMax(max(prev_max, sink_val)); - let max_exp = exp(prev_max - new_max); - let sink_exp = exp(sink_val - new_max); - - let sink_exp_sum = subgroupAdd(sink_exp); - - if (sg_inv_id == 0) { - row_max_shmem[q_tile_row] = new_max; - exp_sum_shmem[q_tile_row] = exp_sum_shmem[q_tile_row] * max_exp + sink_exp_sum; - } - - for (var elem_idx = sg_inv_id; elem_idx < HEAD_DIM_V; elem_idx += subgroup_size) { - let idx = q_tile_row * HEAD_DIM_V + elem_idx; - o_shmem[idx] = f16(f32(o_shmem[idx]) * max_exp); - } + if (iwg == 0u && subgroup_id == 0u && q_row_start < params.seq_len_q) { + var prev_max = row_max; + + // for non-sink threads, exp(FLOAT_MIN) effectively zeroes out their contribution to the sum + let sink_val = select(FLOAT_MIN, sinks[params.offset_sinks + head_idx], sg_inv_id == 0u); + let new_max = subgroupMax(max(prev_max, sink_val)); + let max_exp = exp(prev_max - new_max); + let sink_exp = exp(sink_val - new_max); + + let sink_exp_sum = subgroupAdd(sink_exp); + + row_max = new_max; + exp_sum = exp_sum * max_exp + sink_exp_sum; + + for (var elem_idx = sg_inv_id; elem_idx < HEAD_DIM_V; elem_idx += subgroup_size) { + o_shmem[elem_idx] = f16(f32(o_shmem[elem_idx]) * max_exp); } - workgroupBarrier(); } + workgroupBarrier(); #endif let rows_per_batch = params.n_heads * params.seq_len_q; - for (var q_tile_row = subgroup_id; - q_tile_row < Q_TILE; - q_tile_row += num_subgroups) { - - let global_q_row = q_row_start + q_tile_row; - if (global_q_row >= params.seq_len_q) { break; } - + if (subgroup_id == 0u && q_row_start < params.seq_len_q) { if (params.nwg == 1u) { - let exp_sum = exp_sum_shmem[q_tile_row]; let scale = select(0.0, 1.0 / exp_sum, exp_sum != 0.0); - let row_base: u32 = - params.offset_dst + batch_idx * dst3_stride + global_q_row * dst2_stride + head_idx * HEAD_DIM_V; + let row_base: u32 = params.offset_dst + batch_idx * dst3_stride + q_row_start * dst2_stride + + head_idx * HEAD_DIM_V; for (var elem_base = sg_inv_id * 4u; elem_base < HEAD_DIM_V; elem_base += subgroup_size * 4u) { - let i0 = q_tile_row * HEAD_DIM_V + (elem_base + 0u); - let i1 = q_tile_row * HEAD_DIM_V + (elem_base + 1u); - let i2 = q_tile_row * HEAD_DIM_V + (elem_base + 2u); - let i3 = q_tile_row * HEAD_DIM_V + (elem_base + 3u); - let v = vec4<f32>( - f32(o_shmem[i0]) * scale, - f32(o_shmem[i1]) * scale, - f32(o_shmem[i2]) * scale, - f32(o_shmem[i3]) * scale + f32(o_shmem[elem_base + 0u]) * scale, + f32(o_shmem[elem_base + 1u]) * scale, + f32(o_shmem[elem_base + 2u]) * scale, + f32(o_shmem[elem_base + 3u]) * scale ); let dst_vec_index: u32 = (row_base + elem_base) >> 2u; dst[dst_vec_index] = v; } } else { - let rid = batch_idx * rows_per_batch + head_idx * params.seq_len_q + global_q_row; + let rid = batch_idx * rows_per_batch + head_idx * params.seq_len_q + q_row_start; let tmp_row_data_base = params.tmp_data_base + rid * (HEAD_DIM_V * params.nwg) + iwg * HEAD_DIM_V; let tmp_row_stats_base = params.tmp_stats_base + rid * (2u * params.nwg) + 2u * iwg; @@ -708,21 +692,16 @@ fn main(@builtin(workgroup_id) wg_id: vec3<u32>, elem_base < HEAD_DIM_V; elem_base += subgroup_size * 4u) { - let i0 = q_tile_row * HEAD_DIM_V + (elem_base + 0u); - let i1 = q_tile_row * HEAD_DIM_V + (elem_base + 1u); - let i2 = q_tile_row * HEAD_DIM_V + (elem_base + 2u); - let i3 = q_tile_row * HEAD_DIM_V + (elem_base + 3u); - let tbase = tmp_row_data_base + elem_base; - tmp[tbase + 0u] = f32(o_shmem[i0]); - tmp[tbase + 1u] = f32(o_shmem[i1]); - tmp[tbase + 2u] = f32(o_shmem[i2]); - tmp[tbase + 3u] = f32(o_shmem[i3]); + tmp[tbase + 0u] = f32(o_shmem[elem_base + 0u]); + tmp[tbase + 1u] = f32(o_shmem[elem_base + 1u]); + tmp[tbase + 2u] = f32(o_shmem[elem_base + 2u]); + tmp[tbase + 3u] = f32(o_shmem[elem_base + 3u]); } if (sg_inv_id == 0u) { - tmp[tmp_row_stats_base + 0u] = exp_sum_shmem[q_tile_row]; - tmp[tmp_row_stats_base + 1u] = row_max_shmem[q_tile_row]; + tmp[tmp_row_stats_base + 0u] = exp_sum; + tmp[tmp_row_stats_base + 1u] = row_max; } } } diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/get_rows.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/get_rows.wgsl index 1415798fa6b..5710cd35469 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/get_rows.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/get_rows.wgsl @@ -27,6 +27,24 @@ fn copy_elements(src_base: u32, dst_base: u32, offset: u32) { } #endif +#ifdef Q1_0 +fn copy_elements(src_base: u32, dst_base: u32, offset: u32) { + let block_byte_base = (src_base + offset) * 18; + let d = load_f16_as_f32_at_src(block_byte_base); + for (var j: u32 = 0u; j < 4u; j++) { + let q_packed = load_u32_at_src(block_byte_base + 2u + j * 4u); + let dst_base128 = dst_base + offset * 128u + j * 32u; + for (var k: u32 = 0; k < 4u; k++) { + let q_byte = get_byte(q_packed, k); + for (var bit: u32 = 0; bit < 8u; bit++) { + let w = select(-d, d, ((q_byte >> bit) & 1u) != 0u); + dst[dst_base128 + k * 8u + bit] = w; + } + } + } +} +#endif + #ifdef Q4_0 fn copy_elements(src_base: u32, dst_base: u32, offset: u32) { let block_byte_base = (src_base + offset) * 18; // Block stride: 18 bytes diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl index 5a323818260..15b22c4f731 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_decls.tmpl @@ -61,6 +61,39 @@ fn init_shmem_src1(thread_id: u32, batch_offset: u32, offset_n: u32, k_outer: u3 #endif // INIT_SRC1_SHMEM_FLOAT #endif +#ifdef INIT_SRC0_SHMEM_Q1_0 +const BLOCK_SIZE = 128u; +const BLOCK_SIZE_BYTES = 18u; +const NQ = 8u; // 8 weights (1 byte of qs) per thread per iteration + +fn init_shmem_src0(thread_id: u32, batch_offset: u32, offset_m: u32, k_outer: u32) { + for (var i = thread_id * NQ; i < TILE_SRC0_SHMEM; i += TOTAL_WORKGROUP_SIZE * NQ) { + let tile_m = i / TILE_K; + let tile_k_start = i % TILE_K; + let global_m = offset_m + tile_m; + let global_k_start = k_outer + tile_k_start; + + if (global_m >= params.m) { + break; + } + + let block_k = global_k_start / BLOCK_SIZE; + let byte_in_block = (global_k_start % BLOCK_SIZE) / 8u; + let src0_idx = batch_offset + global_m * params.stride_01 + block_k; + let block_byte_base = src0_idx * BLOCK_SIZE_BYTES; + let d = load_f16_at_src0(block_byte_base); + let q_byte = load_u32_at_src0(block_byte_base + 2u + byte_in_block) & 0xFFu; + + for (var bit = 0u; bit < NQ; bit++) { + let global_k = global_k_start + bit; + if (global_k < params.k) { + shmem[i + bit] = select(-d, d, ((q_byte >> bit) & 1u) != 0u); + } + } + } +} +#endif // INIT_SRC0_SHMEM_Q1_0 + #ifdef INIT_SRC0_SHMEM_Q4_0 const BLOCK_SIZE = 32u; const BLOCK_SIZE_BYTES = 18u; diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.wgsl index 97c9f6d7a09..a8000439bfb 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/mul_mat_vec.wgsl @@ -128,6 +128,38 @@ fn main( } #endif +#ifdef MUL_ACC_Q1_0 +#define BLOCK_SIZE 128 +#define BLOCK_SIZE_BYTES 18 +#define THREADS_PER_BLOCK 16 +#define ELEMS_PER_THREAD (BLOCK_SIZE/THREADS_PER_BLOCK) + + let num_blocks = params.k / BLOCK_SIZE; + let thread_within_block = thread_id % THREADS_PER_BLOCK; + for (var block = thread_id / THREADS_PER_BLOCK; block < num_blocks; block += WG_SIZE / THREADS_PER_BLOCK) { + let x_base = src1_idx_base + block * BLOCK_SIZE + thread_within_block * ELEMS_PER_THREAD; + var x_block: array<f32, ELEMS_PER_THREAD>; + for (var i = 0u; i < ELEMS_PER_THREAD; i++) { + x_block[i] = f32(src1[x_base + i]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + let d = f32(load_f16_at_src0(block_byte_base)); + let q_byte = load_u32_at_src0(block_byte_base + 2u + thread_within_block) & 0xFFu; + var row_sum = 0.0; + for (var bit = 0u; bit < 8u; bit++) { + let w = select(-d, d, ((q_byte >> bit) & 1u) != 0u); + row_sum += w * x_block[bit]; + } + acc[row] += row_sum; + } + } + } +#endif + #ifdef MUL_ACC_Q4_0 #define BLOCK_SIZE 32 #define BLOCK_SIZE_BYTES 18 @@ -812,6 +844,520 @@ fn main( } #endif +#ifdef MUL_ACC_IQ1_S +#define BLOCK_SIZE 256 +#define BLOCK_SIZE_BYTES 50 +#define THREADS_PER_BLOCK 16 + + let tid = thread_id % THREADS_PER_BLOCK; + let block_group = thread_id / THREADS_PER_BLOCK; + let num_block_groups: u32 = WG_SIZE / THREADS_PER_BLOCK; + + let sub_blk = tid / 2u; + let half = tid % 2u; + let slot0 = half * 2u; + let y_offset = sub_blk * 32u + slot0 * 8u; + + let num_blocks = params.k / BLOCK_SIZE; + + for (var block = block_group; block < num_blocks; block += num_block_groups) { + let x_base = src1_idx_base + block * BLOCK_SIZE + y_offset; + var x_block: array<f32, 16>; + for (var i = 0u; i < 16u; i++) { + x_block[i] = f32(src1[x_base + i]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + + let d = f32(load_f16_at_src0(block_byte_base)); + let qh = load_u32_at_src0(block_byte_base + 34u + sub_blk * 2u) & 0xFFFFu; + let dl = d * f32(2u * ((qh >> 12u) & 7u) + 1u); + let delta = select(IQ1_DELTA, -IQ1_DELTA, (qh & 0x8000u) != 0u); + let qs_w = load_u32_at_src0(block_byte_base + 2u + sub_blk * 4u); + + var row_sum = 0.0; + for (var ll = 0u; ll < 2u; ll++) { + let l = slot0 + ll; + let qs_byte = get_byte(qs_w, l); + let ig = (qs_byte | (((qh >> (3u * l)) & 7u) << 8u)) * 8u; + let gw = iq1_grid[ig / 16u]; + let bit_base = (ig % 16u) * 2u; + for (var j = 0u; j < 8u; j++) { + let g = (gw >> (bit_base + j * 2u)) & 3u; + let gs = select(f32(g), f32(g) - 4.0, (g & 2u) != 0u); + row_sum += dl * (gs + delta) * x_block[ll * 8u + j]; + } + } + acc[row] += row_sum; + } + } + } +#endif + +#ifdef MUL_ACC_IQ1_M +#define BLOCK_SIZE 256 +#define BLOCK_SIZE_BYTES 56 +#define THREADS_PER_BLOCK 16 + + let tid = thread_id % THREADS_PER_BLOCK; + let block_group = thread_id / THREADS_PER_BLOCK; + let num_block_groups: u32 = WG_SIZE / THREADS_PER_BLOCK; + + let sub_blk = tid / 2u; + let half = tid % 2u; + let slot0 = half * 2u; + let y_offset = sub_blk * 32u + slot0 * 8u; + + let num_blocks = params.k / BLOCK_SIZE; + + for (var block = block_group; block < num_blocks; block += num_block_groups) { + let x_base = src1_idx_base + block * BLOCK_SIZE + y_offset; + var x_block: array<f32, 16>; + for (var i = 0u; i < 16u; i++) { + x_block[i] = f32(src1[x_base + i]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + + let sc_lo = load_u32_at_src0(block_byte_base + 48u); + let sc_hi = load_u32_at_src0(block_byte_base + 52u); + let sc0 = sc_lo & 0xFFFFu; + let sc1 = (sc_lo >> 16u) & 0xFFFFu; + let sc2 = sc_hi & 0xFFFFu; + let sc3 = (sc_hi >> 16u) & 0xFFFFu; + let d_bits = (sc0 >> 12u) | ((sc1 >> 8u) & 0xF0u) | ((sc2 >> 4u) & 0xF00u) | (sc3 & 0xF000u); + let d = f32(bitcast<vec2<f16>>(d_bits)[0]); + + let sc_u16 = select(select(sc2, sc3, sub_blk >= 6u), + select(sc0, sc1, sub_blk >= 2u), + sub_blk < 4u); + + let qs_w = load_u32_at_src0(block_byte_base + sub_blk * 4u); + let qh = load_u32_at_src0(block_byte_base + 32u + sub_blk * 2u) & 0xFFFFu; + let qh_lo = qh & 0xFFu; + let qh_hi = (qh >> 8u) & 0xFFu; + + var row_sum = 0.0; + for (var ll = 0u; ll < 2u; ll++) { + let l = slot0 + ll; + let bit_off = 6u * (sub_blk % 2u) + 3u * (l / 2u); + let sub_scale = (sc_u16 >> bit_off) & 0x7u; + let dl = d * f32(2u * sub_scale + 1u); + let qh_byte = select(qh_lo, qh_hi, l >= 2u); + let ll2 = l % 2u; + let grid_idx = get_byte(qs_w, l) | (((qh_byte >> (4u * ll2)) & 7u) << 8u); + let delta = select(IQ1_DELTA, -IQ1_DELTA, ((qh_byte >> (3u + 4u * ll2)) & 1u) != 0u); + let ig = grid_idx * 8u; + let gw = iq1_grid[ig / 16u]; + let bit_base = (ig % 16u) * 2u; + for (var j = 0u; j < 8u; j++) { + let g = (gw >> (bit_base + j * 2u)) & 3u; + let gs = select(f32(g), f32(g) - 4.0, (g & 2u) != 0u); + row_sum += dl * (gs + delta) * x_block[ll * 8u + j]; + } + } + acc[row] += row_sum; + } + } + } +#endif + +#ifdef MUL_ACC_IQ2_XXS +#define BLOCK_SIZE 256 +#define BLOCK_SIZE_BYTES 66 +#define THREADS_PER_BLOCK 16 + + let tid = thread_id % THREADS_PER_BLOCK; + let block_group = thread_id / THREADS_PER_BLOCK; + let num_block_groups: u32 = WG_SIZE / THREADS_PER_BLOCK; + + let sub_blk = tid / 2u; + let half = tid % 2u; + let slot0 = half * 2u; + let y_offset = sub_blk * 32u + slot0 * 8u; + + let num_blocks = params.k / BLOCK_SIZE; + + for (var block = block_group; block < num_blocks; block += num_block_groups) { + let x_base = src1_idx_base + block * BLOCK_SIZE + y_offset; + var x_block: array<f32, 16>; + for (var i = 0u; i < 16u; i++) { + x_block[i] = f32(src1[x_base + i]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + let d = f32(load_f16_at_src0(block_byte_base)); + let aux_lo = load_u32_at_src0(block_byte_base + 2u + sub_blk * 8u); + let aux_hi = load_u32_at_src0(block_byte_base + 2u + sub_blk * 8u + 4u); + let ls = aux_hi >> 28u; + let db = d * (0.5 + f32(ls)) * 0.25; + + var row_sum = 0.0; + for (var ll = 0u; ll < 2u; ll++) { + let l = slot0 + ll; + let grid_idx = (aux_lo >> (8u * l)) & 0xFFu; + let signs_idx = (aux_hi >> (7u * l)) & 0x7Fu; + let signs = (ksigns_iq2xs[signs_idx / 4u] >> ((signs_idx % 4u) * 8u)) & 0xFFu; + let gw_lo = iq2xxs_grid[grid_idx * 2u]; + let gw_hi = iq2xxs_grid[grid_idx * 2u + 1u]; + for (var j = 0u; j < 8u; j++) { + let gw = select(gw_hi, gw_lo, j < 4u); + let b = f32((gw >> ((j & 3u) * 8u)) & 0xFFu); + let s = select(1.0, -1.0, ((signs >> j) & 1u) != 0u); + row_sum += db * b * s * x_block[ll * 8u + j]; + } + } + acc[row] += row_sum; + } + } + } +#endif + +#ifdef MUL_ACC_IQ2_XS +#define BLOCK_SIZE 256 +#define BLOCK_SIZE_BYTES 74 +#define THREADS_PER_BLOCK 16 + + let tid = thread_id % THREADS_PER_BLOCK; + let block_group = thread_id / THREADS_PER_BLOCK; + let num_block_groups: u32 = WG_SIZE / THREADS_PER_BLOCK; + + let sub_blk = tid / 2u; + let half = tid % 2u; + let slot0 = half * 2u; + let y_offset = sub_blk * 32u + slot0 * 8u; + + let num_blocks = params.k / BLOCK_SIZE; + + for (var block = block_group; block < num_blocks; block += num_block_groups) { + let x_base = src1_idx_base + block * BLOCK_SIZE + y_offset; + var x_block: array<f32, 16>; + for (var i = 0u; i < 16u; i++) { + x_block[i] = f32(src1[x_base + i]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + let d = f32(load_f16_at_src0(block_byte_base)); + let qs_lo = load_u32_at_src0(block_byte_base + 2u + sub_blk * 8u); + let qs_hi = load_u32_at_src0(block_byte_base + 2u + sub_blk * 8u + 4u); + let scales_word = load_u32_at_src0(block_byte_base + 66u + (sub_blk / 4u) * 4u); + let scales_byte = get_byte(scales_word, sub_blk % 4u); + + var row_sum = 0.0; + for (var ll = 0u; ll < 2u; ll++) { + let l = slot0 + ll; + let qs_word = select(qs_hi, qs_lo, l < 2u); + let half2 = (l % 2u) * 16u; + let qs_val = (qs_word >> half2) & 0xFFFFu; + let grid_idx = qs_val & 0x1FFu; + let signs_idx = (qs_val >> 9u) & 0x7Fu; + let sub_scale = (scales_byte >> (4u * (l / 2u))) & 0xFu; + let db = d * (0.5 + f32(sub_scale)) * 0.25; + let signs = (ksigns_iq2xs[signs_idx / 4u] >> ((signs_idx % 4u) * 8u)) & 0xFFu; + let gw_lo = iq2xs_grid[grid_idx * 2u]; + let gw_hi = iq2xs_grid[grid_idx * 2u + 1u]; + for (var j = 0u; j < 8u; j++) { + let gw = select(gw_hi, gw_lo, j < 4u); + let b = f32((gw >> ((j & 3u) * 8u)) & 0xFFu); + let s = select(1.0, -1.0, ((signs >> j) & 1u) != 0u); + row_sum += db * b * s * x_block[ll * 8u + j]; + } + } + acc[row] += row_sum; + } + } + } +#endif + +#ifdef MUL_ACC_IQ2_S +#define BLOCK_SIZE 256 +#define BLOCK_SIZE_BYTES 82 +#define THREADS_PER_BLOCK 16 + + let tid = thread_id % THREADS_PER_BLOCK; + let block_group = thread_id / THREADS_PER_BLOCK; + let num_block_groups: u32 = WG_SIZE / THREADS_PER_BLOCK; + + let sub_blk = tid / 2u; + let half = tid % 2u; + let slot0 = half * 2u; + let y_offset = sub_blk * 32u + slot0 * 8u; + + let num_blocks = params.k / BLOCK_SIZE; + + for (var block = block_group; block < num_blocks; block += num_block_groups) { + let x_base = src1_idx_base + block * BLOCK_SIZE + y_offset; + var x_block: array<f32, 16>; + for (var i = 0u; i < 16u; i++) { + x_block[i] = f32(src1[x_base + i]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + let d = f32(load_f16_at_src0(block_byte_base)); + let qs_w = load_u32_at_src0(block_byte_base + 2u + sub_blk * 4u); + let sg_w = load_u32_at_src0(block_byte_base + 34u + sub_blk * 4u); + let qh_word = load_u32_at_src0(block_byte_base + 66u + (sub_blk / 4u) * 4u); + let qh_byte = get_byte(qh_word, sub_blk % 4u); + let sc_word = load_u32_at_src0(block_byte_base + 74u + (sub_blk / 4u) * 4u); + let scales_byte = get_byte(sc_word, sub_blk % 4u); + + var row_sum = 0.0; + for (var ll = 0u; ll < 2u; ll++) { + let l = slot0 + ll; + let qs_byte = get_byte(qs_w, l); + let sign_byte = get_byte(sg_w, l); + let grid_idx = qs_byte | (((qh_byte >> (2u * l)) & 3u) << 8u); + let sub_scale = (scales_byte >> (4u * (l / 2u))) & 0xFu; + let db = d * (0.5 + f32(sub_scale)) * 0.25; + let gw_lo = iq2s_grid[grid_idx * 2u]; + let gw_hi = iq2s_grid[grid_idx * 2u + 1u]; + for (var j = 0u; j < 8u; j++) { + let gw = select(gw_hi, gw_lo, j < 4u); + let b = f32((gw >> ((j & 3u) * 8u)) & 0xFFu); + let s = select(1.0, -1.0, ((sign_byte >> j) & 1u) != 0u); + row_sum += db * b * s * x_block[ll * 8u + j]; + } + } + acc[row] += row_sum; + } + } + } +#endif + +#ifdef MUL_ACC_IQ3_XXS +#define BLOCK_SIZE 256 +#define BLOCK_SIZE_BYTES 98 +#define THREADS_PER_BLOCK 16 + + let tid = thread_id % THREADS_PER_BLOCK; + let block_group = thread_id / THREADS_PER_BLOCK; + let num_block_groups: u32 = WG_SIZE / THREADS_PER_BLOCK; + + let sub_blk = tid / 2u; + let half = tid % 2u; + let slot0 = half * 2u; + let y_offset = sub_blk * 32u + slot0 * 8u; + + let num_blocks = params.k / BLOCK_SIZE; + + for (var block = block_group; block < num_blocks; block += num_block_groups) { + let x_base = src1_idx_base + block * BLOCK_SIZE + y_offset; + var x_block: array<f32, 16>; + for (var i = 0u; i < 16u; i++) { + x_block[i] = f32(src1[x_base + i]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + let d = f32(load_f16_at_src0(block_byte_base)); + let qs_lo = load_u32_at_src0(block_byte_base + 2u + sub_blk * 8u); + let qs_hi = load_u32_at_src0(block_byte_base + 2u + sub_blk * 8u + 4u); + let aux = load_u32_at_src0(block_byte_base + 66u + sub_blk * 4u); + let ls = aux >> 28u; + let db = d * (0.5 + f32(ls)) * 0.5; + + var row_sum = 0.0; + for (var ll = 0u; ll < 2u; ll++) { + let l = slot0 + ll; + let qs_word = select(qs_hi, qs_lo, l < 2u); + let byte_pos = (l % 2u) * 2u; + let grid_idx_0 = (qs_word >> (byte_pos * 8u)) & 0xFFu; + let grid_idx_1 = (qs_word >> ((byte_pos + 1u) * 8u)) & 0xFFu; + let signs_idx = (aux >> (7u * l)) & 0x7Fu; + let signs = (ksigns_iq2xs[signs_idx / 4u] >> ((signs_idx % 4u) * 8u)) & 0xFFu; + let grid1 = iq3xxs_grid[grid_idx_0]; + let grid2 = iq3xxs_grid[grid_idx_1]; + for (var j = 0u; j < 4u; j++) { + let b1 = f32((grid1 >> (j * 8u)) & 0xFFu); + let b2 = f32((grid2 >> (j * 8u)) & 0xFFu); + let s1 = select(1.0, -1.0, ((signs >> j) & 1u) != 0u); + let s2 = select(1.0, -1.0, ((signs >> (j + 4u)) & 1u) != 0u); + row_sum += db * b1 * s1 * x_block[ll * 8u + j]; + row_sum += db * b2 * s2 * x_block[ll * 8u + j + 4u]; + } + } + acc[row] += row_sum; + } + } + } +#endif + +#ifdef MUL_ACC_IQ3_S +#define BLOCK_SIZE 256 +#define BLOCK_SIZE_BYTES 110 +#define THREADS_PER_BLOCK 16 + + let tid = thread_id % THREADS_PER_BLOCK; + let block_group = thread_id / THREADS_PER_BLOCK; + let num_block_groups: u32 = WG_SIZE / THREADS_PER_BLOCK; + + let sub_blk = tid / 2u; + let half = tid % 2u; + let slot0 = half * 2u; + let y_offset = sub_blk * 32u + slot0 * 8u; + + let num_blocks = params.k / BLOCK_SIZE; + + for (var block = block_group; block < num_blocks; block += num_block_groups) { + let x_base = src1_idx_base + block * BLOCK_SIZE + y_offset; + var x_block: array<f32, 16>; + for (var i = 0u; i < 16u; i++) { + x_block[i] = f32(src1[x_base + i]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + let d = f32(load_f16_at_src0(block_byte_base)); + let qs_lo = load_u32_at_src0(block_byte_base + 2u + sub_blk * 8u); + let qs_hi = load_u32_at_src0(block_byte_base + 2u + sub_blk * 8u + 4u); + let qh_word = load_u32_at_src0(block_byte_base + 66u + (sub_blk / 4u) * 4u); + let qh_byte = get_byte(qh_word, sub_blk % 4u); + let sg_w = load_u32_at_src0(block_byte_base + 74u + sub_blk * 4u); + let sc_word = load_u32_at_src0(block_byte_base + 106u); + let scales_byte = get_byte(sc_word, sub_blk / 2u); + let sub_scale = (scales_byte >> (4u * (sub_blk % 2u))) & 0xFu; + let db = d * (1.0 + 2.0 * f32(sub_scale)); + + var row_sum = 0.0; + for (var ll = 0u; ll < 2u; ll++) { + let l = slot0 + ll; + let qs_word = select(qs_hi, qs_lo, l < 2u); + let byte_pos = (l % 2u) * 2u; + let qs0 = (qs_word >> (byte_pos * 8u)) & 0xFFu; + let qs1 = (qs_word >> ((byte_pos + 1u) * 8u)) & 0xFFu; + let grid_idx_1 = qs0 | (((qh_byte >> (2u * l)) & 1u) << 8u); + let grid_idx_2 = qs1 | (((qh_byte >> (2u * l + 1u)) & 1u) << 8u); + let sign_byte = get_byte(sg_w, l); + let grid1 = iq3s_grid[grid_idx_1]; + let grid2 = iq3s_grid[grid_idx_2]; + for (var j = 0u; j < 4u; j++) { + let b1 = f32((grid1 >> (j * 8u)) & 0xFFu); + let b2 = f32((grid2 >> (j * 8u)) & 0xFFu); + let s1 = select(1.0, -1.0, ((sign_byte >> j) & 1u) != 0u); + let s2 = select(1.0, -1.0, ((sign_byte >> (j + 4u)) & 1u) != 0u); + row_sum += db * b1 * s1 * x_block[ll * 8u + j]; + row_sum += db * b2 * s2 * x_block[ll * 8u + j + 4u]; + } + } + acc[row] += row_sum; + } + } + } +#endif + +#ifdef MUL_ACC_IQ4_NL +#define BLOCK_SIZE 32 +#define BLOCK_SIZE_BYTES 18 +#define THREADS_PER_BLOCK 4 +#define ELEMS_PER_THREAD (BLOCK_SIZE/THREADS_PER_BLOCK) + + let num_blocks = params.k / BLOCK_SIZE; + let thread_within_block = thread_id % THREADS_PER_BLOCK; + for (var block = thread_id / THREADS_PER_BLOCK; block < num_blocks; block += WG_SIZE / THREADS_PER_BLOCK) { + let x_base = src1_idx_base + block * BLOCK_SIZE + thread_within_block * 4u; + var x_block: array<f32, ELEMS_PER_THREAD>; + for (var i = 0u; i < ELEMS_PER_THREAD / 2u; i++) { + x_block[i] = f32(src1[x_base + i]); + x_block[i + 4u] = f32(src1[x_base + i + 16u]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + let d = f32(load_f16_at_src0(block_byte_base)); + var row_sum = 0.0; + + let q_packed = load_u32_at_src0(block_byte_base + 2u + 4u * thread_within_block); + for (var byte_idx = 0u; byte_idx < 4u; byte_idx++) { + let q_byte = get_byte(q_packed, byte_idx); + let q_lo = f32(kvalues_iq4nl[q_byte & 0xFu]) * d; + let q_hi = f32(kvalues_iq4nl[(q_byte >> 4u) & 0xFu]) * d; + row_sum += q_lo * x_block[byte_idx]; + row_sum += q_hi * x_block[byte_idx + 4u]; + } + acc[row] += row_sum; + } + } + } +#endif + +#ifdef MUL_ACC_IQ4_XS +#define BLOCK_SIZE 256 +#define BLOCK_SIZE_BYTES 136 +#define THREADS_PER_BLOCK 16 + + let tid = thread_id % THREADS_PER_BLOCK; + let block_group = thread_id / THREADS_PER_BLOCK; + let num_block_groups: u32 = WG_SIZE / THREADS_PER_BLOCK; + + let sub_blk = tid / 2u; + let half = tid % 2u; + let y_offset = sub_blk * 32u + half * 16u; + + let num_blocks = params.k / BLOCK_SIZE; + + for (var block = block_group; block < num_blocks; block += num_block_groups) { + let x_base = src1_idx_base + block * BLOCK_SIZE + y_offset; + var x_block: array<f32, 16>; + for (var i = 0u; i < 16u; i++) { + x_block[i] = f32(src1[x_base + i]); + } + + for (var row = 0u; row < OUTPUTS_PER_WG; row++) { + let output_row = row_base + row; + if (output_row < params.m) { + let block_byte_base = (src0_batch_offset + output_row * params.stride_01 + block) * BLOCK_SIZE_BYTES; + let d = f32(load_f16_at_src0(block_byte_base)); + let scales_h = load_u16_at_src0(block_byte_base + 2u); + let scales_l_word = load_u32_at_src0(block_byte_base + 4u); + let sl_byte = get_byte(scales_l_word, sub_blk / 2u); + let sl = (sl_byte >> (4u * (sub_blk % 2u))) & 0xFu; + let sh_bits = (scales_h >> (2u * sub_blk)) & 3u; + let ls = i32(sl | (sh_bits << 4u)); + let dl = d * f32(ls - 32); + + let qs_byte_off = 8u + sub_blk * 16u; + let q_w0 = load_u32_at_src0(block_byte_base + qs_byte_off); + let q_w1 = load_u32_at_src0(block_byte_base + qs_byte_off + 4u); + let q_w2 = load_u32_at_src0(block_byte_base + qs_byte_off + 8u); + let q_w3 = load_u32_at_src0(block_byte_base + qs_byte_off + 12u); + + var row_sum = 0.0; + for (var i = 0u; i < 16u; i++) { + let q_word = select( + select(q_w0, q_w1, i >= 4u), + select(q_w2, q_w3, i >= 12u), + i >= 8u); + let q_byte = get_byte(q_word, i % 4u); + let nib = select(q_byte & 0xFu, (q_byte >> 4u) & 0xFu, half == 1u); + row_sum += f32(kvalues_iq4nl[nib]) * dl * x_block[i]; + } + acc[row] += row_sum; + } + } + } +#endif + #ifdef USE_SUBGROUP_REDUCTION for (var row = 0u; row < OUTPUTS_PER_WG; row++) { let subgroup_total = subgroupAdd(acc[row]); diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm_mul.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm_mul.wgsl index 74aaa2753ae..fd20a4e54c9 100644 --- a/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm_mul.wgsl +++ b/ggml/src/ggml-webgpu/wgsl-shaders/rms_norm_mul.wgsl @@ -66,8 +66,6 @@ fn update(rn_src_offset: u32, dst_offset: u32, scale: f32, mul_src_offset: u32) struct Params { offset_rn_src: u32, offset_mul_src: u32, - offset_merged_rn_src: u32, - offset_merged_mul_src: u32, offset_dst: u32, stride_rn_src1: u32, @@ -107,8 +105,8 @@ fn main(@builtin(workgroup_id) wid: vec3<u32>, i = i % (params.ne2 * params.ne1); let i2 = i / params.ne1; let i1 = i % params.ne1; - let i_rn_src_row = params.offset_rn_src + params.offset_merged_rn_src + i3 * params.stride_rn_src3 + i2 * params.stride_rn_src2 + i1 * params.stride_rn_src1; - let i_mul_src_row = params.offset_mul_src + params.offset_merged_mul_src + (i3 % params.mul_src_ne3) * params.stride_mul_src3 + (i2 % params.mul_src_ne2) * params.stride_mul_src2 + (i1 % params.mul_src_ne1) * params.stride_mul_src1; + let i_rn_src_row = params.offset_rn_src + i3 * params.stride_rn_src3 + i2 * params.stride_rn_src2 + i1 * params.stride_rn_src1; + let i_mul_src_row = params.offset_mul_src + (i3 % params.mul_src_ne3) * params.stride_mul_src3 + (i2 % params.mul_src_ne2) * params.stride_mul_src2 + (i1 % params.mul_src_ne1) * params.stride_mul_src1; let i_dst_row = params.offset_dst + i3 * params.stride_dst3 + i2 * params.stride_dst2 + i1 * params.stride_dst1; let elems = (params.ne0 + WG_SIZE - 1) / WG_SIZE; diff --git a/ggml/src/ggml-webgpu/wgsl-shaders/ssm_scan.wgsl b/ggml/src/ggml-webgpu/wgsl-shaders/ssm_scan.wgsl new file mode 100644 index 00000000000..05761dec353 --- /dev/null +++ b/ggml/src/ggml-webgpu/wgsl-shaders/ssm_scan.wgsl @@ -0,0 +1,193 @@ +#ifdef USE_SUBGROUP_REDUCTION +enable subgroups; +#endif + +struct Params { + offset_s: u32, + offset_x: u32, + offset_dt: u32, + offset_A: u32, + offset_B: u32, + offset_C: u32, + offset_ids: u32, + offset_dst: u32, + + stride_s1: u32, + stride_s2: u32, + stride_s3: u32, + + stride_x1: u32, + stride_x2: u32, + stride_x3: u32, + + stride_dt1: u32, + stride_dt2: u32, + + a_ne0: u32, + stride_A1: u32, + + stride_B1: u32, + stride_B2: u32, + stride_B3: u32, + + stride_C1: u32, + stride_C2: u32, + stride_C3: u32, + + d_state: u32, + d_inner: u32, + n_head: u32, + n_group: u32, + n_seq_tokens: u32, + n_seqs: u32, + + y_elems: u32, +}; + +@group(0) @binding(0) var<storage, read_write> s_in: array<f32>; +#ifdef XBC_OVERLAP +@group(0) @binding(1) var<storage, read_write> x_B_C_merged: array<f32>; +@group(0) @binding(2) var<storage, read_write> dt: array<f32>; +@group(0) @binding(3) var<storage, read_write> A: array<f32>; +@group(0) @binding(4) var<storage, read_write> ids: array<i32>; +@group(0) @binding(5) var<storage, read_write> dst: array<f32>; +@group(0) @binding(6) var<uniform> params: Params; +#else +@group(0) @binding(1) var<storage, read_write> x: array<f32>; +@group(0) @binding(2) var<storage, read_write> dt: array<f32>; +@group(0) @binding(3) var<storage, read_write> A: array<f32>; +@group(0) @binding(4) var<storage, read_write> B: array<f32>; +@group(0) @binding(5) var<storage, read_write> C: array<f32>; +@group(0) @binding(6) var<storage, read_write> ids: array<i32>; +@group(0) @binding(7) var<storage, read_write> dst: array<f32>; +@group(0) @binding(8) var<uniform> params: Params; +#endif + +var<workgroup> shared_x_dt: array<f32, TOKENS_PER_TILE>; +var<workgroup> shared_dtsp: array<f32, TOKENS_PER_TILE>; +var<workgroup> shared_reduce: array<f32, TOKENS_PER_TILE * WG_SIZE>; + +fn reduce_base(token_in_tile: u32) -> u32 { + return token_in_tile * WG_SIZE; +} + +@compute @workgroup_size(WG_SIZE) +fn main( + @builtin(local_invocation_id) local_id: vec3<u32>, + @builtin(workgroup_id) wg_id: vec3<u32>, + @builtin(num_workgroups) num_wg: vec3<u32> +#ifdef USE_SUBGROUP_REDUCTION + , @builtin(subgroup_id) subgroup_id: u32, + @builtin(subgroup_invocation_id) subgroup_invocation_id: u32, + @builtin(num_subgroups) num_subgroups: u32 +#endif +) { + let tid = local_id.x; + let wg_linear = wg_id.y * num_wg.x + wg_id.x; + + let i1 = wg_linear % params.d_inner; + let head_seq = wg_linear / params.d_inner; + let ir = head_seq % params.n_head; + let i3 = head_seq / params.n_head; + + let state_slot = u32(ids[params.offset_ids + i3]); + let g = ir / (params.n_head / params.n_group); + + let s_idx = params.offset_s + tid + i1 * params.stride_s1 + ir * params.stride_s2 + state_slot * params.stride_s3; + var s_prev = s_in[s_idx]; + + let A0 = A[params.offset_A + (tid % params.a_ne0) + ir * params.stride_A1]; + + for (var token_base = 0u; token_base < params.n_seq_tokens; token_base += TOKENS_PER_TILE) { + if (tid < TOKENS_PER_TILE) { + let token = token_base + tid; + if (token < params.n_seq_tokens) { + let x_idx = params.offset_x + i1 + ir * params.stride_x1 + token * params.stride_x2 + i3 * params.stride_x3; + let dt_idx = params.offset_dt + ir + token * params.stride_dt1 + i3 * params.stride_dt2; + let dt0 = dt[dt_idx]; + let dtsp = select(log(1.0 + exp(dt0)), dt0, dt0 > 20.0); + shared_dtsp[tid] = dtsp; +#ifdef XBC_OVERLAP + shared_x_dt[tid] = x_B_C_merged[x_idx] * dtsp; +#else + shared_x_dt[tid] = x[x_idx] * dtsp; +#endif + } + } + + workgroupBarrier(); + + for (var token_in_tile = 0u; token_in_tile < TOKENS_PER_TILE; token_in_tile++) { + let token = token_base + token_in_tile; + if (token >= params.n_seq_tokens) { + break; + } + + let x_dt = shared_x_dt[token_in_tile]; + let dA = exp(shared_dtsp[token_in_tile] * A0); + let reduce_idx = reduce_base(token_in_tile) + tid; + + let b_idx = params.offset_B + tid + g * params.stride_B1 + token * params.stride_B2 + i3 * params.stride_B3; + let c_idx = params.offset_C + tid + g * params.stride_C1 + token * params.stride_C2 + i3 * params.stride_C3; +#ifdef XBC_OVERLAP + let s = s_prev * dA + x_B_C_merged[b_idx] * x_dt; +#else + let s = s_prev * dA + B[b_idx] * x_dt; +#endif + s_prev = s; + +#ifdef USE_SUBGROUP_REDUCTION +#ifdef XBC_OVERLAP + let subgroup_partial = subgroupAdd(s * x_B_C_merged[c_idx]); +#else + let subgroup_partial = subgroupAdd(s * C[c_idx]); +#endif + if (subgroup_invocation_id == 0u) { + shared_reduce[reduce_idx - tid + subgroup_id] = subgroup_partial; + } +#else +#ifdef XBC_OVERLAP + shared_reduce[reduce_idx] = s * x_B_C_merged[c_idx]; +#else + shared_reduce[reduce_idx] = s * C[c_idx]; +#endif +#endif + + workgroupBarrier(); + +#ifdef USE_SUBGROUP_REDUCTION + if (tid == 0u) { + var sum = 0.0; + for (var sg = 0u; sg < num_subgroups; sg++) { + sum += shared_reduce[reduce_base(token_in_tile) + sg]; + } + let y_idx = + params.offset_dst + i1 + ir * params.d_inner + token * (params.n_head * params.d_inner) + + i3 * (params.n_seq_tokens * params.n_head * params.d_inner); + dst[y_idx] = sum; + } +#else + for (var stride = WG_SIZE / 2u; stride > 0u; stride >>= 1u) { + if (tid < stride) { + shared_reduce[reduce_idx] += shared_reduce[reduce_idx + stride]; + } + workgroupBarrier(); + } + + if (tid == 0u) { + let y_idx = + params.offset_dst + i1 + ir * params.d_inner + token * (params.n_head * params.d_inner) + + i3 * (params.n_seq_tokens * params.n_head * params.d_inner); + dst[y_idx] = shared_reduce[reduce_base(token_in_tile)]; + } +#endif + + workgroupBarrier(); + } + } + + let state_idx = + params.offset_dst + params.y_elems + tid + i1 * params.d_state + ir * (params.d_state * params.d_inner) + + i3 * (params.d_state * params.d_inner * params.n_head); + dst[state_idx] = s_prev; +} diff --git a/scripts/pr2wt.sh b/scripts/pr2wt.sh index e028814c431..ae03a888cb6 100755 --- a/scripts/pr2wt.sh +++ b/scripts/pr2wt.sh @@ -68,11 +68,19 @@ dir=$(basename $(pwd)) git branch -D pr/$PR 2> /dev/null git worktree add -b pr/$PR ../$dir-pr-$PR pr/$PR/$head_ref 2> /dev/null +og_path=$(pwd) wt_path=$(cd ../$dir-pr-$PR && pwd) echo "git worktree created in $wt_path" cd $wt_path + +# pi agent setup in the worktree +if [[ -f "$og_path/.pi/SYSTEM.md" && ! -f ".pi/SYSTEM.md" ]]; then + mkdir -p .pi + ln -sfn "$og_path/.pi/SYSTEM.md" .pi/SYSTEM.md +fi + git branch --set-upstream-to=pr/$PR/$head_ref git pull --ff-only || { echo "error: failed to pull pr/$PR" diff --git a/scripts/server-test-structured.py b/scripts/server-test-structured.py index 98ff473b9fe..da217fc46c8 100755 --- a/scripts/server-test-structured.py +++ b/scripts/server-test-structured.py @@ -3,8 +3,12 @@ Test structured output capability via chat completions endpoint. Each test case contains: - - response_format: OpenAI-compatible response_format specification - (json_schema only — llama.cpp does not support json_object) + - response_format: OpenAI-compatible response_format specification. + Both "json_schema" and "json_object" are accepted; with + "json_object" a schema can be supplied via extra_body. + - extra_body (optional): dict of extra top-level request fields merged into + the request payload (mirrors the OpenAI SDK's extra_body + feature; llama.cpp reads a top-level "json_schema" here). - messages: initial conversation messages - tools (optional): tool definitions (for mixed tool + structured tests) - mock_tool_responses (optional): dict mapping tool_name -> callable(arguments) -> str (JSON) @@ -81,11 +85,14 @@ def print_info(msg): _print(f"{DIM}{msg}{RESET}") -def print_schema_note(label, rf): +def print_schema_note(label, rf, extra_body=None): kind = rf.get("type", "?") name = "" if kind == "json_schema": name = rf.get("json_schema", {}).get("name", "") + elif kind == "json_object" and extra_body and "json_schema" in extra_body: + extra_schema = extra_body["json_schema"] or {} + name = extra_schema.get("title") or "extra_body.json_schema" _print(f"{DIM}{MAGENTA} ⟐ response_format [{label}]: {kind}" f"{(' / ' + name) if name else ''}{RESET}") @@ -95,17 +102,20 @@ def print_schema_note(label, rf): # --------------------------------------------------------------------------- -def chat_completion(url, messages, tools=None, response_format=None, stream=False): +def chat_completion(url, messages, tools=None, response_format=None, stream=False, + extra_body=None): payload = { "messages": messages, "stream": stream, - "max_tokens": 4096, + "max_tokens": 8192, } if tools: payload["tools"] = tools payload["tool_choice"] = "auto" if response_format is not None: payload["response_format"] = response_format + if extra_body: + payload.update(extra_body) try: response = requests.post(url, json=payload, stream=stream) @@ -180,7 +190,7 @@ def chat_completion(url, messages, tools=None, response_format=None, stream=Fals def run_tool_loop( url, messages, tools, mock_tool_responses, stream, response_format=None, - max_turns=6, + extra_body=None, max_turns=6, ): """ Drive the tool-call loop. If response_format is provided it is applied to @@ -191,7 +201,8 @@ def run_tool_loop( for _ in range(max_turns): result = chat_completion( - url, msgs, tools=tools, response_format=response_format, stream=stream + url, msgs, tools=tools, response_format=response_format, stream=stream, + extra_body=extra_body, ) if result is None: return all_tool_calls, msgs, None @@ -274,7 +285,8 @@ def run_test(url, test_case, stream): print_header(f"{name} [{mode}] ({apply_stage})") response_format = test_case["response_format"] - print_schema_note(apply_stage, response_format) + extra_body = test_case.get("extra_body") + print_schema_note(apply_stage, response_format, extra_body) tools = test_case.get("tools") mocks = test_case.get("mock_tool_responses") or {} @@ -290,6 +302,7 @@ def run_test(url, test_case, stream): mock_tool_responses=mocks, stream=stream, response_format=response_format, + extra_body=extra_body, ) elif apply_stage == "after_tools": # Phase 1: plain tool loop, no response_format applied yet. @@ -314,7 +327,8 @@ def run_test(url, test_case, stream): # model focuses on producing the schema-constrained answer. _print(f"\n{DIM}{MAGENTA} ⟐ follow-up turn with response_format applied{RESET}") result = chat_completion( - url, msgs, tools=None, response_format=response_format, stream=stream + url, msgs, tools=None, response_format=response_format, stream=stream, + extra_body=extra_body, ) final_content = result["content"] if result else None else: @@ -481,6 +495,51 @@ def _validate_sentiment(parsed): return True, f"sentiment={parsed['sentiment']} conf={conf} kws={kws}" +# ---- Test: json_object + extra_body.json_schema (always) ---- +# +# Exercises the llama.cpp-specific path where the OpenAI SDK would send +# response_format={"type": "json_object"} and tunnel the schema through +# extra_body.json_schema (which becomes a top-level "json_schema" field on +# the request body). + +_PRODUCT_JSON_OBJECT_SCHEMA = { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://example.com/product.schema.json", + "title": "Product", + "description": "A product in the catalog", + "type": "object", +} + +PRODUCT_JSON_OBJECT_TEST_CASE = { + "name": "json_object response_format with extra_body json_schema", + "response_format": {"type": "json_object"}, + "extra_body": {"json_schema": _PRODUCT_JSON_OBJECT_SCHEMA}, + "apply_stage": "always", + "messages": [ + { + "role": "system", + "content": ( + "Extract structured data from the provided text according to the " + "JSON schema. Return only valid JSON matching the schema exactly." + ), + }, + { + "role": "user", + "content": "Product: Wireless Headphones, ID: 101, In Stock: Yes", + }, + ], + "validate": lambda parsed, tcs, raw: _validate_product_json_object(parsed), +} + + +def _validate_product_json_object(parsed): + if not isinstance(parsed, dict): + return False, f"expected JSON object, got {type(parsed).__name__}: {parsed!r}" + if not parsed: + return False, f"expected non-empty object, got {parsed!r}" + return True, f"product object with {len(parsed)} field(s): {sorted(parsed.keys())}" + + # ---- Test 3: Nested recipe schema (always) ---- _RECIPE_SCHEMA = { @@ -915,6 +974,7 @@ def _validate_country_report(parsed, tcs): ALL_TEST_CASES = [ BOOK_TEST_CASE, SENTIMENT_TEST_CASE, + PRODUCT_JSON_OBJECT_TEST_CASE, RECIPE_TEST_CASE, SHOP_COMPARISON_TEST_CASE, COUNTRY_REPORT_TEST_CASE, diff --git a/scripts/sync-ggml.last b/scripts/sync-ggml.last index de0140cfe24..236ae95a80f 100644 --- a/scripts/sync-ggml.last +++ b/scripts/sync-ggml.last @@ -1 +1 @@ -1c40d85a4dcfcd62176f649b8682433bb1a6caef +387fa29fbbf3149f06a631c7850b6c35c24b0232 diff --git a/src/llama-quant.cpp b/src/llama-quant.cpp index f91d795b3e9..25a333b4a7f 100644 --- a/src/llama-quant.cpp +++ b/src/llama-quant.cpp @@ -1283,7 +1283,7 @@ static void llama_model_quantize_impl(const std::string & fname_inp, const std:: llama_model_quantize_params llama_model_quantize_default_params() { llama_model_quantize_params result = { /*.nthread =*/ 0, - /*.ftype =*/ LLAMA_FTYPE_MOSTLY_Q5_1, + /*.ftype =*/ LLAMA_FTYPE_MOSTLY_Q8_0, /*.output_tensor_type =*/ GGML_TYPE_COUNT, /*.token_embedding_type =*/ GGML_TYPE_COUNT, /*.allow_requantize =*/ false, diff --git a/src/models/llama.cpp b/src/models/llama.cpp index ddaa6c40f59..8d478dc6747 100644 --- a/src/models/llama.cpp +++ b/src/models/llama.cpp @@ -72,9 +72,6 @@ llm_build_llama<embed>::llm_build_llama(const llama_model & model, const llm_gra cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].wo_b, model.layers[il].wo_s, Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, kq_scale, il); - if (model.layers[il].wo_s) { - cur = ggml_mul(ctx0, cur, model.layers[il].wo_s); - } cb(cur, "attn_out", il); } if (il == n_layer - 1 && inp_out_ids) { diff --git a/src/models/qwen3.cpp b/src/models/qwen3.cpp index e6f1fc81d88..883dd5f9a90 100644 --- a/src/models/qwen3.cpp +++ b/src/models/qwen3.cpp @@ -58,9 +58,6 @@ llm_build_qwen3::llm_build_qwen3(const llama_model & model, const llm_graph_para cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].wo_b, model.layers[il].wo_s, Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); - if (model.layers[il].wo_s) { - cur = ggml_mul(ctx0, cur, model.layers[il].wo_s); - } } if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); diff --git a/src/models/qwen3moe.cpp b/src/models/qwen3moe.cpp index dc554b5b3a9..16bedba994d 100644 --- a/src/models/qwen3moe.cpp +++ b/src/models/qwen3moe.cpp @@ -58,9 +58,6 @@ llm_build_qwen3moe::llm_build_qwen3moe(const llama_model & model, const llm_grap cur = build_attn(inp_attn, model.layers[il].wo, model.layers[il].wo_b, model.layers[il].wo_s, Qcur, Kcur, Vcur, nullptr, nullptr, nullptr, 1.0f/sqrtf(float(n_embd_head)), il); - if (model.layers[il].wo_s) { - cur = ggml_mul(ctx0, cur, model.layers[il].wo_s); - } } if (il == n_layer - 1 && inp_out_ids) { cur = ggml_get_rows(ctx0, cur, inp_out_ids); diff --git a/tests/test-arg-parser.cpp b/tests/test-arg-parser.cpp index 67f8ca632c9..0dd8422e736 100644 --- a/tests/test-arg-parser.cpp +++ b/tests/test-arg-parser.cpp @@ -40,8 +40,12 @@ int main(void) { } } + // exclude spec args from this check + // ref: https://github.com/ggml-org/llama.cpp/pull/22397 + const bool skip = opt.is_spec; + // ensure shorter argument precedes longer argument - if (opt.args.size() > 1) { + if (!skip && opt.args.size() > 1) { const std::string first(opt.args.front()); const std::string last(opt.args.back()); @@ -124,9 +128,9 @@ int main(void) { assert(params.n_batch == 9090); // --draft cannot be used outside llama-speculative - argv = {"binary_name", "--draft", "123"}; + argv = {"binary_name", "--spec-draft-n-max", "123"}; assert(true == common_params_parse(argv.size(), list_str_to_char(argv).data(), params, LLAMA_EXAMPLE_SPECULATIVE)); - assert(params.speculative.n_max == 123); + assert(params.speculative.draft.n_max == 123); // multi-value args (CSV) argv = {"binary_name", "--lora", "file1.gguf,\"file2,2.gguf\",\"file3\"\"3\"\".gguf\",file4\".gguf"}; diff --git a/tests/test-backend-ops.cpp b/tests/test-backend-ops.cpp index 71601131671..941c20ce19d 100644 --- a/tests/test-backend-ops.cpp +++ b/tests/test-backend-ops.cpp @@ -2984,7 +2984,7 @@ struct test_bin_bcast : public test_case { bool run_whole_graph() override { return nf > 1; } std::string vars() override { - return VARS_TO_STR5(type, ne, nr, nf, perm1); + return VARS_TO_STR6(type, ne, nr, nf, perm1, src_overlap); } size_t op_size(ggml_tensor * t) override { @@ -3589,9 +3589,10 @@ struct test_ssm_scan : public test_case { const int64_t n_group; const int64_t n_seq_tokens; const int64_t n_seqs; + const bool xbc_overlap; std::string vars() override { - return VARS_TO_STR7(type, d_state, head_dim, n_head, n_group, n_seq_tokens, n_seqs); + return VARS_TO_STR8(type, d_state, head_dim, n_head, n_group, n_seq_tokens, n_seqs, xbc_overlap); } test_ssm_scan(ggml_type type = GGML_TYPE_F32, @@ -3600,16 +3601,31 @@ struct test_ssm_scan : public test_case { int64_t n_head = 32, int64_t n_group = 1, int64_t n_seq_tokens = 32, - int64_t n_seqs = 32) - : type(type), d_state(d_state), head_dim(head_dim), n_head(n_head), n_group(n_group), n_seq_tokens(n_seq_tokens), n_seqs(n_seqs) {} + int64_t n_seqs = 32, + bool xbc_overlap = false) + : type(type), d_state(d_state), head_dim(head_dim), n_head(n_head), n_group(n_group), n_seq_tokens(n_seq_tokens), n_seqs(n_seqs), xbc_overlap(xbc_overlap) {} ggml_tensor * build_graph(ggml_context * ctx) override { ggml_tensor * s = ggml_new_tensor_4d(ctx, type, d_state, head_dim, n_head, n_seqs); - ggml_tensor * x = ggml_new_tensor_4d(ctx, type, head_dim, n_head, n_seq_tokens, n_seqs); ggml_tensor * dt = ggml_new_tensor_3d(ctx, type, n_head, n_seq_tokens, n_seqs); ggml_tensor * A = ggml_new_tensor_2d(ctx, type, (head_dim > 1) ? 1 : d_state, n_head); - ggml_tensor * B = ggml_new_tensor_4d(ctx, type, d_state, n_group, n_seq_tokens, n_seqs); - ggml_tensor * C = ggml_new_tensor_4d(ctx, type, d_state, n_group, n_seq_tokens, n_seqs); + ggml_tensor * x; + ggml_tensor * B; + ggml_tensor * C; + + if (xbc_overlap) { + ggml_tensor * xbc = ggml_new_tensor_4d(ctx, type, d_state, n_head, n_seq_tokens, 2 * n_seqs); + x = ggml_view_4d(ctx, xbc, head_dim, n_head, n_seq_tokens, n_seqs, + xbc->nb[1], xbc->nb[2], xbc->nb[3], xbc->nb[3]); + B = ggml_view_4d(ctx, xbc, d_state, n_group, n_seq_tokens, n_seqs, + xbc->nb[1], xbc->nb[2], xbc->nb[3], 0); + C = ggml_view_4d(ctx, xbc, d_state, n_group, n_seq_tokens, n_seqs, + xbc->nb[1], xbc->nb[2], xbc->nb[3], 2 * xbc->nb[3]); + } else { + x = ggml_new_tensor_4d(ctx, type, head_dim, n_head, n_seq_tokens, n_seqs); + B = ggml_new_tensor_4d(ctx, type, d_state, n_group, n_seq_tokens, n_seqs); + C = ggml_new_tensor_4d(ctx, type, d_state, n_group, n_seq_tokens, n_seqs); + } ggml_tensor * ids = ggml_new_tensor_1d(ctx, GGML_TYPE_I32, n_seqs); ggml_tensor * out = ggml_ssm_scan(ctx, s, x, dt, A, B, C, ids); return out; @@ -3799,7 +3815,7 @@ struct test_mul_mat : public test_case { double max_nmse_err(ggml_backend_t backend) override { // for blackwell we quantize activations to mxfp4 instead of q8_1 so we add higher tolerance - if (type_a == GGML_TYPE_MXFP4 && backend_has_feature(backend, "BLACKWELL_NATIVE_FP4")) { + if ((type_a == GGML_TYPE_MXFP4 || type_a == GGML_TYPE_NVFP4) && backend_has_feature(backend, "BLACKWELL_NATIVE_FP4")) { return 2e-2; } return max_nmse_err(); @@ -3935,7 +3951,7 @@ struct test_mul_mat_id : public test_case { double max_nmse_err(ggml_backend_t backend) override { // for blackwell we quantize activations to mxfp4 instead of q8_1 so we add higher tolerance - if (type_a == GGML_TYPE_MXFP4 && backend_has_feature(backend, "BLACKWELL_NATIVE_FP4")) { + if ((type_a == GGML_TYPE_MXFP4 || type_a == GGML_TYPE_NVFP4) && backend_has_feature(backend, "BLACKWELL_NATIVE_FP4")) { return 2e-2; } return max_nmse_err(); @@ -7964,6 +7980,7 @@ static std::vector<std::unique_ptr<test_case>> make_test_cases_eval() { test_cases.emplace_back(new test_ssm_scan(GGML_TYPE_F32, 16, 1, 1024, 1, 32, 4)); // Mamba-1 test_cases.emplace_back(new test_ssm_scan(GGML_TYPE_F32, 128, 64, 16, 2, 32, 4)); // Mamba-2 test_cases.emplace_back(new test_ssm_scan(GGML_TYPE_F32, 256, 64, 8, 2, 32, 4)); // Falcon-H1 + test_cases.emplace_back(new test_ssm_scan(GGML_TYPE_F32, 128, 128, 4, 4, 16, 2, true)); // x/B/C overlap test_cases.emplace_back(new test_rwkv_wkv6(GGML_TYPE_F32, 32, 64, 1, 1)); test_cases.emplace_back(new test_rwkv_wkv6(GGML_TYPE_F32, 32, 64, 32, 1)); diff --git a/tests/test-chat-auto-parser.cpp b/tests/test-chat-auto-parser.cpp index bb23b7f2aae..1d96de718e2 100644 --- a/tests/test-chat-auto-parser.cpp +++ b/tests/test-chat-auto-parser.cpp @@ -1331,7 +1331,7 @@ static void test_nemotron_reasoning_detection(testing & t) { // Check reasoning markers t.assert_equal("reasoning_start should be '<think>\\n'", "<think>\n", analysis.reasoning.start); - t.assert_equal("reasoning_end should be '</think>'", "</think>", analysis.reasoning.end); + t.assert_equal("reasoning_end should be '\\n</think>\\n'", "\n</think>\n", analysis.reasoning.end); // Check reasoning mode detection // Nemotron uses tag-based reasoning; prefill handles the template's forced markers diff --git a/tests/test-chat.cpp b/tests/test-chat.cpp index 52b480c24e9..e6a5236645e 100644 --- a/tests/test-chat.cpp +++ b/tests/test-chat.cpp @@ -1642,22 +1642,16 @@ static void test_template_output_peg_parsers(bool detailed_debug) { // Qwen3.5 (basically same as Nemotron, but keeping separate tests just in case) auto tst = peg_tester("models/templates/Qwen3.5-4B.jinja", detailed_debug); - tst.test("I'm\nthinking</think>Hello, world!\nWhat's up?") + tst.test("I'm\nthinking\n</think>\n\nHello, world!\nWhat's up?") .reasoning_format(COMMON_REASONING_FORMAT_AUTO) .enable_thinking(true) .expect(message_assist_thoughts) .run(); - tst.test("I'm\nthinking\n</think>\nHello, world!\nWhat's up?") + tst.test("I'm\nthinking\n</think>\n\nHello, world!\nWhat's up?") .enable_thinking(true) .reasoning_format(COMMON_REASONING_FORMAT_NONE) - .expect_content("<think>\nI'm\nthinking\n</think>\nHello, world!\nWhat's up?") - .run(); - - tst.test("I'm\nthinking\n</think>\nHello, world!\nWhat's up?") - .enable_thinking(true) - .reasoning_format(COMMON_REASONING_FORMAT_AUTO) - .expect(message_assist_thoughts) + .expect_content("<think>\nI'm\nthinking\n</think>\n\nHello, world!\nWhat's up?") .run(); tst.test( @@ -1673,7 +1667,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { .run(); tst.test( - "I'm\nthinking\n</think>\n" + "I'm\nthinking\n</think>\n\n" "<tool_call>\n" "<function=special_function>\n" "<parameter=arg1>\n1\n</parameter>\n" @@ -1731,7 +1725,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { tst.test( "I need to output the invoice details in JSON\n" - "</think>\n" + "</think>\n\n" R"({"amount": 123.45, "date": "2025-12-03"})") .reasoning_format(COMMON_REASONING_FORMAT_AUTO) .enable_thinking(true) @@ -1751,7 +1745,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { "hello()\n" "</parameter>\n" "</function>\n" - "</tool_call></think>\n" + "</tool_call>\n</think>\n\n" "<tool_call>\n" "<function=python>\n" "<parameter=code>\n" @@ -1994,7 +1988,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { "hello()\n" "</parameter>\n" "</function>\n" - "</tool_call></think>\n" + "</tool_call>\n</think>\n" "<tool_call>\n" "<function=python>\n" "<parameter=code>\n" @@ -2255,6 +2249,46 @@ static void test_template_output_peg_parsers(bool detailed_debug) { .reasoning_format(COMMON_REASONING_FORMAT_AUTO) .expect(message_assist) .run(); + + { + // additional tests for https://github.com/ggml-org/llama.cpp/pull/21760 + auto tmpls = read_templates("models/templates/google-gemma-4-31B-it.jinja"); + + common_chat_msg tool_call_msg = simple_assist_msg( + "Let me check.", "", "special_function", "{\"arg1\": 1}","c0"); + + common_chat_msg tool_msg; + tool_msg.role = "tool"; + tool_msg.tool_name = "special_function"; + tool_msg.tool_call_id = "c0"; + tool_msg.content = "{\"r\":\"ok\"}"; + + { + common_chat_templates_inputs inputs; + inputs.messages = { message_user, tool_call_msg, tool_msg }; + inputs.tools = { special_function_tool }; + inputs.add_generation_prompt = true; + + auto params = common_chat_templates_apply(tmpls.get(), inputs); + + if (!string_ends_with(params.prompt, "<turn|>\n<|turn>model\n")) { + throw std::runtime_error("Missing generation prompt for Gemma 4"); + } + } + + { + common_chat_templates_inputs inputs; + inputs.messages = { message_user, tool_call_msg, tool_msg }; + inputs.tools = { special_function_tool }; + inputs.add_generation_prompt = false; + + auto params = common_chat_templates_apply(tmpls.get(), inputs); + + if (string_ends_with(params.prompt, "<|turn>model\n")) { + throw std::runtime_error("Gemma 4: generation prompt was modified despite add_generation_prompt=false"); + } + } + } } { @@ -3463,7 +3497,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { .run(); // Tool call with reasoning (enable_thinking=true) - tst.test("I'm\nthinking</think><tool_call>\n{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}}</tool_call>") + tst.test("I'm\nthinking\n</think>\n\n<tool_call>\n{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}}</tool_call>") .enable_thinking(true) .reasoning_format(COMMON_REASONING_FORMAT_AUTO) .tools({ special_function_tool }) @@ -3487,7 +3521,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { .run(); // Tool call with reasoning and content - tst.test("I need to call a function</think>" + tst.test("I need to call a function\n</think>\n\n" "Let me check the time.<tool_call>\n{\"name\": \"get_time\", \"arguments\": {\"city\": \"XYZCITY\"}}</tool_call>") .enable_thinking(true) .reasoning_format(COMMON_REASONING_FORMAT_AUTO) @@ -3514,7 +3548,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { // fake tool call marker in reasoning tst.test( - "Let me think about <tool_call>\n{\"name\": \"special_function\", \"arguments\": {\"arg1\": 2}}</tool_call> hmm</think>" + "Let me think about <tool_call>\n{\"name\": \"special_function\", \"arguments\": {\"arg1\": 2}}</tool_call> hmm\n</think>\n\n" "<tool_call>\n{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}}</tool_call>") .enable_thinking(true) .reasoning_format(COMMON_REASONING_FORMAT_AUTO) @@ -3542,11 +3576,11 @@ static void test_template_output_peg_parsers(bool detailed_debug) { // Format: <minimax:tool_call><invoke name="func"><parameter name="key">value</parameter></invoke></minimax:tool_call> { auto tst = peg_tester("models/templates/MiniMax-M2.jinja", detailed_debug); - tst.test("</think>Hello, world!\nWhat's up?").enable_thinking(true).reasoning_format(COMMON_REASONING_FORMAT_AUTO).expect(message_assist).run(); + tst.test("\n</think>\n\nHello, world!\nWhat's up?").enable_thinking(true).reasoning_format(COMMON_REASONING_FORMAT_AUTO).expect(message_assist).run(); - tst.test("I'm\nthinking</think>Hello, world!\nWhat's up?").enable_thinking(true).reasoning_format(COMMON_REASONING_FORMAT_AUTO).expect(message_assist_thoughts).run(); + tst.test("I'm\nthinking\n</think>\n\nHello, world!\nWhat's up?").enable_thinking(true).reasoning_format(COMMON_REASONING_FORMAT_AUTO).expect(message_assist_thoughts).run(); - tst.test("Let's call a tool:</think><minimax:tool_call>\n<invoke name=\"empty_args\">\n</invoke>\n</minimax:tool_call>"). + tst.test("Let's call a tool:\n</think>\n\n<minimax:tool_call>\n<invoke name=\"empty_args\">\n</invoke>\n</minimax:tool_call>"). enable_thinking(true). reasoning_format(COMMON_REASONING_FORMAT_AUTO). tools({ empty_args_tool }). @@ -3554,7 +3588,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { run(); tst.test( - "</think><minimax:tool_call>\n<invoke name=\"special_function\">\n<parameter " + "\n</think>\n\n<minimax:tool_call>\n<invoke name=\"special_function\">\n<parameter " "name=\"arg1\">1</parameter>\n</invoke>\n</minimax:tool_call>") .tools({ special_function_tool }) .expect(message_assist_call) @@ -3714,7 +3748,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { .enable_thinking(false) .expect(message_assist) .run(); - tst.test("I'm\nthinking</think>\n\nHello, world!\nWhat's up?") + tst.test("I'm\nthinking\n</think>\n\nHello, world!\nWhat's up?") .enable_thinking(true) .reasoning_format(COMMON_REASONING_FORMAT_DEEPSEEK) .expect(message_assist_thoughts) @@ -3729,7 +3763,7 @@ static void test_template_output_peg_parsers(bool detailed_debug) { .tools({ special_function_tool }) .expect(message_assist_call_content) .run(); - tst.test("I'm\nthinking</think>\n\n<tool_call>\n{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}}\n</tool_call>") + tst.test("I'm\nthinking\n</think>\n\n<tool_call>\n{\"name\": \"special_function\", \"arguments\": {\"arg1\": 1}}\n</tool_call>") .enable_thinking(true) .reasoning_format(COMMON_REASONING_FORMAT_DEEPSEEK) .tools({ special_function_tool }) @@ -4006,7 +4040,8 @@ static void test_template_output_peg_parsers(bool detailed_debug) { { auto tst = peg_tester("models/templates/StepFun3.5-Flash.jinja", detailed_debug); - tst.test("I was thinking</think>\nNow I'm not."). + + tst.test("I was thinking\n</think>\nNow I'm not."). enable_thinking(true). reasoning_format(COMMON_REASONING_FORMAT_DEEPSEEK). expect_reasoning("I was thinking"). diff --git a/tests/test-log.cpp b/tests/test-log.cpp index 306f28c6191..ae4a6606bd3 100644 --- a/tests/test-log.cpp +++ b/tests/test-log.cpp @@ -35,5 +35,9 @@ int main() { threads[i].join(); } + common_log_flush(common_log_main()); + // We explicitly free the logger singleton to avoid hanging on Windows + // related to timing issues of thread startup and DLL teardown + common_log_free(common_log_main()); return 0; } diff --git a/tests/test-reasoning-budget.cpp b/tests/test-reasoning-budget.cpp index 3028fb4d8f0..f7a60178996 100644 --- a/tests/test-reasoning-budget.cpp +++ b/tests/test-reasoning-budget.cpp @@ -227,7 +227,30 @@ int main(void) { 3); // forcing continues through i=3 } - printf("OK (5 tests passed)\n"); + // Test 6: Multi-block thinking. First block ends naturally at i=2, second + // start tag at i=3 re-arms the budget, which then exhausts at i=5. + // Regression: before this fix, DONE absorbed all subsequent tokens and a + // second <think> block ran unbudgeted. + // Flow: i=0 accept(100)->COUNTING rem=2; i=1 accept(50)->rem=1; + // i=2 accept(101)->end_matcher matches, DONE; + // i=3 accept(100)->re-arm, COUNTING rem=2; + // i=4 accept(60)->rem=1; i=5 accept(61)->rem=0->FORCING; + // i=6 apply()->forces token[0]=102, accept(62)->force_pos=1, stay FORCING; + // i=7 apply()->forces token[1]=101, accept(63)->force_pos=2->DONE. + { + const std::vector<llama_token> start = {100}; + const std::vector<llama_token> end = {101}; + const std::vector<llama_token> forced = {102, 101}; + const std::vector<llama_token> sequence = {100, 50, 101, 100, 60, 61, 62, 63}; + + test_reasoning_budget("multi-block re-arms budget after DONE", sequence, start, end, forced, + 2, // budget of 2 tokens (per block) + REASONING_BUDGET_IDLE, + 6, // forcing starts at i=6 (after second block exhausts at i=5) + 7); // forcing continues through i=7 + } + + printf("OK (6 tests passed)\n"); printf("Testing UTF-8 boundary detection... "); test_utf8_boundary_detection(); diff --git a/tools/llama-bench/llama-bench.cpp b/tools/llama-bench/llama-bench.cpp index e21a80e697b..07198fb164c 100644 --- a/tools/llama-bench/llama-bench.cpp +++ b/tools/llama-bench/llama-bench.cpp @@ -372,7 +372,7 @@ static const cmd_params cmd_params_defaults = { /* n_ubatch */ { 512 }, /* type_k */ { GGML_TYPE_F16 }, /* type_v */ { GGML_TYPE_F16 }, - /* n_threads */ { cpu_get_num_math() }, + /* n_threads */ { common_cpu_get_num_math() }, /* cpu_mask */ { "0x0" }, /* cpu_strict */ { false }, /* poll */ { 50 }, diff --git a/tools/mtmd/debug/mtmd-debug.cpp b/tools/mtmd/debug/mtmd-debug.cpp index 6e32b283aa4..1e41ef793b3 100644 --- a/tools/mtmd/debug/mtmd-debug.cpp +++ b/tools/mtmd/debug/mtmd-debug.cpp @@ -72,7 +72,7 @@ int main(int argc, char ** argv) { mtmd::context_ptr ctx_mtmd; common_init_result_ptr llama_init; - base_callback_data cb_data; + common_debug_cb_user_data cb_data; llama_init = common_init_from_params(params); { @@ -89,7 +89,7 @@ int main(int argc, char ** argv) { { // always enable debug callback mparams.cb_eval_user_data = &cb_data; - mparams.cb_eval = common_debug_cb_eval<false>; + mparams.cb_eval = common_debug_cb_eval; } ctx_mtmd.reset(mtmd_init_from_file(clip_path, model, mparams)); if (!ctx_mtmd.get()) { diff --git a/tools/mtmd/mtmd-cli.cpp b/tools/mtmd/mtmd-cli.cpp index dd72dfb17c8..be958bd175a 100644 --- a/tools/mtmd/mtmd-cli.cpp +++ b/tools/mtmd/mtmd-cli.cpp @@ -90,7 +90,7 @@ struct mtmd_cli_context { int n_threads = 1; llama_pos n_past = 0; - base_callback_data cb_data; + common_debug_cb_user_data cb_data; mtmd_cli_context(common_params & params) : llama_init(common_init_from_params(params)) { model = llama_init->model(); @@ -145,7 +145,7 @@ struct mtmd_cli_context { mparams.image_max_tokens = params.image_max_tokens; if (std::getenv("MTMD_DEBUG_GRAPH") != nullptr) { mparams.cb_eval_user_data = &cb_data; - mparams.cb_eval = common_debug_cb_eval<false>; + mparams.cb_eval = common_debug_cb_eval; } ctx_vision.reset(mtmd_init_from_file(clip_path, model, mparams)); if (!ctx_vision.get()) { diff --git a/tools/rpc/rpc-server.cpp b/tools/rpc/rpc-server.cpp index 03ab78e5f05..08e68039141 100644 --- a/tools/rpc/rpc-server.cpp +++ b/tools/rpc/rpc-server.cpp @@ -317,7 +317,7 @@ int main(int argc, char * argv[]) { const char * cache_dir = nullptr; std::string cache_dir_str; if (params.use_cache) { - cache_dir_str = fs_get_cache_directory() + "rpc/"; + cache_dir_str = fs_get_cache_directory() + "rpc" + DIRECTORY_SEPARATOR; if (!fs_create_directory_with_parents(cache_dir_str)) { fprintf(stderr, "Failed to create cache directory: %s\n", cache_dir_str.c_str()); return 1; diff --git a/tools/server/public/bundle.css b/tools/server/public/bundle.css index 1d8756d82d7..f26e9ee83bd 100644 --- a/tools/server/public/bundle.css +++ b/tools/server/public/bundle.css @@ -1 +1 @@ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-400:oklch(75% .183 55.934);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-green-50:oklch(98.2% .018 155.826);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-950:oklch(26.6% .065 152.934);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-950:oklch(30.2% .056 229.695);--color-blue-50:oklch(97% .014 254.604);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-950:oklch(28.2% .091 267.935);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-600:oklch(59.2% .249 .584);--color-pink-950:oklch(28.4% .109 3.907);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xs:4px;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-foreground:var(--foreground)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{background-color:var(--background);color:var(--foreground);scrollbar-width:thin;scrollbar-gutter:stable}*{scrollbar-width:thin;scrollbar-color:transparent transparent;transition:scrollbar-color .2s}:hover{scrollbar-color:hsl(var(--muted-foreground)/.3)transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:0 0;border-radius:3px;transition:background .2s}:hover::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3)}::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}}@layer components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-2{top:calc(var(--spacing)*-2)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-10{top:calc(var(--spacing)*10)}.top-\[50\%\]{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-8{right:calc(var(--spacing)*8)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-4{bottom:calc(var(--spacing)*4)}.-left-2{left:calc(var(--spacing)*-2)}.left-0{left:calc(var(--spacing)*0)}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-999{z-index:999}.z-9999{z-index:9999}.z-99999{z-index:99999}.z-999999{z-index:999999}.z-\[900\]{z-index:900}.z-\[9999\]{z-index:9999}.z-\[999999\]{z-index:999999}.z-\[1000000\]{z-index:1000000}.z-\[1000001\]{z-index:1000001}.z-\[var\(--layer-popover\,1000000\)\]{z-index:var(--layer-popover,1000000)}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.-my-2{margin-block:calc(var(--spacing)*-2)}.-my-4{margin-block:calc(var(--spacing)*-4)}.my-1{margin-block:calc(var(--spacing)*1)}.my-1\.5{margin-block:calc(var(--spacing)*1.5)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-auto{margin-top:auto}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-1\.5{margin-right:calc(var(--spacing)*-1.5)}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-auto{margin-right:auto}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-11{margin-left:calc(var(--spacing)*11)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.field-sizing-content{field-sizing:content}.aspect-square{aspect-ratio:1}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-full{width:100%;height:100%}.h-\(--bits-select-anchor-height\){height:var(--bits-select-anchor-height)}.h-1{height:calc(var(--spacing)*1)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-80{height:calc(var(--spacing)*80)}.h-\[1\.15rem\]{height:1.15rem}.h-\[100dvh\]{height:100dvh}.h-\[100vh\]{height:100vh}.h-\[400px\]{height:400px}.h-\[500px\]{height:500px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.\!max-h-\[50vh\]{max-height:50vh!important}.\!max-h-\[80dvh\]{max-height:80dvh!important}.\!max-h-\[90vh\]{max-height:90vh!important}.max-h-\(--bits-dropdown-menu-content-available-height\){max-height:var(--bits-dropdown-menu-content-available-height)}.max-h-\(--bits-select-content-available-height\){max-height:var(--bits-select-content-available-height)}.max-h-24{max-height:calc(var(--spacing)*24)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[100dvh\]{max-height:100dvh}.max-h-\[calc\(100dvh-13\.5rem\)\]{max-height:calc(100dvh - 13.5rem)}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-9{min-height:calc(var(--spacing)*9)}.min-h-12{min-height:calc(var(--spacing)*12)}.min-h-16{min-height:calc(var(--spacing)*16)}.min-h-\[10rem\]{min-height:10rem}.min-h-\[48px\]{min-height:48px}.min-h-\[50vh\]{min-height:50vh}.min-h-\[60px\]{min-height:60px}.min-h-\[100dvh\]{min-height:100dvh}.min-h-\[200px\]{min-height:200px}.min-h-svh{min-height:100svh}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-1{width:calc(var(--spacing)*1)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-5\/6{width:83.3333%}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-11{width:calc(var(--spacing)*11)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-52{width:calc(var(--spacing)*52)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-\[10rem\]{width:10rem}.w-\[56rem\]{width:56rem}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-\[var\(--bits-popover-anchor-width\)\]{width:var(--bits-popover-anchor-width)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.\!max-w-4xl{max-width:var(--container-4xl)!important}.\!max-w-6xl{max-width:var(--container-6xl)!important}.\!max-w-\[60rem\]{max-width:60rem!important}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl\!{max-width:var(--container-4xl)!important}.max-w-5xl{max-width:var(--container-5xl)}.max-w-24{max-width:calc(var(--spacing)*24)}.max-w-36{max-width:calc(var(--spacing)*36)}.max-w-72{max-width:calc(var(--spacing)*72)}.max-w-\[17rem\]{max-width:17rem}.max-w-\[48rem\]{max-width:48rem}.max-w-\[56rem\]{max-width:56rem}.max-w-\[80\%\]{max-width:80%}.max-w-\[100vw\]{max-width:100vw}.max-w-\[150px\]{max-width:150px}.max-w-\[300px\]{max-width:300px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-xs{max-width:var(--container-xs)}.min-w-\(--bits-select-anchor-width\){min-width:var(--bits-select-anchor-width)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[200px\]{min-width:200px}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-\(--bits-dropdown-menu-content-transform-origin\){transform-origin:var(--bits-dropdown-menu-content-transform-origin)}.origin-\(--bits-popover-content-transform-origin\){transform-origin:var(--bits-popover-content-transform-origin)}.origin-\(--bits-select-content-transform-origin\){transform-origin:var(--bits-select-content-transform-origin)}.origin-\(--bits-tooltip-content-transform-origin\){transform-origin:var(--bits-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.\!cursor-not-allowed{cursor:not-allowed!important}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.\!gap-3{gap:calc(var(--spacing)*3)!important}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-0\.75{gap:calc(var(--spacing)*.75)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-1\.25{gap:calc(var(--spacing)*1.25)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-10{gap:calc(var(--spacing)*10)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[1\.125rem\]{border-radius:1.125rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-t-lg\!{border-top-left-radius:var(--radius)!important;border-top-right-radius:var(--radius)!important}.\!border-2{border-style:var(--tw-border-style)!important;border-width:2px!important}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.\!border-dashed{--tw-border-style:dashed!important;border-style:dashed!important}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.\!border-border\/50{border-color:var(--border)!important}@supports (color:color-mix(in lab,red,red)){.\!border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)!important}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500)40%,transparent)}}.border-border,.border-border\/30{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/30{border-color:color-mix(in oklab,var(--border)30%,transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-current{border-color:currentColor}.border-destructive,.border-destructive\/40{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/40{border-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.border-destructive\/50{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,var(--destructive)50%,transparent)}}.border-green-500{border-color:var(--color-green-500)}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-primary{border-color:var(--primary)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-500\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.border-red-500\/50{border-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-accent,.bg-accent\/50{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-accent\/50{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.bg-background,.bg-background\/70{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/70{background-color:color-mix(in oklab,var(--background)70%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-border,.bg-border\/20{background-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.bg-border\/20{background-color:color-mix(in oklab,var(--border)20%,transparent)}}.bg-card{background-color:var(--card)}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-destructive\/15{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/15{background-color:color-mix(in oklab,var(--destructive)15%,transparent)}}.bg-destructive\/20{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/20{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.bg-foreground\/5{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\/5{background-color:color-mix(in oklab,var(--foreground)5%,transparent)}}.bg-foreground\/15{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\/15{background-color:color-mix(in oklab,var(--foreground)15%,transparent)}}.bg-foreground\/20{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\/20{background-color:color-mix(in oklab,var(--foreground)20%,transparent)}}.bg-gray-500{background-color:var(--color-gray-500)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-500{background-color:var(--color-green-500)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/10{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/10{background-color:color-mix(in oklab,var(--muted-foreground)10%,transparent)}}.bg-muted-foreground\/15{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/15{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.bg-muted-foreground\/50{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/50{background-color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted)60%,transparent)}}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-pink-50{background-color:var(--color-pink-50)}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/5{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,var(--primary)5%,transparent)}}.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-200\/60{background-color:#e9d5ff99}@supports (color:color-mix(in lab,red,red)){.bg-purple-200\/60{background-color:color-mix(in oklab,var(--color-purple-200)60%,transparent)}}.bg-purple-300\/50{background-color:#d9b3ff80}@supports (color:color-mix(in lab,red,red)){.bg-purple-300\/50{background-color:color-mix(in oklab,var(--color-purple-300)50%,transparent)}}.bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400)10%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-sidebar\/50{background-color:var(--sidebar)}@supports (color:color-mix(in lab,red,red)){.bg-sidebar\/50{background-color:color-mix(in oklab,var(--sidebar)50%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-muted{--tw-gradient-from:var(--muted);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-clip-padding{background-clip:padding-box}.fill-current{fill:currentColor}.fill-muted-foreground{fill:var(--muted-foreground)}.fill-white{fill:var(--color-white)}.stroke-muted-foreground{stroke:var(--muted-foreground)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.p-px{padding:1px}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.75{padding-inline:calc(var(--spacing)*3.75)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-0\.75{padding-block:calc(var(--spacing)*.75)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-13{padding-top:calc(var(--spacing)*13)}.pt-24{padding-top:calc(var(--spacing)*24)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-9{padding-right:calc(var(--spacing)*9)}.pr-10{padding-right:calc(var(--spacing)*10)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-0\.5{padding-bottom:calc(var(--spacing)*.5)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-2\.25{padding-bottom:calc(var(--spacing)*2.25)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7\.5{--tw-leading:calc(var(--spacing)*7.5);line-height:calc(var(--spacing)*7.5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.\!text-red-400{color:var(--color-red-400)!important}.text-accent-foreground{color:var(--accent-foreground)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-cyan-600{color:var(--color-cyan-600)}.text-destructive{color:var(--destructive)}.text-foreground,.text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-muted-foreground,.text-muted-foreground\/50{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--muted-foreground)60%,transparent)}}.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-orange-600{color:var(--color-orange-600)}.text-orange-800{color:var(--color-orange-800)}.text-pink-600{color:var(--color-pink-600)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-900{color:var(--color-purple-900)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-yellow-600{color:var(--color-yellow-600)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.mix-blend-difference{mix-blend-mode:difference}.shadow-\[0_0_0_1px_var\(--sidebar-border\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--sidebar-border));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-muted{--tw-ring-color:var(--muted)}.ring-ring\/10{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.ring-ring\/10{--tw-ring-color:color-mix(in oklab,var(--ring)10%,transparent)}}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-ring\/50{outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.outline-ring\/50{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-lg\!{--tw-backdrop-blur:blur(var(--blur-lg))!important;-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)!important;backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)!important}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-none\!{--tw-backdrop-blur: !important;-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)!important;backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)!important}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.zoom-in-95{--tw-enter-scale:.95}.running{animation-play-state:running}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:pointer-events-auto:is(:where(.group):hover *){pointer-events:auto}.group-hover\:flex:is(:where(.group):hover *){display:flex}.group-hover\:hidden:is(:where(.group):hover *){display:none}.group-hover\:fill-destructive:is(:where(.group):hover *){fill:var(--destructive)}.group-hover\:stroke-destructive:is(:where(.group):hover *){stroke:var(--destructive)}.group-hover\:pr-6:is(:where(.group):hover *){padding-right:calc(var(--spacing)*6)}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/expand\:opacity-100:is(:where(.group\/expand):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[state\=open\]\:-rotate-180:is(:where(.group)[data-state=open] *){rotate:-180deg}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:left-\[calc\(1\/2\*100\%-1px\)\]:after{content:var(--tw-content);left:calc(50% - 1px)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:ml-4:first-child{margin-left:calc(var(--spacing)*4)}.last\:mr-4:last-child{margin-right:calc(var(--spacing)*4)}.focus-within\:border-border:focus-within{border-color:var(--border)}.focus-within\:shadow-md:focus-within{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hover\:bg-accent:hover,.hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.hover\:bg-destructive\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.hover\:bg-destructive\/10\!:hover{background-color:var(--destructive)!important}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/10\!:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)!important}}.hover\:bg-destructive\/30:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/30:hover{background-color:color-mix(in oklab,var(--destructive)30%,transparent)}}.hover\:bg-destructive\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-foreground\/10:hover{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-foreground\/10:hover{background-color:color-mix(in oklab,var(--foreground)10%,transparent)}}.hover\:bg-foreground\/35:hover{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-foreground\/35:hover{background-color:color-mix(in oklab,var(--foreground)35%,transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-muted-foreground\/10:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted-foreground\/10:hover{background-color:color-mix(in oklab,var(--muted-foreground)10%,transparent)}}.hover\:bg-muted-foreground\/20:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted-foreground\/20:hover{background-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-muted\/80:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/80:hover{background-color:color-mix(in oklab,var(--muted)80%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-red-400\/20:hover{background-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-400\/20:hover{background-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-white\/30:hover{background-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/30:hover{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\:fill-destructive:hover{fill:var(--destructive)}.hover\:stroke-destructive:hover{stroke:var(--destructive)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_var\(--sidebar-accent\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--sidebar-accent));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:bg-muted:focus{background-color:var(--muted)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-primary:focus{--tw-ring-color:var(--primary)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-4:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:bg-accent:active{background-color:var(--accent)}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-100:disabled{opacity:1}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-highlighted\:bg-accent[data-highlighted]{background-color:var(--accent)}.data-highlighted\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[highlighted\]\:bg-accent[data-highlighted]{background-color:var(--accent)}.data-\[highlighted\]\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[multiline\]\:py-2\.5[data-multiline]{padding-block:calc(var(--spacing)*2.5)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[side\=bottom\]\:-translate-x-1\/2[data-side=bottom]{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:-translate-y-\[calc\(-50\%_\+_1px\)\][data-side=bottom]{--tw-translate-y: calc((-50% + 1px)*-1) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-y-\[calc\(50\%_-_3px\)\][data-side=left]{--tw-translate-y: calc((50% - 3px)*-1) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-end-2[data-side=left]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=left\]\:slide-in-from-end-2[data-side=left]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-\[calc\(50\%_\+_2px\)\][data-side=right]{--tw-translate-x: calc(50% + 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-y-1\/2[data-side=right]{--tw-translate-y: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-start-2[data-side=right]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=right\]\:slide-in-from-start-2[data-side=right]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:translate-x-1\/2[data-side=top]{--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:translate-y-\[calc\(-50\%_\+_2px\)\][data-side=top]{--tw-translate-y: calc(-50% + 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-bottom-full[data-state=closed]{--tw-exit-translate-y: 100% }.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y: 100% }.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/10[data-variant=destructive][data-highlighted]{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/10[data-variant=destructive][data-highlighted]{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:data-highlighted\:text-destructive[data-variant=destructive][data-highlighted]{color:var(--destructive)}@media (min-width:40rem){.sm\:top-\[50\%\]{top:50%}.sm\:right-auto{right:auto}.sm\:bottom-auto{bottom:auto}.sm\:left-\[50\%\]{left:50%}.sm\:z-99{z-index:99}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:max-h-\[100vh\]{max-height:100vh}.sm\:w-auto{width:auto}.sm\:w-max{width:max-content}.sm\:max-w-6xl{max-width:var(--container-6xl)}.sm\:max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}.sm\:data-\[state\=closed\]\:slide-out-to-bottom-0[data-state=closed]{--tw-exit-translate-y: 0% }.sm\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.sm\:data-\[state\=open\]\:slide-in-from-bottom-0[data-state=open]{--tw-enter-translate-y: 0% }.sm\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}}@media (min-width:48rem){.md\:sticky{position:sticky}.md\:top-0{top:calc(var(--spacing)*0)}.md\:left-0\!{left:calc(var(--spacing)*0)!important}.md\:left-\[var\(--sidebar-width\)\]{left:var(--sidebar-width)}.md\:z-0{z-index:0}.md\:mb-24{margin-bottom:calc(var(--spacing)*24)}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-\[64vh\]{height:64vh}.md\:h-\[80dvh\]{height:80dvh}.md\:h-auto{height:auto}.md\:max-h-\[64vh\]{max-height:64vh}.md\:max-h-\[80dvh\]{max-height:80dvh}.md\:max-h-\[100vh\]{max-height:100vh}.md\:max-h-\[calc\(100vh-13\.5rem\)\]{max-height:calc(100vh - 13.5rem)}.md\:min-h-0{min-height:calc(var(--spacing)*0)}.md\:w-auto{width:auto}.md\:max-w-2xl{max-width:var(--container-2xl)}.md\:max-w-32{max-width:calc(var(--spacing)*32)}.md\:max-w-md{max-width:var(--container-md)}.md\:flex-row{flex-direction:row}.md\:gap-2{gap:calc(var(--spacing)*2)}:where(.md\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.md\:rounded-lg{border-radius:var(--radius)}.md\:p-4{padding:calc(var(--spacing)*4)}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:\!py-3{padding-block:calc(var(--spacing)*3)!important}.md\:py-4{padding-block:calc(var(--spacing)*4)}.md\:pt-0{padding-top:calc(var(--spacing)*0)}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}.dark\:border:is(.dark *){border-style:var(--tw-border-style);border-width:1px}.dark\:border-border\/20:is(.dark *){border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.dark\:border-border\/20:is(.dark *){border-color:color-mix(in oklab,var(--border)20%,transparent)}}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:border-muted:is(.dark *){border-color:var(--muted)}.dark\:border-purple-800:is(.dark *){border-color:var(--color-purple-800)}.dark\:bg-blue-950:is(.dark *){background-color:var(--color-blue-950)}.dark\:bg-cyan-950:is(.dark *){background-color:var(--color-cyan-950)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-destructive\/70:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/70:is(.dark *){background-color:color-mix(in oklab,var(--destructive)70%,transparent)}}.dark\:bg-foreground\/10:is(.dark *){background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-foreground\/10:is(.dark *){background-color:color-mix(in oklab,var(--foreground)10%,transparent)}}.dark\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:bg-muted\/75:is(.dark *){background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-muted\/75:is(.dark *){background-color:color-mix(in oklab,var(--muted)75%,transparent)}}.dark\:bg-orange-900:is(.dark *){background-color:var(--color-orange-900)}.dark\:bg-orange-950:is(.dark *){background-color:var(--color-orange-950)}.dark\:bg-pink-950:is(.dark *){background-color:var(--color-pink-950)}.dark\:bg-primary\/15:is(.dark *){background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-primary\/15:is(.dark *){background-color:color-mix(in oklab,var(--primary)15%,transparent)}}.dark\:bg-purple-500\/20:is(.dark *){background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-500\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark\:bg-purple-700\/50:is(.dark *){background-color:#8200da80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-700\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-purple-700)50%,transparent)}}.dark\:bg-purple-800\/40:is(.dark *){background-color:#6e11b066}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-800\/40:is(.dark *){background-color:color-mix(in oklab,var(--color-purple-800)40%,transparent)}}.dark\:bg-purple-950:is(.dark *){background-color:var(--color-purple-950)}.dark\:bg-secondary:is(.dark *){background-color:var(--secondary)}.dark\:text-amber-400:is(.dark *){color:var(--color-amber-400)}.dark\:text-blue-400:is(.dark *){color:var(--color-blue-400)}.dark\:text-cyan-400:is(.dark *){color:var(--color-cyan-400)}.dark\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\:text-orange-200:is(.dark *){color:var(--color-orange-200)}.dark\:text-orange-400:is(.dark *){color:var(--color-orange-400)}.dark\:text-pink-400:is(.dark *){color:var(--color-pink-400)}.dark\:text-purple-100:is(.dark *){color:var(--color-purple-100)}.dark\:text-purple-300:is(.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:is(.dark *){color:var(--color-purple-400)}.dark\:text-secondary-foreground:is(.dark *){color:var(--secondary-foreground)}.dark\:text-yellow-400:is(.dark *){color:var(--color-yellow-400)}.dark\:text-yellow-500:is(.dark *){color:var(--color-yellow-500)}.dark\:ring-ring\/20:is(.dark *){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.dark\:ring-ring\/20:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--ring)20%,transparent)}}.dark\:outline-ring\/40:is(.dark *){outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.dark\:outline-ring\/40:is(.dark *){outline-color:color-mix(in oklab,var(--ring)40%,transparent)}}.dark\:focus-within\:border-border:is(.dark *):focus-within{border-color:var(--border)}@media (hover:hover){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\:hover\:bg-muted\/30:is(.dark *):hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-muted\/30:is(.dark *):hover{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[state\=checked\]\:bg-primary-foreground:is(.dark *)[data-state=checked]{background-color:var(--primary-foreground)}.dark\:data-\[state\=unchecked\]\:bg-foreground:is(.dark *)[data-state=unchecked]{background-color:var(--foreground)}.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:color-mix(in oklab,var(--input)80%,transparent)}}.dark\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/20:is(.dark *)[data-variant=destructive][data-highlighted]{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/20:is(.dark *)[data-variant=destructive][data-highlighted]{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-8 svg:not([class*=size-]){width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pe-0:has([role=checkbox]){padding-inline-end:calc(var(--spacing)*0)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.\[\&\:not\(\:first-child\)\]\:mt-1:not(:first-child){margin-top:calc(var(--spacing)*1)}.\[\&\:not\(\:first-child\)\]\:mt-2:not(:first-child){margin-top:calc(var(--spacing)*2)}.\[\&\>\*\]\:flex-1>*{flex:1}@media (min-width:40rem){.sm\:\[\&\>\*\]\:flex-none>*{flex:none}}.\[\&\>button\]\:hidden>button{display:none}@media (hover:hover){.hover\:\[\&\>kbd\]\:opacity-100:hover>kbd{opacity:1}}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}@media (hover:hover){:is(.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper)>th,:is(.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper) td{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){:is(.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper)>th,:is(.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper) td{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-foreground\/25:hover{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-foreground\/25:hover{background-color:color-mix(in oklab,var(--foreground)25%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(95% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(95% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(87.5% 0 0);--input:oklch(92% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.7% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0);--code-background:oklch(98.5% 0 0);--code-foreground:oklch(14.5% 0 0);--layer-popover:1000000;--chat-form-area-height:8rem;--chat-form-area-offset:2rem;--max-message-height:max(24rem,min(80dvh,calc(100dvh - var(--chat-form-area-height) - 12rem)))}@media (min-width:640px){:root{--chat-form-area-height:24rem;--chat-form-area-offset:12rem}}.dark{--background:oklch(16% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(29% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.3);--input:oklch(100% 0 0/.3);--ring:oklch(55.6% 0 0);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(19% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0);--code-background:oklch(22.5% 0 0);--code-foreground:oklch(87.5% 0 0)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}a.svelte-1q39rn8,button.svelte-1q39rn8{cursor:pointer}[data-select-viewport],[data-combobox-viewport]{scrollbar-width:none!important;-ms-overflow-style:none!important;-webkit-overflow-scrolling:touch!important}[data-combobox-viewport]::-webkit-scrollbar{display:none!important}[data-select-viewport]::-webkit-scrollbar{display:none!important}[data-scroll-area-viewport]{scrollbar-width:none!important;-ms-overflow-style:none!important;-webkit-overflow-scrolling:touch!important}[data-scroll-area-viewport]::-webkit-scrollbar{display:none!important}:where([data-scroll-area-viewport]){display:flex;flex-direction:column;align-items:stretch}:where([data-scroll-area-content]){flex-grow:1}html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}@media (hover: none) and (pointer: coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:#00000014}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:#ffffff4d}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY( calc(var(--lift) * var(--offset) + var(--lift) * -100%) );opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{-webkit-user-select:none;user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 87%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 93%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 84%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 43%, 17%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 9%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}.code-preview-overlay{position:fixed;inset:0;background-color:transparent;z-index:100000}.code-preview-content{position:fixed;inset:0;top:0!important;left:0!important;width:100dvw;height:100dvh;margin:0;padding:0;border:none;border-radius:0;background-color:transparent;box-shadow:none;display:block;overflow:hidden;transform:none!important;z-index:100001}.code-preview-iframe{display:block;width:100dvw;height:100dvh;border:0}.code-preview-close{position:absolute;z-index:100002}.agentic-content.svelte-1uhcmx5{display:flex;flex-direction:column;gap:.5rem;width:100%;max-width:48rem}.agentic-text.svelte-1uhcmx5{width:100%}.agentic-turn.svelte-1uhcmx5{position:relative;border:1.5px dashed var(--muted-foreground);border-radius:.75rem;padding:1rem;transition:background .1s}.agentic-turn-label.svelte-1uhcmx5{position:absolute;top:-1rem;left:.75rem;padding:0 .375rem;background:var(--background);font-size:.7rem;font-weight:500;color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.05em}.turn-stats.svelte-1uhcmx5{margin-top:.75rem;padding-top:.5rem;border-top:1px solid hsl(var(--muted) / .5)}.processing-container.svelte-14103tf{display:flex;flex-direction:column;align-items:flex-start;gap:.5rem}.processing-text.svelte-14103tf{background:linear-gradient(90deg,var(--muted-foreground),var(--foreground),var(--muted-foreground));background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:svelte-14103tf-shine 1s linear infinite;font-weight:500;font-size:.875rem}@keyframes svelte-14103tf-shine{to{background-position:-200% 0}}.raw-output.svelte-14103tf{width:100%;max-width:48rem;margin-top:1.5rem;padding:1rem 1.25rem;border-radius:1rem;background:hsl(var(--muted) / .3);color:var(--foreground);font-family:ui-monospace,SFMono-Regular,SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Liberation Mono,Menlo,monospace;font-size:.875rem;line-height:1.6;white-space:pre-wrap;word-break:break-word}.conversation-chat-form.svelte-lwk0qk{position:relative}.conversation-chat-form.svelte-lwk0qk:after{content:"";position:absolute;bottom:0;z-index:-1;left:0;right:0;width:100%;height:2.375rem;background-color:var(--background)}.chat-processing-info-container.svelte-1ktvj8d{position:sticky;top:0;z-index:10;padding:0 1rem .75rem;opacity:0;transform:translateY(50%);transition:opacity .3s ease-out,transform .3s ease-out}.chat-processing-info-container.visible.svelte-1ktvj8d{opacity:1;transform:translateY(0)}.chat-processing-info-content.svelte-1ktvj8d{display:flex;flex-wrap:wrap;align-items:center;gap:1rem;justify-content:center;max-width:48rem;margin:0 auto}.chat-processing-info-detail.svelte-1ktvj8d{color:var(--muted-foreground);font-size:.75rem;padding:.25rem .75rem;border-radius:.375rem;font-family:ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace;white-space:nowrap}@media (max-width: 768px){.chat-processing-info-content.svelte-1ktvj8d{gap:.5rem}.chat-processing-info-detail.svelte-1ktvj8d{font-size:.7rem;padding:.2rem .5rem}}button.svelte-76ksb2 [data-slot=dropdown-menu-trigger]:not([data-state=open]){opacity:0}button.svelte-76ksb2:is(:where(.svelte-76ksb2):hover) [data-slot=dropdown-menu-trigger]{opacity:1}@media (max-width: 768px){button.svelte-76ksb2 [data-slot=dropdown-menu-trigger]{opacity:1!important}}button.svelte-76ksb2 .stop-button:where(.svelte-76ksb2) .stop-icon{display:none}button.svelte-76ksb2 .stop-button:where(.svelte-76ksb2) .loading-icon{display:block}button.svelte-76ksb2:is(:where(.svelte-76ksb2):hover) .stop-button:where(.svelte-76ksb2) .stop-icon{display:block}button.svelte-76ksb2:is(:where(.svelte-76ksb2):hover) .stop-button:where(.svelte-76ksb2) .loading-icon{display:none}@font-face{font-family:KaTeX_AMS;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(data:font/woff2;base64,d09GMgABAAAAACxUAA4AAAAATOAAACv9AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgQQIPAmcDBEICudA03sBNgIkA4J8C4FAAAQgBYh+B4IgDIEnG2lBRSNqcB4ITQHdu0RUbnZP/r8lUBmydvB0DNUbAkiKJigoTnOMpurE0ASqy534BeGfhRiOg8VTz57vjrPSVW8fG2f5iKpZ7asUP0v0x15a8Td2nOeNkGS2tUe753/OSTbJQhd7oX2Q+DtVau0OdPcreAdobvWxjQGLaBYFC8ZYJaskxug06hURfYx8xah+oz/Tjyq/iar98Ht2XwCNi/FoUaKNTMVIIKWBXZSDL/y399c3tXriPZrZZY8UyYDiEEi2Y2+AzdfT7xIFV1ulj2OSfqVfMMosNoHEhoRtmbqnD/xeVU0dptKQ8pHLZD0ypbkw7UhJSbc7LhWwaA2zhhnb9EH3/BcIUGhbt9yALO4vomb5++UQ08yE3JdsU7GIybsPb3poSrpKoc2UW/cXhmJqRYpCvL8xHoRQ2Yik+q/eVYpZ50xZItp1HsdW03gQJLIehxDQ4//f1JL+P5K3TFrpvAISgEOINJYvmpG9tx55c7a0Td7ybPmatN482Vdt79WCUnhF17BbSq8s71h4AmAACUB5ISQAhtGEBgdQdCyV3mM4T6mrwDgyt6XWkN4dm9gUgQTIPZvnzbUE57t6jgV8rU8ErgfphyyM80jjpqeBX2H49jufz+wza3OOAe2fLdLMLlk/+jmVc8tKAdD/VTlIdS1cAC8Ei8RxBXa/0zKYfEZbVarVSKk3x6608r31/UKWqbA4uecZ1cmcW/6evp//4ZZ97xtf+8qXvvCZx78Z2VjUUJDrxPcIszD6PL783nw6esP2VcxSu/zOtLZEdyUWhLEBX88QnH+luvwV2H+Zne/jHHnBHdnTuREj62ay77wnlhDjpBtAMi5qRQLTal6RIV58RQH0h2LmxgVtmSdi1MIzrZYO3SRzewF6RmabesqzxcBdXYzKNvU9nxMcgtmLm/eQB0SHfJq2OwkxOxzYkKQurSADIlhkYG0MkkSht+rQgy+JlPnX0DmNcjwbU20HT+G2+Tt8CLq8WDn7rM5HL5KDnxYOvjcU4aWenSmRoXlIb9FbGl5aCnPkqyUHh8emSPOF80QGwsBsNOt/GrLT44yYG4hpS+5bpiPSDDcP01kkM6mmZ5asNeuTkUInvAB70UwoahUtYAxKTz2ouR72SlMaU+f9t4mqosJcYwi/6I6iAHM56Vxgd7pXOzxabd/x1omcfj2UovTudcq8EeK6S5sWxLyBoy8DC0dNwp5uFTVoczSAQw1madtUQKzXSeTOnPSWpW5Pjg0ADgacnUlZ26dvzujKhB276RM5GOwxGTfWJZ884NYmU9JTlKMQ67EoPWKc2xX0iEvUgrKE6TJHo1ZG4ZI6PZvjV5Fm+0FEwxkEzKknO/RHRGyvB+/E25KXSIjCXdtc7/UqRphMgBPySyV65psaowyca0Uxg1gr4sg8Kc6krMvtCmNG5NWqtS6QJ83h63Yo8r2zx/RrWTQhP7kRvm6t085PSv7SBRTkuGPmVBWpKOMwt3x2LeEGowhpTkDhqygYhild81XV7UVtL1/nPSedDLD+xHcFY8hp0lA36gRsLmF8xgJcs45EYuQvpbT92Iq4UMDb24E5U4wZmNI3UqWIp+WFixLLNVFVEqDQnFRKYSB4LZYfGUUTFBSjYkkTgjJhqBABVSKhRiyoEwUNoqFJDLSIPdoNEoO2VNXX7SCoSc8NRkvrdy/Qm6gfN+/R21H93GcpLjAMXydJ5XjNRI2P2AZTbIuK7VCxPSp2QMWOqNgJFTujYhdU7Io60RNokhZ6hSLLFVo7RBtWXUv25G2kN9gr2Ksd9kkfAFNENC9pWVr3uUsJRwD0NVb5EvRts64T+7SLlWbH4al5muyH0dzlJvoDr8CPDMAFsYltsw4p4DTOyyP5x6mqeyfLpX+a9XefDAQaTH3IEuPid6jiINS3moqDi3skzr5Eh6CwJI46OES7BlP4nK/u2uUnhH3X8UZNh8EpzV5fouBQEMl3aU9Lv+NFn7x4MpYuRwe5pwFNHvy7lWEZ1CqnqUxLOODqbiU6+jwcSr2qTvn56pJpZ1tyiNyu1B7KJFKxzorY4RkDUxPJ2Astpj7qlXRyLGJnV7dcLgkG2mWZpGUndDgZtGyHhnYZMRMiuJgiBiRneXrqFnQosyXEuVCJznQ1c9NWcTgdHMaQlUVWmuX/vSNsOjLmBJhmFsmBkflxhwyytea15ocajXh311oAWkoWSitvbPD5+8UIZEPGJyImLO0HRh3jEUjsRBzl1HV7Xpj90RDURGrPk5cY1t2mBTRWl95pZuS45Zg7brr1TY8tP+dSj3ocODS0Lj0eHBY5XRjPdjMPLh6gYs3eQzDBRsLRZCZ/YaJn6j5L0tmCBrUsm/gen4ji9LgSSVr/IqZMZn6xruzBjSw7z5khb1Bh0iiGBjF8ckNbhrzMmUc1OOCUZLHuywGN3Lxm9Q1s356phWkooEqag9ibDg55w4zHQ7ItqDHJ7QphciaSOs0ZeWAWBmASsECRABKFUCYIRQ5/ojIBGoVQJwQNHBLpEzQVwDoCQltBOLIE4hKIRyA+QQRmcUmISyJcEuOKRA6PpHgkwyM5nlVAwyolVqmwSo1VGqzSYpUOq/TYJQMKeUG0xow0qaROSIsZ8vEJMlNzFMjBIgZlGQOsFpBRjGt1cKOO2ArjgLvEAfYxwCEGftx7jSfVeFaNF9V4TQi4xQD3GPgDeoNPNfhSg281+EkI+MYAvxgm/iT8ul+3S1EtD7KreP4g3nkzHdHUFBvrix67TTUE5aKRocyJrtL3ArqcB6JLoPiNk+nFPl5njwid712g8/p8j8wFJiYso1bWyKnNNKb11SdkE2pqSxvTRtKbALDfwEkaz/UHO45bLDa9gjTaC2ppx0ilaRA6BafkG8cUpHTajRoTBEOHjT4W5bOcWDKaY4Wap2NeDyEaL7Ho9U5iAEs0p9wQCIAvxkOxPCLAAuOh5QSAALAheCMfBmVAkCViOYmNgykQUgUNAscKeDR2cXldTXFhcUGnMZEqRO4t+QuevO/5z5ofjwmkpBIeJyk0XhJBadLyUiqxu+n1taFeFV8IZpW5hZEqAxUlzzdHFeCwLNDDpRiySN/ZGesrCRyJPlJJehFhUo+5QFF0E3GSYW9MCjmJXyKVqALAOaA0TQc1orDnAjuxMKVYyO3XcWG8ZExVneJ00+6pMx9bsw/OZq55a6XR+n3baWrO3D+V7J50f1b/6Yl7FZ9e/KzirsIFNCQkkJPSJRhCceXfP7/4BXe4XdH7Z/kvV/R/17rZe8MD15GmMKMfF8YFVKfeVesLbQlc6NNIfkoPCBJYvvLFp3rIyrdFsTX30efnwDPUbA6gKwWyS1acJlWHzuPtZXG0LuLoM2MRoS+xRvhUcIe3RU909Zzo+U6q0FD8e/ypD6V+lOo7RHBFqu3ZVdFOY8Wfm7Oi9IDSannNHBDqUq+tHInI3w9Nsq29j5ZWRP3PBwSk/IUGPkNvOZ00eVoPfBdwZa8kzn3I7/hSrtxSCvwKA3LZ4cBBn8qQdxWl/o+meHTPRRkoZW7qKf7F33/e9AV+5kOJYSfOWs60RHAasSD8ATKtAJ7vVv1f42RRJW21o6cL7hVGhJHOxUcCHaVKCn5lAyrg6XsnTqwG5aEuQM2av+O06Ab0Wrd+ZGqnlnahMBverxpYCphET+f2ud8SZKzMX0UYoeJ9h5lyxM0/ya3BJg5ZfUhdFsVh+7SfWzgca0I0UExaV5FPFfY4Xb1k3DgWX0C7epDMrOA46PBqjPO8KsZ/bjhADi2feK2sSakhCFCXYiMYg3SJfW86vIubrRz8G29T1UZ/v9SFcFbTEjLdSoq18VrJVL0KyxQg/OowzMEBEU6aT3SsJD1rvyCj4OHhqGhbYSs4CfZHBJKidj2PPPPn0siWVE+usD1/JpS8YFgM13BmqWWMmrPmYFx/p9T+hlDk55f3wbC6iSgA6+VaCBekWnUULwS2y1bVuftIz12xqsiZz1K7SXMQGYwHZgKrV5ULH4m26UvBHby+gMbnTGdERztnREk+Xlrh4GeW95XYR0XbQTsk0dTC+PS4MF4Rq991MuTPMsU4hui3omZlx3bWanVL/UF/DEOJuYyUPQ4Hw9yos2V/RhSvt1A/ZFwo53/vR0Zbg03wXciabRwbS+I34/f49VYDc56F4TnPJEXvDSEnKfbdAInptM6qDWcsQeRcMyMZSxj22blwIlWYXnB4GJofGw/joPsA+xXfHcMEjRXzx0vHT2mSkMHMU2g7EjZeKiNtYV/SINXYd/07Jt6mnZ6oJqQWmZvFuLwXmyuNA6krHRvgvNS1hTQUU8XyqzPmySVsT7ZpBhbmZgzd6zGtXrGNj0Q6p8mDXbsVFWnb8UucZy+D5waXCnWj2p5GEWbhJec2+PsLgWy7LO/xGZPqPGEsunmQhvaokkR1l9XV9bfqe1yTTJXcTlo2zeXVn3tHbCWbFECC57mRyJrMjAZk0cYf6rVCbCO3C6i1Xv5Q3uSSJXqWHV/R6oQ4Mqh/kdmXB/FvM7Lcdrxxg81mhTxyeEiPNbsbt+v3Beaz83D0VDQEJ8NzktWtpnviuEvzZrgKnh/syns0au4yOzlbKBQNDfd+2d1fM+tAvosoVsk7OzdH8Hk34s9ttfiScUyGw/M2Wpni19c8NWFm+dPgeeLVj6milyjG3S2DpRlGOgYTcsx0LHBhWf1l6nXEQ0g9v/tn8kG0h2YTm++wzRA+vyvP5JvJJAy83eiUGRVsWtrnEGFc5ovB+ntrKOOzFRnfEeUfUzYdxb6a10LPwX85JXCkFnpd7x2WcRl1LRR/6qL2iJbHVd2m1nWswbzJw5MTnNxqfNOY4BlkWZsfHla9vMcwYxCvmz+nZRtSJf5RyhBBgQ35ZToljHTWMhb/q5RgY39lejN2kS09wmuMhfgx9GRYGK82BT6s5hCMI8/uhCBSOF3af2ads0hDYLwxeohhEqBpYeLREvg555bYj3C/5HNtiU831MJ2S7ptKEwrm3Z/y9K+BwKiHzShD6K9kw2/44cbuxSdq73r4mL4S5TW43/YXq6lw2KAwKGUiZbyFqxJQNu2NisHxhQOQ0ONa7OeM193WVvBY6g5/SCDi4PNjqnLPo3sb4caYDLYZdt4fQB/Nt4TkzLktPsCpPgc+oaZ/rXXa5nEXEdqrk7uurZpGEINzMEoRCTfqV5Yuy9phMd4yn1ijbzDFEAS0o1/KKFp/KM16SaC/+4PVXHg5y/t5IXRhcv9wwNhdUYBmSINfSkSmm9vJD7CP+/Q4nfa1iRgqbanlDQpDbAlRekfrqzaPTp2O4XcWCzfiX+UdQByH1smU62bgLkNM20TSMOh4pON5XSZeU+/D68VVi3kBbEhe+ySx0BlYEom1rWL664I1rK3t0F4R7mbOiVEEj148CQ28rpp4RCFOilERKgPi9uiLYtwNZRZsRGBF9C/2+yyYy7T0a5T2t0jOUmoVbMcTvwR3o8jHCMH73LlO/fse9QkrqXxvLttWg3vqKtVt4vJy/IWu5F3JLpSsvOc1DMoOHDWCZn7lembbSul2zsdF1gWtQMuWyEIINZJXmJi6AP5HUX/w4R+T9Ip0dOg+LlJh8nACEj+Y4H29CKaWBUAlEAOmPMaqxSLv9UNTOlYBk8HRWhHDy2K7eMCjR+udE4YXPmKbzdKOjPotrWqxa6BgmMUITI4CnTckXXksla7EfYMAfFeabXueqxV3sXJ/lKz1sk9j6Kmhs2UZBW1IXznb8gi0sAUbKwb51W+Tj2/WlGs3QFDHOlCoIRxqCre8Tg7EVOqs9T+Qpw/RyaguP0V76/Havdii9T+OWI9Xnd7oHIU0cVcTz4gXCRuRZLGSxpQELT1iw2GlXEcEHVjHxloe/ojrFkmkXMUq41hEGISVUYEapOiM2c0XRmaFwaUiPF0PU6PMrRniD3U4aNuLiROVgC5qyyACpKbH5rT1z6UMeEtQz6UNNo1EORGVduaAl4XPrKqHSkKgCHu6TsJydtlgj722ZFH9hT+RDi1qhtNB9NTqQzj2iS+9hVGEaWv2WddaUHaQwJa3iEPxpeEYsAUxfeueQLRhZWgVBUfKrkwmdnszFEVHSO1V6Np8TVr+FUFwZYDR8uamVGEmZ+x+MHdjDp6ZuNmiq1cm+L8B7D9hyv3kEe+jtWWFYGRuzlwCm2cQGnOXmKfeoFDlmggl6rKop0aDpmUlL3veeyQ/C7LSgsCz+XkGA560r1XqeTUDIycNXT0N0K/LWzxLHm3nBd/SM3QYcax8J0+SEJxYbOe32VpkbmnDnHi599VbIy9qWs12hO8VeMyvRYxtDZ3nY2F6SUtiL3RzDLY9yDMXmI6EuqbY+mNVHTxUYuWDLxvyZhul4CassNDBYdKsyZb5qGOdh51Twtq841ahZd4hjF3urdyOJT0BQYH0e6BhgrK0Dy7PemvBxND7369/fajb7gu+VfehkuvoQRD9gZIr5wVCu6w7bsx/oMXGvdv02+mMMS/qKwvMR+g9XonP5KzMmAy/MaZPScg08pfDDidfPm3x6PswFz/80wYOXoTOiuTn5bn9F1TKs5/3C06/iCduqACxfmajElyQNyTmM0dVA6/dAVEibs+ir+ZyMWJoQkwrqwIfQt0oilniWb8MMAz50dTiJGkz8iTYphbHm5Zprw1HbIqB+QN2bX9EUOgIS67IU9UGVVdcrtUxPjcLC3/PTgW6fj9ikf0t5oHYy2e231i6XNCz8ScqCi9KSurIzQQuCGGBdJ2Fn0TS9gJZ9FBPsplIHm0dD2q/BlU0+pJTAMqEhkLopGLtR5KGD6aH9dsQbXR9wPtz6De5Rxaj21HhkMd6TLYj1v/ZGXepK3AZE7gTBoHcPWmdEXulZfGls+uSpyifGhYLn1Co5x4zUL6tOeLX6wtMOBNas9PdWKEsTe3jkcGRu6akyLcdWtwAon9Do79uIBdz2RLgmoTA1DQvviH/icwvUj3xPnPP4D0Qi85f1m7jPTqvFcA9W9NuPGJQPbq5e5Y97i3c+3u998QJhTmhgkbn1MXo1pG5oMab1OoQNmS4XMYUaG0oDNH8L0UgW3IwxX/A4HedAvPNQP4r3mLepYNRJh3OPwYj/i0O0pi6hwVckNTmmo2NIfhBazSgffArwKaV7WhvPGwo/X4Y+OZBtUjJ8sRaq23u/r5sxxlDGnVyTh7JEI7F56NNtc06Csqo2Hg1vY2rvOqg1x3J1g6C17Kcp8VNSd86z4Xm3yuNQ9B+R+S044SxLoNk7aRNXfCvXZd3LN0JKEE27jGxrbBgN4SdarUh2sAXP/iUakyzF3ADcNDgnVNGl+oPWtLnJ7uUkfkEj8mJurqf/6lFXPzGOv6R7eWdKGs+U0sfbVTqU/W2zWgQ/d6bUtQzAIwRC8CPyS3/on9jgn87UvzsppQc1WN0djZGKJ3JhXBoK7u+MhgYizpHj/rnqoP9L5pTxeMV+vbL2mYbCtb4jEnPHSHBrKsLaJLuPrm2puMmk0bbXMNqoR7+bMLuua1v0Z9HGRU19WChz/YXOVzLXTjvyr3avXpTpsC1PheLJ/CLqcc1h2hkI/oDoMa3ie+FXcLPcGFChBLULa7FHzpGAMdGv/88Degs16hVCy0W5rpClOdSeV3axdnvXTSBbBV3Cblzx+LWmQtnGo7nyWn4xUg29wvtl5rNrBIohjf/2Dhyd5Dhs52p8TJKr3doU/BndscYguXDbfVkXgPhzcZKhILGz3pqo6b241xX7zNcPx4+7uMfoRFqW62WDcN+34+A6h3NR/tDVUZv7bXRFKyB9MeG+cPPzJs8mSvhrJaOohSpt5bg6o+GddteOVGGUxZQ2FYdXX+fk1SN3Pj93pWbeAZVIhiIpPAuGdbC9uKY2Fb1e3QmrbW3BXiLL3Sm4wMZVISiLtjC6NJYbHnFfv+pHmqm5pMZIjaP7UiuhyNbteWRfAZrgB1gUTeIkFwB0jVxUYb/cb31Yn3aEzmYmKp6s4M3Fm+tTnSEllazhuq0O5v/YpzqT4wmNkRFyfFC+3ALCv5Cg7lqTASa3dptzxT+S5doLGiYqItmWA29OKekM2iKWidnGmLNQa//HCkOelZPu7t7UlPeyQt9OMaIzHxTFue2NCVZH2y7X0ctr2HagVanvsCBo1XLqerR4ogTzFcJxV1vadJioc4BxkVuGocr5m4cWd5S52GuLX1inpPo3+gcTbLq/WqBqt2t1VvKyf1SGFvCBZx86RF8ITWXYmnsheRgfOCjaMEpslcdeqlGRipsWKX0EXUp3tXG1wOp02PLvGT0CfxqAuVXToHwYeh4JaR2PvLdaAGK0J752Xmi7M7ThGHWiHCpqiRstOpaiAv2YmK9g81Uv3o1b90CnF4t+7GYF8V3I5uJGukgCJU/rWfkSq5SOFR2oz0gcib9y72+R593hU/yO1zpxyNMzGfLTpmZ20MfEkPr9ImMrI5xl6JOaH2B3ebcJVE/n4w5+aeZ3Eubji4dUdrNppNuxwtzUHBFgmyNJ7/4otfpu+uBGUW7F+zkcNu/YkxbBCiFH/cahL5XqmFn+I2fjrjNCgEFvnLIU9mE9oSVxloBnNbnS0tF/cQX5rdu1I+mHduEFd5UGv9cciAQn/IOueFsMpeWQ1lmApFHpkCaNk+0xutE/UwjXBmhbmqoOi7xW6VwUjh8U+aCMiPF1G3ZY5mvU9BHgWxTVtLYWsoTG1tOFO1olalEcGnmO03dozVGMSg1kZsj7Kf2uCwsiQUaBJCPiE1RjVS6uYWAaPjuE1fmAedCSklRomo6oUKisVT32yZCjrtctmTsvTssg7nV96TkXVbpLDFXXbQR6m7hunHdpQm3BR7S2+9MQgbhToHPEqxiglHxZu74yzbZ5FwKdEmkFRzw89ruO9VBC+3d1bWooE8cRmrruKDZR6vu8dmVmIc61b2UFfh3uxG4CJbpltEbmjrRdfr/2GyqhE+qDcHYhIC68S12MwSxiLBKYKt3GZiCUc2Kkd4dIzNsf4f/2Fv6YAJpkBLXbIoi7ZZ7jse6PCSmlXQhmKCUoE4KsVtR5VCbEVCu0SuMmsk/NrtIhjg6fec6fb1fhe6MYmcFyM7tXiDQTdPfcMycXgfiUaR/Fsand1qnSrb+Oj2dyDyo93E/ny/mbYa5fyXDiOL/K/zdkZ3PNx6V8Q/8r3i5/armx/7rMMEFfwl/M9a8yQHbCe4Js2MclaChHtuK5686ux5mIPOxXf1klG9z83YjKYO/WRrrd9RYV3Y0U1+Z8vVKjxmDOEVpN1RDKUg33os52MUcwtQcetdbxzxMomw+/+BFJvDiFITyfyAbAv1Y+31w+V1z80kivRGdawOOUqgNe4fpqRwzrZeJ+1rEkq8l46pXh9oMHDYiAIi0XJ6vNHZFWj4fr9Z5sBypE3hw2UI0nitBOA2IC9kdnPxJ0sLbXdeWUyjneoqXC2xBwlpw2L/oNvcrYzxzdpXDQLdiDXeswyc1aEo2lBVLIeWrpt5b5QD/aDQUk9lGbxPWk5ovQQr3eOrvmakppFesh0kxTjzYRQc8PeqFYHjBN/FCM3qjH2sT11VaLAVd7kwP8Nnlonkh8mIOQswuKtXf0H8fK9L2avCd7HV+2c6ja3WJ9bOHeVRNr888xm+bFNTqWzNDRg7NZcqEMz21FdZ4hxPzfgJfQ4JuxJJGVxDRQ8LH/3kiZlZdHk9Q/A16FmjpUbMoqJTEhsly7KI/q12ZrOL6dpzG/Bcp/gRZf9X2ji+xWLuFmsdw57EkiXN7CcuzIu+TcS+lh4XxysOsCc6JmRWXtk14HCzytLYLW5wSDVYfWlaEfnsNE8M51X/33lUQCMLN2+BCyW3XrU7lEl/zq4KiA/sE1qsbTSJgN4iCIECOUtM18jqgIuRkR7oq2uNbRJG4F7Gf/zqLr1LfpGDlJvEQkXa/e/zi5JoTdzogn6UuoByJ/yGdHN4cvC9bR3Jjvje9fM7PItk7biHY+p6GtdAszzetTLuxAOyj9ePj8zKFbHSTSECz2IIeMicofiQiIu23Dp90G7stlWcsfNpTYv2nW6I1Iu0RQ+o2P/d7E55c9B6j0XI6qR2Hj5onlVE70z3sb/h6M27gc5HyWZk9rxOyHqNDAyHB6BL/aQOfenyDzdASyGdBe7iX6cJ8I8UD3ptcxa0p+nK23YJM4Ps6N6MbcN/PFC/wTQw+Glfet8ehFioavKRAfEJd0voh/8umGRPExF/FqYqEKzHcW+7/OVKD6y+leyan3B5y6WayephpaKmtvrWHyP+dvXMKgGn1EP3WWUSEZUUvx8dosBiNXQJ3zw0HDNMaWe0QuxFDMGLWaTkQ3XXuuwGwUIbTe5qJZZ1gx62S3+jVnKIxfDcBZ6Io9M80WAKiLef/P8DREV0zlwjGzYXdGO13M4icjZxvcfOzelmUHy4FpoL9LuNE0XJdrqYFRbtPclQSOsXs31lPgkb7uBYbYJDWyddvwZ4YTIT7uL8D/cxr0oghds+MeUvkpfv+rH+IFjwopOjMLCF5/m8OrMOhoGxH369BqbDvKmvhyjlpiU1v7/4VXmsed0vf06XI4PlvqBUzXSRcQ8jNWAq758Hj37anolJnkLSYkq/f58cpTHTRYvT2+UG1eKO1xZqpEuRZmt7wFc0FCgyNA7N5z33z2J82SbgrR7RvyQeprLpyPKepbJVy9ob+L8HudjDkeuBw57gnZ72lk9ljR8xs73OTp0mzngM1G1ikgEH7MYjqvlCkjupDTorrPybk0o206MJB7N+wbIjNmG1x8TIZi8zUcU/HfiWdHTEb90H/LP5VKHUzWSbe/uDPOqp+0c+e1JEOnz/wS5wI4T3VkkebAxOZu5odUWZGWJJA7T4CExooq7H28E2rmv/3TjfCIOq/HZoJlZd7mJNl4GN5yXGyzAVFLYbBXz0YCWUugrpGoK0vbYG2H51NQg3PdLmKJpAr4YA3Pepj5757XX73aNAv+9yH64mnzuEHAswBy0/e6FG4ijMOKnj68Eh45re75Zic/+/aphD/bR8o+IOBvTOwscTn6dYNMU4IrM73s0JqN+D9n26Dtqtwnn7bG3/PNPFp+s6xMM9W9hzCwjYbCznPAno4DFvA6ThOqiFV+g+v7KDj14YtDD/NZpVrtRTtzudUCDnmYT+uX1BqXOvmywL7hI5NC7FgFLIz3/lpSH+2pg4q/RXZjQryuf0H2tLK+zVqko/kPoT2NW1etzr5luFTotbGi1JHEk6o44h/rXpIuH8jpLlqy983Dy5ezpR/ceSG6hG0D8bJot+n/gW0VvxZv+LCm6jccoSyYA+c/qQTQhzJO0QBBwB2HwO/mssoy4FzA/eW7rCxUUw/8DyHm87NJhOF7q5WXRgyOJnx3gjEc4dpn27nH+B1dDW4ZMVdy+sjaWLTK6ClAMcF8N8UUXQYoC881fu4qqU8QU/Oc9qvYvpcEWHw/PjOoQZbuxxFa+/CWooMCh1Tl/+32bVk+NlDzfPAffwsO5OwyNKNasWQEfOGBs7fY4AOFhXVeAKNxLr9YvWDxWkPcg8D7LkYQn4LiLpsM/4XB+A4PMXN2tLC9Ke3bi5TY3D/p8+z74fxeTG0cUQsFxGzTU8/ZffMXfCb4+AugcLbgZet/wKcdkJrtwnE7wfPPSAplZ1XG2m494LhBoLD/T0JsxFZuKqJfcGFzUApInvaTgqnrNqxTw5SBvZ1FPjzodkty8ueoeJtDtkPs6ht6e+X4/KdSOWgiKzZXDgv7F19U6aFVniTaoLrOenQIUb4Pes3Hozdephn738mYcZRQ0j16x2jEW0vtyNbfLcyHdO2C2jtSBY6RwIrlo1N1qZn9G+8txkRrpJBg+KTOr68qsc4PVFOlNfouD+joQOWDGyj7w43XK0jObiudWERiakYUgEfILKW+hv8tfvuBET5IeoTuT764B/6RHp6XzuIHpupzqrd4la8UWyA7hAhzVLbO8nVTwIMT7pEvY6NaCfdvWLCwEgbzFY5TgV9hKAjZsVdksFD845KphpmFRPOEfJXTaW33jqolN2GfFxHGrmvuawgr1OKui7I/08fkn30atdmVYao5Ww+FaHEX/YKjhPbvWFO9cECl86MwUBFR8Cf7PrOEjofWPjmCKmIwG8yoeXP3+YoKCPdTzr07yQrdI+R7h6fDoZrqZ2JpmE43mPwMVTJe/YRSEADnx0eSYrbjBOkdRX9zYIqGenBRbWON/FSrn1nP9Ozm/aSBCNpT0iVu17REj4ueSBe/++Ha680mpkz6czc4BfWzcWOJns4dxZxenenGWFzo+CoM/MG/Y3XyO88N7ZrqLfgYGD4+VvwfqfhJAtCJAMmd4xVtPupwVc8UamwtktRYQqIoz3ltW12hT5bYpuMSfAMDHfAF7z/dOFsAmW9sgK67ajmc1xBVL4HmltfFpHkyuJ8NR9FHHby6WovNB9LA69trpc4OGC/hs4mD3hIeduhLggwScXSGp57UYH/PIaeFlptY0JEOfwyw1AWtztq7TuoXeJC+tsR9FFCq1ryU+fVrFmDftEj9PA8pN9eFAFpE4vwqDny4OFoEZa8OQqJwl0IHCmN+k4u46o24IlpCun6DVUV/J+soHf9PabZQv/7vJSUxpWX3Lz5lqXefRa9X4mJiMpyHsX8yvMRgX+HxHrBoqnkFwuO93WpnjLy376AtNV0pxnUYGMQJLyzqE3ceMX6lM6OwH3PaSglJyMIBhmOBqEZpvK+SvTJjaQaN3W58jyn+h8YqZnVaoQnDLwMMQWMmXsP4uuzfCjWcWA/vuXF8tMTt+8eWeJKiPKPIXSxipB++9+pw7Tcb/6ZylkGEldz8LyTUmgdsV3iEedb9QtkRS9B9zPSAdQ+NKXS/KenquyYXOelWcwrXlmLTPfPqepi/YpruzKujpxcn7ZkUX88p3ilXtbUkG1WVVoNHvA1u6czTNd2WdgBBcKrYnnT7WOTxvsEYav+Y144uEud17OX4GCTX9EdnvmvW9SLZ+INKVDrUKlrD6cyWdRKsl439FIRPEhy7Ig599zm9YZy1i9PouxCeJqFGuJ6PeIPNycm+MfCHPNjJGSqHyZhZtABYXvUG1zF5akO4rRUxtz3/eBg7zmmNzPnViZ8+mGuUW/d10S3rr4CX1AHzl/5uPfXaDPql4Y+ors9sj9zD+SotER+1r1B5mXn7+H+c6DQeaUH7I3eXusFbPh5XUy5NP21wIrn7p8O/rgMXZ7zy1krWlOWq2IUMbB7bptiKRZuCF8t0o6rvUNvWsRfDWt5krPRyzutClQwDwTELHKXjJ/3hmqr7o3QgeMaK/gDZ70T/JI6acouTznH/fpn9NGvUbsrVR5eWsxFr23YqtKFoAb1GJzd48LBCx91VDZMJ3y9tVPmVxC345VFAw12m7WKy9YqlcrFUYbJqGUvP3mc5XdwkOHx8A4RR4PHcXct5s+zpWIPDlxbE1Lh6KI3qMStFKHFENDUNeieZsyFNmvOPB47FngBng60ACypXJPz0eaZIjJ6d06VGPiVjzZvlkJJcSab1OPbEjUM5o+shafoCTbjWjiPNqeyoZ4oj6XVZAHmErzKYdMxQxpgZs6XS2jlkkJOsOV8soMnC7mlBXnPVYeZErZJbQ9V5pL7yShsIzb5CuHTU1FpzelKnBSLd7RaqxUUHPdOi+JwMvN626K6HFUh6FMIrWasgLVaoElSfMfb1u3CcjpbWp5mxYDmSb5+VbNFdmyZPt6uR6dGjFDdnIlSs1aIPmeKWGEHtHGjXtBB/WgHrtJZKhzO7aNpE+vFwOi9TjTPY5n3GsSumnZlT19RL/ONq3YTleH1NC0MPaoDUZoD4XWj740qsOqcPhv5gvxizR9fC380v0y2S8C+Un9+O+TCgNpLc3wsHT62AG/sMzak7/KX+gr+mkH/m5Jp/r9B6c3EYTi7Lxu8qnsyGSsPkGtsRErF2VqDr7AShQiC0sQkZLmoahI9j9Rgdb6WifC5D6dehbyVIC63mfvj1A6xJR6D7zvNLXnyeEHrbo+/hQyUJ0DZfoYocXMdxT3u5D38J4OxWAnoIw9Gaw/gp/eR+05aP0JXKdeBg+hfWVQM+XwMT+9hGjeEasZ43/6hD/ndajxlrVJPNPkZfr4zhOkZ47mvsP6Om4StUZXLR//MRbLG6DlZr90Ra+aAVzLqftWg/I6UM2gy5vjTypPw/8Y8E6H1DSGXNUh53SoOcy5otEfwtfH4x9QFI6fhugHdyl7HEB91cMpZ9vryNFkh5F7gOeLSNWei5jx3EXCeHcvktrHXGQZm+7rq7yL/NqanW810L8/Ydan34RBHdq0G0bDk8XXOTnp5WqI9lwWZ9JYtBiS570BQjpiC88qLmxazskDE4MoP0VGiWru9lkZxWjMZTTHYo8J7hLDwbgGNoNU7DJsBIsmfbq93KaP7zWsG26bFiOWGPL91aIpGRAt11yOR8EaJEDpy8mIH15V8OGVt47BiG7zdleq12drVPLAVBNT4BO+tYRLpsrVGTsXxXpkMNeuU/PxlkHNr0SPH5t6RlNdkhtkFrXGuTC6h3RAc2mCvjFK+agaa0aL5KVpamX0zD16jGWuYz7dGw4p4KECW/nYioMpmhTv1laWPhzCZhyxmmFYNGBWi4Kckwcdn375WuUbepSgcA6sSIrBNTZdpMkYhVyHboVNLHs1aqyMUcco8KyTowWJkx55P3HJ5Q7Jxo/3B40sMYD53WQf+BI+Np5ydp7TnWZ39DWw6v94HFQki83h8vgCoQgcAhIKGgYWDh4BEQkZBQ0DCxsHFw+fQDkhETEJ175dcgpKFSqpqGloVdGppmdgZGFlY+fg5OLm4VXLxy8gKCQsIiomLiEpJa0ujCfwJAmSZJEiTYZsfeC8Q3puTO/7s6yKc31ifWP9Yv1jA2KDn20I3B94JRhOE908fIj+oa3NxWnozacKoet24bNnyJkfkahKs/klRsvlRrBViKd7gXbjH9vT5YPFp0ZfXpwF60nn4UsG8xDGHxKXOi2XumJOo8l797r5b9npyc4GhoKuT1F24SF545H38LO1fhbjtwE=) format("woff2");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Math;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Math;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:italic}@font-face{font-family:KaTeX_SansSerif;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_SansSerif;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:italic}@font-face{font-family:KaTeX_SansSerif;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Script;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size1;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size2;src:url(data:font/woff2;base64,d09GMgABAAAAABRYAA4AAAAALRQAABQBAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgUQIDgmcDBEICqowoRYBNgIkA4EeC1IABCAFiQAHgiQMgRwbMycjEXZztMJT/OUBT8ZvqgIwIbZlhOVRe5/Y4TgOVm/26guMVEV+hCSzx9O2ft7ukikmSyhLL+AhNmAmWIHeF87oyyi4/NktATDObmBpQqkO0XGZSf5Woc5WoP4HGIc9v1xv0DrMVJGay0kidb3pvFxg18l2T0BGVkUSqOrh9sU0W9oBQkuW72GnqAI0AYKjV580ZSBCW8pFlbACq2yAdAEyoJ6MIAUl/9lF7aK+rhqdIUkCYlX6/79Wad/9VbUMdjlEHkgnwsaYP6+65tT/v5sDVcMNgz0nW9W7YeSeDhAqVnt8TjQeDyRJmMhNLDsdFyFcpM5yOPrRK2x+f6/1Zlt1xUpMECYMsfVK+7xHARg+gbYBAwDbgN0LAJukS0YfgiOAgVjjMoAfxPDtd/B8aodFfeBFlpk4OePRGqnFO0mArZ04iM1INxduUXJo0HIiAdGQQtbvIhtIRnYdFlrsGPY49i6OayXaBK1N+4iOZ/jKhJkIE3NmJgASxa4NPxHTilZv1j6oYxu+NME39+4i7w1bbTH4X8l/zv8E72Pv/f3e1++1vKd4M/N13eva1zWAQPzD1PAoQICn0Isi6/9g7G4d5sP3QPoy1Fs6kybwChb5P1sGpBrqibEWeAOo3RZUmLwDATI/c2BQq9aBQ+oLfObWiO8go6TkCzbT8SW1m2A8OBf4DsZOriFuz1usq4vJo+k8sG3xVjg7evBAQkx9K9Npxe0pcBtOY6vUrn6JiOEJBUOSk6T09J6qkVp48BYi+95SOsresAfzKFjwiHs/giVummaj9rahvHsejzzoeYtSoJhrqOippErQmsbTgxE5k2ZDwRBXJVmTCM2VhZvcQYrR0AAs4HMI3AfgYqms6JsoUmpTLvI/sQxx9/GPIWWMdY6gFGMcFF8KlFQfHQxITyAi1wKLOwGWe9jujbXGcu5gJl0mSgOFVXrR4UEnzSD4ZQDkaxFG2448dUpD/kc1Fbo3ILLdkHZM3otBo42C9yEkbdjxArojBwtw+KaFrmwTe2iOexXAfQYrz0DVsR1YbQcHQnk7Qg7/EVKKmxLePGoWUndyd1y0nDFhz7+244d4ux5PSb6r+0ZJAUJEkl6jK6ROeR6W87IQchlv2gLw0CW7PR0QgZUc+lnA7s5IyMOKXAhGpPtopL41auNr6xChYF1H9KmLDjHWGhFEXLPThAP3sccq3ENcdEhA3dTUlX+EVI2uQMIkTbcROUZaV4r1g1CIuhufIujouUyyym5Y31/njF0t2YJyFJjqHPpS2BhUeCQpAgQLX0QziLcJmlMBj51hTmItRPhmg/VeFLetmpsVSYPijjK66mhExAFi0NTbjZztkUzeYwGRaRdEYKdFqtuXTYGRAl1HBwGpe+khdI/AgdxL+qtaGJXJkRsj3nseSP6gQUWRDyQ2puUn0aFEgdk3jjgiEKkERvECpwRBUKJgUJJgUrJgUYpgk1pwOszQItwmzHz9IKhUoK9L5pgOi85wpf27ZuvwNPvvCiMxgihFWwEVV2uGXUUJDQxaGHQw6GFIhSENBgMMFAxGGEywsg0yN27JHk+ocukoazqZlSSPrXL7aGBPnxum7XBAZCAlLWme0uv7HsdpwwE5E6tSEfYd1d3t4WgXhs72wvsYa9KVpD2OLKdDvtBvn4UR2J8jz8cPSoS4tQRzlyC2U7igUyVdZyO+QtyQORlEEQCsHyBHBqo7cw5PhyKIQ1ODTBRM5p5JJQPAL5m+1WbDib9POUs4MTaC3Lce1dmbrx1ZAOaIcw8R2dWuX/hyAI9vThubi8w1Hrc22QWpllsITPcmLUL3jWWb3rtwQdikGTiQTS5Ff7utcimNzizQfqrHRbAY+JaXeDTdAsFUKwzmujZxuWySTre73TQMs8rMEJn285RRuOyDBXJ9HW6SmVZQ2leJFGFEBrup2wKRhSJC4dC7ne7CY0905DCyAhGBkQU6NzUwPLcAF+X3PffNpUznIdwhJfiW8ioeQyVzak3zulNgZCSEGdK+Vt/BJHK5uzXvlUz7yN9nPp00s6bT25zdHHhzpgMvVM1cSlA/jmHH7MUgc7EqtM680azVt+E9s7P/fgd72OwCF4Cs1G+0EGSnhty50o5g4+kgVUVW0HNUVIC5Kk1m/A9m+O4TwOPUV2O3VDrlJV6Mwu0J7/fykb1UDGqZI+Ob2TnndMrYqtnURrJU0gEbb7hRpZLcN7U655h2lQiUJWfP/nwLl7l/ozvC3V435X0VKKBcjoxUrASZiKruCuZ6KpX0G13BWb4a4zpHFROrQQtSXFArlOpGIUG9UN2ARIloZKDAKCQICo034QIECjKaLaWW0UjQaqluQwsk2oWKDqGiU6ju8owi0Y0j0YMj0YsjHUKiVPThFEz9rppmW8jcQQ6F1gDLFB6NABELmTnAgEEL0dBoBBi20MIRSwxy8mhGVbmol7HH4NPjqXcn8PsT7SRCjohOOsiachBNbw65rjHXzsU8O9fMB/eABd6BFjqIFjlILb6G52GJnYeldh6W2XlY7gGtcBCtdJBa5YfnY7WdjzV2Ptba+VjnAa13EG1wUHmj5Rrv/W0kyky8RmD0/pt1mkRNS4vfHGX3R3F97bx79m1YAQGamUkEYhRlRK07mAWYVwA4GSBGsWEMBvuF5hsNgCZigK8TmogDox4GiCDiE4VsEbu2Qka7ahqVlZwPq2hRyFOS7Q7mNhNUKWphCl8svJdsqVgidbhuzAzcHreLcFt0QhDkXOSgjC/E2ABB3hh3ts0D+0wiM4yLIiyA4GyAlIUZv9P+/s1vjbHbXoKylWf4RSCaiN6WYIAqGJwQSDHbwmyGU2qaE8UVBHFygiDFXFR/KopYHde3Vmbcx1lfHkvoeQbXl+bztRnGFNDkg1F5QAIBcqJBHvxCCC1CQU0oQFgGXp1uDCDXldJfZ1eqydaEdV+uZgt4oUsD0Qu2fLJKBy3V8nkq/Hc/NLvAn/dzP5/LmYte61N/KnLsObfGPj8JjqirSD0FU39j5jUqnkDKuSM4LT6cXkw3OI1/n5tlnBtKZ+U5UiteWuNmWKSCX2ZpTYhlbK5f6w9bWj9PxisFxqAEZ87JO5fabVNtu/7aiI8Qgj2B0cXuu0erKB97a7uycklJsq5dw1rxJEXMRS76aXeJ3qOGHBf4zEwf+/j1iVgHwdHHmYWSL/zax3eYdC7az2SS4bS3aJqkEbJ93PbqqHF2zNjvF264FF5ovbBNLDP0VWz4/7GPr+zwT/2xn+O0GCzeQOo1KFcya2sMKfJCkKfcxa3ww3LRN0i5AfJtnL5q5Vf7GIWlZdcQBhq+r1tywfrvCyEeeEE+gd+vzBzWVJ+pkmLxZey/w4Wo39nGLuw/6aThPUdq1if5oKroXYTDU97we2SkiX4mJ9UcSO+PHLynOKuIV5DqYy9fZk2k2lvAs9YJqdleb9NMTSJfl03vhuqrQBCtrftcEZAERVh8umrFpvt6/it/yP3u297PnEMqyPNAt1nc8gXuY59kr+P01d7G+3RSUh1TkKaAN15vEc2fJZE9+BypEc6td1Hdbb5/W1IGqJLAcgUlQglXMHj5kpVgDLdciBs4NQSU55MmbdoE1kj1cZu3Kcvhli3y/Hlmx3LUDCzWWaKTlwN2b3rsrfqBmuGu3xx9/1Z3WaSGUcgDg9IvJoiD/EzwUJ6P3EH5P/7wX+AfpL7qYy0+7G3t0QfT8rNBFYjykZcQa1c+A6G18FocPd2+9BgAJuvCyiKnZKnUjvd24t6PG2HKTKTxJ6AIwziWc9xBt18temdS2JHa+DexT3RyedhBsS9d+v5UD2X01mkXqZvAn7QIX4zpqM3+zoK/z8azPADpvONXgRimkfoJISCqdRDUIUT+D+sdspegfJ1nGEOZdKy2a9e9/YPug97AM6oQfh5vCYDqMF3a/VIfKP0oJ33v3yI4hVpqQ0MOZ8wJ9AYPJPUH9/5N7Xbd/eEHrnsbnC/fSArgxHMv/vGaesYro54DLH2cPSEQYMd89P6TEQhDbLhPlub/7zXNnx/cB1VXdUoe9fobWqNkIy69+ZThg3XAYn3hugHM4zdc8NOoKk5s1FGvv01wv+fxW7QzWwNEVLi+mPx/DLT7gEBw/VpeygTNgefhp4SSYU3jgHOHW5WxY8CpaRwuTYAf9ZlwIBdD8so2z7nTYzxhQCjQj3d+XuwQFsfDj6Z82GwFpGyK+Kj6HTcP5CZPIbDanG+CHxKExcWOzzvH9QJgTUZEhSLBo6+9X+uWlhb9+BWTWVB8oWSlni/Qr/x/Z9DLbWF+9WORtLTW/f5rjwqEASHH47zucNfU7uDDm4kxq/fK5o9PrhyjLcXmrTQHnoOfmDtqat2O604P/HIX+mIVjp3AsVeKIZj85awXP4GhR2f9VQD2DwlVyJ1zfxv5Wyytuibp0T/IerHYULrUETStsVTZ+bf8HeRnGhe4xnDdK3e9Ad3+SPypDGnjGq77Rzd3cXwFdfu3dmg9HQld3LyhM6PQ5s6VioZO+7EZY/94Gm293+5U/+vAH7mhaW3NXPO8uuIjPTVE1TW7Rgqe4WM20M+fn6dAuKgFvXJeso5ZJtmhq+8pz6FSs09mHmiG1lQdC5Olxa3e5y3l2BDyNW973FPFGRQqIHc2mcmXagjN5zeUsyV8eUH6PcfMH8l/XyvZPJqZfdpn3NrAFH2Sdux/OPOpuUrq1CU8+K42/a/E5aY/WiSrVYoGZZ11lbP2M5balesjk15KjJtRVap02r2ar6QM8Z9kK9lieDp5u+pAl34pUi9R+PUjdz3vteYVqJNenPgZuv4NJ4oL+BfwDwu3UCEIuipTy63+hvVTtejHwXw/g7sxsNS41rLL6QtRJLu3hxU3rnk6Y38FUZHaYi2qa7D6PxzyWplZF7Yc2GeB95dUfLg0HL9U2ipn6G++5q2JBb1BWbDK2Y6SSdVKq2nNkhIFM/leQaV1KH659t1F8Kf8ovZ+fokafL/bZZcVKW9Lnyp6ugzFN27XPZ0if1bOwqmkWUrZneqkN6RJgUQlBvjEKtkVhfqpDNWr8/viJ3ehr5IVl2UsTDkUkT6RlPyV1PZ9ozBiQB5uKtOj20QjjWXu7sOC5kqot/QdJ29pT9P4vQ9wONs+efVUWVH8kGHDddYI54F7cfq09haJPwFPcOMe3jq9dADwlVvVZ6SSmzMqX+vgKDvxKLktaRXlW3aURpxzLZ8GeIfqj3SF5Wv8Jh4JE9Sub82rV3+otesUN7ty/7cu+CdQjEv/wcPIvzB25eBEQuFKkeD7eNa1qKGn85NA4NoTvcrivs8TnexLTRRGrrgzHFZDrg8GxS5eu67kvMgTD8KtO2/cEN64iV4/GGR8jr5qyz62QhB2vDN78K2ynacnU0fy79q54NCKJ+LTR/XX4pTPV+zevtm7FhxZFSw65rI3RJWrxxZGsk4mt3Ufrd5UsvCXE0cEkuQkxxCn29JvO3zaGDYPT5w9JV5cMV2sKqf8lENjoD5ntebzRQrPn5sfBg3Y9eaY4R9Wyv1VfCTbppMQtQaZDGGIhfMXLXyzt3xZp2TX/oZthspXhS6KN+tRXsxQG+G0m4M7O7bwiqtibyDjj57hr+raSASbIpGHxFAPExuXt6UUL1uOYcyFv/ivoY9Ub9qxc5xYvszx8OKNqKkpPL4bWv8JbGC+ojlw8Msv0YqVCJv117zKPQKHx7FbsKDyr9Saetkf6bKf0d6kscFweJD8OSJRX3pczSIV4UiQV/pVUvJbpbxgJKwgWerHL6klkZ9JNPt3TWvw6Sn91LS/+qdpubykE6ZX29dsXwzTgxL2Og5/7n3mKXh7QXMGRBKtb7O9de7eLlHOb2wR/uWkZ1Hu8IPS/fwr+/cE615GLQCwATOVoux1QWvUoxnx/yJW71oMGPwNThiJqujvIhaAG/e2dSEzeAJvwocE7gFx8CDMBUZW8C9nWknk/pWFWSrif/AUI6cgoxsdCVogI5zjR0Q9rmI/mmBmUAwfZsRSGIJRPy8Q+QI8jJbVJT2Lch8wvNho8yCAkA9i2xwYhwMiOJ5OeIq5CJROzMVACHfOxaHY43MJSAvw5zLAH3Duk9k6V4DNRpOvpBDSQ29DgRGj5hsXdocBk0iUECOSE42WySorR1iUVKjfhIEaLmiQAf0qBKsWpDI4cTZc99Md0uFRFUrT4xq+sEdf7R8yX4WAxlU269IgbEG/U73+cE9TBvUYV2zEsElJjXdNvydjo31CspCO9sO63CuwKiiZcSaskdDBBlQ2VZOHmq1UUyEcMXCkhmM309irpoeNi5H5g8qyZGetOeY+9dsM6QnhgAhpn8fG0N8kj7FEu+U3NQe7r57Frv2HFly9CZMzJL9mglU1DTv7kOVcJqlaj6E9VEKutFYuNLK97wlz1UAxW809MJ4icWqQmBB7mEAfpkwfCUPSMv0uwjKVobXGqMGu3O+70g0se6AmkjZ6u++9n9Rj2ptwVU3sNbhPkhnT47fVp05RnZSFW6Rw0qhX9rd1Qqh4UlST0dgoZAa5vurb1ShWaVjAQGzszMqc0tRfM993wAM+SOXJ59WpO4DBm/AWwhEBBxAD9sNpOISYiIXYiIO4iIf4SICESITESIKkSIbkSIGUKI41NRymaR8tXbuLdnImw4N9/f8Zk9UVp9NBw1hngVNoF40toB2H47RcU120x8l0fJZ/akaRx8qc6qNpx+E4nfR7c0PFEzxZ3xxDaEtLFP0sucNRDFj+GIAJ1so9510AwFtK2AAHKLzWo3V1zVHvumYl9Qmq5U42zFmv1E6MGZaRu9nLABHqzUKNzSxuOQZC051oZvWIzTGsU3vL6GNCYRUA) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size3;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size4;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Typewriter;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:""}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .katex-html>.newline{display:block}.katex .base{position:relative;display:inline-block;white-space:nowrap;width:min-content}.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-weight:700;font-style:italic}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathsfit,.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{display:inline-table;table-layout:fixed;border-collapse:collapse}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;vertical-align:bottom;position:relative}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;vertical-align:bottom;font-size:1px;width:2px;min-width:2px}.katex .vbox{display:inline-flex;flex-direction:column;align-items:baseline}.katex .hbox{display:inline-flex;flex-direction:row;width:100%}.katex .thinbox{display:inline-flex;flex-direction:row;width:0;max-width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .underline .underline-line,.katex .hline,.katex .hdashline,.katex .rule{min-height:1px}.katex .mspace{display:inline-block}.katex .llap,.katex .rlap,.katex .clap{width:0;position:relative}.katex .llap>.inner,.katex .rlap>.inner,.katex .clap>.inner{position:absolute}.katex .llap>.fix,.katex .rlap>.fix,.katex .clap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .rlap>.inner,.katex .clap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{display:inline-block;border:solid 0;position:relative}.katex .overline .overline-line,.katex .underline .underline-line,.katex .hline{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline{display:inline-block;width:100%;border-bottom-style:dashed}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .sizing.reset-size1.size1,.katex .fontsize-ensurer.reset-size1.size1{font-size:1em}.katex .sizing.reset-size1.size2,.katex .fontsize-ensurer.reset-size1.size2{font-size:1.2em}.katex .sizing.reset-size1.size3,.katex .fontsize-ensurer.reset-size1.size3{font-size:1.4em}.katex .sizing.reset-size1.size4,.katex .fontsize-ensurer.reset-size1.size4{font-size:1.6em}.katex .sizing.reset-size1.size5,.katex .fontsize-ensurer.reset-size1.size5{font-size:1.8em}.katex .sizing.reset-size1.size6,.katex .fontsize-ensurer.reset-size1.size6{font-size:2em}.katex .sizing.reset-size1.size7,.katex .fontsize-ensurer.reset-size1.size7{font-size:2.4em}.katex .sizing.reset-size1.size8,.katex .fontsize-ensurer.reset-size1.size8{font-size:2.88em}.katex .sizing.reset-size1.size9,.katex .fontsize-ensurer.reset-size1.size9{font-size:3.456em}.katex .sizing.reset-size1.size10,.katex .fontsize-ensurer.reset-size1.size10{font-size:4.148em}.katex .sizing.reset-size1.size11,.katex .fontsize-ensurer.reset-size1.size11{font-size:4.976em}.katex .sizing.reset-size2.size1,.katex .fontsize-ensurer.reset-size2.size1{font-size:.8333333333em}.katex .sizing.reset-size2.size2,.katex .fontsize-ensurer.reset-size2.size2{font-size:1em}.katex .sizing.reset-size2.size3,.katex .fontsize-ensurer.reset-size2.size3{font-size:1.1666666667em}.katex .sizing.reset-size2.size4,.katex .fontsize-ensurer.reset-size2.size4{font-size:1.3333333333em}.katex .sizing.reset-size2.size5,.katex .fontsize-ensurer.reset-size2.size5{font-size:1.5em}.katex .sizing.reset-size2.size6,.katex .fontsize-ensurer.reset-size2.size6{font-size:1.6666666667em}.katex .sizing.reset-size2.size7,.katex .fontsize-ensurer.reset-size2.size7{font-size:2em}.katex .sizing.reset-size2.size8,.katex .fontsize-ensurer.reset-size2.size8{font-size:2.4em}.katex .sizing.reset-size2.size9,.katex .fontsize-ensurer.reset-size2.size9{font-size:2.88em}.katex .sizing.reset-size2.size10,.katex .fontsize-ensurer.reset-size2.size10{font-size:3.4566666667em}.katex .sizing.reset-size2.size11,.katex .fontsize-ensurer.reset-size2.size11{font-size:4.1466666667em}.katex .sizing.reset-size3.size1,.katex .fontsize-ensurer.reset-size3.size1{font-size:.7142857143em}.katex .sizing.reset-size3.size2,.katex .fontsize-ensurer.reset-size3.size2{font-size:.8571428571em}.katex .sizing.reset-size3.size3,.katex .fontsize-ensurer.reset-size3.size3{font-size:1em}.katex .sizing.reset-size3.size4,.katex .fontsize-ensurer.reset-size3.size4{font-size:1.1428571429em}.katex .sizing.reset-size3.size5,.katex .fontsize-ensurer.reset-size3.size5{font-size:1.2857142857em}.katex .sizing.reset-size3.size6,.katex .fontsize-ensurer.reset-size3.size6{font-size:1.4285714286em}.katex .sizing.reset-size3.size7,.katex .fontsize-ensurer.reset-size3.size7{font-size:1.7142857143em}.katex .sizing.reset-size3.size8,.katex .fontsize-ensurer.reset-size3.size8{font-size:2.0571428571em}.katex .sizing.reset-size3.size9,.katex .fontsize-ensurer.reset-size3.size9{font-size:2.4685714286em}.katex .sizing.reset-size3.size10,.katex .fontsize-ensurer.reset-size3.size10{font-size:2.9628571429em}.katex .sizing.reset-size3.size11,.katex .fontsize-ensurer.reset-size3.size11{font-size:3.5542857143em}.katex .sizing.reset-size4.size1,.katex .fontsize-ensurer.reset-size4.size1{font-size:.625em}.katex .sizing.reset-size4.size2,.katex .fontsize-ensurer.reset-size4.size2{font-size:.75em}.katex .sizing.reset-size4.size3,.katex .fontsize-ensurer.reset-size4.size3{font-size:.875em}.katex .sizing.reset-size4.size4,.katex .fontsize-ensurer.reset-size4.size4{font-size:1em}.katex .sizing.reset-size4.size5,.katex .fontsize-ensurer.reset-size4.size5{font-size:1.125em}.katex .sizing.reset-size4.size6,.katex .fontsize-ensurer.reset-size4.size6{font-size:1.25em}.katex .sizing.reset-size4.size7,.katex .fontsize-ensurer.reset-size4.size7{font-size:1.5em}.katex .sizing.reset-size4.size8,.katex .fontsize-ensurer.reset-size4.size8{font-size:1.8em}.katex .sizing.reset-size4.size9,.katex .fontsize-ensurer.reset-size4.size9{font-size:2.16em}.katex .sizing.reset-size4.size10,.katex .fontsize-ensurer.reset-size4.size10{font-size:2.5925em}.katex .sizing.reset-size4.size11,.katex .fontsize-ensurer.reset-size4.size11{font-size:3.11em}.katex .sizing.reset-size5.size1,.katex .fontsize-ensurer.reset-size5.size1{font-size:.5555555556em}.katex .sizing.reset-size5.size2,.katex .fontsize-ensurer.reset-size5.size2{font-size:.6666666667em}.katex .sizing.reset-size5.size3,.katex .fontsize-ensurer.reset-size5.size3{font-size:.7777777778em}.katex .sizing.reset-size5.size4,.katex .fontsize-ensurer.reset-size5.size4{font-size:.8888888889em}.katex .sizing.reset-size5.size5,.katex .fontsize-ensurer.reset-size5.size5{font-size:1em}.katex .sizing.reset-size5.size6,.katex .fontsize-ensurer.reset-size5.size6{font-size:1.1111111111em}.katex .sizing.reset-size5.size7,.katex .fontsize-ensurer.reset-size5.size7{font-size:1.3333333333em}.katex .sizing.reset-size5.size8,.katex .fontsize-ensurer.reset-size5.size8{font-size:1.6em}.katex .sizing.reset-size5.size9,.katex .fontsize-ensurer.reset-size5.size9{font-size:1.92em}.katex .sizing.reset-size5.size10,.katex .fontsize-ensurer.reset-size5.size10{font-size:2.3044444444em}.katex .sizing.reset-size5.size11,.katex .fontsize-ensurer.reset-size5.size11{font-size:2.7644444444em}.katex .sizing.reset-size6.size1,.katex .fontsize-ensurer.reset-size6.size1{font-size:.5em}.katex .sizing.reset-size6.size2,.katex .fontsize-ensurer.reset-size6.size2{font-size:.6em}.katex .sizing.reset-size6.size3,.katex .fontsize-ensurer.reset-size6.size3{font-size:.7em}.katex .sizing.reset-size6.size4,.katex .fontsize-ensurer.reset-size6.size4{font-size:.8em}.katex .sizing.reset-size6.size5,.katex .fontsize-ensurer.reset-size6.size5{font-size:.9em}.katex .sizing.reset-size6.size6,.katex .fontsize-ensurer.reset-size6.size6{font-size:1em}.katex .sizing.reset-size6.size7,.katex .fontsize-ensurer.reset-size6.size7{font-size:1.2em}.katex .sizing.reset-size6.size8,.katex .fontsize-ensurer.reset-size6.size8{font-size:1.44em}.katex .sizing.reset-size6.size9,.katex .fontsize-ensurer.reset-size6.size9{font-size:1.728em}.katex .sizing.reset-size6.size10,.katex .fontsize-ensurer.reset-size6.size10{font-size:2.074em}.katex .sizing.reset-size6.size11,.katex .fontsize-ensurer.reset-size6.size11{font-size:2.488em}.katex .sizing.reset-size7.size1,.katex .fontsize-ensurer.reset-size7.size1{font-size:.4166666667em}.katex .sizing.reset-size7.size2,.katex .fontsize-ensurer.reset-size7.size2{font-size:.5em}.katex .sizing.reset-size7.size3,.katex .fontsize-ensurer.reset-size7.size3{font-size:.5833333333em}.katex .sizing.reset-size7.size4,.katex .fontsize-ensurer.reset-size7.size4{font-size:.6666666667em}.katex .sizing.reset-size7.size5,.katex .fontsize-ensurer.reset-size7.size5{font-size:.75em}.katex .sizing.reset-size7.size6,.katex .fontsize-ensurer.reset-size7.size6{font-size:.8333333333em}.katex .sizing.reset-size7.size7,.katex .fontsize-ensurer.reset-size7.size7{font-size:1em}.katex .sizing.reset-size7.size8,.katex .fontsize-ensurer.reset-size7.size8{font-size:1.2em}.katex .sizing.reset-size7.size9,.katex .fontsize-ensurer.reset-size7.size9{font-size:1.44em}.katex .sizing.reset-size7.size10,.katex .fontsize-ensurer.reset-size7.size10{font-size:1.7283333333em}.katex .sizing.reset-size7.size11,.katex .fontsize-ensurer.reset-size7.size11{font-size:2.0733333333em}.katex .sizing.reset-size8.size1,.katex .fontsize-ensurer.reset-size8.size1{font-size:.3472222222em}.katex .sizing.reset-size8.size2,.katex .fontsize-ensurer.reset-size8.size2{font-size:.4166666667em}.katex .sizing.reset-size8.size3,.katex .fontsize-ensurer.reset-size8.size3{font-size:.4861111111em}.katex .sizing.reset-size8.size4,.katex .fontsize-ensurer.reset-size8.size4{font-size:.5555555556em}.katex .sizing.reset-size8.size5,.katex .fontsize-ensurer.reset-size8.size5{font-size:.625em}.katex .sizing.reset-size8.size6,.katex .fontsize-ensurer.reset-size8.size6{font-size:.6944444444em}.katex .sizing.reset-size8.size7,.katex .fontsize-ensurer.reset-size8.size7{font-size:.8333333333em}.katex .sizing.reset-size8.size8,.katex .fontsize-ensurer.reset-size8.size8{font-size:1em}.katex .sizing.reset-size8.size9,.katex .fontsize-ensurer.reset-size8.size9{font-size:1.2em}.katex .sizing.reset-size8.size10,.katex .fontsize-ensurer.reset-size8.size10{font-size:1.4402777778em}.katex .sizing.reset-size8.size11,.katex .fontsize-ensurer.reset-size8.size11{font-size:1.7277777778em}.katex .sizing.reset-size9.size1,.katex .fontsize-ensurer.reset-size9.size1{font-size:.2893518519em}.katex .sizing.reset-size9.size2,.katex .fontsize-ensurer.reset-size9.size2{font-size:.3472222222em}.katex .sizing.reset-size9.size3,.katex .fontsize-ensurer.reset-size9.size3{font-size:.4050925926em}.katex .sizing.reset-size9.size4,.katex .fontsize-ensurer.reset-size9.size4{font-size:.462962963em}.katex .sizing.reset-size9.size5,.katex .fontsize-ensurer.reset-size9.size5{font-size:.5208333333em}.katex .sizing.reset-size9.size6,.katex .fontsize-ensurer.reset-size9.size6{font-size:.5787037037em}.katex .sizing.reset-size9.size7,.katex .fontsize-ensurer.reset-size9.size7{font-size:.6944444444em}.katex .sizing.reset-size9.size8,.katex .fontsize-ensurer.reset-size9.size8{font-size:.8333333333em}.katex .sizing.reset-size9.size9,.katex .fontsize-ensurer.reset-size9.size9{font-size:1em}.katex .sizing.reset-size9.size10,.katex .fontsize-ensurer.reset-size9.size10{font-size:1.2002314815em}.katex .sizing.reset-size9.size11,.katex .fontsize-ensurer.reset-size9.size11{font-size:1.4398148148em}.katex .sizing.reset-size10.size1,.katex .fontsize-ensurer.reset-size10.size1{font-size:.2410800386em}.katex .sizing.reset-size10.size2,.katex .fontsize-ensurer.reset-size10.size2{font-size:.2892960463em}.katex .sizing.reset-size10.size3,.katex .fontsize-ensurer.reset-size10.size3{font-size:.337512054em}.katex .sizing.reset-size10.size4,.katex .fontsize-ensurer.reset-size10.size4{font-size:.3857280617em}.katex .sizing.reset-size10.size5,.katex .fontsize-ensurer.reset-size10.size5{font-size:.4339440694em}.katex .sizing.reset-size10.size6,.katex .fontsize-ensurer.reset-size10.size6{font-size:.4821600771em}.katex .sizing.reset-size10.size7,.katex .fontsize-ensurer.reset-size10.size7{font-size:.5785920926em}.katex .sizing.reset-size10.size8,.katex .fontsize-ensurer.reset-size10.size8{font-size:.6943105111em}.katex .sizing.reset-size10.size9,.katex .fontsize-ensurer.reset-size10.size9{font-size:.8331726133em}.katex .sizing.reset-size10.size10,.katex .fontsize-ensurer.reset-size10.size10{font-size:1em}.katex .sizing.reset-size10.size11,.katex .fontsize-ensurer.reset-size10.size11{font-size:1.1996142719em}.katex .sizing.reset-size11.size1,.katex .fontsize-ensurer.reset-size11.size1{font-size:.2009646302em}.katex .sizing.reset-size11.size2,.katex .fontsize-ensurer.reset-size11.size2{font-size:.2411575563em}.katex .sizing.reset-size11.size3,.katex .fontsize-ensurer.reset-size11.size3{font-size:.2813504823em}.katex .sizing.reset-size11.size4,.katex .fontsize-ensurer.reset-size11.size4{font-size:.3215434084em}.katex .sizing.reset-size11.size5,.katex .fontsize-ensurer.reset-size11.size5{font-size:.3617363344em}.katex .sizing.reset-size11.size6,.katex .fontsize-ensurer.reset-size11.size6{font-size:.4019292605em}.katex .sizing.reset-size11.size7,.katex .fontsize-ensurer.reset-size11.size7{font-size:.4823151125em}.katex .sizing.reset-size11.size8,.katex .fontsize-ensurer.reset-size11.size8{font-size:.578778135em}.katex .sizing.reset-size11.size9,.katex .fontsize-ensurer.reset-size11.size9{font-size:.6945337621em}.katex .sizing.reset-size11.size10,.katex .fontsize-ensurer.reset-size11.size10{font-size:.8336012862em}.katex .sizing.reset-size11.size11,.katex .fontsize-ensurer.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .op-limits>.vlist-t{text-align:center}.katex .accent>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{display:block;position:absolute;width:100%;height:inherit;fill:currentColor;stroke:currentColor}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;min-width:0;min-height:0;max-width:none;max-height:none}.katex .stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .stretchy:before,.katex .stretchy:after{content:""}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{position:absolute;left:0;width:50.2%;overflow:hidden}.katex .halfarrow-right{position:absolute;right:0;width:50.2%;overflow:hidden}.katex .brace-left{position:absolute;left:0;width:25.1%;overflow:hidden}.katex .brace-center{position:absolute;left:25%;width:50%;overflow:hidden}.katex .brace-right{position:absolute;right:0;width:25.1%;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .x-arrow,.katex .mover,.katex .munder{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{box-sizing:border-box;border-top:.049em solid;border-right:.049em solid;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{counter-increment:katexEqnNo;content:"(" counter(katexEqnNo) ")"}.katex .mml-eqn-num:before{counter-increment:mmlEqnNo;content:"(" counter(mmlEqnNo) ")"}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;position:absolute;left:calc(50% + .3em);text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left;padding-left:2em}body{counter-reset:katexEqnNo mmlEqnNo}.markdown-block--unstable.svelte-15eq738{display:contents}.streaming-code-block.svelte-15eq738 .streaming-code-pre:where(.svelte-15eq738){background:transparent;padding:.5rem;margin:0;overflow-x:visible;border-radius:0;border:none;font-size:.875rem}div.svelte-15eq738 p{margin-block:1rem;line-height:1.75}div.svelte-15eq738 :is(h1,h2,h3,h4,h5,h6):first-child{margin-top:0}div.svelte-15eq738 h1{font-size:1.875rem;font-weight:700;line-height:1.2;margin:1.5rem 0 .75rem}div.svelte-15eq738 h2{font-size:1.5rem;font-weight:600;line-height:1.3;margin:1.25rem 0 .5rem}div.svelte-15eq738 h3{font-size:1.25rem;font-weight:600;margin:1.5rem 0 .5rem;line-height:1.4}div.svelte-15eq738 h4{font-size:1.125rem;font-weight:600;margin:.75rem 0 .25rem}div.svelte-15eq738 h5{font-size:1rem;font-weight:600;margin:.5rem 0 .25rem}div.svelte-15eq738 h6{font-size:.875rem;font-weight:600;margin:.5rem 0 .25rem}div.svelte-15eq738 strong{font-weight:600}div.svelte-15eq738 em{font-style:italic}div.svelte-15eq738 del{text-decoration:line-through;opacity:.7}div.svelte-15eq738 code:not(pre code){background:var(--muted);color:var(--muted-foreground);padding:.125rem .375rem;border-radius:.375rem;font-size:.875rem;font-family:ui-monospace,SFMono-Regular,SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Liberation Mono,Menlo,monospace}div.svelte-15eq738 pre{display:inline;margin:0!important;overflow:hidden!important;background:var(--muted);overflow-x:auto;border-radius:1rem;border:none;line-height:1!important}div.svelte-15eq738 pre code{padding:0!important;display:inline!important}div.svelte-15eq738 code{background:transparent;color:var(--code-foreground)}div.svelte-15eq738 a{color:var(--primary);text-decoration:underline;text-underline-offset:2px;transition:color .2s ease;overflow-wrap:anywhere;word-break:break-all}div.svelte-15eq738 a:hover{color:var(--primary)}div.svelte-15eq738 ul{list-style-type:disc;margin-inline-start:1.5rem;margin-bottom:1rem}div.svelte-15eq738 ol{list-style-type:decimal;margin-inline-start:1.5rem;margin-bottom:1rem}div.svelte-15eq738 li{margin-bottom:.25rem;padding-inline-start:.5rem}div.svelte-15eq738 li::marker{color:var(--muted-foreground)}div.svelte-15eq738 ul ul{list-style-type:circle;margin-top:.25rem;margin-bottom:.25rem}div.svelte-15eq738 ol ol{list-style-type:lower-alpha;margin-top:.25rem;margin-bottom:.25rem}div.svelte-15eq738 .task-list-item{list-style:none;margin-inline-start:0;padding-inline-start:0}div.svelte-15eq738 .task-list-item-checkbox{margin-right:.5rem;margin-top:.125rem}div.svelte-15eq738 blockquote{border-left:4px solid var(--border);padding:.5rem 1rem;margin:1.5rem 0;font-style:italic;color:var(--muted-foreground);background:var(--muted);border-radius:0 .375rem .375rem 0}div.svelte-15eq738 table{width:100%;margin:1.5rem 0;border-collapse:collapse;border:1px solid var(--border);border-radius:.375rem;overflow:hidden}div.svelte-15eq738 th{background:hsl(var(--muted) / .3);border:1px solid var(--border);padding:.5rem .75rem;text-align:left;font-weight:600}div.svelte-15eq738 td{border:1px solid var(--border);padding:.5rem .75rem}div.svelte-15eq738 tr:nth-child(2n){background:hsl(var(--muted) / .1)}div.markdown-user-content.svelte-15eq738 table,div.markdown-user-content.svelte-15eq738 th,div.markdown-user-content.svelte-15eq738 td,div.markdown-user-content.svelte-15eq738 .table-wrapper{border-color:currentColor}div.svelte-15eq738 hr{border:none;border-top:1px solid var(--border);margin:1.5rem 0}div.svelte-15eq738 img{border-radius:.5rem;box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a;margin:1.5rem 0;max-width:100%;height:auto}div.svelte-15eq738 .code-block-wrapper{margin:1.5rem 0;border-radius:.75rem;overflow:hidden;border:1px solid color-mix(in oklch,var(--border) 30%,transparent);background:var(--code-background);box-shadow:0 1px 2px #0000000d;min-height:var(--min-message-height);max-height:var(--max-message-height)}.dark div.svelte-15eq738 .code-block-wrapper{border-color:color-mix(in oklch,var(--border) 20%,transparent)}div.svelte-15eq738 .code-block-scroll-container,.streaming-code-scroll-container.svelte-15eq738{min-height:var(--min-message-height);max-height:var(--max-message-height);overflow-y:auto;overflow-x:auto;padding:3rem 1rem 1rem;line-height:1.3}.full-height-code-blocks.svelte-15eq738 .code-block-wrapper{max-height:none}.full-height-code-blocks.svelte-15eq738 .code-block-scroll-container,.full-height-code-blocks.svelte-15eq738 .streaming-code-scroll-container:where(.svelte-15eq738){max-height:none;overflow-y:visible}div.svelte-15eq738 .code-block-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem 0;font-size:.875rem;position:absolute;top:0;left:0;right:0}div.svelte-15eq738 .code-language{color:var(--color-foreground);font-weight:500;font-family:ui-monospace,SFMono-Regular,SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Liberation Mono,Menlo,monospace;text-transform:uppercase;font-size:.75rem;letter-spacing:.05em}div.svelte-15eq738 .code-block-actions{display:flex;align-items:center;gap:.5rem}div.svelte-15eq738 .copy-code-btn,div.svelte-15eq738 .preview-code-btn{display:flex;align-items:center;justify-content:center;padding:0;background:transparent;color:var(--code-foreground);cursor:pointer;transition:all .2s ease}div.svelte-15eq738 .copy-code-btn:hover,div.svelte-15eq738 .preview-code-btn:hover{transform:scale(1.05)}div.svelte-15eq738 .copy-code-btn:active,div.svelte-15eq738 .preview-code-btn:active{transform:scale(.95)}div.svelte-15eq738 .code-block-wrapper pre{background:transparent;margin:0;border-radius:0;border:none;font-size:.875rem}div.svelte-15eq738 .mention{color:hsl(var(--primary));font-weight:500;text-decoration:none}div.svelte-15eq738 .mention:hover{text-decoration:underline}div.svelte-15eq738 .hashtag{color:hsl(var(--primary));font-weight:500;text-decoration:none}div.svelte-15eq738 .hashtag:hover{text-decoration:underline}div.svelte-15eq738 table{transition:all .2s ease}div.svelte-15eq738 table:hover{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}div.svelte-15eq738 th:hover,div.svelte-15eq738 td:hover{background:var(--muted)}.markdown-user-content.svelte-15eq738 a,.markdown-user-content.svelte-15eq738 a:hover{color:inherit}.markdown-user-content.svelte-15eq738 table:hover{box-shadow:none}.markdown-user-content.svelte-15eq738 th:hover,.markdown-user-content.svelte-15eq738 td:hover{background:inherit}div.svelte-15eq738 blockquote{transition:all .2s ease;position:relative}div.svelte-15eq738 blockquote:hover{border-left-width:6px;background:var(--muted);transform:translate(2px)}div.svelte-15eq738 blockquote:before{content:'"';position:absolute;top:-.5rem;left:.5rem;font-size:3rem;color:var(--muted-foreground);font-family:serif;line-height:1}div.svelte-15eq738 img{transition:all .3s ease;cursor:pointer}div.svelte-15eq738 img:hover{transform:scale(1.02);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}div.svelte-15eq738 .image-zoom-overlay{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000;cursor:pointer}div.svelte-15eq738 .image-zoom-overlay img{max-width:90vw;max-height:90vh;border-radius:.5rem;box-shadow:0 25px 50px -12px #00000040}div.svelte-15eq738 hr{border:none;height:2px;background:linear-gradient(to right,transparent,var(--border),transparent);margin:2rem 0;position:relative}div.svelte-15eq738 hr:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:1rem;height:1rem;background:var(--border);border-radius:50%}div.svelte-15eq738 .table-wrapper{overflow-x:auto;margin:1.5rem 0;border-radius:.5rem;border:1px solid var(--border)}div.svelte-15eq738 .table-wrapper table{margin:0;border:none}@media (max-width: 640px){div.svelte-15eq738 h1{font-size:1.5rem}div.svelte-15eq738 h2{font-size:1.25rem}div.svelte-15eq738 h3{font-size:1.125rem}div.svelte-15eq738 table{font-size:.875rem}div.svelte-15eq738 th,div.svelte-15eq738 td{padding:.375rem .5rem}div.svelte-15eq738 .table-wrapper{margin:.5rem -1rem;border-radius:0;border-left:none;border-right:none}}@media (prefers-color-scheme: dark){div.svelte-15eq738 blockquote:hover{background:var(--muted)}}div.svelte-15eq738 .image-load-error{display:flex;align-items:center;justify-content:center;margin:1.5rem 0;padding:1.5rem;border-radius:.5rem;background:var(--muted);border:1px dashed var(--border)}div.svelte-15eq738 .image-error-content{display:flex;flex-direction:column;align-items:center;gap:.75rem;color:var(--muted-foreground);text-align:center}div.svelte-15eq738 .image-error-content svg{opacity:.5}div.svelte-15eq738 .image-error-text{font-size:.875rem}div.svelte-15eq738 .image-error-link{display:inline-flex;align-items:center;gap:.375rem;padding:.5rem 1rem;font-size:.875rem;font-weight:500;color:var(--primary);background:var(--background);border:1px solid var(--border);border-radius:.375rem;text-decoration:none;transition:all .2s ease}div.svelte-15eq738 .image-error-link:hover{background:var(--muted);border-color:var(--primary)}.code-preview-wrapper.svelte-hp0zxr{font-family:ui-monospace,SFMono-Regular,SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Liberation Mono,Menlo,monospace}.code-preview-wrapper.svelte-hp0zxr pre:where(.svelte-hp0zxr){background:transparent}.code-preview-wrapper.svelte-hp0zxr code:where(.svelte-hp0zxr){background:transparent} +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-50:oklch(98% .016 73.684);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-200:oklch(90.1% .076 70.697);--color-orange-400:oklch(75% .183 55.934);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-green-50:oklch(98.2% .018 155.826);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-950:oklch(26.6% .065 152.934);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-600:oklch(60.9% .126 221.723);--color-cyan-950:oklch(30.2% .056 229.695);--color-blue-50:oklch(97% .014 254.604);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-950:oklch(28.2% .091 267.935);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-600:oklch(59.2% .249 .584);--color-pink-950:oklch(28.4% .109 3.907);--color-gray-500:oklch(55.1% .027 264.364);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-xs:.125rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xs:4px;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-foreground:var(--foreground)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{background-color:var(--background);color:var(--foreground);scrollbar-width:thin;scrollbar-gutter:stable}*{scrollbar-width:thin;scrollbar-color:transparent transparent;transition:scrollbar-color .2s}:hover{scrollbar-color:hsl(var(--muted-foreground)/.3)transparent}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:0 0;border-radius:3px;transition:background .2s}:hover::-webkit-scrollbar-thumb{background:hsl(var(--muted-foreground)/.3)}::-webkit-scrollbar-thumb:hover{background:hsl(var(--muted-foreground)/.5)}}@layer components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-4\.5{top:calc(var(--spacing)*4.5)}.top-10{top:calc(var(--spacing)*10)}.top-\[50\%\]{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing)*0)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-8{right:calc(var(--spacing)*8)}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-3{bottom:calc(var(--spacing)*3)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-32{bottom:calc(var(--spacing)*32)}.bottom-44{bottom:calc(var(--spacing)*44)}.bottom-\[calc\(50dvh-7rem\)\]{bottom:calc(50dvh - 7rem)}.left-0{left:calc(var(--spacing)*0)}.left-0\!{left:calc(var(--spacing)*0)!important}.left-2{left:calc(var(--spacing)*2)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-\[50\%\]{left:50%}.left-\[calc\(var\(--sidebar-width\)\+0\.75rem\)\]{left:calc(var(--sidebar-width) + .75rem)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-9999{z-index:9999}.z-\[900\]{z-index:900}.z-\[9999\]{z-index:9999}.z-\[999999\]{z-index:999999}.z-\[1000000\]{z-index:1000000}.z-\[1000001\]{z-index:1000001}.z-\[var\(--layer-popover\,1000000\)\]{z-index:var(--layer-popover,1000000)}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.m-0{margin:calc(var(--spacing)*0)}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.-my-1{margin-block:calc(var(--spacing)*-1)}.-my-2{margin-block:calc(var(--spacing)*-2)}.-my-4{margin-block:calc(var(--spacing)*-4)}.my-1{margin-block:calc(var(--spacing)*1)}.my-1\.5{margin-block:calc(var(--spacing)*1.5)}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-6{margin-block:calc(var(--spacing)*6)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.mt-12{margin-top:calc(var(--spacing)*12)}.mt-auto{margin-top:auto}.-mr-1{margin-right:calc(var(--spacing)*-1)}.-mr-1\.5{margin-right:calc(var(--spacing)*-1.5)}.-mr-2{margin-right:calc(var(--spacing)*-2)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-auto{margin-right:auto}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-3{margin-left:calc(var(--spacing)*3)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-11{margin-left:calc(var(--spacing)*11)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.field-sizing-content{field-sizing:content}.aspect-square{aspect-ratio:1}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-5{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}.size-9{width:calc(var(--spacing)*9);height:calc(var(--spacing)*9)}.size-10{width:calc(var(--spacing)*10);height:calc(var(--spacing)*10)}.size-full{width:100%;height:100%}.h-\(--bits-select-anchor-height\){height:var(--bits-select-anchor-height)}.h-1{height:calc(var(--spacing)*1)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-24{height:calc(var(--spacing)*24)}.h-40{height:calc(var(--spacing)*40)}.h-48{height:calc(var(--spacing)*48)}.h-64{height:calc(var(--spacing)*64)}.h-\[1\.15rem\]{height:1.15rem}.h-\[400px\]{height:400px}.h-\[500px\]{height:500px}.h-\[calc\(100vh-21rem\)\]{height:calc(100vh - 21rem)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.\!max-h-\[50vh\]{max-height:50vh!important}.\!max-h-\[80dvh\]{max-height:80dvh!important}.\!max-h-\[90vh\]{max-height:90vh!important}.max-h-\(--bits-dropdown-menu-content-available-height\){max-height:var(--bits-dropdown-menu-content-available-height)}.max-h-\(--bits-select-content-available-height\){max-height:var(--bits-select-content-available-height)}.max-h-24{max-height:calc(var(--spacing)*24)}.max-h-32{max-height:calc(var(--spacing)*32)}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-80{max-height:calc(var(--spacing)*80)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[100dvh\]{max-height:100dvh}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-9{min-height:calc(var(--spacing)*9)}.min-h-12{min-height:calc(var(--spacing)*12)}.min-h-16{min-height:calc(var(--spacing)*16)}.min-h-\[10rem\]{min-height:10rem}.min-h-\[48px\]{min-height:48px}.min-h-\[50vh\]{min-height:50vh}.min-h-\[60px\]{min-height:60px}.min-h-\[200px\]{min-height:200px}.min-h-full{min-height:100%}.min-h-svh{min-height:100svh}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0{width:calc(var(--spacing)*0)}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-5\/6{width:83.3333%}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-11{width:calc(var(--spacing)*11)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-52{width:calc(var(--spacing)*52)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-\[10rem\]{width:10rem}.w-\[56rem\]{width:56rem}.w-\[calc\(100dvw-1\.5rem\)\]{width:calc(100dvw - 1.5rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-\[calc\(var\(--sidebar-width-icon\)\+1\.5rem\)\]{width:calc(var(--sidebar-width-icon) + 1.5rem)}.w-\[var\(--bits-popover-anchor-width\)\]{width:var(--bits-popover-anchor-width)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.\!max-w-4xl{max-width:var(--container-4xl)!important}.\!max-w-6xl{max-width:var(--container-6xl)!important}.\!max-w-\[60rem\]{max-width:60rem!important}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-24{max-width:calc(var(--spacing)*24)}.max-w-36{max-width:calc(var(--spacing)*36)}.max-w-72{max-width:calc(var(--spacing)*72)}.max-w-\[17rem\]{max-width:17rem}.max-w-\[48rem\]{max-width:48rem}.max-w-\[56rem\]{max-width:56rem}.max-w-\[80\%\]{max-width:80%}.max-w-\[100vw\]{max-width:100vw}.max-w-\[150px\]{max-width:150px}.max-w-\[300px\]{max-width:300px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-xs{max-width:var(--container-xs)}.min-w-\(--bits-select-anchor-width\){min-width:var(--bits-select-anchor-width)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[200px\]{min-width:200px}.min-w-max{min-width:max-content}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-\(--bits-dropdown-menu-content-transform-origin\){transform-origin:var(--bits-dropdown-menu-content-transform-origin)}.origin-\(--bits-popover-content-transform-origin\){transform-origin:var(--bits-popover-content-transform-origin)}.origin-\(--bits-select-content-transform-origin\){transform-origin:var(--bits-select-content-transform-origin)}.origin-\(--bits-tooltip-content-transform-origin\){transform-origin:var(--bits-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0{--tw-translate-y:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x)var(--tw-scale-y)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.\!cursor-not-allowed{cursor:not-allowed!important}.cursor-auto{cursor:auto}.cursor-default{cursor:default}.cursor-ew-resize{cursor:ew-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.\!gap-3{gap:calc(var(--spacing)*3)!important}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-0\.75{gap:calc(var(--spacing)*.75)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-1\.25{gap:calc(var(--spacing)*1.25)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-10{gap:calc(var(--spacing)*10)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.-space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*-1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*-1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.self-stretch{align-self:stretch}.justify-self-end{justify-self:flex-end}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[1\.125rem\]{border-radius:1.125rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none\!{border-radius:0!important}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-3xl{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-t-lg\!{border-top-left-radius:var(--radius)!important;border-top-right-radius:var(--radius)!important}.\!border-2{border-style:var(--tw-border-style)!important;border-width:2px!important}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.\!border-dashed{--tw-border-style:dashed!important;border-style:dashed!important}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.\!border-border\/50{border-color:var(--border)!important}@supports (color:color-mix(in lab,red,red)){.\!border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)!important}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500)40%,transparent)}}.border-border,.border-border\/30{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/30{border-color:color-mix(in oklab,var(--border)30%,transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-current{border-color:currentColor}.border-destructive,.border-destructive\/40{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/40{border-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.border-destructive\/50{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,var(--destructive)50%,transparent)}}.border-green-500{border-color:var(--color-green-500)}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-primary{border-color:var(--primary)}.border-purple-200{border-color:var(--color-purple-200)}.border-red-500\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.border-red-500\/50{border-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-sidebar-border{border-color:var(--sidebar-border)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-accent,.bg-accent\/50{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.bg-accent\/50{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.bg-background,.bg-background\/70{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/70{background-color:color-mix(in oklab,var(--background)70%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-border,.bg-border\/20{background-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.bg-border\/20{background-color:color-mix(in oklab,var(--border)20%,transparent)}}.bg-card{background-color:var(--card)}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.bg-destructive\/15{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/15{background-color:color-mix(in oklab,var(--destructive)15%,transparent)}}.bg-destructive\/20{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/20{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.bg-foreground,.bg-foreground\/5{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\/5{background-color:color-mix(in oklab,var(--foreground)5%,transparent)}}.bg-foreground\/15{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\/15{background-color:color-mix(in oklab,var(--foreground)15%,transparent)}}.bg-foreground\/20{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\/20{background-color:color-mix(in oklab,var(--foreground)20%,transparent)}}.bg-gray-500{background-color:var(--color-gray-500)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-500{background-color:var(--color-green-500)}.bg-muted{background-color:var(--muted)}.bg-muted-foreground\/10{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/10{background-color:color-mix(in oklab,var(--muted-foreground)10%,transparent)}}.bg-muted-foreground\/15{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/15{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.bg-muted-foreground\/50{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/50{background-color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted)60%,transparent)}}.bg-orange-50{background-color:var(--color-orange-50)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-orange-400{background-color:var(--color-orange-400)}.bg-pink-50{background-color:var(--color-pink-50)}.bg-popover{background-color:var(--popover)}.bg-primary,.bg-primary\/5{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,var(--primary)5%,transparent)}}.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-200\/60{background-color:#e9d5ff99}@supports (color:color-mix(in lab,red,red)){.bg-purple-200\/60{background-color:color-mix(in oklab,var(--color-purple-200)60%,transparent)}}.bg-purple-300\/50{background-color:#d9b3ff80}@supports (color:color-mix(in lab,red,red)){.bg-purple-300\/50{background-color:color-mix(in oklab,var(--color-purple-300)50%,transparent)}}.bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500)10%,transparent)}}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400)10%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500)10%,transparent)}}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-sidebar\/50{background-color:var(--sidebar)}@supports (color:color-mix(in lab,red,red)){.bg-sidebar\/50{background-color:color-mix(in oklab,var(--sidebar)50%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-muted{--tw-gradient-from:var(--muted);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.bg-clip-padding{background-clip:padding-box}.fill-current{fill:currentColor}.fill-muted-foreground{fill:var(--muted-foreground)}.fill-white{fill:var(--color-white)}.stroke-muted-foreground{stroke:var(--muted-foreground)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.p-px{padding:1px}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-3\.75{padding-inline:calc(var(--spacing)*3.75)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-0\.75{padding-block:calc(var(--spacing)*.75)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.\!ps-2{padding-inline-start:calc(var(--spacing)*2)!important}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\.5{padding-top:calc(var(--spacing)*1.5)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-6{padding-top:calc(var(--spacing)*6)}.pt-8{padding-top:calc(var(--spacing)*8)}.pt-10{padding-top:calc(var(--spacing)*10)}.pt-13{padding-top:calc(var(--spacing)*13)}.pt-14{padding-top:calc(var(--spacing)*14)}.pt-16{padding-top:calc(var(--spacing)*16)}.pr-1{padding-right:calc(var(--spacing)*1)}.pr-2{padding-right:calc(var(--spacing)*2)}.pr-8{padding-right:calc(var(--spacing)*8)}.pr-9{padding-right:calc(var(--spacing)*9)}.pr-10{padding-right:calc(var(--spacing)*10)}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-0\.5{padding-bottom:calc(var(--spacing)*.5)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-2\.25{padding-bottom:calc(var(--spacing)*2.25)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pb-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-10{padding-bottom:calc(var(--spacing)*10)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-6{--tw-leading:calc(var(--spacing)*6);line-height:calc(var(--spacing)*6)}.leading-7\.5{--tw-leading:calc(var(--spacing)*7.5);line-height:calc(var(--spacing)*7.5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.\!text-red-400{color:var(--color-red-400)!important}.text-accent-foreground{color:var(--accent-foreground)}.text-amber-500{color:var(--color-amber-500)}.text-amber-600{color:var(--color-amber-600)}.text-blue-600{color:var(--color-blue-600)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-cyan-600{color:var(--color-cyan-600)}.text-destructive{color:var(--destructive)}.text-foreground,.text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-muted-foreground,.text-muted-foreground\/50{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--muted-foreground)60%,transparent)}}.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-orange-600{color:var(--color-orange-600)}.text-orange-800{color:var(--color-orange-800)}.text-pink-600{color:var(--color-pink-600)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-900{color:var(--color-purple-900)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-white\!{color:var(--color-white)!important}.text-yellow-600{color:var(--color-yellow-600)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.mix-blend-difference{mix-blend-mode:difference}.shadow-\[0_0_0_1px_var\(--sidebar-border\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--sidebar-border));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none\!{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-muted{--tw-ring-color:var(--muted)}.ring-ring\/10{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.ring-ring\/10{--tw-ring-color:color-mix(in oklab,var(--ring)10%,transparent)}}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-ring\/50{outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.outline-ring\/50{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-lg{--tw-backdrop-blur:blur(var(--blur-lg));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-lg\!{--tw-backdrop-blur:blur(var(--blur-lg))!important;-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)!important;backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)!important}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-none\!{--tw-backdrop-blur: !important;-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)!important;backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)!important}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,visibility,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\,opacity\]{transition-property:left,right,width,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.\!duration-0{--tw-duration:0s!important;transition-duration:0s!important}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.zoom-in-95{--tw-enter-scale:.95}.running{animation-play-state:running}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media(hover:hover){.group-hover\:pointer-events-auto:is(:where(.group):hover *){pointer-events:auto}.group-hover\:flex:is(:where(.group):hover *){display:flex}.group-hover\:hidden:is(:where(.group):hover *){display:none}.group-hover\:fill-destructive:is(:where(.group):hover *){fill:var(--destructive)}.group-hover\:stroke-destructive:is(:where(.group):hover *){stroke:var(--destructive)}.group-hover\:pr-6:is(:where(.group):hover *){padding-right:calc(var(--spacing)*6)}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/expand\:opacity-100:is(:where(.group\/expand):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:pointer-events-none:is(:where(.group)[data-collapsible=offcanvas] *){pointer-events:none}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-0\.775\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-.775)}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-0\.775\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-.775)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[collapsible\=offcanvas\]\:opacity-0:is(:where(.group)[data-collapsible=offcanvas] *){opacity:0}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[state\=open\]\:-rotate-180:is(:where(.group)[data-state=open] *){rotate:-180deg}@media(hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing)*0)}.after\:left-\[calc\(1\/2\*100\%-1px\)\]:after{content:var(--tw-content);left:calc(50% - 1px)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:ml-4:first-child{margin-left:calc(var(--spacing)*4)}.last\:mr-4:last-child{margin-right:calc(var(--spacing)*4)}.focus-within\:border-border:focus-within{border-color:var(--border)}.focus-within\:shadow-md:focus-within{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media(hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-accent\!:hover{background-color:var(--accent)!important}.hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.hover\:bg-destructive\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.hover\:bg-destructive\/10\!:hover{background-color:var(--destructive)!important}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/10\!:hover{background-color:color-mix(in oklab,var(--destructive)10%,transparent)!important}}.hover\:bg-destructive\/30:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/30:hover{background-color:color-mix(in oklab,var(--destructive)30%,transparent)}}.hover\:bg-destructive\/80:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/80:hover{background-color:color-mix(in oklab,var(--destructive)80%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-foreground\/10:hover{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-foreground\/10:hover{background-color:color-mix(in oklab,var(--foreground)10%,transparent)}}.hover\:bg-foreground\/35:hover{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-foreground\/35:hover{background-color:color-mix(in oklab,var(--foreground)35%,transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-muted-foreground\/10:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted-foreground\/10:hover{background-color:color-mix(in oklab,var(--muted-foreground)10%,transparent)}}.hover\:bg-muted-foreground\/20:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted-foreground\/20:hover{background-color:color-mix(in oklab,var(--muted-foreground)20%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-muted\/80:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/80:hover{background-color:color-mix(in oklab,var(--muted)80%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-red-400\/20:hover{background-color:#ff656833}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-400\/20:hover{background-color:color-mix(in oklab,var(--color-red-400)20%,transparent)}}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-sidebar-border\/50:hover{background-color:var(--sidebar-border)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sidebar-border\/50:hover{background-color:color-mix(in oklab,var(--sidebar-border)50%,transparent)}}.hover\:bg-transparent:hover{background-color:#0000}.hover\:bg-white\/30:hover{background-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/30:hover{background-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\:fill-destructive:hover{fill:var(--destructive)}.hover\:stroke-destructive:hover{stroke:var(--destructive)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_var\(--sidebar-accent\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,var(--sidebar-accent));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:bg-muted:focus{background-color:var(--muted)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-primary:focus{--tw-ring-color:var(--primary)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(0px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-4:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(4px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:bg-accent:active{background-color:var(--accent)}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:bg-sidebar-border:active{background-color:var(--sidebar-border)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-100:disabled{opacity:1}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-highlighted\:bg-accent[data-highlighted]{background-color:var(--accent)}.data-highlighted\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[highlighted\]\:bg-accent[data-highlighted]{background-color:var(--accent)}.data-\[highlighted\]\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[multiline\]\:py-2\.5[data-multiline]{padding-block:calc(var(--spacing)*2.5)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[side\=bottom\]\:-translate-x-1\/2[data-side=bottom]{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:-translate-y-\[calc\(-50\%_\+_1px\)\][data-side=bottom]{--tw-translate-y: calc((-50% + 1px)*-1) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:-translate-y-\[calc\(50\%_-_3px\)\][data-side=left]{--tw-translate-y: calc((50% - 3px)*-1) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-end-2[data-side=left]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=left\]\:slide-in-from-end-2[data-side=left]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-\[calc\(50\%_\+_2px\)\][data-side=right]{--tw-translate-x: calc(50% + 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:translate-y-1\/2[data-side=right]{--tw-translate-y: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-start-2[data-side=right]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=right\]\:slide-in-from-start-2[data-side=right]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:translate-x-1\/2[data-side=top]{--tw-translate-x: 50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:translate-y-\[calc\(-50\%_\+_2px\)\][data-side=top]{--tw-translate-y: calc(-50% + 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}.data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x: calc(100% - 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-bottom-full[data-state=closed]{--tw-exit-translate-y: 100% }.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:bg-transparent\![data-state=open]{background-color:#0000!important}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y: 100% }.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}@media(hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/10[data-variant=destructive][data-highlighted]{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/10[data-variant=destructive][data-highlighted]{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:data-highlighted\:text-destructive[data-variant=destructive][data-highlighted]{color:var(--destructive)}@media not all and (min-width:48rem){.max-md\:hidden{display:none}}@media(min-width:40rem){.sm\:top-\[50\%\]{top:50%}.sm\:right-auto{right:auto}.sm\:bottom-auto{bottom:auto}.sm\:left-\[50\%\]{left:50%}.sm\:mt-0{margin-top:calc(var(--spacing)*0)}.sm\:flex{display:flex}.sm\:max-h-\[100vh\]{max-height:100vh}.sm\:w-auto{width:auto}.sm\:w-max{width:max-content}.sm\:max-w-6xl{max-width:var(--container-6xl)}.sm\:max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}.sm\:data-\[state\=closed\]\:slide-out-to-bottom-0[data-state=closed]{--tw-exit-translate-y: 0% }.sm\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.sm\:data-\[state\=open\]\:slide-in-from-bottom-0[data-state=open]{--tw-enter-translate-y: 0% }.sm\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}}@media(min-width:48rem){.md\:absolute{position:absolute}.md\:top-8{top:calc(var(--spacing)*8)}.md\:left-8{left:calc(var(--spacing)*8)}.md\:left-\[calc\(var\(--sidebar-width\)-3\.25rem\)\]{left:calc(var(--sidebar-width) - 3.25rem)}.md\:z-0{z-index:0}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:h-6{height:calc(var(--spacing)*6)}.md\:max-h-\[100vh\]{max-height:100vh}.md\:w-\(--sidebar-width\){width:var(--sidebar-width)}.md\:w-6{width:calc(var(--spacing)*6)}.md\:w-\[calc\(var\(--sidebar-width\)\+0\.75rem\)\]{width:calc(var(--sidebar-width) + .75rem)}.md\:w-auto{width:auto}.md\:max-w-3xl{max-width:var(--container-3xl)}.md\:max-w-32{max-width:calc(var(--spacing)*32)}.md\:max-w-\[min\(calc\(100cqw-9rem\)\,25rem\)\]{max-width:min(100cqw - 9rem,25rem)}.md\:flex-row{flex-direction:row}.md\:gap-2{gap:calc(var(--spacing)*2)}:where(.md\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.md\:p-6{padding:calc(var(--spacing)*6)}.md\:p-8{padding:calc(var(--spacing)*8)}.md\:px-0{padding-inline:calc(var(--spacing)*0)}.md\:px-6{padding-inline:calc(var(--spacing)*6)}.md\:\!py-3{padding-block:calc(var(--spacing)*3)!important}.md\:py-2{padding-block:calc(var(--spacing)*2)}.md\:py-8{padding-block:calc(var(--spacing)*8)}.md\:py-10{padding-block:calc(var(--spacing)*10)}.md\:pt-0{padding-top:calc(var(--spacing)*0)}.md\:pt-4{padding-top:calc(var(--spacing)*4)}.md\:pt-6{padding-top:calc(var(--spacing)*6)}.md\:pt-28{padding-top:calc(var(--spacing)*28)}.md\:pb-2{padding-bottom:calc(var(--spacing)*2)}.md\:pl-8{padding-left:calc(var(--spacing)*8)}.md\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.md\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.md\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:group-data-\[collapsible\=offcanvas\]\:pointer-events-auto:is(:where(.group)[data-collapsible=offcanvas] *){pointer-events:auto}.md\:group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}.dark\:border:is(.dark *){border-style:var(--tw-border-style);border-width:1px}.dark\:border-border\/20:is(.dark *){border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.dark\:border-border\/20:is(.dark *){border-color:color-mix(in oklab,var(--border)20%,transparent)}}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:border-muted:is(.dark *){border-color:var(--muted)}.dark\:border-purple-800:is(.dark *){border-color:var(--color-purple-800)}.dark\:bg-blue-950:is(.dark *){background-color:var(--color-blue-950)}.dark\:bg-cyan-950:is(.dark *){background-color:var(--color-cyan-950)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-destructive\/70:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/70:is(.dark *){background-color:color-mix(in oklab,var(--destructive)70%,transparent)}}.dark\:bg-foreground\/10:is(.dark *){background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-foreground\/10:is(.dark *){background-color:color-mix(in oklab,var(--foreground)10%,transparent)}}.dark\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:bg-muted\/75:is(.dark *){background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-muted\/75:is(.dark *){background-color:color-mix(in oklab,var(--muted)75%,transparent)}}.dark\:bg-orange-900:is(.dark *){background-color:var(--color-orange-900)}.dark\:bg-orange-950:is(.dark *){background-color:var(--color-orange-950)}.dark\:bg-pink-950:is(.dark *){background-color:var(--color-pink-950)}.dark\:bg-primary\/8:is(.dark *){background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-primary\/8:is(.dark *){background-color:color-mix(in oklab,var(--primary)8%,transparent)}}.dark\:bg-primary\/15:is(.dark *){background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-primary\/15:is(.dark *){background-color:color-mix(in oklab,var(--primary)15%,transparent)}}.dark\:bg-purple-500\/20:is(.dark *){background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-500\/20:is(.dark *){background-color:color-mix(in oklab,var(--color-purple-500)20%,transparent)}}.dark\:bg-purple-700\/50:is(.dark *){background-color:#8200da80}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-700\/50:is(.dark *){background-color:color-mix(in oklab,var(--color-purple-700)50%,transparent)}}.dark\:bg-purple-800\/40:is(.dark *){background-color:#6e11b066}@supports (color:color-mix(in lab,red,red)){.dark\:bg-purple-800\/40:is(.dark *){background-color:color-mix(in oklab,var(--color-purple-800)40%,transparent)}}.dark\:bg-purple-950:is(.dark *){background-color:var(--color-purple-950)}.dark\:bg-secondary:is(.dark *){background-color:var(--secondary)}.dark\:text-amber-400:is(.dark *){color:var(--color-amber-400)}.dark\:text-blue-400:is(.dark *){color:var(--color-blue-400)}.dark\:text-cyan-400:is(.dark *){color:var(--color-cyan-400)}.dark\:text-foreground:is(.dark *){color:var(--foreground)}.dark\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\:text-orange-200:is(.dark *){color:var(--color-orange-200)}.dark\:text-orange-400:is(.dark *){color:var(--color-orange-400)}.dark\:text-pink-400:is(.dark *){color:var(--color-pink-400)}.dark\:text-purple-100:is(.dark *){color:var(--color-purple-100)}.dark\:text-purple-300:is(.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:is(.dark *){color:var(--color-purple-400)}.dark\:text-secondary-foreground:is(.dark *){color:var(--secondary-foreground)}.dark\:text-yellow-400:is(.dark *){color:var(--color-yellow-400)}.dark\:text-yellow-500:is(.dark *){color:var(--color-yellow-500)}.dark\:ring-ring\/20:is(.dark *){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.dark\:ring-ring\/20:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--ring)20%,transparent)}}.dark\:outline-ring\/40:is(.dark *){outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.dark\:outline-ring\/40:is(.dark *){outline-color:color-mix(in oklab,var(--ring)40%,transparent)}}.dark\:focus-within\:border-border:is(.dark *):focus-within{border-color:var(--border)}@media(hover:hover){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\:hover\:bg-muted\/30:is(.dark *):hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.dark\:hover\:bg-muted\/30:is(.dark *):hover{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[state\=checked\]\:bg-primary-foreground:is(.dark *)[data-state=checked]{background-color:var(--primary-foreground)}.dark\:data-\[state\=unchecked\]\:bg-foreground:is(.dark *)[data-state=unchecked]{background-color:var(--foreground)}.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[state\=unchecked\]\:bg-input\/80:is(.dark *)[data-state=unchecked]{background-color:color-mix(in oklab,var(--input)80%,transparent)}}.dark\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/20:is(.dark *)[data-variant=destructive][data-highlighted]{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/20:is(.dark *)[data-variant=destructive][data-highlighted]{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-8 svg:not([class*=size-]){width:calc(var(--spacing)*8);height:calc(var(--spacing)*8)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pe-0:has([role=checkbox]){padding-inline-end:calc(var(--spacing)*0)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.\[\&\:not\(\:first-child\)\]\:mt-1:not(:first-child){margin-top:calc(var(--spacing)*1)}.\[\&\:not\(\:first-child\)\]\:mt-2:not(:first-child){margin-top:calc(var(--spacing)*2)}.\[\&\>\*\]\:flex-1>*{flex:1}@media(min-width:40rem){.sm\:\[\&\>\*\]\:flex-none>*{flex:none}}.\[\&\>\*\:first-child\]\:rounded-r-none>:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.\[\&\>\*\:last-child\]\:rounded-l-none>:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.\[\&\>\*\:not\(\:first-child\)\:not\(\:last-child\)\]\:rounded-none>:not(:first-child):not(:last-child){border-radius:0}@media(hover:hover){.hover\:\[\&\>kbd\]\:opacity-100:hover>kbd{opacity:1}}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}@media(hover:hover){:is(.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper)>th,:is(.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper) td{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){:is(.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper)>th,:is(.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper) td{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@media(hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-foreground\/25:hover{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-foreground\/25:hover{background-color:color-mix(in oklab,var(--foreground)25%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}.scrollbar-hide::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(95% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(95% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(87.5% 0 0);--input:oklch(92% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0);--code-background:oklch(98.5% 0 0);--code-foreground:oklch(14.5% 0 0);--layer-popover:1000000;--chat-form-area-height:8rem;--chat-form-area-offset:2rem;--max-message-height:max(24rem,min(80dvh,calc(100dvh - var(--chat-form-area-height) - 12rem)))}@media(min-width:640px){:root{--chat-form-area-height:24rem;--chat-form-area-offset:12rem}}.dark{--background:oklch(16% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(29% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.3);--input:oklch(100% 0 0/.3);--ring:oklch(55.6% 0 0);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(20% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0);--code-background:oklch(22.5% 0 0);--code-foreground:oklch(87.5% 0 0)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}a.svelte-1q39rn8,button.svelte-1q39rn8{cursor:pointer}[data-select-viewport],[data-combobox-viewport]{scrollbar-width:none!important;-ms-overflow-style:none!important;-webkit-overflow-scrolling:touch!important}[data-combobox-viewport]::-webkit-scrollbar{display:none!important}[data-select-viewport]::-webkit-scrollbar{display:none!important}[data-scroll-area-viewport]{scrollbar-width:none!important;-ms-overflow-style:none!important;-webkit-overflow-scrolling:touch!important}[data-scroll-area-viewport]::-webkit-scrollbar{display:none!important}:where([data-scroll-area-viewport]){display:flex;flex-direction:column;align-items:stretch}:where([data-scroll-area-content]){flex-grow:1}html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}@media(hover:none)and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:#00000014}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:#ffffff4d}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY( calc(var(--lift) * var(--offset) + var(--lift) * -100%) );opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{-webkit-user-select:none;user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media(max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 87%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 93%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 84%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 43%, 17%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 9%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media(prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}.code-preview-overlay{position:fixed;inset:0;background-color:transparent;z-index:100000}.code-preview-content{position:fixed;inset:0;top:0!important;left:0!important;width:100dvw;height:100dvh;margin:0;padding:0;border:none;border-radius:0;background-color:transparent;box-shadow:none;display:block;overflow:hidden;transform:none!important;z-index:100001}.code-preview-iframe{display:block;width:100dvw;height:100dvh;border:0}.code-preview-close{position:absolute;z-index:100002}.agentic-content.svelte-1uhcmx5{display:flex;flex-direction:column;gap:.5rem;width:100%;max-width:48rem}.agentic-text.svelte-1uhcmx5{width:100%}.agentic-turn.svelte-1uhcmx5{position:relative;border:1.5px dashed var(--muted-foreground);border-radius:.75rem;padding:1rem;transition:background .1s}.agentic-turn-label.svelte-1uhcmx5{position:absolute;top:-1rem;left:.75rem;padding:0 .375rem;background:var(--background);font-size:.7rem;font-weight:500;color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.05em}.turn-stats.svelte-1uhcmx5{margin-top:.75rem;padding-top:.5rem;border-top:1px solid hsl(var(--muted) / .5)}.processing-container.svelte-14103tf{display:flex;flex-direction:column;align-items:flex-start;gap:.5rem}.processing-text.svelte-14103tf{background:linear-gradient(90deg,var(--muted-foreground),var(--foreground),var(--muted-foreground));background-size:200% 100%;background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;animation:svelte-14103tf-shine 1s linear infinite;font-weight:500;font-size:.875rem}@keyframes svelte-14103tf-shine{to{background-position:-200% 0}}.raw-output.svelte-14103tf{width:100%;max-width:48rem;margin-top:1.5rem;padding:1rem 1.25rem;border-radius:1rem;background:hsl(var(--muted) / .3);color:var(--foreground);font-family:ui-monospace,SFMono-Regular,SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Liberation Mono,Menlo,monospace;font-size:.875rem;line-height:1.6;white-space:pre-wrap;word-break:break-word}.chat-processing-info-container.svelte-1ktvj8d{position:sticky;top:0;z-index:10;padding:0 1rem .75rem;opacity:0;transform:translateY(50%);transition:opacity .3s ease-out,transform .3s ease-out}.chat-processing-info-container.visible.svelte-1ktvj8d{opacity:1;transform:translateY(0)}.chat-processing-info-content.svelte-1ktvj8d{display:flex;flex-wrap:wrap;align-items:center;gap:1rem;justify-content:center;max-width:48rem;margin:0 auto}.chat-processing-info-detail.svelte-1ktvj8d{color:var(--muted-foreground);font-size:.75rem;padding:.25rem .75rem;border-radius:.375rem;font-family:ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace;white-space:nowrap}@media(max-width:768px){.chat-processing-info-content.svelte-1ktvj8d{gap:.5rem}.chat-processing-info-detail.svelte-1ktvj8d{font-size:.7rem;padding:.2rem .5rem}}button.svelte-76ksb2 [data-slot=dropdown-menu-trigger]:not([data-state=open]){opacity:0}button.svelte-76ksb2:is(:where(.svelte-76ksb2):hover) [data-slot=dropdown-menu-trigger]{opacity:1}@media(max-width:768px){button.svelte-76ksb2 [data-slot=dropdown-menu-trigger]{opacity:1!important}}button.svelte-76ksb2 .stop-button:where(.svelte-76ksb2) .stop-icon{display:none}button.svelte-76ksb2 .stop-button:where(.svelte-76ksb2) .loading-icon{display:block}button.svelte-76ksb2:is(:where(.svelte-76ksb2):hover) .stop-button:where(.svelte-76ksb2) .stop-icon{display:block}button.svelte-76ksb2:is(:where(.svelte-76ksb2):hover) .stop-button:where(.svelte-76ksb2) .loading-icon{display:none}@font-face{font-family:KaTeX_AMS;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Caligraphic;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Fraktur;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_Main;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:italic}@font-face{font-family:KaTeX_Main;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Math;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:italic}@font-face{font-family:KaTeX_Math;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:italic}@font-face{font-family:KaTeX_SansSerif;src:url(data:font/woff2;base64,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) format("woff2");font-weight:700;font-style:normal}@font-face{font-family:KaTeX_SansSerif;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:italic}@font-face{font-family:KaTeX_SansSerif;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Script;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size1;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size2;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size3;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Size4;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:KaTeX_Typewriter;src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:""}.katex .katex-mathml{position:absolute;clip:rect(1px,1px,1px,1px);padding:0;border:0;height:1px;width:1px;overflow:hidden}.katex .katex-html>.newline{display:block}.katex .base{position:relative;display:inline-block;white-space:nowrap;width:min-content}.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-weight:700;font-style:italic}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathsfit,.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{display:inline-table;table-layout:fixed;border-collapse:collapse}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;vertical-align:bottom;position:relative}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;vertical-align:bottom;font-size:1px;width:2px;min-width:2px}.katex .vbox{display:inline-flex;flex-direction:column;align-items:baseline}.katex .hbox{display:inline-flex;flex-direction:row;width:100%}.katex .thinbox{display:inline-flex;flex-direction:row;width:0;max-width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{display:inline-block;width:100%;border-bottom-style:solid}.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .underline .underline-line,.katex .hline,.katex .hdashline,.katex .rule{min-height:1px}.katex .mspace{display:inline-block}.katex .llap,.katex .rlap,.katex .clap{width:0;position:relative}.katex .llap>.inner,.katex .rlap>.inner,.katex .clap>.inner{position:absolute}.katex .llap>.fix,.katex .rlap>.fix,.katex .clap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .rlap>.inner,.katex .clap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{display:inline-block;border:solid 0;position:relative}.katex .overline .overline-line,.katex .underline .underline-line,.katex .hline{display:inline-block;width:100%;border-bottom-style:solid}.katex .hdashline{display:inline-block;width:100%;border-bottom-style:dashed}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .sizing.reset-size1.size1,.katex .fontsize-ensurer.reset-size1.size1{font-size:1em}.katex .sizing.reset-size1.size2,.katex .fontsize-ensurer.reset-size1.size2{font-size:1.2em}.katex .sizing.reset-size1.size3,.katex .fontsize-ensurer.reset-size1.size3{font-size:1.4em}.katex .sizing.reset-size1.size4,.katex .fontsize-ensurer.reset-size1.size4{font-size:1.6em}.katex .sizing.reset-size1.size5,.katex .fontsize-ensurer.reset-size1.size5{font-size:1.8em}.katex .sizing.reset-size1.size6,.katex .fontsize-ensurer.reset-size1.size6{font-size:2em}.katex .sizing.reset-size1.size7,.katex .fontsize-ensurer.reset-size1.size7{font-size:2.4em}.katex .sizing.reset-size1.size8,.katex .fontsize-ensurer.reset-size1.size8{font-size:2.88em}.katex .sizing.reset-size1.size9,.katex .fontsize-ensurer.reset-size1.size9{font-size:3.456em}.katex .sizing.reset-size1.size10,.katex .fontsize-ensurer.reset-size1.size10{font-size:4.148em}.katex .sizing.reset-size1.size11,.katex .fontsize-ensurer.reset-size1.size11{font-size:4.976em}.katex .sizing.reset-size2.size1,.katex .fontsize-ensurer.reset-size2.size1{font-size:.8333333333em}.katex .sizing.reset-size2.size2,.katex .fontsize-ensurer.reset-size2.size2{font-size:1em}.katex .sizing.reset-size2.size3,.katex .fontsize-ensurer.reset-size2.size3{font-size:1.1666666667em}.katex .sizing.reset-size2.size4,.katex .fontsize-ensurer.reset-size2.size4{font-size:1.3333333333em}.katex .sizing.reset-size2.size5,.katex .fontsize-ensurer.reset-size2.size5{font-size:1.5em}.katex .sizing.reset-size2.size6,.katex .fontsize-ensurer.reset-size2.size6{font-size:1.6666666667em}.katex .sizing.reset-size2.size7,.katex .fontsize-ensurer.reset-size2.size7{font-size:2em}.katex .sizing.reset-size2.size8,.katex .fontsize-ensurer.reset-size2.size8{font-size:2.4em}.katex .sizing.reset-size2.size9,.katex .fontsize-ensurer.reset-size2.size9{font-size:2.88em}.katex .sizing.reset-size2.size10,.katex .fontsize-ensurer.reset-size2.size10{font-size:3.4566666667em}.katex .sizing.reset-size2.size11,.katex .fontsize-ensurer.reset-size2.size11{font-size:4.1466666667em}.katex .sizing.reset-size3.size1,.katex .fontsize-ensurer.reset-size3.size1{font-size:.7142857143em}.katex .sizing.reset-size3.size2,.katex .fontsize-ensurer.reset-size3.size2{font-size:.8571428571em}.katex .sizing.reset-size3.size3,.katex .fontsize-ensurer.reset-size3.size3{font-size:1em}.katex .sizing.reset-size3.size4,.katex .fontsize-ensurer.reset-size3.size4{font-size:1.1428571429em}.katex .sizing.reset-size3.size5,.katex .fontsize-ensurer.reset-size3.size5{font-size:1.2857142857em}.katex .sizing.reset-size3.size6,.katex .fontsize-ensurer.reset-size3.size6{font-size:1.4285714286em}.katex .sizing.reset-size3.size7,.katex .fontsize-ensurer.reset-size3.size7{font-size:1.7142857143em}.katex .sizing.reset-size3.size8,.katex .fontsize-ensurer.reset-size3.size8{font-size:2.0571428571em}.katex .sizing.reset-size3.size9,.katex .fontsize-ensurer.reset-size3.size9{font-size:2.4685714286em}.katex .sizing.reset-size3.size10,.katex .fontsize-ensurer.reset-size3.size10{font-size:2.9628571429em}.katex .sizing.reset-size3.size11,.katex .fontsize-ensurer.reset-size3.size11{font-size:3.5542857143em}.katex .sizing.reset-size4.size1,.katex .fontsize-ensurer.reset-size4.size1{font-size:.625em}.katex .sizing.reset-size4.size2,.katex .fontsize-ensurer.reset-size4.size2{font-size:.75em}.katex .sizing.reset-size4.size3,.katex .fontsize-ensurer.reset-size4.size3{font-size:.875em}.katex .sizing.reset-size4.size4,.katex .fontsize-ensurer.reset-size4.size4{font-size:1em}.katex .sizing.reset-size4.size5,.katex .fontsize-ensurer.reset-size4.size5{font-size:1.125em}.katex .sizing.reset-size4.size6,.katex .fontsize-ensurer.reset-size4.size6{font-size:1.25em}.katex .sizing.reset-size4.size7,.katex .fontsize-ensurer.reset-size4.size7{font-size:1.5em}.katex .sizing.reset-size4.size8,.katex .fontsize-ensurer.reset-size4.size8{font-size:1.8em}.katex .sizing.reset-size4.size9,.katex .fontsize-ensurer.reset-size4.size9{font-size:2.16em}.katex .sizing.reset-size4.size10,.katex .fontsize-ensurer.reset-size4.size10{font-size:2.5925em}.katex .sizing.reset-size4.size11,.katex .fontsize-ensurer.reset-size4.size11{font-size:3.11em}.katex .sizing.reset-size5.size1,.katex .fontsize-ensurer.reset-size5.size1{font-size:.5555555556em}.katex .sizing.reset-size5.size2,.katex .fontsize-ensurer.reset-size5.size2{font-size:.6666666667em}.katex .sizing.reset-size5.size3,.katex .fontsize-ensurer.reset-size5.size3{font-size:.7777777778em}.katex .sizing.reset-size5.size4,.katex .fontsize-ensurer.reset-size5.size4{font-size:.8888888889em}.katex .sizing.reset-size5.size5,.katex .fontsize-ensurer.reset-size5.size5{font-size:1em}.katex .sizing.reset-size5.size6,.katex .fontsize-ensurer.reset-size5.size6{font-size:1.1111111111em}.katex .sizing.reset-size5.size7,.katex .fontsize-ensurer.reset-size5.size7{font-size:1.3333333333em}.katex .sizing.reset-size5.size8,.katex .fontsize-ensurer.reset-size5.size8{font-size:1.6em}.katex .sizing.reset-size5.size9,.katex .fontsize-ensurer.reset-size5.size9{font-size:1.92em}.katex .sizing.reset-size5.size10,.katex .fontsize-ensurer.reset-size5.size10{font-size:2.3044444444em}.katex .sizing.reset-size5.size11,.katex .fontsize-ensurer.reset-size5.size11{font-size:2.7644444444em}.katex .sizing.reset-size6.size1,.katex .fontsize-ensurer.reset-size6.size1{font-size:.5em}.katex .sizing.reset-size6.size2,.katex .fontsize-ensurer.reset-size6.size2{font-size:.6em}.katex .sizing.reset-size6.size3,.katex .fontsize-ensurer.reset-size6.size3{font-size:.7em}.katex .sizing.reset-size6.size4,.katex .fontsize-ensurer.reset-size6.size4{font-size:.8em}.katex .sizing.reset-size6.size5,.katex .fontsize-ensurer.reset-size6.size5{font-size:.9em}.katex .sizing.reset-size6.size6,.katex .fontsize-ensurer.reset-size6.size6{font-size:1em}.katex .sizing.reset-size6.size7,.katex .fontsize-ensurer.reset-size6.size7{font-size:1.2em}.katex .sizing.reset-size6.size8,.katex .fontsize-ensurer.reset-size6.size8{font-size:1.44em}.katex .sizing.reset-size6.size9,.katex .fontsize-ensurer.reset-size6.size9{font-size:1.728em}.katex .sizing.reset-size6.size10,.katex .fontsize-ensurer.reset-size6.size10{font-size:2.074em}.katex .sizing.reset-size6.size11,.katex .fontsize-ensurer.reset-size6.size11{font-size:2.488em}.katex .sizing.reset-size7.size1,.katex .fontsize-ensurer.reset-size7.size1{font-size:.4166666667em}.katex .sizing.reset-size7.size2,.katex .fontsize-ensurer.reset-size7.size2{font-size:.5em}.katex .sizing.reset-size7.size3,.katex .fontsize-ensurer.reset-size7.size3{font-size:.5833333333em}.katex .sizing.reset-size7.size4,.katex .fontsize-ensurer.reset-size7.size4{font-size:.6666666667em}.katex .sizing.reset-size7.size5,.katex .fontsize-ensurer.reset-size7.size5{font-size:.75em}.katex .sizing.reset-size7.size6,.katex .fontsize-ensurer.reset-size7.size6{font-size:.8333333333em}.katex .sizing.reset-size7.size7,.katex .fontsize-ensurer.reset-size7.size7{font-size:1em}.katex .sizing.reset-size7.size8,.katex .fontsize-ensurer.reset-size7.size8{font-size:1.2em}.katex .sizing.reset-size7.size9,.katex .fontsize-ensurer.reset-size7.size9{font-size:1.44em}.katex .sizing.reset-size7.size10,.katex .fontsize-ensurer.reset-size7.size10{font-size:1.7283333333em}.katex .sizing.reset-size7.size11,.katex .fontsize-ensurer.reset-size7.size11{font-size:2.0733333333em}.katex .sizing.reset-size8.size1,.katex .fontsize-ensurer.reset-size8.size1{font-size:.3472222222em}.katex .sizing.reset-size8.size2,.katex .fontsize-ensurer.reset-size8.size2{font-size:.4166666667em}.katex .sizing.reset-size8.size3,.katex .fontsize-ensurer.reset-size8.size3{font-size:.4861111111em}.katex .sizing.reset-size8.size4,.katex .fontsize-ensurer.reset-size8.size4{font-size:.5555555556em}.katex .sizing.reset-size8.size5,.katex .fontsize-ensurer.reset-size8.size5{font-size:.625em}.katex .sizing.reset-size8.size6,.katex .fontsize-ensurer.reset-size8.size6{font-size:.6944444444em}.katex .sizing.reset-size8.size7,.katex .fontsize-ensurer.reset-size8.size7{font-size:.8333333333em}.katex .sizing.reset-size8.size8,.katex .fontsize-ensurer.reset-size8.size8{font-size:1em}.katex .sizing.reset-size8.size9,.katex .fontsize-ensurer.reset-size8.size9{font-size:1.2em}.katex .sizing.reset-size8.size10,.katex .fontsize-ensurer.reset-size8.size10{font-size:1.4402777778em}.katex .sizing.reset-size8.size11,.katex .fontsize-ensurer.reset-size8.size11{font-size:1.7277777778em}.katex .sizing.reset-size9.size1,.katex .fontsize-ensurer.reset-size9.size1{font-size:.2893518519em}.katex .sizing.reset-size9.size2,.katex .fontsize-ensurer.reset-size9.size2{font-size:.3472222222em}.katex .sizing.reset-size9.size3,.katex .fontsize-ensurer.reset-size9.size3{font-size:.4050925926em}.katex .sizing.reset-size9.size4,.katex .fontsize-ensurer.reset-size9.size4{font-size:.462962963em}.katex .sizing.reset-size9.size5,.katex .fontsize-ensurer.reset-size9.size5{font-size:.5208333333em}.katex .sizing.reset-size9.size6,.katex .fontsize-ensurer.reset-size9.size6{font-size:.5787037037em}.katex .sizing.reset-size9.size7,.katex .fontsize-ensurer.reset-size9.size7{font-size:.6944444444em}.katex .sizing.reset-size9.size8,.katex .fontsize-ensurer.reset-size9.size8{font-size:.8333333333em}.katex .sizing.reset-size9.size9,.katex .fontsize-ensurer.reset-size9.size9{font-size:1em}.katex .sizing.reset-size9.size10,.katex .fontsize-ensurer.reset-size9.size10{font-size:1.2002314815em}.katex .sizing.reset-size9.size11,.katex .fontsize-ensurer.reset-size9.size11{font-size:1.4398148148em}.katex .sizing.reset-size10.size1,.katex .fontsize-ensurer.reset-size10.size1{font-size:.2410800386em}.katex .sizing.reset-size10.size2,.katex .fontsize-ensurer.reset-size10.size2{font-size:.2892960463em}.katex .sizing.reset-size10.size3,.katex .fontsize-ensurer.reset-size10.size3{font-size:.337512054em}.katex .sizing.reset-size10.size4,.katex .fontsize-ensurer.reset-size10.size4{font-size:.3857280617em}.katex .sizing.reset-size10.size5,.katex .fontsize-ensurer.reset-size10.size5{font-size:.4339440694em}.katex .sizing.reset-size10.size6,.katex .fontsize-ensurer.reset-size10.size6{font-size:.4821600771em}.katex .sizing.reset-size10.size7,.katex .fontsize-ensurer.reset-size10.size7{font-size:.5785920926em}.katex .sizing.reset-size10.size8,.katex .fontsize-ensurer.reset-size10.size8{font-size:.6943105111em}.katex .sizing.reset-size10.size9,.katex .fontsize-ensurer.reset-size10.size9{font-size:.8331726133em}.katex .sizing.reset-size10.size10,.katex .fontsize-ensurer.reset-size10.size10{font-size:1em}.katex .sizing.reset-size10.size11,.katex .fontsize-ensurer.reset-size10.size11{font-size:1.1996142719em}.katex .sizing.reset-size11.size1,.katex .fontsize-ensurer.reset-size11.size1{font-size:.2009646302em}.katex .sizing.reset-size11.size2,.katex .fontsize-ensurer.reset-size11.size2{font-size:.2411575563em}.katex .sizing.reset-size11.size3,.katex .fontsize-ensurer.reset-size11.size3{font-size:.2813504823em}.katex .sizing.reset-size11.size4,.katex .fontsize-ensurer.reset-size11.size4{font-size:.3215434084em}.katex .sizing.reset-size11.size5,.katex .fontsize-ensurer.reset-size11.size5{font-size:.3617363344em}.katex .sizing.reset-size11.size6,.katex .fontsize-ensurer.reset-size11.size6{font-size:.4019292605em}.katex .sizing.reset-size11.size7,.katex .fontsize-ensurer.reset-size11.size7{font-size:.4823151125em}.katex .sizing.reset-size11.size8,.katex .fontsize-ensurer.reset-size11.size8{font-size:.578778135em}.katex .sizing.reset-size11.size9,.katex .fontsize-ensurer.reset-size11.size9{font-size:.6945337621em}.katex .sizing.reset-size11.size10,.katex .fontsize-ensurer.reset-size11.size10{font-size:.8336012862em}.katex .sizing.reset-size11.size11,.katex .fontsize-ensurer.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .op-limits>.vlist-t{text-align:center}.katex .accent>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{display:block;position:absolute;width:100%;height:inherit;fill:currentColor;stroke:currentColor}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;min-width:0;min-height:0;max-width:none;max-height:none}.katex .stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .stretchy:before,.katex .stretchy:after{content:""}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{position:absolute;left:0;width:50.2%;overflow:hidden}.katex .halfarrow-right{position:absolute;right:0;width:50.2%;overflow:hidden}.katex .brace-left{position:absolute;left:0;width:25.1%;overflow:hidden}.katex .brace-center{position:absolute;left:25%;width:50%;overflow:hidden}.katex .brace-right{position:absolute;right:0;width:25.1%;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .x-arrow,.katex .mover,.katex .munder{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{box-sizing:border-box;border-top:.049em solid;border-right:.049em solid;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{counter-increment:katexEqnNo;content:"(" counter(katexEqnNo) ")"}.katex .mml-eqn-num:before{counter-increment:mmlEqnNo;content:"(" counter(mmlEqnNo) ")"}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;position:absolute;left:calc(50% + .3em);text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left;padding-left:2em}body{counter-reset:katexEqnNo mmlEqnNo}.markdown-block--unstable.svelte-15eq738{display:contents}.streaming-code-block.svelte-15eq738 .streaming-code-pre:where(.svelte-15eq738){background:transparent;padding:.5rem;margin:0;overflow-x:visible;border-radius:0;border:none;font-size:.875rem}div.svelte-15eq738 p{margin-block:1rem;line-height:1.75}div.svelte-15eq738 :is(h1,h2,h3,h4,h5,h6):first-child{margin-top:0}div.svelte-15eq738 h1{font-size:1.875rem;font-weight:700;line-height:1.2;margin:1.5rem 0 .75rem}div.svelte-15eq738 h2{font-size:1.5rem;font-weight:600;line-height:1.3;margin:1.25rem 0 .5rem}div.svelte-15eq738 h3{font-size:1.25rem;font-weight:600;margin:1.5rem 0 .5rem;line-height:1.4}div.svelte-15eq738 h4{font-size:1.125rem;font-weight:600;margin:.75rem 0 .25rem}div.svelte-15eq738 h5{font-size:1rem;font-weight:600;margin:.5rem 0 .25rem}div.svelte-15eq738 h6{font-size:.875rem;font-weight:600;margin:.5rem 0 .25rem}div.svelte-15eq738 strong{font-weight:600}div.svelte-15eq738 em{font-style:italic}div.svelte-15eq738 del{text-decoration:line-through;opacity:.7}div.svelte-15eq738 code:not(pre code){background:var(--muted);color:var(--muted-foreground);padding:.125rem .375rem;border-radius:.375rem;font-size:.875rem;font-family:ui-monospace,SFMono-Regular,SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Liberation Mono,Menlo,monospace}div.svelte-15eq738 pre{display:inline;margin:0!important;overflow:hidden!important;background:var(--muted);overflow-x:auto;border-radius:1rem;border:none;line-height:1!important}div.svelte-15eq738 pre code{padding:0!important;display:inline!important}div.svelte-15eq738 code{background:transparent;color:var(--code-foreground)}div.svelte-15eq738 a{color:var(--primary);text-decoration:underline;text-underline-offset:2px;transition:color .2s ease;overflow-wrap:anywhere;word-break:break-all}div.svelte-15eq738 a:hover{color:var(--primary)}div.svelte-15eq738 ul{list-style-type:disc;margin-inline-start:1.5rem;margin-bottom:1rem}div.svelte-15eq738 ol{list-style-type:decimal;margin-inline-start:1.5rem;margin-bottom:1rem}div.svelte-15eq738 li{margin-bottom:.25rem;padding-inline-start:.5rem}div.svelte-15eq738 li::marker{color:var(--muted-foreground)}div.svelte-15eq738 ul ul{list-style-type:circle;margin-top:.25rem;margin-bottom:.25rem}div.svelte-15eq738 ol ol{list-style-type:lower-alpha;margin-top:.25rem;margin-bottom:.25rem}div.svelte-15eq738 .task-list-item{list-style:none;margin-inline-start:0;padding-inline-start:0}div.svelte-15eq738 .task-list-item-checkbox{margin-right:.5rem;margin-top:.125rem}div.svelte-15eq738 blockquote{border-left:4px solid var(--border);padding:.5rem 1rem;margin:1.5rem 0;font-style:italic;color:var(--muted-foreground);background:var(--muted);border-radius:0 .375rem .375rem 0}div.svelte-15eq738 table{width:100%;margin:1.5rem 0;border-collapse:collapse;border:1px solid var(--border);border-radius:.375rem;overflow:hidden}div.svelte-15eq738 th{background:hsl(var(--muted) / .3);border:1px solid var(--border);padding:.5rem .75rem;text-align:left;font-weight:600}div.svelte-15eq738 td{border:1px solid var(--border);padding:.5rem .75rem}div.svelte-15eq738 tr:nth-child(2n){background:hsl(var(--muted) / .1)}div.markdown-user-content.svelte-15eq738 table,div.markdown-user-content.svelte-15eq738 th,div.markdown-user-content.svelte-15eq738 td,div.markdown-user-content.svelte-15eq738 .table-wrapper{border-color:currentColor}div.svelte-15eq738 hr{border:none;border-top:1px solid var(--border);margin:1.5rem 0}div.svelte-15eq738 img{border-radius:.5rem;box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a;margin:1.5rem 0;max-width:100%;height:auto}div.svelte-15eq738 .code-block-wrapper{margin:1.5rem 0;border-radius:.75rem;overflow:hidden;border:1px solid color-mix(in oklch,var(--border) 30%,transparent);background:var(--code-background);box-shadow:0 1px 2px #0000000d;min-height:var(--min-message-height);max-height:var(--max-message-height)}.dark div.svelte-15eq738 .code-block-wrapper{border-color:color-mix(in oklch,var(--border) 20%,transparent)}div.svelte-15eq738 .code-block-scroll-container,.streaming-code-scroll-container.svelte-15eq738{min-height:var(--min-message-height);max-height:var(--max-message-height);overflow-y:auto;overflow-x:auto;padding:3rem 1rem 1rem;line-height:1.3}.full-height-code-blocks.svelte-15eq738 .code-block-wrapper{max-height:none}.full-height-code-blocks.svelte-15eq738 .code-block-scroll-container,.full-height-code-blocks.svelte-15eq738 .streaming-code-scroll-container:where(.svelte-15eq738){max-height:none;overflow-y:visible}div.svelte-15eq738 .code-block-header{display:flex;justify-content:space-between;align-items:center;padding:.5rem 1rem 0;font-size:.875rem;position:absolute;top:0;left:0;right:0}div.svelte-15eq738 .code-language{color:var(--color-foreground);font-weight:500;font-family:ui-monospace,SFMono-Regular,SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Liberation Mono,Menlo,monospace;text-transform:uppercase;font-size:.75rem;letter-spacing:.05em}div.svelte-15eq738 .code-block-actions{display:flex;align-items:center;gap:.5rem}div.svelte-15eq738 .copy-code-btn,div.svelte-15eq738 .preview-code-btn{display:flex;align-items:center;justify-content:center;padding:0;background:transparent;color:var(--code-foreground);cursor:pointer;transition:all .2s ease}div.svelte-15eq738 .copy-code-btn:hover,div.svelte-15eq738 .preview-code-btn:hover{transform:scale(1.05)}div.svelte-15eq738 .copy-code-btn:active,div.svelte-15eq738 .preview-code-btn:active{transform:scale(.95)}div.svelte-15eq738 .code-block-wrapper pre{background:transparent;margin:0;border-radius:0;border:none;font-size:.875rem}div.svelte-15eq738 .mention{color:hsl(var(--primary));font-weight:500;text-decoration:none}div.svelte-15eq738 .mention:hover{text-decoration:underline}div.svelte-15eq738 .hashtag{color:hsl(var(--primary));font-weight:500;text-decoration:none}div.svelte-15eq738 .hashtag:hover{text-decoration:underline}div.svelte-15eq738 table{transition:all .2s ease}div.svelte-15eq738 table:hover{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}div.svelte-15eq738 th:hover,div.svelte-15eq738 td:hover{background:var(--muted)}.markdown-user-content.svelte-15eq738 a,.markdown-user-content.svelte-15eq738 a:hover{color:inherit}.markdown-user-content.svelte-15eq738 table:hover{box-shadow:none}.markdown-user-content.svelte-15eq738 th:hover,.markdown-user-content.svelte-15eq738 td:hover{background:inherit}div.svelte-15eq738 blockquote{transition:all .2s ease;position:relative}div.svelte-15eq738 blockquote:hover{border-left-width:6px;background:var(--muted);transform:translate(2px)}div.svelte-15eq738 blockquote:before{content:'"';position:absolute;top:-.5rem;left:.5rem;font-size:3rem;color:var(--muted-foreground);font-family:serif;line-height:1}div.svelte-15eq738 img{transition:all .3s ease;cursor:pointer}div.svelte-15eq738 img:hover{transform:scale(1.02);box-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a}div.svelte-15eq738 .image-zoom-overlay{position:fixed;inset:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000;cursor:pointer}div.svelte-15eq738 .image-zoom-overlay img{max-width:90vw;max-height:90vh;border-radius:.5rem;box-shadow:0 25px 50px -12px #00000040}div.svelte-15eq738 hr{border:none;height:2px;background:linear-gradient(to right,transparent,var(--border),transparent);margin:2rem 0;position:relative}div.svelte-15eq738 hr:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:1rem;height:1rem;background:var(--border);border-radius:50%}div.svelte-15eq738 .table-wrapper{overflow-x:auto;margin:1.5rem 0;border-radius:.5rem;border:1px solid var(--border)}div.svelte-15eq738 .table-wrapper table{margin:0;border:none}@media(max-width:640px){div.svelte-15eq738 h1{font-size:1.5rem}div.svelte-15eq738 h2{font-size:1.25rem}div.svelte-15eq738 h3{font-size:1.125rem}div.svelte-15eq738 table{font-size:.875rem}div.svelte-15eq738 th,div.svelte-15eq738 td{padding:.375rem .5rem}div.svelte-15eq738 .table-wrapper{margin:.5rem -1rem;border-radius:0;border-left:none;border-right:none}}@media(prefers-color-scheme:dark){div.svelte-15eq738 blockquote:hover{background:var(--muted)}}div.svelte-15eq738 .image-load-error{display:flex;align-items:center;justify-content:center;margin:1.5rem 0;padding:1.5rem;border-radius:.5rem;background:var(--muted);border:1px dashed var(--border)}div.svelte-15eq738 .image-error-content{display:flex;flex-direction:column;align-items:center;gap:.75rem;color:var(--muted-foreground);text-align:center}div.svelte-15eq738 .image-error-content svg{opacity:.5}div.svelte-15eq738 .image-error-text{font-size:.875rem}div.svelte-15eq738 .image-error-link{display:inline-flex;align-items:center;gap:.375rem;padding:.5rem 1rem;font-size:.875rem;font-weight:500;color:var(--primary);background:var(--background);border:1px solid var(--border);border-radius:.375rem;text-decoration:none;transition:all .2s ease}div.svelte-15eq738 .image-error-link:hover{background:var(--muted);border-color:var(--primary)}.code-preview-wrapper.svelte-hp0zxr{font-family:ui-monospace,SFMono-Regular,SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Liberation Mono,Menlo,monospace}.code-preview-wrapper.svelte-hp0zxr pre:where(.svelte-hp0zxr){background:transparent}.code-preview-wrapper.svelte-hp0zxr code:where(.svelte-hp0zxr){background:transparent} diff --git a/tools/server/public/bundle.js b/tools/server/public/bundle.js index b3b5673ae95..68f1f5d0a30 100644 --- a/tools/server/public/bundle.js +++ b/tools/server/public/bundle.js @@ -1,284 +1,292 @@ var __typeError=msg=>{throw TypeError(msg)};var __accessCheck=(obj,member,msg)=>member.has(obj)||__typeError("Cannot "+msg);var __privateGet=(obj,member,getter)=>(__accessCheck(obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet=(obj,member,value,setter)=>(__accessCheck(obj,member,"write to private field"),setter?setter.call(obj,value):member.set(obj,value),value),__privateMethod=(obj,member,method)=>(__accessCheck( obj,member,"access private method"),method);var __privateWrapper=(obj,member,setter,getter)=>({set _(value){__privateSet(obj,member,value,setter)},get _(){return __privateGet(obj,member,getter)}});var is_array=Array.isArray,index_of=Array.prototype.indexOf,includes=Array.prototype.includes,array_from=Array.from,define_property=Object.defineProperty,get_descriptor=Object.getOwnPropertyDescriptor,get_descriptors=Object.getOwnPropertyDescriptors,object_prototype=Object.prototype,array_prototype=Array.prototype,get_prototype_of=Object.getPrototypeOf,is_extensible=Object.isExtensible;function is_function(thing){return typeof thing=="function"}const noop$3=()=>{};function run(fn){return fn()}function run_all(arr){ for(var i=0;i<arr.length;i++)arr[i]()}function deferred(){var resolve2,reject,promise=new Promise((res,rej)=>{resolve2=res,reject=rej});return{promise,resolve:resolve2,reject}}function fallback(value,fallback2,lazy=!1){return value===void 0?lazy?fallback2():fallback2:value}function to_array(value,n){if(Array.isArray(value))return value;if(!(Symbol.iterator in value))return Array.from(value);const array2=[];for(const element2 of value)if(array2.push(element2),array2.length===n)break;return array2} -const DERIVED=2,EFFECT=4,RENDER_EFFECT=8,MANAGED_EFFECT=1<<24,BLOCK_EFFECT=16,BRANCH_EFFECT=32,ROOT_EFFECT=64,BOUNDARY_EFFECT=128,CONNECTED=512,CLEAN=1024,DIRTY=2048,MAYBE_DIRTY=4096,INERT=8192,DESTROYED=16384,EFFECT_RAN=32768,EFFECT_TRANSPARENT=65536,EAGER_EFFECT=1<<17,HEAD_EFFECT=1<<18,EFFECT_PRESERVED=1<<19,USER_EFFECT=1<<20,EFFECT_OFFSCREEN=1<<25,WAS_MARKED=32768,REACTION_IS_UPDATING=1<<21,ASYNC=1<<22,ERROR_VALUE=1<<23,STATE_SYMBOL=Symbol("$state"),LEGACY_PROPS=Symbol("legacy props"),LOADING_ATTR_SYMBOL=Symbol( -""),STALE_REACTION=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},ELEMENT_NODE$1=1,TEXT_NODE=3,COMMENT_NODE=8;function experimental_async_required(name){throw new Error("https://svelte.dev/e/experimental_async_required")}function lifecycle_outside_component(name){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function missing_context(){throw new Error("https://svelte.dev/e/missing_context")}function async_derived_orphan(){ -throw new Error("https://svelte.dev/e/async_derived_orphan")}function effect_in_teardown(rune){throw new Error("https://svelte.dev/e/effect_in_teardown")}function effect_in_unowned_derived(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function effect_orphan(rune){throw new Error("https://svelte.dev/e/effect_orphan")}function effect_update_depth_exceeded(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function fork_discarded(){throw new Error("https://\ -svelte.dev/e/fork_discarded")}function fork_timing(){throw new Error("https://svelte.dev/e/fork_timing")}function get_abort_signal_outside_reaction(){throw new Error("https://svelte.dev/e/get_abort_signal_outside_reaction")}function hydration_failed(){throw new Error("https://svelte.dev/e/hydration_failed")}function lifecycle_legacy_only(name){throw new Error("https://svelte.dev/e/lifecycle_legacy_only")}function props_invalid_value(key2){throw new Error("https://svelte.dev/e/props_invalid_value")} -function state_descriptors_fixed(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function state_prototype_fixed(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function state_unsafe_mutation(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function svelte_boundary_reset_onerror(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const EACH_ITEM_REACTIVE=1,EACH_INDEX_REACTIVE=2,EACH_IS_CONTROLLED=4,EACH_IS_ANIMATED=8,EACH_ITEM_IMMUTABLE=16, -PROPS_IS_IMMUTABLE=1,PROPS_IS_RUNES=2,PROPS_IS_UPDATED=4,PROPS_IS_BINDABLE=8,PROPS_IS_LAZY_INITIAL=16,TRANSITION_IN=1,TRANSITION_OUT=2,TRANSITION_GLOBAL=4,TEMPLATE_FRAGMENT=1,TEMPLATE_USE_IMPORT_NODE=2,HYDRATION_START="[",HYDRATION_START_ELSE="[!",HYDRATION_END="]",HYDRATION_ERROR={},UNINITIALIZED=Symbol(),NAMESPACE_HTML="http://www.w3.org/1999/xhtml",NAMESPACE_SVG="http://www.w3.org/2000/svg",ATTACHMENT_KEY="@attach";function hydratable_missing_but_expected(key2){console.warn("https://svelte.de\ -v/e/hydratable_missing_but_expected")}function hydration_mismatch(location2){console.warn("https://svelte.dev/e/hydration_mismatch")}function select_multiple_invalid_value(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function svelte_boundary_reset_noop(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let hydrating=!1;function set_hydrating(value){hydrating=value}let hydrate_node;function set_hydrate_node(node2){if(node2===null)throw hydration_mismatch(),HYDRATION_ERROR; -return hydrate_node=node2}function hydrate_next(){return set_hydrate_node(get_next_sibling(hydrate_node))}function reset(node2){if(hydrating){if(get_next_sibling(hydrate_node)!==null)throw hydration_mismatch(),HYDRATION_ERROR;hydrate_node=node2}}function next$1(count=1){if(hydrating){for(var i=count,node2=hydrate_node;i--;)node2=get_next_sibling(node2);hydrate_node=node2}}function skip_nodes(remove2=!0){for(var depth=0,node2=hydrate_node;;){if(node2.nodeType===COMMENT_NODE){var data=node2.data;if(data=== -HYDRATION_END){if(depth===0)return node2;depth-=1}else(data===HYDRATION_START||data===HYDRATION_START_ELSE)&&(depth+=1)}var next2=get_next_sibling(node2);remove2&&node2.remove(),node2=next2}}function read_hydration_instruction(node2){if(!node2||node2.nodeType!==COMMENT_NODE)throw hydration_mismatch(),HYDRATION_ERROR;return node2.data}function equals(value){return value===this.v}function safe_not_equal(a,b){return a!=a?b==b:a!==b||a!==null&&typeof a=="object"||typeof a=="function"}function safe_equals(value){ -return!safe_not_equal(value,this.v)}let legacy_mode_flag=!1;function enable_legacy_mode_flag(){legacy_mode_flag=!0}const empty$2=[];function snapshot(value,skip_warning=!1,no_tojson=!1){return clone$1(value,new Map,"",empty$2,null,no_tojson)}function clone$1(value,cloned,path2,paths,original=null,no_tojson=!1){if(typeof value=="object"&&value!==null){var unwrapped=cloned.get(value);if(unwrapped!==void 0)return unwrapped;if(value instanceof Map)return new Map(value);if(value instanceof Set)return new Set(value);if(is_array(value)){var copy=Array(value.length); -cloned.set(value,copy),original!==null&&cloned.set(original,copy);for(var i=0;i<value.length;i+=1){var element2=value[i];i in value&&(copy[i]=clone$1(element2,cloned,path2,paths,null,no_tojson))}return copy}if(get_prototype_of(value)===object_prototype){copy={},cloned.set(value,copy),original!==null&&cloned.set(original,copy);for(var key2 in value)copy[key2]=clone$1(value[key2],cloned,path2,paths,null,no_tojson);return copy}if(value instanceof Date)return structuredClone(value);if(typeof value.toJSON== -"function"&&!no_tojson)return clone$1(value.toJSON(),cloned,path2,paths,value)}if(value instanceof EventTarget)return value;try{return structuredClone(value)}catch{return value}}let component_context=null;function set_component_context(context){component_context=context}function createContext(){const key2={};return[()=>(hasContext(key2)||missing_context(),getContext(key2)),context=>setContext(key2,context)]}function getContext(key2){return get_or_init_context_map().get(key2)}function setContext(key2,context){ -return get_or_init_context_map().set(key2,context),context}function hasContext(key2){return get_or_init_context_map().has(key2)}function getAllContexts(){return get_or_init_context_map()}function push$1(props,runes=!1,fn){component_context={p:component_context,i:!1,c:null,e:null,s:props,x:null,l:legacy_mode_flag&&!runes?{s:null,u:null,$:[]}:null}}function pop(component2){var context=component_context,effects=context.e;if(effects!==null){context.e=null;for(var fn of effects)create_user_effect(fn)} -return component2!==void 0&&(context.x=component2),context.i=!0,component_context=context.p,component2??{}}function is_runes(){return!legacy_mode_flag||component_context!==null&&component_context.l===null}function get_or_init_context_map(name){return component_context===null&&lifecycle_outside_component(),component_context.c??=new Map(get_parent_context(component_context)||void 0)}function get_parent_context(component_context2){let parent=component_context2.p;for(;parent!==null;){const context_map=parent. -c;if(context_map!==null)return context_map;parent=parent.p}return null}let micro_tasks=[];function run_micro_tasks(){var tasks=micro_tasks;micro_tasks=[],run_all(tasks)}function queue_micro_task(fn){if(micro_tasks.length===0&&!is_flushing_sync){var tasks=micro_tasks;queueMicrotask(()=>{tasks===micro_tasks&&run_micro_tasks()})}micro_tasks.push(fn)}function flush_tasks(){for(;micro_tasks.length>0;)run_micro_tasks()}function handle_error$1(error2){var effect2=active_effect;if(effect2===null)return active_reaction. -f|=ERROR_VALUE,error2;if((effect2.f&EFFECT_RAN)===0){if((effect2.f&BOUNDARY_EFFECT)===0)throw error2;effect2.b.error(error2)}else invoke_error_boundary(error2,effect2)}function invoke_error_boundary(error2,effect2){for(;effect2!==null;){if((effect2.f&BOUNDARY_EFFECT)!==0)try{effect2.b.error(error2);return}catch(e){error2=e}effect2=effect2.parent}throw error2}const STATUS_MASK=-7169;function set_signal_status(signal,status){signal.f=signal.f&STATUS_MASK|status}function update_derived_status(derived2){ -(derived2.f&CONNECTED)!==0||derived2.deps===null?set_signal_status(derived2,CLEAN):set_signal_status(derived2,MAYBE_DIRTY)}function clear_marked(deps){if(deps!==null)for(const dep of deps)(dep.f&DERIVED)===0||(dep.f&WAS_MARKED)===0||(dep.f^=WAS_MARKED,clear_marked(dep.deps))}function defer_effect(effect2,dirty_effects,maybe_dirty_effects){(effect2.f&DIRTY)!==0?dirty_effects.add(effect2):(effect2.f&MAYBE_DIRTY)!==0&&maybe_dirty_effects.add(effect2),clear_marked(effect2.deps),set_signal_status(effect2, -CLEAN)}const batches=new Set;let current_batch=null,previous_batch=null,batch_values=null,queued_root_effects=[],last_scheduled_effect=null,is_flushing=!1,is_flushing_sync=!1;class Batch{committed=!1;current=new Map;previous=new Map;#commit_callbacks=new Set;#discard_callbacks=new Set;#pending=0;#blocking_pending=0;#deferred=null;#dirty_effects=new Set;#maybe_dirty_effects=new Set;skipped_effects=new Set;is_fork=!1;#decrement_queued=!1;is_deferred(){return this.is_fork||this.#blocking_pending>0}process(root_effects){ -queued_root_effects=[],this.apply();var effects=[],render_effects=[];for(const root2 of root_effects)this.#traverse_effect_tree(root2,effects,render_effects);if(this.is_deferred())this.#defer_effects(render_effects),this.#defer_effects(effects);else{for(const fn of this.#commit_callbacks)fn();this.#commit_callbacks.clear(),this.#pending===0&&this.#commit(),previous_batch=this,current_batch=null,flush_queued_effects(render_effects),flush_queued_effects(effects),previous_batch=null,this.#deferred?. -resolve()}batch_values=null}#traverse_effect_tree(root2,effects,render_effects){root2.f^=CLEAN;for(var effect2=root2.first,pending_boundary=null;effect2!==null;){var flags2=effect2.f,is_branch=(flags2&(BRANCH_EFFECT|ROOT_EFFECT))!==0,is_skippable_branch=is_branch&&(flags2&CLEAN)!==0,skip=is_skippable_branch||(flags2&INERT)!==0||this.skipped_effects.has(effect2);if(!skip&&effect2.fn!==null){is_branch?effect2.f^=CLEAN:pending_boundary!==null&&(flags2&(EFFECT|RENDER_EFFECT|MANAGED_EFFECT))!==0?pending_boundary. -b.defer_effect(effect2):(flags2&EFFECT)!==0?effects.push(effect2):is_dirty(effect2)&&((flags2&BLOCK_EFFECT)!==0&&this.#maybe_dirty_effects.add(effect2),update_effect(effect2));var child2=effect2.first;if(child2!==null){effect2=child2;continue}}var parent=effect2.parent;for(effect2=effect2.next;effect2===null&&parent!==null;)parent===pending_boundary&&(pending_boundary=null),effect2=parent.next,parent=parent.parent}}#defer_effects(effects){for(var i=0;i<effects.length;i+=1)defer_effect(effects[i], -this.#dirty_effects,this.#maybe_dirty_effects)}capture(source2,value){value!==UNINITIALIZED&&!this.previous.has(source2)&&this.previous.set(source2,value),(source2.f&ERROR_VALUE)===0&&(this.current.set(source2,source2.v),batch_values?.set(source2,source2.v))}activate(){current_batch=this,this.apply()}deactivate(){current_batch===this&&(current_batch=null,batch_values=null)}flush(){if(this.activate(),queued_root_effects.length>0){if(flush_effects(),current_batch!==null&¤t_batch!==this)return}else -this.#pending===0&&this.process([]);this.deactivate()}discard(){for(const fn of this.#discard_callbacks)fn(this);this.#discard_callbacks.clear()}#commit(){if(batches.size>1){this.previous.clear();var previous_batch_values=batch_values,is_earlier=!0;for(const batch of batches){if(batch===this){is_earlier=!1;continue}const sources=[];for(const[source2,value]of this.current){if(batch.current.has(source2))if(is_earlier&&value!==batch.current.get(source2))batch.current.set(source2,value);else continue; -sources.push(source2)}if(sources.length===0)continue;const others=[...batch.current.keys()].filter(s2=>!this.current.has(s2));if(others.length>0){var prev_queued_root_effects=queued_root_effects;queued_root_effects=[];const marked=new Set,checked=new Map;for(const source2 of sources)mark_effects(source2,others,marked,checked);if(queued_root_effects.length>0){current_batch=batch,batch.apply();for(const root2 of queued_root_effects)batch.#traverse_effect_tree(root2,[],[]);batch.deactivate()}queued_root_effects= -prev_queued_root_effects}}current_batch=null,batch_values=previous_batch_values}this.committed=!0,batches.delete(this)}increment(blocking){this.#pending+=1,blocking&&(this.#blocking_pending+=1)}decrement(blocking){this.#pending-=1,blocking&&(this.#blocking_pending-=1),!this.#decrement_queued&&(this.#decrement_queued=!0,queue_micro_task(()=>{this.#decrement_queued=!1,this.is_deferred()?queued_root_effects.length>0&&this.flush():this.revive()}))}revive(){for(const e of this.#dirty_effects)this.#maybe_dirty_effects. -delete(e),set_signal_status(e,DIRTY),schedule_effect(e);for(const e of this.#maybe_dirty_effects)set_signal_status(e,MAYBE_DIRTY),schedule_effect(e);this.flush()}oncommit(fn){this.#commit_callbacks.add(fn)}ondiscard(fn){this.#discard_callbacks.add(fn)}settled(){return(this.#deferred??=deferred()).promise}static ensure(){if(current_batch===null){const batch=current_batch=new Batch;batches.add(current_batch),is_flushing_sync||queue_micro_task(()=>{current_batch===batch&&batch.flush()})}return current_batch}apply(){}} -function flushSync(fn){var was_flushing_sync=is_flushing_sync;is_flushing_sync=!0;try{var result;for(fn&&(current_batch!==null&&flush_effects(),result=fn());;){if(flush_tasks(),queued_root_effects.length===0&&(current_batch?.flush(),queued_root_effects.length===0))return last_scheduled_effect=null,result;flush_effects()}}finally{is_flushing_sync=was_flushing_sync}}function flush_effects(){is_flushing=!0;var source_stacks=null;try{for(var flush_count=0;queued_root_effects.length>0;){var batch=Batch. -ensure();if(flush_count++>1e3){var updates,entry;infinite_loop_guard()}batch.process(queued_root_effects),old_values.clear()}}finally{is_flushing=!1,last_scheduled_effect=null}}function infinite_loop_guard(){try{effect_update_depth_exceeded()}catch(error2){invoke_error_boundary(error2,last_scheduled_effect)}}let eager_block_effects=null;function flush_queued_effects(effects){var length=effects.length;if(length!==0){for(var i=0;i<length;){var effect2=effects[i++];if((effect2.f&(DESTROYED|INERT))=== -0&&is_dirty(effect2)&&(eager_block_effects=new Set,update_effect(effect2),effect2.deps===null&&effect2.first===null&&effect2.nodes===null&&(effect2.teardown===null&&effect2.ac===null?unlink_effect(effect2):effect2.fn=null),eager_block_effects?.size>0)){old_values.clear();for(const e of eager_block_effects){if((e.f&(DESTROYED|INERT))!==0)continue;const ordered_effects=[e];let ancestor=e.parent;for(;ancestor!==null;)eager_block_effects.has(ancestor)&&(eager_block_effects.delete(ancestor),ordered_effects. -push(ancestor)),ancestor=ancestor.parent;for(let j=ordered_effects.length-1;j>=0;j--){const e2=ordered_effects[j];(e2.f&(DESTROYED|INERT))===0&&update_effect(e2)}}eager_block_effects.clear()}}eager_block_effects=null}}function mark_effects(value,sources,marked,checked){if(!marked.has(value)&&(marked.add(value),value.reactions!==null))for(const reaction of value.reactions){const flags2=reaction.f;(flags2&DERIVED)!==0?mark_effects(reaction,sources,marked,checked):(flags2&(ASYNC|BLOCK_EFFECT))!==0&& -(flags2&DIRTY)===0&&depends_on(reaction,sources,checked)&&(set_signal_status(reaction,DIRTY),schedule_effect(reaction))}}function mark_eager_effects(value,effects){if(value.reactions!==null)for(const reaction of value.reactions){const flags2=reaction.f;(flags2&DERIVED)!==0?mark_eager_effects(reaction,effects):(flags2&EAGER_EFFECT)!==0&&(set_signal_status(reaction,DIRTY),effects.add(reaction))}}function depends_on(reaction,sources,checked){const depends=checked.get(reaction);if(depends!==void 0)return depends; -if(reaction.deps!==null)for(const dep of reaction.deps){if(includes.call(sources,dep))return!0;if((dep.f&DERIVED)!==0&&depends_on(dep,sources,checked))return checked.set(dep,!0),!0}return checked.set(reaction,!1),!1}function schedule_effect(signal){for(var effect2=last_scheduled_effect=signal;effect2.parent!==null;){effect2=effect2.parent;var flags2=effect2.f;if(is_flushing&&effect2===active_effect&&(flags2&BLOCK_EFFECT)!==0&&(flags2&HEAD_EFFECT)===0)return;if((flags2&(ROOT_EFFECT|BRANCH_EFFECT))!== -0){if((flags2&CLEAN)===0)return;effect2.f^=CLEAN}}queued_root_effects.push(effect2)}function fork(fn){experimental_async_required(),current_batch!==null&&fork_timing();var batch=Batch.ensure();batch.is_fork=!0,batch_values=new Map;var committed=!1,settled2=batch.settled();flushSync(fn);for(var[source2,value]of batch.previous)source2.v=value;for(source2 of batch.current.keys())(source2.f&DERIVED)!==0&&set_signal_status(source2,DIRTY);return{commit:async()=>{if(committed){await settled2;return}batches. -has(batch)||fork_discarded(),committed=!0,batch.is_fork=!1;for(var[source3,value2]of batch.current)source3.v=value2,source3.wv=increment_write_version();flushSync(()=>{var eager_effects2=new Set;for(var source4 of batch.current.keys())mark_eager_effects(source4,eager_effects2);set_eager_effects(eager_effects2),flush_eager_effects()}),batch.revive(),await settled2},discard:()=>{!committed&&batches.has(batch)&&(batches.delete(batch),batch.discard())}}}function createSubscriber(start2){let subscribers=0, -version2=source$2(0),stop;return()=>{effect_tracking()&&(get$4(version2),render_effect(()=>(subscribers===0&&(stop=untrack$1(()=>start2(()=>increment$1(version2)))),subscribers+=1,()=>{queue_micro_task(()=>{subscribers-=1,subscribers===0&&(stop?.(),stop=void 0,increment$1(version2))})})))}}var flags=EFFECT_TRANSPARENT|EFFECT_PRESERVED|BOUNDARY_EFFECT;function boundary(node2,props,children){new Boundary(node2,props,children)}class Boundary{parent;is_pending=!1;#anchor;#hydrate_open=hydrating?hydrate_node: -null;#props;#children;#effect;#main_effect=null;#pending_effect=null;#failed_effect=null;#offscreen_fragment=null;#pending_anchor=null;#local_pending_count=0;#pending_count=0;#pending_count_update_queued=!1;#is_creating_fallback=!1;#dirty_effects=new Set;#maybe_dirty_effects=new Set;#effect_pending=null;#effect_pending_subscriber=createSubscriber(()=>(this.#effect_pending=source$2(this.#local_pending_count),()=>{this.#effect_pending=null}));constructor(node2,props,children){this.#anchor=node2,this.#props= -props,this.#children=children,this.parent=active_effect.b,this.is_pending=!!this.#props.pending,this.#effect=block(()=>{if(active_effect.b=this,hydrating){const comment2=this.#hydrate_open;hydrate_next(),comment2.nodeType===COMMENT_NODE&&comment2.data===HYDRATION_START_ELSE?this.#hydrate_pending_content():(this.#hydrate_resolved_content(),this.#pending_count===0&&(this.is_pending=!1))}else{var anchor=this.#get_anchor();try{this.#main_effect=branch(()=>children(anchor))}catch(error2){this.error(error2)} -this.#pending_count>0?this.#show_pending_snippet():this.is_pending=!1}return()=>{this.#pending_anchor?.remove()}},flags),hydrating&&(this.#anchor=hydrate_node)}#hydrate_resolved_content(){try{this.#main_effect=branch(()=>this.#children(this.#anchor))}catch(error2){this.error(error2)}}#hydrate_pending_content(){const pending=this.#props.pending;pending&&(this.#pending_effect=branch(()=>pending(this.#anchor)),queue_micro_task(()=>{var anchor=this.#get_anchor();this.#main_effect=this.#run(()=>(Batch. -ensure(),branch(()=>this.#children(anchor)))),this.#pending_count>0?this.#show_pending_snippet():(pause_effect(this.#pending_effect,()=>{this.#pending_effect=null}),this.is_pending=!1)}))}#get_anchor(){var anchor=this.#anchor;return this.is_pending&&(this.#pending_anchor=create_text(),this.#anchor.before(this.#pending_anchor),anchor=this.#pending_anchor),anchor}defer_effect(effect2){defer_effect(effect2,this.#dirty_effects,this.#maybe_dirty_effects)}is_rendered(){return!this.is_pending&&(!this.parent|| -this.parent.is_rendered())}has_pending_snippet(){return!!this.#props.pending}#run(fn){var previous_effect=active_effect,previous_reaction=active_reaction,previous_ctx=component_context;set_active_effect(this.#effect),set_active_reaction(this.#effect),set_component_context(this.#effect.ctx);try{return fn()}catch(e){return handle_error$1(e),null}finally{set_active_effect(previous_effect),set_active_reaction(previous_reaction),set_component_context(previous_ctx)}}#show_pending_snippet(){const pending=this.#props. -pending;this.#main_effect!==null&&(this.#offscreen_fragment=document.createDocumentFragment(),this.#offscreen_fragment.append(this.#pending_anchor),move_effect(this.#main_effect,this.#offscreen_fragment)),this.#pending_effect===null&&(this.#pending_effect=branch(()=>pending(this.#anchor)))}#update_pending_count(d2){if(!this.has_pending_snippet()){this.parent&&this.parent.#update_pending_count(d2);return}if(this.#pending_count+=d2,this.#pending_count===0){this.is_pending=!1;for(const e of this.#dirty_effects) -set_signal_status(e,DIRTY),schedule_effect(e);for(const e of this.#maybe_dirty_effects)set_signal_status(e,MAYBE_DIRTY),schedule_effect(e);this.#dirty_effects.clear(),this.#maybe_dirty_effects.clear(),this.#pending_effect&&pause_effect(this.#pending_effect,()=>{this.#pending_effect=null}),this.#offscreen_fragment&&(this.#anchor.before(this.#offscreen_fragment),this.#offscreen_fragment=null)}}update_pending_count(d2){this.#update_pending_count(d2),this.#local_pending_count+=d2,!(!this.#effect_pending|| -this.#pending_count_update_queued)&&(this.#pending_count_update_queued=!0,queue_micro_task(()=>{this.#pending_count_update_queued=!1,this.#effect_pending&&internal_set(this.#effect_pending,this.#local_pending_count)}))}get_effect_pending(){return this.#effect_pending_subscriber(),get$4(this.#effect_pending)}error(error2){var onerror=this.#props.onerror;let failed=this.#props.failed;if(this.#is_creating_fallback||!onerror&&!failed)throw error2;this.#main_effect&&(destroy_effect(this.#main_effect), -this.#main_effect=null),this.#pending_effect&&(destroy_effect(this.#pending_effect),this.#pending_effect=null),this.#failed_effect&&(destroy_effect(this.#failed_effect),this.#failed_effect=null),hydrating&&(set_hydrate_node(this.#hydrate_open),next$1(),set_hydrate_node(skip_nodes()));var did_reset=!1,calling_on_error=!1;const reset2=()=>{if(did_reset){svelte_boundary_reset_noop();return}did_reset=!0,calling_on_error&&svelte_boundary_reset_onerror(),Batch.ensure(),this.#local_pending_count=0,this.#failed_effect!== -null&&pause_effect(this.#failed_effect,()=>{this.#failed_effect=null}),this.is_pending=this.has_pending_snippet(),this.#main_effect=this.#run(()=>(this.#is_creating_fallback=!1,branch(()=>this.#children(this.#anchor)))),this.#pending_count>0?this.#show_pending_snippet():this.is_pending=!1};var previous_reaction=active_reaction;try{set_active_reaction(null),calling_on_error=!0,onerror?.(error2,reset2),calling_on_error=!1}catch(error3){invoke_error_boundary(error3,this.#effect&&this.#effect.parent)}finally{ -set_active_reaction(previous_reaction)}failed&&queue_micro_task(()=>{this.#failed_effect=this.#run(()=>{Batch.ensure(),this.#is_creating_fallback=!0;try{return branch(()=>{failed(this.#anchor,()=>error2,()=>reset2)})}catch(error3){return invoke_error_boundary(error3,this.#effect.parent),null}finally{this.#is_creating_fallback=!1}})})}}function flatten(blockers,sync,async,fn){const d2=is_runes()?derived:derived_safe_equal;var pending=blockers.filter(b=>!b.settled);if(async.length===0&&pending.length=== -0){fn(sync.map(d2));return}var batch=current_batch,parent=active_effect,restore=capture(),blocker_promise=pending.length===1?pending[0].promise:pending.length>1?Promise.all(pending.map(b=>b.promise)):null;function finish(values){restore();try{fn(values)}catch(error2){(parent.f&DESTROYED)===0&&invoke_error_boundary(error2,parent)}batch?.deactivate(),unset_context()}if(async.length===0){blocker_promise.then(()=>finish(sync.map(d2)));return}function run2(){restore(),Promise.all(async.map(expression=>async_derived( -expression))).then(result=>finish([...sync.map(d2),...result])).catch(error2=>invoke_error_boundary(error2,parent))}blocker_promise?blocker_promise.then(run2):run2()}function capture(){var previous_effect=active_effect,previous_reaction=active_reaction,previous_component_context=component_context,previous_batch2=current_batch;return function(activate_batch=!0){set_active_effect(previous_effect),set_active_reaction(previous_reaction),set_component_context(previous_component_context),activate_batch&& -previous_batch2?.activate()}}function unset_context(){set_active_effect(null),set_active_reaction(null),set_component_context(null)}function derived(fn){var flags2=DERIVED|DIRTY,parent_derived=active_reaction!==null&&(active_reaction.f&DERIVED)!==0?active_reaction:null;return active_effect!==null&&(active_effect.f|=EFFECT_PRESERVED),{ctx:component_context,deps:null,effects:null,equals,f:flags2,fn,reactions:null,rv:0,v:UNINITIALIZED,wv:0,parent:parent_derived??active_effect,ac:null}}function async_derived(fn,label,location2){ -let parent=active_effect;parent===null&&async_derived_orphan();var boundary2=parent.b,promise=void 0,signal=source$2(UNINITIALIZED),should_suspend=!active_reaction,deferreds=new Map;return async_effect(()=>{var d2=deferred();promise=d2.promise;try{Promise.resolve(fn()).then(d2.resolve,d2.reject).then(()=>{batch===current_batch&&batch.committed&&batch.deactivate(),unset_context()})}catch(error2){d2.reject(error2),unset_context()}var batch=current_batch;if(should_suspend){var blocking=boundary2.is_rendered(); -boundary2.update_pending_count(1),batch.increment(blocking),deferreds.get(batch)?.reject(STALE_REACTION),deferreds.delete(batch),deferreds.set(batch,d2)}const handler=(value,error2=void 0)=>{if(batch.activate(),error2)error2!==STALE_REACTION&&(signal.f|=ERROR_VALUE,internal_set(signal,error2));else{(signal.f&ERROR_VALUE)!==0&&(signal.f^=ERROR_VALUE),internal_set(signal,value);for(const[b,d3]of deferreds){if(deferreds.delete(b),b===batch)break;d3.reject(STALE_REACTION)}}should_suspend&&(boundary2. -update_pending_count(-1),batch.decrement(blocking))};d2.promise.then(handler,e=>handler(null,e||"unknown"))}),teardown(()=>{for(const d2 of deferreds.values())d2.reject(STALE_REACTION)}),new Promise(fulfil=>{function next2(p2){function go2(){p2===promise?fulfil(signal):next2(promise)}p2.then(go2,go2)}next2(promise)})}function user_derived(fn){const d2=derived(fn);return push_reaction_value(d2),d2}function derived_safe_equal(fn){const signal=derived(fn);return signal.equals=safe_equals,signal}function destroy_derived_effects(derived2){ -var effects=derived2.effects;if(effects!==null){derived2.effects=null;for(var i=0;i<effects.length;i+=1)destroy_effect(effects[i])}}function get_derived_parent_effect(derived2){for(var parent=derived2.parent;parent!==null;){if((parent.f&DERIVED)===0)return(parent.f&DESTROYED)===0?parent:null;parent=parent.parent}return null}function execute_derived(derived2){var value,prev_active_effect=active_effect;set_active_effect(get_derived_parent_effect(derived2));try{derived2.f&=~WAS_MARKED,destroy_derived_effects( -derived2),value=update_reaction(derived2)}finally{set_active_effect(prev_active_effect)}return value}function update_derived(derived2){var value=execute_derived(derived2);if(!derived2.equals(value)&&(derived2.wv=increment_write_version(),(!current_batch?.is_fork||derived2.deps===null)&&(derived2.v=value,derived2.deps===null))){set_signal_status(derived2,CLEAN);return}is_destroying_effect||(batch_values!==null?(effect_tracking()||current_batch?.is_fork)&&batch_values.set(derived2,value):update_derived_status( -derived2))}let eager_effects=new Set;const old_values=new Map;function set_eager_effects(v){eager_effects=v}let eager_effects_deferred=!1;function source$2(v,stack){var signal={f:0,v,reactions:null,equals,rv:0,wv:0};return signal}function state$1(v,stack){const s2=source$2(v);return push_reaction_value(s2),s2}function mutable_source(initial_value,immutable=!1,trackable=!0){const s2=source$2(initial_value);return immutable||(s2.equals=safe_equals),legacy_mode_flag&&trackable&&component_context!== -null&&component_context.l!==null&&(component_context.l.s??=[]).push(s2),s2}function set$1(source2,value,should_proxy=!1){active_reaction!==null&&(!untracking||(active_reaction.f&EAGER_EFFECT)!==0)&&is_runes()&&(active_reaction.f&(DERIVED|BLOCK_EFFECT|ASYNC|EAGER_EFFECT))!==0&&(current_sources===null||!includes.call(current_sources,source2))&&state_unsafe_mutation();let new_value=should_proxy?proxy(value):value;return internal_set(source2,new_value)}function internal_set(source2,value){if(!source2. -equals(value)){var old_value=source2.v;is_destroying_effect?old_values.set(source2,value):old_values.set(source2,old_value),source2.v=value;var batch=Batch.ensure();if(batch.capture(source2,old_value),(source2.f&DERIVED)!==0){const derived2=source2;(source2.f&DIRTY)!==0&&execute_derived(derived2),update_derived_status(derived2)}source2.wv=increment_write_version(),mark_reactions(source2,DIRTY),is_runes()&&active_effect!==null&&(active_effect.f&CLEAN)!==0&&(active_effect.f&(BRANCH_EFFECT|ROOT_EFFECT))=== -0&&(untracked_writes===null?set_untracked_writes([source2]):untracked_writes.push(source2)),!batch.is_fork&&eager_effects.size>0&&!eager_effects_deferred&&flush_eager_effects()}return value}function flush_eager_effects(){eager_effects_deferred=!1;for(const effect2 of eager_effects)(effect2.f&CLEAN)!==0&&set_signal_status(effect2,MAYBE_DIRTY),is_dirty(effect2)&&update_effect(effect2);eager_effects.clear()}function update$1(source2,d2=1){var value=get$4(source2),result=d2===1?value++:value--;return set$1( -source2,value),result}function increment$1(source2){set$1(source2,source2.v+1)}function mark_reactions(signal,status){var reactions=signal.reactions;if(reactions!==null)for(var runes=is_runes(),length=reactions.length,i=0;i<length;i++){var reaction=reactions[i],flags2=reaction.f;if(!(!runes&&reaction===active_effect)){var not_dirty=(flags2&DIRTY)===0;if(not_dirty&&set_signal_status(reaction,status),(flags2&DERIVED)!==0){var derived2=reaction;batch_values?.delete(derived2),(flags2&WAS_MARKED)===0&& -(flags2&CONNECTED&&(reaction.f|=WAS_MARKED),mark_reactions(derived2,MAYBE_DIRTY))}else not_dirty&&((flags2&BLOCK_EFFECT)!==0&&eager_block_effects!==null&&eager_block_effects.add(reaction),schedule_effect(reaction))}}}function proxy(value){if(typeof value!="object"||value===null||STATE_SYMBOL in value)return value;const prototype=get_prototype_of(value);if(prototype!==object_prototype&&prototype!==array_prototype)return value;var sources=new Map,is_proxied_array=is_array(value),version2=state$1(0), -parent_version=update_version,with_parent=fn=>{if(update_version===parent_version)return fn();var reaction=active_reaction,version3=update_version;set_active_reaction(null),set_update_version(parent_version);var result=fn();return set_active_reaction(reaction),set_update_version(version3),result};return is_proxied_array&&sources.set("length",state$1(value.length)),new Proxy(value,{defineProperty(_,prop2,descriptor){(!("value"in descriptor)||descriptor.configurable===!1||descriptor.enumerable===!1|| -descriptor.writable===!1)&&state_descriptors_fixed();var s2=sources.get(prop2);return s2===void 0?s2=with_parent(()=>{var s3=state$1(descriptor.value);return sources.set(prop2,s3),s3}):set$1(s2,descriptor.value,!0),!0},deleteProperty(target2,prop2){var s2=sources.get(prop2);if(s2===void 0){if(prop2 in target2){const s3=with_parent(()=>state$1(UNINITIALIZED));sources.set(prop2,s3),increment$1(version2)}}else set$1(s2,UNINITIALIZED),increment$1(version2);return!0},get(target2,prop2,receiver){if(prop2=== -STATE_SYMBOL)return value;var s2=sources.get(prop2),exists=prop2 in target2;if(s2===void 0&&(!exists||get_descriptor(target2,prop2)?.writable)&&(s2=with_parent(()=>{var p2=proxy(exists?target2[prop2]:UNINITIALIZED),s3=state$1(p2);return s3}),sources.set(prop2,s2)),s2!==void 0){var v=get$4(s2);return v===UNINITIALIZED?void 0:v}return Reflect.get(target2,prop2,receiver)},getOwnPropertyDescriptor(target2,prop2){var descriptor=Reflect.getOwnPropertyDescriptor(target2,prop2);if(descriptor&&"value"in descriptor){ -var s2=sources.get(prop2);s2&&(descriptor.value=get$4(s2))}else if(descriptor===void 0){var source2=sources.get(prop2),value2=source2?.v;if(source2!==void 0&&value2!==UNINITIALIZED)return{enumerable:!0,configurable:!0,value:value2,writable:!0}}return descriptor},has(target2,prop2){if(prop2===STATE_SYMBOL)return!0;var s2=sources.get(prop2),has=s2!==void 0&&s2.v!==UNINITIALIZED||Reflect.has(target2,prop2);if(s2!==void 0||active_effect!==null&&(!has||get_descriptor(target2,prop2)?.writable)){s2===void 0&& -(s2=with_parent(()=>{var p2=has?proxy(target2[prop2]):UNINITIALIZED,s3=state$1(p2);return s3}),sources.set(prop2,s2));var value2=get$4(s2);if(value2===UNINITIALIZED)return!1}return has},set(target2,prop2,value2,receiver){var s2=sources.get(prop2),has=prop2 in target2;if(is_proxied_array&&prop2==="length")for(var i=value2;i<s2.v;i+=1){var other_s=sources.get(i+"");other_s!==void 0?set$1(other_s,UNINITIALIZED):i in target2&&(other_s=with_parent(()=>state$1(UNINITIALIZED)),sources.set(i+"",other_s))} -if(s2===void 0)(!has||get_descriptor(target2,prop2)?.writable)&&(s2=with_parent(()=>state$1(void 0)),set$1(s2,proxy(value2)),sources.set(prop2,s2));else{has=s2.v!==UNINITIALIZED;var p2=with_parent(()=>proxy(value2));set$1(s2,p2)}var descriptor=Reflect.getOwnPropertyDescriptor(target2,prop2);if(descriptor?.set&&descriptor.set.call(receiver,value2),!has){if(is_proxied_array&&typeof prop2=="string"){var ls=sources.get("length"),n=Number(prop2);Number.isInteger(n)&&n>=ls.v&&set$1(ls,n+1)}increment$1( -version2)}return!0},ownKeys(target2){get$4(version2);var own_keys=Reflect.ownKeys(target2).filter(key3=>{var source3=sources.get(key3);return source3===void 0||source3.v!==UNINITIALIZED});for(var[key2,source2]of sources)source2.v!==UNINITIALIZED&&!(key2 in target2)&&own_keys.push(key2);return own_keys},setPrototypeOf(){state_prototype_fixed()}})}function get_proxied_value(value){try{if(value!==null&&typeof value=="object"&&STATE_SYMBOL in value)return value[STATE_SYMBOL]}catch{}return value}function is(a,b){ -return Object.is(get_proxied_value(a),get_proxied_value(b))}var $window,$document,is_firefox,first_child_getter,next_sibling_getter;function init_operations(){if($window===void 0){$window=window,$document=document,is_firefox=/Firefox/.test(navigator.userAgent);var element_prototype=Element.prototype,node_prototype=Node.prototype,text_prototype=Text.prototype;first_child_getter=get_descriptor(node_prototype,"firstChild").get,next_sibling_getter=get_descriptor(node_prototype,"nextSibling").get,is_extensible( -element_prototype)&&(element_prototype.__click=void 0,element_prototype.__className=void 0,element_prototype.__attributes=null,element_prototype.__style=void 0,element_prototype.__e=void 0),is_extensible(text_prototype)&&(text_prototype.__t=void 0)}}function create_text(value=""){return document.createTextNode(value)}function get_first_child(node2){return first_child_getter.call(node2)}function get_next_sibling(node2){return next_sibling_getter.call(node2)}function child(node2,is_text){if(!hydrating) -return get_first_child(node2);var child2=get_first_child(hydrate_node);if(child2===null)child2=hydrate_node.appendChild(create_text());else if(is_text&&child2.nodeType!==TEXT_NODE){var text2=create_text();return child2?.before(text2),set_hydrate_node(text2),text2}return set_hydrate_node(child2),child2}function first_child(node2,is_text=!1){if(!hydrating){var first=get_first_child(node2);return first instanceof Comment&&first.data===""?get_next_sibling(first):first}if(is_text&&hydrate_node?.nodeType!== -TEXT_NODE){var text2=create_text();return hydrate_node?.before(text2),set_hydrate_node(text2),text2}return hydrate_node}function sibling(node2,count=1,is_text=!1){let next_sibling=hydrating?hydrate_node:node2;for(var last_sibling;count--;)last_sibling=next_sibling,next_sibling=get_next_sibling(next_sibling);if(!hydrating)return next_sibling;if(is_text&&next_sibling?.nodeType!==TEXT_NODE){var text2=create_text();return next_sibling===null?last_sibling?.after(text2):next_sibling.before(text2),set_hydrate_node( -text2),text2}return set_hydrate_node(next_sibling),next_sibling}function clear_text_content(node2){node2.textContent=""}function should_defer_append(){return!1}function autofocus(dom,value){if(value){const body2=document.body;dom.autofocus=!0,queue_micro_task(()=>{document.activeElement===body2&&dom.focus()})}}function remove_textarea_child(dom){hydrating&&get_first_child(dom)!==null&&clear_text_content(dom)}let listening_to_form_reset=!1;function add_form_reset_listener(){listening_to_form_reset|| -(listening_to_form_reset=!0,document.addEventListener("reset",evt=>{Promise.resolve().then(()=>{if(!evt.defaultPrevented)for(const e of evt.target.elements)e.__on_r?.()})},{capture:!0}))}function listen(target2,events,handler,call_handler_immediately=!0){call_handler_immediately&&handler();for(var name of events)target2.addEventListener(name,handler);teardown(()=>{for(var name2 of events)target2.removeEventListener(name2,handler)})}function without_reactive_context(fn){var previous_reaction=active_reaction, -previous_effect=active_effect;set_active_reaction(null),set_active_effect(null);try{return fn()}finally{set_active_reaction(previous_reaction),set_active_effect(previous_effect)}}function listen_to_event_and_reset_event(element2,event2,handler,on_reset=handler){element2.addEventListener(event2,()=>without_reactive_context(handler));const prev2=element2.__on_r;prev2?element2.__on_r=()=>{prev2(),on_reset(!0)}:element2.__on_r=()=>on_reset(!0),add_form_reset_listener()}function validate_effect(rune){ -active_effect===null&&(active_reaction===null&&effect_orphan(),effect_in_unowned_derived()),is_destroying_effect&&effect_in_teardown()}function push_effect(effect2,parent_effect){var parent_last=parent_effect.last;parent_last===null?parent_effect.last=parent_effect.first=effect2:(parent_last.next=effect2,effect2.prev=parent_last,parent_effect.last=effect2)}function create_effect(type2,fn,sync){var parent=active_effect;parent!==null&&(parent.f&INERT)!==0&&(type2|=INERT);var effect2={ctx:component_context, -deps:null,nodes:null,f:type2|DIRTY|CONNECTED,first:null,fn,last:null,next:null,parent,b:parent&&parent.b,prev:null,teardown:null,wv:0,ac:null};if(sync)try{update_effect(effect2),effect2.f|=EFFECT_RAN}catch(e2){throw destroy_effect(effect2),e2}else fn!==null&&schedule_effect(effect2);var e=effect2;if(sync&&e.deps===null&&e.teardown===null&&e.nodes===null&&e.first===e.last&&(e.f&EFFECT_PRESERVED)===0&&(e=e.first,(type2&BLOCK_EFFECT)!==0&&(type2&EFFECT_TRANSPARENT)!==0&&e!==null&&(e.f|=EFFECT_TRANSPARENT)), -e!==null&&(e.parent=parent,parent!==null&&push_effect(e,parent),active_reaction!==null&&(active_reaction.f&DERIVED)!==0&&(type2&ROOT_EFFECT)===0)){var derived2=active_reaction;(derived2.effects??=[]).push(e)}return effect2}function effect_tracking(){return active_reaction!==null&&!untracking}function teardown(fn){const effect2=create_effect(RENDER_EFFECT,null,!1);return set_signal_status(effect2,CLEAN),effect2.teardown=fn,effect2}function user_effect(fn){validate_effect();var flags2=active_effect. -f,defer=!active_reaction&&(flags2&BRANCH_EFFECT)!==0&&(flags2&EFFECT_RAN)===0;if(defer){var context=component_context;(context.e??=[]).push(fn)}else return create_user_effect(fn)}function create_user_effect(fn){return create_effect(EFFECT|USER_EFFECT,fn,!1)}function user_pre_effect(fn){return validate_effect(),create_effect(RENDER_EFFECT|USER_EFFECT,fn,!0)}function effect_root(fn){Batch.ensure();const effect2=create_effect(ROOT_EFFECT|EFFECT_PRESERVED,fn,!0);return()=>{destroy_effect(effect2)}}function component_root(fn){ -Batch.ensure();const effect2=create_effect(ROOT_EFFECT|EFFECT_PRESERVED,fn,!0);return(options={})=>new Promise(fulfil=>{options.outro?pause_effect(effect2,()=>{destroy_effect(effect2),fulfil(void 0)}):(destroy_effect(effect2),fulfil(void 0))})}function effect(fn){return create_effect(EFFECT,fn,!1)}function async_effect(fn){return create_effect(ASYNC|EFFECT_PRESERVED,fn,!0)}function render_effect(fn,flags2=0){return create_effect(RENDER_EFFECT|flags2,fn,!0)}function template_effect(fn,sync=[],async=[],blockers=[]){ -flatten(blockers,sync,async,values=>{create_effect(RENDER_EFFECT,()=>fn(...values.map(get$4)),!0)})}function deferred_template_effect(fn,sync=[],async=[],blockers=[]){var batch=current_batch,is_async=async.length>0||blockers.length>0;is_async&&batch.increment(!0),flatten(blockers,sync,async,values=>{create_effect(EFFECT,()=>fn(...values.map(get$4)),!1),is_async&&batch.decrement(!0)})}function block(fn,flags2=0){var effect2=create_effect(BLOCK_EFFECT|flags2,fn,!0);return effect2}function managed(fn,flags2=0){ -var effect2=create_effect(MANAGED_EFFECT|flags2,fn,!0);return effect2}function branch(fn){return create_effect(BRANCH_EFFECT|EFFECT_PRESERVED,fn,!0)}function execute_effect_teardown(effect2){var teardown2=effect2.teardown;if(teardown2!==null){const previously_destroying_effect=is_destroying_effect,previous_reaction=active_reaction;set_is_destroying_effect(!0),set_active_reaction(null);try{teardown2.call(null)}finally{set_is_destroying_effect(previously_destroying_effect),set_active_reaction(previous_reaction)}}} -function destroy_effect_children(signal,remove_dom=!1){var effect2=signal.first;for(signal.first=signal.last=null;effect2!==null;){const controller=effect2.ac;controller!==null&&without_reactive_context(()=>{controller.abort(STALE_REACTION)});var next2=effect2.next;(effect2.f&ROOT_EFFECT)!==0?effect2.parent=null:destroy_effect(effect2,remove_dom),effect2=next2}}function destroy_block_effect_children(signal){for(var effect2=signal.first;effect2!==null;){var next2=effect2.next;(effect2.f&BRANCH_EFFECT)=== -0&&destroy_effect(effect2),effect2=next2}}function destroy_effect(effect2,remove_dom=!0){var removed=!1;(remove_dom||(effect2.f&HEAD_EFFECT)!==0)&&effect2.nodes!==null&&effect2.nodes.end!==null&&(remove_effect_dom(effect2.nodes.start,effect2.nodes.end),removed=!0),destroy_effect_children(effect2,remove_dom&&!removed),remove_reactions(effect2,0),set_signal_status(effect2,DESTROYED);var transitions=effect2.nodes&&effect2.nodes.t;if(transitions!==null)for(const transition2 of transitions)transition2. -stop();execute_effect_teardown(effect2);var parent=effect2.parent;parent!==null&&parent.first!==null&&unlink_effect(effect2),effect2.next=effect2.prev=effect2.teardown=effect2.ctx=effect2.deps=effect2.fn=effect2.nodes=effect2.ac=null}function remove_effect_dom(node2,end){for(;node2!==null;){var next2=node2===end?null:get_next_sibling(node2);node2.remove(),node2=next2}}function unlink_effect(effect2){var parent=effect2.parent,prev2=effect2.prev,next2=effect2.next;prev2!==null&&(prev2.next=next2), -next2!==null&&(next2.prev=prev2),parent!==null&&(parent.first===effect2&&(parent.first=next2),parent.last===effect2&&(parent.last=prev2))}function pause_effect(effect2,callback,destroy=!0){var transitions=[];pause_children(effect2,transitions,!0);var fn=()=>{destroy&&destroy_effect(effect2),callback&&callback()},remaining=transitions.length;if(remaining>0){var check=()=>--remaining||fn();for(var transition2 of transitions)transition2.out(check)}else fn()}function pause_children(effect2,transitions,local){ -if((effect2.f&INERT)===0){effect2.f^=INERT;var t=effect2.nodes&&effect2.nodes.t;if(t!==null)for(const transition2 of t)(transition2.is_global||local)&&transitions.push(transition2);for(var child2=effect2.first;child2!==null;){var sibling2=child2.next,transparent=(child2.f&EFFECT_TRANSPARENT)!==0||(child2.f&BRANCH_EFFECT)!==0&&(effect2.f&BLOCK_EFFECT)!==0;pause_children(child2,transitions,transparent?local:!1),child2=sibling2}}}function resume_effect(effect2){resume_children(effect2,!0)}function resume_children(effect2,local){ -if((effect2.f&INERT)!==0){effect2.f^=INERT,(effect2.f&CLEAN)===0&&(set_signal_status(effect2,DIRTY),schedule_effect(effect2));for(var child2=effect2.first;child2!==null;){var sibling2=child2.next,transparent=(child2.f&EFFECT_TRANSPARENT)!==0||(child2.f&BRANCH_EFFECT)!==0;resume_children(child2,transparent?local:!1),child2=sibling2}var t=effect2.nodes&&effect2.nodes.t;if(t!==null)for(const transition2 of t)(transition2.is_global||local)&&transition2.in()}}function move_effect(effect2,fragment){if(effect2. -nodes)for(var node2=effect2.nodes.start,end=effect2.nodes.end;node2!==null;){var next2=node2===end?null:get_next_sibling(node2);fragment.append(node2),node2=next2}}let is_updating_effect=!1,is_destroying_effect=!1;function set_is_destroying_effect(value){is_destroying_effect=value}let active_reaction=null,untracking=!1;function set_active_reaction(reaction){active_reaction=reaction}let active_effect=null;function set_active_effect(effect2){active_effect=effect2}let current_sources=null;function push_reaction_value(value){ -active_reaction!==null&&(current_sources===null?current_sources=[value]:current_sources.push(value))}let new_deps=null,skipped_deps=0,untracked_writes=null;function set_untracked_writes(value){untracked_writes=value}let write_version=1,read_version=0,update_version=read_version;function set_update_version(value){update_version=value}function increment_write_version(){return++write_version}function is_dirty(reaction){var flags2=reaction.f;if((flags2&DIRTY)!==0)return!0;if(flags2&DERIVED&&(reaction. -f&=~WAS_MARKED),(flags2&MAYBE_DIRTY)!==0){for(var dependencies2=reaction.deps,length=dependencies2.length,i=0;i<length;i++){var dependency=dependencies2[i];if(is_dirty(dependency)&&update_derived(dependency),dependency.wv>reaction.wv)return!0}(flags2&CONNECTED)!==0&&batch_values===null&&set_signal_status(reaction,CLEAN)}return!1}function schedule_possible_effect_self_invalidation(signal,effect2,root2=!0){var reactions=signal.reactions;if(reactions!==null&&!(current_sources!==null&&includes.call( -current_sources,signal)))for(var i=0;i<reactions.length;i++){var reaction=reactions[i];(reaction.f&DERIVED)!==0?schedule_possible_effect_self_invalidation(reaction,effect2,!1):effect2===reaction&&(root2?set_signal_status(reaction,DIRTY):(reaction.f&CLEAN)!==0&&set_signal_status(reaction,MAYBE_DIRTY),schedule_effect(reaction))}}function update_reaction(reaction){var previous_deps=new_deps,previous_skipped_deps=skipped_deps,previous_untracked_writes=untracked_writes,previous_reaction=active_reaction, -previous_sources=current_sources,previous_component_context=component_context,previous_untracking=untracking,previous_update_version=update_version,flags2=reaction.f;new_deps=null,skipped_deps=0,untracked_writes=null,active_reaction=(flags2&(BRANCH_EFFECT|ROOT_EFFECT))===0?reaction:null,current_sources=null,set_component_context(reaction.ctx),untracking=!1,update_version=++read_version,reaction.ac!==null&&(without_reactive_context(()=>{reaction.ac.abort(STALE_REACTION)}),reaction.ac=null);try{reaction. -f|=REACTION_IS_UPDATING;var fn=reaction.fn,result=fn(),deps=reaction.deps;if(new_deps!==null){var i;if(remove_reactions(reaction,skipped_deps),deps!==null&&skipped_deps>0)for(deps.length=skipped_deps+new_deps.length,i=0;i<new_deps.length;i++)deps[skipped_deps+i]=new_deps[i];else reaction.deps=deps=new_deps;if(effect_tracking()&&(reaction.f&CONNECTED)!==0)for(i=skipped_deps;i<deps.length;i++)(deps[i].reactions??=[]).push(reaction)}else deps!==null&&skipped_deps<deps.length&&(remove_reactions(reaction, -skipped_deps),deps.length=skipped_deps);if(is_runes()&&untracked_writes!==null&&!untracking&&deps!==null&&(reaction.f&(DERIVED|MAYBE_DIRTY|DIRTY))===0)for(i=0;i<untracked_writes.length;i++)schedule_possible_effect_self_invalidation(untracked_writes[i],reaction);if(previous_reaction!==null&&previous_reaction!==reaction){if(read_version++,previous_reaction.deps!==null)for(let i2=0;i2<previous_skipped_deps;i2+=1)previous_reaction.deps[i2].rv=read_version;if(previous_deps!==null)for(const dep of previous_deps) -dep.rv=read_version;untracked_writes!==null&&(previous_untracked_writes===null?previous_untracked_writes=untracked_writes:previous_untracked_writes.push(...untracked_writes))}return(reaction.f&ERROR_VALUE)!==0&&(reaction.f^=ERROR_VALUE),result}catch(error2){return handle_error$1(error2)}finally{reaction.f^=REACTION_IS_UPDATING,new_deps=previous_deps,skipped_deps=previous_skipped_deps,untracked_writes=previous_untracked_writes,active_reaction=previous_reaction,current_sources=previous_sources,set_component_context( -previous_component_context),untracking=previous_untracking,update_version=previous_update_version}}function remove_reaction(signal,dependency){let reactions=dependency.reactions;if(reactions!==null){var index2=index_of.call(reactions,signal);if(index2!==-1){var new_length=reactions.length-1;new_length===0?reactions=dependency.reactions=null:(reactions[index2]=reactions[new_length],reactions.pop())}}if(reactions===null&&(dependency.f&DERIVED)!==0&&(new_deps===null||!includes.call(new_deps,dependency))){ -var derived2=dependency;(derived2.f&CONNECTED)!==0&&(derived2.f^=CONNECTED,derived2.f&=~WAS_MARKED),update_derived_status(derived2),destroy_derived_effects(derived2),remove_reactions(derived2,0)}}function remove_reactions(signal,start_index){var dependencies2=signal.deps;if(dependencies2!==null)for(var i=start_index;i<dependencies2.length;i++)remove_reaction(signal,dependencies2[i])}function update_effect(effect2){var flags2=effect2.f;if((flags2&DESTROYED)===0){set_signal_status(effect2,CLEAN);var previous_effect=active_effect, -was_updating_effect=is_updating_effect;active_effect=effect2,is_updating_effect=!0;try{(flags2&(BLOCK_EFFECT|MANAGED_EFFECT))!==0?destroy_block_effect_children(effect2):destroy_effect_children(effect2),execute_effect_teardown(effect2);var teardown2=update_reaction(effect2);effect2.teardown=typeof teardown2=="function"?teardown2:null,effect2.wv=write_version;var dep}finally{is_updating_effect=was_updating_effect,active_effect=previous_effect}}}async function tick(){await Promise.resolve(),flushSync()} -function settled(){return Batch.ensure().settled()}function get$4(signal){var flags2=signal.f,is_derived=(flags2&DERIVED)!==0;if(active_reaction!==null&&!untracking){var destroyed=active_effect!==null&&(active_effect.f&DESTROYED)!==0;if(!destroyed&&(current_sources===null||!includes.call(current_sources,signal))){var deps=active_reaction.deps;if((active_reaction.f&REACTION_IS_UPDATING)!==0)signal.rv<read_version&&(signal.rv=read_version,new_deps===null&&deps!==null&&deps[skipped_deps]===signal?skipped_deps++: -new_deps===null?new_deps=[signal]:new_deps.push(signal));else{(active_reaction.deps??=[]).push(signal);var reactions=signal.reactions;reactions===null?signal.reactions=[active_reaction]:includes.call(reactions,active_reaction)||reactions.push(active_reaction)}}}if(is_destroying_effect&&old_values.has(signal))return old_values.get(signal);if(is_derived){var derived2=signal;if(is_destroying_effect){var value=derived2.v;return((derived2.f&CLEAN)===0&&derived2.reactions!==null||depends_on_old_values( -derived2))&&(value=execute_derived(derived2)),old_values.set(derived2,value),value}var should_connect=(derived2.f&CONNECTED)===0&&!untracking&&active_reaction!==null&&(is_updating_effect||(active_reaction.f&CONNECTED)!==0),is_new=derived2.deps===null;is_dirty(derived2)&&(should_connect&&(derived2.f|=CONNECTED),update_derived(derived2)),should_connect&&!is_new&&reconnect(derived2)}if(batch_values?.has(signal))return batch_values.get(signal);if((signal.f&ERROR_VALUE)!==0)throw signal.v;return signal. -v}function reconnect(derived2){if(derived2.deps!==null){derived2.f|=CONNECTED;for(const dep of derived2.deps)(dep.reactions??=[]).push(derived2),(dep.f&DERIVED)!==0&&(dep.f&CONNECTED)===0&&reconnect(dep)}}function depends_on_old_values(derived2){if(derived2.v===UNINITIALIZED)return!0;if(derived2.deps===null)return!1;for(const dep of derived2.deps)if(old_values.has(dep)||(dep.f&DERIVED)!==0&&depends_on_old_values(dep))return!0;return!1}function untrack$1(fn){var previous_untracking=untracking;try{ -return untracking=!0,fn()}finally{untracking=previous_untracking}}function deep_read_state(value){if(!(typeof value!="object"||!value||value instanceof EventTarget)){if(STATE_SYMBOL in value)deep_read(value);else if(!Array.isArray(value))for(let key2 in value){const prop2=value[key2];typeof prop2=="object"&&prop2&&STATE_SYMBOL in prop2&&deep_read(prop2)}}}function deep_read(value,visited=new Set){if(typeof value=="object"&&value!==null&&!(value instanceof EventTarget)&&!visited.has(value)){visited. -add(value),value instanceof Date&&value.getTime();for(let key2 in value)try{deep_read(value[key2],visited)}catch{}const proto=get_prototype_of(value);if(proto!==Object.prototype&&proto!==Array.prototype&&proto!==Map.prototype&&proto!==Set.prototype&&proto!==Date.prototype){const descriptors=get_descriptors(proto);for(let key2 in descriptors){const get2=descriptors[key2].get;if(get2)try{get2.call(value)}catch{}}}}}function createAttachmentKey(){return Symbol(ATTACHMENT_KEY)}function is_capture_event(name){ -return name.endsWith("capture")&&name!=="gotpointercapture"&&name!=="lostpointercapture"}const DELEGATED_EVENTS=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function can_delegate_event(event_name){return DELEGATED_EVENTS.includes(event_name)}const ATTRIBUTE_ALIASES={formnovalidate:"\ -formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function normalize_attribute(name){return name=name.toLowerCase(),ATTRIBUTE_ALIASES[name]??name}const PASSIVE_EVENTS=["touchstart","touchmove"];function is_passive_event(name){ -return PASSIVE_EVENTS.includes(name)}const RAW_TEXT_ELEMENTS=["textarea","script","style","title"];function is_raw_text_element(name){return RAW_TEXT_ELEMENTS.includes(name)}const all_registered_events=new Set,root_event_handles=new Set;function replay_events(dom){if(!hydrating)return;dom.removeAttribute("onload"),dom.removeAttribute("onerror");const event2=dom.__e;event2!==void 0&&(dom.__e=void 0,queueMicrotask(()=>{dom.isConnected&&dom.dispatchEvent(event2)}))}function create_event(event_name,dom,handler,options={}){ -function target_handler(event2){if(options.capture||handle_event_propagation.call(dom,event2),!event2.cancelBubble)return without_reactive_context(()=>handler?.call(this,event2))}return event_name.startsWith("pointer")||event_name.startsWith("touch")||event_name==="wheel"?queue_micro_task(()=>{dom.addEventListener(event_name,target_handler,options)}):dom.addEventListener(event_name,target_handler,options),target_handler}function on(element2,type2,handler,options={}){var target_handler=create_event( -type2,element2,handler,options);return()=>{element2.removeEventListener(type2,target_handler,options)}}function event(event_name,dom,handler,capture2,passive){var options={capture:capture2,passive},target_handler=create_event(event_name,dom,handler,options);(dom===document.body||dom===window||dom===document||dom instanceof HTMLMediaElement)&&teardown(()=>{dom.removeEventListener(event_name,target_handler,options)})}function delegate(events){for(var i=0;i<events.length;i++)all_registered_events.add( -events[i]);for(var fn of root_event_handles)fn(events)}let last_propagated_event=null;function handle_event_propagation(event2){var handler_element=this,owner_document=handler_element.ownerDocument,event_name=event2.type,path2=event2.composedPath?.()||[],current_target=path2[0]||event2.target;last_propagated_event=event2;var path_idx=0,handled_at=last_propagated_event===event2&&event2.__root;if(handled_at){var at_idx=path2.indexOf(handled_at);if(at_idx!==-1&&(handler_element===document||handler_element=== -window)){event2.__root=handler_element;return}var handler_idx=path2.indexOf(handler_element);if(handler_idx===-1)return;at_idx<=handler_idx&&(path_idx=at_idx)}if(current_target=path2[path_idx]||event2.target,current_target!==handler_element){define_property(event2,"currentTarget",{configurable:!0,get(){return current_target||owner_document}});var previous_reaction=active_reaction,previous_effect=active_effect;set_active_reaction(null),set_active_effect(null);try{for(var throw_error,other_errors=[];current_target!== -null;){var parent_element2=current_target.assignedSlot||current_target.parentNode||current_target.host||null;try{var delegated=current_target["__"+event_name];delegated!=null&&(!current_target.disabled||event2.target===current_target)&&delegated.call(current_target,event2)}catch(error2){throw_error?other_errors.push(error2):throw_error=error2}if(event2.cancelBubble||parent_element2===handler_element||parent_element2===null)break;current_target=parent_element2}if(throw_error){for(let error2 of other_errors) -queueMicrotask(()=>{throw error2});throw throw_error}}finally{event2.__root=handler_element,delete event2.currentTarget,set_active_reaction(previous_reaction),set_active_effect(previous_effect)}}}function create_fragment_from_html(html2){var elem=document.createElement("template");return elem.innerHTML=html2.replaceAll("<!>","<!---->"),elem.content}function assign_nodes(start2,end){var effect2=active_effect;effect2.nodes===null&&(effect2.nodes={start:start2,end,a:null,t:null})}function from_html(content2,flags2){ -var is_fragment=(flags2&TEMPLATE_FRAGMENT)!==0,use_import_node=(flags2&TEMPLATE_USE_IMPORT_NODE)!==0,node2,has_start=!content2.startsWith("<!>");return()=>{if(hydrating)return assign_nodes(hydrate_node,null),hydrate_node;node2===void 0&&(node2=create_fragment_from_html(has_start?content2:"<!>"+content2),is_fragment||(node2=get_first_child(node2)));var clone2=use_import_node||is_firefox?document.importNode(node2,!0):node2.cloneNode(!0);if(is_fragment){var start2=get_first_child(clone2),end=clone2. -lastChild;assign_nodes(start2,end)}else assign_nodes(clone2,clone2);return clone2}}function from_namespace(content2,flags2,ns="svg"){var has_start=!content2.startsWith("<!>"),wrapped=`<${ns}>${has_start?content2:"<!>"+content2}</${ns}>`,node2;return()=>{if(hydrating)return assign_nodes(hydrate_node,null),hydrate_node;if(!node2){var fragment=create_fragment_from_html(wrapped),root2=get_first_child(fragment);node2=get_first_child(root2)}var clone2=node2.cloneNode(!0);return assign_nodes(clone2,clone2), -clone2}}function from_svg(content2,flags2){return from_namespace(content2,flags2,"svg")}function text$8(value=""){if(!hydrating){var t=create_text(value+"");return assign_nodes(t,t),t}var node2=hydrate_node;return node2.nodeType!==TEXT_NODE&&(node2.before(node2=create_text()),set_hydrate_node(node2)),assign_nodes(node2,node2),node2}function comment$2(){if(hydrating)return assign_nodes(hydrate_node,null),hydrate_node;var frag=document.createDocumentFragment(),start2=document.createComment(""),anchor=create_text(); -return frag.append(start2,anchor),assign_nodes(start2,anchor),frag}function append(anchor,dom){if(hydrating){var effect2=active_effect;((effect2.f&EFFECT_RAN)===0||effect2.nodes.end===null)&&(effect2.nodes.end=hydrate_node),hydrate_next();return}anchor!==null&&anchor.before(dom)}function props_id(){if(hydrating&&hydrate_node&&hydrate_node.nodeType===COMMENT_NODE&&hydrate_node.textContent?.startsWith("$")){const id2=hydrate_node.textContent.substring(1);return hydrate_next(),id2}return(window.__svelte??= -{}).uid??=1,`c${window.__svelte.uid++}`}let should_intro=!0;function set_should_intro(value){should_intro=value}function set_text(text2,value){var str=value==null?"":typeof value=="object"?value+"":value;str!==(text2.__t??=text2.nodeValue)&&(text2.__t=str,text2.nodeValue=str+"")}function mount(component2,options){return _mount(component2,options)}function hydrate(component2,options){init_operations(),options.intro=options.intro??!1;const target2=options.target,was_hydrating=hydrating,previous_hydrate_node=hydrate_node; -try{for(var anchor=get_first_child(target2);anchor&&(anchor.nodeType!==COMMENT_NODE||anchor.data!==HYDRATION_START);)anchor=get_next_sibling(anchor);if(!anchor)throw HYDRATION_ERROR;set_hydrating(!0),set_hydrate_node(anchor);const instance=_mount(component2,{...options,anchor});return set_hydrating(!1),instance}catch(error2){if(error2 instanceof Error&&error2.message.split(` -`).some(line=>line.startsWith("https://svelte.dev/e/")))throw error2;return error2!==HYDRATION_ERROR&&console.warn("Failed to hydrate: ",error2),options.recover===!1&&hydration_failed(),init_operations(),clear_text_content(target2),set_hydrating(!1),mount(component2,options)}finally{set_hydrating(was_hydrating),set_hydrate_node(previous_hydrate_node)}}const document_listeners=new Map;function _mount(Component,{target:target2,anchor,props={},events,context,intro=!0}){init_operations();var registered_events=new Set, -event_handle=events2=>{for(var i=0;i<events2.length;i++){var event_name=events2[i];if(!registered_events.has(event_name)){registered_events.add(event_name);var passive=is_passive_event(event_name);target2.addEventListener(event_name,handle_event_propagation,{passive});var n=document_listeners.get(event_name);n===void 0?(document.addEventListener(event_name,handle_event_propagation,{passive}),document_listeners.set(event_name,1)):document_listeners.set(event_name,n+1)}}};event_handle(array_from(all_registered_events)), -root_event_handles.add(event_handle);var component2=void 0,unmount2=component_root(()=>{var anchor_node=anchor??target2.appendChild(create_text());return boundary(anchor_node,{pending:()=>{}},anchor_node2=>{if(context){push$1({});var ctx=component_context;ctx.c=context}if(events&&(props.$$events=events),hydrating&&assign_nodes(anchor_node2,null),should_intro=intro,component2=Component(anchor_node2,props)||{},should_intro=!0,hydrating&&(active_effect.nodes.end=hydrate_node,hydrate_node===null||hydrate_node. -nodeType!==COMMENT_NODE||hydrate_node.data!==HYDRATION_END))throw hydration_mismatch(),HYDRATION_ERROR;context&&pop()}),()=>{for(var event_name of registered_events){target2.removeEventListener(event_name,handle_event_propagation);var n=document_listeners.get(event_name);--n===0?(document.removeEventListener(event_name,handle_event_propagation),document_listeners.delete(event_name)):document_listeners.set(event_name,n)}root_event_handles.delete(event_handle),anchor_node!==anchor&&anchor_node.parentNode?. -removeChild(anchor_node)}});return mounted_components.set(component2,unmount2),component2}let mounted_components=new WeakMap;function unmount(component2,options){const fn=mounted_components.get(component2);return fn?(mounted_components.delete(component2),fn(options)):Promise.resolve()}class BranchManager{anchor;#batches=new Map;#onscreen=new Map;#offscreen=new Map;#outroing=new Set;#transition=!0;constructor(anchor,transition2=!0){this.anchor=anchor,this.#transition=transition2}#commit=()=>{var batch=current_batch; -if(this.#batches.has(batch)){var key2=this.#batches.get(batch),onscreen=this.#onscreen.get(key2);if(onscreen)resume_effect(onscreen),this.#outroing.delete(key2);else{var offscreen=this.#offscreen.get(key2);offscreen&&(this.#onscreen.set(key2,offscreen.effect),this.#offscreen.delete(key2),offscreen.fragment.lastChild.remove(),this.anchor.before(offscreen.fragment),onscreen=offscreen.effect)}for(const[b,k]of this.#batches){if(this.#batches.delete(b),b===batch)break;const offscreen2=this.#offscreen. -get(k);offscreen2&&(destroy_effect(offscreen2.effect),this.#offscreen.delete(k))}for(const[k,effect2]of this.#onscreen){if(k===key2||this.#outroing.has(k))continue;const on_destroy=()=>{if(Array.from(this.#batches.values()).includes(k)){var fragment=document.createDocumentFragment();move_effect(effect2,fragment),fragment.append(create_text()),this.#offscreen.set(k,{effect:effect2,fragment})}else destroy_effect(effect2);this.#outroing.delete(k),this.#onscreen.delete(k)};this.#transition||!onscreen? -(this.#outroing.add(k),pause_effect(effect2,on_destroy,!1)):on_destroy()}}};#discard=batch=>{this.#batches.delete(batch);const keys2=Array.from(this.#batches.values());for(const[k,branch2]of this.#offscreen)keys2.includes(k)||(destroy_effect(branch2.effect),this.#offscreen.delete(k))};ensure(key2,fn){var batch=current_batch,defer=should_defer_append();if(fn&&!this.#onscreen.has(key2)&&!this.#offscreen.has(key2))if(defer){var fragment=document.createDocumentFragment(),target2=create_text();fragment. -append(target2),this.#offscreen.set(key2,{effect:branch(()=>fn(target2)),fragment})}else this.#onscreen.set(key2,branch(()=>fn(this.anchor)));if(this.#batches.set(batch,key2),defer){for(const[k,effect2]of this.#onscreen)k===key2?batch.skipped_effects.delete(effect2):batch.skipped_effects.add(effect2);for(const[k,branch2]of this.#offscreen)k===key2?batch.skipped_effects.delete(branch2.effect):batch.skipped_effects.add(branch2.effect);batch.oncommit(this.#commit),batch.ondiscard(this.#discard)}else -hydrating&&(this.anchor=hydrate_node),this.#commit()}}function if_block(node2,fn,elseif=!1){hydrating&&hydrate_next();var branches=new BranchManager(node2),flags2=elseif?EFFECT_TRANSPARENT:0;function update_branch(condition,fn2){if(hydrating){const is_else=read_hydration_instruction(node2)===HYDRATION_START_ELSE;if(condition===is_else){var anchor=skip_nodes();set_hydrate_node(anchor),branches.anchor=anchor,set_hydrating(!1),branches.ensure(condition,fn2),set_hydrating(!0);return}}branches.ensure( -condition,fn2)}block(()=>{var has_branch=!1;fn((fn2,flag=!0)=>{has_branch=!0,update_branch(flag,fn2)}),has_branch||update_branch(!1,null)},flags2)}function key$1(node2,get_key,render_fn){hydrating&&hydrate_next();var branches=new BranchManager(node2),legacy=!is_runes();block(()=>{var key2=get_key();legacy&&key2!==null&&typeof key2=="object"&&(key2={}),branches.ensure(key2,render_fn)})}function index$2(_,i){return i}function pause_effects(state2,to_destroy,controlled_anchor){for(var transitions=[], -length=to_destroy.length,group,remaining=to_destroy.length,i=0;i<length;i++){let effect2=to_destroy[i];pause_effect(effect2,()=>{if(group){if(group.pending.delete(effect2),group.done.add(effect2),group.pending.size===0){var groups=state2.outrogroups;destroy_effects(array_from(group.done)),groups.delete(group),groups.size===0&&(state2.outrogroups=null)}}else remaining-=1},!1)}if(remaining===0){var fast_path=transitions.length===0&&controlled_anchor!==null;if(fast_path){var anchor=controlled_anchor, -parent_node=anchor.parentNode;clear_text_content(parent_node),parent_node.append(anchor),state2.items.clear()}destroy_effects(to_destroy,!fast_path)}else group={pending:new Set(to_destroy),done:new Set},(state2.outrogroups??=new Set).add(group)}function destroy_effects(to_destroy,remove_dom=!0){for(var i=0;i<to_destroy.length;i++)destroy_effect(to_destroy[i],remove_dom)}var offscreen_anchor;function each(node2,flags2,get_collection,get_key,render_fn,fallback_fn=null){var anchor=node2,items2=new Map, -is_controlled=(flags2&EACH_IS_CONTROLLED)!==0;if(is_controlled){var parent_node=node2;anchor=hydrating?set_hydrate_node(get_first_child(parent_node)):parent_node.appendChild(create_text())}hydrating&&hydrate_next();var fallback2=null,each_array=derived_safe_equal(()=>{var collection=get_collection();return is_array(collection)?collection:collection==null?[]:array_from(collection)}),array2,first_run=!0;function commit(){state2.fallback=fallback2,reconcile(state2,array2,anchor,flags2,get_key),fallback2!== -null&&(array2.length===0?(fallback2.f&EFFECT_OFFSCREEN)===0?resume_effect(fallback2):(fallback2.f^=EFFECT_OFFSCREEN,move(fallback2,null,anchor)):pause_effect(fallback2,()=>{fallback2=null}))}var effect2=block(()=>{array2=get$4(each_array);var length=array2.length;let mismatch=!1;if(hydrating){var is_else=read_hydration_instruction(anchor)===HYDRATION_START_ELSE;is_else!==(length===0)&&(anchor=skip_nodes(),set_hydrate_node(anchor),set_hydrating(!1),mismatch=!0)}for(var keys2=new Set,batch=current_batch, -defer=should_defer_append(),index2=0;index2<length;index2+=1){hydrating&&hydrate_node.nodeType===COMMENT_NODE&&hydrate_node.data===HYDRATION_END&&(anchor=hydrate_node,mismatch=!0,set_hydrating(!1));var value=array2[index2],key2=get_key(value,index2),item=first_run?null:items2.get(key2);item?(item.v&&internal_set(item.v,value),item.i&&internal_set(item.i,index2),defer&&batch.skipped_effects.delete(item.e)):(item=create_item(items2,first_run?anchor:offscreen_anchor??=create_text(),value,key2,index2, -render_fn,flags2,get_collection),first_run||(item.e.f|=EFFECT_OFFSCREEN),items2.set(key2,item)),keys2.add(key2)}if(length===0&&fallback_fn&&!fallback2&&(first_run?fallback2=branch(()=>fallback_fn(anchor)):(fallback2=branch(()=>fallback_fn(offscreen_anchor??=create_text())),fallback2.f|=EFFECT_OFFSCREEN)),hydrating&&length>0&&set_hydrate_node(skip_nodes()),!first_run)if(defer){for(const[key3,item2]of items2)keys2.has(key3)||batch.skipped_effects.add(item2.e);batch.oncommit(commit),batch.ondiscard( -()=>{})}else commit();mismatch&&set_hydrating(!0),get$4(each_array)}),state2={effect:effect2,items:items2,outrogroups:null,fallback:fallback2};first_run=!1,hydrating&&(anchor=hydrate_node)}function reconcile(state2,array2,anchor,flags2,get_key){var is_animated=(flags2&EACH_IS_ANIMATED)!==0,length=array2.length,items2=state2.items,current2=state2.effect.first,seen2,prev2=null,to_animate,matched=[],stashed=[],value,key2,effect2,i;if(is_animated)for(i=0;i<length;i+=1)value=array2[i],key2=get_key(value, -i),effect2=items2.get(key2).e,(effect2.f&EFFECT_OFFSCREEN)===0&&(effect2.nodes?.a?.measure(),(to_animate??=new Set).add(effect2));for(i=0;i<length;i+=1){if(value=array2[i],key2=get_key(value,i),effect2=items2.get(key2).e,state2.outrogroups!==null)for(const group of state2.outrogroups)group.pending.delete(effect2),group.done.delete(effect2);if((effect2.f&EFFECT_OFFSCREEN)!==0)if(effect2.f^=EFFECT_OFFSCREEN,effect2===current2)move(effect2,null,anchor);else{var next2=prev2?prev2.next:current2;effect2=== -state2.effect.last&&(state2.effect.last=effect2.prev),effect2.prev&&(effect2.prev.next=effect2.next),effect2.next&&(effect2.next.prev=effect2.prev),link$2(state2,prev2,effect2),link$2(state2,effect2,next2),move(effect2,next2,anchor),prev2=effect2,matched=[],stashed=[],current2=prev2.next;continue}if((effect2.f&INERT)!==0&&(resume_effect(effect2),is_animated&&(effect2.nodes?.a?.unfix(),(to_animate??=new Set).delete(effect2))),effect2!==current2){if(seen2!==void 0&&seen2.has(effect2)){if(matched.length< -stashed.length){var start2=stashed[0],j;prev2=start2.prev;var a=matched[0],b=matched[matched.length-1];for(j=0;j<matched.length;j+=1)move(matched[j],start2,anchor);for(j=0;j<stashed.length;j+=1)seen2.delete(stashed[j]);link$2(state2,a.prev,b.next),link$2(state2,prev2,a),link$2(state2,b,start2),current2=start2,prev2=b,i-=1,matched=[],stashed=[]}else seen2.delete(effect2),move(effect2,current2,anchor),link$2(state2,effect2.prev,effect2.next),link$2(state2,effect2,prev2===null?state2.effect.first:prev2. -next),link$2(state2,prev2,effect2),prev2=effect2;continue}for(matched=[],stashed=[];current2!==null&¤t2!==effect2;)(seen2??=new Set).add(current2),stashed.push(current2),current2=current2.next;if(current2===null)continue}(effect2.f&EFFECT_OFFSCREEN)===0&&matched.push(effect2),prev2=effect2,current2=effect2.next}if(state2.outrogroups!==null){for(const group of state2.outrogroups)group.pending.size===0&&(destroy_effects(array_from(group.done)),state2.outrogroups?.delete(group));state2.outrogroups. -size===0&&(state2.outrogroups=null)}if(current2!==null||seen2!==void 0){var to_destroy=[];if(seen2!==void 0)for(effect2 of seen2)(effect2.f&INERT)===0&&to_destroy.push(effect2);for(;current2!==null;)(current2.f&INERT)===0&¤t2!==state2.fallback&&to_destroy.push(current2),current2=current2.next;var destroy_length=to_destroy.length;if(destroy_length>0){var controlled_anchor=(flags2&EACH_IS_CONTROLLED)!==0&&length===0?anchor:null;if(is_animated){for(i=0;i<destroy_length;i+=1)to_destroy[i].nodes?. -a?.measure();for(i=0;i<destroy_length;i+=1)to_destroy[i].nodes?.a?.fix()}pause_effects(state2,to_destroy,controlled_anchor)}}is_animated&&queue_micro_task(()=>{if(to_animate!==void 0)for(effect2 of to_animate)effect2.nodes?.a?.apply()})}function create_item(items2,anchor,value,key2,index2,render_fn,flags2,get_collection){var v=(flags2&EACH_ITEM_REACTIVE)!==0?(flags2&EACH_ITEM_IMMUTABLE)===0?mutable_source(value,!1,!1):source$2(value):null,i=(flags2&EACH_INDEX_REACTIVE)!==0?source$2(index2):null; -return{v,i,e:branch(()=>(render_fn(anchor,v??value,i??index2,get_collection),()=>{items2.delete(key2)}))}}function move(effect2,next2,anchor){if(effect2.nodes)for(var node2=effect2.nodes.start,end=effect2.nodes.end,dest=next2&&(next2.f&EFFECT_OFFSCREEN)===0?next2.nodes.start:anchor;node2!==null;){var next_node=get_next_sibling(node2);if(dest.before(node2),node2===end)return;node2=next_node}}function link$2(state2,prev2,next2){prev2===null?state2.effect.first=next2:prev2.next=next2,next2===null?state2. -effect.last=prev2:next2.prev=prev2}function html$6(node2,get_value,svg2=!1,mathml=!1,skip_warning=!1){var anchor=node2,value="";template_effect(()=>{var effect2=active_effect;if(value===(value=get_value()??"")){hydrating&&hydrate_next();return}if(effect2.nodes!==null&&(remove_effect_dom(effect2.nodes.start,effect2.nodes.end),effect2.nodes=null),value!==""){if(hydrating){hydrate_node.data;for(var next2=hydrate_next(),last=next2;next2!==null&&(next2.nodeType!==COMMENT_NODE||next2.data!=="");)last= -next2,next2=get_next_sibling(next2);if(next2===null)throw hydration_mismatch(),HYDRATION_ERROR;assign_nodes(hydrate_node,last),anchor=set_hydrate_node(next2);return}var html2=value+"";svg2?html2=`<svg>${html2}</svg>`:mathml&&(html2=`<math>${html2}</math>`);var node3=create_fragment_from_html(html2);if((svg2||mathml)&&(node3=get_first_child(node3)),assign_nodes(get_first_child(node3),node3.lastChild),svg2||mathml)for(;get_first_child(node3);)anchor.before(get_first_child(node3));else anchor.before( -node3)}})}function snippet(node2,get_snippet,...args){var branches=new BranchManager(node2);block(()=>{const snippet2=get_snippet()??null;branches.ensure(snippet2,snippet2&&(anchor=>snippet2(anchor,...args)))},EFFECT_TRANSPARENT)}function createRawSnippet(fn){return(anchor,...params)=>{var snippet2=fn(...params),element2;if(hydrating)element2=hydrate_node,hydrate_next();else{var html2=snippet2.render().trim(),fragment=create_fragment_from_html(html2);element2=get_first_child(fragment),anchor.before( -element2)}const result=snippet2.setup?.(element2);assign_nodes(element2,element2),typeof result=="function"&&teardown(result)}}function component(node2,get_component,render_fn){hydrating&&hydrate_next();var branches=new BranchManager(node2);block(()=>{var component2=get_component()??null;branches.ensure(component2,component2&&(target2=>render_fn(target2,component2)))},EFFECT_TRANSPARENT)}const now=()=>performance.now(),raf={tick:_=>requestAnimationFrame(_),now:()=>now(),tasks:new Set};function run_tasks(){ -const now2=raf.now();raf.tasks.forEach(task=>{task.c(now2)||(raf.tasks.delete(task),task.f())}),raf.tasks.size!==0&&raf.tick(run_tasks)}function loop(callback){let task;return raf.tasks.size===0&&raf.tick(run_tasks),{promise:new Promise(fulfill=>{raf.tasks.add(task={c:callback,f:fulfill})}),abort(){raf.tasks.delete(task)}}}function dispatch_event(element2,type2){without_reactive_context(()=>{element2.dispatchEvent(new CustomEvent(type2))})}function css_property_to_camelcase(style2){if(style2==="\ -float")return"cssFloat";if(style2==="offset")return"cssOffset";if(style2.startsWith("--"))return style2;const parts=style2.split("-");return parts.length===1?parts[0]:parts[0]+parts.slice(1).map(word=>word[0].toUpperCase()+word.slice(1)).join("")}function css_to_keyframe(css2){const keyframe={},parts=css2.split(";");for(const part of parts){const[property,value]=part.split(":");if(!property||value===void 0)break;const formatted_property=css_property_to_camelcase(property.trim());keyframe[formatted_property]= -value.trim()}return keyframe}const linear$1=t=>t;function transition(flags2,element2,get_fn,get_params){var is_intro=(flags2&TRANSITION_IN)!==0,is_outro=(flags2&TRANSITION_OUT)!==0,is_both=is_intro&&is_outro,is_global=(flags2&TRANSITION_GLOBAL)!==0,direction=is_both?"both":is_intro?"in":"out",current_options,inert=element2.inert,overflow=element2.style.overflow,intro,outro;function get_options(){return without_reactive_context(()=>current_options??=get_fn()(element2,get_params?.()??{},{direction}))} -var transition2={is_global,in(){if(element2.inert=inert,!is_intro){outro?.abort(),outro?.reset?.();return}is_outro||intro?.abort(),dispatch_event(element2,"introstart"),intro=animate(element2,get_options(),outro,1,()=>{dispatch_event(element2,"introend"),intro?.abort(),intro=current_options=void 0,element2.style.overflow=overflow})},out(fn){if(!is_outro){fn?.(),current_options=void 0;return}element2.inert=!0,dispatch_event(element2,"outrostart"),outro=animate(element2,get_options(),intro,0,()=>{ -dispatch_event(element2,"outroend"),fn?.()})},stop:()=>{intro?.abort(),outro?.abort()}},e=active_effect;if((e.nodes.t??=[]).push(transition2),is_intro&&should_intro){var run2=is_global;if(!run2){for(var block2=e.parent;block2&&(block2.f&EFFECT_TRANSPARENT)!==0;)for(;(block2=block2.parent)&&(block2.f&BLOCK_EFFECT)===0;);run2=!block2||(block2.f&EFFECT_RAN)!==0}run2&&effect(()=>{untrack$1(()=>transition2.in())})}}function animate(element2,options,counterpart,t2,on_finish){var is_intro=t2===1;if(is_function( -options)){var a,aborted2=!1;return queue_micro_task(()=>{if(!aborted2){var o=options({direction:is_intro?"in":"out"});a=animate(element2,o,counterpart,t2,on_finish)}}),{abort:()=>{aborted2=!0,a?.abort()},deactivate:()=>a.deactivate(),reset:()=>a.reset(),t:()=>a.t()}}if(counterpart?.deactivate(),!options?.duration)return on_finish(),{abort:noop$3,deactivate:noop$3,reset:noop$3,t:()=>t2};const{delay=0,css:css2,tick:tick2,easing=linear$1}=options;var keyframes=[];if(is_intro&&counterpart===void 0&& -(tick2&&tick2(0,1),css2)){var styles2=css_to_keyframe(css2(0,1));keyframes.push(styles2,styles2)}var get_t=()=>1-t2,animation=element2.animate(keyframes,{duration:delay,fill:"forwards"});return animation.onfinish=()=>{animation.cancel();var t1=counterpart?.t()??1-t2;counterpart?.abort();var delta=t2-t1,duration2=options.duration*Math.abs(delta),keyframes2=[];if(duration2>0){var needs_overflow_hidden=!1;if(css2)for(var n=Math.ceil(duration2/16.666666666666668),i=0;i<=n;i+=1){var t=t1+delta*easing( -i/n),styles3=css_to_keyframe(css2(t,1-t));keyframes2.push(styles3),needs_overflow_hidden||=styles3.overflow==="hidden"}needs_overflow_hidden&&(element2.style.overflow="hidden"),get_t=()=>{var time2=animation.currentTime;return t1+delta*easing(time2/duration2)},tick2&&loop(()=>{if(animation.playState!=="running")return!1;var t3=get_t();return tick2(t3,1-t3),!0})}animation=element2.animate(keyframes2,{duration:duration2,fill:"forwards"}),animation.onfinish=()=>{get_t=()=>t2,tick2?.(t2,1-t2),on_finish()}}, -{abort:()=>{animation&&(animation.cancel(),animation.effect=null,animation.onfinish=noop$3)},deactivate:()=>{on_finish=noop$3},reset:()=>{t2===0&&tick2?.(1,0)},t:()=>get_t()}}function element$4(node2,get_tag,is_svg,render_fn,get_namespace,location2){let was_hydrating=hydrating;hydrating&&hydrate_next();var element2=null;hydrating&&hydrate_node.nodeType===ELEMENT_NODE$1&&(element2=hydrate_node,hydrate_next());var anchor=hydrating?hydrate_node:node2,branches=new BranchManager(anchor,!1);block(()=>{ -const next_tag=get_tag()||null;var ns=is_svg||next_tag==="svg"?NAMESPACE_SVG:null;if(next_tag===null){branches.ensure(null,null),set_should_intro(!0);return}return branches.ensure(next_tag,anchor2=>{if(next_tag){if(element2=hydrating?element2:ns?document.createElementNS(ns,next_tag):document.createElement(next_tag),assign_nodes(element2,element2),render_fn){hydrating&&is_raw_text_element(next_tag)&&element2.append(document.createComment(""));var child_anchor=hydrating?get_first_child(element2):element2. -appendChild(create_text());hydrating&&(child_anchor===null?set_hydrating(!1):set_hydrate_node(child_anchor)),render_fn(element2,child_anchor)}active_effect.nodes.end=element2,anchor2.before(element2)}hydrating&&set_hydrate_node(anchor2)}),set_should_intro(!0),()=>{next_tag&&set_should_intro(!1)}},EFFECT_TRANSPARENT),teardown(()=>{set_should_intro(!0)}),was_hydrating&&(set_hydrating(!0),set_hydrate_node(anchor))}function head$1(hash2,render_fn){let previous_hydrate_node=null,was_hydrating=hydrating; -var anchor;if(hydrating){previous_hydrate_node=hydrate_node;for(var head_anchor=get_first_child(document.head);head_anchor!==null&&(head_anchor.nodeType!==COMMENT_NODE||head_anchor.data!==hash2);)head_anchor=get_next_sibling(head_anchor);if(head_anchor===null)set_hydrating(!1);else{var start2=get_next_sibling(head_anchor);head_anchor.remove(),set_hydrate_node(start2)}}hydrating||(anchor=document.head.appendChild(create_text()));try{block(()=>render_fn(anchor),HEAD_EFFECT)}finally{was_hydrating&& -(set_hydrating(!0),set_hydrate_node(previous_hydrate_node))}}function action(dom,action2,get_value){effect(()=>{var payload=untrack$1(()=>action2(dom,get_value?.())||{});if(get_value&&payload?.update){var inited2=!1,prev2={};render_effect(()=>{var value=get_value();deep_read_state(value),inited2&&safe_not_equal(prev2,value)&&(prev2=value,payload.update(value))}),inited2=!0}if(payload?.destroy)return()=>payload.destroy()})}function attach(node2,get_fn){var fn=void 0,e;managed(()=>{fn!==(fn=get_fn())&& -(e&&(destroy_effect(e),e=null),fn&&(e=branch(()=>{effect(()=>fn(node2))})))})}function r$1(e){var t,f,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r$1(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx$1(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r$1(e))&&(n&&(n+=" "),n+=t);return n}function clsx(value){return typeof value=="object"?clsx$1( -value):value??""}const whitespace$1=[...` -\r\f \v\uFEFF`];function to_class(value,hash2,directives){var classname=value==null?"":""+value;if(hash2&&(classname=classname?classname+" "+hash2:hash2),directives){for(var key2 in directives)if(directives[key2])classname=classname?classname+" "+key2:key2;else if(classname.length)for(var len=key2.length,a=0;(a=classname.indexOf(key2,a))>=0;){var b=a+len;(a===0||whitespace$1.includes(classname[a-1]))&&(b===classname.length||whitespace$1.includes(classname[b]))?classname=(a===0?"":classname.substring( -0,a))+classname.substring(b+1):a=b}}return classname===""?null:classname}function append_styles(styles2,important=!1){var separator=important?" !important;":";",css2="";for(var key2 in styles2){var value=styles2[key2];value!=null&&value!==""&&(css2+=" "+key2+": "+value+separator)}return css2}function to_css_name(name){return name[0]!=="-"||name[1]!=="-"?name.toLowerCase():name}function to_style(value,styles2){if(styles2){var new_style="",normal_styles,important_styles;if(Array.isArray(styles2)?(normal_styles= -styles2[0],important_styles=styles2[1]):normal_styles=styles2,value){value=String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var in_str=!1,in_apo=0,in_comment=!1,reserved_names=[];normal_styles&&reserved_names.push(...Object.keys(normal_styles).map(to_css_name)),important_styles&&reserved_names.push(...Object.keys(important_styles).map(to_css_name));var start_index=0,name_index=-1;const len=value.length;for(var i=0;i<len;i++){var c2=value[i];if(in_comment?c2==="/"&&value[i-1]==="*"&&(in_comment= -!1):in_str?in_str===c2&&(in_str=!1):c2==="/"&&value[i+1]==="*"?in_comment=!0:c2==='"'||c2==="'"?in_str=c2:c2==="("?in_apo++:c2===")"&&in_apo--,!in_comment&&in_str===!1&&in_apo===0){if(c2===":"&&name_index===-1)name_index=i;else if(c2===";"||i===len-1){if(name_index!==-1){var name=to_css_name(value.substring(start_index,name_index).trim());if(!reserved_names.includes(name)){c2!==";"&&i++;var property=value.substring(start_index,i).trim();new_style+=" "+property+";"}}start_index=i+1,name_index=-1}}}} -return normal_styles&&(new_style+=append_styles(normal_styles)),important_styles&&(new_style+=append_styles(important_styles,!0)),new_style=new_style.trim(),new_style===""?null:new_style}return value==null?null:String(value)}function set_class(dom,is_html,value,hash2,prev_classes,next_classes){var prev2=dom.__className;if(hydrating||prev2!==value||prev2===void 0){var next_class_name=to_class(value,hash2,next_classes);(!hydrating||next_class_name!==dom.getAttribute("class"))&&(next_class_name==null? -dom.removeAttribute("class"):is_html?dom.className=next_class_name:dom.setAttribute("class",next_class_name)),dom.__className=value}else if(next_classes&&prev_classes!==next_classes)for(var key2 in next_classes){var is_present=!!next_classes[key2];(prev_classes==null||is_present!==!!prev_classes[key2])&&dom.classList.toggle(key2,is_present)}return next_classes}function update_styles(dom,prev2={},next2,priority){for(var key2 in next2){var value=next2[key2];prev2[key2]!==value&&(next2[key2]==null? -dom.style.removeProperty(key2):dom.style.setProperty(key2,value,priority))}}function set_style(dom,value,prev_styles,next_styles){var prev2=dom.__style;if(hydrating||prev2!==value){var next_style_attr=to_style(value,next_styles);(!hydrating||next_style_attr!==dom.getAttribute("style"))&&(next_style_attr==null?dom.removeAttribute("style"):dom.style.cssText=next_style_attr),dom.__style=value}else next_styles&&(Array.isArray(next_styles)?(update_styles(dom,prev_styles?.[0],next_styles[0]),update_styles( -dom,prev_styles?.[1],next_styles[1],"important")):update_styles(dom,prev_styles,next_styles));return next_styles}function select_option(select,value,mounting=!1){if(select.multiple){if(value==null)return;if(!is_array(value))return select_multiple_invalid_value();for(var option2 of select.options)option2.selected=value.includes(get_option_value(option2));return}for(option2 of select.options){var option_value=get_option_value(option2);if(is(option_value,value)){option2.selected=!0;return}}(!mounting|| -value!==void 0)&&(select.selectedIndex=-1)}function init_select(select){var observer=new MutationObserver(()=>{select_option(select,select.__value)});observer.observe(select,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),teardown(()=>{observer.disconnect()})}function get_option_value(option2){return"__value"in option2?option2.__value:option2.value}const CLASS=Symbol("class"),STYLE=Symbol("style"),IS_CUSTOM_ELEMENT=Symbol("is custom element"),IS_HTML=Symbol("is html");function remove_input_defaults(input){ -if(hydrating){var already_removed=!1,remove_defaults=()=>{if(!already_removed){if(already_removed=!0,input.hasAttribute("value")){var value=input.value;set_attribute(input,"value",null),input.value=value}if(input.hasAttribute("checked")){var checked=input.checked;set_attribute(input,"checked",null),input.checked=checked}}};input.__on_r=remove_defaults,queue_micro_task(remove_defaults),add_form_reset_listener()}}function set_value(element2,value){var attributes=get_attributes(element2);attributes. -value===(attributes.value=value??void 0)||element2.value===value&&(value!==0||element2.nodeName!=="PROGRESS")||(element2.value=value??"")}function set_selected(element2,selected){selected?element2.hasAttribute("selected")||element2.setAttribute("selected",""):element2.removeAttribute("selected")}function set_attribute(element2,attribute,value,skip_warning){var attributes=get_attributes(element2);hydrating&&(attributes[attribute]=element2.getAttribute(attribute),attribute==="src"||attribute==="sr\ -cset"||attribute==="href"&&element2.nodeName==="LINK")||attributes[attribute]!==(attributes[attribute]=value)&&(attribute==="loading"&&(element2[LOADING_ATTR_SYMBOL]=value),value==null?element2.removeAttribute(attribute):typeof value!="string"&&get_setters(element2).includes(attribute)?element2[attribute]=value:element2.setAttribute(attribute,value))}function set_attributes(element2,prev2,next2,css_hash,should_remove_defaults=!1,skip_warning=!1){if(hydrating&&should_remove_defaults&&element2.tagName=== -"INPUT"){var input=element2,attribute=input.type==="checkbox"?"defaultChecked":"defaultValue";attribute in next2||remove_input_defaults(input)}var attributes=get_attributes(element2),is_custom_element=attributes[IS_CUSTOM_ELEMENT],preserve_attribute_case=!attributes[IS_HTML];let is_hydrating_custom_element=hydrating&&is_custom_element;is_hydrating_custom_element&&set_hydrating(!1);var current2=prev2||{},is_option_element=element2.tagName==="OPTION";for(var key2 in prev2)key2 in next2||(next2[key2]= -null);next2.class?next2.class=clsx(next2.class):(css_hash||next2[CLASS])&&(next2.class=null),next2[STYLE]&&(next2.style??=null);var setters=get_setters(element2);for(const key3 in next2){let value=next2[key3];if(is_option_element&&key3==="value"&&value==null){element2.value=element2.__value="",current2[key3]=value;continue}if(key3==="class"){var is_html=element2.namespaceURI==="http://www.w3.org/1999/xhtml";set_class(element2,is_html,value,css_hash,prev2?.[CLASS],next2[CLASS]),current2[key3]=value, -current2[CLASS]=next2[CLASS];continue}if(key3==="style"){set_style(element2,value,prev2?.[STYLE],next2[STYLE]),current2[key3]=value,current2[STYLE]=next2[STYLE];continue}var prev_value=current2[key3];if(!(value===prev_value&&!(value===void 0&&element2.hasAttribute(key3)))){current2[key3]=value;var prefix=key3[0]+key3[1];if(prefix!=="$$")if(prefix==="on"){const opts={},event_handle_key="$$"+key3;let event_name=key3.slice(2);var delegated=can_delegate_event(event_name);if(is_capture_event(event_name)&& -(event_name=event_name.slice(0,-7),opts.capture=!0),!delegated&&prev_value){if(value!=null)continue;element2.removeEventListener(event_name,current2[event_handle_key],opts),current2[event_handle_key]=null}if(value!=null)if(delegated)element2[`__${event_name}`]=value,delegate([event_name]);else{let handle2=function(evt){current2[key3].call(this,evt)};current2[event_handle_key]=create_event(event_name,element2,handle2,opts)}else delegated&&(element2[`__${event_name}`]=void 0)}else if(key3==="style") -set_attribute(element2,key3,value);else if(key3==="autofocus")autofocus(element2,!!value);else if(!is_custom_element&&(key3==="__value"||key3==="value"&&value!=null))element2.value=element2.__value=value;else if(key3==="selected"&&is_option_element)set_selected(element2,value);else{var name=key3;preserve_attribute_case||(name=normalize_attribute(name));var is_default=name==="defaultValue"||name==="defaultChecked";if(value==null&&!is_custom_element&&!is_default)if(attributes[key3]=null,name==="va\ -lue"||name==="checked"){let input2=element2;const use_default=prev2===void 0;if(name==="value"){let previous2=input2.defaultValue;input2.removeAttribute(name),input2.defaultValue=previous2,input2.value=input2.__value=use_default?previous2:null}else{let previous2=input2.defaultChecked;input2.removeAttribute(name),input2.defaultChecked=previous2,input2.checked=use_default?previous2:!1}}else element2.removeAttribute(key3);else is_default||setters.includes(name)&&(is_custom_element||typeof value!="s\ -tring")?(element2[name]=value,name in attributes&&(attributes[name]=UNINITIALIZED)):typeof value!="function"&&set_attribute(element2,name,value)}}}return is_hydrating_custom_element&&set_hydrating(!0),current2}function attribute_effect(element2,fn,sync=[],async=[],blockers=[],css_hash,should_remove_defaults=!1,skip_warning=!1){flatten(blockers,sync,async,values=>{var prev2=void 0,effects={},is_select=element2.nodeName==="SELECT",inited2=!1;if(managed(()=>{var next2=fn(...values.map(get$4)),current2=set_attributes( -element2,prev2,next2,css_hash,should_remove_defaults,skip_warning);inited2&&is_select&&"value"in next2&&select_option(element2,next2.value);for(let symbol of Object.getOwnPropertySymbols(effects))next2[symbol]||destroy_effect(effects[symbol]);for(let symbol of Object.getOwnPropertySymbols(next2)){var n=next2[symbol];symbol.description===ATTACHMENT_KEY&&(!prev2||n!==prev2[symbol])&&(effects[symbol]&&destroy_effect(effects[symbol]),effects[symbol]=branch(()=>attach(element2,()=>n))),current2[symbol]= -n}prev2=current2}),is_select){var select=element2;effect(()=>{select_option(select,prev2.value,!0),init_select(select)})}inited2=!0})}function get_attributes(element2){return element2.__attributes??={[IS_CUSTOM_ELEMENT]:element2.nodeName.includes("-"),[IS_HTML]:element2.namespaceURI===NAMESPACE_HTML}}var setters_cache=new Map;function get_setters(element2){var cache_key=element2.getAttribute("is")||element2.nodeName,setters=setters_cache.get(cache_key);if(setters)return setters;setters_cache.set( -cache_key,setters=[]);for(var descriptors,proto=element2,element_proto=Element.prototype;element_proto!==proto;){descriptors=get_descriptors(proto);for(var key2 in descriptors)descriptors[key2].set&&setters.push(key2);proto=get_prototype_of(proto)}return setters}function bind_value(input,get2,set2=get2){var batches2=new WeakSet;listen_to_event_and_reset_event(input,"input",async is_reset=>{var value=is_reset?input.defaultValue:input.value;if(value=is_numberlike_input(input)?to_number(value):value, -set2(value),current_batch!==null&&batches2.add(current_batch),await tick(),value!==(value=get2())){var start2=input.selectionStart,end=input.selectionEnd,length=input.value.length;if(input.value=value??"",end!==null){var new_length=input.value.length;start2===end&&end===length&&new_length>length?(input.selectionStart=new_length,input.selectionEnd=new_length):(input.selectionStart=start2,input.selectionEnd=Math.min(end,new_length))}}}),(hydrating&&input.defaultValue!==input.value||untrack$1(get2)== -null&&input.value)&&(set2(is_numberlike_input(input)?to_number(input.value):input.value),current_batch!==null&&batches2.add(current_batch)),render_effect(()=>{var value=get2();if(input===document.activeElement){var batch=previous_batch??current_batch;if(batches2.has(batch))return}is_numberlike_input(input)&&value===to_number(input.value)||input.type==="date"&&!value&&!input.value||value!==input.value&&(input.value=value??"")})}function is_numberlike_input(input){var type2=input.type;return type2=== -"number"||type2==="range"}function to_number(value){return value===""?null:+value}function bind_files(input,get2,set2=get2){listen_to_event_and_reset_event(input,"change",()=>{set2(input.files)}),hydrating&&input.files&&set2(input.files),render_effect(()=>{input.files=get2()})}function is_bound_this(bound_value,element_or_component){return bound_value===element_or_component||bound_value?.[STATE_SYMBOL]===element_or_component}function bind_this(element_or_component={},update2,get_value,get_parts){ -return effect(()=>{var old_parts,parts;return render_effect(()=>{old_parts=parts,parts=[],untrack$1(()=>{element_or_component!==get_value(...parts)&&(update2(element_or_component,...parts),old_parts&&is_bound_this(get_value(...old_parts),element_or_component)&&update2(null,...old_parts))})}),()=>{queue_micro_task(()=>{parts&&is_bound_this(get_value(...parts),element_or_component)&&update2(null,...parts)})}}),element_or_component}function bind_window_size(type2,set2){listen(window,["resize"],()=>without_reactive_context( -()=>set2(window[type2])))}function init(immutable=!1){const context=component_context,callbacks=context.l.u;if(!callbacks)return;let props=()=>deep_read_state(context.s);if(immutable){let version2=0,prev2={};const d2=derived(()=>{let changed=!1;const props2=context.s;for(const key2 in props2)props2[key2]!==prev2[key2]&&(prev2[key2]=props2[key2],changed=!0);return changed&&version2++,version2});props=()=>get$4(d2)}callbacks.b.length&&user_pre_effect(()=>{observe_all(context,props),run_all(callbacks. -b)}),user_effect(()=>{const fns=untrack$1(()=>callbacks.m.map(run));return()=>{for(const fn of fns)typeof fn=="function"&&fn()}}),callbacks.a.length&&user_effect(()=>{observe_all(context,props),run_all(callbacks.a)})}function observe_all(context,props){if(context.l.s)for(const signal of context.l.s)get$4(signal);props()}function subscribe_to_store(store,run2,invalidate){if(store==null)return run2(void 0),noop$3;const unsub=untrack$1(()=>store.subscribe(run2,invalidate));return unsub.unsubscribe? -()=>unsub.unsubscribe():unsub}const subscriber_queue=[];function writable(value,start2=noop$3){let stop=null;const subscribers=new Set;function set2(new_value){if(safe_not_equal(value,new_value)&&(value=new_value,stop)){const run_queue=!subscriber_queue.length;for(const subscriber of subscribers)subscriber[1](),subscriber_queue.push(subscriber,value);if(run_queue){for(let i=0;i<subscriber_queue.length;i+=2)subscriber_queue[i][0](subscriber_queue[i+1]);subscriber_queue.length=0}}}function update2(fn){ -set2(fn(value))}function subscribe(run2,invalidate=noop$3){const subscriber=[run2,invalidate];return subscribers.add(subscriber),subscribers.size===1&&(stop=start2(set2,update2)||noop$3),run2(value),()=>{subscribers.delete(subscriber),subscribers.size===0&&stop&&(stop(),stop=null)}}return{set:set2,update:update2,subscribe}}function get$3(store){let value;return subscribe_to_store(store,_=>value=_)(),value}let is_store_binding=!1,IS_UNMOUNTED=Symbol();function store_get(store,store_name,stores2){ -const entry=stores2[store_name]??={store:null,source:mutable_source(void 0),unsubscribe:noop$3};if(entry.store!==store&&!(IS_UNMOUNTED in stores2))if(entry.unsubscribe(),entry.store=store??null,store==null)entry.source.v=void 0,entry.unsubscribe=noop$3;else{var is_synchronous_callback=!0;entry.unsubscribe=subscribe_to_store(store,v=>{is_synchronous_callback?entry.source.v=v:set$1(entry.source,v)}),is_synchronous_callback=!1}return store&&IS_UNMOUNTED in stores2?get$3(store):get$4(entry.source)}function setup_stores(){ -const stores2={};function cleanup(){teardown(()=>{for(var store_name in stores2)stores2[store_name].unsubscribe();define_property(stores2,IS_UNMOUNTED,{enumerable:!1,value:!0})})}return[stores2,cleanup]}function capture_store_binding(fn){var previous_is_store_binding=is_store_binding;try{return is_store_binding=!1,[fn(),is_store_binding]}finally{is_store_binding=previous_is_store_binding}}const rest_props_handler={get(target2,key2){if(!target2.exclude.includes(key2))return target2.props[key2]},set(target2,key2){ -return!1},getOwnPropertyDescriptor(target2,key2){if(!target2.exclude.includes(key2)&&key2 in target2.props)return{enumerable:!0,configurable:!0,value:target2.props[key2]}},has(target2,key2){return target2.exclude.includes(key2)?!1:key2 in target2.props},ownKeys(target2){return Reflect.ownKeys(target2.props).filter(key2=>!target2.exclude.includes(key2))}};function rest_props(props,exclude,name){return new Proxy({props,exclude},rest_props_handler)}const spread_props_handler={get(target2,key2){let i=target2. -props.length;for(;i--;){let p2=target2.props[i];if(is_function(p2)&&(p2=p2()),typeof p2=="object"&&p2!==null&&key2 in p2)return p2[key2]}},set(target2,key2,value){let i=target2.props.length;for(;i--;){let p2=target2.props[i];is_function(p2)&&(p2=p2());const desc=get_descriptor(p2,key2);if(desc&&desc.set)return desc.set(value),!0}return!1},getOwnPropertyDescriptor(target2,key2){let i=target2.props.length;for(;i--;){let p2=target2.props[i];if(is_function(p2)&&(p2=p2()),typeof p2=="object"&&p2!==null&& -key2 in p2){const descriptor=get_descriptor(p2,key2);return descriptor&&!descriptor.configurable&&(descriptor.configurable=!0),descriptor}}},has(target2,key2){if(key2===STATE_SYMBOL||key2===LEGACY_PROPS)return!1;for(let p2 of target2.props)if(is_function(p2)&&(p2=p2()),p2!=null&&key2 in p2)return!0;return!1},ownKeys(target2){const keys2=[];for(let p2 of target2.props)if(is_function(p2)&&(p2=p2()),!!p2){for(const key2 in p2)keys2.includes(key2)||keys2.push(key2);for(const key2 of Object.getOwnPropertySymbols( -p2))keys2.includes(key2)||keys2.push(key2)}return keys2}};function spread_props(...props){return new Proxy({props},spread_props_handler)}function prop(props,key2,flags2,fallback2){var runes=!legacy_mode_flag||(flags2&PROPS_IS_RUNES)!==0,bindable=(flags2&PROPS_IS_BINDABLE)!==0,lazy=(flags2&PROPS_IS_LAZY_INITIAL)!==0,fallback_value=fallback2,fallback_dirty=!0,get_fallback=()=>(fallback_dirty&&(fallback_dirty=!1,fallback_value=lazy?untrack$1(fallback2):fallback2),fallback_value),setter;if(bindable){ -var is_entry_props=STATE_SYMBOL in props||LEGACY_PROPS in props;setter=get_descriptor(props,key2)?.set??(is_entry_props&&key2 in props?v=>props[key2]=v:void 0)}var initial_value,is_store_sub=!1;bindable?[initial_value,is_store_sub]=capture_store_binding(()=>props[key2]):initial_value=props[key2],initial_value===void 0&&fallback2!==void 0&&(initial_value=get_fallback(),setter&&(runes&&props_invalid_value(),setter(initial_value)));var getter;if(runes?getter=()=>{var value=props[key2];return value=== -void 0?get_fallback():(fallback_dirty=!0,value)}:getter=()=>{var value=props[key2];return value!==void 0&&(fallback_value=void 0),value===void 0?fallback_value:value},runes&&(flags2&PROPS_IS_UPDATED)===0)return getter;if(setter){var legacy_parent=props.$$legacy;return function(value,mutation){return arguments.length>0?((!runes||!mutation||legacy_parent||is_store_sub)&&setter(mutation?getter():value),value):getter()}}var overridden=!1,d2=((flags2&PROPS_IS_IMMUTABLE)!==0?derived:derived_safe_equal)( -()=>(overridden=!1,getter()));bindable&&get$4(d2);var parent_effect=active_effect;return function(value,mutation){if(arguments.length>0){const new_value=mutation?get$4(d2):runes&&bindable?proxy(value):value;return set$1(d2,new_value),overridden=!0,fallback_value!==void 0&&(fallback_value=new_value),value}return is_destroying_effect&&overridden||(parent_effect.f&DESTROYED)!==0?d2.v:get$4(d2)}}function asClassComponent(component2){return class extends Svelte4Component{constructor(options){super({component:component2, -...options})}}}class Svelte4Component{#events;#instance;constructor(options){var sources=new Map,add_source=(key2,value)=>{var s2=mutable_source(value,!1,!1);return sources.set(key2,s2),s2};const props=new Proxy({...options.props||{},$$events:{}},{get(target2,prop2){return get$4(sources.get(prop2)??add_source(prop2,Reflect.get(target2,prop2)))},has(target2,prop2){return prop2===LEGACY_PROPS?!0:(get$4(sources.get(prop2)??add_source(prop2,Reflect.get(target2,prop2))),Reflect.has(target2,prop2))},set(target2,prop2,value){ -return set$1(sources.get(prop2)??add_source(prop2,value),value),Reflect.set(target2,prop2,value)}});this.#instance=(options.hydrate?hydrate:mount)(options.component,{target:options.target,anchor:options.anchor,props,context:options.context,intro:options.intro??!1,recover:options.recover}),(!options?.props?.$$host||options.sync===!1)&&flushSync(),this.#events=props.$$events;for(const key2 of Object.keys(this.#instance))key2==="$set"||key2==="$destroy"||key2==="$on"||define_property(this,key2,{get(){ -return this.#instance[key2]},set(value){this.#instance[key2]=value},enumerable:!0});this.#instance.$set=next2=>{Object.assign(props,next2)},this.#instance.$destroy=()=>{unmount(this.#instance)}}$set(props){this.#instance.$set(props)}$on(event2,callback){this.#events[event2]=this.#events[event2]||[];const cb=(...args)=>callback.call(this,...args);return this.#events[event2].push(cb),()=>{this.#events[event2]=this.#events[event2].filter(fn=>fn!==cb)}}$destroy(){this.#instance.$destroy()}}function hydratable(key2,fn){ -if(experimental_async_required(),hydrating){const store=window.__svelte?.h;if(store?.has(key2))return store.get(key2);hydratable_missing_but_expected()}return fn()}function getAbortSignal(){return active_reaction===null&&get_abort_signal_outside_reaction(),(active_reaction.ac??=new AbortController).signal}function onMount$1(fn){component_context===null&&lifecycle_outside_component(),legacy_mode_flag&&component_context.l!==null?init_update_callbacks(component_context).m.push(fn):user_effect(()=>{ -const cleanup=untrack$1(fn);if(typeof cleanup=="function")return cleanup})}function onDestroy(fn){component_context===null&&lifecycle_outside_component(),onMount$1(()=>()=>untrack$1(fn))}function create_custom_event(type2,detail,{bubbles=!1,cancelable=!1}={}){return new CustomEvent(type2,{detail,bubbles,cancelable})}function createEventDispatcher(){const active_component_context=component_context;return active_component_context===null&&lifecycle_outside_component(),(type2,detail,options)=>{const events=active_component_context. -s.$$events?.[type2];if(events){const callbacks=is_array(events)?events.slice():[events],event2=create_custom_event(type2,detail,options);for(const fn of callbacks)fn.call(active_component_context.x,event2);return!event2.defaultPrevented}return!0}}function beforeUpdate(fn){component_context===null&&lifecycle_outside_component(),component_context.l===null&&lifecycle_legacy_only(),init_update_callbacks(component_context).b.push(fn)}function afterUpdate(fn){component_context===null&&lifecycle_outside_component(), -component_context.l===null&&lifecycle_legacy_only(),init_update_callbacks(component_context).a.push(fn)}function init_update_callbacks(context){var l=context.l;return l.u??={a:[],b:[],m:[]}}const svelte=Object.freeze(Object.defineProperty({__proto__:null,afterUpdate,beforeUpdate,createContext,createEventDispatcher,createRawSnippet,flushSync,fork,getAbortSignal,getAllContexts,getContext,hasContext,hydratable,hydrate,mount,onDestroy,onMount:onMount$1,setContext,settled,tick,unmount,untrack:untrack$1}, -Symbol.toStringTag,{value:"Module"}));class HttpError{constructor(status,body2){this.status=status,typeof body2=="string"?this.body={message:body2}:body2?this.body=body2:this.body={message:`Error: ${status}`}}toString(){return JSON.stringify(this.body)}}class Redirect{constructor(status,location2){this.status=status,this.location=location2}}class SvelteKitError extends Error{constructor(status,text2,message){super(message),this.status=status,this.text=text2}}new URL("sveltekit-internal://");function normalize_path(path2,trailing_slash){ -return path2==="/"||trailing_slash==="ignore"?path2:trailing_slash==="never"?path2.endsWith("/")?path2.slice(0,-1):path2:trailing_slash==="always"&&!path2.endsWith("/")?path2+"/":path2}function decode_pathname(pathname){return pathname.split("%25").map(decodeURI).join("%25")}function decode_params(params){for(const key2 in params)params[key2]=decodeURIComponent(params[key2]);return params}function strip_hash({href}){return href.split("#")[0]}function make_trackable(url2,callback,search_params_callback,allow_hash=!1){ -const tracked=new URL(url2);Object.defineProperty(tracked,"searchParams",{value:new Proxy(tracked.searchParams,{get(obj,key2){if(key2==="get"||key2==="getAll"||key2==="has")return(param,...rest)=>(search_params_callback(param),obj[key2](param,...rest));callback();const value=Reflect.get(obj,key2);return typeof value=="function"?value.bind(obj):value}}),enumerable:!0,configurable:!0});const tracked_url_properties=["href","pathname","search","toString","toJSON"];allow_hash&&tracked_url_properties. -push("hash");for(const property of tracked_url_properties)Object.defineProperty(tracked,property,{get(){return callback(),url2[property]},enumerable:!0,configurable:!0});return tracked}function hash$1(...values){let hash2=5381;for(const value of values)if(typeof value=="string"){let i=value.length;for(;i;)hash2=hash2*33^value.charCodeAt(--i)}else if(ArrayBuffer.isView(value)){const buffer=new Uint8Array(value.buffer,value.byteOffset,value.byteLength);let i=buffer.length;for(;i;)hash2=hash2*33^buffer[--i]}else -throw new TypeError("value must be a string or TypedArray");return(hash2>>>0).toString(36)}new TextEncoder;new TextDecoder;function base64_decode(encoded){const binary=atob(encoded),bytes=new Uint8Array(binary.length);for(let i=0;i<binary.length;i++)bytes[i]=binary.charCodeAt(i);return bytes}const native_fetch=window.fetch;window.fetch=(input,init2)=>((input instanceof Request?input.method:init2?.method||"GET")!=="GET"&&cache.delete(build_selector(input)),native_fetch(input,init2));const cache=new Map; -function initial_fetch(resource,opts){const selector=build_selector(resource,opts),script=document.querySelector(selector);if(script?.textContent){script.remove();let{body:body2,...init2}=JSON.parse(script.textContent);const ttl=script.getAttribute("data-ttl");return ttl&&cache.set(selector,{body:body2,init:init2,ttl:1e3*Number(ttl)}),script.getAttribute("data-b64")!==null&&(body2=base64_decode(body2)),Promise.resolve(new Response(body2,init2))}return window.fetch(resource,opts)}function subsequent_fetch(resource,resolved,opts){ -if(cache.size>0){const selector=build_selector(resource,opts),cached2=cache.get(selector);if(cached2){if(performance.now()<cached2.ttl&&["default","force-cache","only-if-cached",void 0].includes(opts?.cache))return new Response(cached2.body,cached2.init);cache.delete(selector)}}return window.fetch(resolved,opts)}function build_selector(resource,opts){let selector=`script[data-sveltekit-fetched][data-url=${JSON.stringify(resource instanceof Request?resource.url:resource)}]`;if(opts?.headers||opts?. -body){const values=[];opts.headers&&values.push([...new Headers(opts.headers)].join(",")),opts.body&&(typeof opts.body=="string"||ArrayBuffer.isView(opts.body))&&values.push(opts.body),selector+=`[data-hash="${hash$1(...values)}"]`}return selector}const param_pattern=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function parse_route_id(id2){const params=[];return{pattern:id2==="/"?/^\/$/:new RegExp(`^${get_route_segments(id2).map(segment=>{const rest_match=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(segment); -if(rest_match)return params.push({name:rest_match[1],matcher:rest_match[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const optional_match=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(segment);if(optional_match)return params.push({name:optional_match[1],matcher:optional_match[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!segment)return;const parts=segment.split(/\[(.+?)\](?!\])/);return"/"+parts.map((content2,i)=>{if(i%2){if(content2.startsWith("x+"))return escape$3(String.fromCharCode(parseInt( -content2.slice(2),16)));if(content2.startsWith("u+"))return escape$3(String.fromCharCode(...content2.slice(2).split("-").map(code2=>parseInt(code2,16))));const match=param_pattern.exec(content2),[,is_optional,is_rest,name,matcher]=match;return params.push({name,matcher,optional:!!is_optional,rest:!!is_rest,chained:is_rest?i===1&&parts[0]==="":!1}),is_rest?"([^]*?)":is_optional?"([^/]*)?":"([^/]+?)"}return escape$3(content2)}).join("")}).join("")}/?$`),params}}function affects_path(segment){return segment!== -""&&!/^\([^)]+\)$/.test(segment)}function get_route_segments(route){return route.slice(1).split("/").filter(affects_path)}function exec(match,params,matchers2){const result={},values=match.slice(1),values_needing_match=values.filter(value=>value!==void 0);let buffered=0;for(let i=0;i<params.length;i+=1){const param=params[i];let value=values[i-buffered];if(param.chained&¶m.rest&&buffered&&(value=values.slice(i-buffered,i+1).filter(s2=>s2).join("/"),buffered=0),value===void 0)if(param.rest)value= -"";else continue;if(!param.matcher||matchers2[param.matcher](value)){result[param.name]=value;const next_param=params[i+1],next_value=values[i+1];next_param&&!next_param.rest&&next_param.optional&&next_value&¶m.chained&&(buffered=0),!next_param&&!next_value&&Object.keys(result).length===values_needing_match.length&&(buffered=0);continue}if(param.optional&¶m.chained){buffered++;continue}return}if(!buffered)return result}function escape$3(str){return str.normalize().replace(/[[\]]/g,"\\$&"). -replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function parse$5({nodes:nodes2,server_loads:server_loads2,dictionary:dictionary2,matchers:matchers2}){const layouts_with_server_load=new Set(server_loads2);return Object.entries(dictionary2).map(([id2,[leaf2,layouts,errors2]])=>{const{pattern:pattern2,params}=parse_route_id(id2),route={id:id2,exec:path2=>{const match=pattern2.exec(path2);if(match)return exec(match,params,matchers2)}, -errors:[1,...errors2||[]].map(n=>nodes2[n]),layouts:[0,...layouts||[]].map(create_layout_loader),leaf:create_leaf_loader(leaf2)};return route.errors.length=route.layouts.length=Math.max(route.errors.length,route.layouts.length),route});function create_leaf_loader(id2){const uses_server_data=id2<0;return uses_server_data&&(id2=~id2),[uses_server_data,nodes2[id2]]}function create_layout_loader(id2){return id2===void 0?id2:[layouts_with_server_load.has(id2),nodes2[id2]]}}function get$2(key2,parse2=JSON. -parse){try{return parse2(sessionStorage[key2])}catch{}}function set(key2,value,stringify2=JSON.stringify){const data=stringify2(value);try{sessionStorage[key2]=data}catch{}}const base=globalThis.__sveltekit__?.base??"",assets=globalThis.__sveltekit__?.assets??base??"",version$3="llama-server-webui",SNAPSHOT_KEY="sveltekit:snapshot",SCROLL_KEY="sveltekit:scroll",STATES_KEY="sveltekit:states",PAGE_URL_KEY="sveltekit:pageurl",HISTORY_INDEX="sveltekit:history",NAVIGATION_INDEX="sveltekit:n\ -avigation",PRELOAD_PRIORITIES={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},origin=location.origin;function resolve_url(url2){if(url2 instanceof URL)return url2;let baseURI=document.baseURI;if(!baseURI){const baseTags=document.getElementsByTagName("base");baseURI=baseTags.length?baseTags[0].href:document.URL}return new URL(url2,baseURI)}function scroll_state(){return{x:pageXOffset,y:pageYOffset}}function link_option(element2,name){return element2.getAttribute(`data-sveltekit-${name}`)}const levels={ -...PRELOAD_PRIORITIES,"":PRELOAD_PRIORITIES.hover};function parent_element(element2){let parent=element2.assignedSlot??element2.parentNode;return parent?.nodeType===11&&(parent=parent.host),parent}function find_anchor(element2,target2){for(;element2&&element2!==target2;){if(element2.nodeName.toUpperCase()==="A"&&element2.hasAttribute("href"))return element2;element2=parent_element(element2)}}function get_link_info(a,base2,uses_hash_router){let url2;try{if(url2=new URL(a instanceof SVGAElement?a. -href.baseVal:a.href,document.baseURI),uses_hash_router&&url2.hash.match(/^#[^/]/)){const route=location.hash.split("#")[1]||"/";url2.hash=`#${route}${url2.hash}`}}catch{}const target2=a instanceof SVGAElement?a.target.baseVal:a.target,external=!url2||!!target2||is_external_url(url2,base2,uses_hash_router)||(a.getAttribute("rel")||"").split(/\s+/).includes("external"),download=url2?.origin===origin&&a.hasAttribute("download");return{url:url2,external,target:target2,download}}function get_router_options(element2){ -let keepfocus=null,noscroll=null,preload_code=null,preload_data=null,reload=null,replace_state=null,el=element2;for(;el&&el!==document.documentElement;)preload_code===null&&(preload_code=link_option(el,"preload-code")),preload_data===null&&(preload_data=link_option(el,"preload-data")),keepfocus===null&&(keepfocus=link_option(el,"keepfocus")),noscroll===null&&(noscroll=link_option(el,"noscroll")),reload===null&&(reload=link_option(el,"reload")),replace_state===null&&(replace_state=link_option(el, -"replacestate")),el=parent_element(el);function get_option_state(value){switch(value){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:levels[preload_code??"off"],preload_data:levels[preload_data??"off"],keepfocus:get_option_state(keepfocus),noscroll:get_option_state(noscroll),reload:get_option_state(reload),replace_state:get_option_state(replace_state)}}function notifiable_store(value){const store=writable(value);let ready=!0;function notify(){ready= -!0,store.update(val=>val)}function set2(new_value){ready=!1,store.set(new_value)}function subscribe(run2){let old_value;return store.subscribe(new_value=>{(old_value===void 0||ready&&new_value!==old_value)&&run2(old_value=new_value)})}return{notify,set:set2,subscribe}}const updated_listener={v:()=>{}};function create_updated_store(){const{set:set2,subscribe}=writable(!1);let timeout;async function check(){clearTimeout(timeout);try{const res=await fetch(`${assets}/_app/version.json`,{headers:{pragma:"\ -no-cache","cache-control":"no-cache"}});if(!res.ok)return!1;const updated2=(await res.json()).version!==version$3;return updated2&&(set2(!0),updated_listener.v(),clearTimeout(timeout)),updated2}catch{return!1}}return{subscribe,check}}function is_external_url(url2,base2,hash_routing){return url2.origin!==origin||!url2.pathname.startsWith(base2)?!0:hash_routing?url2.pathname!==location.pathname:!1}const valid_layout_exports=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...valid_layout_exports]; -const valid_layout_server_exports=new Set([...valid_layout_exports]);[...valid_layout_server_exports];function compact(arr){return arr.filter(val=>val!=null)}function get_status(error2){return error2 instanceof HttpError||error2 instanceof SvelteKitError?error2.status:500}function get_message(error2){return error2 instanceof SvelteKitError?error2.text:"Internal Error"}let page$3,navigating,updated;const is_legacy=onMount$1.toString().includes("$$")||/function \w+\(\) \{\}/.test(onMount$1.toString()); -is_legacy?(page$3={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},navigating={current:null},updated={current:!1}):(page$3=new class{#data=state$1({});get data(){return get$4(this.#data)}set data(value){set$1(this.#data,value)}#form=state$1(null);get form(){return get$4(this.#form)}set form(value){set$1(this.#form,value)}#error=state$1(null);get error(){return get$4(this.#error)}set error(value){set$1(this.#error,value)}#params=state$1( -{});get params(){return get$4(this.#params)}set params(value){set$1(this.#params,value)}#route=state$1({id:null});get route(){return get$4(this.#route)}set route(value){set$1(this.#route,value)}#state=state$1({});get state(){return get$4(this.#state)}set state(value){set$1(this.#state,value)}#status=state$1(-1);get status(){return get$4(this.#status)}set status(value){set$1(this.#status,value)}#url=state$1(new URL("https://example.com"));get url(){return get$4(this.#url)}set url(value){set$1(this.#url, -value)}},navigating=new class{#current=state$1(null);get current(){return get$4(this.#current)}set current(value){set$1(this.#current,value)}},updated=new class{#current=state$1(!1);get current(){return get$4(this.#current)}set current(value){set$1(this.#current,value)}},updated_listener.v=()=>updated.current=!0);function update(new_page){Object.assign(page$3,new_page)}const noop_span={spanContext(){return noop_span_context},setAttribute(){return this},setAttributes(){return this},addEvent(){return this}, -setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},noop_span_context={traceId:"",spanId:"",traceFlags:0},{onMount}=svelte,untrack=untrack$1??(value=>value()),ICON_REL_ATTRIBUTES=new Set(["icon","shortcut icon","apple-touch-icon"]),scroll_positions=get$2(SCROLL_KEY)??{},snapshots=get$2(SNAPSHOT_KEY)??{},stores={url:notifiable_store({}),page:notifiable_store({}),navigating:writable( -null),updated:create_updated_store()};function update_scroll_positions(index2){scroll_positions[index2]=scroll_state()}function clear_onward_history(current_history_index2,current_navigation_index2){let i=current_history_index2+1;for(;scroll_positions[i];)delete scroll_positions[i],i+=1;for(i=current_navigation_index2+1;snapshots[i];)delete snapshots[i],i+=1}function native_navigation(url2,replace2=!1){return replace2?location.replace(url2.href):location.href=url2.href,new Promise(()=>{})}async function update_service_worker(){ -if("serviceWorker"in navigator){const registration=await navigator.serviceWorker.getRegistration(base||"/");registration&&await registration.update()}}function noop$2(){}let routes,default_layout_loader,default_error_loader,container,target,app$1;const invalidated=[],components=[];let load_cache=null;function discard_load_cache(){load_cache?.fork?.then(f=>f?.discard()),load_cache=null}const reroute_cache=new Map,before_navigate_callbacks=new Set,on_navigate_callbacks=new Set,after_navigate_callbacks=new Set; -let current={branch:[],error:null,url:null},hydrated=!1,started=!1,autoscroll=!0,is_navigating=!1,hash_navigating=!1,has_navigated=!1,force_invalidation=!1,root$1O,current_history_index,current_navigation_index,token;const preload_tokens=new Set,query_map=new Map;async function start$1(_app,_target,hydrate2){globalThis.__sveltekit__?.data&&globalThis.__sveltekit__.data,document.URL!==location.href&&(location.href=location.href),app$1=_app,await _app.hooks.init?.(),routes=parse$5(_app), -container=document.documentElement,target=_target,default_layout_loader=_app.nodes[0],default_error_loader=_app.nodes[1],default_layout_loader(),default_error_loader(),current_history_index=history.state?.[HISTORY_INDEX],current_navigation_index=history.state?.[NAVIGATION_INDEX],current_history_index||(current_history_index=current_navigation_index=Date.now(),history.replaceState({...history.state,[HISTORY_INDEX]:current_history_index,[NAVIGATION_INDEX]:current_navigation_index},""));const scroll=scroll_positions[current_history_index]; -function restore_scroll(){scroll&&(history.scrollRestoration="manual",scrollTo(scroll.x,scroll.y))}hydrate2?(restore_scroll(),await _hydrate(target,hydrate2)):(await navigate({type:"enter",url:resolve_url(app$1.hash?decode_hash(new URL(location.href)):location.href),replace_state:!0}),restore_scroll()),_start_router()}function reset_invalidation(){invalidated.length=0,force_invalidation=!1}function capture_snapshot(index2){components.some(c2=>c2?.snapshot)&&(snapshots[index2]=components.map(c2=>c2?. -snapshot?.capture()))}function restore_snapshot(index2){snapshots[index2]?.forEach((value,i)=>{components[i]?.snapshot?.restore(value)})}function persist_state(){update_scroll_positions(current_history_index),set(SCROLL_KEY,scroll_positions),capture_snapshot(current_navigation_index),set(SNAPSHOT_KEY,snapshots)}async function _goto(url2,options,redirect_count,nav_token){let query_keys;options.invalidateAll&&discard_load_cache(),await navigate({type:"goto",url:resolve_url(url2),keepfocus:options. -keepFocus,noscroll:options.noScroll,replace_state:options.replaceState,state:options.state,redirect_count,nav_token,accept:()=>{options.invalidateAll&&(force_invalidation=!0,query_keys=[...query_map.keys()]),options.invalidate&&options.invalidate.forEach(push_invalidated)}}),options.invalidateAll&&tick().then(tick).then(()=>{query_map.forEach(({resource},key2)=>{query_keys?.includes(key2)&&resource.refresh?.()})})}async function _preload_data(intent){if(intent.id!==load_cache?.id){discard_load_cache(); -const preload2={};preload_tokens.add(preload2),load_cache={id:intent.id,token:preload2,promise:load_route({...intent,preload:preload2}).then(result=>(preload_tokens.delete(preload2),result.type==="loaded"&&result.state.error&&discard_load_cache(),result)),fork:null}}return load_cache.promise}async function _preload_code(url2){const route=(await get_navigation_intent(url2,!1))?.route;route&&await Promise.all([...route.layouts,route.leaf].map(load2=>load2?.[1]()))}async function initialize(result,target2,hydrate2){ -current=result.state;const style2=document.querySelector("style[data-sveltekit]");if(style2&&style2.remove(),Object.assign(page$3,result.props.page),root$1O=new app$1.root({target:target2,props:{...result.props,stores,components},hydrate:hydrate2,sync:!1}),await Promise.resolve(),restore_snapshot(current_navigation_index),hydrate2){const navigation={from:null,to:{params:current.params,route:{id:current.route?.id??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()}; -after_navigate_callbacks.forEach(fn=>fn(navigation))}started=!0}function get_navigation_result_from_branch({url:url2,params,branch:branch2,status,error:error2,route,form}){let slash="never";if(base&&(url2.pathname===base||url2.pathname===base+"/"))slash="always";else for(const node2 of branch2)node2?.slash!==void 0&&(slash=node2.slash);url2.pathname=normalize_path(url2.pathname,slash),url2.search=url2.search;const result={type:"loaded",state:{url:url2,params,branch:branch2,error:error2,route},props:{ -constructors:compact(branch2).map(branch_node=>branch_node.node.component),page:clone_page(page$3)}};form!==void 0&&(result.props.form=form);let data={},data_changed=!page$3,p2=0;for(let i=0;i<Math.max(branch2.length,current.branch.length);i+=1){const node2=branch2[i],prev2=current.branch[i];node2?.data!==prev2?.data&&(data_changed=!0),node2&&(data={...data,...node2.data},data_changed&&(result.props[`data_${p2}`]=data),p2+=1)}return(!current.url||url2.href!==current.url.href||current.error!==error2|| -form!==void 0&&form!==page$3.form||data_changed)&&(result.props.page={error:error2,params,route:{id:route?.id??null},state:{},status,url:new URL(url2),form:form??null,data:data_changed?data:page$3.data}),result}async function load_node({loader,parent,url:url2,params,route,server_data_node}){let data=null,is_tracking=!0;const uses={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},node2=await loader();if(node2.universal?.load){let depends=function(...deps){for(const dep of deps){ -const{href}=new URL(dep,url2);uses.dependencies.add(href)}};const load_input={tracing:{enabled:!1,root:noop_span,current:noop_span},route:new Proxy(route,{get:(target2,key2)=>(is_tracking&&(uses.route=!0),target2[key2])}),params:new Proxy(params,{get:(target2,key2)=>(is_tracking&&uses.params.add(key2),target2[key2])}),data:server_data_node?.data??null,url:make_trackable(url2,()=>{is_tracking&&(uses.url=!0)},param=>{is_tracking&&uses.search_params.add(param)},app$1.hash),async fetch(resource,init2){ -resource instanceof Request&&(init2={body:resource.method==="GET"||resource.method==="HEAD"?void 0:await resource.blob(),cache:resource.cache,credentials:resource.credentials,headers:[...resource.headers].length>0?resource?.headers:void 0,integrity:resource.integrity,keepalive:resource.keepalive,method:resource.method,mode:resource.mode,redirect:resource.redirect,referrer:resource.referrer,referrerPolicy:resource.referrerPolicy,signal:resource.signal,...init2});const{resolved,promise}=resolve_fetch_url( -resource,init2,url2);return is_tracking&&depends(resolved.href),promise},setHeaders:()=>{},depends,parent(){return is_tracking&&(uses.parent=!0),parent()},untrack(fn){is_tracking=!1;try{return fn()}finally{is_tracking=!0}}};data=await node2.universal.load.call(null,load_input)??null}return{node:node2,loader,server:server_data_node,universal:node2.universal?.load?{type:"data",data,uses}:null,data:data??server_data_node?.data??null,slash:node2.universal?.trailingSlash??server_data_node?.slash}}function resolve_fetch_url(input,init2,url2){ -let requested=input instanceof Request?input.url:input;const resolved=new URL(requested,url2);resolved.origin===url2.origin&&(requested=resolved.href.slice(url2.origin.length));const promise=started?subsequent_fetch(requested,resolved.href,init2):initial_fetch(requested,init2);return{resolved,promise}}function has_changed(parent_changed,route_changed,url_changed,search_params_changed,uses,params){if(force_invalidation)return!0;if(!uses)return!1;if(uses.parent&&parent_changed||uses.route&&route_changed|| -uses.url&&url_changed)return!0;for(const tracked_params of uses.search_params)if(search_params_changed.has(tracked_params))return!0;for(const param of uses.params)if(params[param]!==current.params[param])return!0;for(const href of uses.dependencies)if(invalidated.some(fn=>fn(new URL(href))))return!0;return!1}function create_data_node(node2,previous2){return node2?.type==="data"?node2:node2?.type==="skip"?previous2??null:null}function diff_search_params(old_url,new_url){if(!old_url)return new Set( -new_url.searchParams.keys());const changed=new Set([...old_url.searchParams.keys(),...new_url.searchParams.keys()]);for(const key2 of changed){const old_values2=old_url.searchParams.getAll(key2),new_values=new_url.searchParams.getAll(key2);old_values2.every(value=>new_values.includes(value))&&new_values.every(value=>old_values2.includes(value))&&changed.delete(key2)}return changed}function preload_error({error:error2,url:url2,route,params}){return{type:"loaded",state:{error:error2,url:url2,route, -params,branch:[]},props:{page:clone_page(page$3),constructors:[]}}}async function load_route({id:id2,invalidating,url:url2,params,route,preload:preload2}){if(load_cache?.id===id2)return preload_tokens.delete(load_cache.token),load_cache.promise;const{errors:errors2,layouts,leaf:leaf2}=route,loaders=[...layouts,leaf2];errors2.forEach(loader=>loader?.().catch(()=>{})),loaders.forEach(loader=>loader?.[1]().catch(()=>{}));const url_changed=current.url?id2!==get_page_key(current.url):!1,route_changed=current. -route?route.id!==current.route.id:!1,search_params_changed=diff_search_params(current.url,url2);let parent_changed=!1;const branch_promises=loaders.map(async(loader,i)=>{if(!loader)return;const previous2=current.branch[i];return loader[1]===previous2?.loader&&!has_changed(parent_changed,route_changed,url_changed,search_params_changed,previous2.universal?.uses,params)?previous2:(parent_changed=!0,load_node({loader:loader[1],url:url2,params,route,parent:async()=>{const data={};for(let j=0;j<i;j+=1) -Object.assign(data,(await branch_promises[j])?.data);return data},server_data_node:create_data_node(loader[0]?{type:"skip"}:null,loader[0]?previous2?.server:void 0)}))});for(const p2 of branch_promises)p2.catch(()=>{});const branch2=[];for(let i=0;i<loaders.length;i+=1)if(loaders[i])try{branch2.push(await branch_promises[i])}catch(err){if(err instanceof Redirect)return{type:"redirect",location:err.location};if(preload_tokens.has(preload2))return preload_error({error:await handle_error(err,{params, -url:url2,route:{id:route.id}}),url:url2,params,route});let status=get_status(err),error2;if(err instanceof HttpError)error2=err.body;else{if(await stores.updated.check())return await update_service_worker(),await native_navigation(url2);error2=await handle_error(err,{params,url:url2,route:{id:route.id}})}const error_load=await load_nearest_error_page(i,branch2,errors2);return error_load?get_navigation_result_from_branch({url:url2,params,branch:branch2.slice(0,error_load.idx).concat(error_load.node), -status,error:error2,route}):await server_fallback(url2,{id:route.id},error2,status)}else branch2.push(void 0);return get_navigation_result_from_branch({url:url2,params,branch:branch2,status:200,error:null,route,form:invalidating?void 0:null})}async function load_nearest_error_page(i,branch2,errors2){for(;i--;)if(errors2[i]){let j=i;for(;!branch2[j];)j-=1;try{return{idx:j+1,node:{node:await errors2[i](),loader:errors2[i],data:{},server:null,universal:null}}}catch{continue}}}async function load_root_error_page({ -status,error:error2,url:url2,route}){const params={};let server_data_node=null;try{const root_layout=await load_node({loader:default_layout_loader,url:url2,params,route,parent:()=>Promise.resolve({}),server_data_node:create_data_node(server_data_node)}),root_error={node:await default_error_loader(),loader:default_error_loader,universal:null,server:null,data:null};return get_navigation_result_from_branch({url:url2,params,branch:[root_layout,root_error],status,error:error2,route:null})}catch(error22){ -if(error22 instanceof Redirect)return _goto(new URL(error22.location,location.href),{},0);throw error22}}async function get_rerouted_url(url2){const href=url2.href;if(reroute_cache.has(href))return reroute_cache.get(href);let rerouted;try{const promise=(async()=>{let rerouted2=await app$1.hooks.reroute({url:new URL(url2),fetch:async(input,init2)=>resolve_fetch_url(input,init2,url2).promise})??url2;if(typeof rerouted2=="string"){const tmp=new URL(url2);app$1.hash?tmp.hash=rerouted2:tmp.pathname=rerouted2, -rerouted2=tmp}return rerouted2})();reroute_cache.set(href,promise),rerouted=await promise}catch{reroute_cache.delete(href);return}return rerouted}async function get_navigation_intent(url2,invalidating){if(url2&&!is_external_url(url2,base,app$1.hash)){const rerouted=await get_rerouted_url(url2);if(!rerouted)return;const path2=get_url_path(rerouted);for(const route of routes){const params=route.exec(path2);if(params)return{id:get_page_key(url2),invalidating,route,params:decode_params(params),url:url2}}}} -function get_url_path(url2){return decode_pathname(app$1.hash?url2.hash.replace(/^#/,"").replace(/[?#].+/,""):url2.pathname.slice(base.length))||"/"}function get_page_key(url2){return(app$1.hash?url2.hash.replace(/^#/,""):url2.pathname)+url2.search}function _before_navigate({url:url2,type:type2,intent,delta,event:event2}){let should_block=!1;const nav=create_navigation(current,intent,url2,type2);delta!==void 0&&(nav.navigation.delta=delta),event2!==void 0&&(nav.navigation.event=event2);const cancellable={ -...nav.navigation,cancel:()=>{should_block=!0,nav.reject(new Error("navigation cancelled"))}};return is_navigating||before_navigate_callbacks.forEach(fn=>fn(cancellable)),should_block?null:nav}async function navigate({type:type2,url:url2,popped,keepfocus,noscroll,replace_state,state:state2={},redirect_count=0,nav_token={},accept=noop$2,block:block2=noop$2,event:event2}){const prev_token=token;token=nav_token;const intent=await get_navigation_intent(url2,!1),nav=type2==="enter"?create_navigation( -current,intent,url2,type2):_before_navigate({url:url2,type:type2,delta:popped?.delta,intent,event:event2});if(!nav){block2(),token===nav_token&&(token=prev_token);return}const previous_history_index=current_history_index,previous_navigation_index=current_navigation_index;accept(),is_navigating=!0,started&&nav.navigation.type!=="enter"&&stores.navigating.set(navigating.current=nav.navigation);let navigation_result=intent&&await load_route(intent);if(!navigation_result){if(is_external_url(url2,base, -app$1.hash))return await native_navigation(url2,replace_state);navigation_result=await server_fallback(url2,{id:null},await handle_error(new SvelteKitError(404,"Not Found",`Not found: ${url2.pathname}`),{url:url2,params:{},route:{id:null}}),404,replace_state)}if(url2=intent?.url||url2,token!==nav_token)return nav.reject(new Error("navigation aborted")),!1;if(navigation_result.type==="redirect"){if(redirect_count<20){await navigate({type:type2,url:new URL(navigation_result.location,url2),popped,keepfocus, -noscroll,replace_state,state:state2,redirect_count:redirect_count+1,nav_token}),nav.fulfil(void 0);return}navigation_result=await load_root_error_page({status:500,error:await handle_error(new Error("Redirect loop"),{url:url2,params:{},route:{id:null}}),url:url2,route:{id:null}})}else navigation_result.props.page.status>=400&&await stores.updated.check()&&(await update_service_worker(),await native_navigation(url2,replace_state));if(reset_invalidation(),update_scroll_positions(previous_history_index), -capture_snapshot(previous_navigation_index),navigation_result.props.page.url.pathname!==url2.pathname&&(url2.pathname=navigation_result.props.page.url.pathname),state2=popped?popped.state:state2,!popped){const change=replace_state?0:1,entry={[HISTORY_INDEX]:current_history_index+=change,[NAVIGATION_INDEX]:current_navigation_index+=change,[STATES_KEY]:state2};(replace_state?history.replaceState:history.pushState).call(history,entry,"",url2),replace_state||clear_onward_history(current_history_index, -current_navigation_index)}const load_cache_fork=intent&&load_cache?.id===intent.id?load_cache.fork:null;load_cache=null,navigation_result.props.page.state=state2;let commit_promise;if(started){const after_navigate=(await Promise.all(Array.from(on_navigate_callbacks,fn=>fn(nav.navigation)))).filter(value=>typeof value=="function");if(after_navigate.length>0){let cleanup=function(){after_navigate.forEach(fn=>{after_navigate_callbacks.delete(fn)})};after_navigate.push(cleanup),after_navigate.forEach( -fn=>{after_navigate_callbacks.add(fn)})}current=navigation_result.state,navigation_result.props.page&&(navigation_result.props.page.url=url2);const fork2=load_cache_fork&&await load_cache_fork;fork2?commit_promise=fork2.commit():(root$1O.$set(navigation_result.props),update(navigation_result.props.page),commit_promise=settled?.()),has_navigated=!0}else await initialize(navigation_result,target,!1);const{activeElement}=document;await commit_promise,await tick(),await tick();let scroll=popped?popped. -scroll:noscroll?scroll_state():null;if(autoscroll){const deep_linked=url2.hash&&document.getElementById(get_id(url2));if(scroll)scrollTo(scroll.x,scroll.y);else if(deep_linked){deep_linked.scrollIntoView();const{top,left}=deep_linked.getBoundingClientRect();scroll={x:pageXOffset+left,y:pageYOffset+top}}else scrollTo(0,0)}const changed_focus=document.activeElement!==activeElement&&document.activeElement!==document.body;!keepfocus&&!changed_focus&&reset_focus(url2,scroll),autoscroll=!0,navigation_result. -props.page&&Object.assign(page$3,navigation_result.props.page),is_navigating=!1,type2==="popstate"&&restore_snapshot(current_navigation_index),nav.fulfil(void 0),after_navigate_callbacks.forEach(fn=>fn(nav.navigation)),stores.navigating.set(navigating.current=null)}async function server_fallback(url2,route,error2,status,replace_state){return url2.origin===origin&&url2.pathname===location.pathname&&!hydrated?await load_root_error_page({status,error:error2,url:url2,route}):await native_navigation( -url2,replace_state)}function setup_preload(){let mousemove_timeout,current_a={element:void 0,href:void 0},current_priority;container.addEventListener("mousemove",event2=>{const target2=event2.target;clearTimeout(mousemove_timeout),mousemove_timeout=setTimeout(()=>{preload2(target2,PRELOAD_PRIORITIES.hover)},20)});function tap2(event2){event2.defaultPrevented||preload2(event2.composedPath()[0],PRELOAD_PRIORITIES.tap)}container.addEventListener("mousedown",tap2),container.addEventListener("touchst\ -art",tap2,{passive:!0});const observer=new IntersectionObserver(entries=>{for(const entry of entries)entry.isIntersecting&&(_preload_code(new URL(entry.target.href)),observer.unobserve(entry.target))},{threshold:0});async function preload2(element2,priority){const a=find_anchor(element2,container),interacted=a===current_a.element&&a?.href===current_a.href&&priority>=current_priority;if(!a||interacted)return;const{url:url2,external,download}=get_link_info(a,base,app$1.hash);if(external||download) -return;const options=get_router_options(a),same_url=url2&&get_page_key(current.url)===get_page_key(url2);if(!(options.reload||same_url))if(priority<=options.preload_data){current_a={element:a,href:a.href},current_priority=PRELOAD_PRIORITIES.tap;const intent=await get_navigation_intent(url2,!1);if(!intent)return;_preload_data(intent)}else priority<=options.preload_code&&(current_a={element:a,href:a.href},current_priority=priority,_preload_code(url2))}function after_navigate(){observer.disconnect(); -for(const a of container.querySelectorAll("a")){const{url:url2,external,download}=get_link_info(a,base,app$1.hash);if(external||download)continue;const options=get_router_options(a);options.reload||(options.preload_code===PRELOAD_PRIORITIES.viewport&&observer.observe(a),options.preload_code===PRELOAD_PRIORITIES.eager&&_preload_code(url2))}}after_navigate_callbacks.add(after_navigate),after_navigate()}function handle_error(error2,event2){if(error2 instanceof HttpError)return error2.body;const status=get_status( -error2),message=get_message(error2);return app$1.hooks.handleError({error:error2,event:event2,status,message})??{message}}function add_navigation_callback(callbacks,callback){onMount(()=>(callbacks.add(callback),()=>{callbacks.delete(callback)}))}function afterNavigate(callback){add_navigation_callback(after_navigate_callbacks,callback)}function goto(url2,opts={}){return url2=new URL(resolve_url(url2)),url2.origin!==origin?Promise.reject(new Error("goto: invalid URL")):_goto(url2,opts,0)}function push_invalidated(resource){ -if(typeof resource=="function")invalidated.push(resource);else{const{href}=new URL(resource,location.href);invalidated.push(url2=>url2.href===href)}}function replaceState(url2,state2){const opts={[HISTORY_INDEX]:current_history_index,[NAVIGATION_INDEX]:current_navigation_index,[PAGE_URL_KEY]:page$3.url.href,[STATES_KEY]:state2};history.replaceState(opts,"",resolve_url(url2)),page$3.state=state2,root$1O.$set({page:untrack(()=>clone_page(page$3))})}function _start_router(){history.scrollRestoration= +const DERIVED=2,EFFECT=4,RENDER_EFFECT=8,MANAGED_EFFECT=1<<24,BLOCK_EFFECT=16,BRANCH_EFFECT=32,ROOT_EFFECT=64,BOUNDARY_EFFECT=128,CONNECTED=512,CLEAN=1024,DIRTY=2048,MAYBE_DIRTY=4096,INERT=8192,DESTROYED=16384,REACTION_RAN=32768,DESTROYING=1<<25,EFFECT_TRANSPARENT=65536,EAGER_EFFECT=1<<17,HEAD_EFFECT=1<<18,EFFECT_PRESERVED=1<<19,USER_EFFECT=1<<20,EFFECT_OFFSCREEN=1<<25,WAS_MARKED=65536,REACTION_IS_UPDATING=1<<21,ASYNC=1<<22,ERROR_VALUE=1<<23,STATE_SYMBOL=Symbol("$state"),LEGACY_PROPS=Symbol("leg\ +acy props"),LOADING_ATTR_SYMBOL=Symbol(""),STALE_REACTION=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},IS_XHTML=!!globalThis.document?.contentType&&globalThis.document.contentType.includes("xml"),ELEMENT_NODE$1=1,TEXT_NODE=3,COMMENT_NODE=8;function lifecycle_outside_component(name){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function async_derived_orphan(){throw new Error("https://svelte.d\ +ev/e/async_derived_orphan")}function each_key_duplicate(a,b,value){throw new Error("https://svelte.dev/e/each_key_duplicate")}function effect_in_teardown(rune){throw new Error("https://svelte.dev/e/effect_in_teardown")}function effect_in_unowned_derived(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function effect_orphan(rune){throw new Error("https://svelte.dev/e/effect_orphan")}function effect_update_depth_exceeded(){throw new Error("https://svelte.dev/e/effect_update_dep\ +th_exceeded")}function hydration_failed(){throw new Error("https://svelte.dev/e/hydration_failed")}function props_invalid_value(key2){throw new Error("https://svelte.dev/e/props_invalid_value")}function state_descriptors_fixed(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function state_prototype_fixed(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function state_unsafe_mutation(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function svelte_boundary_reset_onerror(){ +throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const EACH_ITEM_REACTIVE=1,EACH_INDEX_REACTIVE=2,EACH_IS_CONTROLLED=4,EACH_IS_ANIMATED=8,EACH_ITEM_IMMUTABLE=16,PROPS_IS_IMMUTABLE=1,PROPS_IS_RUNES=2,PROPS_IS_UPDATED=4,PROPS_IS_BINDABLE=8,PROPS_IS_LAZY_INITIAL=16,TRANSITION_IN=1,TRANSITION_OUT=2,TRANSITION_GLOBAL=4,TEMPLATE_FRAGMENT=1,TEMPLATE_USE_IMPORT_NODE=2,HYDRATION_START="[",HYDRATION_START_ELSE="[!",HYDRATION_START_FAILED="[?",HYDRATION_END="]",HYDRATION_ERROR={},UNINITIALIZED=Symbol(), +NAMESPACE_HTML="http://www.w3.org/1999/xhtml",NAMESPACE_SVG="http://www.w3.org/2000/svg",NAMESPACE_MATHML="http://www.w3.org/1998/Math/MathML",ATTACHMENT_KEY="@attach";function hydration_mismatch(location2){console.warn("https://svelte.dev/e/hydration_mismatch")}function select_multiple_invalid_value(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function svelte_boundary_reset_noop(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let hydrating=!1;function set_hydrating(value){ +hydrating=value}let hydrate_node;function set_hydrate_node(node2){if(node2===null)throw hydration_mismatch(),HYDRATION_ERROR;return hydrate_node=node2}function hydrate_next(){return set_hydrate_node(get_next_sibling(hydrate_node))}function reset(node2){if(hydrating){if(get_next_sibling(hydrate_node)!==null)throw hydration_mismatch(),HYDRATION_ERROR;hydrate_node=node2}}function next$1(count=1){if(hydrating){for(var i=count,node2=hydrate_node;i--;)node2=get_next_sibling(node2);hydrate_node=node2}} +function skip_nodes(remove2=!0){for(var depth=0,node2=hydrate_node;;){if(node2.nodeType===COMMENT_NODE){var data=node2.data;if(data===HYDRATION_END){if(depth===0)return node2;depth-=1}else(data===HYDRATION_START||data===HYDRATION_START_ELSE||data[0]==="["&&!isNaN(Number(data.slice(1))))&&(depth+=1)}var next2=get_next_sibling(node2);remove2&&node2.remove(),node2=next2}}function read_hydration_instruction(node2){if(!node2||node2.nodeType!==COMMENT_NODE)throw hydration_mismatch(),HYDRATION_ERROR;return node2. +data}function equals(value){return value===this.v}function safe_not_equal(a,b){return a!=a?b==b:a!==b||a!==null&&typeof a=="object"||typeof a=="function"}function safe_equals(value){return!safe_not_equal(value,this.v)}let legacy_mode_flag=!1;function enable_legacy_mode_flag(){legacy_mode_flag=!0}const empty$2=[];function snapshot(value,skip_warning=!1,no_tojson=!1){return clone$1(value,new Map,"",empty$2,null,no_tojson)}function clone$1(value,cloned,path2,paths,original=null,no_tojson=!1){if(typeof value=="object"&&value!==null){var unwrapped=cloned.get(value);if(unwrapped!==void 0)return unwrapped;if(value instanceof Map)return new Map(value);if(value instanceof Set)return new Set(value);if(is_array(value)){var copy=Array(value.length); +cloned.set(value,copy),original!==null&&cloned.set(original,copy);for(var i=0;i<value.length;i+=1){var element2=value[i];i in value&&(copy[i]=clone$1(element2,cloned,path2,paths,null,no_tojson))}return copy}if(get_prototype_of(value)===object_prototype){copy={},cloned.set(value,copy),original!==null&&cloned.set(original,copy);for(var key2 of Object.keys(value))copy[key2]=clone$1(value[key2],cloned,path2,paths,null,no_tojson);return copy}if(value instanceof Date)return structuredClone(value);if(typeof value. +toJSON=="function"&&!no_tojson)return clone$1(value.toJSON(),cloned,path2,paths,value)}if(value instanceof EventTarget)return value;try{return structuredClone(value)}catch{return value}}let component_context=null;function set_component_context(context){component_context=context}function getContext(key2){return get_or_init_context_map().get(key2)}function setContext(key2,context){return get_or_init_context_map().set(key2,context),context}function hasContext(key2){return get_or_init_context_map(). +has(key2)}function getAllContexts(){return get_or_init_context_map()}function push$1(props,runes=!1,fn){component_context={p:component_context,i:!1,c:null,e:null,s:props,x:null,r:active_effect,l:legacy_mode_flag&&!runes?{s:null,u:null,$:[]}:null}}function pop(component2){var context=component_context,effects=context.e;if(effects!==null){context.e=null;for(var fn of effects)create_user_effect(fn)}return component2!==void 0&&(context.x=component2),context.i=!0,component_context=context.p,component2?? +{}}function is_runes(){return!legacy_mode_flag||component_context!==null&&component_context.l===null}function get_or_init_context_map(name){return component_context===null&&lifecycle_outside_component(),component_context.c??=new Map(get_parent_context(component_context)||void 0)}function get_parent_context(component_context2){let parent=component_context2.p;for(;parent!==null;){const context_map=parent.c;if(context_map!==null)return context_map;parent=parent.p}return null}let micro_tasks=[];function run_micro_tasks(){ +var tasks=micro_tasks;micro_tasks=[],run_all(tasks)}function queue_micro_task(fn){if(micro_tasks.length===0&&!is_flushing_sync){var tasks=micro_tasks;queueMicrotask(()=>{tasks===micro_tasks&&run_micro_tasks()})}micro_tasks.push(fn)}function flush_tasks(){for(;micro_tasks.length>0;)run_micro_tasks()}function handle_error$1(error2){var effect2=active_effect;if(effect2===null)return active_reaction.f|=ERROR_VALUE,error2;if((effect2.f&REACTION_RAN)===0&&(effect2.f&EFFECT)===0)throw error2;invoke_error_boundary( +error2,effect2)}function invoke_error_boundary(error2,effect2){for(;effect2!==null;){if((effect2.f&BOUNDARY_EFFECT)!==0){if((effect2.f&REACTION_RAN)===0)throw error2;try{effect2.b.error(error2);return}catch(e){error2=e}}effect2=effect2.parent}throw error2}const STATUS_MASK=-7169;function set_signal_status(signal,status){signal.f=signal.f&STATUS_MASK|status}function update_derived_status(derived2){(derived2.f&CONNECTED)!==0||derived2.deps===null?set_signal_status(derived2,CLEAN):set_signal_status( +derived2,MAYBE_DIRTY)}function clear_marked(deps){if(deps!==null)for(const dep of deps)(dep.f&DERIVED)===0||(dep.f&WAS_MARKED)===0||(dep.f^=WAS_MARKED,clear_marked(dep.deps))}function defer_effect(effect2,dirty_effects,maybe_dirty_effects){(effect2.f&DIRTY)!==0?dirty_effects.add(effect2):(effect2.f&MAYBE_DIRTY)!==0&&maybe_dirty_effects.add(effect2),clear_marked(effect2.deps),set_signal_status(effect2,CLEAN)}function subscribe_to_store(store,run2,invalidate){if(store==null)return run2(void 0),noop$3; +const unsub=untrack$1(()=>store.subscribe(run2,invalidate));return unsub.unsubscribe?()=>unsub.unsubscribe():unsub}const subscriber_queue=[];function writable(value,start2=noop$3){let stop=null;const subscribers=new Set;function set2(new_value){if(safe_not_equal(value,new_value)&&(value=new_value,stop)){const run_queue=!subscriber_queue.length;for(const subscriber of subscribers)subscriber[1](),subscriber_queue.push(subscriber,value);if(run_queue){for(let i=0;i<subscriber_queue.length;i+=2)subscriber_queue[i][0]( +subscriber_queue[i+1]);subscriber_queue.length=0}}}function update2(fn){set2(fn(value))}function subscribe(run2,invalidate=noop$3){const subscriber=[run2,invalidate];return subscribers.add(subscriber),subscribers.size===1&&(stop=start2(set2,update2)||noop$3),run2(value),()=>{subscribers.delete(subscriber),subscribers.size===0&&stop&&(stop(),stop=null)}}return{set:set2,update:update2,subscribe}}function get$4(store){let value;return subscribe_to_store(store,_=>value=_)(),value}let is_store_binding=!1, +IS_UNMOUNTED=Symbol();function store_get(store,store_name,stores2){const entry=stores2[store_name]??={store:null,source:mutable_source(void 0),unsubscribe:noop$3};if(entry.store!==store&&!(IS_UNMOUNTED in stores2))if(entry.unsubscribe(),entry.store=store??null,store==null)entry.source.v=void 0,entry.unsubscribe=noop$3;else{var is_synchronous_callback=!0;entry.unsubscribe=subscribe_to_store(store,v=>{is_synchronous_callback?entry.source.v=v:set$1(entry.source,v)}),is_synchronous_callback=!1}return store&& +IS_UNMOUNTED in stores2?get$4(store):get$3(entry.source)}function setup_stores(){const stores2={};function cleanup(){teardown(()=>{for(var store_name in stores2)stores2[store_name].unsubscribe();define_property(stores2,IS_UNMOUNTED,{enumerable:!1,value:!0})})}return[stores2,cleanup]}function capture_store_binding(fn){var previous_is_store_binding=is_store_binding;try{return is_store_binding=!1,[fn(),is_store_binding]}finally{is_store_binding=previous_is_store_binding}}const batches=new Set;let current_batch=null, +batch_values=null,last_scheduled_effect=null,is_flushing_sync=!1,is_processing=!1,collected_effects=null,legacy_updates=null;var flush_count=0;let uid=1;class Batch{id=uid++;current=new Map;previous=new Map;#commit_callbacks=new Set;#discard_callbacks=new Set;#pending=new Map;#blocking_pending=new Map;#deferred=null;#roots=[];#new_effects=[];#dirty_effects=new Set;#maybe_dirty_effects=new Set;#skipped_branches=new Map;is_fork=!1;#decrement_queued=!1;#blockers=new Set;#is_deferred(){return this.is_fork|| +this.#blocking_pending.size>0}#is_blocked(){for(const batch of this.#blockers)for(const effect2 of batch.#blocking_pending.keys()){for(var skipped=!1,e=effect2;e.parent!==null;){if(this.#skipped_branches.has(e)){skipped=!0;break}e=e.parent}if(!skipped)return!0}return!1}skip_effect(effect2){this.#skipped_branches.has(effect2)||this.#skipped_branches.set(effect2,{d:[],m:[]})}unskip_effect(effect2){var tracked=this.#skipped_branches.get(effect2);if(tracked){this.#skipped_branches.delete(effect2);for(var e of tracked. +d)set_signal_status(e,DIRTY),this.schedule(e);for(e of tracked.m)set_signal_status(e,MAYBE_DIRTY),this.schedule(e)}}#process(){if(flush_count++>1e3&&(batches.delete(this),infinite_loop_guard()),!this.#is_deferred()){for(const e of this.#dirty_effects)this.#maybe_dirty_effects.delete(e),set_signal_status(e,DIRTY),this.schedule(e);for(const e of this.#maybe_dirty_effects)set_signal_status(e,MAYBE_DIRTY),this.schedule(e)}const roots=this.#roots;this.#roots=[],this.apply();var effects=collected_effects= +[],render_effects=[],updates=legacy_updates=[];for(const root2 of roots)try{this.#traverse(root2,effects,render_effects)}catch(e){throw reset_all(root2),e}if(current_batch=null,updates.length>0){var batch=Batch.ensure();for(const e of updates)batch.schedule(e)}if(collected_effects=null,legacy_updates=null,this.#is_deferred()||this.#is_blocked()){this.#defer_effects(render_effects),this.#defer_effects(effects);for(const[e,t]of this.#skipped_branches)reset_branch(e,t)}else{this.#pending.size===0&& +batches.delete(this),this.#dirty_effects.clear(),this.#maybe_dirty_effects.clear();for(const fn of this.#commit_callbacks)fn(this);this.#commit_callbacks.clear(),flush_queued_effects(render_effects),flush_queued_effects(effects),this.#deferred?.resolve()}var next_batch=current_batch;if(this.#roots.length>0){const batch2=next_batch??=this;batch2.#roots.push(...this.#roots.filter(r2=>!batch2.#roots.includes(r2)))}next_batch!==null&&(batches.add(next_batch),next_batch.#process()),batches.has(this)|| +this.#commit()}#traverse(root2,effects,render_effects){root2.f^=CLEAN;for(var effect2=root2.first;effect2!==null;){var flags2=effect2.f,is_branch=(flags2&(BRANCH_EFFECT|ROOT_EFFECT))!==0,is_skippable_branch=is_branch&&(flags2&CLEAN)!==0,skip=is_skippable_branch||(flags2&INERT)!==0||this.#skipped_branches.has(effect2);if(!skip&&effect2.fn!==null){is_branch?effect2.f^=CLEAN:(flags2&EFFECT)!==0?effects.push(effect2):is_dirty(effect2)&&((flags2&BLOCK_EFFECT)!==0&&this.#maybe_dirty_effects.add(effect2), +update_effect(effect2));var child2=effect2.first;if(child2!==null){effect2=child2;continue}}for(;effect2!==null;){var next2=effect2.next;if(next2!==null){effect2=next2;break}effect2=effect2.parent}}}#defer_effects(effects){for(var i=0;i<effects.length;i+=1)defer_effect(effects[i],this.#dirty_effects,this.#maybe_dirty_effects)}capture(source2,old_value,is_derived=!1){old_value!==UNINITIALIZED&&!this.previous.has(source2)&&this.previous.set(source2,old_value),(source2.f&ERROR_VALUE)===0&&(this.current. +set(source2,[source2.v,is_derived]),batch_values?.set(source2,source2.v))}activate(){current_batch=this}deactivate(){current_batch=null,batch_values=null}flush(){try{is_processing=!0,current_batch=this,this.#process()}finally{flush_count=0,last_scheduled_effect=null,collected_effects=null,legacy_updates=null,is_processing=!1,current_batch=null,batch_values=null,old_values.clear()}}discard(){for(const fn of this.#discard_callbacks)fn(this);this.#discard_callbacks.clear(),batches.delete(this)}register_created_effect(effect2){ +this.#new_effects.push(effect2)}#commit(){for(const batch of batches){var is_earlier=batch.id<this.id,sources=[];for(const[source3,[value,is_derived]]of this.current){if(batch.current.has(source3)){var batch_value=batch.current.get(source3)[0];if(is_earlier&&value!==batch_value)batch.current.set(source3,[value,is_derived]);else continue}sources.push(source3)}var others=[...batch.current.keys()].filter(s2=>!this.current.has(s2));if(others.length===0)is_earlier&&batch.discard();else if(sources.length> +0){batch.activate();var marked=new Set,checked=new Map;for(var source2 of sources)mark_effects(source2,others,marked,checked);checked=new Map;var current_unequal=[...batch.current.keys()].filter(c2=>this.current.has(c2)?this.current.get(c2)[0]!==c2:!0);for(const effect2 of this.#new_effects)(effect2.f&(DESTROYED|INERT|EAGER_EFFECT))===0&&depends_on(effect2,current_unequal,checked)&&((effect2.f&(ASYNC|BLOCK_EFFECT))!==0?(set_signal_status(effect2,DIRTY),batch.schedule(effect2)):batch.#dirty_effects. +add(effect2));if(batch.#roots.length>0){batch.apply();for(var root2 of batch.#roots)batch.#traverse(root2,[],[]);batch.#roots=[]}batch.deactivate()}}for(const batch of batches)batch.#blockers.has(this)&&(batch.#blockers.delete(this),batch.#blockers.size===0&&!batch.#is_deferred()&&(batch.activate(),batch.#process()))}increment(blocking,effect2){let pending_count=this.#pending.get(effect2)??0;if(this.#pending.set(effect2,pending_count+1),blocking){let blocking_pending_count=this.#blocking_pending. +get(effect2)??0;this.#blocking_pending.set(effect2,blocking_pending_count+1)}}decrement(blocking,effect2,skip){let pending_count=this.#pending.get(effect2)??0;if(pending_count===1?this.#pending.delete(effect2):this.#pending.set(effect2,pending_count-1),blocking){let blocking_pending_count=this.#blocking_pending.get(effect2)??0;blocking_pending_count===1?this.#blocking_pending.delete(effect2):this.#blocking_pending.set(effect2,blocking_pending_count-1)}this.#decrement_queued||skip||(this.#decrement_queued= +!0,queue_micro_task(()=>{this.#decrement_queued=!1,this.flush()}))}transfer_effects(dirty_effects,maybe_dirty_effects){for(const e of dirty_effects)this.#dirty_effects.add(e);for(const e of maybe_dirty_effects)this.#maybe_dirty_effects.add(e);dirty_effects.clear(),maybe_dirty_effects.clear()}oncommit(fn){this.#commit_callbacks.add(fn)}ondiscard(fn){this.#discard_callbacks.add(fn)}settled(){return(this.#deferred??=deferred()).promise}static ensure(){if(current_batch===null){const batch=current_batch= +new Batch;is_processing||(batches.add(current_batch),is_flushing_sync||queue_micro_task(()=>{current_batch===batch&&batch.flush()}))}return current_batch}apply(){{batch_values=null;return}}schedule(effect2){if(last_scheduled_effect=effect2,effect2.b?.is_pending&&(effect2.f&(EFFECT|RENDER_EFFECT|MANAGED_EFFECT))!==0&&(effect2.f&REACTION_RAN)===0){effect2.b.defer_effect(effect2);return}for(var e=effect2;e.parent!==null;){e=e.parent;var flags2=e.f;if(collected_effects!==null&&e===active_effect&&(active_reaction=== +null||(active_reaction.f&DERIVED)===0))return;if((flags2&(ROOT_EFFECT|BRANCH_EFFECT))!==0){if((flags2&CLEAN)===0)return;e.f^=CLEAN}}this.#roots.push(e)}}function flushSync(fn){var was_flushing_sync=is_flushing_sync;is_flushing_sync=!0;try{for(var result;;){if(flush_tasks(),current_batch===null)return result;current_batch.flush()}}finally{is_flushing_sync=was_flushing_sync}}function infinite_loop_guard(){try{effect_update_depth_exceeded()}catch(error2){invoke_error_boundary(error2,last_scheduled_effect)}} +let eager_block_effects=null;function flush_queued_effects(effects){var length=effects.length;if(length!==0){for(var i=0;i<length;){var effect2=effects[i++];if((effect2.f&(DESTROYED|INERT))===0&&is_dirty(effect2)&&(eager_block_effects=new Set,update_effect(effect2),effect2.deps===null&&effect2.first===null&&effect2.nodes===null&&effect2.teardown===null&&effect2.ac===null&&unlink_effect(effect2),eager_block_effects?.size>0)){old_values.clear();for(const e of eager_block_effects){if((e.f&(DESTROYED| +INERT))!==0)continue;const ordered_effects=[e];let ancestor=e.parent;for(;ancestor!==null;)eager_block_effects.has(ancestor)&&(eager_block_effects.delete(ancestor),ordered_effects.push(ancestor)),ancestor=ancestor.parent;for(let j=ordered_effects.length-1;j>=0;j--){const e2=ordered_effects[j];(e2.f&(DESTROYED|INERT))===0&&update_effect(e2)}}eager_block_effects.clear()}}eager_block_effects=null}}function mark_effects(value,sources,marked,checked){if(!marked.has(value)&&(marked.add(value),value.reactions!== +null))for(const reaction of value.reactions){const flags2=reaction.f;(flags2&DERIVED)!==0?mark_effects(reaction,sources,marked,checked):(flags2&(ASYNC|BLOCK_EFFECT))!==0&&(flags2&DIRTY)===0&&depends_on(reaction,sources,checked)&&(set_signal_status(reaction,DIRTY),schedule_effect(reaction))}}function depends_on(reaction,sources,checked){const depends=checked.get(reaction);if(depends!==void 0)return depends;if(reaction.deps!==null)for(const dep of reaction.deps){if(includes.call(sources,dep))return!0; +if((dep.f&DERIVED)!==0&&depends_on(dep,sources,checked))return checked.set(dep,!0),!0}return checked.set(reaction,!1),!1}function schedule_effect(effect2){current_batch.schedule(effect2)}function reset_branch(effect2,tracked){if(!((effect2.f&BRANCH_EFFECT)!==0&&(effect2.f&CLEAN)!==0)){(effect2.f&DIRTY)!==0?tracked.d.push(effect2):(effect2.f&MAYBE_DIRTY)!==0&&tracked.m.push(effect2),set_signal_status(effect2,CLEAN);for(var e=effect2.first;e!==null;)reset_branch(e,tracked),e=e.next}}function reset_all(effect2){ +set_signal_status(effect2,CLEAN);for(var e=effect2.first;e!==null;)reset_all(e),e=e.next}function createSubscriber(start2){let subscribers=0,version2=source$2(0),stop;return()=>{effect_tracking()&&(get$3(version2),render_effect(()=>(subscribers===0&&(stop=untrack$1(()=>start2(()=>increment$1(version2)))),subscribers+=1,()=>{queue_micro_task(()=>{subscribers-=1,subscribers===0&&(stop?.(),stop=void 0,increment$1(version2))})})))}}var flags=EFFECT_TRANSPARENT|EFFECT_PRESERVED;function boundary(node2,props,children,transform_error){ +new Boundary(node2,props,children,transform_error)}class Boundary{parent;is_pending=!1;transform_error;#anchor;#hydrate_open=hydrating?hydrate_node:null;#props;#children;#effect;#main_effect=null;#pending_effect=null;#failed_effect=null;#offscreen_fragment=null;#local_pending_count=0;#pending_count=0;#pending_count_update_queued=!1;#dirty_effects=new Set;#maybe_dirty_effects=new Set;#effect_pending=null;#effect_pending_subscriber=createSubscriber(()=>(this.#effect_pending=source$2(this.#local_pending_count), +()=>{this.#effect_pending=null}));constructor(node2,props,children,transform_error){this.#anchor=node2,this.#props=props,this.#children=anchor=>{var effect2=active_effect;effect2.b=this,effect2.f|=BOUNDARY_EFFECT,children(anchor)},this.parent=active_effect.b,this.transform_error=transform_error??this.parent?.transform_error??(e=>e),this.#effect=block(()=>{if(hydrating){const comment2=this.#hydrate_open;hydrate_next();const server_rendered_pending=comment2.data===HYDRATION_START_ELSE;if(comment2. +data.startsWith(HYDRATION_START_FAILED)){const serialized_error=JSON.parse(comment2.data.slice(HYDRATION_START_FAILED.length));this.#hydrate_failed_content(serialized_error)}else server_rendered_pending?this.#hydrate_pending_content():this.#hydrate_resolved_content()}else this.#render()},flags),hydrating&&(this.#anchor=hydrate_node)}#hydrate_resolved_content(){try{this.#main_effect=branch(()=>this.#children(this.#anchor))}catch(error2){this.error(error2)}}#hydrate_failed_content(error2){const failed=this.#props. +failed;failed&&(this.#failed_effect=branch(()=>{failed(this.#anchor,()=>error2,()=>()=>{})}))}#hydrate_pending_content(){const pending=this.#props.pending;pending&&(this.is_pending=!0,this.#pending_effect=branch(()=>pending(this.#anchor)),queue_micro_task(()=>{var fragment=this.#offscreen_fragment=document.createDocumentFragment(),anchor=create_text();fragment.append(anchor),this.#main_effect=this.#run(()=>branch(()=>this.#children(anchor))),this.#pending_count===0&&(this.#anchor.before(fragment), +this.#offscreen_fragment=null,pause_effect(this.#pending_effect,()=>{this.#pending_effect=null}),this.#resolve(current_batch))}))}#render(){try{if(this.is_pending=this.has_pending_snippet(),this.#pending_count=0,this.#local_pending_count=0,this.#main_effect=branch(()=>{this.#children(this.#anchor)}),this.#pending_count>0){var fragment=this.#offscreen_fragment=document.createDocumentFragment();move_effect(this.#main_effect,fragment);const pending=this.#props.pending;this.#pending_effect=branch(()=>pending( +this.#anchor))}else this.#resolve(current_batch)}catch(error2){this.error(error2)}}#resolve(batch){this.is_pending=!1,batch.transfer_effects(this.#dirty_effects,this.#maybe_dirty_effects)}defer_effect(effect2){defer_effect(effect2,this.#dirty_effects,this.#maybe_dirty_effects)}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!this.#props.pending}#run(fn){var previous_effect=active_effect,previous_reaction=active_reaction,previous_ctx=component_context; +set_active_effect(this.#effect),set_active_reaction(this.#effect),set_component_context(this.#effect.ctx);try{return Batch.ensure(),fn()}catch(e){return handle_error$1(e),null}finally{set_active_effect(previous_effect),set_active_reaction(previous_reaction),set_component_context(previous_ctx)}}#update_pending_count(d2,batch){if(!this.has_pending_snippet()){this.parent&&this.parent.#update_pending_count(d2,batch);return}this.#pending_count+=d2,this.#pending_count===0&&(this.#resolve(batch),this.#pending_effect&& +pause_effect(this.#pending_effect,()=>{this.#pending_effect=null}),this.#offscreen_fragment&&(this.#anchor.before(this.#offscreen_fragment),this.#offscreen_fragment=null))}update_pending_count(d2,batch){this.#update_pending_count(d2,batch),this.#local_pending_count+=d2,!(!this.#effect_pending||this.#pending_count_update_queued)&&(this.#pending_count_update_queued=!0,queue_micro_task(()=>{this.#pending_count_update_queued=!1,this.#effect_pending&&internal_set(this.#effect_pending,this.#local_pending_count)}))}get_effect_pending(){ +return this.#effect_pending_subscriber(),get$3(this.#effect_pending)}error(error2){var onerror=this.#props.onerror;let failed=this.#props.failed;if(!onerror&&!failed)throw error2;this.#main_effect&&(destroy_effect(this.#main_effect),this.#main_effect=null),this.#pending_effect&&(destroy_effect(this.#pending_effect),this.#pending_effect=null),this.#failed_effect&&(destroy_effect(this.#failed_effect),this.#failed_effect=null),hydrating&&(set_hydrate_node(this.#hydrate_open),next$1(),set_hydrate_node( +skip_nodes()));var did_reset=!1,calling_on_error=!1;const reset2=()=>{if(did_reset){svelte_boundary_reset_noop();return}did_reset=!0,calling_on_error&&svelte_boundary_reset_onerror(),this.#failed_effect!==null&&pause_effect(this.#failed_effect,()=>{this.#failed_effect=null}),this.#run(()=>{this.#render()})},handle_error_result=transformed_error=>{try{calling_on_error=!0,onerror?.(transformed_error,reset2),calling_on_error=!1}catch(error3){invoke_error_boundary(error3,this.#effect&&this.#effect.parent)} +failed&&(this.#failed_effect=this.#run(()=>{try{return branch(()=>{var effect2=active_effect;effect2.b=this,effect2.f|=BOUNDARY_EFFECT,failed(this.#anchor,()=>transformed_error,()=>reset2)})}catch(error3){return invoke_error_boundary(error3,this.#effect.parent),null}}))};queue_micro_task(()=>{var result;try{result=this.transform_error(error2)}catch(e){invoke_error_boundary(e,this.#effect&&this.#effect.parent);return}result!==null&&typeof result=="object"&&typeof result.then=="function"?result.then( +handle_error_result,e=>invoke_error_boundary(e,this.#effect&&this.#effect.parent)):handle_error_result(result)})}}function flatten(blockers,sync,async,fn){const d2=is_runes()?derived:derived_safe_equal;var pending=blockers.filter(b=>!b.settled);if(async.length===0&&pending.length===0){fn(sync.map(d2));return}var parent=active_effect,restore=capture(),blocker_promise=pending.length===1?pending[0].promise:pending.length>1?Promise.all(pending.map(b=>b.promise)):null;function finish(values){restore(); +try{fn(values)}catch(error2){(parent.f&DESTROYED)===0&&invoke_error_boundary(error2,parent)}unset_context()}if(async.length===0){blocker_promise.then(()=>finish(sync.map(d2)));return}var decrement_pending=increment_pending();function run2(){Promise.all(async.map(expression=>async_derived(expression))).then(result=>finish([...sync.map(d2),...result])).catch(error2=>invoke_error_boundary(error2,parent)).finally(()=>decrement_pending())}blocker_promise?blocker_promise.then(()=>{restore(),run2(),unset_context()}): +run2()}function capture(){var previous_effect=active_effect,previous_reaction=active_reaction,previous_component_context=component_context,previous_batch=current_batch;return function(activate_batch=!0){set_active_effect(previous_effect),set_active_reaction(previous_reaction),set_component_context(previous_component_context),activate_batch&&(previous_effect.f&DESTROYED)===0&&(previous_batch?.activate(),previous_batch?.apply())}}function unset_context(deactivate_batch=!0){set_active_effect(null), +set_active_reaction(null),set_component_context(null),deactivate_batch&¤t_batch?.deactivate()}function increment_pending(){var effect2=active_effect,boundary2=effect2.b,batch=current_batch,blocking=boundary2.is_rendered();return boundary2.update_pending_count(1,batch),batch.increment(blocking,effect2),(skip=!1)=>{boundary2.update_pending_count(-1,batch),batch.decrement(blocking,effect2,skip)}}function derived(fn){var flags2=DERIVED|DIRTY,parent_derived=active_reaction!==null&&(active_reaction. +f&DERIVED)!==0?active_reaction:null;return active_effect!==null&&(active_effect.f|=EFFECT_PRESERVED),{ctx:component_context,deps:null,effects:null,equals,f:flags2,fn,reactions:null,rv:0,v:UNINITIALIZED,wv:0,parent:parent_derived??active_effect,ac:null}}function async_derived(fn,label,location2){let parent=active_effect;parent===null&&async_derived_orphan();var promise=void 0,signal=source$2(UNINITIALIZED),should_suspend=!active_reaction,deferreds=new Map;return async_effect(()=>{var effect2=active_effect, +d2=deferred();promise=d2.promise;try{Promise.resolve(fn()).then(d2.resolve,d2.reject).finally(unset_context)}catch(error2){d2.reject(error2),unset_context()}var batch=current_batch;if(should_suspend){if((effect2.f&REACTION_RAN)!==0)var decrement_pending=increment_pending();if(parent.b.is_rendered())deferreds.get(batch)?.reject(STALE_REACTION),deferreds.delete(batch);else{for(const d3 of deferreds.values())d3.reject(STALE_REACTION);deferreds.clear()}deferreds.set(batch,d2)}const handler=(value,error2=void 0)=>{ +if(decrement_pending){var skip=error2===STALE_REACTION;decrement_pending(skip)}if(!(error2===STALE_REACTION||(effect2.f&DESTROYED)!==0)){if(batch.activate(),error2)signal.f|=ERROR_VALUE,internal_set(signal,error2);else{(signal.f&ERROR_VALUE)!==0&&(signal.f^=ERROR_VALUE),internal_set(signal,value);for(const[b,d3]of deferreds){if(deferreds.delete(b),b===batch)break;d3.reject(STALE_REACTION)}}batch.deactivate()}};d2.promise.then(handler,e=>handler(null,e||"unknown"))}),teardown(()=>{for(const d2 of deferreds. +values())d2.reject(STALE_REACTION)}),new Promise(fulfil=>{function next2(p2){function go2(){p2===promise?fulfil(signal):next2(promise)}p2.then(go2,go2)}next2(promise)})}function user_derived(fn){const d2=derived(fn);return push_reaction_value(d2),d2}function derived_safe_equal(fn){const signal=derived(fn);return signal.equals=safe_equals,signal}function destroy_derived_effects(derived2){var effects=derived2.effects;if(effects!==null){derived2.effects=null;for(var i=0;i<effects.length;i+=1)destroy_effect( +effects[i])}}function get_derived_parent_effect(derived2){for(var parent=derived2.parent;parent!==null;){if((parent.f&DERIVED)===0)return(parent.f&DESTROYED)===0?parent:null;parent=parent.parent}return null}function execute_derived(derived2){var value,prev_active_effect=active_effect;set_active_effect(get_derived_parent_effect(derived2));try{derived2.f&=~WAS_MARKED,destroy_derived_effects(derived2),value=update_reaction(derived2)}finally{set_active_effect(prev_active_effect)}return value}function update_derived(derived2){ +var old_value=derived2.v,value=execute_derived(derived2);if(!derived2.equals(value)&&(derived2.wv=increment_write_version(),(!current_batch?.is_fork||derived2.deps===null)&&(derived2.v=value,current_batch?.capture(derived2,old_value,!0),derived2.deps===null))){set_signal_status(derived2,CLEAN);return}is_destroying_effect||(batch_values!==null?(effect_tracking()||current_batch?.is_fork)&&batch_values.set(derived2,value):update_derived_status(derived2))}function freeze_derived_effects(derived2){if(derived2. +effects!==null)for(const e of derived2.effects)(e.teardown||e.ac)&&(e.teardown?.(),e.ac?.abort(STALE_REACTION),e.teardown=noop$3,e.ac=null,remove_reactions(e,0),destroy_effect_children(e))}function unfreeze_derived_effects(derived2){if(derived2.effects!==null)for(const e of derived2.effects)e.teardown&&update_effect(e)}let eager_effects=new Set;const old_values=new Map;let eager_effects_deferred=!1;function source$2(v,stack){var signal={f:0,v,reactions:null,equals,rv:0,wv:0};return signal}function state$1(v,stack){ +const s2=source$2(v);return push_reaction_value(s2),s2}function mutable_source(initial_value,immutable=!1,trackable=!0){const s2=source$2(initial_value);return immutable||(s2.equals=safe_equals),legacy_mode_flag&&trackable&&component_context!==null&&component_context.l!==null&&(component_context.l.s??=[]).push(s2),s2}function set$1(source2,value,should_proxy=!1){active_reaction!==null&&(!untracking||(active_reaction.f&EAGER_EFFECT)!==0)&&is_runes()&&(active_reaction.f&(DERIVED|BLOCK_EFFECT|ASYNC| +EAGER_EFFECT))!==0&&(current_sources===null||!includes.call(current_sources,source2))&&state_unsafe_mutation();let new_value=should_proxy?proxy(value):value;return internal_set(source2,new_value,legacy_updates)}function internal_set(source2,value,updated_during_traversal=null){if(!source2.equals(value)){var old_value=source2.v;is_destroying_effect?old_values.set(source2,value):old_values.set(source2,old_value),source2.v=value;var batch=Batch.ensure();if(batch.capture(source2,old_value),(source2. +f&DERIVED)!==0){const derived2=source2;(source2.f&DIRTY)!==0&&execute_derived(derived2),batch_values===null&&update_derived_status(derived2)}source2.wv=increment_write_version(),mark_reactions(source2,DIRTY,updated_during_traversal),is_runes()&&active_effect!==null&&(active_effect.f&CLEAN)!==0&&(active_effect.f&(BRANCH_EFFECT|ROOT_EFFECT))===0&&(untracked_writes===null?set_untracked_writes([source2]):untracked_writes.push(source2)),!batch.is_fork&&eager_effects.size>0&&!eager_effects_deferred&&flush_eager_effects()} +return value}function flush_eager_effects(){eager_effects_deferred=!1;for(const effect2 of eager_effects)(effect2.f&CLEAN)!==0&&set_signal_status(effect2,MAYBE_DIRTY),is_dirty(effect2)&&update_effect(effect2);eager_effects.clear()}function update$1(source2,d2=1){var value=get$3(source2),result=d2===1?value++:value--;return set$1(source2,value),result}function increment$1(source2){set$1(source2,source2.v+1)}function mark_reactions(signal,status,updated_during_traversal){var reactions=signal.reactions; +if(reactions!==null)for(var runes=is_runes(),length=reactions.length,i=0;i<length;i++){var reaction=reactions[i],flags2=reaction.f;if(!(!runes&&reaction===active_effect)){var not_dirty=(flags2&DIRTY)===0;if(not_dirty&&set_signal_status(reaction,status),(flags2&DERIVED)!==0){var derived2=reaction;batch_values?.delete(derived2),(flags2&WAS_MARKED)===0&&(flags2&CONNECTED&&(reaction.f|=WAS_MARKED),mark_reactions(derived2,MAYBE_DIRTY,updated_during_traversal))}else if(not_dirty){var effect2=reaction; +(flags2&BLOCK_EFFECT)!==0&&eager_block_effects!==null&&eager_block_effects.add(effect2),updated_during_traversal!==null?updated_during_traversal.push(effect2):schedule_effect(effect2)}}}}function proxy(value){if(typeof value!="object"||value===null||STATE_SYMBOL in value)return value;const prototype=get_prototype_of(value);if(prototype!==object_prototype&&prototype!==array_prototype)return value;var sources=new Map,is_proxied_array=is_array(value),version2=state$1(0),parent_version=update_version, +with_parent=fn=>{if(update_version===parent_version)return fn();var reaction=active_reaction,version3=update_version;set_active_reaction(null),set_update_version(parent_version);var result=fn();return set_active_reaction(reaction),set_update_version(version3),result};return is_proxied_array&&sources.set("length",state$1(value.length)),new Proxy(value,{defineProperty(_,prop2,descriptor){(!("value"in descriptor)||descriptor.configurable===!1||descriptor.enumerable===!1||descriptor.writable===!1)&& +state_descriptors_fixed();var s2=sources.get(prop2);return s2===void 0?with_parent(()=>{var s3=state$1(descriptor.value);return sources.set(prop2,s3),s3}):set$1(s2,descriptor.value,!0),!0},deleteProperty(target2,prop2){var s2=sources.get(prop2);if(s2===void 0){if(prop2 in target2){const s3=with_parent(()=>state$1(UNINITIALIZED));sources.set(prop2,s3),increment$1(version2)}}else set$1(s2,UNINITIALIZED),increment$1(version2);return!0},get(target2,prop2,receiver){if(prop2===STATE_SYMBOL)return value; +var s2=sources.get(prop2),exists=prop2 in target2;if(s2===void 0&&(!exists||get_descriptor(target2,prop2)?.writable)&&(s2=with_parent(()=>{var p2=proxy(exists?target2[prop2]:UNINITIALIZED),s3=state$1(p2);return s3}),sources.set(prop2,s2)),s2!==void 0){var v=get$3(s2);return v===UNINITIALIZED?void 0:v}return Reflect.get(target2,prop2,receiver)},getOwnPropertyDescriptor(target2,prop2){var descriptor=Reflect.getOwnPropertyDescriptor(target2,prop2);if(descriptor&&"value"in descriptor){var s2=sources. +get(prop2);s2&&(descriptor.value=get$3(s2))}else if(descriptor===void 0){var source2=sources.get(prop2),value2=source2?.v;if(source2!==void 0&&value2!==UNINITIALIZED)return{enumerable:!0,configurable:!0,value:value2,writable:!0}}return descriptor},has(target2,prop2){if(prop2===STATE_SYMBOL)return!0;var s2=sources.get(prop2),has=s2!==void 0&&s2.v!==UNINITIALIZED||Reflect.has(target2,prop2);if(s2!==void 0||active_effect!==null&&(!has||get_descriptor(target2,prop2)?.writable)){s2===void 0&&(s2=with_parent( +()=>{var p2=has?proxy(target2[prop2]):UNINITIALIZED,s3=state$1(p2);return s3}),sources.set(prop2,s2));var value2=get$3(s2);if(value2===UNINITIALIZED)return!1}return has},set(target2,prop2,value2,receiver){var s2=sources.get(prop2),has=prop2 in target2;if(is_proxied_array&&prop2==="length")for(var i=value2;i<s2.v;i+=1){var other_s=sources.get(i+"");other_s!==void 0?set$1(other_s,UNINITIALIZED):i in target2&&(other_s=with_parent(()=>state$1(UNINITIALIZED)),sources.set(i+"",other_s))}if(s2===void 0) +(!has||get_descriptor(target2,prop2)?.writable)&&(s2=with_parent(()=>state$1(void 0)),set$1(s2,proxy(value2)),sources.set(prop2,s2));else{has=s2.v!==UNINITIALIZED;var p2=with_parent(()=>proxy(value2));set$1(s2,p2)}var descriptor=Reflect.getOwnPropertyDescriptor(target2,prop2);if(descriptor?.set&&descriptor.set.call(receiver,value2),!has){if(is_proxied_array&&typeof prop2=="string"){var ls=sources.get("length"),n=Number(prop2);Number.isInteger(n)&&n>=ls.v&&set$1(ls,n+1)}increment$1(version2)}return!0}, +ownKeys(target2){get$3(version2);var own_keys=Reflect.ownKeys(target2).filter(key3=>{var source3=sources.get(key3);return source3===void 0||source3.v!==UNINITIALIZED});for(var[key2,source2]of sources)source2.v!==UNINITIALIZED&&!(key2 in target2)&&own_keys.push(key2);return own_keys},setPrototypeOf(){state_prototype_fixed()}})}function get_proxied_value(value){try{if(value!==null&&typeof value=="object"&&STATE_SYMBOL in value)return value[STATE_SYMBOL]}catch{}return value}function is(a,b){return Object. +is(get_proxied_value(a),get_proxied_value(b))}var $window,$document,is_firefox,first_child_getter,next_sibling_getter;function init_operations(){if($window===void 0){$window=window,$document=document,is_firefox=/Firefox/.test(navigator.userAgent);var element_prototype=Element.prototype,node_prototype=Node.prototype,text_prototype=Text.prototype;first_child_getter=get_descriptor(node_prototype,"firstChild").get,next_sibling_getter=get_descriptor(node_prototype,"nextSibling").get,is_extensible(element_prototype)&& +(element_prototype.__click=void 0,element_prototype.__className=void 0,element_prototype.__attributes=null,element_prototype.__style=void 0,element_prototype.__e=void 0),is_extensible(text_prototype)&&(text_prototype.__t=void 0)}}function create_text(value=""){return document.createTextNode(value)}function get_first_child(node2){return first_child_getter.call(node2)}function get_next_sibling(node2){return next_sibling_getter.call(node2)}function child(node2,is_text){if(!hydrating)return get_first_child( +node2);var child2=get_first_child(hydrate_node);if(child2===null)child2=hydrate_node.appendChild(create_text());else if(is_text&&child2.nodeType!==TEXT_NODE){var text2=create_text();return child2?.before(text2),set_hydrate_node(text2),text2}return is_text&&merge_text_nodes(child2),set_hydrate_node(child2),child2}function first_child(node2,is_text=!1){if(!hydrating){var first=get_first_child(node2);return first instanceof Comment&&first.data===""?get_next_sibling(first):first}if(is_text){if(hydrate_node?. +nodeType!==TEXT_NODE){var text2=create_text();return hydrate_node?.before(text2),set_hydrate_node(text2),text2}merge_text_nodes(hydrate_node)}return hydrate_node}function sibling(node2,count=1,is_text=!1){let next_sibling=hydrating?hydrate_node:node2;for(var last_sibling;count--;)last_sibling=next_sibling,next_sibling=get_next_sibling(next_sibling);if(!hydrating)return next_sibling;if(is_text){if(next_sibling?.nodeType!==TEXT_NODE){var text2=create_text();return next_sibling===null?last_sibling?. +after(text2):next_sibling.before(text2),set_hydrate_node(text2),text2}merge_text_nodes(next_sibling)}return set_hydrate_node(next_sibling),next_sibling}function clear_text_content(node2){node2.textContent=""}function should_defer_append(){return!1}function create_element(tag,namespace,is2){return document.createElementNS(namespace??NAMESPACE_HTML,tag,void 0)}function merge_text_nodes(text2){if(text2.nodeValue.length<65536)return;let next2=text2.nextSibling;for(;next2!==null&&next2.nodeType===TEXT_NODE;) +next2.remove(),text2.nodeValue+=next2.nodeValue,next2=text2.nextSibling}function autofocus(dom,value){if(value){const body2=document.body;dom.autofocus=!0,queue_micro_task(()=>{document.activeElement===body2&&dom.focus()})}}function remove_textarea_child(dom){hydrating&&get_first_child(dom)!==null&&clear_text_content(dom)}let listening_to_form_reset=!1;function add_form_reset_listener(){listening_to_form_reset||(listening_to_form_reset=!0,document.addEventListener("reset",evt=>{Promise.resolve(). +then(()=>{if(!evt.defaultPrevented)for(const e of evt.target.elements)e.__on_r?.()})},{capture:!0}))}function listen(target2,events,handler,call_handler_immediately=!0){call_handler_immediately&&handler();for(var name of events)target2.addEventListener(name,handler);teardown(()=>{for(var name2 of events)target2.removeEventListener(name2,handler)})}function without_reactive_context(fn){var previous_reaction=active_reaction,previous_effect=active_effect;set_active_reaction(null),set_active_effect( +null);try{return fn()}finally{set_active_reaction(previous_reaction),set_active_effect(previous_effect)}}function listen_to_event_and_reset_event(element2,event2,handler,on_reset=handler){element2.addEventListener(event2,()=>without_reactive_context(handler));const prev2=element2.__on_r;prev2?element2.__on_r=()=>{prev2(),on_reset(!0)}:element2.__on_r=()=>on_reset(!0),add_form_reset_listener()}function validate_effect(rune){active_effect===null&&(active_reaction===null&&effect_orphan(),effect_in_unowned_derived()), +is_destroying_effect&&effect_in_teardown()}function push_effect(effect2,parent_effect){var parent_last=parent_effect.last;parent_last===null?parent_effect.last=parent_effect.first=effect2:(parent_last.next=effect2,effect2.prev=parent_last,parent_effect.last=effect2)}function create_effect(type2,fn){var parent=active_effect;parent!==null&&(parent.f&INERT)!==0&&(type2|=INERT);var effect2={ctx:component_context,deps:null,nodes:null,f:type2|DIRTY|CONNECTED,first:null,fn,last:null,next:null,parent,b:parent&& +parent.b,prev:null,teardown:null,wv:0,ac:null};current_batch?.register_created_effect(effect2);var e=effect2;if((type2&EFFECT)!==0)collected_effects!==null?collected_effects.push(effect2):Batch.ensure().schedule(effect2);else if(fn!==null){try{update_effect(effect2)}catch(e2){throw destroy_effect(effect2),e2}e.deps===null&&e.teardown===null&&e.nodes===null&&e.first===e.last&&(e.f&EFFECT_PRESERVED)===0&&(e=e.first,(type2&BLOCK_EFFECT)!==0&&(type2&EFFECT_TRANSPARENT)!==0&&e!==null&&(e.f|=EFFECT_TRANSPARENT))} +if(e!==null&&(e.parent=parent,parent!==null&&push_effect(e,parent),active_reaction!==null&&(active_reaction.f&DERIVED)!==0&&(type2&ROOT_EFFECT)===0)){var derived2=active_reaction;(derived2.effects??=[]).push(e)}return effect2}function effect_tracking(){return active_reaction!==null&&!untracking}function teardown(fn){const effect2=create_effect(RENDER_EFFECT,null);return set_signal_status(effect2,CLEAN),effect2.teardown=fn,effect2}function user_effect(fn){validate_effect();var flags2=active_effect. +f,defer=!active_reaction&&(flags2&BRANCH_EFFECT)!==0&&(flags2&REACTION_RAN)===0;if(defer){var context=component_context;(context.e??=[]).push(fn)}else return create_user_effect(fn)}function create_user_effect(fn){return create_effect(EFFECT|USER_EFFECT,fn)}function user_pre_effect(fn){return validate_effect(),create_effect(RENDER_EFFECT|USER_EFFECT,fn)}function effect_root(fn){Batch.ensure();const effect2=create_effect(ROOT_EFFECT|EFFECT_PRESERVED,fn);return()=>{destroy_effect(effect2)}}function component_root(fn){ +Batch.ensure();const effect2=create_effect(ROOT_EFFECT|EFFECT_PRESERVED,fn);return(options={})=>new Promise(fulfil=>{options.outro?pause_effect(effect2,()=>{destroy_effect(effect2),fulfil(void 0)}):(destroy_effect(effect2),fulfil(void 0))})}function effect(fn){return create_effect(EFFECT,fn)}function async_effect(fn){return create_effect(ASYNC|EFFECT_PRESERVED,fn)}function render_effect(fn,flags2=0){return create_effect(RENDER_EFFECT|flags2,fn)}function template_effect(fn,sync=[],async=[],blockers=[]){ +flatten(blockers,sync,async,values=>{create_effect(RENDER_EFFECT,()=>fn(...values.map(get$3)))})}function deferred_template_effect(fn,sync=[],async=[],blockers=[]){if(async.length>0||blockers.length>0)var decrement_pending=increment_pending();flatten(blockers,sync,async,values=>{create_effect(EFFECT,()=>fn(...values.map(get$3))),decrement_pending&&decrement_pending()})}function block(fn,flags2=0){var effect2=create_effect(BLOCK_EFFECT|flags2,fn);return effect2}function managed(fn,flags2=0){var effect2=create_effect( +MANAGED_EFFECT|flags2,fn);return effect2}function branch(fn){return create_effect(BRANCH_EFFECT|EFFECT_PRESERVED,fn)}function execute_effect_teardown(effect2){var teardown2=effect2.teardown;if(teardown2!==null){const previously_destroying_effect=is_destroying_effect,previous_reaction=active_reaction;set_is_destroying_effect(!0),set_active_reaction(null);try{teardown2.call(null)}finally{set_is_destroying_effect(previously_destroying_effect),set_active_reaction(previous_reaction)}}}function destroy_effect_children(signal,remove_dom=!1){ +var effect2=signal.first;for(signal.first=signal.last=null;effect2!==null;){const controller=effect2.ac;controller!==null&&without_reactive_context(()=>{controller.abort(STALE_REACTION)});var next2=effect2.next;(effect2.f&ROOT_EFFECT)!==0?effect2.parent=null:destroy_effect(effect2,remove_dom),effect2=next2}}function destroy_block_effect_children(signal){for(var effect2=signal.first;effect2!==null;){var next2=effect2.next;(effect2.f&BRANCH_EFFECT)===0&&destroy_effect(effect2),effect2=next2}}function destroy_effect(effect2,remove_dom=!0){ +var removed=!1;(remove_dom||(effect2.f&HEAD_EFFECT)!==0)&&effect2.nodes!==null&&effect2.nodes.end!==null&&(remove_effect_dom(effect2.nodes.start,effect2.nodes.end),removed=!0),set_signal_status(effect2,DESTROYING),destroy_effect_children(effect2,remove_dom&&!removed),remove_reactions(effect2,0);var transitions=effect2.nodes&&effect2.nodes.t;if(transitions!==null)for(const transition2 of transitions)transition2.stop();execute_effect_teardown(effect2),effect2.f^=DESTROYING,effect2.f|=DESTROYED;var parent=effect2. +parent;parent!==null&&parent.first!==null&&unlink_effect(effect2),effect2.next=effect2.prev=effect2.teardown=effect2.ctx=effect2.deps=effect2.fn=effect2.nodes=effect2.ac=effect2.b=null}function remove_effect_dom(node2,end){for(;node2!==null;){var next2=node2===end?null:get_next_sibling(node2);node2.remove(),node2=next2}}function unlink_effect(effect2){var parent=effect2.parent,prev2=effect2.prev,next2=effect2.next;prev2!==null&&(prev2.next=next2),next2!==null&&(next2.prev=prev2),parent!==null&&(parent. +first===effect2&&(parent.first=next2),parent.last===effect2&&(parent.last=prev2))}function pause_effect(effect2,callback,destroy=!0){var transitions=[];pause_children(effect2,transitions,!0);var fn=()=>{destroy&&destroy_effect(effect2),callback&&callback()},remaining=transitions.length;if(remaining>0){var check=()=>--remaining||fn();for(var transition2 of transitions)transition2.out(check)}else fn()}function pause_children(effect2,transitions,local){if((effect2.f&INERT)===0){effect2.f^=INERT;var t=effect2. +nodes&&effect2.nodes.t;if(t!==null)for(const transition2 of t)(transition2.is_global||local)&&transitions.push(transition2);for(var child2=effect2.first;child2!==null;){var sibling2=child2.next,transparent=(child2.f&EFFECT_TRANSPARENT)!==0||(child2.f&BRANCH_EFFECT)!==0&&(effect2.f&BLOCK_EFFECT)!==0;pause_children(child2,transitions,transparent?local:!1),child2=sibling2}}}function resume_effect(effect2){resume_children(effect2,!0)}function resume_children(effect2,local){if((effect2.f&INERT)!==0){ +effect2.f^=INERT,(effect2.f&CLEAN)===0&&(set_signal_status(effect2,DIRTY),Batch.ensure().schedule(effect2));for(var child2=effect2.first;child2!==null;){var sibling2=child2.next,transparent=(child2.f&EFFECT_TRANSPARENT)!==0||(child2.f&BRANCH_EFFECT)!==0;resume_children(child2,transparent?local:!1),child2=sibling2}var t=effect2.nodes&&effect2.nodes.t;if(t!==null)for(const transition2 of t)(transition2.is_global||local)&&transition2.in()}}function move_effect(effect2,fragment){if(effect2.nodes)for(var node2=effect2. +nodes.start,end=effect2.nodes.end;node2!==null;){var next2=node2===end?null:get_next_sibling(node2);fragment.append(node2),node2=next2}}let is_updating_effect=!1,is_destroying_effect=!1;function set_is_destroying_effect(value){is_destroying_effect=value}let active_reaction=null,untracking=!1;function set_active_reaction(reaction){active_reaction=reaction}let active_effect=null;function set_active_effect(effect2){active_effect=effect2}let current_sources=null;function push_reaction_value(value){active_reaction!== +null&&(current_sources===null?current_sources=[value]:current_sources.push(value))}let new_deps=null,skipped_deps=0,untracked_writes=null;function set_untracked_writes(value){untracked_writes=value}let write_version=1,read_version=0,update_version=read_version;function set_update_version(value){update_version=value}function increment_write_version(){return++write_version}function is_dirty(reaction){var flags2=reaction.f;if((flags2&DIRTY)!==0)return!0;if(flags2&DERIVED&&(reaction.f&=~WAS_MARKED), +(flags2&MAYBE_DIRTY)!==0){for(var dependencies2=reaction.deps,length=dependencies2.length,i=0;i<length;i++){var dependency=dependencies2[i];if(is_dirty(dependency)&&update_derived(dependency),dependency.wv>reaction.wv)return!0}(flags2&CONNECTED)!==0&&batch_values===null&&set_signal_status(reaction,CLEAN)}return!1}function schedule_possible_effect_self_invalidation(signal,effect2,root2=!0){var reactions=signal.reactions;if(reactions!==null&&!(current_sources!==null&&includes.call(current_sources, +signal)))for(var i=0;i<reactions.length;i++){var reaction=reactions[i];(reaction.f&DERIVED)!==0?schedule_possible_effect_self_invalidation(reaction,effect2,!1):effect2===reaction&&(root2?set_signal_status(reaction,DIRTY):(reaction.f&CLEAN)!==0&&set_signal_status(reaction,MAYBE_DIRTY),schedule_effect(reaction))}}function update_reaction(reaction){var previous_deps=new_deps,previous_skipped_deps=skipped_deps,previous_untracked_writes=untracked_writes,previous_reaction=active_reaction,previous_sources=current_sources, +previous_component_context=component_context,previous_untracking=untracking,previous_update_version=update_version,flags2=reaction.f;new_deps=null,skipped_deps=0,untracked_writes=null,active_reaction=(flags2&(BRANCH_EFFECT|ROOT_EFFECT))===0?reaction:null,current_sources=null,set_component_context(reaction.ctx),untracking=!1,update_version=++read_version,reaction.ac!==null&&(without_reactive_context(()=>{reaction.ac.abort(STALE_REACTION)}),reaction.ac=null);try{reaction.f|=REACTION_IS_UPDATING;var fn=reaction. +fn,result=fn();reaction.f|=REACTION_RAN;var deps=reaction.deps,is_fork=current_batch?.is_fork;if(new_deps!==null){var i;if(is_fork||remove_reactions(reaction,skipped_deps),deps!==null&&skipped_deps>0)for(deps.length=skipped_deps+new_deps.length,i=0;i<new_deps.length;i++)deps[skipped_deps+i]=new_deps[i];else reaction.deps=deps=new_deps;if(effect_tracking()&&(reaction.f&CONNECTED)!==0)for(i=skipped_deps;i<deps.length;i++)(deps[i].reactions??=[]).push(reaction)}else!is_fork&&deps!==null&&skipped_deps< +deps.length&&(remove_reactions(reaction,skipped_deps),deps.length=skipped_deps);if(is_runes()&&untracked_writes!==null&&!untracking&&deps!==null&&(reaction.f&(DERIVED|MAYBE_DIRTY|DIRTY))===0)for(i=0;i<untracked_writes.length;i++)schedule_possible_effect_self_invalidation(untracked_writes[i],reaction);if(previous_reaction!==null&&previous_reaction!==reaction){if(read_version++,previous_reaction.deps!==null)for(let i2=0;i2<previous_skipped_deps;i2+=1)previous_reaction.deps[i2].rv=read_version;if(previous_deps!== +null)for(const dep of previous_deps)dep.rv=read_version;untracked_writes!==null&&(previous_untracked_writes===null?previous_untracked_writes=untracked_writes:previous_untracked_writes.push(...untracked_writes))}return(reaction.f&ERROR_VALUE)!==0&&(reaction.f^=ERROR_VALUE),result}catch(error2){return handle_error$1(error2)}finally{reaction.f^=REACTION_IS_UPDATING,new_deps=previous_deps,skipped_deps=previous_skipped_deps,untracked_writes=previous_untracked_writes,active_reaction=previous_reaction, +current_sources=previous_sources,set_component_context(previous_component_context),untracking=previous_untracking,update_version=previous_update_version}}function remove_reaction(signal,dependency){let reactions=dependency.reactions;if(reactions!==null){var index2=index_of.call(reactions,signal);if(index2!==-1){var new_length=reactions.length-1;new_length===0?reactions=dependency.reactions=null:(reactions[index2]=reactions[new_length],reactions.pop())}}if(reactions===null&&(dependency.f&DERIVED)!== +0&&(new_deps===null||!includes.call(new_deps,dependency))){var derived2=dependency;(derived2.f&CONNECTED)!==0&&(derived2.f^=CONNECTED,derived2.f&=~WAS_MARKED),update_derived_status(derived2),freeze_derived_effects(derived2),remove_reactions(derived2,0)}}function remove_reactions(signal,start_index){var dependencies2=signal.deps;if(dependencies2!==null)for(var i=start_index;i<dependencies2.length;i++)remove_reaction(signal,dependencies2[i])}function update_effect(effect2){var flags2=effect2.f;if((flags2& +DESTROYED)===0){set_signal_status(effect2,CLEAN);var previous_effect=active_effect,was_updating_effect=is_updating_effect;active_effect=effect2,is_updating_effect=!0;try{(flags2&(BLOCK_EFFECT|MANAGED_EFFECT))!==0?destroy_block_effect_children(effect2):destroy_effect_children(effect2),execute_effect_teardown(effect2);var teardown2=update_reaction(effect2);effect2.teardown=typeof teardown2=="function"?teardown2:null,effect2.wv=write_version;var dep}finally{is_updating_effect=was_updating_effect,active_effect= +previous_effect}}}async function tick(){await Promise.resolve(),flushSync()}function settled(){return Batch.ensure().settled()}function get$3(signal){var flags2=signal.f,is_derived=(flags2&DERIVED)!==0;if(active_reaction!==null&&!untracking){var destroyed=active_effect!==null&&(active_effect.f&DESTROYED)!==0;if(!destroyed&&(current_sources===null||!includes.call(current_sources,signal))){var deps=active_reaction.deps;if((active_reaction.f&REACTION_IS_UPDATING)!==0)signal.rv<read_version&&(signal. +rv=read_version,new_deps===null&&deps!==null&&deps[skipped_deps]===signal?skipped_deps++:new_deps===null?new_deps=[signal]:new_deps.push(signal));else{(active_reaction.deps??=[]).push(signal);var reactions=signal.reactions;reactions===null?signal.reactions=[active_reaction]:includes.call(reactions,active_reaction)||reactions.push(active_reaction)}}}if(is_destroying_effect&&old_values.has(signal))return old_values.get(signal);if(is_derived){var derived2=signal;if(is_destroying_effect){var value=derived2. +v;return((derived2.f&CLEAN)===0&&derived2.reactions!==null||depends_on_old_values(derived2))&&(value=execute_derived(derived2)),old_values.set(derived2,value),value}var should_connect=(derived2.f&CONNECTED)===0&&!untracking&&active_reaction!==null&&(is_updating_effect||(active_reaction.f&CONNECTED)!==0),is_new=(derived2.f&REACTION_RAN)===0;is_dirty(derived2)&&(should_connect&&(derived2.f|=CONNECTED),update_derived(derived2)),should_connect&&!is_new&&(unfreeze_derived_effects(derived2),reconnect( +derived2))}if(batch_values?.has(signal))return batch_values.get(signal);if((signal.f&ERROR_VALUE)!==0)throw signal.v;return signal.v}function reconnect(derived2){if(derived2.f|=CONNECTED,derived2.deps!==null)for(const dep of derived2.deps)(dep.reactions??=[]).push(derived2),(dep.f&DERIVED)!==0&&(dep.f&CONNECTED)===0&&(unfreeze_derived_effects(dep),reconnect(dep))}function depends_on_old_values(derived2){if(derived2.v===UNINITIALIZED)return!0;if(derived2.deps===null)return!1;for(const dep of derived2. +deps)if(old_values.has(dep)||(dep.f&DERIVED)!==0&&depends_on_old_values(dep))return!0;return!1}function untrack$1(fn){var previous_untracking=untracking;try{return untracking=!0,fn()}finally{untracking=previous_untracking}}function deep_read_state(value){if(!(typeof value!="object"||!value||value instanceof EventTarget)){if(STATE_SYMBOL in value)deep_read(value);else if(!Array.isArray(value))for(let key2 in value){const prop2=value[key2];typeof prop2=="object"&&prop2&&STATE_SYMBOL in prop2&&deep_read( +prop2)}}}function deep_read(value,visited=new Set){if(typeof value=="object"&&value!==null&&!(value instanceof EventTarget)&&!visited.has(value)){visited.add(value),value instanceof Date&&value.getTime();for(let key2 in value)try{deep_read(value[key2],visited)}catch{}const proto=get_prototype_of(value);if(proto!==Object.prototype&&proto!==Array.prototype&&proto!==Map.prototype&&proto!==Set.prototype&&proto!==Date.prototype){const descriptors=get_descriptors(proto);for(let key2 in descriptors){const get2=descriptors[key2]. +get;if(get2)try{get2.call(value)}catch{}}}}}function createAttachmentKey(){return Symbol(ATTACHMENT_KEY)}function is_capture_event(name){return name.endsWith("capture")&&name!=="gotpointercapture"&&name!=="lostpointercapture"}const DELEGATED_EVENTS=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove", +"touchstart"];function can_delegate_event(event_name){return DELEGATED_EVENTS.includes(event_name)}const ATTRIBUTE_ALIASES={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function normalize_attribute(name){ +return name=name.toLowerCase(),ATTRIBUTE_ALIASES[name]??name}const PASSIVE_EVENTS=["touchstart","touchmove"];function is_passive_event(name){return PASSIVE_EVENTS.includes(name)}const RAW_TEXT_ELEMENTS=["textarea","script","style","title"];function is_raw_text_element(name){return RAW_TEXT_ELEMENTS.includes(name)}const event_symbol=Symbol("events"),all_registered_events=new Set,root_event_handles=new Set;function replay_events(dom){if(!hydrating)return;dom.removeAttribute("onload"),dom.removeAttribute( +"onerror");const event2=dom.__e;event2!==void 0&&(dom.__e=void 0,queueMicrotask(()=>{dom.isConnected&&dom.dispatchEvent(event2)}))}function create_event(event_name,dom,handler,options={}){function target_handler(event2){if(options.capture||handle_event_propagation.call(dom,event2),!event2.cancelBubble)return without_reactive_context(()=>handler?.call(this,event2))}return event_name.startsWith("pointer")||event_name.startsWith("touch")||event_name==="wheel"?queue_micro_task(()=>{dom.addEventListener( +event_name,target_handler,options)}):dom.addEventListener(event_name,target_handler,options),target_handler}function on(element2,type2,handler,options={}){var target_handler=create_event(type2,element2,handler,options);return()=>{element2.removeEventListener(type2,target_handler,options)}}function event(event_name,dom,handler,capture2,passive){var options={capture:capture2,passive},target_handler=create_event(event_name,dom,handler,options);(dom===document.body||dom===window||dom===document||dom instanceof +HTMLMediaElement)&&teardown(()=>{dom.removeEventListener(event_name,target_handler,options)})}function delegated(event_name,element2,handler){(element2[event_symbol]??={})[event_name]=handler}function delegate(events){for(var i=0;i<events.length;i++)all_registered_events.add(events[i]);for(var fn of root_event_handles)fn(events)}let last_propagated_event=null;function handle_event_propagation(event2){var handler_element=this,owner_document=handler_element.ownerDocument,event_name=event2.type,path2=event2. +composedPath?.()||[],current_target=path2[0]||event2.target;last_propagated_event=event2;var path_idx=0,handled_at=last_propagated_event===event2&&event2[event_symbol];if(handled_at){var at_idx=path2.indexOf(handled_at);if(at_idx!==-1&&(handler_element===document||handler_element===window)){event2[event_symbol]=handler_element;return}var handler_idx=path2.indexOf(handler_element);if(handler_idx===-1)return;at_idx<=handler_idx&&(path_idx=at_idx)}if(current_target=path2[path_idx]||event2.target,current_target!== +handler_element){define_property(event2,"currentTarget",{configurable:!0,get(){return current_target||owner_document}});var previous_reaction=active_reaction,previous_effect=active_effect;set_active_reaction(null),set_active_effect(null);try{for(var throw_error,other_errors=[];current_target!==null;){var parent_element2=current_target.assignedSlot||current_target.parentNode||current_target.host||null;try{var delegated2=current_target[event_symbol]?.[event_name];delegated2!=null&&(!current_target. +disabled||event2.target===current_target)&&delegated2.call(current_target,event2)}catch(error2){throw_error?other_errors.push(error2):throw_error=error2}if(event2.cancelBubble||parent_element2===handler_element||parent_element2===null)break;current_target=parent_element2}if(throw_error){for(let error2 of other_errors)queueMicrotask(()=>{throw error2});throw throw_error}}finally{event2[event_symbol]=handler_element,delete event2.currentTarget,set_active_reaction(previous_reaction),set_active_effect( +previous_effect)}}}const policy=globalThis?.window?.trustedTypes&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:html2=>html2});function create_trusted_html(html2){return policy?.createHTML(html2)??html2}function create_fragment_from_html(html2){var elem=create_element("template");return elem.innerHTML=create_trusted_html(html2.replaceAll("<!>","<!---->")),elem.content}function assign_nodes(start2,end){var effect2=active_effect;effect2.nodes===null&&(effect2.nodes= +{start:start2,end,a:null,t:null})}function from_html(content2,flags2){var is_fragment=(flags2&TEMPLATE_FRAGMENT)!==0,use_import_node=(flags2&TEMPLATE_USE_IMPORT_NODE)!==0,node2,has_start=!content2.startsWith("<!>");return()=>{if(hydrating)return assign_nodes(hydrate_node,null),hydrate_node;node2===void 0&&(node2=create_fragment_from_html(has_start?content2:"<!>"+content2),is_fragment||(node2=get_first_child(node2)));var clone2=use_import_node||is_firefox?document.importNode(node2,!0):node2.cloneNode( +!0);if(is_fragment){var start2=get_first_child(clone2),end=clone2.lastChild;assign_nodes(start2,end)}else assign_nodes(clone2,clone2);return clone2}}function from_namespace(content2,flags2,ns="svg"){var has_start=!content2.startsWith("<!>"),wrapped=`<${ns}>${has_start?content2:"<!>"+content2}</${ns}>`,node2;return()=>{if(hydrating)return assign_nodes(hydrate_node,null),hydrate_node;if(!node2){var fragment=create_fragment_from_html(wrapped),root2=get_first_child(fragment);node2=get_first_child(root2)} +var clone2=node2.cloneNode(!0);return assign_nodes(clone2,clone2),clone2}}function from_svg(content2,flags2){return from_namespace(content2,flags2,"svg")}function text$8(value=""){if(!hydrating){var t=create_text(value+"");return assign_nodes(t,t),t}var node2=hydrate_node;return node2.nodeType!==TEXT_NODE?(node2.before(node2=create_text()),set_hydrate_node(node2)):merge_text_nodes(node2),assign_nodes(node2,node2),node2}function comment$2(){if(hydrating)return assign_nodes(hydrate_node,null),hydrate_node; +var frag=document.createDocumentFragment(),start2=document.createComment(""),anchor=create_text();return frag.append(start2,anchor),assign_nodes(start2,anchor),frag}function append(anchor,dom){if(hydrating){var effect2=active_effect;((effect2.f&REACTION_RAN)===0||effect2.nodes.end===null)&&(effect2.nodes.end=hydrate_node),hydrate_next();return}anchor!==null&&anchor.before(dom)}function props_id(){if(hydrating&&hydrate_node&&hydrate_node.nodeType===COMMENT_NODE&&hydrate_node.textContent?.startsWith( +"$")){const id2=hydrate_node.textContent.substring(1);return hydrate_next(),id2}return(window.__svelte??={}).uid??=1,`c${window.__svelte.uid++}`}let should_intro=!0;function set_should_intro(value){should_intro=value}function set_text(text2,value){var str=value==null?"":typeof value=="object"?`${value}`:value;str!==(text2.__t??=text2.nodeValue)&&(text2.__t=str,text2.nodeValue=`${str}`)}function mount(component2,options){return _mount(component2,options)}function hydrate(component2,options){init_operations(), +options.intro=options.intro??!1;const target2=options.target,was_hydrating=hydrating,previous_hydrate_node=hydrate_node;try{for(var anchor=get_first_child(target2);anchor&&(anchor.nodeType!==COMMENT_NODE||anchor.data!==HYDRATION_START);)anchor=get_next_sibling(anchor);if(!anchor)throw HYDRATION_ERROR;set_hydrating(!0),set_hydrate_node(anchor);const instance=_mount(component2,{...options,anchor});return set_hydrating(!1),instance}catch(error2){if(error2 instanceof Error&&error2.message.split(` +`).some(line=>line.startsWith("https://svelte.dev/e/")))throw error2;return error2!==HYDRATION_ERROR&&console.warn("Failed to hydrate: ",error2),options.recover===!1&&hydration_failed(),init_operations(),clear_text_content(target2),set_hydrating(!1),mount(component2,options)}finally{set_hydrating(was_hydrating),set_hydrate_node(previous_hydrate_node)}}const listeners=new Map;function _mount(Component,{target:target2,anchor,props={},events,context,intro=!0,transformError}){init_operations();var component2=void 0, +unmount2=component_root(()=>{var anchor_node=anchor??target2.appendChild(create_text());boundary(anchor_node,{pending:()=>{}},anchor_node2=>{push$1({});var ctx=component_context;if(context&&(ctx.c=context),events&&(props.$$events=events),hydrating&&assign_nodes(anchor_node2,null),should_intro=intro,component2=Component(anchor_node2,props)||{},should_intro=!0,hydrating&&(active_effect.nodes.end=hydrate_node,hydrate_node===null||hydrate_node.nodeType!==COMMENT_NODE||hydrate_node.data!==HYDRATION_END)) +throw hydration_mismatch(),HYDRATION_ERROR;pop()},transformError);var registered_events=new Set,event_handle=events2=>{for(var i=0;i<events2.length;i++){var event_name=events2[i];if(!registered_events.has(event_name)){registered_events.add(event_name);var passive=is_passive_event(event_name);for(const node2 of[target2,document]){var counts=listeners.get(node2);counts===void 0&&(counts=new Map,listeners.set(node2,counts));var count=counts.get(event_name);count===void 0?(node2.addEventListener(event_name, +handle_event_propagation,{passive}),counts.set(event_name,1)):counts.set(event_name,count+1)}}}};return event_handle(array_from(all_registered_events)),root_event_handles.add(event_handle),()=>{for(var event_name of registered_events)for(const node2 of[target2,document]){var counts=listeners.get(node2),count=counts.get(event_name);--count==0?(node2.removeEventListener(event_name,handle_event_propagation),counts.delete(event_name),counts.size===0&&listeners.delete(node2)):counts.set(event_name,count)} +root_event_handles.delete(event_handle),anchor_node!==anchor&&anchor_node.parentNode?.removeChild(anchor_node)}});return mounted_components.set(component2,unmount2),component2}let mounted_components=new WeakMap;function unmount(component2,options){const fn=mounted_components.get(component2);return fn?(mounted_components.delete(component2),fn(options)):Promise.resolve()}class BranchManager{anchor;#batches=new Map;#onscreen=new Map;#offscreen=new Map;#outroing=new Set;#transition=!0;constructor(anchor,transition2=!0){ +this.anchor=anchor,this.#transition=transition2}#commit=batch=>{if(this.#batches.has(batch)){var key2=this.#batches.get(batch),onscreen=this.#onscreen.get(key2);if(onscreen)resume_effect(onscreen),this.#outroing.delete(key2);else{var offscreen=this.#offscreen.get(key2);offscreen&&(this.#onscreen.set(key2,offscreen.effect),this.#offscreen.delete(key2),offscreen.fragment.lastChild.remove(),this.anchor.before(offscreen.fragment),onscreen=offscreen.effect)}for(const[b,k]of this.#batches){if(this.#batches. +delete(b),b===batch)break;const offscreen2=this.#offscreen.get(k);offscreen2&&(destroy_effect(offscreen2.effect),this.#offscreen.delete(k))}for(const[k,effect2]of this.#onscreen){if(k===key2||this.#outroing.has(k))continue;const on_destroy=()=>{if(Array.from(this.#batches.values()).includes(k)){var fragment=document.createDocumentFragment();move_effect(effect2,fragment),fragment.append(create_text()),this.#offscreen.set(k,{effect:effect2,fragment})}else destroy_effect(effect2);this.#outroing.delete( +k),this.#onscreen.delete(k)};this.#transition||!onscreen?(this.#outroing.add(k),pause_effect(effect2,on_destroy,!1)):on_destroy()}}};#discard=batch=>{this.#batches.delete(batch);const keys2=Array.from(this.#batches.values());for(const[k,branch2]of this.#offscreen)keys2.includes(k)||(destroy_effect(branch2.effect),this.#offscreen.delete(k))};ensure(key2,fn){var batch=current_batch,defer=should_defer_append();if(fn&&!this.#onscreen.has(key2)&&!this.#offscreen.has(key2))if(defer){var fragment=document. +createDocumentFragment(),target2=create_text();fragment.append(target2),this.#offscreen.set(key2,{effect:branch(()=>fn(target2)),fragment})}else this.#onscreen.set(key2,branch(()=>fn(this.anchor)));if(this.#batches.set(batch,key2),defer){for(const[k,effect2]of this.#onscreen)k===key2?batch.unskip_effect(effect2):batch.skip_effect(effect2);for(const[k,branch2]of this.#offscreen)k===key2?batch.unskip_effect(branch2.effect):batch.skip_effect(branch2.effect);batch.oncommit(this.#commit),batch.ondiscard( +this.#discard)}else hydrating&&(this.anchor=hydrate_node),this.#commit(batch)}}function if_block(node2,fn,elseif=!1){var marker;hydrating&&(marker=hydrate_node,hydrate_next());var branches=new BranchManager(node2),flags2=elseif?EFFECT_TRANSPARENT:0;function update_branch(key2,fn2){if(hydrating){var data=read_hydration_instruction(marker);if(key2!==parseInt(data.substring(1))){var anchor=skip_nodes();set_hydrate_node(anchor),branches.anchor=anchor,set_hydrating(!1),branches.ensure(key2,fn2),set_hydrating( +!0);return}}branches.ensure(key2,fn2)}block(()=>{var has_branch=!1;fn((fn2,key2=0)=>{has_branch=!0,update_branch(key2,fn2)}),has_branch||update_branch(-1,null)},flags2)}const NAN=Symbol("NaN");function key$1(node2,get_key,render_fn){hydrating&&hydrate_next();var branches=new BranchManager(node2),legacy=!is_runes();block(()=>{var key2=get_key();key2!==key2&&(key2=NAN),legacy&&key2!==null&&typeof key2=="object"&&(key2={}),branches.ensure(key2,render_fn)})}function index$2(_,i){return i}function pause_effects(state2,to_destroy,controlled_anchor){ +for(var transitions=[],length=to_destroy.length,group,remaining=to_destroy.length,i=0;i<length;i++){let effect2=to_destroy[i];pause_effect(effect2,()=>{if(group){if(group.pending.delete(effect2),group.done.add(effect2),group.pending.size===0){var groups=state2.outrogroups;destroy_effects(state2,array_from(group.done)),groups.delete(group),groups.size===0&&(state2.outrogroups=null)}}else remaining-=1},!1)}if(remaining===0){var fast_path=transitions.length===0&&controlled_anchor!==null;if(fast_path){ +var anchor=controlled_anchor,parent_node=anchor.parentNode;clear_text_content(parent_node),parent_node.append(anchor),state2.items.clear()}destroy_effects(state2,to_destroy,!fast_path)}else group={pending:new Set(to_destroy),done:new Set},(state2.outrogroups??=new Set).add(group)}function destroy_effects(state2,to_destroy,remove_dom=!0){var preserved_effects;if(state2.pending.size>0){preserved_effects=new Set;for(const keys2 of state2.pending.values())for(const key2 of keys2)preserved_effects.add( +state2.items.get(key2).e)}for(var i=0;i<to_destroy.length;i++){var e=to_destroy[i];if(preserved_effects?.has(e)){e.f|=EFFECT_OFFSCREEN;const fragment=document.createDocumentFragment();move_effect(e,fragment)}else destroy_effect(to_destroy[i],remove_dom)}}var offscreen_anchor;function each(node2,flags2,get_collection,get_key,render_fn,fallback_fn=null){var anchor=node2,items2=new Map,is_controlled=(flags2&EACH_IS_CONTROLLED)!==0;if(is_controlled){var parent_node=node2;anchor=hydrating?set_hydrate_node( +get_first_child(parent_node)):parent_node.appendChild(create_text())}hydrating&&hydrate_next();var fallback2=null,each_array=derived_safe_equal(()=>{var collection=get_collection();return is_array(collection)?collection:collection==null?[]:array_from(collection)}),array2,pending=new Map,first_run=!0;function commit(batch){(state2.effect.f&DESTROYED)===0&&(state2.pending.delete(batch),state2.fallback=fallback2,reconcile(state2,array2,anchor,flags2,get_key),fallback2!==null&&(array2.length===0?(fallback2. +f&EFFECT_OFFSCREEN)===0?resume_effect(fallback2):(fallback2.f^=EFFECT_OFFSCREEN,move(fallback2,null,anchor)):pause_effect(fallback2,()=>{fallback2=null})))}function discard(batch){state2.pending.delete(batch)}var effect2=block(()=>{array2=get$3(each_array);var length=array2.length;let mismatch=!1;if(hydrating){var is_else=read_hydration_instruction(anchor)===HYDRATION_START_ELSE;is_else!==(length===0)&&(anchor=skip_nodes(),set_hydrate_node(anchor),set_hydrating(!1),mismatch=!0)}for(var keys2=new Set, +batch=current_batch,defer=should_defer_append(),index2=0;index2<length;index2+=1){hydrating&&hydrate_node.nodeType===COMMENT_NODE&&hydrate_node.data===HYDRATION_END&&(anchor=hydrate_node,mismatch=!0,set_hydrating(!1));var value=array2[index2],key2=get_key(value,index2),item=first_run?null:items2.get(key2);item?(item.v&&internal_set(item.v,value),item.i&&internal_set(item.i,index2),defer&&batch.unskip_effect(item.e)):(item=create_item(items2,first_run?anchor:offscreen_anchor??=create_text(),value, +key2,index2,render_fn,flags2,get_collection),first_run||(item.e.f|=EFFECT_OFFSCREEN),items2.set(key2,item)),keys2.add(key2)}if(length===0&&fallback_fn&&!fallback2&&(first_run?fallback2=branch(()=>fallback_fn(anchor)):(fallback2=branch(()=>fallback_fn(offscreen_anchor??=create_text())),fallback2.f|=EFFECT_OFFSCREEN)),length>keys2.size&&each_key_duplicate(),hydrating&&length>0&&set_hydrate_node(skip_nodes()),!first_run)if(pending.set(batch,keys2),defer){for(const[key3,item2]of items2)keys2.has(key3)|| +batch.skip_effect(item2.e);batch.oncommit(commit),batch.ondiscard(discard)}else commit(batch);mismatch&&set_hydrating(!0),get$3(each_array)}),state2={effect:effect2,items:items2,pending,outrogroups:null,fallback:fallback2};first_run=!1,hydrating&&(anchor=hydrate_node)}function skip_to_branch(effect2){for(;effect2!==null&&(effect2.f&BRANCH_EFFECT)===0;)effect2=effect2.next;return effect2}function reconcile(state2,array2,anchor,flags2,get_key){var is_animated=(flags2&EACH_IS_ANIMATED)!==0,length=array2. +length,items2=state2.items,current2=skip_to_branch(state2.effect.first),seen2,prev2=null,to_animate,matched=[],stashed=[],value,key2,effect2,i;if(is_animated)for(i=0;i<length;i+=1)value=array2[i],key2=get_key(value,i),effect2=items2.get(key2).e,(effect2.f&EFFECT_OFFSCREEN)===0&&(effect2.nodes?.a?.measure(),(to_animate??=new Set).add(effect2));for(i=0;i<length;i+=1){if(value=array2[i],key2=get_key(value,i),effect2=items2.get(key2).e,state2.outrogroups!==null)for(const group of state2.outrogroups) +group.pending.delete(effect2),group.done.delete(effect2);if((effect2.f&INERT)!==0&&(resume_effect(effect2),is_animated&&(effect2.nodes?.a?.unfix(),(to_animate??=new Set).delete(effect2))),(effect2.f&EFFECT_OFFSCREEN)!==0)if(effect2.f^=EFFECT_OFFSCREEN,effect2===current2)move(effect2,null,anchor);else{var next2=prev2?prev2.next:current2;effect2===state2.effect.last&&(state2.effect.last=effect2.prev),effect2.prev&&(effect2.prev.next=effect2.next),effect2.next&&(effect2.next.prev=effect2.prev),link$2( +state2,prev2,effect2),link$2(state2,effect2,next2),move(effect2,next2,anchor),prev2=effect2,matched=[],stashed=[],current2=skip_to_branch(prev2.next);continue}if(effect2!==current2){if(seen2!==void 0&&seen2.has(effect2)){if(matched.length<stashed.length){var start2=stashed[0],j;prev2=start2.prev;var a=matched[0],b=matched[matched.length-1];for(j=0;j<matched.length;j+=1)move(matched[j],start2,anchor);for(j=0;j<stashed.length;j+=1)seen2.delete(stashed[j]);link$2(state2,a.prev,b.next),link$2(state2, +prev2,a),link$2(state2,b,start2),current2=start2,prev2=b,i-=1,matched=[],stashed=[]}else seen2.delete(effect2),move(effect2,current2,anchor),link$2(state2,effect2.prev,effect2.next),link$2(state2,effect2,prev2===null?state2.effect.first:prev2.next),link$2(state2,prev2,effect2),prev2=effect2;continue}for(matched=[],stashed=[];current2!==null&¤t2!==effect2;)(seen2??=new Set).add(current2),stashed.push(current2),current2=skip_to_branch(current2.next);if(current2===null)continue}(effect2.f&EFFECT_OFFSCREEN)=== +0&&matched.push(effect2),prev2=effect2,current2=skip_to_branch(effect2.next)}if(state2.outrogroups!==null){for(const group of state2.outrogroups)group.pending.size===0&&(destroy_effects(state2,array_from(group.done)),state2.outrogroups?.delete(group));state2.outrogroups.size===0&&(state2.outrogroups=null)}if(current2!==null||seen2!==void 0){var to_destroy=[];if(seen2!==void 0)for(effect2 of seen2)(effect2.f&INERT)===0&&to_destroy.push(effect2);for(;current2!==null;)(current2.f&INERT)===0&¤t2!== +state2.fallback&&to_destroy.push(current2),current2=skip_to_branch(current2.next);var destroy_length=to_destroy.length;if(destroy_length>0){var controlled_anchor=(flags2&EACH_IS_CONTROLLED)!==0&&length===0?anchor:null;if(is_animated){for(i=0;i<destroy_length;i+=1)to_destroy[i].nodes?.a?.measure();for(i=0;i<destroy_length;i+=1)to_destroy[i].nodes?.a?.fix()}pause_effects(state2,to_destroy,controlled_anchor)}}is_animated&&queue_micro_task(()=>{if(to_animate!==void 0)for(effect2 of to_animate)effect2. +nodes?.a?.apply()})}function create_item(items2,anchor,value,key2,index2,render_fn,flags2,get_collection){var v=(flags2&EACH_ITEM_REACTIVE)!==0?(flags2&EACH_ITEM_IMMUTABLE)===0?mutable_source(value,!1,!1):source$2(value):null,i=(flags2&EACH_INDEX_REACTIVE)!==0?source$2(index2):null;return{v,i,e:branch(()=>(render_fn(anchor,v??value,i??index2,get_collection),()=>{items2.delete(key2)}))}}function move(effect2,next2,anchor){if(effect2.nodes)for(var node2=effect2.nodes.start,end=effect2.nodes.end,dest=next2&& +(next2.f&EFFECT_OFFSCREEN)===0?next2.nodes.start:anchor;node2!==null;){var next_node=get_next_sibling(node2);if(dest.before(node2),node2===end)return;node2=next_node}}function link$2(state2,prev2,next2){prev2===null?state2.effect.first=next2:prev2.next=next2,next2===null?state2.effect.last=prev2:next2.prev=prev2}function html$6(node2,get_value,is_controlled=!1,svg2=!1,mathml=!1,skip_warning=!1){var anchor=node2,value="";if(is_controlled){var parent_node=node2;hydrating&&(anchor=set_hydrate_node( +get_first_child(parent_node)))}template_effect(()=>{var effect2=active_effect;if(value===(value=get_value()??"")){hydrating&&hydrate_next();return}if(is_controlled&&!hydrating){effect2.nodes=null,parent_node.innerHTML=value,value!==""&&assign_nodes(get_first_child(parent_node),parent_node.lastChild);return}if(effect2.nodes!==null&&(remove_effect_dom(effect2.nodes.start,effect2.nodes.end),effect2.nodes=null),value!==""){if(hydrating){hydrate_node.data;for(var next2=hydrate_next(),last=next2;next2!== +null&&(next2.nodeType!==COMMENT_NODE||next2.data!=="");)last=next2,next2=get_next_sibling(next2);if(next2===null)throw hydration_mismatch(),HYDRATION_ERROR;assign_nodes(hydrate_node,last),anchor=set_hydrate_node(next2);return}var ns=svg2?NAMESPACE_SVG:mathml?NAMESPACE_MATHML:void 0,wrapper=create_element(svg2?"svg":mathml?"math":"template",ns);wrapper.innerHTML=value;var node3=svg2||mathml?wrapper:wrapper.content;if(assign_nodes(get_first_child(node3),node3.lastChild),svg2||mathml)for(;get_first_child( +node3);)anchor.before(get_first_child(node3));else anchor.before(node3)}})}function snippet(node2,get_snippet,...args){var branches=new BranchManager(node2);block(()=>{const snippet2=get_snippet()??null;branches.ensure(snippet2,snippet2&&(anchor=>snippet2(anchor,...args)))},EFFECT_TRANSPARENT)}function component(node2,get_component,render_fn){var hydration_start_node;hydrating&&(hydration_start_node=hydrate_node,hydrate_next());var branches=new BranchManager(node2);block(()=>{var component2=get_component()?? +null;if(hydrating){var data=read_hydration_instruction(hydration_start_node),server_had_component=data===HYDRATION_START,client_has_component=component2!==null;if(server_had_component!==client_has_component){var anchor=skip_nodes();set_hydrate_node(anchor),branches.anchor=anchor,set_hydrating(!1),branches.ensure(component2,component2&&(target2=>render_fn(target2,component2))),set_hydrating(!0);return}}branches.ensure(component2,component2&&(target2=>render_fn(target2,component2)))},EFFECT_TRANSPARENT)} +const now=()=>performance.now(),raf={tick:_=>requestAnimationFrame(_),now:()=>now(),tasks:new Set};function run_tasks(){const now2=raf.now();raf.tasks.forEach(task=>{task.c(now2)||(raf.tasks.delete(task),task.f())}),raf.tasks.size!==0&&raf.tick(run_tasks)}function loop(callback){let task;return raf.tasks.size===0&&raf.tick(run_tasks),{promise:new Promise(fulfill=>{raf.tasks.add(task={c:callback,f:fulfill})}),abort(){raf.tasks.delete(task)}}}function dispatch_event(element2,type2){without_reactive_context( +()=>{element2.dispatchEvent(new CustomEvent(type2))})}function css_property_to_camelcase(style2){if(style2==="float")return"cssFloat";if(style2==="offset")return"cssOffset";if(style2.startsWith("--"))return style2;const parts=style2.split("-");return parts.length===1?parts[0]:parts[0]+parts.slice(1).map(word=>word[0].toUpperCase()+word.slice(1)).join("")}function css_to_keyframe(css2){const keyframe={},parts=css2.split(";");for(const part of parts){const[property,value]=part.split(":");if(!property|| +value===void 0)break;const formatted_property=css_property_to_camelcase(property.trim());keyframe[formatted_property]=value.trim()}return keyframe}const linear$1=t=>t;function transition(flags2,element2,get_fn,get_params){var is_intro=(flags2&TRANSITION_IN)!==0,is_outro=(flags2&TRANSITION_OUT)!==0,is_both=is_intro&&is_outro,is_global=(flags2&TRANSITION_GLOBAL)!==0,direction=is_both?"both":is_intro?"in":"out",current_options,inert=element2.inert,overflow=element2.style.overflow,intro,outro;function get_options(){ +return without_reactive_context(()=>current_options??=get_fn()(element2,get_params?.()??{},{direction}))}var transition2={is_global,in(){if(element2.inert=inert,!is_intro){outro?.abort(),outro?.reset?.();return}is_outro||intro?.abort(),intro=animate(element2,get_options(),outro,1,()=>{dispatch_event(element2,"introend"),intro?.abort(),intro=current_options=void 0,element2.style.overflow=overflow})},out(fn){if(!is_outro){fn?.(),current_options=void 0;return}element2.inert=!0,outro=animate(element2, +get_options(),intro,0,()=>{dispatch_event(element2,"outroend"),fn?.()})},stop:()=>{intro?.abort(),outro?.abort()}},e=active_effect;if((e.nodes.t??=[]).push(transition2),is_intro&&should_intro){var run2=is_global;if(!run2){for(var block2=e.parent;block2&&(block2.f&EFFECT_TRANSPARENT)!==0;)for(;(block2=block2.parent)&&(block2.f&BLOCK_EFFECT)===0;);run2=!block2||(block2.f&REACTION_RAN)!==0}run2&&effect(()=>{untrack$1(()=>transition2.in())})}}function animate(element2,options,counterpart,t2,on_finish){ +var is_intro=t2===1;if(is_function(options)){var a,aborted2=!1;return queue_micro_task(()=>{if(!aborted2){var o=options({direction:is_intro?"in":"out"});a=animate(element2,o,counterpart,t2,on_finish)}}),{abort:()=>{aborted2=!0,a?.abort()},deactivate:()=>a.deactivate(),reset:()=>a.reset(),t:()=>a.t()}}if(counterpart?.deactivate(),!options?.duration&&!options?.delay)return dispatch_event(element2,is_intro?"introstart":"outrostart"),on_finish(),{abort:noop$3,deactivate:noop$3,reset:noop$3,t:()=>t2}; +const{delay=0,css:css2,tick:tick2,easing=linear$1}=options;var keyframes=[];if(is_intro&&counterpart===void 0&&(tick2&&tick2(0,1),css2)){var styles2=css_to_keyframe(css2(0,1));keyframes.push(styles2,styles2)}var get_t=()=>1-t2,animation=element2.animate(keyframes,{duration:delay,fill:"forwards"});return animation.onfinish=()=>{animation.cancel(),dispatch_event(element2,is_intro?"introstart":"outrostart");var t1=counterpart?.t()??1-t2;counterpart?.abort();var delta=t2-t1,duration2=options.duration* +Math.abs(delta),keyframes2=[];if(duration2>0){var needs_overflow_hidden=!1;if(css2)for(var n=Math.ceil(duration2/16.666666666666668),i=0;i<=n;i+=1){var t=t1+delta*easing(i/n),styles3=css_to_keyframe(css2(t,1-t));keyframes2.push(styles3),needs_overflow_hidden||=styles3.overflow==="hidden"}needs_overflow_hidden&&(element2.style.overflow="hidden"),get_t=()=>{var time2=animation.currentTime;return t1+delta*easing(time2/duration2)},tick2&&loop(()=>{if(animation.playState!=="running")return!1;var t3=get_t(); +return tick2(t3,1-t3),!0})}animation=element2.animate(keyframes2,{duration:duration2,fill:"forwards"}),animation.onfinish=()=>{get_t=()=>t2,tick2?.(t2,1-t2),on_finish()}},{abort:()=>{animation&&(animation.cancel(),animation.effect=null,animation.onfinish=noop$3)},deactivate:()=>{on_finish=noop$3},reset:()=>{t2===0&&tick2?.(1,0)},t:()=>get_t()}}function element$4(node2,get_tag,is_svg,render_fn,get_namespace,location2){let was_hydrating=hydrating;hydrating&&hydrate_next();var element2=null;hydrating&& +hydrate_node.nodeType===ELEMENT_NODE$1&&(element2=hydrate_node,hydrate_next());var anchor=hydrating?hydrate_node:node2,branches=new BranchManager(anchor,!1);block(()=>{const next_tag=get_tag()||null;var ns=is_svg||next_tag==="svg"?NAMESPACE_SVG:void 0;if(next_tag===null){branches.ensure(null,null),set_should_intro(!0);return}return branches.ensure(next_tag,anchor2=>{if(next_tag){if(element2=hydrating?element2:create_element(next_tag,ns),assign_nodes(element2,element2),render_fn){hydrating&&is_raw_text_element( +next_tag)&&element2.append(document.createComment(""));var child_anchor=hydrating?get_first_child(element2):element2.appendChild(create_text());hydrating&&(child_anchor===null?set_hydrating(!1):set_hydrate_node(child_anchor)),render_fn(element2,child_anchor)}active_effect.nodes.end=element2,anchor2.before(element2)}hydrating&&set_hydrate_node(anchor2)}),set_should_intro(!0),()=>{next_tag&&set_should_intro(!1)}},EFFECT_TRANSPARENT),teardown(()=>{set_should_intro(!0)}),was_hydrating&&(set_hydrating( +!0),set_hydrate_node(anchor))}function head$1(hash2,render_fn){let previous_hydrate_node=null,was_hydrating=hydrating;var anchor;if(hydrating){previous_hydrate_node=hydrate_node;for(var head_anchor=get_first_child(document.head);head_anchor!==null&&(head_anchor.nodeType!==COMMENT_NODE||head_anchor.data!==hash2);)head_anchor=get_next_sibling(head_anchor);if(head_anchor===null)set_hydrating(!1);else{var start2=get_next_sibling(head_anchor);head_anchor.remove(),set_hydrate_node(start2)}}hydrating|| +(anchor=document.head.appendChild(create_text()));try{block(()=>render_fn(anchor),HEAD_EFFECT|EFFECT_PRESERVED)}finally{was_hydrating&&(set_hydrating(!0),set_hydrate_node(previous_hydrate_node))}}function action(dom,action2,get_value){effect(()=>{var payload=untrack$1(()=>action2(dom,get_value?.())||{});if(get_value&&payload?.update){var inited2=!1,prev2={};render_effect(()=>{var value=get_value();deep_read_state(value),inited2&&safe_not_equal(prev2,value)&&(prev2=value,payload.update(value))}), +inited2=!0}if(payload?.destroy)return()=>payload.destroy()})}function attach(node2,get_fn){var fn=void 0,e;managed(()=>{fn!==(fn=get_fn())&&(e&&(destroy_effect(e),e=null),fn&&(e=branch(()=>{effect(()=>fn(node2))})))})}function r$1(e){var t,f,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r$1(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx$1(){for(var e,t,f=0,n="", +o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r$1(e))&&(n&&(n+=" "),n+=t);return n}function clsx(value){return typeof value=="object"?clsx$1(value):value??""}const whitespace$1=[...` +\r\f \v\uFEFF`];function to_class(value,hash2,directives){var classname=value==null?"":""+value;if(hash2&&(classname=classname?classname+" "+hash2:hash2),directives){for(var key2 of Object.keys(directives))if(directives[key2])classname=classname?classname+" "+key2:key2;else if(classname.length)for(var len=key2.length,a=0;(a=classname.indexOf(key2,a))>=0;){var b=a+len;(a===0||whitespace$1.includes(classname[a-1]))&&(b===classname.length||whitespace$1.includes(classname[b]))?classname=(a===0?"":classname. +substring(0,a))+classname.substring(b+1):a=b}}return classname===""?null:classname}function append_styles(styles2,important=!1){var separator=important?" !important;":";",css2="";for(var key2 of Object.keys(styles2)){var value=styles2[key2];value!=null&&value!==""&&(css2+=" "+key2+": "+value+separator)}return css2}function to_css_name(name){return name[0]!=="-"||name[1]!=="-"?name.toLowerCase():name}function to_style(value,styles2){if(styles2){var new_style="",normal_styles,important_styles;if(Array. +isArray(styles2)?(normal_styles=styles2[0],important_styles=styles2[1]):normal_styles=styles2,value){value=String(value).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var in_str=!1,in_apo=0,in_comment=!1,reserved_names=[];normal_styles&&reserved_names.push(...Object.keys(normal_styles).map(to_css_name)),important_styles&&reserved_names.push(...Object.keys(important_styles).map(to_css_name));var start_index=0,name_index=-1;const len=value.length;for(var i=0;i<len;i++){var c2=value[i];if(in_comment?c2=== +"/"&&value[i-1]==="*"&&(in_comment=!1):in_str?in_str===c2&&(in_str=!1):c2==="/"&&value[i+1]==="*"?in_comment=!0:c2==='"'||c2==="'"?in_str=c2:c2==="("?in_apo++:c2===")"&&in_apo--,!in_comment&&in_str===!1&&in_apo===0){if(c2===":"&&name_index===-1)name_index=i;else if(c2===";"||i===len-1){if(name_index!==-1){var name=to_css_name(value.substring(start_index,name_index).trim());if(!reserved_names.includes(name)){c2!==";"&&i++;var property=value.substring(start_index,i).trim();new_style+=" "+property+ +";"}}start_index=i+1,name_index=-1}}}}return normal_styles&&(new_style+=append_styles(normal_styles)),important_styles&&(new_style+=append_styles(important_styles,!0)),new_style=new_style.trim(),new_style===""?null:new_style}return value==null?null:String(value)}function set_class(dom,is_html,value,hash2,prev_classes,next_classes){var prev2=dom.__className;if(hydrating||prev2!==value||prev2===void 0){var next_class_name=to_class(value,hash2,next_classes);(!hydrating||next_class_name!==dom.getAttribute( +"class"))&&(next_class_name==null?dom.removeAttribute("class"):is_html?dom.className=next_class_name:dom.setAttribute("class",next_class_name)),dom.__className=value}else if(next_classes&&prev_classes!==next_classes)for(var key2 in next_classes){var is_present=!!next_classes[key2];(prev_classes==null||is_present!==!!prev_classes[key2])&&dom.classList.toggle(key2,is_present)}return next_classes}function update_styles(dom,prev2={},next2,priority){for(var key2 in next2){var value=next2[key2];prev2[key2]!== +value&&(next2[key2]==null?dom.style.removeProperty(key2):dom.style.setProperty(key2,value,priority))}}function set_style(dom,value,prev_styles,next_styles){var prev2=dom.__style;if(hydrating||prev2!==value){var next_style_attr=to_style(value,next_styles);(!hydrating||next_style_attr!==dom.getAttribute("style"))&&(next_style_attr==null?dom.removeAttribute("style"):dom.style.cssText=next_style_attr),dom.__style=value}else next_styles&&(Array.isArray(next_styles)?(update_styles(dom,prev_styles?.[0], +next_styles[0]),update_styles(dom,prev_styles?.[1],next_styles[1],"important")):update_styles(dom,prev_styles,next_styles));return next_styles}function select_option(select,value,mounting=!1){if(select.multiple){if(value==null)return;if(!is_array(value))return select_multiple_invalid_value();for(var option2 of select.options)option2.selected=value.includes(get_option_value(option2));return}for(option2 of select.options){var option_value=get_option_value(option2);if(is(option_value,value)){option2. +selected=!0;return}}(!mounting||value!==void 0)&&(select.selectedIndex=-1)}function init_select(select){var observer=new MutationObserver(()=>{select_option(select,select.__value)});observer.observe(select,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),teardown(()=>{observer.disconnect()})}function get_option_value(option2){return"__value"in option2?option2.__value:option2.value}const CLASS=Symbol("class"),STYLE=Symbol("style"),IS_CUSTOM_ELEMENT=Symbol("is custom element"),IS_HTML=Symbol( +"is html"),LINK_TAG=IS_XHTML?"link":"LINK",INPUT_TAG=IS_XHTML?"input":"INPUT",OPTION_TAG=IS_XHTML?"option":"OPTION",SELECT_TAG=IS_XHTML?"select":"SELECT",PROGRESS_TAG=IS_XHTML?"progress":"PROGRESS";function remove_input_defaults(input){if(hydrating){var already_removed=!1,remove_defaults=()=>{if(!already_removed){if(already_removed=!0,input.hasAttribute("value")){var value=input.value;set_attribute(input,"value",null),input.value=value}if(input.hasAttribute("checked")){var checked=input.checked; +set_attribute(input,"checked",null),input.checked=checked}}};input.__on_r=remove_defaults,queue_micro_task(remove_defaults),add_form_reset_listener()}}function set_value(element2,value){var attributes=get_attributes(element2);attributes.value===(attributes.value=value??void 0)||element2.value===value&&(value!==0||element2.nodeName!==PROGRESS_TAG)||(element2.value=value??"")}function set_selected(element2,selected){selected?element2.hasAttribute("selected")||element2.setAttribute("selected",""):element2. +removeAttribute("selected")}function set_attribute(element2,attribute,value,skip_warning){var attributes=get_attributes(element2);hydrating&&(attributes[attribute]=element2.getAttribute(attribute),attribute==="src"||attribute==="srcset"||attribute==="href"&&element2.nodeName===LINK_TAG)||attributes[attribute]!==(attributes[attribute]=value)&&(attribute==="loading"&&(element2[LOADING_ATTR_SYMBOL]=value),value==null?element2.removeAttribute(attribute):typeof value!="string"&&get_setters(element2). +includes(attribute)?element2[attribute]=value:element2.setAttribute(attribute,value))}function set_attributes(element2,prev2,next2,css_hash,should_remove_defaults=!1,skip_warning=!1){if(hydrating&&should_remove_defaults&&element2.nodeName===INPUT_TAG){var input=element2,attribute=input.type==="checkbox"?"defaultChecked":"defaultValue";attribute in next2||remove_input_defaults(input)}var attributes=get_attributes(element2),is_custom_element=attributes[IS_CUSTOM_ELEMENT],preserve_attribute_case=!attributes[IS_HTML]; +let is_hydrating_custom_element=hydrating&&is_custom_element;is_hydrating_custom_element&&set_hydrating(!1);var current2=prev2||{},is_option_element=element2.nodeName===OPTION_TAG;for(var key2 in prev2)key2 in next2||(next2[key2]=null);next2.class?next2.class=clsx(next2.class):(css_hash||next2[CLASS])&&(next2.class=null),next2[STYLE]&&(next2.style??=null);var setters=get_setters(element2);for(const key3 in next2){let value=next2[key3];if(is_option_element&&key3==="value"&&value==null){element2.value= +element2.__value="",current2[key3]=value;continue}if(key3==="class"){var is_html=element2.namespaceURI==="http://www.w3.org/1999/xhtml";set_class(element2,is_html,value,css_hash,prev2?.[CLASS],next2[CLASS]),current2[key3]=value,current2[CLASS]=next2[CLASS];continue}if(key3==="style"){set_style(element2,value,prev2?.[STYLE],next2[STYLE]),current2[key3]=value,current2[STYLE]=next2[STYLE];continue}var prev_value=current2[key3];if(!(value===prev_value&&!(value===void 0&&element2.hasAttribute(key3)))){ +current2[key3]=value;var prefix=key3[0]+key3[1];if(prefix!=="$$")if(prefix==="on"){const opts={},event_handle_key="$$"+key3;let event_name=key3.slice(2);var is_delegated=can_delegate_event(event_name);if(is_capture_event(event_name)&&(event_name=event_name.slice(0,-7),opts.capture=!0),!is_delegated&&prev_value){if(value!=null)continue;element2.removeEventListener(event_name,current2[event_handle_key],opts),current2[event_handle_key]=null}if(is_delegated)delegated(event_name,element2,value),delegate( +[event_name]);else if(value!=null){let handle2=function(evt){current2[key3].call(this,evt)};current2[event_handle_key]=create_event(event_name,element2,handle2,opts)}}else if(key3==="style")set_attribute(element2,key3,value);else if(key3==="autofocus")autofocus(element2,!!value);else if(!is_custom_element&&(key3==="__value"||key3==="value"&&value!=null))element2.value=element2.__value=value;else if(key3==="selected"&&is_option_element)set_selected(element2,value);else{var name=key3;preserve_attribute_case|| +(name=normalize_attribute(name));var is_default=name==="defaultValue"||name==="defaultChecked";if(value==null&&!is_custom_element&&!is_default)if(attributes[key3]=null,name==="value"||name==="checked"){let input2=element2;const use_default=prev2===void 0;if(name==="value"){let previous2=input2.defaultValue;input2.removeAttribute(name),input2.defaultValue=previous2,input2.value=input2.__value=use_default?previous2:null}else{let previous2=input2.defaultChecked;input2.removeAttribute(name),input2.defaultChecked= +previous2,input2.checked=use_default?previous2:!1}}else element2.removeAttribute(key3);else is_default||setters.includes(name)&&(is_custom_element||typeof value!="string")?(element2[name]=value,name in attributes&&(attributes[name]=UNINITIALIZED)):typeof value!="function"&&set_attribute(element2,name,value)}}}return is_hydrating_custom_element&&set_hydrating(!0),current2}function attribute_effect(element2,fn,sync=[],async=[],blockers=[],css_hash,should_remove_defaults=!1,skip_warning=!1){flatten( +blockers,sync,async,values=>{var prev2=void 0,effects={},is_select=element2.nodeName===SELECT_TAG,inited2=!1;if(managed(()=>{var next2=fn(...values.map(get$3)),current2=set_attributes(element2,prev2,next2,css_hash,should_remove_defaults,skip_warning);inited2&&is_select&&"value"in next2&&select_option(element2,next2.value);for(let symbol of Object.getOwnPropertySymbols(effects))next2[symbol]||destroy_effect(effects[symbol]);for(let symbol of Object.getOwnPropertySymbols(next2)){var n=next2[symbol]; +symbol.description===ATTACHMENT_KEY&&(!prev2||n!==prev2[symbol])&&(effects[symbol]&&destroy_effect(effects[symbol]),effects[symbol]=branch(()=>attach(element2,()=>n))),current2[symbol]=n}prev2=current2}),is_select){var select=element2;effect(()=>{select_option(select,prev2.value,!0),init_select(select)})}inited2=!0})}function get_attributes(element2){return element2.__attributes??={[IS_CUSTOM_ELEMENT]:element2.nodeName.includes("-"),[IS_HTML]:element2.namespaceURI===NAMESPACE_HTML}}var setters_cache=new Map; +function get_setters(element2){var cache_key=element2.getAttribute("is")||element2.nodeName,setters=setters_cache.get(cache_key);if(setters)return setters;setters_cache.set(cache_key,setters=[]);for(var descriptors,proto=element2,element_proto=Element.prototype;element_proto!==proto;){descriptors=get_descriptors(proto);for(var key2 in descriptors)descriptors[key2].set&&setters.push(key2);proto=get_prototype_of(proto)}return setters}function bind_value(input,get2,set2=get2){var batches2=new WeakSet; +listen_to_event_and_reset_event(input,"input",async is_reset=>{var value=is_reset?input.defaultValue:input.value;if(value=is_numberlike_input(input)?to_number(value):value,set2(value),current_batch!==null&&batches2.add(current_batch),await tick(),value!==(value=get2())){var start2=input.selectionStart,end=input.selectionEnd,length=input.value.length;if(input.value=value??"",end!==null){var new_length=input.value.length;start2===end&&end===length&&new_length>length?(input.selectionStart=new_length, +input.selectionEnd=new_length):(input.selectionStart=start2,input.selectionEnd=Math.min(end,new_length))}}}),(hydrating&&input.defaultValue!==input.value||untrack$1(get2)==null&&input.value)&&(set2(is_numberlike_input(input)?to_number(input.value):input.value),current_batch!==null&&batches2.add(current_batch)),render_effect(()=>{var value=get2();if(input===document.activeElement){var batch=current_batch;if(batches2.has(batch))return}is_numberlike_input(input)&&value===to_number(input.value)||input. +type==="date"&&!value&&!input.value||value!==input.value&&(input.value=value??"")})}function is_numberlike_input(input){var type2=input.type;return type2==="number"||type2==="range"}function to_number(value){return value===""?null:+value}function bind_files(input,get2,set2=get2){listen_to_event_and_reset_event(input,"change",()=>{set2(input.files)}),hydrating&&input.files&&set2(input.files),render_effect(()=>{input.files=get2()})}function is_bound_this(bound_value,element_or_component){return bound_value=== +element_or_component||bound_value?.[STATE_SYMBOL]===element_or_component}function bind_this(element_or_component={},update2,get_value,get_parts){var component_effect=component_context.r,parent=active_effect;return effect(()=>{var old_parts,parts;return render_effect(()=>{old_parts=parts,parts=[],untrack$1(()=>{element_or_component!==get_value(...parts)&&(update2(element_or_component,...parts),old_parts&&is_bound_this(get_value(...old_parts),element_or_component)&&update2(null,...old_parts))})}), +()=>{let p2=parent;for(;p2!==component_effect&&p2.parent!==null&&p2.parent.f&DESTROYING;)p2=p2.parent;const teardown2=()=>{parts&&is_bound_this(get_value(...parts),element_or_component)&&update2(null,...parts)},original_teardown=p2.teardown;p2.teardown=()=>{teardown2(),original_teardown?.()}}}),element_or_component}function bind_window_size(type2,set2){listen(window,["resize"],()=>without_reactive_context(()=>set2(window[type2])))}function init(immutable=!1){const context=component_context,callbacks=context. +l.u;if(!callbacks)return;let props=()=>deep_read_state(context.s);if(immutable){let version2=0,prev2={};const d2=derived(()=>{let changed=!1;const props2=context.s;for(const key2 in props2)props2[key2]!==prev2[key2]&&(prev2[key2]=props2[key2],changed=!0);return changed&&version2++,version2});props=()=>get$3(d2)}callbacks.b.length&&user_pre_effect(()=>{observe_all(context,props),run_all(callbacks.b)}),user_effect(()=>{const fns=untrack$1(()=>callbacks.m.map(run));return()=>{for(const fn of fns)typeof fn== +"function"&&fn()}}),callbacks.a.length&&user_effect(()=>{observe_all(context,props),run_all(callbacks.a)})}function observe_all(context,props){if(context.l.s)for(const signal of context.l.s)get$3(signal);props()}const rest_props_handler={get(target2,key2){if(!target2.exclude.includes(key2))return target2.props[key2]},set(target2,key2){return!1},getOwnPropertyDescriptor(target2,key2){if(!target2.exclude.includes(key2)&&key2 in target2.props)return{enumerable:!0,configurable:!0,value:target2.props[key2]}}, +has(target2,key2){return target2.exclude.includes(key2)?!1:key2 in target2.props},ownKeys(target2){return Reflect.ownKeys(target2.props).filter(key2=>!target2.exclude.includes(key2))}};function rest_props(props,exclude,name){return new Proxy({props,exclude},rest_props_handler)}const spread_props_handler={get(target2,key2){let i=target2.props.length;for(;i--;){let p2=target2.props[i];if(is_function(p2)&&(p2=p2()),typeof p2=="object"&&p2!==null&&key2 in p2)return p2[key2]}},set(target2,key2,value){ +let i=target2.props.length;for(;i--;){let p2=target2.props[i];is_function(p2)&&(p2=p2());const desc=get_descriptor(p2,key2);if(desc&&desc.set)return desc.set(value),!0}return!1},getOwnPropertyDescriptor(target2,key2){let i=target2.props.length;for(;i--;){let p2=target2.props[i];if(is_function(p2)&&(p2=p2()),typeof p2=="object"&&p2!==null&&key2 in p2){const descriptor=get_descriptor(p2,key2);return descriptor&&!descriptor.configurable&&(descriptor.configurable=!0),descriptor}}},has(target2,key2){ +if(key2===STATE_SYMBOL||key2===LEGACY_PROPS)return!1;for(let p2 of target2.props)if(is_function(p2)&&(p2=p2()),p2!=null&&key2 in p2)return!0;return!1},ownKeys(target2){const keys2=[];for(let p2 of target2.props)if(is_function(p2)&&(p2=p2()),!!p2){for(const key2 in p2)keys2.includes(key2)||keys2.push(key2);for(const key2 of Object.getOwnPropertySymbols(p2))keys2.includes(key2)||keys2.push(key2)}return keys2}};function spread_props(...props){return new Proxy({props},spread_props_handler)}function prop(props,key2,flags2,fallback2){ +var runes=!legacy_mode_flag||(flags2&PROPS_IS_RUNES)!==0,bindable=(flags2&PROPS_IS_BINDABLE)!==0,lazy=(flags2&PROPS_IS_LAZY_INITIAL)!==0,fallback_value=fallback2,fallback_dirty=!0,get_fallback=()=>(fallback_dirty&&(fallback_dirty=!1,fallback_value=lazy?untrack$1(fallback2):fallback2),fallback_value);let setter;if(bindable){var is_entry_props=STATE_SYMBOL in props||LEGACY_PROPS in props;setter=get_descriptor(props,key2)?.set??(is_entry_props&&key2 in props?v=>props[key2]=v:void 0)}var initial_value, +is_store_sub=!1;bindable?[initial_value,is_store_sub]=capture_store_binding(()=>props[key2]):initial_value=props[key2],initial_value===void 0&&fallback2!==void 0&&(initial_value=get_fallback(),setter&&(runes&&props_invalid_value(),setter(initial_value)));var getter;if(runes?getter=()=>{var value=props[key2];return value===void 0?get_fallback():(fallback_dirty=!0,value)}:getter=()=>{var value=props[key2];return value!==void 0&&(fallback_value=void 0),value===void 0?fallback_value:value},runes&&(flags2& +PROPS_IS_UPDATED)===0)return getter;if(setter){var legacy_parent=props.$$legacy;return(function(value,mutation){return arguments.length>0?((!runes||!mutation||legacy_parent||is_store_sub)&&setter(mutation?getter():value),value):getter()})}var overridden=!1,d2=((flags2&PROPS_IS_IMMUTABLE)!==0?derived:derived_safe_equal)(()=>(overridden=!1,getter()));bindable&&get$3(d2);var parent_effect=active_effect;return(function(value,mutation){if(arguments.length>0){const new_value=mutation?get$3(d2):runes&& +bindable?proxy(value):value;return set$1(d2,new_value),overridden=!0,fallback_value!==void 0&&(fallback_value=new_value),value}return is_destroying_effect&&overridden||(parent_effect.f&DESTROYED)!==0?d2.v:get$3(d2)})}function asClassComponent(component2){return class extends Svelte4Component{constructor(options){super({component:component2,...options})}}}class Svelte4Component{#events;#instance;constructor(options){var sources=new Map,add_source=(key2,value)=>{var s2=mutable_source(value,!1,!1); +return sources.set(key2,s2),s2};const props=new Proxy({...options.props||{},$$events:{}},{get(target2,prop2){return get$3(sources.get(prop2)??add_source(prop2,Reflect.get(target2,prop2)))},has(target2,prop2){return prop2===LEGACY_PROPS?!0:(get$3(sources.get(prop2)??add_source(prop2,Reflect.get(target2,prop2))),Reflect.has(target2,prop2))},set(target2,prop2,value){return set$1(sources.get(prop2)??add_source(prop2,value),value),Reflect.set(target2,prop2,value)}});this.#instance=(options.hydrate?hydrate: +mount)(options.component,{target:options.target,anchor:options.anchor,props,context:options.context,intro:options.intro??!1,recover:options.recover,transformError:options.transformError}),(!options?.props?.$$host||options.sync===!1)&&flushSync(),this.#events=props.$$events;for(const key2 of Object.keys(this.#instance))key2==="$set"||key2==="$destroy"||key2==="$on"||define_property(this,key2,{get(){return this.#instance[key2]},set(value){this.#instance[key2]=value},enumerable:!0});this.#instance. +$set=next2=>{Object.assign(props,next2)},this.#instance.$destroy=()=>{unmount(this.#instance)}}$set(props){this.#instance.$set(props)}$on(event2,callback){this.#events[event2]=this.#events[event2]||[];const cb=(...args)=>callback.call(this,...args);return this.#events[event2].push(cb),()=>{this.#events[event2]=this.#events[event2].filter(fn=>fn!==cb)}}$destroy(){this.#instance.$destroy()}}function onMount$1(fn){component_context===null&&lifecycle_outside_component(),legacy_mode_flag&&component_context. +l!==null?init_update_callbacks(component_context).m.push(fn):user_effect(()=>{const cleanup=untrack$1(fn);if(typeof cleanup=="function")return cleanup})}function onDestroy(fn){component_context===null&&lifecycle_outside_component(),onMount$1(()=>()=>untrack$1(fn))}function init_update_callbacks(context){var l=context.l;return l.u??={a:[],b:[],m:[]}}const svelte=Object.freeze(Object.defineProperty({__proto__:null,flushSync,getAllContexts,getContext,hasContext,hydrate,mount,onDestroy,onMount:onMount$1, +setContext,settled,tick,unmount,untrack:untrack$1},Symbol.toStringTag,{value:"Module"}));class HttpError{constructor(status,body2){this.status=status,typeof body2=="string"?this.body={message:body2}:body2?this.body=body2:this.body={message:`Error: ${status}`}}toString(){return JSON.stringify(this.body)}}class Redirect{constructor(status,location2){try{new Headers({location:location2})}catch{throw new Error(`Invalid redirect location ${JSON.stringify(location2)}: this string contains characters t\ +hat cannot be used in HTTP headers`)}this.status=status,this.location=location2}}class SvelteKitError extends Error{constructor(status,text2,message){super(message),this.status=status,this.text=text2}}new URL("sveltekit-internal://");function normalize_path(path2,trailing_slash){return path2==="/"||trailing_slash==="ignore"?path2:trailing_slash==="never"?path2.endsWith("/")?path2.slice(0,-1):path2:trailing_slash==="always"&&!path2.endsWith("/")?path2+"/":path2}function decode_pathname(pathname){ +return pathname.split("%25").map(decodeURI).join("%25")}function decode_params(params){for(const key2 in params)params[key2]=decodeURIComponent(params[key2]);return params}function strip_hash({href}){return href.split("#")[0]}function make_trackable(url2,callback,search_params_callback,allow_hash=!1){const tracked=new URL(url2);Object.defineProperty(tracked,"searchParams",{value:new Proxy(tracked.searchParams,{get(obj,key2){if(key2==="get"||key2==="getAll"||key2==="has")return(param,...rest)=>(search_params_callback( +param),obj[key2](param,...rest));callback();const value=Reflect.get(obj,key2);return typeof value=="function"?value.bind(obj):value}}),enumerable:!0,configurable:!0});const tracked_url_properties=["href","pathname","search","toString","toJSON"];allow_hash&&tracked_url_properties.push("hash");for(const property of tracked_url_properties)Object.defineProperty(tracked,property,{get(){return callback(),url2[property]},enumerable:!0,configurable:!0});return tracked}function noop$2(){}function hash$1(...values){ +let hash2=5381;for(const value of values)if(typeof value=="string"){let i=value.length;for(;i;)hash2=hash2*33^value.charCodeAt(--i)}else if(ArrayBuffer.isView(value)){const buffer=new Uint8Array(value.buffer,value.byteOffset,value.byteLength);let i=buffer.length;for(;i;)hash2=hash2*33^buffer[--i]}else throw new TypeError("value must be a string or TypedArray");return(hash2>>>0).toString(36)}new TextEncoder;new TextDecoder;function base64_decode(encoded){const binary=atob(encoded),bytes=new Uint8Array( +binary.length);for(let i=0;i<binary.length;i++)bytes[i]=binary.charCodeAt(i);return bytes}const native_fetch=window.fetch;window.fetch=(input,init2)=>((input instanceof Request?input.method:init2?.method||"GET")!=="GET"&&cache.delete(build_selector(input)),native_fetch(input,init2));const cache=new Map;function initial_fetch(resource,opts){const selector=build_selector(resource,opts),script=document.querySelector(selector);if(script?.textContent){script.remove();let{body:body2,...init2}=JSON.parse( +script.textContent);const ttl=script.getAttribute("data-ttl");return ttl&&cache.set(selector,{body:body2,init:init2,ttl:1e3*Number(ttl)}),script.getAttribute("data-b64")!==null&&(body2=base64_decode(body2)),Promise.resolve(new Response(body2,init2))}return window.fetch(resource,opts)}function subsequent_fetch(resource,resolved,opts){if(cache.size>0){const selector=build_selector(resource,opts),cached2=cache.get(selector);if(cached2){if(performance.now()<cached2.ttl&&["default","force-cache","onl\ +y-if-cached",void 0].includes(opts?.cache))return new Response(cached2.body,cached2.init);cache.delete(selector)}}return window.fetch(resolved,opts)}function build_selector(resource,opts){let selector=`script[data-sveltekit-fetched][data-url=${JSON.stringify(resource instanceof Request?resource.url:resource)}]`;if(opts?.headers||opts?.body){const values=[];opts.headers&&values.push([...new Headers(opts.headers)].join(",")),opts.body&&(typeof opts.body=="string"||ArrayBuffer.isView(opts.body))&&values. +push(opts.body),selector+=`[data-hash="${hash$1(...values)}"]`}return selector}const param_pattern=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function parse_route_id(id2){const params=[];return{pattern:id2==="/"?/^\/$/:new RegExp(`^${get_route_segments(id2).map(segment=>{const rest_match=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(segment);if(rest_match)return params.push({name:rest_match[1],matcher:rest_match[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const optional_match=/^\[\[(\w+)(?:=(\w+))?\]\]$/. +exec(segment);if(optional_match)return params.push({name:optional_match[1],matcher:optional_match[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!segment)return;const parts=segment.split(/\[(.+?)\](?!\])/);return"/"+parts.map((content2,i)=>{if(i%2){if(content2.startsWith("x+"))return escape$3(String.fromCharCode(parseInt(content2.slice(2),16)));if(content2.startsWith("u+"))return escape$3(String.fromCharCode(...content2.slice(2).split("-").map(code2=>parseInt(code2,16))));const match=param_pattern. +exec(content2),[,is_optional,is_rest,name,matcher]=match;return params.push({name,matcher,optional:!!is_optional,rest:!!is_rest,chained:is_rest?i===1&&parts[0]==="":!1}),is_rest?"([^]*?)":is_optional?"([^/]*)?":"([^/]+?)"}return escape$3(content2)}).join("")}).join("")}/?$`),params}}function affects_path(segment){return segment!==""&&!/^\([^)]+\)$/.test(segment)}function get_route_segments(route){return route.slice(1).split("/").filter(affects_path)}function exec(match,params,matchers2){const result={}, +values=match.slice(1),values_needing_match=values.filter(value=>value!==void 0);let buffered=0;for(let i=0;i<params.length;i+=1){const param=params[i];let value=values[i-buffered];if(param.chained&¶m.rest&&buffered&&(value=values.slice(i-buffered,i+1).filter(s2=>s2).join("/"),buffered=0),value===void 0)if(param.rest)value="";else continue;if(!param.matcher||matchers2[param.matcher](value)){result[param.name]=value;const next_param=params[i+1],next_value=values[i+1];next_param&&!next_param.rest&& +next_param.optional&&next_value&¶m.chained&&(buffered=0),!next_param&&!next_value&&Object.keys(result).length===values_needing_match.length&&(buffered=0);continue}if(param.optional&¶m.chained){buffered++;continue}return}if(!buffered)return result}function escape$3(str){return str.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function parse$5({nodes:nodes2,server_loads:server_loads2, +dictionary:dictionary2,matchers:matchers2}){const layouts_with_server_load=new Set(server_loads2);return Object.entries(dictionary2).map(([id2,[leaf2,layouts,errors2]])=>{const{pattern:pattern2,params}=parse_route_id(id2),route={id:id2,exec:path2=>{const match=pattern2.exec(path2);if(match)return exec(match,params,matchers2)},errors:[1,...errors2||[]].map(n=>nodes2[n]),layouts:[0,...layouts||[]].map(create_layout_loader),leaf:create_leaf_loader(leaf2)};return route.errors.length=route.layouts.length= +Math.max(route.errors.length,route.layouts.length),route});function create_leaf_loader(id2){const uses_server_data=id2<0;return uses_server_data&&(id2=~id2),[uses_server_data,nodes2[id2]]}function create_layout_loader(id2){return id2===void 0?id2:[layouts_with_server_load.has(id2),nodes2[id2]]}}function get$2(key2,parse2=JSON.parse){try{return parse2(sessionStorage[key2])}catch{}}function set(key2,value,stringify2=JSON.stringify){const data=stringify2(value);try{sessionStorage[key2]=data}catch{}} +const base=globalThis.__sveltekit__?.base??"",assets=globalThis.__sveltekit__?.assets??base??"",version$3="llama-server-webui",SNAPSHOT_KEY="sveltekit:snapshot",SCROLL_KEY="sveltekit:scroll",STATES_KEY="sveltekit:states",PAGE_URL_KEY="sveltekit:pageurl",HISTORY_INDEX="sveltekit:history",NAVIGATION_INDEX="sveltekit:navigation",PRELOAD_PRIORITIES={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},origin=location.origin;function resolve_url(url2){if(url2 instanceof URL)return url2;let baseURI=document. +baseURI;if(!baseURI){const baseTags=document.getElementsByTagName("base");baseURI=baseTags.length?baseTags[0].href:document.URL}return new URL(url2,baseURI)}function scroll_state(){return{x:pageXOffset,y:pageYOffset}}function link_option(element2,name){return element2.getAttribute(`data-sveltekit-${name}`)}const levels={...PRELOAD_PRIORITIES,"":PRELOAD_PRIORITIES.hover};function parent_element(element2){let parent=element2.assignedSlot??element2.parentNode;return parent?.nodeType===11&&(parent=parent. +host),parent}function find_anchor(element2,target2){for(;element2&&element2!==target2;){if(element2.nodeName.toUpperCase()==="A"&&element2.hasAttribute("href"))return element2;element2=parent_element(element2)}}function get_link_info(a,base2,uses_hash_router){let url2;try{if(url2=new URL(a instanceof SVGAElement?a.href.baseVal:a.href,document.baseURI),uses_hash_router&&url2.hash.match(/^#[^/]/)){const route=location.hash.split("#")[1]||"/";url2.hash=`#${route}${url2.hash}`}}catch{}const target2=a instanceof +SVGAElement?a.target.baseVal:a.target,external=!url2||!!target2||is_external_url(url2,base2,uses_hash_router)||(a.getAttribute("rel")||"").split(/\s+/).includes("external"),download=url2?.origin===origin&&a.hasAttribute("download");return{url:url2,external,target:target2,download}}function get_router_options(element2){let keepfocus=null,noscroll=null,preload_code=null,preload_data=null,reload=null,replace_state=null,el=element2;for(;el&&el!==document.documentElement;)preload_code===null&&(preload_code= +link_option(el,"preload-code")),preload_data===null&&(preload_data=link_option(el,"preload-data")),keepfocus===null&&(keepfocus=link_option(el,"keepfocus")),noscroll===null&&(noscroll=link_option(el,"noscroll")),reload===null&&(reload=link_option(el,"reload")),replace_state===null&&(replace_state=link_option(el,"replacestate")),el=parent_element(el);function get_option_state(value){switch(value){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:levels[preload_code?? +"off"],preload_data:levels[preload_data??"off"],keepfocus:get_option_state(keepfocus),noscroll:get_option_state(noscroll),reload:get_option_state(reload),replace_state:get_option_state(replace_state)}}function notifiable_store(value){const store=writable(value);let ready=!0;function notify(){ready=!0,store.update(val=>val)}function set2(new_value){ready=!1,store.set(new_value)}function subscribe(run2){let old_value;return store.subscribe(new_value=>{(old_value===void 0||ready&&new_value!==old_value)&& +run2(old_value=new_value)})}return{notify,set:set2,subscribe}}const updated_listener={v:noop$2};function create_updated_store(){const{set:set2,subscribe}=writable(!1);let timeout;async function check(){clearTimeout(timeout);try{const res=await fetch(`${assets}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!res.ok)return!1;const updated2=(await res.json()).version!==version$3;return updated2&&(set2(!0),updated_listener.v(),clearTimeout(timeout)),updated2}catch{return!1}} +return{subscribe,check}}function is_external_url(url2,base2,hash_routing){return url2.origin!==origin||!url2.pathname.startsWith(base2)?!0:hash_routing?url2.pathname!==location.pathname:!1}const valid_layout_exports=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...valid_layout_exports];const valid_layout_server_exports=new Set([...valid_layout_exports]);[...valid_layout_server_exports];function compact(arr){return arr.filter(val=>val!=null)}function get_status(error2){return error2 instanceof +HttpError||error2 instanceof SvelteKitError?error2.status:500}function get_message(error2){return error2 instanceof SvelteKitError?error2.text:"Internal Error"}let page$3,navigating,updated;const is_legacy=onMount$1.toString().includes("$$")||/function \w+\(\) \{\}/.test(onMount$1.toString()),placeholder_url="a:";is_legacy?(page$3={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(placeholder_url)},navigating={current:null},updated={current:!1}):(page$3=new class{#data=state$1( +{});get data(){return get$3(this.#data)}set data(value){set$1(this.#data,value)}#form=state$1(null);get form(){return get$3(this.#form)}set form(value){set$1(this.#form,value)}#error=state$1(null);get error(){return get$3(this.#error)}set error(value){set$1(this.#error,value)}#params=state$1({});get params(){return get$3(this.#params)}set params(value){set$1(this.#params,value)}#route=state$1({id:null});get route(){return get$3(this.#route)}set route(value){set$1(this.#route,value)}#state=state$1( +{});get state(){return get$3(this.#state)}set state(value){set$1(this.#state,value)}#status=state$1(-1);get status(){return get$3(this.#status)}set status(value){set$1(this.#status,value)}#url=state$1(new URL(placeholder_url));get url(){return get$3(this.#url)}set url(value){set$1(this.#url,value)}},navigating=new class{#current=state$1(null);get current(){return get$3(this.#current)}set current(value){set$1(this.#current,value)}},updated=new class{#current=state$1(!1);get current(){return get$3( +this.#current)}set current(value){set$1(this.#current,value)}},updated_listener.v=()=>updated.current=!0);function update(new_page){Object.assign(page$3,new_page)}const noop_span={spanContext(){return noop_span_context},setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){return this},isRecording(){return!1},recordException(){return this},addLink(){return this},addLinks(){return this}},noop_span_context={traceId:"", +spanId:"",traceFlags:0},{onMount}=svelte,untrack=untrack$1??(value=>value()),ICON_REL_ATTRIBUTES=new Set(["icon","shortcut icon","apple-touch-icon"]);let rendering_error=null;const scroll_positions=get$2(SCROLL_KEY)??{},snapshots=get$2(SNAPSHOT_KEY)??{},stores={url:notifiable_store({}),page:notifiable_store({}),navigating:writable(null),updated:create_updated_store()};function update_scroll_positions(index2){scroll_positions[index2]=scroll_state()}function clear_onward_history(current_history_index2,current_navigation_index2){ +let i=current_history_index2+1;for(;scroll_positions[i];)delete scroll_positions[i],i+=1;for(i=current_navigation_index2+1;snapshots[i];)delete snapshots[i],i+=1}function native_navigation(url2,replace2=!1){return replace2?location.replace(url2.href):location.href=url2.href,new Promise(noop$2)}async function update_service_worker(){if("serviceWorker"in navigator){const registration=await navigator.serviceWorker.getRegistration(base||"/");registration&&await registration.update()}}let routes,default_layout_loader, +default_error_loader,container,target,app$1;const invalidated=[],components=[];let load_cache=null;function discard_load_cache(){load_cache?.fork?.then(f=>f?.discard()),load_cache=null}const reroute_cache=new Map,before_navigate_callbacks=new Set,on_navigate_callbacks=new Set,after_navigate_callbacks=new Set;let current={branch:[],error:null,url:null},hydrated=!1,started=!1,autoscroll=!0,is_navigating=!1,hash_navigating=!1,has_navigated=!1,force_invalidation=!1,root$1X,current_history_index,current_navigation_index, +token;const preload_tokens=new Set,query_map=new Map;async function start$1(_app,_target,hydrate2){globalThis.__sveltekit__&&(globalThis.__sveltekit__.query,globalThis.__sveltekit__.prerender),document.URL!==location.href&&(location.href=location.href),app$1=_app,await _app.hooks.init?.(),routes=parse$5(_app),container=document.documentElement,target=_target,default_layout_loader=_app.nodes[0],default_error_loader=_app.nodes[1],default_layout_loader(),default_error_loader(),current_history_index= +history.state?.[HISTORY_INDEX],current_navigation_index=history.state?.[NAVIGATION_INDEX],current_history_index||(current_history_index=current_navigation_index=Date.now(),history.replaceState({...history.state,[HISTORY_INDEX]:current_history_index,[NAVIGATION_INDEX]:current_navigation_index},""));const scroll=scroll_positions[current_history_index];function restore_scroll(){scroll&&(history.scrollRestoration="manual",scrollTo(scroll.x,scroll.y))}hydrate2?(restore_scroll(),await _hydrate(target, +hydrate2)):(await navigate({type:"enter",url:resolve_url(app$1.hash?decode_hash(new URL(location.href)):location.href),replace_state:!0}),restore_scroll()),_start_router()}function reset_invalidation(){invalidated.length=0,force_invalidation=!1}function capture_snapshot(index2){components.some(c2=>c2?.snapshot)&&(snapshots[index2]=components.map(c2=>c2?.snapshot?.capture()))}function restore_snapshot(index2){snapshots[index2]?.forEach((value,i)=>{components[i]?.snapshot?.restore(value)})}function persist_state(){ +update_scroll_positions(current_history_index),set(SCROLL_KEY,scroll_positions),capture_snapshot(current_navigation_index),set(SNAPSHOT_KEY,snapshots)}async function _goto(url2,options,redirect_count,nav_token){let query_keys;options.invalidateAll&&discard_load_cache(),await navigate({type:"goto",url:resolve_url(url2),keepfocus:options.keepFocus,noscroll:options.noScroll,replace_state:options.replaceState,state:options.state,redirect_count,nav_token,accept:()=>{options.invalidateAll&&(force_invalidation= +!0,query_keys=[],query_map.forEach((entries,id2)=>{for(const payload of entries.keys())query_keys.push(id2+"/"+payload)})),options.invalidate&&options.invalidate.forEach(push_invalidated)}}),options.invalidateAll&&tick().then(tick).then(()=>{query_map.forEach((entries,id2)=>{entries.forEach(({resource},payload)=>{query_keys?.includes(id2+"/"+payload)&&resource.refresh?.()})})})}async function _preload_data(intent){if(intent.id!==load_cache?.id){discard_load_cache();const preload2={};preload_tokens. +add(preload2),load_cache={id:intent.id,token:preload2,promise:load_route({...intent,preload:preload2}).then(result=>(preload_tokens.delete(preload2),result.type==="loaded"&&result.state.error&&discard_load_cache(),result)),fork:null}}return load_cache.promise}async function _preload_code(url2){const route=(await get_navigation_intent(url2,!1))?.route;route&&await Promise.all([...route.layouts,route.leaf].filter(Boolean).map(load2=>load2[1]()))}async function initialize(result,target2,hydrate2){const nav={ +params:current.params,route:{id:current.route?.id??null},url:new URL(location.href)};current={...result.state,nav};const style2=document.querySelector("style[data-sveltekit]");if(style2&&style2.remove(),Object.assign(page$3,result.props.page),root$1X=new app$1.root({target:target2,props:{...result.props,stores,components},hydrate:hydrate2,sync:!1,transformError:void 0}),await Promise.resolve(),restore_snapshot(current_navigation_index),hydrate2){const navigation={from:null,to:{...nav,scroll:scroll_positions[current_history_index]?? +scroll_state()},willUnload:!1,type:"enter",complete:Promise.resolve()};after_navigate_callbacks.forEach(fn=>fn(navigation))}started=!0}async function get_navigation_result_from_branch({url:url2,params,branch:branch2,errors:errors2,status,error:error2,route,form}){let slash="never";if(base&&(url2.pathname===base||url2.pathname===base+"/"))slash="always";else for(const node2 of branch2)node2?.slash!==void 0&&(slash=node2.slash);url2.pathname=normalize_path(url2.pathname,slash),url2.search=url2.search; +const result={type:"loaded",state:{url:url2,params,branch:branch2,error:error2,route},props:{constructors:compact(branch2).map(branch_node=>branch_node.node.component),page:clone_page(page$3)}};form!==void 0&&(result.props.form=form);let data={},data_changed=!page$3,p2=0;for(let i=0;i<Math.max(branch2.length,current.branch.length);i+=1){const node2=branch2[i],prev2=current.branch[i];node2?.data!==prev2?.data&&(data_changed=!0),node2&&(data={...data,...node2.data},data_changed&&(result.props[`dat\ +a_${p2}`]=data),p2+=1)}return(!current.url||url2.href!==current.url.href||current.error!==error2||form!==void 0&&form!==page$3.form||data_changed)&&(result.props.page={error:error2,params,route:{id:route?.id??null},state:{},status,url:new URL(url2),form:form??null,data:data_changed?data:page$3.data}),result}async function load_node({loader,parent,url:url2,params,route,server_data_node}){let data=null,is_tracking=!0;const uses={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set}, +node2=await loader();if(node2.universal?.load){let depends=function(...deps){for(const dep of deps){const{href}=new URL(dep,url2);uses.dependencies.add(href)}};const load_input={tracing:{enabled:!1,root:noop_span,current:noop_span},route:new Proxy(route,{get:(target2,key2)=>(is_tracking&&(uses.route=!0),target2[key2])}),params:new Proxy(params,{get:(target2,key2)=>(is_tracking&&uses.params.add(key2),target2[key2])}),data:server_data_node?.data??null,url:make_trackable(url2,()=>{is_tracking&&(uses. +url=!0)},param=>{is_tracking&&uses.search_params.add(param)},app$1.hash),async fetch(resource,init2){resource instanceof Request&&(init2={body:resource.method==="GET"||resource.method==="HEAD"?void 0:await resource.blob(),cache:resource.cache,credentials:resource.credentials,headers:[...resource.headers].length>0?resource?.headers:void 0,integrity:resource.integrity,keepalive:resource.keepalive,method:resource.method,mode:resource.mode,redirect:resource.redirect,referrer:resource.referrer,referrerPolicy:resource. +referrerPolicy,signal:resource.signal,...init2});const{resolved,promise}=resolve_fetch_url(resource,init2,url2);return is_tracking&&depends(resolved.href),promise},setHeaders:noop$2,depends,parent(){return is_tracking&&(uses.parent=!0),parent()},untrack(fn){is_tracking=!1;try{return fn()}finally{is_tracking=!0}}};data=await node2.universal.load.call(null,load_input)??null}return{node:node2,loader,server:server_data_node,universal:node2.universal?.load?{type:"data",data,uses}:null,data:data??server_data_node?. +data??null,slash:node2.universal?.trailingSlash??server_data_node?.slash}}function resolve_fetch_url(input,init2,url2){let requested=input instanceof Request?input.url:input;const resolved=new URL(requested,url2);resolved.origin===url2.origin&&(requested=resolved.href.slice(url2.origin.length));const promise=started?subsequent_fetch(requested,resolved.href,init2):initial_fetch(requested,init2);return{resolved,promise}}function has_changed(parent_changed,route_changed,url_changed,search_params_changed,uses,params){ +if(force_invalidation)return!0;if(!uses)return!1;if(uses.parent&&parent_changed||uses.route&&route_changed||uses.url&&url_changed)return!0;for(const tracked_params of uses.search_params)if(search_params_changed.has(tracked_params))return!0;for(const param of uses.params)if(params[param]!==current.params[param])return!0;for(const href of uses.dependencies)if(invalidated.some(fn=>fn(new URL(href))))return!0;return!1}function create_data_node(node2,previous2){return node2?.type==="data"?node2:node2?. +type==="skip"?previous2??null:null}function diff_search_params(old_url,new_url){if(!old_url)return new Set(new_url.searchParams.keys());const changed=new Set([...old_url.searchParams.keys(),...new_url.searchParams.keys()]);for(const key2 of changed){const old_values2=old_url.searchParams.getAll(key2),new_values=new_url.searchParams.getAll(key2);old_values2.every(value=>new_values.includes(value))&&new_values.every(value=>old_values2.includes(value))&&changed.delete(key2)}return changed}function preload_error({ +error:error2,url:url2,route,params}){return{type:"loaded",state:{error:error2,url:url2,route,params,branch:[]},props:{page:clone_page(page$3),constructors:[]}}}async function load_route({id:id2,invalidating,url:url2,params,route,preload:preload2}){if(load_cache?.id===id2)return preload_tokens.delete(load_cache.token),load_cache.promise;const{errors:errors2,layouts,leaf:leaf2}=route,loaders=[...layouts,leaf2];errors2.forEach(loader=>loader?.().catch(noop$2)),loaders.forEach(loader=>loader?.[1](). +catch(noop$2));const url_changed=current.url?id2!==get_page_key(current.url):!1,route_changed=current.route?route.id!==current.route.id:!1,search_params_changed=diff_search_params(current.url,url2);let parent_changed=!1;const branch_promises=loaders.map(async(loader,i)=>{if(!loader)return;const previous2=current.branch[i];return loader[1]===previous2?.loader&&!has_changed(parent_changed,route_changed,url_changed,search_params_changed,previous2.universal?.uses,params)?previous2:(parent_changed=!0, +load_node({loader:loader[1],url:url2,params,route,parent:async()=>{const data={};for(let j=0;j<i;j+=1)Object.assign(data,(await branch_promises[j])?.data);return data},server_data_node:create_data_node(loader[0]?{type:"skip"}:null,loader[0]?previous2?.server:void 0)}))});for(const p2 of branch_promises)p2.catch(noop$2);const branch2=[];for(let i=0;i<loaders.length;i+=1)if(loaders[i])try{branch2.push(await branch_promises[i])}catch(err){if(err instanceof Redirect)return{type:"redirect",location:err. +location};if(preload_tokens.has(preload2))return preload_error({error:await handle_error(err,{params,url:url2,route:{id:route.id}}),url:url2,params,route});let status=get_status(err),error2;if(err instanceof HttpError)error2=err.body;else{if(await stores.updated.check())return await update_service_worker(),await native_navigation(url2);error2=await handle_error(err,{params,url:url2,route:{id:route.id}})}const error_load=await load_nearest_error_page(i,branch2,errors2);return error_load?get_navigation_result_from_branch( +{url:url2,params,branch:branch2.slice(0,error_load.idx).concat(error_load.node),errors:errors2,status,error:error2,route}):await server_fallback(url2,{id:route.id},error2,status)}else branch2.push(void 0);return get_navigation_result_from_branch({url:url2,params,branch:branch2,errors:errors2,status:200,error:null,route,form:invalidating?void 0:null})}async function load_nearest_error_page(i,branch2,errors2){for(;i--;)if(errors2[i]){let j=i;for(;!branch2[j];)j-=1;try{return{idx:j+1,node:{node:await errors2[i](), +loader:errors2[i],data:{},server:null,universal:null}}}catch{continue}}}async function load_root_error_page({status,error:error2,url:url2,route}){const params={};let server_data_node=null;try{const root_layout=await load_node({loader:default_layout_loader,url:url2,params,route,parent:()=>Promise.resolve({}),server_data_node:create_data_node(server_data_node)}),root_error={node:await default_error_loader(),loader:default_error_loader,universal:null,server:null,data:null};return get_navigation_result_from_branch( +{url:url2,params,branch:[root_layout,root_error],status,error:error2,errors:[],route:null})}catch(error22){if(error22 instanceof Redirect)return _goto(new URL(error22.location,location.href),{},0);throw error22}}async function get_rerouted_url(url2){const href=url2.href;if(reroute_cache.has(href))return reroute_cache.get(href);let rerouted;try{const promise=(async()=>{let rerouted2=await app$1.hooks.reroute({url:new URL(url2),fetch:async(input,init2)=>resolve_fetch_url(input,init2,url2).promise})?? +url2;if(typeof rerouted2=="string"){const tmp=new URL(url2);app$1.hash?tmp.hash=rerouted2:tmp.pathname=rerouted2,rerouted2=tmp}return rerouted2})();reroute_cache.set(href,promise),rerouted=await promise}catch{reroute_cache.delete(href);return}return rerouted}async function get_navigation_intent(url2,invalidating){if(url2&&!is_external_url(url2,base,app$1.hash)){const rerouted=await get_rerouted_url(url2);if(!rerouted)return;const path2=get_url_path(rerouted);for(const route of routes){const params=route. +exec(path2);if(params)return{id:get_page_key(url2),invalidating,route,params:decode_params(params),url:url2}}}}function get_url_path(url2){return decode_pathname(app$1.hash?url2.hash.replace(/^#/,"").replace(/[?#].+/,""):url2.pathname.slice(base.length))||"/"}function get_page_key(url2){return(app$1.hash?url2.hash.replace(/^#/,""):url2.pathname)+url2.search}function _before_navigate({url:url2,type:type2,intent,delta,event:event2,scroll}){let should_block=!1;const nav=create_navigation(current,intent, +url2,type2,scroll??null);delta!==void 0&&(nav.navigation.delta=delta),event2!==void 0&&(nav.navigation.event=event2);const cancellable={...nav.navigation,cancel:()=>{should_block=!0,nav.reject(new Error("navigation cancelled"))}};return is_navigating||before_navigate_callbacks.forEach(fn=>fn(cancellable)),should_block?null:nav}async function navigate({type:type2,url:url2,popped,keepfocus,noscroll,replace_state,state:state2={},redirect_count=0,nav_token={},accept=noop$2,block:block2=noop$2,event:event2}){ +const prev_token=token;token=nav_token;const intent=await get_navigation_intent(url2,!1),nav=type2==="enter"?create_navigation(current,intent,url2,type2):_before_navigate({url:url2,type:type2,delta:popped?.delta,intent,scroll:popped?.scroll,event:event2});if(!nav){block2(),token===nav_token&&(token=prev_token);return}const previous_history_index=current_history_index,previous_navigation_index=current_navigation_index;accept(),is_navigating=!0,started&&nav.navigation.type!=="enter"&&stores.navigating. +set(navigating.current=nav.navigation);let navigation_result=intent&&await load_route(intent);if(!navigation_result){if(is_external_url(url2,base,app$1.hash))return await native_navigation(url2,replace_state);navigation_result=await server_fallback(url2,{id:null},await handle_error(new SvelteKitError(404,"Not Found",`Not found: ${url2.pathname}`),{url:url2,params:{},route:{id:null}}),404,replace_state)}if(url2=intent?.url||url2,token!==nav_token)return nav.reject(new Error("navigation aborted")), +!1;if(navigation_result.type==="redirect"){if(redirect_count<20){await navigate({type:type2,url:new URL(navigation_result.location,url2),popped,keepfocus,noscroll,replace_state,state:state2,redirect_count:redirect_count+1,nav_token}),nav.fulfil(void 0);return}navigation_result=await load_root_error_page({status:500,error:await handle_error(new Error("Redirect loop"),{url:url2,params:{},route:{id:null}}),url:url2,route:{id:null}})}else navigation_result.props.page.status>=400&&await stores.updated. +check()&&(await update_service_worker(),await native_navigation(url2,replace_state));if(reset_invalidation(),update_scroll_positions(previous_history_index),capture_snapshot(previous_navigation_index),navigation_result.props.page.url.pathname!==url2.pathname&&(url2.pathname=navigation_result.props.page.url.pathname),state2=popped?popped.state:state2,!popped){const change=replace_state?0:1,entry={[HISTORY_INDEX]:current_history_index+=change,[NAVIGATION_INDEX]:current_navigation_index+=change,[STATES_KEY]:state2}; +(replace_state?history.replaceState:history.pushState).call(history,entry,"",url2),replace_state||clear_onward_history(current_history_index,current_navigation_index)}const load_cache_fork=intent&&load_cache?.id===intent.id?load_cache.fork:null;load_cache?.fork&&!load_cache_fork&&discard_load_cache(),load_cache=null,navigation_result.props.page.state=state2;let commit_promise;if(started){const after_navigate=(await Promise.all(Array.from(on_navigate_callbacks,fn=>fn(nav.navigation)))).filter(value=>typeof value== +"function");if(after_navigate.length>0){let cleanup=function(){after_navigate.forEach(fn=>{after_navigate_callbacks.delete(fn)})};after_navigate.push(cleanup),after_navigate.forEach(fn=>{after_navigate_callbacks.add(fn)})}const target2=nav.navigation.to;current={...navigation_result.state,nav:{params:target2.params,route:target2.route,url:target2.url}},navigation_result.props.page&&(navigation_result.props.page.url=url2);const fork=load_cache_fork&&await load_cache_fork;fork?commit_promise=fork. +commit():(rendering_error=null,root$1X.$set(navigation_result.props),rendering_error&&Object.assign(navigation_result.props.page,rendering_error),update(navigation_result.props.page),commit_promise=settled?.()),has_navigated=!0}else await initialize(navigation_result,target,!1);const{activeElement}=document;await commit_promise,await tick(),await tick();let deep_linked=null;if(autoscroll){const scroll=popped?popped.scroll:noscroll?scroll_state():null;scroll?scrollTo(scroll.x,scroll.y):(deep_linked= +url2.hash&&document.getElementById(get_id(url2)))?deep_linked.scrollIntoView():scrollTo(0,0)}const changed_focus=document.activeElement!==activeElement&&document.activeElement!==document.body;!keepfocus&&!changed_focus&&reset_focus(url2,!deep_linked),autoscroll=!0,navigation_result.props.page&&(rendering_error&&Object.assign(navigation_result.props.page,rendering_error),Object.assign(page$3,navigation_result.props.page)),is_navigating=!1,type2==="popstate"&&restore_snapshot(current_navigation_index), +nav.fulfil(void 0),nav.navigation.to&&(nav.navigation.to.scroll=scroll_state()),after_navigate_callbacks.forEach(fn=>fn(nav.navigation)),stores.navigating.set(navigating.current=null)}async function server_fallback(url2,route,error2,status,replace_state){return url2.origin===origin&&url2.pathname===location.pathname&&!hydrated?await load_root_error_page({status,error:error2,url:url2,route}):await native_navigation(url2,replace_state)}function setup_preload(){let mousemove_timeout,current_a={element:void 0, +href:void 0},current_priority;container.addEventListener("mousemove",event2=>{const target2=event2.target;clearTimeout(mousemove_timeout),mousemove_timeout=setTimeout(()=>{preload2(target2,PRELOAD_PRIORITIES.hover)},20)});function tap2(event2){event2.defaultPrevented||preload2(event2.composedPath()[0],PRELOAD_PRIORITIES.tap)}container.addEventListener("mousedown",tap2),container.addEventListener("touchstart",tap2,{passive:!0});const observer=new IntersectionObserver(entries=>{for(const entry of entries) +entry.isIntersecting&&(_preload_code(new URL(entry.target.href)),observer.unobserve(entry.target))},{threshold:0});async function preload2(element2,priority){const a=find_anchor(element2,container),interacted=a===current_a.element&&a?.href===current_a.href&&priority>=current_priority;if(!a||interacted)return;const{url:url2,external,download}=get_link_info(a,base,app$1.hash);if(external||download)return;const options=get_router_options(a),same_url=url2&&get_page_key(current.url)===get_page_key(url2); +if(!(options.reload||same_url))if(priority<=options.preload_data){current_a={element:a,href:a.href},current_priority=PRELOAD_PRIORITIES.tap;const intent=await get_navigation_intent(url2,!1);if(!intent)return;_preload_data(intent)}else priority<=options.preload_code&&(current_a={element:a,href:a.href},current_priority=priority,_preload_code(url2))}function after_navigate(){observer.disconnect();for(const a of container.querySelectorAll("a")){const{url:url2,external,download}=get_link_info(a,base, +app$1.hash);if(external||download)continue;const options=get_router_options(a);options.reload||(options.preload_code===PRELOAD_PRIORITIES.viewport&&observer.observe(a),options.preload_code===PRELOAD_PRIORITIES.eager&&_preload_code(url2))}}after_navigate_callbacks.add(after_navigate),after_navigate()}function handle_error(error2,event2){if(error2 instanceof HttpError)return error2.body;const status=get_status(error2),message=get_message(error2);return app$1.hooks.handleError({error:error2,event:event2, +status,message})??{message}}function add_navigation_callback(callbacks,callback){onMount(()=>(callbacks.add(callback),()=>{callbacks.delete(callback)}))}function afterNavigate(callback){add_navigation_callback(after_navigate_callbacks,callback)}function beforeNavigate(callback){add_navigation_callback(before_navigate_callbacks,callback)}function goto(url2,opts={}){return url2=new URL(resolve_url(url2)),url2.origin!==origin?Promise.reject(new Error("goto: invalid URL")):_goto(url2,opts,0)}function push_invalidated(resource){ +if(typeof resource=="function")invalidated.push(resource);else{const{href}=new URL(resource,location.href);invalidated.push(url2=>url2.href===href)}}function replaceState(url2,state2){const opts={[HISTORY_INDEX]:current_history_index,[NAVIGATION_INDEX]:current_navigation_index,[PAGE_URL_KEY]:page$3.url.href,[STATES_KEY]:state2};history.replaceState(opts,"",resolve_url(url2)),page$3.state=state2,root$1X.$set({page:untrack(()=>clone_page(page$3))})}function _start_router(){history.scrollRestoration= "manual",addEventListener("beforeunload",e=>{let should_block=!1;if(persist_state(),!is_navigating){const nav=create_navigation(current,void 0,null,"leave"),navigation={...nav.navigation,cancel:()=>{should_block=!0,nav.reject(new Error("navigation cancelled"))}};before_navigate_callbacks.forEach(fn=>fn(navigation))}should_block?(e.preventDefault(),e.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&persist_state()}),navigator. connection?.saveData||setup_preload(),container.addEventListener("click",async event2=>{if(event2.button||event2.which!==1||event2.metaKey||event2.ctrlKey||event2.shiftKey||event2.altKey||event2.defaultPrevented)return;const a=find_anchor(event2.composedPath()[0],container);if(!a)return;const{url:url2,external,target:target2,download}=get_link_info(a,base,app$1.hash);if(!url2)return;if(target2==="_parent"||target2==="_top"){if(window.parent!==window)return}else if(target2&&target2!=="_self")return; const options=get_router_options(a);if(!(a instanceof SVGAElement)&&url2.protocol!==location.protocol&&!(url2.protocol==="https:"||url2.protocol==="http:")||download)return;const[nonhash,hash2]=(app$1.hash?url2.hash.replace(/^#/,""):url2.href).split("#"),same_pathname=nonhash===strip_hash(location);if(external||options.reload&&(!same_pathname||!hash2)){_before_navigate({url:url2,type:"link",event:event2})?is_navigating=!0:event2.preventDefault();return}if(hash2!==void 0&&same_pathname){const[,current_hash]=current. @@ -290,136 +298,145 @@ href===location.href,event:event2})}),addEventListener("popstate",async event2=> history.go(-delta)},nav_token:token,event:event2})}else if(!hash_navigating){const url2=new URL(location.href);update_url(url2),app$1.hash&&location.reload()}}}),addEventListener("hashchange",()=>{hash_navigating&&(hash_navigating=!1,history.replaceState({...history.state,[HISTORY_INDEX]:++current_history_index,[NAVIGATION_INDEX]:current_navigation_index},"",location.href))});for(const link2 of document.querySelectorAll("link"))ICON_REL_ATTRIBUTES.has(link2.rel)&&(link2.href=link2.href);addEventListener( "pageshow",event2=>{event2.persisted&&stores.navigating.set(navigating.current=null)});function update_url(url2){current.url=page$3.url=url2,stores.page.set(clone_page(page$3)),stores.page.notify()}}async function _hydrate(target2,{status=200,error:error2,node_ids,params,route,server_route,data:server_data_nodes,form}){hydrated=!0;const url2=new URL(location.href);let parsed_route;({params={},route={id:null}}=await get_navigation_intent(url2,!1)||{}),parsed_route=routes.find(({id:id2})=>id2===route. id);let result,hydrate2=!0;try{const branch_promises=node_ids.map(async(n,i)=>{const server_data_node=server_data_nodes[i];return server_data_node?.uses&&(server_data_node.uses=deserialize_uses(server_data_node.uses)),load_node({loader:app$1.nodes[n],url:url2,params,route,parent:async()=>{const data={};for(let j=0;j<i;j+=1)Object.assign(data,(await branch_promises[j]).data);return data},server_data_node:create_data_node(server_data_node)})}),branch2=await Promise.all(branch_promises);if(parsed_route){ -const layouts=parsed_route.layouts;for(let i=0;i<layouts.length;i++)layouts[i]||branch2.splice(i,0,void 0)}result=get_navigation_result_from_branch({url:url2,params,branch:branch2,status,error:error2,form,route:parsed_route??null})}catch(error22){if(error22 instanceof Redirect){await native_navigation(new URL(error22.location,location.href));return}result=await load_root_error_page({status:get_status(error22),error:await handle_error(error22,{url:url2,params,route}),url:url2,route}),target2.textContent= -"",hydrate2=!1}result.props.page&&(result.props.page.state={}),await initialize(result,target2,hydrate2)}function deserialize_uses(uses){return{dependencies:new Set(uses?.dependencies??[]),params:new Set(uses?.params??[]),parent:!!uses?.parent,route:!!uses?.route,url:!!uses?.url,search_params:new Set(uses?.search_params??[])}}let resetting_focus=!1;function reset_focus(url2,scroll=null){const autofocus2=document.querySelector("[autofocus]");if(autofocus2)autofocus2.focus();else{const id2=get_id( -url2);if(id2&&document.getElementById(id2)){const{x,y}=scroll??scroll_state();setTimeout(()=>{const history_state=history.state;resetting_focus=!0,location.replace(`#${id2}`),app$1.hash&&location.replace(url2.hash),history.replaceState(history_state,"",url2.hash),scrollTo(x,y),resetting_focus=!1})}else{const root2=document.body,tabindex=root2.getAttribute("tabindex");root2.tabIndex=-1,root2.focus({preventScroll:!0,focusVisible:!1}),tabindex!==null?root2.setAttribute("tabindex",tabindex):root2.removeAttribute( -"tabindex")}const selection=getSelection();if(selection&&selection.type!=="None"){const ranges=[];for(let i=0;i<selection.rangeCount;i+=1)ranges.push(selection.getRangeAt(i));setTimeout(()=>{if(selection.rangeCount===ranges.length){for(let i=0;i<selection.rangeCount;i+=1){const a=ranges[i],b=selection.getRangeAt(i);if(a.commonAncestorContainer!==b.commonAncestorContainer||a.startContainer!==b.startContainer||a.endContainer!==b.endContainer||a.startOffset!==b.startOffset||a.endOffset!==b.endOffset) -return}selection.removeAllRanges()}})}}}function create_navigation(current2,intent,url2,type2){let fulfil,reject;const complete=new Promise((f,r2)=>{fulfil=f,reject=r2});return complete.catch(()=>{}),{navigation:{from:{params:current2.params,route:{id:current2.route?.id??null},url:current2.url},to:url2&&{params:intent?.params??null,route:{id:intent?.route?.id??null},url:url2},willUnload:!intent,type:type2,complete},fulfil,reject}}function clone_page(page2){return{data:page2.data,error:page2.error, -form:page2.form,params:page2.params,route:page2.route,state:page2.state,status:page2.status,url:page2.url}}function decode_hash(url2){const new_url=new URL(url2);return new_url.hash=decodeURIComponent(url2.hash),new_url}function get_id(url2){let id2;if(app$1.hash){const[,,second]=url2.hash.split("#",3);id2=second??""}else id2=url2.hash.slice(1);return decodeURIComponent(id2)}const scriptRel="modulepreload",assetsURL=function(dep,importerUrl){return new URL(dep,importerUrl).href},seen={},__vitePreload=function(baseModule,deps,importerUrl){ -let promise=Promise.resolve();if(deps&&deps.length>0){let allSettled=function(promises$2){return Promise.all(promises$2.map(p2=>Promise.resolve(p2).then(value$1=>({status:"fulfilled",value:value$1}),reason=>({status:"rejected",reason}))))};const links=document.getElementsByTagName("link"),cspNonceMeta=document.querySelector("meta[property=csp-nonce]"),cspNonce=cspNonceMeta?.nonce||cspNonceMeta?.getAttribute("nonce");promise=allSettled(deps.map(dep=>{if(dep=assetsURL(dep,importerUrl),dep in seen) -return;seen[dep]=!0;const isCss=dep.endsWith(".css"),cssSelector=isCss?'[rel="stylesheet"]':"";if(importerUrl)for(let i$1=links.length-1;i$1>=0;i$1--){const link$12=links[i$1];if(link$12.href===dep&&(!isCss||link$12.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${dep}"]${cssSelector}`))return;const link2=document.createElement("link");if(link2.rel=isCss?"stylesheet":scriptRel,isCss||(link2.as="script"),link2.crossOrigin="",link2.href=dep,cspNonce&&link2.setAttribute("nonc\ -e",cspNonce),document.head.appendChild(link2),isCss)return new Promise((res,rej)=>{link2.addEventListener("load",res),link2.addEventListener("error",()=>rej(new Error(`Unable to preload CSS for ${dep}`)))})}))}function handlePreloadError(err$2){const e$1=new Event("vite:preloadError",{cancelable:!0});if(e$1.payload=err$2,window.dispatchEvent(e$1),!e$1.defaultPrevented)throw err$2}return promise.then(res=>{for(const item of res||[])item.status==="rejected"&&handlePreloadError(item.reason);return baseModule(). -catch(handlePreloadError)})},matchers={},PUBLIC_VERSION="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(PUBLIC_VERSION);var root_4$G=from_html('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),root$1N=from_html("<!> <!>",1);function Root$6($$anchor,$$props){push$1($$props,!0);let components2=prop($$props, -"components",23,()=>[]),data_0=prop($$props,"data_0",3,null),data_1=prop($$props,"data_1",3,null);user_pre_effect(()=>$$props.stores.page.set($$props.page)),user_effect(()=>{$$props.stores,$$props.page,$$props.constructors,components2(),$$props.form,data_0(),data_1(),$$props.stores.page.notify()});let mounted=state$1(!1),navigated=state$1(!1),title2=state$1(null);onMount$1(()=>{const unsubscribe=$$props.stores.page.subscribe(()=>{get$4(mounted)&&(set$1(navigated,!0),tick().then(()=>{set$1(title2, -document.title||"untitled page",!0)}))});return set$1(mounted,!0),unsubscribe});const Pyramid_1=user_derived(()=>$$props.constructors[1]);var fragment=root$1N(),node2=first_child(fragment);{var consequent=$$anchor2=>{const Pyramid_0=user_derived(()=>$$props.constructors[0]);var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>get$4(Pyramid_0),($$anchor3,Pyramid_0_1)=>{bind_this(Pyramid_0_1($$anchor3,{get data(){return data_0()},get form(){return $$props.form},get params(){ -return $$props.page.params},children:($$anchor4,$$slotProps)=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);component(node_2,()=>get$4(Pyramid_1),($$anchor5,Pyramid_1_1)=>{bind_this(Pyramid_1_1($$anchor5,{get data(){return data_1()},get form(){return $$props.form},get params(){return $$props.page.params}}),$$value=>components2()[1]=$$value,()=>components2()?.[1])}),append($$anchor4,fragment_2)},$$slots:{default:!0}}),$$value=>components2()[0]=$$value,()=>components2()?.[0])}),append( -$$anchor2,fragment_1)},alternate=$$anchor2=>{const Pyramid_0=user_derived(()=>$$props.constructors[0]);var fragment_3=comment$2(),node_3=first_child(fragment_3);component(node_3,()=>get$4(Pyramid_0),($$anchor3,Pyramid_0_2)=>{bind_this(Pyramid_0_2($$anchor3,{get data(){return data_0()},get form(){return $$props.form},get params(){return $$props.page.params}}),$$value=>components2()[0]=$$value,()=>components2()?.[0])}),append($$anchor2,fragment_3)};if_block(node2,$$render=>{$$props.constructors[1]? -$$render(consequent):$$render(alternate,!1)})}var node_4=sibling(node2,2);{var consequent_2=$$anchor2=>{var div=root_4$G(),node_5=child(div);{var consequent_1=$$anchor3=>{var text2=text$8();template_effect(()=>set_text(text2,get$4(title2))),append($$anchor3,text2)};if_block(node_5,$$render=>{get$4(navigated)&&$$render(consequent_1)})}reset(div),append($$anchor2,div)};if_block(node_4,$$render=>{get$4(mounted)&&$$render(consequent_2)})}append($$anchor,fragment),pop()}const root$1M=asClassComponent( -Root$6),nodes=[()=>__vitePreload(()=>Promise.resolve().then(()=>_0),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_1),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_2),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_3),void 0,import.meta.url)],server_loads=[],dictionary={"/":[2],"/chat/[id]":[3]},hooks={handleError:({error:error2})=>{console.error(error2)},reroute:()=>{},transport:{}}, -decoders=Object.fromEntries(Object.entries(hooks.transport).map(([k,v])=>[k,v.decode])),encoders=Object.fromEntries(Object.entries(hooks.transport).map(([k,v])=>[k,v.encode])),hash=!0,decode$2=(type2,value)=>decoders[type2](value),app=Object.freeze(Object.defineProperty({__proto__:null,decode:decode$2,decoders,dictionary,encoders,hash,hooks,matchers,nodes,root:root$1M,server_loads},Symbol.toStringTag,{value:"Module"}));function start(element2,options){start$1(app,element2,options)}const page$2={ -get params(){return page$3.params},get route(){return page$3.route},get status(){return page$3.status},get url(){return page$3.url}};stores.updated.check;const page$1=page$2,CLASS_PART_SEPARATOR="-",createClassGroupUtils=config2=>{const classMap=createClassMap(config2),{conflictingClassGroups,conflictingClassGroupModifiers}=config2;return{getClassGroupId:className=>{const classParts=className.split(CLASS_PART_SEPARATOR);return classParts[0]===""&&classParts.length!==1&&classParts.shift(),getGroupRecursive( -classParts,classMap)||getGroupIdForArbitraryProperty(className)},getConflictingClassGroupIds:(classGroupId,hasPostfixModifier)=>{const conflicts=conflictingClassGroups[classGroupId]||[];return hasPostfixModifier&&conflictingClassGroupModifiers[classGroupId]?[...conflicts,...conflictingClassGroupModifiers[classGroupId]]:conflicts}}},getGroupRecursive=(classParts,classPartObject)=>{if(classParts.length===0)return classPartObject.classGroupId;const currentClassPart=classParts[0],nextClassPartObject=classPartObject. -nextPart.get(currentClassPart),classGroupFromNextClassPart=nextClassPartObject?getGroupRecursive(classParts.slice(1),nextClassPartObject):void 0;if(classGroupFromNextClassPart)return classGroupFromNextClassPart;if(classPartObject.validators.length===0)return;const classRest=classParts.join(CLASS_PART_SEPARATOR);return classPartObject.validators.find(({validator})=>validator(classRest))?.classGroupId},arbitraryPropertyRegex=/^\[(.+)\]$/,getGroupIdForArbitraryProperty=className=>{if(arbitraryPropertyRegex. -test(className)){const arbitraryPropertyClassName=arbitraryPropertyRegex.exec(className)[1],property=arbitraryPropertyClassName?.substring(0,arbitraryPropertyClassName.indexOf(":"));if(property)return"arbitrary.."+property}},createClassMap=config2=>{const{theme,classGroups}=config2,classMap={nextPart:new Map,validators:[]};for(const classGroupId in classGroups)processClassesRecursively(classGroups[classGroupId],classMap,classGroupId,theme);return classMap},processClassesRecursively=(classGroup,classPartObject,classGroupId,theme)=>{ -classGroup.forEach(classDefinition=>{if(typeof classDefinition=="string"){const classPartObjectToEdit=classDefinition===""?classPartObject:getPart(classPartObject,classDefinition);classPartObjectToEdit.classGroupId=classGroupId;return}if(typeof classDefinition=="function"){if(isThemeGetter(classDefinition)){processClassesRecursively(classDefinition(theme),classPartObject,classGroupId,theme);return}classPartObject.validators.push({validator:classDefinition,classGroupId});return}Object.entries(classDefinition). -forEach(([key2,classGroup2])=>{processClassesRecursively(classGroup2,getPart(classPartObject,key2),classGroupId,theme)})})},getPart=(classPartObject,path2)=>{let currentClassPartObject=classPartObject;return path2.split(CLASS_PART_SEPARATOR).forEach(pathPart=>{currentClassPartObject.nextPart.has(pathPart)||currentClassPartObject.nextPart.set(pathPart,{nextPart:new Map,validators:[]}),currentClassPartObject=currentClassPartObject.nextPart.get(pathPart)}),currentClassPartObject},isThemeGetter=func=>func. -isThemeGetter,createLruCache=maxCacheSize=>{if(maxCacheSize<1)return{get:()=>{},set:()=>{}};let cacheSize=0,cache2=new Map,previousCache=new Map;const update2=(key2,value)=>{cache2.set(key2,value),cacheSize++,cacheSize>maxCacheSize&&(cacheSize=0,previousCache=cache2,cache2=new Map)};return{get(key2){let value=cache2.get(key2);if(value!==void 0)return value;if((value=previousCache.get(key2))!==void 0)return update2(key2,value),value},set(key2,value){cache2.has(key2)?cache2.set(key2,value):update2( -key2,value)}}},IMPORTANT_MODIFIER="!",MODIFIER_SEPARATOR=":",MODIFIER_SEPARATOR_LENGTH=MODIFIER_SEPARATOR.length,createParseClassName=config2=>{const{prefix,experimentalParseClassName}=config2;let parseClassName=className=>{const modifiers=[];let bracketDepth=0,parenDepth=0,modifierStart=0,postfixModifierPosition;for(let index2=0;index2<className.length;index2++){let currentCharacter=className[index2];if(bracketDepth===0&&parenDepth===0){if(currentCharacter===MODIFIER_SEPARATOR){modifiers.push(className. -slice(modifierStart,index2)),modifierStart=index2+MODIFIER_SEPARATOR_LENGTH;continue}if(currentCharacter==="/"){postfixModifierPosition=index2;continue}}currentCharacter==="["?bracketDepth++:currentCharacter==="]"?bracketDepth--:currentCharacter==="("?parenDepth++:currentCharacter===")"&&parenDepth--}const baseClassNameWithImportantModifier=modifiers.length===0?className:className.substring(modifierStart),baseClassName=stripImportantModifier(baseClassNameWithImportantModifier),hasImportantModifier=baseClassName!== -baseClassNameWithImportantModifier,maybePostfixModifierPosition=postfixModifierPosition&&postfixModifierPosition>modifierStart?postfixModifierPosition-modifierStart:void 0;return{modifiers,hasImportantModifier,baseClassName,maybePostfixModifierPosition}};if(prefix){const fullPrefix=prefix+MODIFIER_SEPARATOR,parseClassNameOriginal=parseClassName;parseClassName=className=>className.startsWith(fullPrefix)?parseClassNameOriginal(className.substring(fullPrefix.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1, -baseClassName:className,maybePostfixModifierPosition:void 0}}if(experimentalParseClassName){const parseClassNameOriginal=parseClassName;parseClassName=className=>experimentalParseClassName({className,parseClassName:parseClassNameOriginal})}return parseClassName},stripImportantModifier=baseClassName=>baseClassName.endsWith(IMPORTANT_MODIFIER)?baseClassName.substring(0,baseClassName.length-1):baseClassName.startsWith(IMPORTANT_MODIFIER)?baseClassName.substring(1):baseClassName,createSortModifiers=config2=>{ -const orderSensitiveModifiers=Object.fromEntries(config2.orderSensitiveModifiers.map(modifier=>[modifier,!0]));return modifiers=>{if(modifiers.length<=1)return modifiers;const sortedModifiers=[];let unsortedModifiers=[];return modifiers.forEach(modifier=>{modifier[0]==="["||orderSensitiveModifiers[modifier]?(sortedModifiers.push(...unsortedModifiers.sort(),modifier),unsortedModifiers=[]):unsortedModifiers.push(modifier)}),sortedModifiers.push(...unsortedModifiers.sort()),sortedModifiers}},createConfigUtils=config2=>({ -cache:createLruCache(config2.cacheSize),parseClassName:createParseClassName(config2),sortModifiers:createSortModifiers(config2),...createClassGroupUtils(config2)}),SPLIT_CLASSES_REGEX=/\s+/,mergeClassList=(classList,configUtils)=>{const{parseClassName,getClassGroupId,getConflictingClassGroupIds,sortModifiers}=configUtils,classGroupsInConflict=[],classNames=classList.trim().split(SPLIT_CLASSES_REGEX);let result="";for(let index2=classNames.length-1;index2>=0;index2-=1){const originalClassName=classNames[index2], -{isExternal,modifiers,hasImportantModifier,baseClassName,maybePostfixModifierPosition}=parseClassName(originalClassName);if(isExternal){result=originalClassName+(result.length>0?" "+result:result);continue}let hasPostfixModifier=!!maybePostfixModifierPosition,classGroupId=getClassGroupId(hasPostfixModifier?baseClassName.substring(0,maybePostfixModifierPosition):baseClassName);if(!classGroupId){if(!hasPostfixModifier){result=originalClassName+(result.length>0?" "+result:result);continue}if(classGroupId= -getClassGroupId(baseClassName),!classGroupId){result=originalClassName+(result.length>0?" "+result:result);continue}hasPostfixModifier=!1}const variantModifier=sortModifiers(modifiers).join(":"),modifierId=hasImportantModifier?variantModifier+IMPORTANT_MODIFIER:variantModifier,classId=modifierId+classGroupId;if(classGroupsInConflict.includes(classId))continue;classGroupsInConflict.push(classId);const conflictGroups=getConflictingClassGroupIds(classGroupId,hasPostfixModifier);for(let i=0;i<conflictGroups. -length;++i){const group=conflictGroups[i];classGroupsInConflict.push(modifierId+group)}result=originalClassName+(result.length>0?" "+result:result)}return result};function twJoin(){let index2=0,argument,resolvedValue,string2="";for(;index2<arguments.length;)(argument=arguments[index2++])&&(resolvedValue=toValue(argument))&&(string2&&(string2+=" "),string2+=resolvedValue);return string2}const toValue=mix=>{if(typeof mix=="string")return mix;let resolvedValue,string2="";for(let k=0;k<mix.length;k++) -mix[k]&&(resolvedValue=toValue(mix[k]))&&(string2&&(string2+=" "),string2+=resolvedValue);return string2};function createTailwindMerge(createConfigFirst,...createConfigRest){let configUtils,cacheGet,cacheSet,functionToCall=initTailwindMerge;function initTailwindMerge(classList){const config2=createConfigRest.reduce((previousConfig,createConfigCurrent)=>createConfigCurrent(previousConfig),createConfigFirst());return configUtils=createConfigUtils(config2),cacheGet=configUtils.cache.get,cacheSet=configUtils. -cache.set,functionToCall=tailwindMerge,tailwindMerge(classList)}function tailwindMerge(classList){const cachedResult=cacheGet(classList);if(cachedResult)return cachedResult;const result=mergeClassList(classList,configUtils);return cacheSet(classList,result),result}return function(){return functionToCall(twJoin.apply(null,arguments))}}const fromTheme=key2=>{const themeGetter=theme=>theme[key2]||[];return themeGetter.isThemeGetter=!0,themeGetter},arbitraryValueRegex=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,arbitraryVariableRegex=/^\((?:(\w[\w-]*):)?(.+)\)$/i, -fractionRegex=/^\d+\/\d+$/,tshirtUnitRegex=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,lengthUnitRegex=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,colorFunctionRegex=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,shadowRegex=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,imageRegex=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,isFraction=value=>fractionRegex. -test(value),isNumber=value=>!!value&&!Number.isNaN(Number(value)),isInteger=value=>!!value&&Number.isInteger(Number(value)),isPercent=value=>value.endsWith("%")&&isNumber(value.slice(0,-1)),isTshirtSize=value=>tshirtUnitRegex.test(value),isAny=()=>!0,isLengthOnly=value=>lengthUnitRegex.test(value)&&!colorFunctionRegex.test(value),isNever=()=>!1,isShadow=value=>shadowRegex.test(value),isImage=value=>imageRegex.test(value),isAnyNonArbitrary=value=>!isArbitraryValue(value)&&!isArbitraryVariable(value), -isArbitrarySize=value=>getIsArbitraryValue(value,isLabelSize,isNever),isArbitraryValue=value=>arbitraryValueRegex.test(value),isArbitraryLength=value=>getIsArbitraryValue(value,isLabelLength,isLengthOnly),isArbitraryNumber=value=>getIsArbitraryValue(value,isLabelNumber,isNumber),isArbitraryPosition=value=>getIsArbitraryValue(value,isLabelPosition,isNever),isArbitraryImage=value=>getIsArbitraryValue(value,isLabelImage,isImage),isArbitraryShadow=value=>getIsArbitraryValue(value,isLabelShadow,isShadow), -isArbitraryVariable=value=>arbitraryVariableRegex.test(value),isArbitraryVariableLength=value=>getIsArbitraryVariable(value,isLabelLength),isArbitraryVariableFamilyName=value=>getIsArbitraryVariable(value,isLabelFamilyName),isArbitraryVariablePosition=value=>getIsArbitraryVariable(value,isLabelPosition),isArbitraryVariableSize=value=>getIsArbitraryVariable(value,isLabelSize),isArbitraryVariableImage=value=>getIsArbitraryVariable(value,isLabelImage),isArbitraryVariableShadow=value=>getIsArbitraryVariable( -value,isLabelShadow,!0),getIsArbitraryValue=(value,testLabel,testValue)=>{const result=arbitraryValueRegex.exec(value);return result?result[1]?testLabel(result[1]):testValue(result[2]):!1},getIsArbitraryVariable=(value,testLabel,shouldMatchNoLabel=!1)=>{const result=arbitraryVariableRegex.exec(value);return result?result[1]?testLabel(result[1]):shouldMatchNoLabel:!1},isLabelPosition=label=>label==="position"||label==="percentage",isLabelImage=label=>label==="image"||label==="url",isLabelSize=label=>label=== -"length"||label==="size"||label==="bg-size",isLabelLength=label=>label==="length",isLabelNumber=label=>label==="number",isLabelFamilyName=label=>label==="family-name",isLabelShadow=label=>label==="shadow",getDefaultConfig=()=>{const themeColor=fromTheme("color"),themeFont=fromTheme("font"),themeText=fromTheme("text"),themeFontWeight=fromTheme("font-weight"),themeTracking=fromTheme("tracking"),themeLeading=fromTheme("leading"),themeBreakpoint=fromTheme("breakpoint"),themeContainer=fromTheme("cont\ -ainer"),themeSpacing=fromTheme("spacing"),themeRadius=fromTheme("radius"),themeShadow=fromTheme("shadow"),themeInsetShadow=fromTheme("inset-shadow"),themeTextShadow=fromTheme("text-shadow"),themeDropShadow=fromTheme("drop-shadow"),themeBlur=fromTheme("blur"),themePerspective=fromTheme("perspective"),themeAspect=fromTheme("aspect"),themeEase=fromTheme("ease"),themeAnimate=fromTheme("animate"),scaleBreak=()=>["auto","avoid","all","avoid-page","page","left","right","column"],scalePosition=()=>["cen\ -ter","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],scalePositionWithArbitrary=()=>[...scalePosition(),isArbitraryVariable,isArbitraryValue],scaleOverflow=()=>["auto","hidden","clip","visible","scroll"],scaleOverscroll=()=>["auto","contain","none"],scaleUnambiguousSpacing=()=>[isArbitraryVariable,isArbitraryValue,themeSpacing],scaleInset=()=>[isFraction,"full","auto",...scaleUnambiguousSpacing()],scaleGridTemplateColsRows=()=>[ -isInteger,"none","subgrid",isArbitraryVariable,isArbitraryValue],scaleGridColRowStartAndEnd=()=>["auto",{span:["full",isInteger,isArbitraryVariable,isArbitraryValue]},isInteger,isArbitraryVariable,isArbitraryValue],scaleGridColRowStartOrEnd=()=>[isInteger,"auto",isArbitraryVariable,isArbitraryValue],scaleGridAutoColsRows=()=>["auto","min","max","fr",isArbitraryVariable,isArbitraryValue],scaleAlignPrimaryAxis=()=>["start","end","center","between","around","evenly","stretch","baseline","center-saf\ -e","end-safe"],scaleAlignSecondaryAxis=()=>["start","end","center","stretch","center-safe","end-safe"],scaleMargin=()=>["auto",...scaleUnambiguousSpacing()],scaleSizing=()=>[isFraction,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...scaleUnambiguousSpacing()],scaleColor=()=>[themeColor,isArbitraryVariable,isArbitraryValue],scaleBgPosition=()=>[...scalePosition(),isArbitraryVariablePosition,isArbitraryPosition,{position:[isArbitraryVariable,isArbitraryValue]}],scaleBgRepeat=()=>[ -"no-repeat",{repeat:["","x","y","space","round"]}],scaleBgSize=()=>["auto","cover","contain",isArbitraryVariableSize,isArbitrarySize,{size:[isArbitraryVariable,isArbitraryValue]}],scaleGradientStopPosition=()=>[isPercent,isArbitraryVariableLength,isArbitraryLength],scaleRadius=()=>["","none","full",themeRadius,isArbitraryVariable,isArbitraryValue],scaleBorderWidth=()=>["",isNumber,isArbitraryVariableLength,isArbitraryLength],scaleLineStyle=()=>["solid","dashed","dotted","double"],scaleBlendMode=()=>[ -"normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],scaleMaskImagePosition=()=>[isNumber,isPercent,isArbitraryVariablePosition,isArbitraryPosition],scaleBlur=()=>["","none",themeBlur,isArbitraryVariable,isArbitraryValue],scaleRotate=()=>["none",isNumber,isArbitraryVariable,isArbitraryValue],scaleScale=()=>["none",isNumber,isArbitraryVariable,isArbitraryValue],scaleSkew=()=>[ -isNumber,isArbitraryVariable,isArbitraryValue],scaleTranslate=()=>[isFraction,"full",...scaleUnambiguousSpacing()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[isTshirtSize],breakpoint:[isTshirtSize],color:[isAny],container:[isTshirtSize],"drop-shadow":[isTshirtSize],ease:["in","out","in-out"],font:[isAnyNonArbitrary],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[isTshirtSize],leading:[ -"none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[isTshirtSize],shadow:[isTshirtSize],spacing:["px",isNumber],text:[isTshirtSize],"text-shadow":[isTshirtSize],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",isFraction,isArbitraryValue,isArbitraryVariable,themeAspect]}],container:["container"],columns:[{columns:[isNumber,isArbitraryValue,isArbitraryVariable,themeContainer]}], -"break-after":[{"break-after":scaleBreak()}],"break-before":[{"break-before":scaleBreak()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid", -"inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:scalePositionWithArbitrary()}],overflow:[{overflow:scaleOverflow()}],"overflow-x":[{"overflow-x":scaleOverflow()}],"overflow-y":[{"overflow-y":scaleOverflow()}],overscroll:[ -{overscroll:scaleOverscroll()}],"overscroll-x":[{"overscroll-x":scaleOverscroll()}],"overscroll-y":[{"overscroll-y":scaleOverscroll()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:scaleInset()}],"inset-x":[{"inset-x":scaleInset()}],"inset-y":[{"inset-y":scaleInset()}],start:[{start:scaleInset()}],end:[{end:scaleInset()}],top:[{top:scaleInset()}],right:[{right:scaleInset()}],bottom:[{bottom:scaleInset()}],left:[{left:scaleInset()}],visibility:["visible","invisible","c\ -ollapse"],z:[{z:[isInteger,"auto",isArbitraryVariable,isArbitraryValue]}],basis:[{basis:[isFraction,"full","auto",themeContainer,...scaleUnambiguousSpacing()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[isNumber,isFraction,"auto","initial","none",isArbitraryValue]}],grow:[{grow:["",isNumber,isArbitraryVariable,isArbitraryValue]}],shrink:[{shrink:["",isNumber,isArbitraryVariable,isArbitraryValue]}],order:[ -{order:[isInteger,"first","last","none",isArbitraryVariable,isArbitraryValue]}],"grid-cols":[{"grid-cols":scaleGridTemplateColsRows()}],"col-start-end":[{col:scaleGridColRowStartAndEnd()}],"col-start":[{"col-start":scaleGridColRowStartOrEnd()}],"col-end":[{"col-end":scaleGridColRowStartOrEnd()}],"grid-rows":[{"grid-rows":scaleGridTemplateColsRows()}],"row-start-end":[{row:scaleGridColRowStartAndEnd()}],"row-start":[{"row-start":scaleGridColRowStartOrEnd()}],"row-end":[{"row-end":scaleGridColRowStartOrEnd()}], -"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":scaleGridAutoColsRows()}],"auto-rows":[{"auto-rows":scaleGridAutoColsRows()}],gap:[{gap:scaleUnambiguousSpacing()}],"gap-x":[{"gap-x":scaleUnambiguousSpacing()}],"gap-y":[{"gap-y":scaleUnambiguousSpacing()}],"justify-content":[{justify:[...scaleAlignPrimaryAxis(),"normal"]}],"justify-items":[{"justify-items":[...scaleAlignSecondaryAxis(),"normal"]}],"justify-self":[{"justify-self":["auto",...scaleAlignSecondaryAxis()]}], -"align-content":[{content:["normal",...scaleAlignPrimaryAxis()]}],"align-items":[{items:[...scaleAlignSecondaryAxis(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...scaleAlignSecondaryAxis(),{baseline:["","last"]}]}],"place-content":[{"place-content":scaleAlignPrimaryAxis()}],"place-items":[{"place-items":[...scaleAlignSecondaryAxis(),"baseline"]}],"place-self":[{"place-self":["auto",...scaleAlignSecondaryAxis()]}],p:[{p:scaleUnambiguousSpacing()}],px:[{px:scaleUnambiguousSpacing()}],py:[ -{py:scaleUnambiguousSpacing()}],ps:[{ps:scaleUnambiguousSpacing()}],pe:[{pe:scaleUnambiguousSpacing()}],pt:[{pt:scaleUnambiguousSpacing()}],pr:[{pr:scaleUnambiguousSpacing()}],pb:[{pb:scaleUnambiguousSpacing()}],pl:[{pl:scaleUnambiguousSpacing()}],m:[{m:scaleMargin()}],mx:[{mx:scaleMargin()}],my:[{my:scaleMargin()}],ms:[{ms:scaleMargin()}],me:[{me:scaleMargin()}],mt:[{mt:scaleMargin()}],mr:[{mr:scaleMargin()}],mb:[{mb:scaleMargin()}],ml:[{ml:scaleMargin()}],"space-x":[{"space-x":scaleUnambiguousSpacing()}], -"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":scaleUnambiguousSpacing()}],"space-y-reverse":["space-y-reverse"],size:[{size:scaleSizing()}],w:[{w:[themeContainer,"screen",...scaleSizing()]}],"min-w":[{"min-w":[themeContainer,"screen","none",...scaleSizing()]}],"max-w":[{"max-w":[themeContainer,"screen","none","prose",{screen:[themeBreakpoint]},...scaleSizing()]}],h:[{h:["screen","lh",...scaleSizing()]}],"min-h":[{"min-h":["screen","lh","none",...scaleSizing()]}],"max-h":[{"max-h":[ -"screen","lh",...scaleSizing()]}],"font-size":[{text:["base",themeText,isArbitraryVariableLength,isArbitraryLength]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[themeFontWeight,isArbitraryVariable,isArbitraryNumber]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",isPercent,isArbitraryValue]}],"font-family":[ -{font:[isArbitraryVariableFamilyName,isArbitraryValue,themeFont]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[themeTracking,isArbitraryVariable,isArbitraryValue]}],"line-clamp":[{"line-clamp":[isNumber,"none",isArbitraryVariable,isArbitraryNumber]}],leading:[{leading:[themeLeading, -...scaleUnambiguousSpacing()]}],"list-image":[{"list-image":["none",isArbitraryVariable,isArbitraryValue]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",isArbitraryVariable,isArbitraryValue]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:scaleColor()}],"text-color":[{text:scaleColor()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-\ -style":[{decoration:[...scaleLineStyle(),"wavy"]}],"text-decoration-thickness":[{decoration:[isNumber,"from-font","auto",isArbitraryVariable,isArbitraryLength]}],"text-decoration-color":[{decoration:scaleColor()}],"underline-offset":[{"underline-offset":[isNumber,"auto",isArbitraryVariable,isArbitraryValue]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[ -{indent:scaleUnambiguousSpacing()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",isArbitraryVariable,isArbitraryValue]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",isArbitraryVariable,isArbitraryValue]}],"bg-attachment":[{bg:["fixe\ -d","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:scaleBgPosition()}],"bg-repeat":[{bg:scaleBgRepeat()}],"bg-size":[{bg:scaleBgSize()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},isInteger,isArbitraryVariable,isArbitraryValue],radial:["",isArbitraryVariable,isArbitraryValue],conic:[isInteger,isArbitraryVariable,isArbitraryValue]},isArbitraryVariableImage, -isArbitraryImage]}],"bg-color":[{bg:scaleColor()}],"gradient-from-pos":[{from:scaleGradientStopPosition()}],"gradient-via-pos":[{via:scaleGradientStopPosition()}],"gradient-to-pos":[{to:scaleGradientStopPosition()}],"gradient-from":[{from:scaleColor()}],"gradient-via":[{via:scaleColor()}],"gradient-to":[{to:scaleColor()}],rounded:[{rounded:scaleRadius()}],"rounded-s":[{"rounded-s":scaleRadius()}],"rounded-e":[{"rounded-e":scaleRadius()}],"rounded-t":[{"rounded-t":scaleRadius()}],"rounded-r":[{"r\ -ounded-r":scaleRadius()}],"rounded-b":[{"rounded-b":scaleRadius()}],"rounded-l":[{"rounded-l":scaleRadius()}],"rounded-ss":[{"rounded-ss":scaleRadius()}],"rounded-se":[{"rounded-se":scaleRadius()}],"rounded-ee":[{"rounded-ee":scaleRadius()}],"rounded-es":[{"rounded-es":scaleRadius()}],"rounded-tl":[{"rounded-tl":scaleRadius()}],"rounded-tr":[{"rounded-tr":scaleRadius()}],"rounded-br":[{"rounded-br":scaleRadius()}],"rounded-bl":[{"rounded-bl":scaleRadius()}],"border-w":[{border:scaleBorderWidth()}], -"border-w-x":[{"border-x":scaleBorderWidth()}],"border-w-y":[{"border-y":scaleBorderWidth()}],"border-w-s":[{"border-s":scaleBorderWidth()}],"border-w-e":[{"border-e":scaleBorderWidth()}],"border-w-t":[{"border-t":scaleBorderWidth()}],"border-w-r":[{"border-r":scaleBorderWidth()}],"border-w-b":[{"border-b":scaleBorderWidth()}],"border-w-l":[{"border-l":scaleBorderWidth()}],"divide-x":[{"divide-x":scaleBorderWidth()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":scaleBorderWidth()}], -"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...scaleLineStyle(),"hidden","none"]}],"divide-style":[{divide:[...scaleLineStyle(),"hidden","none"]}],"border-color":[{border:scaleColor()}],"border-color-x":[{"border-x":scaleColor()}],"border-color-y":[{"border-y":scaleColor()}],"border-color-s":[{"border-s":scaleColor()}],"border-color-e":[{"border-e":scaleColor()}],"border-color-t":[{"border-t":scaleColor()}],"border-color-r":[{"border-r":scaleColor()}],"border-color-b":[{"bor\ -der-b":scaleColor()}],"border-color-l":[{"border-l":scaleColor()}],"divide-color":[{divide:scaleColor()}],"outline-style":[{outline:[...scaleLineStyle(),"none","hidden"]}],"outline-offset":[{"outline-offset":[isNumber,isArbitraryVariable,isArbitraryValue]}],"outline-w":[{outline:["",isNumber,isArbitraryVariableLength,isArbitraryLength]}],"outline-color":[{outline:scaleColor()}],shadow:[{shadow:["","none",themeShadow,isArbitraryVariableShadow,isArbitraryShadow]}],"shadow-color":[{shadow:scaleColor()}], -"inset-shadow":[{"inset-shadow":["none",themeInsetShadow,isArbitraryVariableShadow,isArbitraryShadow]}],"inset-shadow-color":[{"inset-shadow":scaleColor()}],"ring-w":[{ring:scaleBorderWidth()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:scaleColor()}],"ring-offset-w":[{"ring-offset":[isNumber,isArbitraryLength]}],"ring-offset-color":[{"ring-offset":scaleColor()}],"inset-ring-w":[{"inset-ring":scaleBorderWidth()}],"inset-ring-color":[{"inset-ring":scaleColor()}],"text-shadow":[{"text-shado\ -w":["none",themeTextShadow,isArbitraryVariableShadow,isArbitraryShadow]}],"text-shadow-color":[{"text-shadow":scaleColor()}],opacity:[{opacity:[isNumber,isArbitraryVariable,isArbitraryValue]}],"mix-blend":[{"mix-blend":[...scaleBlendMode(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":scaleBlendMode()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-po\ -s":[{"mask-linear":[isNumber]}],"mask-image-linear-from-pos":[{"mask-linear-from":scaleMaskImagePosition()}],"mask-image-linear-to-pos":[{"mask-linear-to":scaleMaskImagePosition()}],"mask-image-linear-from-color":[{"mask-linear-from":scaleColor()}],"mask-image-linear-to-color":[{"mask-linear-to":scaleColor()}],"mask-image-t-from-pos":[{"mask-t-from":scaleMaskImagePosition()}],"mask-image-t-to-pos":[{"mask-t-to":scaleMaskImagePosition()}],"mask-image-t-from-color":[{"mask-t-from":scaleColor()}],"\ -mask-image-t-to-color":[{"mask-t-to":scaleColor()}],"mask-image-r-from-pos":[{"mask-r-from":scaleMaskImagePosition()}],"mask-image-r-to-pos":[{"mask-r-to":scaleMaskImagePosition()}],"mask-image-r-from-color":[{"mask-r-from":scaleColor()}],"mask-image-r-to-color":[{"mask-r-to":scaleColor()}],"mask-image-b-from-pos":[{"mask-b-from":scaleMaskImagePosition()}],"mask-image-b-to-pos":[{"mask-b-to":scaleMaskImagePosition()}],"mask-image-b-from-color":[{"mask-b-from":scaleColor()}],"mask-image-b-to-colo\ -r":[{"mask-b-to":scaleColor()}],"mask-image-l-from-pos":[{"mask-l-from":scaleMaskImagePosition()}],"mask-image-l-to-pos":[{"mask-l-to":scaleMaskImagePosition()}],"mask-image-l-from-color":[{"mask-l-from":scaleColor()}],"mask-image-l-to-color":[{"mask-l-to":scaleColor()}],"mask-image-x-from-pos":[{"mask-x-from":scaleMaskImagePosition()}],"mask-image-x-to-pos":[{"mask-x-to":scaleMaskImagePosition()}],"mask-image-x-from-color":[{"mask-x-from":scaleColor()}],"mask-image-x-to-color":[{"mask-x-to":scaleColor()}], -"mask-image-y-from-pos":[{"mask-y-from":scaleMaskImagePosition()}],"mask-image-y-to-pos":[{"mask-y-to":scaleMaskImagePosition()}],"mask-image-y-from-color":[{"mask-y-from":scaleColor()}],"mask-image-y-to-color":[{"mask-y-to":scaleColor()}],"mask-image-radial":[{"mask-radial":[isArbitraryVariable,isArbitraryValue]}],"mask-image-radial-from-pos":[{"mask-radial-from":scaleMaskImagePosition()}],"mask-image-radial-to-pos":[{"mask-radial-to":scaleMaskImagePosition()}],"mask-image-radial-from-color":[{ -"mask-radial-from":scaleColor()}],"mask-image-radial-to-color":[{"mask-radial-to":scaleColor()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":scalePosition()}],"mask-image-conic-pos":[{"mask-conic":[isNumber]}],"mask-image-conic-from-pos":[{"mask-conic-from":scaleMaskImagePosition()}],"mask-image-conic-to-pos":[{"mask-conic-to":scaleMaskImagePosition()}], -"mask-image-conic-from-color":[{"mask-conic-from":scaleColor()}],"mask-image-conic-to-color":[{"mask-conic-to":scaleColor()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:scaleBgPosition()}],"mask-repeat":[{mask:scaleBgRepeat()}],"mask-size":[{mask:scaleBgSize()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",isArbitraryVariable,isArbitraryValue]}],filter:[ -{filter:["","none",isArbitraryVariable,isArbitraryValue]}],blur:[{blur:scaleBlur()}],brightness:[{brightness:[isNumber,isArbitraryVariable,isArbitraryValue]}],contrast:[{contrast:[isNumber,isArbitraryVariable,isArbitraryValue]}],"drop-shadow":[{"drop-shadow":["","none",themeDropShadow,isArbitraryVariableShadow,isArbitraryShadow]}],"drop-shadow-color":[{"drop-shadow":scaleColor()}],grayscale:[{grayscale:["",isNumber,isArbitraryVariable,isArbitraryValue]}],"hue-rotate":[{"hue-rotate":[isNumber,isArbitraryVariable, -isArbitraryValue]}],invert:[{invert:["",isNumber,isArbitraryVariable,isArbitraryValue]}],saturate:[{saturate:[isNumber,isArbitraryVariable,isArbitraryValue]}],sepia:[{sepia:["",isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-filter":[{"backdrop-filter":["","none",isArbitraryVariable,isArbitraryValue]}],"backdrop-blur":[{"backdrop-blur":scaleBlur()}],"backdrop-brightness":[{"backdrop-brightness":[isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-contrast":[{"backdrop-contrast":[ -isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-grayscale":[{"backdrop-grayscale":["",isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-invert":[{"backdrop-invert":["",isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-opacity":[{"backdrop-opacity":[isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-saturate":[{"backdrop-saturate":[isNumber,isArbitraryVariable,isArbitraryValue]}], -"backdrop-sepia":[{"backdrop-sepia":["",isNumber,isArbitraryVariable,isArbitraryValue]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":scaleUnambiguousSpacing()}],"border-spacing-x":[{"border-spacing-x":scaleUnambiguousSpacing()}],"border-spacing-y":[{"border-spacing-y":scaleUnambiguousSpacing()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none", -isArbitraryVariable,isArbitraryValue]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[isNumber,"initial",isArbitraryVariable,isArbitraryValue]}],ease:[{ease:["linear","initial",themeEase,isArbitraryVariable,isArbitraryValue]}],delay:[{delay:[isNumber,isArbitraryVariable,isArbitraryValue]}],animate:[{animate:["none",themeAnimate,isArbitraryVariable,isArbitraryValue]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[themePerspective,isArbitraryVariable, -isArbitraryValue]}],"perspective-origin":[{"perspective-origin":scalePositionWithArbitrary()}],rotate:[{rotate:scaleRotate()}],"rotate-x":[{"rotate-x":scaleRotate()}],"rotate-y":[{"rotate-y":scaleRotate()}],"rotate-z":[{"rotate-z":scaleRotate()}],scale:[{scale:scaleScale()}],"scale-x":[{"scale-x":scaleScale()}],"scale-y":[{"scale-y":scaleScale()}],"scale-z":[{"scale-z":scaleScale()}],"scale-3d":["scale-3d"],skew:[{skew:scaleSkew()}],"skew-x":[{"skew-x":scaleSkew()}],"skew-y":[{"skew-y":scaleSkew()}], -transform:[{transform:[isArbitraryVariable,isArbitraryValue,"","none","gpu","cpu"]}],"transform-origin":[{origin:scalePositionWithArbitrary()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:scaleTranslate()}],"translate-x":[{"translate-x":scaleTranslate()}],"translate-y":[{"translate-y":scaleTranslate()}],"translate-z":[{"translate-z":scaleTranslate()}],"translate-none":["translate-none"],accent:[{accent:scaleColor()}],appearance:[{appearance:["none","auto"]}],"caret-color":[ -{caret:scaleColor()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in", -"zoom-out",isArbitraryVariable,isArbitraryValue]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":scaleUnambiguousSpacing()}],"scroll-mx":[{"scroll-mx":scaleUnambiguousSpacing()}],"scroll-my":[{"scroll-my":scaleUnambiguousSpacing()}],"scroll-ms":[{"scroll-ms":scaleUnambiguousSpacing()}],"scroll-me":[{"scroll-me":scaleUnambiguousSpacing()}], -"scroll-mt":[{"scroll-mt":scaleUnambiguousSpacing()}],"scroll-mr":[{"scroll-mr":scaleUnambiguousSpacing()}],"scroll-mb":[{"scroll-mb":scaleUnambiguousSpacing()}],"scroll-ml":[{"scroll-ml":scaleUnambiguousSpacing()}],"scroll-p":[{"scroll-p":scaleUnambiguousSpacing()}],"scroll-px":[{"scroll-px":scaleUnambiguousSpacing()}],"scroll-py":[{"scroll-py":scaleUnambiguousSpacing()}],"scroll-ps":[{"scroll-ps":scaleUnambiguousSpacing()}],"scroll-pe":[{"scroll-pe":scaleUnambiguousSpacing()}],"scroll-pt":[{"s\ -croll-pt":scaleUnambiguousSpacing()}],"scroll-pr":[{"scroll-pr":scaleUnambiguousSpacing()}],"scroll-pb":[{"scroll-pb":scaleUnambiguousSpacing()}],"scroll-pl":[{"scroll-pl":scaleUnambiguousSpacing()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-\ -y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",isArbitraryVariable,isArbitraryValue]}],fill:[{fill:["none",...scaleColor()]}],"stroke-w":[{stroke:[isNumber,isArbitraryVariableLength,isArbitraryLength,isArbitraryNumber]}],stroke:[{stroke:["none",...scaleColor()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:[ -"overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn\ --spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-\ -tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","bord\ -er-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-\ -py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},mergeConfigs=(baseConfig,{cacheSize, -prefix,experimentalParseClassName,extend:extend2={},override={}})=>(overrideProperty(baseConfig,"cacheSize",cacheSize),overrideProperty(baseConfig,"prefix",prefix),overrideProperty(baseConfig,"experimentalParseClassName",experimentalParseClassName),overrideConfigProperties(baseConfig.theme,override.theme),overrideConfigProperties(baseConfig.classGroups,override.classGroups),overrideConfigProperties(baseConfig.conflictingClassGroups,override.conflictingClassGroups),overrideConfigProperties(baseConfig. -conflictingClassGroupModifiers,override.conflictingClassGroupModifiers),overrideProperty(baseConfig,"orderSensitiveModifiers",override.orderSensitiveModifiers),mergeConfigProperties(baseConfig.theme,extend2.theme),mergeConfigProperties(baseConfig.classGroups,extend2.classGroups),mergeConfigProperties(baseConfig.conflictingClassGroups,extend2.conflictingClassGroups),mergeConfigProperties(baseConfig.conflictingClassGroupModifiers,extend2.conflictingClassGroupModifiers),mergeArrayProperties(baseConfig, -extend2,"orderSensitiveModifiers"),baseConfig),overrideProperty=(baseObject,overrideKey,overrideValue)=>{overrideValue!==void 0&&(baseObject[overrideKey]=overrideValue)},overrideConfigProperties=(baseObject,overrideObject)=>{if(overrideObject)for(const key2 in overrideObject)overrideProperty(baseObject,key2,overrideObject[key2])},mergeConfigProperties=(baseObject,mergeObject)=>{if(mergeObject)for(const key2 in mergeObject)mergeArrayProperties(baseObject,mergeObject,key2)},mergeArrayProperties=(baseObject,mergeObject,key2)=>{ -const mergeValue=mergeObject[key2];mergeValue!==void 0&&(baseObject[key2]=baseObject[key2]?baseObject[key2].concat(mergeValue):mergeValue)},extendTailwindMerge=(configExtension,...createConfig)=>typeof configExtension=="function"?createTailwindMerge(getDefaultConfig,configExtension,...createConfig):createTailwindMerge(()=>mergeConfigs(getDefaultConfig(),configExtension),...createConfig),twMerge=createTailwindMerge(getDefaultConfig);function cn$1(...inputs){return twMerge(clsx$1(inputs))}var SPACE_REGEX=/\s+/g, -removeExtraSpaces=str=>typeof str!="string"||!str?str:str.replace(SPACE_REGEX," ").trim(),cx=(...classnames)=>{const classList=[],buildClassString=input=>{if(!input&&input!==0&&input!==0n)return;if(Array.isArray(input)){for(let i=0,len=input.length;i<len;i++)buildClassString(input[i]);return}const type2=typeof input;if(type2==="string"||type2==="number"||type2==="bigint"){if(type2==="number"&&input!==input)return;classList.push(String(input))}else if(type2==="object"){const keys2=Object.keys(input); -for(let i=0,len=keys2.length;i<len;i++){const key2=keys2[i];input[key2]&&classList.push(key2)}}};for(let i=0,len=classnames.length;i<len;i++){const c2=classnames[i];c2!=null&&buildClassString(c2)}return classList.length>0?removeExtraSpaces(classList.join(" ")):void 0},falsyToString=value=>value===!1?"false":value===!0?"true":value===0?"0":value,isEmptyObject=obj=>{if(!obj||typeof obj!="object")return!0;for(const _ in obj)return!1;return!0},isEqual=(obj1,obj2)=>{if(obj1===obj2)return!0;if(!obj1|| -!obj2)return!1;const keys1=Object.keys(obj1),keys2=Object.keys(obj2);if(keys1.length!==keys2.length)return!1;for(let i=0;i<keys1.length;i++){const key2=keys1[i];if(!keys2.includes(key2)||obj1[key2]!==obj2[key2])return!1}return!0},joinObjects=(obj1,obj2)=>{for(const key2 in obj2)if(Object.prototype.hasOwnProperty.call(obj2,key2)){const val2=obj2[key2];key2 in obj1?obj1[key2]=cx(obj1[key2],val2):obj1[key2]=val2}return obj1},flat=(arr,target2)=>{for(let i=0;i<arr.length;i++){const el=arr[i];Array.isArray( -el)?flat(el,target2):el&&target2.push(el)}},flatMergeArrays=(...arrays)=>{const result=[];flat(arrays,result);const filtered=[];for(let i=0;i<result.length;i++)result[i]&&filtered.push(result[i]);return filtered},mergeObjects=(obj1,obj2)=>{const result={};for(const key2 in obj1){const val1=obj1[key2];if(key2 in obj2){const val2=obj2[key2];Array.isArray(val1)||Array.isArray(val2)?result[key2]=flatMergeArrays(val2,val1):typeof val1=="object"&&typeof val2=="object"&&val1&&val2?result[key2]=mergeObjects( -val1,val2):result[key2]=val2+" "+val1}else result[key2]=val1}for(const key2 in obj2)key2 in obj1||(result[key2]=obj2[key2]);return result},defaultConfig={twMerge:!0,twMergeConfig:{}};function createState$1(){let cachedTwMerge=null,cachedTwMergeConfig={},didTwMergeConfigChange=!1;return{get cachedTwMerge(){return cachedTwMerge},set cachedTwMerge(value){cachedTwMerge=value},get cachedTwMergeConfig(){return cachedTwMergeConfig},set cachedTwMergeConfig(value){cachedTwMergeConfig=value},get didTwMergeConfigChange(){ -return didTwMergeConfigChange},set didTwMergeConfigChange(value){didTwMergeConfigChange=value},reset(){cachedTwMerge=null,cachedTwMergeConfig={},didTwMergeConfigChange=!1}}}var state=createState$1(),getTailwindVariants=cn2=>{const tv2=(options,configProp)=>{const{extend:extend2=null,slots:slotProps={},variants:variantsProps={},compoundVariants:compoundVariantsProps=[],compoundSlots=[],defaultVariants:defaultVariantsProps={}}=options,config2={...defaultConfig,...configProp},base2=extend2?.base?cx( -extend2.base,options?.base):options?.base,variants2=extend2?.variants&&!isEmptyObject(extend2.variants)?mergeObjects(variantsProps,extend2.variants):variantsProps,defaultVariants=extend2?.defaultVariants&&!isEmptyObject(extend2.defaultVariants)?{...extend2.defaultVariants,...defaultVariantsProps}:defaultVariantsProps;!isEmptyObject(config2.twMergeConfig)&&!isEqual(config2.twMergeConfig,state.cachedTwMergeConfig)&&(state.didTwMergeConfigChange=!0,state.cachedTwMergeConfig=config2.twMergeConfig);const isExtendedSlotsEmpty=isEmptyObject( -extend2?.slots),componentSlots=isEmptyObject(slotProps)?{}:{base:cx(options?.base,isExtendedSlotsEmpty&&extend2?.base),...slotProps},slots=isExtendedSlotsEmpty?componentSlots:joinObjects({...extend2?.slots},isEmptyObject(componentSlots)?{base:options?.base}:componentSlots),compoundVariants=isEmptyObject(extend2?.compoundVariants)?compoundVariantsProps:flatMergeArrays(extend2?.compoundVariants,compoundVariantsProps),component2=props=>{if(isEmptyObject(variants2)&&isEmptyObject(slotProps)&&isExtendedSlotsEmpty) -return cn2(base2,props?.class,props?.className)(config2);if(compoundVariants&&!Array.isArray(compoundVariants))throw new TypeError(`The "compoundVariants" prop must be an array. Received: ${typeof compoundVariants}`);if(compoundSlots&&!Array.isArray(compoundSlots))throw new TypeError(`The "compoundSlots" prop must be an array. Received: ${typeof compoundSlots}`);const getVariantValue=(variant,vrs=variants2,_slotKey=null,slotProps2=null)=>{const variantObj=vrs[variant];if(!variantObj||isEmptyObject( -variantObj))return null;const variantProp=slotProps2?.[variant]??props?.[variant];if(variantProp===null)return null;const variantKey=falsyToString(variantProp);if(typeof variantKey=="object")return null;const defaultVariantProp=defaultVariants?.[variant],key2=variantKey??falsyToString(defaultVariantProp);return variantObj[key2||"false"]},getVariantClassNames=()=>{if(!variants2)return null;const keys2=Object.keys(variants2),result=[];for(let i=0;i<keys2.length;i++){const value=getVariantValue(keys2[i], -variants2);value&&result.push(value)}return result},getVariantClassNamesBySlotKey=(slotKey,slotProps2)=>{if(!variants2||typeof variants2!="object")return null;const result=[];for(const variant in variants2){const variantValue=getVariantValue(variant,variants2,slotKey,slotProps2),value=slotKey==="base"&&typeof variantValue=="string"?variantValue:variantValue&&variantValue[slotKey];value&&result.push(value)}return result},propsWithoutUndefined={};for(const prop2 in props){const value=props[prop2]; -value!==void 0&&(propsWithoutUndefined[prop2]=value)}const getCompleteProps=(key2,slotProps2)=>{const initialProp=typeof props?.[key2]=="object"?{[key2]:props[key2]?.initial}:{};return{...defaultVariants,...propsWithoutUndefined,...initialProp,...slotProps2}},getCompoundVariantsValue=(cv=[],slotProps2)=>{const result=[],cvLength=cv.length;for(let i=0;i<cvLength;i++){const{class:tvClass,className:tvClassName,...compoundVariantOptions}=cv[i];let isValid=!0;const completeProps=getCompleteProps(null, -slotProps2);for(const key2 in compoundVariantOptions){const value=compoundVariantOptions[key2],completePropsValue=completeProps[key2];if(Array.isArray(value)){if(!value.includes(completePropsValue)){isValid=!1;break}}else{if((value==null||value===!1)&&(completePropsValue==null||completePropsValue===!1))continue;if(completePropsValue!==value){isValid=!1;break}}}isValid&&(tvClass&&result.push(tvClass),tvClassName&&result.push(tvClassName))}return result},getCompoundVariantClassNamesBySlot=slotProps2=>{ -const compoundClassNames=getCompoundVariantsValue(compoundVariants,slotProps2);if(!Array.isArray(compoundClassNames))return compoundClassNames;const result={},cnFn=cn2;for(let i=0;i<compoundClassNames.length;i++){const className=compoundClassNames[i];if(typeof className=="string")result.base=cnFn(result.base,className)(config2);else if(typeof className=="object")for(const slot in className)result[slot]=cnFn(result[slot],className[slot])(config2)}return result},getCompoundSlotClassNameBySlot=slotProps2=>{ -if(compoundSlots.length<1)return null;const result={},completeProps=getCompleteProps(null,slotProps2);for(let i=0;i<compoundSlots.length;i++){const{slots:slots2=[],class:slotClass,className:slotClassName,...slotVariants}=compoundSlots[i];if(!isEmptyObject(slotVariants)){let isValid=!0;for(const key2 in slotVariants){const completePropsValue=completeProps[key2],slotVariantValue=slotVariants[key2];if(completePropsValue===void 0||(Array.isArray(slotVariantValue)?!slotVariantValue.includes(completePropsValue): -slotVariantValue!==completePropsValue)){isValid=!1;break}}if(!isValid)continue}for(let j=0;j<slots2.length;j++){const slotName=slots2[j];result[slotName]||(result[slotName]=[]),result[slotName].push([slotClass,slotClassName])}}return result};if(!isEmptyObject(slotProps)||!isExtendedSlotsEmpty){const slotsFns={};if(typeof slots=="object"&&!isEmptyObject(slots)){const cnFn=cn2;for(const slotKey in slots)slotsFns[slotKey]=slotProps2=>{const compoundVariantClasses=getCompoundVariantClassNamesBySlot( -slotProps2),compoundSlotClasses=getCompoundSlotClassNameBySlot(slotProps2);return cnFn(slots[slotKey],getVariantClassNamesBySlotKey(slotKey,slotProps2),compoundVariantClasses?compoundVariantClasses[slotKey]:void 0,compoundSlotClasses?compoundSlotClasses[slotKey]:void 0,slotProps2?.class,slotProps2?.className)(config2)}}return slotsFns}return cn2(base2,getVariantClassNames(),getCompoundVariantsValue(compoundVariants),props?.class,props?.className)(config2)},getVariantKeys=()=>{if(!(!variants2||typeof variants2!= -"object"))return Object.keys(variants2)};return component2.variantKeys=getVariantKeys(),component2.extend=extend2,component2.base=base2,component2.slots=slots,component2.variants=variants2,component2.defaultVariants=defaultVariants,component2.compoundSlots=compoundSlots,component2.compoundVariants=compoundVariants,component2};return{tv:tv2,createTV:configProp=>(options,config2)=>tv2(options,config2?mergeObjects(configProp,config2):configProp)}},createTwMerge=cachedTwMergeConfig=>isEmptyObject(cachedTwMergeConfig)? -twMerge:extendTailwindMerge({...cachedTwMergeConfig,extend:{theme:cachedTwMergeConfig.theme,classGroups:cachedTwMergeConfig.classGroups,conflictingClassGroupModifiers:cachedTwMergeConfig.conflictingClassGroupModifiers,conflictingClassGroups:cachedTwMergeConfig.conflictingClassGroups,...cachedTwMergeConfig.extend}}),executeMerge=(classnames,config2)=>{const base2=cx(classnames);return!base2||!(config2?.twMerge??!0)?base2:((!state.cachedTwMerge||state.didTwMergeConfigChange)&&(state.didTwMergeConfigChange= -!1,state.cachedTwMerge=createTwMerge(state.cachedTwMergeConfig)),state.cachedTwMerge(base2)||void 0)},cnMerge=(...classnames)=>config2=>executeMerge(classnames,config2),{tv}=getTailwindVariants(cnMerge);const buttonVariants=tv({base:"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium outlin\ -e-none transition-all focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",variants:{variant:{default:"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",destructive:"bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white", -outline:"bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border",secondary:"dark:bg-secondary dark:text-secondary-foreground bg-background shadow-sm text-foreground hover:bg-muted-foreground/20",ghost:"hover:text-accent-foreground hover:bg-muted-foreground/10 backdrop-blur-sm",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg\ -]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4","icon-lg":"size-10",icon:"size-9","icon-sm":"size-5 rounded-sm"}},defaultVariants:{variant:"default",size:"default"}});var root_1$17=from_html("<a><!></a>"),root_2$1v=from_html("<button><!></button>");function Button($$anchor,$$props){push$1($$props,!0);let variant=prop($$props,"variant",3,"default"),size2=prop($$props,"size",3,"default"),ref2=prop($$props,"ref",15,null),href=prop($$props,"href",3,void 0),type2=prop($$props,"type",3,"button"),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","class","variant","size","ref","href","type","disabled","children"]);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var a=root_1$17();attribute_effect(a,$0=>({"data-slot":"button",class:$0,href:$$props.disabled?void 0:href(),"aria-disabled":$$props.disabled,role:$$props.disabled?"link":void 0,tabindex:$$props.disabled?-1:void 0,...restProps}),[()=>cn$1(buttonVariants({variant:variant(),size:size2()}),$$props.class)],void 0, -void 0,"svelte-1q39rn8");var node_1=child(a);snippet(node_1,()=>$$props.children??noop$3),reset(a),bind_this(a,$$value=>ref2($$value),()=>ref2()),append($$anchor2,a)},alternate=$$anchor2=>{var button=root_2$1v();attribute_effect(button,$0=>({"data-slot":"button",class:$0,type:type2(),disabled:$$props.disabled,...restProps}),[()=>cn$1(buttonVariants({variant:variant(),size:size2()}),$$props.class)],void 0,void 0,"svelte-1q39rn8");var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3), -reset(button),bind_this(button,$$value=>ref2($$value),()=>ref2()),append($$anchor2,button)};if_block(node2,$$render=>{href()?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}function isFunction$2(value){return typeof value=="function"}function isObject$2(value){return value!==null&&typeof value=="object"}const CLASS_VALUE_PRIMITIVE_TYPES=["string","number","bigint","boolean"];function isClassValue(value){return value==null||CLASS_VALUE_PRIMITIVE_TYPES.includes(typeof value)? -!0:Array.isArray(value)?value.every(item=>isClassValue(item)):typeof value=="object"?Object.getPrototypeOf(value)===Object.prototype:!1}const BoxSymbol$1=Symbol("box"),isWritableSymbol$1=Symbol("is-writable");function boxWith$1(getter,setter){const derived2=user_derived(getter);return setter?{[BoxSymbol$1]:!0,[isWritableSymbol$1]:!0,get current(){return get$4(derived2)},set current(v){setter(v)}}:{[BoxSymbol$1]:!0,get current(){return getter()}}}function isBox$1(value){return isObject$2(value)&& -BoxSymbol$1 in value}function isWritableBox$1(value){return isBox$1(value)&&isWritableSymbol$1 in value}function boxFrom$1(value){return isBox$1(value)?value:isFunction$2(value)?boxWith$1(value):simpleBox(value)}function boxFlatten$1(boxes){return Object.entries(boxes).reduce((acc,[key2,b])=>isBox$1(b)?(isWritableBox$1(b)?Object.defineProperty(acc,key2,{get(){return b.current},set(v){b.current=v}}):Object.defineProperty(acc,key2,{get(){return b.current}}),acc):Object.assign(acc,{[key2]:b}),{})}function toReadonlyBox$1(b){ -return isWritableBox$1(b)?{[BoxSymbol$1]:!0,get current(){return b.current}}:b}function simpleBox(initialValue){let current2=state$1(proxy(initialValue));return{[BoxSymbol$1]:!0,[isWritableSymbol$1]:!0,get current(){return get$4(current2)},set current(v){set$1(current2,v,!0)}}}function box$1(initialValue){let current2=state$1(proxy(initialValue));return{[BoxSymbol$1]:!0,[isWritableSymbol$1]:!0,get current(){return get$4(current2)},set current(v){set$1(current2,v,!0)}}}box$1.from=boxFrom$1;box$1. -with=boxWith$1;box$1.flatten=boxFlatten$1;box$1.readonly=toReadonlyBox$1;box$1.isBox=isBox$1;box$1.isWritableBox=isWritableBox$1;function composeHandlers(...handlers2){return function(e){for(const handler of handlers2)if(handler){if(e.defaultPrevented)return;typeof handler=="function"?handler.call(this,e):handler.current?.call(this,e)}}}var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(x){ -return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x.default:x}var cjs={},inlineStyleParser,hasRequiredInlineStyleParser;function requireInlineStyleParser(){if(hasRequiredInlineStyleParser)return inlineStyleParser;hasRequiredInlineStyleParser=1;var COMMENT_REGEX=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,NEWLINE_REGEX=/\n/g,WHITESPACE_REGEX=/^\s*/,PROPERTY_REGEX=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,COLON_REGEX=/^:\s*/,VALUE_REGEX=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/, -SEMICOLON_REGEX=/^[;\s]*/,TRIM_REGEX=/^\s+|\s+$/g,NEWLINE2=` +const layouts=parsed_route.layouts;for(let i=0;i<layouts.length;i++)layouts[i]||branch2.splice(i,0,void 0)}result=await get_navigation_result_from_branch({url:url2,params,branch:branch2,status,error:error2,errors:parsed_route?.errors,form,route:parsed_route??null})}catch(error22){if(error22 instanceof Redirect){await native_navigation(new URL(error22.location,location.href));return}result=await load_root_error_page({status:get_status(error22),error:await handle_error(error22,{url:url2,params,route}), +url:url2,route}),target2.textContent="",hydrate2=!1}result.props.page&&(result.props.page.state={}),await initialize(result,target2,hydrate2)}function deserialize_uses(uses){return{dependencies:new Set(uses?.dependencies??[]),params:new Set(uses?.params??[]),parent:!!uses?.parent,route:!!uses?.route,url:!!uses?.url,search_params:new Set(uses?.search_params??[])}}let resetting_focus=!1;function reset_focus(url2,scroll=!0){const autofocus2=document.querySelector("[autofocus]");if(autofocus2)autofocus2. +focus();else{const id2=get_id(url2);if(id2&&document.getElementById(id2)){const{x,y}=scroll_state();setTimeout(()=>{const history_state=history.state;resetting_focus=!0,location.replace(new URL(`#${id2}`,location.href)),history.replaceState(history_state,"",url2),scroll&&scrollTo(x,y),resetting_focus=!1})}else{const root2=document.body,tabindex=root2.getAttribute("tabindex");root2.tabIndex=-1,root2.focus({preventScroll:!0,focusVisible:!1}),tabindex!==null?root2.setAttribute("tabindex",tabindex): +root2.removeAttribute("tabindex")}const selection=getSelection();if(selection&&selection.type!=="None"){const ranges=[];for(let i=0;i<selection.rangeCount;i+=1)ranges.push(selection.getRangeAt(i));setTimeout(()=>{if(selection.rangeCount===ranges.length){for(let i=0;i<selection.rangeCount;i+=1){const a=ranges[i],b=selection.getRangeAt(i);if(a.commonAncestorContainer!==b.commonAncestorContainer||a.startContainer!==b.startContainer||a.endContainer!==b.endContainer||a.startOffset!==b.startOffset||a. +endOffset!==b.endOffset)return}selection.removeAllRanges()}})}}}function create_navigation(current2,intent,url2,type2,target_scroll=null){let fulfil,reject;const complete=new Promise((f,r2)=>{fulfil=f,reject=r2});return complete.catch(noop$2),{navigation:{from:{params:current2.params,route:{id:current2.route?.id??null},url:current2.url,scroll:scroll_state()},to:url2&&{params:intent?.params??null,route:{id:intent?.route?.id??null},url:url2,scroll:target_scroll},willUnload:!intent,type:type2,complete}, +fulfil,reject}}function clone_page(page2){return{data:page2.data,error:page2.error,form:page2.form,params:page2.params,route:page2.route,state:page2.state,status:page2.status,url:page2.url}}function decode_hash(url2){const new_url=new URL(url2);return new_url.hash=decodeURIComponent(url2.hash),new_url}function get_id(url2){let id2;if(app$1.hash){const[,,second]=url2.hash.split("#",3);id2=second??""}else id2=url2.hash.slice(1);return decodeURIComponent(id2)}const scriptRel="modulepreload",assetsURL=function(dep,importerUrl){ +return new URL(dep,importerUrl).href},seen={},__vitePreload=function(baseModule,deps,importerUrl){let promise=Promise.resolve();if(deps&&deps.length>0){let allSettled=function(promises$2){return Promise.all(promises$2.map(p2=>Promise.resolve(p2).then(value$1=>({status:"fulfilled",value:value$1}),reason=>({status:"rejected",reason}))))};const links=document.getElementsByTagName("link"),cspNonceMeta=document.querySelector("meta[property=csp-nonce]"),cspNonce=cspNonceMeta?.nonce||cspNonceMeta?.getAttribute( +"nonce");promise=allSettled(deps.map(dep=>{if(dep=assetsURL(dep,importerUrl),dep in seen)return;seen[dep]=!0;const isCss=dep.endsWith(".css"),cssSelector=isCss?'[rel="stylesheet"]':"";if(importerUrl)for(let i$1=links.length-1;i$1>=0;i$1--){const link$12=links[i$1];if(link$12.href===dep&&(!isCss||link$12.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${dep}"]${cssSelector}`))return;const link2=document.createElement("link");if(link2.rel=isCss?"stylesheet":scriptRel,isCss||(link2. +as="script"),link2.crossOrigin="",link2.href=dep,cspNonce&&link2.setAttribute("nonce",cspNonce),document.head.appendChild(link2),isCss)return new Promise((res,rej)=>{link2.addEventListener("load",res),link2.addEventListener("error",()=>rej(new Error(`Unable to preload CSS for ${dep}`)))})}))}function handlePreloadError(err$2){const e$1=new Event("vite:preloadError",{cancelable:!0});if(e$1.payload=err$2,window.dispatchEvent(e$1),!e$1.defaultPrevented)throw err$2}return promise.then(res=>{for(const item of res|| +[])item.status==="rejected"&&handlePreloadError(item.reason);return baseModule().catch(handlePreloadError)})},matchers={},PUBLIC_VERSION="5";typeof window<"u"&&((window.__svelte??={}).v??=new Set).add(PUBLIC_VERSION);var root_7$w=from_html('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),root$1W=from_html("<!> <!>", +1);function Root$6($$anchor,$$props){push$1($$props,!0);let components2=prop($$props,"components",23,()=>[]),data_0=prop($$props,"data_0",3,null),data_1=prop($$props,"data_1",3,null),data_2=prop($$props,"data_2",3,null);user_pre_effect(()=>$$props.stores.page.set($$props.page)),user_effect(()=>{$$props.stores,$$props.page,$$props.constructors,components2(),$$props.form,data_0(),data_1(),data_2(),$$props.stores.page.notify()});let mounted=state$1(!1),navigated=state$1(!1),title2=state$1(null);onMount$1( +()=>{const unsubscribe=$$props.stores.page.subscribe(()=>{get$3(mounted)&&(set$1(navigated,!0),tick().then(()=>{set$1(title2,document.title||"untitled page",!0)}))});return set$1(mounted,!0),unsubscribe});const Pyramid_2=user_derived(()=>$$props.constructors[2]);var fragment=root$1W(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{const Pyramid_0=user_derived(()=>$$props.constructors[0]);var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>get$3(Pyramid_0),($$anchor3,Pyramid_0_1)=>{ +bind_this(Pyramid_0_1($$anchor3,{get data(){return data_0()},get form(){return $$props.form},get params(){return $$props.page.params},children:($$anchor4,$$slotProps)=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);{var consequent=$$anchor5=>{const Pyramid_1=user_derived(()=>$$props.constructors[1]);var fragment_3=comment$2(),node_3=first_child(fragment_3);component(node_3,()=>get$3(Pyramid_1),($$anchor6,Pyramid_1_1)=>{bind_this(Pyramid_1_1($$anchor6,{get data(){return data_1()},get form(){ +return $$props.form},get params(){return $$props.page.params},children:($$anchor7,$$slotProps2)=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);component(node_4,()=>get$3(Pyramid_2),($$anchor8,Pyramid_2_1)=>{bind_this(Pyramid_2_1($$anchor8,{get data(){return data_2()},get form(){return $$props.form},get params(){return $$props.page.params}}),$$value=>components2()[2]=$$value,()=>components2()?.[2])}),append($$anchor7,fragment_4)},$$slots:{default:!0}}),$$value=>components2()[1]=$$value, +()=>components2()?.[1])}),append($$anchor5,fragment_3)},alternate=$$anchor5=>{const Pyramid_1=user_derived(()=>$$props.constructors[1]);var fragment_5=comment$2(),node_5=first_child(fragment_5);component(node_5,()=>get$3(Pyramid_1),($$anchor6,Pyramid_1_2)=>{bind_this(Pyramid_1_2($$anchor6,{get data(){return data_1()},get form(){return $$props.form},get params(){return $$props.page.params}}),$$value=>components2()[1]=$$value,()=>components2()?.[1])}),append($$anchor5,fragment_5)};if_block(node_2, +$$render=>{$$props.constructors[2]?$$render(consequent):$$render(alternate,-1)})}append($$anchor4,fragment_2)},$$slots:{default:!0}}),$$value=>components2()[0]=$$value,()=>components2()?.[0])}),append($$anchor2,fragment_1)},alternate_1=$$anchor2=>{const Pyramid_0=user_derived(()=>$$props.constructors[0]);var fragment_6=comment$2(),node_6=first_child(fragment_6);component(node_6,()=>get$3(Pyramid_0),($$anchor3,Pyramid_0_2)=>{bind_this(Pyramid_0_2($$anchor3,{get data(){return data_0()},get form(){ +return $$props.form},get params(){return $$props.page.params}}),$$value=>components2()[0]=$$value,()=>components2()?.[0])}),append($$anchor2,fragment_6)};if_block(node2,$$render=>{$$props.constructors[1]?$$render(consequent_1):$$render(alternate_1,-1)})}var node_7=sibling(node2,2);{var consequent_3=$$anchor2=>{var div=root_7$w(),node_8=child(div);{var consequent_2=$$anchor3=>{var text2=text$8();template_effect(()=>set_text(text2,get$3(title2))),append($$anchor3,text2)};if_block(node_8,$$render=>{ +get$3(navigated)&&$$render(consequent_2)})}reset(div),append($$anchor2,div)};if_block(node_7,$$render=>{get$3(mounted)&&$$render(consequent_3)})}append($$anchor,fragment),pop()}const root$1V=asClassComponent(Root$6),nodes=[()=>__vitePreload(()=>Promise.resolve().then(()=>_0),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_1),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_2),void 0,import.meta.url),()=>__vitePreload( +()=>Promise.resolve().then(()=>_3),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_4),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_5),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_6),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_7),void 0,import.meta.url),()=>__vitePreload(()=>Promise.resolve().then(()=>_8),void 0,import.meta.url)], +server_loads=[],dictionary={"/(chat)":[4,[2]],"/(chat)/chat/[id]":[5,[2]],"/settings/chat/[section]":[6,[3]],"/settings/import-export":[7,[3]],"/settings/mcp":[8,[3]]},hooks={handleError:(({error:error2})=>{console.error(error2)}),reroute:(()=>{}),transport:{}},decoders=Object.fromEntries(Object.entries(hooks.transport).map(([k,v])=>[k,v.decode])),encoders=Object.fromEntries(Object.entries(hooks.transport).map(([k,v])=>[k,v.encode])),hash=!0,decode$2=(type2,value)=>decoders[type2](value),app=Object. +freeze(Object.defineProperty({__proto__:null,decode:decode$2,decoders,dictionary,encoders,hash,hooks,matchers,nodes,root:root$1V,server_loads},Symbol.toStringTag,{value:"Module"}));function start(element2,options){start$1(app,element2,options)}const page$2={get params(){return page$3.params},get route(){return page$3.route},get status(){return page$3.status},get url(){return page$3.url}};stores.updated.check;const page$1=page$2,linear=x=>x;function cubic_out(t){const f=t-1;return f*f*f+1}function split_css_unit(value){ +const split=typeof value=="string"&&value.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);return split?[parseFloat(split[1]),split[2]||"px"]:[value,"px"]}function fade(node2,{delay=0,duration:duration2=400,easing=linear}={}){const o=+getComputedStyle(node2).opacity;return{delay,duration:duration2,easing,css:t=>`opacity: ${t*o}`}}function fly(node2,{delay=0,duration:duration2=400,easing=cubic_out,x=0,y=0,opacity=0}={}){const style2=getComputedStyle(node2),target_opacity=+style2.opacity,transform2=style2.transform=== +"none"?"":style2.transform,od=target_opacity*(1-opacity),[x_value,x_unit]=split_css_unit(x),[y_value,y_unit]=split_css_unit(y);return{delay,duration:duration2,easing,css:(t,u)=>` + transform: ${transform2} translate(${(1-t)*x_value}${x_unit}, ${(1-t)*y_value}${y_unit}); + opacity: ${target_opacity-od*u}`}}function scale(node2,{delay=0,duration:duration2=400,easing=cubic_out,start:start2=0,opacity=0}={}){const style2=getComputedStyle(node2),target_opacity=+style2.opacity,transform2=style2.transform==="none"?"":style2.transform,sd=1-start2,od=target_opacity*(1-opacity);return{delay,duration:duration2,easing,css:(_t,u)=>` + transform: ${transform2} scale(${1-sd*u}); + opacity: ${target_opacity-od*u} + `}}const CLASS_PART_SEPARATOR="-",createClassGroupUtils=config2=>{const classMap=createClassMap(config2),{conflictingClassGroups,conflictingClassGroupModifiers}=config2;return{getClassGroupId:className=>{const classParts=className.split(CLASS_PART_SEPARATOR);return classParts[0]===""&&classParts.length!==1&&classParts.shift(),getGroupRecursive(classParts,classMap)||getGroupIdForArbitraryProperty(className)},getConflictingClassGroupIds:(classGroupId,hasPostfixModifier)=>{const conflicts=conflictingClassGroups[classGroupId]|| +[];return hasPostfixModifier&&conflictingClassGroupModifiers[classGroupId]?[...conflicts,...conflictingClassGroupModifiers[classGroupId]]:conflicts}}},getGroupRecursive=(classParts,classPartObject)=>{if(classParts.length===0)return classPartObject.classGroupId;const currentClassPart=classParts[0],nextClassPartObject=classPartObject.nextPart.get(currentClassPart),classGroupFromNextClassPart=nextClassPartObject?getGroupRecursive(classParts.slice(1),nextClassPartObject):void 0;if(classGroupFromNextClassPart) +return classGroupFromNextClassPart;if(classPartObject.validators.length===0)return;const classRest=classParts.join(CLASS_PART_SEPARATOR);return classPartObject.validators.find(({validator})=>validator(classRest))?.classGroupId},arbitraryPropertyRegex=/^\[(.+)\]$/,getGroupIdForArbitraryProperty=className=>{if(arbitraryPropertyRegex.test(className)){const arbitraryPropertyClassName=arbitraryPropertyRegex.exec(className)[1],property=arbitraryPropertyClassName?.substring(0,arbitraryPropertyClassName. +indexOf(":"));if(property)return"arbitrary.."+property}},createClassMap=config2=>{const{theme,classGroups}=config2,classMap={nextPart:new Map,validators:[]};for(const classGroupId in classGroups)processClassesRecursively(classGroups[classGroupId],classMap,classGroupId,theme);return classMap},processClassesRecursively=(classGroup,classPartObject,classGroupId,theme)=>{classGroup.forEach(classDefinition=>{if(typeof classDefinition=="string"){const classPartObjectToEdit=classDefinition===""?classPartObject: +getPart(classPartObject,classDefinition);classPartObjectToEdit.classGroupId=classGroupId;return}if(typeof classDefinition=="function"){if(isThemeGetter(classDefinition)){processClassesRecursively(classDefinition(theme),classPartObject,classGroupId,theme);return}classPartObject.validators.push({validator:classDefinition,classGroupId});return}Object.entries(classDefinition).forEach(([key2,classGroup2])=>{processClassesRecursively(classGroup2,getPart(classPartObject,key2),classGroupId,theme)})})},getPart=(classPartObject,path2)=>{ +let currentClassPartObject=classPartObject;return path2.split(CLASS_PART_SEPARATOR).forEach(pathPart=>{currentClassPartObject.nextPart.has(pathPart)||currentClassPartObject.nextPart.set(pathPart,{nextPart:new Map,validators:[]}),currentClassPartObject=currentClassPartObject.nextPart.get(pathPart)}),currentClassPartObject},isThemeGetter=func=>func.isThemeGetter,createLruCache=maxCacheSize=>{if(maxCacheSize<1)return{get:()=>{},set:()=>{}};let cacheSize=0,cache2=new Map,previousCache=new Map;const update2=(key2,value)=>{ +cache2.set(key2,value),cacheSize++,cacheSize>maxCacheSize&&(cacheSize=0,previousCache=cache2,cache2=new Map)};return{get(key2){let value=cache2.get(key2);if(value!==void 0)return value;if((value=previousCache.get(key2))!==void 0)return update2(key2,value),value},set(key2,value){cache2.has(key2)?cache2.set(key2,value):update2(key2,value)}}},IMPORTANT_MODIFIER="!",MODIFIER_SEPARATOR=":",MODIFIER_SEPARATOR_LENGTH=MODIFIER_SEPARATOR.length,createParseClassName=config2=>{const{prefix,experimentalParseClassName}=config2; +let parseClassName=className=>{const modifiers=[];let bracketDepth=0,parenDepth=0,modifierStart=0,postfixModifierPosition;for(let index2=0;index2<className.length;index2++){let currentCharacter=className[index2];if(bracketDepth===0&&parenDepth===0){if(currentCharacter===MODIFIER_SEPARATOR){modifiers.push(className.slice(modifierStart,index2)),modifierStart=index2+MODIFIER_SEPARATOR_LENGTH;continue}if(currentCharacter==="/"){postfixModifierPosition=index2;continue}}currentCharacter==="["?bracketDepth++: +currentCharacter==="]"?bracketDepth--:currentCharacter==="("?parenDepth++:currentCharacter===")"&&parenDepth--}const baseClassNameWithImportantModifier=modifiers.length===0?className:className.substring(modifierStart),baseClassName=stripImportantModifier(baseClassNameWithImportantModifier),hasImportantModifier=baseClassName!==baseClassNameWithImportantModifier,maybePostfixModifierPosition=postfixModifierPosition&&postfixModifierPosition>modifierStart?postfixModifierPosition-modifierStart:void 0; +return{modifiers,hasImportantModifier,baseClassName,maybePostfixModifierPosition}};if(prefix){const fullPrefix=prefix+MODIFIER_SEPARATOR,parseClassNameOriginal=parseClassName;parseClassName=className=>className.startsWith(fullPrefix)?parseClassNameOriginal(className.substring(fullPrefix.length)):{isExternal:!0,modifiers:[],hasImportantModifier:!1,baseClassName:className,maybePostfixModifierPosition:void 0}}if(experimentalParseClassName){const parseClassNameOriginal=parseClassName;parseClassName= +className=>experimentalParseClassName({className,parseClassName:parseClassNameOriginal})}return parseClassName},stripImportantModifier=baseClassName=>baseClassName.endsWith(IMPORTANT_MODIFIER)?baseClassName.substring(0,baseClassName.length-1):baseClassName.startsWith(IMPORTANT_MODIFIER)?baseClassName.substring(1):baseClassName,createSortModifiers=config2=>{const orderSensitiveModifiers=Object.fromEntries(config2.orderSensitiveModifiers.map(modifier=>[modifier,!0]));return modifiers=>{if(modifiers. +length<=1)return modifiers;const sortedModifiers=[];let unsortedModifiers=[];return modifiers.forEach(modifier=>{modifier[0]==="["||orderSensitiveModifiers[modifier]?(sortedModifiers.push(...unsortedModifiers.sort(),modifier),unsortedModifiers=[]):unsortedModifiers.push(modifier)}),sortedModifiers.push(...unsortedModifiers.sort()),sortedModifiers}},createConfigUtils=config2=>({cache:createLruCache(config2.cacheSize),parseClassName:createParseClassName(config2),sortModifiers:createSortModifiers(config2), +...createClassGroupUtils(config2)}),SPLIT_CLASSES_REGEX=/\s+/,mergeClassList=(classList,configUtils)=>{const{parseClassName,getClassGroupId,getConflictingClassGroupIds,sortModifiers}=configUtils,classGroupsInConflict=[],classNames=classList.trim().split(SPLIT_CLASSES_REGEX);let result="";for(let index2=classNames.length-1;index2>=0;index2-=1){const originalClassName=classNames[index2],{isExternal,modifiers,hasImportantModifier,baseClassName,maybePostfixModifierPosition}=parseClassName(originalClassName); +if(isExternal){result=originalClassName+(result.length>0?" "+result:result);continue}let hasPostfixModifier=!!maybePostfixModifierPosition,classGroupId=getClassGroupId(hasPostfixModifier?baseClassName.substring(0,maybePostfixModifierPosition):baseClassName);if(!classGroupId){if(!hasPostfixModifier){result=originalClassName+(result.length>0?" "+result:result);continue}if(classGroupId=getClassGroupId(baseClassName),!classGroupId){result=originalClassName+(result.length>0?" "+result:result);continue} +hasPostfixModifier=!1}const variantModifier=sortModifiers(modifiers).join(":"),modifierId=hasImportantModifier?variantModifier+IMPORTANT_MODIFIER:variantModifier,classId=modifierId+classGroupId;if(classGroupsInConflict.includes(classId))continue;classGroupsInConflict.push(classId);const conflictGroups=getConflictingClassGroupIds(classGroupId,hasPostfixModifier);for(let i=0;i<conflictGroups.length;++i){const group=conflictGroups[i];classGroupsInConflict.push(modifierId+group)}result=originalClassName+ +(result.length>0?" "+result:result)}return result};function twJoin(){let index2=0,argument,resolvedValue,string2="";for(;index2<arguments.length;)(argument=arguments[index2++])&&(resolvedValue=toValue(argument))&&(string2&&(string2+=" "),string2+=resolvedValue);return string2}const toValue=mix=>{if(typeof mix=="string")return mix;let resolvedValue,string2="";for(let k=0;k<mix.length;k++)mix[k]&&(resolvedValue=toValue(mix[k]))&&(string2&&(string2+=" "),string2+=resolvedValue);return string2};function createTailwindMerge(createConfigFirst,...createConfigRest){ +let configUtils,cacheGet,cacheSet,functionToCall=initTailwindMerge;function initTailwindMerge(classList){const config2=createConfigRest.reduce((previousConfig,createConfigCurrent)=>createConfigCurrent(previousConfig),createConfigFirst());return configUtils=createConfigUtils(config2),cacheGet=configUtils.cache.get,cacheSet=configUtils.cache.set,functionToCall=tailwindMerge,tailwindMerge(classList)}function tailwindMerge(classList){const cachedResult=cacheGet(classList);if(cachedResult)return cachedResult; +const result=mergeClassList(classList,configUtils);return cacheSet(classList,result),result}return function(){return functionToCall(twJoin.apply(null,arguments))}}const fromTheme=key2=>{const themeGetter=theme=>theme[key2]||[];return themeGetter.isThemeGetter=!0,themeGetter},arbitraryValueRegex=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,arbitraryVariableRegex=/^\((?:(\w[\w-]*):)?(.+)\)$/i,fractionRegex=/^\d+\/\d+$/,tshirtUnitRegex=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,lengthUnitRegex=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/, +colorFunctionRegex=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,shadowRegex=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,imageRegex=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,isFraction=value=>fractionRegex.test(value),isNumber=value=>!!value&&!Number.isNaN(Number(value)),isInteger=value=>!!value&&Number.isInteger(Number(value)),isPercent=value=>value.endsWith("%")&&isNumber(value.slice(0,-1)),isTshirtSize=value=>tshirtUnitRegex. +test(value),isAny=()=>!0,isLengthOnly=value=>lengthUnitRegex.test(value)&&!colorFunctionRegex.test(value),isNever=()=>!1,isShadow=value=>shadowRegex.test(value),isImage=value=>imageRegex.test(value),isAnyNonArbitrary=value=>!isArbitraryValue(value)&&!isArbitraryVariable(value),isArbitrarySize=value=>getIsArbitraryValue(value,isLabelSize,isNever),isArbitraryValue=value=>arbitraryValueRegex.test(value),isArbitraryLength=value=>getIsArbitraryValue(value,isLabelLength,isLengthOnly),isArbitraryNumber=value=>getIsArbitraryValue( +value,isLabelNumber,isNumber),isArbitraryPosition=value=>getIsArbitraryValue(value,isLabelPosition,isNever),isArbitraryImage=value=>getIsArbitraryValue(value,isLabelImage,isImage),isArbitraryShadow=value=>getIsArbitraryValue(value,isLabelShadow,isShadow),isArbitraryVariable=value=>arbitraryVariableRegex.test(value),isArbitraryVariableLength=value=>getIsArbitraryVariable(value,isLabelLength),isArbitraryVariableFamilyName=value=>getIsArbitraryVariable(value,isLabelFamilyName),isArbitraryVariablePosition=value=>getIsArbitraryVariable( +value,isLabelPosition),isArbitraryVariableSize=value=>getIsArbitraryVariable(value,isLabelSize),isArbitraryVariableImage=value=>getIsArbitraryVariable(value,isLabelImage),isArbitraryVariableShadow=value=>getIsArbitraryVariable(value,isLabelShadow,!0),getIsArbitraryValue=(value,testLabel,testValue)=>{const result=arbitraryValueRegex.exec(value);return result?result[1]?testLabel(result[1]):testValue(result[2]):!1},getIsArbitraryVariable=(value,testLabel,shouldMatchNoLabel=!1)=>{const result=arbitraryVariableRegex. +exec(value);return result?result[1]?testLabel(result[1]):shouldMatchNoLabel:!1},isLabelPosition=label=>label==="position"||label==="percentage",isLabelImage=label=>label==="image"||label==="url",isLabelSize=label=>label==="length"||label==="size"||label==="bg-size",isLabelLength=label=>label==="length",isLabelNumber=label=>label==="number",isLabelFamilyName=label=>label==="family-name",isLabelShadow=label=>label==="shadow",getDefaultConfig=()=>{const themeColor=fromTheme("color"),themeFont=fromTheme( +"font"),themeText=fromTheme("text"),themeFontWeight=fromTheme("font-weight"),themeTracking=fromTheme("tracking"),themeLeading=fromTheme("leading"),themeBreakpoint=fromTheme("breakpoint"),themeContainer=fromTheme("container"),themeSpacing=fromTheme("spacing"),themeRadius=fromTheme("radius"),themeShadow=fromTheme("shadow"),themeInsetShadow=fromTheme("inset-shadow"),themeTextShadow=fromTheme("text-shadow"),themeDropShadow=fromTheme("drop-shadow"),themeBlur=fromTheme("blur"),themePerspective=fromTheme( +"perspective"),themeAspect=fromTheme("aspect"),themeEase=fromTheme("ease"),themeAnimate=fromTheme("animate"),scaleBreak=()=>["auto","avoid","all","avoid-page","page","left","right","column"],scalePosition=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],scalePositionWithArbitrary=()=>[...scalePosition(),isArbitraryVariable,isArbitraryValue],scaleOverflow=()=>["auto","hidden","clip","visible","scro\ +ll"],scaleOverscroll=()=>["auto","contain","none"],scaleUnambiguousSpacing=()=>[isArbitraryVariable,isArbitraryValue,themeSpacing],scaleInset=()=>[isFraction,"full","auto",...scaleUnambiguousSpacing()],scaleGridTemplateColsRows=()=>[isInteger,"none","subgrid",isArbitraryVariable,isArbitraryValue],scaleGridColRowStartAndEnd=()=>["auto",{span:["full",isInteger,isArbitraryVariable,isArbitraryValue]},isInteger,isArbitraryVariable,isArbitraryValue],scaleGridColRowStartOrEnd=()=>[isInteger,"auto",isArbitraryVariable, +isArbitraryValue],scaleGridAutoColsRows=()=>["auto","min","max","fr",isArbitraryVariable,isArbitraryValue],scaleAlignPrimaryAxis=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],scaleAlignSecondaryAxis=()=>["start","end","center","stretch","center-safe","end-safe"],scaleMargin=()=>["auto",...scaleUnambiguousSpacing()],scaleSizing=()=>[isFraction,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...scaleUnambiguousSpacing()], +scaleColor=()=>[themeColor,isArbitraryVariable,isArbitraryValue],scaleBgPosition=()=>[...scalePosition(),isArbitraryVariablePosition,isArbitraryPosition,{position:[isArbitraryVariable,isArbitraryValue]}],scaleBgRepeat=()=>["no-repeat",{repeat:["","x","y","space","round"]}],scaleBgSize=()=>["auto","cover","contain",isArbitraryVariableSize,isArbitrarySize,{size:[isArbitraryVariable,isArbitraryValue]}],scaleGradientStopPosition=()=>[isPercent,isArbitraryVariableLength,isArbitraryLength],scaleRadius=()=>[ +"","none","full",themeRadius,isArbitraryVariable,isArbitraryValue],scaleBorderWidth=()=>["",isNumber,isArbitraryVariableLength,isArbitraryLength],scaleLineStyle=()=>["solid","dashed","dotted","double"],scaleBlendMode=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],scaleMaskImagePosition=()=>[isNumber,isPercent,isArbitraryVariablePosition,isArbitraryPosition],scaleBlur=()=>[ +"","none",themeBlur,isArbitraryVariable,isArbitraryValue],scaleRotate=()=>["none",isNumber,isArbitraryVariable,isArbitraryValue],scaleScale=()=>["none",isNumber,isArbitraryVariable,isArbitraryValue],scaleSkew=()=>[isNumber,isArbitraryVariable,isArbitraryValue],scaleTranslate=()=>[isFraction,"full",...scaleUnambiguousSpacing()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[isTshirtSize],breakpoint:[isTshirtSize],color:[isAny],container:[isTshirtSize], +"drop-shadow":[isTshirtSize],ease:["in","out","in-out"],font:[isAnyNonArbitrary],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[isTshirtSize],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[isTshirtSize],shadow:[isTshirtSize],spacing:["px",isNumber],text:[isTshirtSize],"text-shadow":[isTshirtSize],tracking:["tighter","tight","normal","wide", +"wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",isFraction,isArbitraryValue,isArbitraryVariable,themeAspect]}],container:["container"],columns:[{columns:[isNumber,isArbitraryValue,isArbitraryVariable,themeContainer]}],"break-after":[{"break-after":scaleBreak()}],"break-before":[{"break-before":scaleBreak()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:[ +"block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cove\ +r","fill","none","scale-down"]}],"object-position":[{object:scalePositionWithArbitrary()}],overflow:[{overflow:scaleOverflow()}],"overflow-x":[{"overflow-x":scaleOverflow()}],"overflow-y":[{"overflow-y":scaleOverflow()}],overscroll:[{overscroll:scaleOverscroll()}],"overscroll-x":[{"overscroll-x":scaleOverscroll()}],"overscroll-y":[{"overscroll-y":scaleOverscroll()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:scaleInset()}],"inset-x":[{"inset-x":scaleInset()}],"inset\ +-y":[{"inset-y":scaleInset()}],start:[{start:scaleInset()}],end:[{end:scaleInset()}],top:[{top:scaleInset()}],right:[{right:scaleInset()}],bottom:[{bottom:scaleInset()}],left:[{left:scaleInset()}],visibility:["visible","invisible","collapse"],z:[{z:[isInteger,"auto",isArbitraryVariable,isArbitraryValue]}],basis:[{basis:[isFraction,"full","auto",themeContainer,...scaleUnambiguousSpacing()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","w\ +rap-reverse"]}],flex:[{flex:[isNumber,isFraction,"auto","initial","none",isArbitraryValue]}],grow:[{grow:["",isNumber,isArbitraryVariable,isArbitraryValue]}],shrink:[{shrink:["",isNumber,isArbitraryVariable,isArbitraryValue]}],order:[{order:[isInteger,"first","last","none",isArbitraryVariable,isArbitraryValue]}],"grid-cols":[{"grid-cols":scaleGridTemplateColsRows()}],"col-start-end":[{col:scaleGridColRowStartAndEnd()}],"col-start":[{"col-start":scaleGridColRowStartOrEnd()}],"col-end":[{"col-end":scaleGridColRowStartOrEnd()}], +"grid-rows":[{"grid-rows":scaleGridTemplateColsRows()}],"row-start-end":[{row:scaleGridColRowStartAndEnd()}],"row-start":[{"row-start":scaleGridColRowStartOrEnd()}],"row-end":[{"row-end":scaleGridColRowStartOrEnd()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":scaleGridAutoColsRows()}],"auto-rows":[{"auto-rows":scaleGridAutoColsRows()}],gap:[{gap:scaleUnambiguousSpacing()}],"gap-x":[{"gap-x":scaleUnambiguousSpacing()}],"gap-y":[{"gap-y":scaleUnambiguousSpacing()}], +"justify-content":[{justify:[...scaleAlignPrimaryAxis(),"normal"]}],"justify-items":[{"justify-items":[...scaleAlignSecondaryAxis(),"normal"]}],"justify-self":[{"justify-self":["auto",...scaleAlignSecondaryAxis()]}],"align-content":[{content:["normal",...scaleAlignPrimaryAxis()]}],"align-items":[{items:[...scaleAlignSecondaryAxis(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...scaleAlignSecondaryAxis(),{baseline:["","last"]}]}],"place-content":[{"place-content":scaleAlignPrimaryAxis()}], +"place-items":[{"place-items":[...scaleAlignSecondaryAxis(),"baseline"]}],"place-self":[{"place-self":["auto",...scaleAlignSecondaryAxis()]}],p:[{p:scaleUnambiguousSpacing()}],px:[{px:scaleUnambiguousSpacing()}],py:[{py:scaleUnambiguousSpacing()}],ps:[{ps:scaleUnambiguousSpacing()}],pe:[{pe:scaleUnambiguousSpacing()}],pt:[{pt:scaleUnambiguousSpacing()}],pr:[{pr:scaleUnambiguousSpacing()}],pb:[{pb:scaleUnambiguousSpacing()}],pl:[{pl:scaleUnambiguousSpacing()}],m:[{m:scaleMargin()}],mx:[{mx:scaleMargin()}], +my:[{my:scaleMargin()}],ms:[{ms:scaleMargin()}],me:[{me:scaleMargin()}],mt:[{mt:scaleMargin()}],mr:[{mr:scaleMargin()}],mb:[{mb:scaleMargin()}],ml:[{ml:scaleMargin()}],"space-x":[{"space-x":scaleUnambiguousSpacing()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":scaleUnambiguousSpacing()}],"space-y-reverse":["space-y-reverse"],size:[{size:scaleSizing()}],w:[{w:[themeContainer,"screen",...scaleSizing()]}],"min-w":[{"min-w":[themeContainer,"screen","none",...scaleSizing()]}],"max-w":[ +{"max-w":[themeContainer,"screen","none","prose",{screen:[themeBreakpoint]},...scaleSizing()]}],h:[{h:["screen","lh",...scaleSizing()]}],"min-h":[{"min-h":["screen","lh","none",...scaleSizing()]}],"max-h":[{"max-h":["screen","lh",...scaleSizing()]}],"font-size":[{text:["base",themeText,isArbitraryVariableLength,isArbitraryLength]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[themeFontWeight,isArbitraryVariable,isArbitraryNumber]}], +"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",isPercent,isArbitraryValue]}],"font-family":[{font:[isArbitraryVariableFamilyName,isArbitraryValue,themeFont]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractio\ +ns","stacked-fractions"],tracking:[{tracking:[themeTracking,isArbitraryVariable,isArbitraryValue]}],"line-clamp":[{"line-clamp":[isNumber,"none",isArbitraryVariable,isArbitraryNumber]}],leading:[{leading:[themeLeading,...scaleUnambiguousSpacing()]}],"list-image":[{"list-image":["none",isArbitraryVariable,isArbitraryValue]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",isArbitraryVariable,isArbitraryValue]}],"text-alignment":[{text:["left", +"center","right","justify","start","end"]}],"placeholder-color":[{placeholder:scaleColor()}],"text-color":[{text:scaleColor()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...scaleLineStyle(),"wavy"]}],"text-decoration-thickness":[{decoration:[isNumber,"from-font","auto",isArbitraryVariable,isArbitraryLength]}],"text-decoration-color":[{decoration:scaleColor()}],"underline-offset":[{"underline-offset":[isNumber,"auto",isArbitraryVariable, +isArbitraryValue]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:scaleUnambiguousSpacing()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",isArbitraryVariable,isArbitraryValue]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal", +"words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",isArbitraryVariable,isArbitraryValue]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:scaleBgPosition()}],"bg-repeat":[{bg:scaleBgRepeat()}],"bg-size":[{bg:scaleBgSize()}],"bg-image":[{bg:["none",{linear:[{to:["t", +"tr","r","br","b","bl","l","tl"]},isInteger,isArbitraryVariable,isArbitraryValue],radial:["",isArbitraryVariable,isArbitraryValue],conic:[isInteger,isArbitraryVariable,isArbitraryValue]},isArbitraryVariableImage,isArbitraryImage]}],"bg-color":[{bg:scaleColor()}],"gradient-from-pos":[{from:scaleGradientStopPosition()}],"gradient-via-pos":[{via:scaleGradientStopPosition()}],"gradient-to-pos":[{to:scaleGradientStopPosition()}],"gradient-from":[{from:scaleColor()}],"gradient-via":[{via:scaleColor()}], +"gradient-to":[{to:scaleColor()}],rounded:[{rounded:scaleRadius()}],"rounded-s":[{"rounded-s":scaleRadius()}],"rounded-e":[{"rounded-e":scaleRadius()}],"rounded-t":[{"rounded-t":scaleRadius()}],"rounded-r":[{"rounded-r":scaleRadius()}],"rounded-b":[{"rounded-b":scaleRadius()}],"rounded-l":[{"rounded-l":scaleRadius()}],"rounded-ss":[{"rounded-ss":scaleRadius()}],"rounded-se":[{"rounded-se":scaleRadius()}],"rounded-ee":[{"rounded-ee":scaleRadius()}],"rounded-es":[{"rounded-es":scaleRadius()}],"rou\ +nded-tl":[{"rounded-tl":scaleRadius()}],"rounded-tr":[{"rounded-tr":scaleRadius()}],"rounded-br":[{"rounded-br":scaleRadius()}],"rounded-bl":[{"rounded-bl":scaleRadius()}],"border-w":[{border:scaleBorderWidth()}],"border-w-x":[{"border-x":scaleBorderWidth()}],"border-w-y":[{"border-y":scaleBorderWidth()}],"border-w-s":[{"border-s":scaleBorderWidth()}],"border-w-e":[{"border-e":scaleBorderWidth()}],"border-w-t":[{"border-t":scaleBorderWidth()}],"border-w-r":[{"border-r":scaleBorderWidth()}],"bord\ +er-w-b":[{"border-b":scaleBorderWidth()}],"border-w-l":[{"border-l":scaleBorderWidth()}],"divide-x":[{"divide-x":scaleBorderWidth()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":scaleBorderWidth()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...scaleLineStyle(),"hidden","none"]}],"divide-style":[{divide:[...scaleLineStyle(),"hidden","none"]}],"border-color":[{border:scaleColor()}],"border-color-x":[{"border-x":scaleColor()}],"border-color-y":[{"border-y":scaleColor()}], +"border-color-s":[{"border-s":scaleColor()}],"border-color-e":[{"border-e":scaleColor()}],"border-color-t":[{"border-t":scaleColor()}],"border-color-r":[{"border-r":scaleColor()}],"border-color-b":[{"border-b":scaleColor()}],"border-color-l":[{"border-l":scaleColor()}],"divide-color":[{divide:scaleColor()}],"outline-style":[{outline:[...scaleLineStyle(),"none","hidden"]}],"outline-offset":[{"outline-offset":[isNumber,isArbitraryVariable,isArbitraryValue]}],"outline-w":[{outline:["",isNumber,isArbitraryVariableLength, +isArbitraryLength]}],"outline-color":[{outline:scaleColor()}],shadow:[{shadow:["","none",themeShadow,isArbitraryVariableShadow,isArbitraryShadow]}],"shadow-color":[{shadow:scaleColor()}],"inset-shadow":[{"inset-shadow":["none",themeInsetShadow,isArbitraryVariableShadow,isArbitraryShadow]}],"inset-shadow-color":[{"inset-shadow":scaleColor()}],"ring-w":[{ring:scaleBorderWidth()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:scaleColor()}],"ring-offset-w":[{"ring-offset":[isNumber,isArbitraryLength]}], +"ring-offset-color":[{"ring-offset":scaleColor()}],"inset-ring-w":[{"inset-ring":scaleBorderWidth()}],"inset-ring-color":[{"inset-ring":scaleColor()}],"text-shadow":[{"text-shadow":["none",themeTextShadow,isArbitraryVariableShadow,isArbitraryShadow]}],"text-shadow-color":[{"text-shadow":scaleColor()}],opacity:[{opacity:[isNumber,isArbitraryVariable,isArbitraryValue]}],"mix-blend":[{"mix-blend":[...scaleBlendMode(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":scaleBlendMode()}],"mask-c\ +lip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[isNumber]}],"mask-image-linear-from-pos":[{"mask-linear-from":scaleMaskImagePosition()}],"mask-image-linear-to-pos":[{"mask-linear-to":scaleMaskImagePosition()}],"mask-image-linear-from-color":[{"mask-linear-from":scaleColor()}],"mask-image-linear-to-color":[{"mask-linear-to":scaleColor()}],"mask-imag\ +e-t-from-pos":[{"mask-t-from":scaleMaskImagePosition()}],"mask-image-t-to-pos":[{"mask-t-to":scaleMaskImagePosition()}],"mask-image-t-from-color":[{"mask-t-from":scaleColor()}],"mask-image-t-to-color":[{"mask-t-to":scaleColor()}],"mask-image-r-from-pos":[{"mask-r-from":scaleMaskImagePosition()}],"mask-image-r-to-pos":[{"mask-r-to":scaleMaskImagePosition()}],"mask-image-r-from-color":[{"mask-r-from":scaleColor()}],"mask-image-r-to-color":[{"mask-r-to":scaleColor()}],"mask-image-b-from-pos":[{"mas\ +k-b-from":scaleMaskImagePosition()}],"mask-image-b-to-pos":[{"mask-b-to":scaleMaskImagePosition()}],"mask-image-b-from-color":[{"mask-b-from":scaleColor()}],"mask-image-b-to-color":[{"mask-b-to":scaleColor()}],"mask-image-l-from-pos":[{"mask-l-from":scaleMaskImagePosition()}],"mask-image-l-to-pos":[{"mask-l-to":scaleMaskImagePosition()}],"mask-image-l-from-color":[{"mask-l-from":scaleColor()}],"mask-image-l-to-color":[{"mask-l-to":scaleColor()}],"mask-image-x-from-pos":[{"mask-x-from":scaleMaskImagePosition()}], +"mask-image-x-to-pos":[{"mask-x-to":scaleMaskImagePosition()}],"mask-image-x-from-color":[{"mask-x-from":scaleColor()}],"mask-image-x-to-color":[{"mask-x-to":scaleColor()}],"mask-image-y-from-pos":[{"mask-y-from":scaleMaskImagePosition()}],"mask-image-y-to-pos":[{"mask-y-to":scaleMaskImagePosition()}],"mask-image-y-from-color":[{"mask-y-from":scaleColor()}],"mask-image-y-to-color":[{"mask-y-to":scaleColor()}],"mask-image-radial":[{"mask-radial":[isArbitraryVariable,isArbitraryValue]}],"mask-imag\ +e-radial-from-pos":[{"mask-radial-from":scaleMaskImagePosition()}],"mask-image-radial-to-pos":[{"mask-radial-to":scaleMaskImagePosition()}],"mask-image-radial-from-color":[{"mask-radial-from":scaleColor()}],"mask-image-radial-to-color":[{"mask-radial-to":scaleColor()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":scalePosition()}],"mas\ +k-image-conic-pos":[{"mask-conic":[isNumber]}],"mask-image-conic-from-pos":[{"mask-conic-from":scaleMaskImagePosition()}],"mask-image-conic-to-pos":[{"mask-conic-to":scaleMaskImagePosition()}],"mask-image-conic-from-color":[{"mask-conic-from":scaleColor()}],"mask-image-conic-to-color":[{"mask-conic-to":scaleColor()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:scaleBgPosition()}],"\ +mask-repeat":[{mask:scaleBgRepeat()}],"mask-size":[{mask:scaleBgSize()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",isArbitraryVariable,isArbitraryValue]}],filter:[{filter:["","none",isArbitraryVariable,isArbitraryValue]}],blur:[{blur:scaleBlur()}],brightness:[{brightness:[isNumber,isArbitraryVariable,isArbitraryValue]}],contrast:[{contrast:[isNumber,isArbitraryVariable,isArbitraryValue]}],"drop-shadow":[{"drop-shadow":["","none",themeDropShadow,isArbitraryVariableShadow, +isArbitraryShadow]}],"drop-shadow-color":[{"drop-shadow":scaleColor()}],grayscale:[{grayscale:["",isNumber,isArbitraryVariable,isArbitraryValue]}],"hue-rotate":[{"hue-rotate":[isNumber,isArbitraryVariable,isArbitraryValue]}],invert:[{invert:["",isNumber,isArbitraryVariable,isArbitraryValue]}],saturate:[{saturate:[isNumber,isArbitraryVariable,isArbitraryValue]}],sepia:[{sepia:["",isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-filter":[{"backdrop-filter":["","none",isArbitraryVariable, +isArbitraryValue]}],"backdrop-blur":[{"backdrop-blur":scaleBlur()}],"backdrop-brightness":[{"backdrop-brightness":[isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-contrast":[{"backdrop-contrast":[isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-grayscale":[{"backdrop-grayscale":["",isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-invert":[{"backdrop-invert":["",isNumber, +isArbitraryVariable,isArbitraryValue]}],"backdrop-opacity":[{"backdrop-opacity":[isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-saturate":[{"backdrop-saturate":[isNumber,isArbitraryVariable,isArbitraryValue]}],"backdrop-sepia":[{"backdrop-sepia":["",isNumber,isArbitraryVariable,isArbitraryValue]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":scaleUnambiguousSpacing()}],"border-spacing-x":[{"border-spacing-x":scaleUnambiguousSpacing()}],"bor\ +der-spacing-y":[{"border-spacing-y":scaleUnambiguousSpacing()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",isArbitraryVariable,isArbitraryValue]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[isNumber,"initial",isArbitraryVariable,isArbitraryValue]}],ease:[{ease:["linear","initial",themeEase,isArbitraryVariable,isArbitraryValue]}],delay:[{delay:[ +isNumber,isArbitraryVariable,isArbitraryValue]}],animate:[{animate:["none",themeAnimate,isArbitraryVariable,isArbitraryValue]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[themePerspective,isArbitraryVariable,isArbitraryValue]}],"perspective-origin":[{"perspective-origin":scalePositionWithArbitrary()}],rotate:[{rotate:scaleRotate()}],"rotate-x":[{"rotate-x":scaleRotate()}],"rotate-y":[{"rotate-y":scaleRotate()}],"rotate-z":[{"rotate-z":scaleRotate()}],scale:[{scale:scaleScale()}], +"scale-x":[{"scale-x":scaleScale()}],"scale-y":[{"scale-y":scaleScale()}],"scale-z":[{"scale-z":scaleScale()}],"scale-3d":["scale-3d"],skew:[{skew:scaleSkew()}],"skew-x":[{"skew-x":scaleSkew()}],"skew-y":[{"skew-y":scaleSkew()}],transform:[{transform:[isArbitraryVariable,isArbitraryValue,"","none","gpu","cpu"]}],"transform-origin":[{origin:scalePositionWithArbitrary()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:scaleTranslate()}],"translate-x":[{"translate-x":scaleTranslate()}], +"translate-y":[{"translate-y":scaleTranslate()}],"translate-z":[{"translate-z":scaleTranslate()}],"translate-none":["translate-none"],accent:[{accent:scaleColor()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:scaleColor()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","cop\ +y","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",isArbitraryVariable,isArbitraryValue]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":scaleUnambiguousSpacing()}], +"scroll-mx":[{"scroll-mx":scaleUnambiguousSpacing()}],"scroll-my":[{"scroll-my":scaleUnambiguousSpacing()}],"scroll-ms":[{"scroll-ms":scaleUnambiguousSpacing()}],"scroll-me":[{"scroll-me":scaleUnambiguousSpacing()}],"scroll-mt":[{"scroll-mt":scaleUnambiguousSpacing()}],"scroll-mr":[{"scroll-mr":scaleUnambiguousSpacing()}],"scroll-mb":[{"scroll-mb":scaleUnambiguousSpacing()}],"scroll-ml":[{"scroll-ml":scaleUnambiguousSpacing()}],"scroll-p":[{"scroll-p":scaleUnambiguousSpacing()}],"scroll-px":[{"s\ +croll-px":scaleUnambiguousSpacing()}],"scroll-py":[{"scroll-py":scaleUnambiguousSpacing()}],"scroll-ps":[{"scroll-ps":scaleUnambiguousSpacing()}],"scroll-pe":[{"scroll-pe":scaleUnambiguousSpacing()}],"scroll-pt":[{"scroll-pt":scaleUnambiguousSpacing()}],"scroll-pr":[{"scroll-pr":scaleUnambiguousSpacing()}],"scroll-pb":[{"scroll-pb":scaleUnambiguousSpacing()}],"scroll-pl":[{"scroll-pl":scaleUnambiguousSpacing()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["nor\ +mal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",isArbitraryVariable,isArbitraryValue]}],fill:[{fill:["none",...scaleColor()]}],"stroke-w":[{stroke:[ +isNumber,isArbitraryVariableLength,isArbitraryLength,isArbitraryNumber]}],stroke:[{stroke:["none",...scaleColor()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","p\ +b","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","ro\ +unded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r", +"border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"s\ +croll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{ +"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},mergeConfigs=(baseConfig,{cacheSize,prefix,experimentalParseClassName,extend:extend2={},override={}})=>(overrideProperty(baseConfig,"cacheSize",cacheSize),overrideProperty(baseConfig,"prefix",prefix),overrideProperty(baseConfig,"experimentalParseClassName",experimentalParseClassName),overrideConfigProperties(baseConfig.theme, +override.theme),overrideConfigProperties(baseConfig.classGroups,override.classGroups),overrideConfigProperties(baseConfig.conflictingClassGroups,override.conflictingClassGroups),overrideConfigProperties(baseConfig.conflictingClassGroupModifiers,override.conflictingClassGroupModifiers),overrideProperty(baseConfig,"orderSensitiveModifiers",override.orderSensitiveModifiers),mergeConfigProperties(baseConfig.theme,extend2.theme),mergeConfigProperties(baseConfig.classGroups,extend2.classGroups),mergeConfigProperties( +baseConfig.conflictingClassGroups,extend2.conflictingClassGroups),mergeConfigProperties(baseConfig.conflictingClassGroupModifiers,extend2.conflictingClassGroupModifiers),mergeArrayProperties(baseConfig,extend2,"orderSensitiveModifiers"),baseConfig),overrideProperty=(baseObject,overrideKey,overrideValue)=>{overrideValue!==void 0&&(baseObject[overrideKey]=overrideValue)},overrideConfigProperties=(baseObject,overrideObject)=>{if(overrideObject)for(const key2 in overrideObject)overrideProperty(baseObject, +key2,overrideObject[key2])},mergeConfigProperties=(baseObject,mergeObject)=>{if(mergeObject)for(const key2 in mergeObject)mergeArrayProperties(baseObject,mergeObject,key2)},mergeArrayProperties=(baseObject,mergeObject,key2)=>{const mergeValue=mergeObject[key2];mergeValue!==void 0&&(baseObject[key2]=baseObject[key2]?baseObject[key2].concat(mergeValue):mergeValue)},extendTailwindMerge=(configExtension,...createConfig)=>typeof configExtension=="function"?createTailwindMerge(getDefaultConfig,configExtension, +...createConfig):createTailwindMerge(()=>mergeConfigs(getDefaultConfig(),configExtension),...createConfig),twMerge=createTailwindMerge(getDefaultConfig);function cn$1(...inputs){return twMerge(clsx$1(inputs))}var SPACE_REGEX=/\s+/g,removeExtraSpaces=str=>typeof str!="string"||!str?str:str.replace(SPACE_REGEX," ").trim(),cx=(...classnames)=>{const classList=[],buildClassString=input=>{if(!input&&input!==0&&input!==0n)return;if(Array.isArray(input)){for(let i=0,len=input.length;i<len;i++)buildClassString( +input[i]);return}const type2=typeof input;if(type2==="string"||type2==="number"||type2==="bigint"){if(type2==="number"&&input!==input)return;classList.push(String(input))}else if(type2==="object"){const keys2=Object.keys(input);for(let i=0,len=keys2.length;i<len;i++){const key2=keys2[i];input[key2]&&classList.push(key2)}}};for(let i=0,len=classnames.length;i<len;i++){const c2=classnames[i];c2!=null&&buildClassString(c2)}return classList.length>0?removeExtraSpaces(classList.join(" ")):void 0},falsyToString=value=>value=== +!1?"false":value===!0?"true":value===0?"0":value,isEmptyObject=obj=>{if(!obj||typeof obj!="object")return!0;for(const _ in obj)return!1;return!0},isEqual=(obj1,obj2)=>{if(obj1===obj2)return!0;if(!obj1||!obj2)return!1;const keys1=Object.keys(obj1),keys2=Object.keys(obj2);if(keys1.length!==keys2.length)return!1;for(let i=0;i<keys1.length;i++){const key2=keys1[i];if(!keys2.includes(key2)||obj1[key2]!==obj2[key2])return!1}return!0},joinObjects=(obj1,obj2)=>{for(const key2 in obj2)if(Object.prototype. +hasOwnProperty.call(obj2,key2)){const val2=obj2[key2];key2 in obj1?obj1[key2]=cx(obj1[key2],val2):obj1[key2]=val2}return obj1},flat=(arr,target2)=>{for(let i=0;i<arr.length;i++){const el=arr[i];Array.isArray(el)?flat(el,target2):el&&target2.push(el)}},flatMergeArrays=(...arrays)=>{const result=[];flat(arrays,result);const filtered=[];for(let i=0;i<result.length;i++)result[i]&&filtered.push(result[i]);return filtered},mergeObjects=(obj1,obj2)=>{const result={};for(const key2 in obj1){const val1=obj1[key2]; +if(key2 in obj2){const val2=obj2[key2];Array.isArray(val1)||Array.isArray(val2)?result[key2]=flatMergeArrays(val2,val1):typeof val1=="object"&&typeof val2=="object"&&val1&&val2?result[key2]=mergeObjects(val1,val2):result[key2]=val2+" "+val1}else result[key2]=val1}for(const key2 in obj2)key2 in obj1||(result[key2]=obj2[key2]);return result},defaultConfig={twMerge:!0,twMergeConfig:{}};function createState$1(){let cachedTwMerge=null,cachedTwMergeConfig={},didTwMergeConfigChange=!1;return{get cachedTwMerge(){ +return cachedTwMerge},set cachedTwMerge(value){cachedTwMerge=value},get cachedTwMergeConfig(){return cachedTwMergeConfig},set cachedTwMergeConfig(value){cachedTwMergeConfig=value},get didTwMergeConfigChange(){return didTwMergeConfigChange},set didTwMergeConfigChange(value){didTwMergeConfigChange=value},reset(){cachedTwMerge=null,cachedTwMergeConfig={},didTwMergeConfigChange=!1}}}var state=createState$1(),getTailwindVariants=cn2=>{const tv2=(options,configProp)=>{const{extend:extend2=null,slots:slotProps={}, +variants:variantsProps={},compoundVariants:compoundVariantsProps=[],compoundSlots=[],defaultVariants:defaultVariantsProps={}}=options,config2={...defaultConfig,...configProp},base2=extend2?.base?cx(extend2.base,options?.base):options?.base,variants2=extend2?.variants&&!isEmptyObject(extend2.variants)?mergeObjects(variantsProps,extend2.variants):variantsProps,defaultVariants=extend2?.defaultVariants&&!isEmptyObject(extend2.defaultVariants)?{...extend2.defaultVariants,...defaultVariantsProps}:defaultVariantsProps; +!isEmptyObject(config2.twMergeConfig)&&!isEqual(config2.twMergeConfig,state.cachedTwMergeConfig)&&(state.didTwMergeConfigChange=!0,state.cachedTwMergeConfig=config2.twMergeConfig);const isExtendedSlotsEmpty=isEmptyObject(extend2?.slots),componentSlots=isEmptyObject(slotProps)?{}:{base:cx(options?.base,isExtendedSlotsEmpty&&extend2?.base),...slotProps},slots=isExtendedSlotsEmpty?componentSlots:joinObjects({...extend2?.slots},isEmptyObject(componentSlots)?{base:options?.base}:componentSlots),compoundVariants=isEmptyObject( +extend2?.compoundVariants)?compoundVariantsProps:flatMergeArrays(extend2?.compoundVariants,compoundVariantsProps),component2=props=>{if(isEmptyObject(variants2)&&isEmptyObject(slotProps)&&isExtendedSlotsEmpty)return cn2(base2,props?.class,props?.className)(config2);if(compoundVariants&&!Array.isArray(compoundVariants))throw new TypeError(`The "compoundVariants" prop must be an array. Received: ${typeof compoundVariants}`);if(compoundSlots&&!Array.isArray(compoundSlots))throw new TypeError(`The "\ +compoundSlots" prop must be an array. Received: ${typeof compoundSlots}`);const getVariantValue=(variant,vrs=variants2,_slotKey=null,slotProps2=null)=>{const variantObj=vrs[variant];if(!variantObj||isEmptyObject(variantObj))return null;const variantProp=slotProps2?.[variant]??props?.[variant];if(variantProp===null)return null;const variantKey=falsyToString(variantProp);if(typeof variantKey=="object")return null;const defaultVariantProp=defaultVariants?.[variant],key2=variantKey??falsyToString(defaultVariantProp); +return variantObj[key2||"false"]},getVariantClassNames=()=>{if(!variants2)return null;const keys2=Object.keys(variants2),result=[];for(let i=0;i<keys2.length;i++){const value=getVariantValue(keys2[i],variants2);value&&result.push(value)}return result},getVariantClassNamesBySlotKey=(slotKey,slotProps2)=>{if(!variants2||typeof variants2!="object")return null;const result=[];for(const variant in variants2){const variantValue=getVariantValue(variant,variants2,slotKey,slotProps2),value=slotKey==="bas\ +e"&&typeof variantValue=="string"?variantValue:variantValue&&variantValue[slotKey];value&&result.push(value)}return result},propsWithoutUndefined={};for(const prop2 in props){const value=props[prop2];value!==void 0&&(propsWithoutUndefined[prop2]=value)}const getCompleteProps=(key2,slotProps2)=>{const initialProp=typeof props?.[key2]=="object"?{[key2]:props[key2]?.initial}:{};return{...defaultVariants,...propsWithoutUndefined,...initialProp,...slotProps2}},getCompoundVariantsValue=(cv=[],slotProps2)=>{ +const result=[],cvLength=cv.length;for(let i=0;i<cvLength;i++){const{class:tvClass,className:tvClassName,...compoundVariantOptions}=cv[i];let isValid=!0;const completeProps=getCompleteProps(null,slotProps2);for(const key2 in compoundVariantOptions){const value=compoundVariantOptions[key2],completePropsValue=completeProps[key2];if(Array.isArray(value)){if(!value.includes(completePropsValue)){isValid=!1;break}}else{if((value==null||value===!1)&&(completePropsValue==null||completePropsValue===!1))continue; +if(completePropsValue!==value){isValid=!1;break}}}isValid&&(tvClass&&result.push(tvClass),tvClassName&&result.push(tvClassName))}return result},getCompoundVariantClassNamesBySlot=slotProps2=>{const compoundClassNames=getCompoundVariantsValue(compoundVariants,slotProps2);if(!Array.isArray(compoundClassNames))return compoundClassNames;const result={},cnFn=cn2;for(let i=0;i<compoundClassNames.length;i++){const className=compoundClassNames[i];if(typeof className=="string")result.base=cnFn(result.base, +className)(config2);else if(typeof className=="object")for(const slot in className)result[slot]=cnFn(result[slot],className[slot])(config2)}return result},getCompoundSlotClassNameBySlot=slotProps2=>{if(compoundSlots.length<1)return null;const result={},completeProps=getCompleteProps(null,slotProps2);for(let i=0;i<compoundSlots.length;i++){const{slots:slots2=[],class:slotClass,className:slotClassName,...slotVariants}=compoundSlots[i];if(!isEmptyObject(slotVariants)){let isValid=!0;for(const key2 in slotVariants){ +const completePropsValue=completeProps[key2],slotVariantValue=slotVariants[key2];if(completePropsValue===void 0||(Array.isArray(slotVariantValue)?!slotVariantValue.includes(completePropsValue):slotVariantValue!==completePropsValue)){isValid=!1;break}}if(!isValid)continue}for(let j=0;j<slots2.length;j++){const slotName=slots2[j];result[slotName]||(result[slotName]=[]),result[slotName].push([slotClass,slotClassName])}}return result};if(!isEmptyObject(slotProps)||!isExtendedSlotsEmpty){const slotsFns={}; +if(typeof slots=="object"&&!isEmptyObject(slots)){const cnFn=cn2;for(const slotKey in slots)slotsFns[slotKey]=slotProps2=>{const compoundVariantClasses=getCompoundVariantClassNamesBySlot(slotProps2),compoundSlotClasses=getCompoundSlotClassNameBySlot(slotProps2);return cnFn(slots[slotKey],getVariantClassNamesBySlotKey(slotKey,slotProps2),compoundVariantClasses?compoundVariantClasses[slotKey]:void 0,compoundSlotClasses?compoundSlotClasses[slotKey]:void 0,slotProps2?.class,slotProps2?.className)(config2)}} +return slotsFns}return cn2(base2,getVariantClassNames(),getCompoundVariantsValue(compoundVariants),props?.class,props?.className)(config2)},getVariantKeys=()=>{if(!(!variants2||typeof variants2!="object"))return Object.keys(variants2)};return component2.variantKeys=getVariantKeys(),component2.extend=extend2,component2.base=base2,component2.slots=slots,component2.variants=variants2,component2.defaultVariants=defaultVariants,component2.compoundSlots=compoundSlots,component2.compoundVariants=compoundVariants, +component2};return{tv:tv2,createTV:configProp=>(options,config2)=>tv2(options,config2?mergeObjects(configProp,config2):configProp)}},createTwMerge=cachedTwMergeConfig=>isEmptyObject(cachedTwMergeConfig)?twMerge:extendTailwindMerge({...cachedTwMergeConfig,extend:{theme:cachedTwMergeConfig.theme,classGroups:cachedTwMergeConfig.classGroups,conflictingClassGroupModifiers:cachedTwMergeConfig.conflictingClassGroupModifiers,conflictingClassGroups:cachedTwMergeConfig.conflictingClassGroups,...cachedTwMergeConfig. +extend}}),executeMerge=(classnames,config2)=>{const base2=cx(classnames);return!base2||!(config2?.twMerge??!0)?base2:((!state.cachedTwMerge||state.didTwMergeConfigChange)&&(state.didTwMergeConfigChange=!1,state.cachedTwMerge=createTwMerge(state.cachedTwMergeConfig)),state.cachedTwMerge(base2)||void 0)},cnMerge=(...classnames)=>config2=>executeMerge(classnames,config2),{tv}=getTailwindVariants(cnMerge);const buttonVariants=tv({base:"focus-visible:border-ring focus-visible:ring-ring/50 aria-invali\ +d:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium outline-none transition-all focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",variants:{variant:{default:"bg-primary text-primary-foregrou\ +nd shadow-xs hover:bg-primary/90",destructive:"bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white!",outline:"shadow-xs hover:text-accent-foreground hover:bg-muted-foreground/10 backdrop-blur-sm dark:border-input border",secondary:"dark:bg-secondary dark:text-secondary-foreground bg-background shadow-sm text-foreground hover:bg-muted-foreground/20",ghost:"hover:text-accent-foreground hover:bg-\ +muted-foreground/10 backdrop-blur-sm",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4","icon-lg":"size-10",icon:"size-9","icon-sm":"size-5 rounded-sm"}},defaultVariants:{variant:"default",size:"default"}});var root_1$17=from_html("<a><!></a>"),root_2$1F=from_html("<button><!></button>");function Button($$anchor,$$props){push$1($$props,!0);let variant=prop( +$$props,"variant",3,"default"),size2=prop($$props,"size",3,"default"),ref2=prop($$props,"ref",15,null),href=prop($$props,"href",3,void 0),type2=prop($$props,"type",3,"button"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","class","variant","size","ref","href","type","disabled","children"]);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var a=root_1$17();attribute_effect(a,$0=>({"data-slot":"button",class:$0,href:$$props.disabled?void 0:href(),"ar\ +ia-disabled":$$props.disabled,role:$$props.disabled?"link":void 0,tabindex:$$props.disabled?-1:void 0,...restProps}),[()=>cn$1(buttonVariants({variant:variant(),size:size2()}),$$props.class)],void 0,void 0,"svelte-1q39rn8");var node_1=child(a);snippet(node_1,()=>$$props.children??noop$3),reset(a),bind_this(a,$$value=>ref2($$value),()=>ref2()),append($$anchor2,a)},alternate=$$anchor2=>{var button=root_2$1F();attribute_effect(button,$0=>({"data-slot":"button",class:$0,type:type2(),disabled:$$props. +disabled,...restProps}),[()=>cn$1(buttonVariants({variant:variant(),size:size2()}),$$props.class)],void 0,void 0,"svelte-1q39rn8");var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),bind_this(button,$$value=>ref2($$value),()=>ref2()),append($$anchor2,button)};if_block(node2,$$render=>{href()?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}function isFunction$2(value){return typeof value=="function"}function isObject$2(value){return value!== +null&&typeof value=="object"}const CLASS_VALUE_PRIMITIVE_TYPES=["string","number","bigint","boolean"];function isClassValue(value){return value==null||CLASS_VALUE_PRIMITIVE_TYPES.includes(typeof value)?!0:Array.isArray(value)?value.every(item=>isClassValue(item)):typeof value=="object"?Object.getPrototypeOf(value)===Object.prototype:!1}const BoxSymbol$1=Symbol("box"),isWritableSymbol$1=Symbol("is-writable");function boxWith$1(getter,setter){const derived2=user_derived(getter);return setter?{[BoxSymbol$1]:!0, +[isWritableSymbol$1]:!0,get current(){return get$3(derived2)},set current(v){setter(v)}}:{[BoxSymbol$1]:!0,get current(){return getter()}}}function isBox$1(value){return isObject$2(value)&&BoxSymbol$1 in value}function isWritableBox$1(value){return isBox$1(value)&&isWritableSymbol$1 in value}function boxFrom$1(value){return isBox$1(value)?value:isFunction$2(value)?boxWith$1(value):simpleBox(value)}function boxFlatten$1(boxes){return Object.entries(boxes).reduce((acc,[key2,b])=>isBox$1(b)?(isWritableBox$1( +b)?Object.defineProperty(acc,key2,{get(){return b.current},set(v){b.current=v}}):Object.defineProperty(acc,key2,{get(){return b.current}}),acc):Object.assign(acc,{[key2]:b}),{})}function toReadonlyBox$1(b){return isWritableBox$1(b)?{[BoxSymbol$1]:!0,get current(){return b.current}}:b}function simpleBox(initialValue){let current2=state$1(proxy(initialValue));return{[BoxSymbol$1]:!0,[isWritableSymbol$1]:!0,get current(){return get$3(current2)},set current(v){set$1(current2,v,!0)}}}function box$1(initialValue){ +let current2=state$1(proxy(initialValue));return{[BoxSymbol$1]:!0,[isWritableSymbol$1]:!0,get current(){return get$3(current2)},set current(v){set$1(current2,v,!0)}}}box$1.from=boxFrom$1;box$1.with=boxWith$1;box$1.flatten=boxFlatten$1;box$1.readonly=toReadonlyBox$1;box$1.isBox=isBox$1;box$1.isWritableBox=isWritableBox$1;function composeHandlers(...handlers2){return function(e){for(const handler of handlers2)if(handler){if(e.defaultPrevented)return;typeof handler=="function"?handler.call(this,e): +handler.current?.call(this,e)}}}var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x.default:x}var cjs={},inlineStyleParser,hasRequiredInlineStyleParser;function requireInlineStyleParser(){if(hasRequiredInlineStyleParser)return inlineStyleParser;hasRequiredInlineStyleParser=1;var COMMENT_REGEX=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g, +NEWLINE_REGEX=/\n/g,WHITESPACE_REGEX=/^\s*/,PROPERTY_REGEX=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,COLON_REGEX=/^:\s*/,VALUE_REGEX=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,SEMICOLON_REGEX=/^[;\s]*/,TRIM_REGEX=/^\s+|\s+$/g,NEWLINE2=` `,FORWARD_SLASH="/",ASTERISK="*",EMPTY_STRING="",TYPE_COMMENT="comment",TYPE_DECLARATION="declaration";inlineStyleParser=function(style2,options){if(typeof style2!="string")throw new TypeError("First argument must be a string");if(!style2)return[];options=options||{};var lineno=1,column=1;function updatePosition(str){var lines=str.match(NEWLINE_REGEX);lines&&(lineno+=lines.length);var i=str.lastIndexOf(NEWLINE2);column=~i?str.length-i:column+str.length}function position2(){var start2={line:lineno, column};return function(node2){return node2.position=new Position(start2),whitespace2(),node2}}function Position(start2){this.start=start2,this.end={line:lineno,column},this.source=options.source}Position.prototype.content=style2;function error2(msg){var err=new Error(options.source+":"+lineno+":"+column+": "+msg);if(err.reason=msg,err.filename=options.source,err.line=lineno,err.column=column,err.source=style2,!options.silent)throw err}function match(re2){var m=re2.exec(style2);if(m){var str=m[0]; return updatePosition(str),style2=style2.slice(str.length),m}}function whitespace2(){match(WHITESPACE_REGEX)}function comments(rules2){var c2;for(rules2=rules2||[];c2=comment2();)c2!==!1&&rules2.push(c2);return rules2}function comment2(){var pos=position2();if(!(FORWARD_SLASH!=style2.charAt(0)||ASTERISK!=style2.charAt(1))){for(var i=2;EMPTY_STRING!=style2.charAt(i)&&(ASTERISK!=style2.charAt(i)||FORWARD_SLASH!=style2.charAt(i+1));)++i;if(i+=2,EMPTY_STRING===style2.charAt(i-1))return error2("End o\ @@ -439,766 +456,716 @@ onwebkittransitionend","onwheel"],EVENT_LIST_SET=new Set(EVENT_LIST);function is bIsFunction)result[key2]=executeCallbacks(a,b);else if(key2==="class"){const aIsClassValue=isClassValue(a),bIsClassValue=isClassValue(b);aIsClassValue&&bIsClassValue?result[key2]=clsx$1(a,b):aIsClassValue?result[key2]=clsx$1(a):bIsClassValue&&(result[key2]=clsx$1(b))}else if(key2==="style"){const aIsObject=typeof a=="object",bIsObject=typeof b=="object",aIsString=typeof a=="string",bIsString=typeof b=="string";if(aIsObject&&bIsObject)result[key2]={...a,...b};else if(aIsObject&&bIsString){const parsedStyle=cssToStyleObj( b);result[key2]={...a,...parsedStyle}}else if(aIsString&&bIsObject){const parsedStyle=cssToStyleObj(a);result[key2]={...parsedStyle,...b}}else if(aIsString&&bIsString){const parsedStyleA=cssToStyleObj(a),parsedStyleB=cssToStyleObj(b);result[key2]={...parsedStyleA,...parsedStyleB}}else aIsObject?result[key2]=a:bIsObject?result[key2]=b:aIsString?result[key2]=a:bIsString&&(result[key2]=b)}else result[key2]=b!==void 0?b:a}for(const key2 of Object.getOwnPropertySymbols(props)){const a=result[key2],b=props[key2]; result[key2]=b!==void 0?b:a}}}return typeof result.style=="object"&&(result.style=styleToString$1(result.style).replaceAll(` -`," ")),result.hidden===!1&&(result.hidden=void 0,delete result.hidden),result.disabled===!1&&(result.disabled=void 0,delete result.disabled),result}const srOnlyStyles$1={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",transform:"translateX(-100%)"},srOnlyStylesString=styleToString$1(srOnlyStyles$1),defaultWindow$3=typeof window<"u"?window:void 0;function getActiveElement$4(document2){let activeElement=document2. +`," ")),result.hidden===!1&&(result.hidden=void 0,delete result.hidden),result.disabled===!1&&(result.disabled=void 0,delete result.disabled),result}const srOnlyStyles$1={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",transform:"translateX(-100%)"};styleToString$1(srOnlyStyles$1);const defaultWindow$3=typeof window<"u"?window:void 0;function getActiveElement$4(document2){let activeElement=document2. activeElement;for(;activeElement?.shadowRoot;){const node2=activeElement.shadowRoot.activeElement;if(node2===activeElement)break;activeElement=node2}return activeElement}var read_methods=["forEach","isDisjointFrom","isSubsetOf","isSupersetOf"],set_like_methods=["difference","intersection","symmetricDifference","union"],inited=!1;class SvelteSet extends Set{#sources=new Map;#version=state$1(0);#size=state$1(0);#update_version=update_version||-1;constructor(value){if(super(),value){for(var element2 of value) -super.add(element2);this.#size.v=super.size}inited||this.#init()}#source(value){return update_version===this.#update_version?state$1(value):source$2(value)}#init(){inited=!0;var proto=SvelteSet.prototype,set_proto=Set.prototype;for(const method of read_methods)proto[method]=function(...v){return get$4(this.#version),set_proto[method].apply(this,v)};for(const method of set_like_methods)proto[method]=function(...v){get$4(this.#version);var set2=set_proto[method].apply(this,v);return new SvelteSet( -set2)}}has(value){var has=super.has(value),sources=this.#sources,s2=sources.get(value);if(s2===void 0){if(!has)return get$4(this.#version),!1;s2=this.#source(!0),sources.set(value,s2)}return get$4(s2),has}add(value){return super.has(value)||(super.add(value),set$1(this.#size,super.size),increment$1(this.#version)),this}delete(value){var deleted=super.delete(value),sources=this.#sources,s2=sources.get(value);return s2!==void 0&&(sources.delete(value),set$1(s2,!1)),deleted&&(set$1(this.#size,super. -size),increment$1(this.#version)),deleted}clear(){if(super.size!==0){super.clear();var sources=this.#sources;for(var s2 of sources.values())set$1(s2,!1);sources.clear(),set$1(this.#size,0),increment$1(this.#version)}}keys(){return this.values()}values(){return get$4(this.#version),super.values()}entries(){return get$4(this.#version),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return get$4(this.#size)}}class SvelteMap extends Map{#sources=new Map;#version=state$1(0);#size=state$1( -0);#update_version=update_version||-1;constructor(value){if(super(),value){for(var[key2,v]of value)super.set(key2,v);this.#size.v=super.size}}#source(value){return update_version===this.#update_version?state$1(value):source$2(value)}has(key2){var sources=this.#sources,s2=sources.get(key2);if(s2===void 0){var ret=super.get(key2);if(ret!==void 0)s2=this.#source(0),sources.set(key2,s2);else return get$4(this.#version),!1}return get$4(s2),!0}forEach(callbackfn,this_arg){this.#read_all(),super.forEach( -callbackfn,this_arg)}get(key2){var sources=this.#sources,s2=sources.get(key2);if(s2===void 0){var ret=super.get(key2);if(ret!==void 0)s2=this.#source(0),sources.set(key2,s2);else{get$4(this.#version);return}}return get$4(s2),super.get(key2)}set(key2,value){var sources=this.#sources,s2=sources.get(key2),prev_res=super.get(key2),res=super.set(key2,value),version2=this.#version;if(s2===void 0)s2=this.#source(0),sources.set(key2,s2),set$1(this.#size,super.size),increment$1(version2);else if(prev_res!== -value){increment$1(s2);var v_reactions=version2.reactions===null?null:new Set(version2.reactions),needs_version_increase=v_reactions===null||!s2.reactions?.every(r2=>v_reactions.has(r2));needs_version_increase&&increment$1(version2)}return res}delete(key2){var sources=this.#sources,s2=sources.get(key2),res=super.delete(key2);return s2!==void 0&&(sources.delete(key2),set$1(this.#size,super.size),set$1(s2,-1),increment$1(this.#version)),res}clear(){if(super.size!==0){super.clear();var sources=this.#sources; -set$1(this.#size,0);for(var s2 of sources.values())set$1(s2,-1);increment$1(this.#version),sources.clear()}}#read_all(){get$4(this.#version);var sources=this.#sources;if(this.#size.v!==sources.size){for(var key2 of super.keys())if(!sources.has(key2)){var s2=this.#source(0);sources.set(key2,s2)}}for([,s2]of this.#sources)get$4(s2)}keys(){return get$4(this.#version),super.keys()}values(){return this.#read_all(),super.values()}entries(){return this.#read_all(),super.entries()}[Symbol.iterator](){return this. -entries()}get size(){return get$4(this.#size),super.size}}class ReactiveValue{#fn;#subscribe;constructor(fn,onsubscribe){this.#fn=fn,this.#subscribe=createSubscriber(onsubscribe)}get current(){return this.#subscribe(),this.#fn()}}const parenthesis_regex=/\(.+\)/,non_parenthesized_keywords=new Set(["all","print","screen","and","or","not","only"]);class MediaQuery extends ReactiveValue{constructor(query,fallback2){let final_query=parenthesis_regex.test(query)||query.split(/[\s,]+/).some(keyword2=>non_parenthesized_keywords. -has(keyword2.trim()))?query:`(${query})`;const q2=window.matchMedia(final_query);super(()=>q2.matches,update2=>on(q2,"change",update2))}}let ActiveElement$3=class{#document;#subscribe;constructor(options={}){const{window:window2=defaultWindow$3,document:document2=window2?.document}=options;window2!==void 0&&(this.#document=document2,this.#subscribe=createSubscriber(update2=>{const cleanupFocusIn=on(window2,"focusin",update2),cleanupFocusOut=on(window2,"focusout",update2);return()=>{cleanupFocusIn(), -cleanupFocusOut()}}))}get current(){return this.#subscribe?.(),this.#document?getActiveElement$4(this.#document):null}};new ActiveElement$3;function isFunction$1(value){return typeof value=="function"}function extract(value,defaultValue){if(isFunction$1(value)){const gotten=value();return gotten===void 0?defaultValue:gotten}return value===void 0?defaultValue:value}let Context$1=class{#name;#key;constructor(name){this.#name=name,this.#key=Symbol(name)}get key(){return this.#key}exists(){return hasContext( -this.#key)}get(){const context=getContext(this.#key);if(context===void 0)throw new Error(`Context "${this.#name}" not found`);return context}getOr(fallback2){const context=getContext(this.#key);return context===void 0?fallback2:context}set(context){return setContext(this.#key,context)}};function useDebounce(callback,wait){let context=state$1(null);const wait$=user_derived(()=>extract(wait,250));function debounced(...args){if(get$4(context))get$4(context).timeout&&clearTimeout(get$4(context).timeout);else{ -let resolve2,reject;const promise=new Promise((res,rej)=>{resolve2=res,reject=rej});set$1(context,{timeout:null,runner:null,promise,resolve:resolve2,reject},!0)}return get$4(context).runner=async()=>{if(!get$4(context))return;const ctx=get$4(context);set$1(context,null);try{ctx.resolve(await callback.apply(this,args))}catch(error2){ctx.reject(error2)}},get$4(context).timeout=setTimeout(get$4(context).runner,get$4(wait$)),get$4(context).promise}return debounced.cancel=async()=>{(!get$4(context)|| -get$4(context).timeout===null)&&(await new Promise(resolve2=>setTimeout(resolve2,0)),!get$4(context)||get$4(context).timeout===null)||(clearTimeout(get$4(context).timeout),get$4(context).reject("Cancelled"),set$1(context,null))},debounced.runScheduledNow=async()=>{(!get$4(context)||!get$4(context).timeout)&&(await new Promise(resolve2=>setTimeout(resolve2,0)),!get$4(context)||!get$4(context).timeout)||(clearTimeout(get$4(context).timeout),get$4(context).timeout=null,await get$4(context).runner?.())}, -Object.defineProperty(debounced,"pending",{enumerable:!0,get(){return!!get$4(context)?.timeout}}),debounced}function runEffect$1(flush,effect2){switch(flush){case"post":user_effect(effect2);break;case"pre":user_pre_effect(effect2);break}}function runWatcher$1(sources,flush,effect2,options={}){const{lazy=!1}=options;let active=!lazy,previousValues=Array.isArray(sources)?[]:void 0;runEffect$1(flush,()=>{const values=Array.isArray(sources)?sources.map(source2=>source2()):sources();if(!active){active= -!0,previousValues=values;return}const cleanup=untrack$1(()=>effect2(values,previousValues));return previousValues=values,cleanup})}function watch$1(sources,effect2,options){runWatcher$1(sources,"post",effect2,options)}function watchPre$1(sources,effect2,options){runWatcher$1(sources,"pre",effect2,options)}watch$1.pre=watchPre$1;function get$1(value){return isFunction$1(value)?value():value}class ElementSize{#size={width:0,height:0};#observed=!1;#options;#node;#window;#width=user_derived(()=>(get$4( -this.#subscribe)?.(),this.getSize().width));#height=user_derived(()=>(get$4(this.#subscribe)?.(),this.getSize().height));#subscribe=user_derived(()=>{const node$=get$1(this.#node);if(node$)return createSubscriber(update2=>{if(!this.#window)return;const observer=new this.#window.ResizeObserver(entries=>{this.#observed=!0;for(const entry of entries){const boxSize=this.#options.box==="content-box"?entry.contentBoxSize:entry.borderBoxSize,boxSizeArr=Array.isArray(boxSize)?boxSize:[boxSize];this.#size. -width=boxSizeArr.reduce((acc,size2)=>Math.max(acc,size2.inlineSize),0),this.#size.height=boxSizeArr.reduce((acc,size2)=>Math.max(acc,size2.blockSize),0)}update2()});return observer.observe(node$),()=>{this.#observed=!1,observer.disconnect()}})});constructor(node2,options={box:"border-box"}){this.#window=options.window??defaultWindow$3,this.#options=options,this.#node=node2,this.#size={width:0,height:0}}calculateSize(){const element2=get$1(this.#node);if(!element2||!this.#window)return;const offsetWidth=element2. -offsetWidth,offsetHeight=element2.offsetHeight;if(this.#options.box==="border-box")return{width:offsetWidth,height:offsetHeight};const style2=this.#window.getComputedStyle(element2),paddingWidth=parseFloat(style2.paddingLeft)+parseFloat(style2.paddingRight),paddingHeight=parseFloat(style2.paddingTop)+parseFloat(style2.paddingBottom),borderWidth=parseFloat(style2.borderLeftWidth)+parseFloat(style2.borderRightWidth),borderHeight=parseFloat(style2.borderTopWidth)+parseFloat(style2.borderBottomWidth), -contentWidth=offsetWidth-paddingWidth-borderWidth,contentHeight=offsetHeight-paddingHeight-borderHeight;return{width:contentWidth,height:contentHeight}}getSize(){return this.#observed?this.#size:this.calculateSize()??this.#size}get current(){return get$4(this.#subscribe)?.(),this.getSize()}get width(){return get$4(this.#width)}get height(){return get$4(this.#height)}}class IsMounted{#isMounted=state$1(!1);constructor(){user_effect(()=>(untrack$1(()=>set$1(this.#isMounted,!0)),()=>{set$1(this.#isMounted, -!1)}))}get current(){return get$4(this.#isMounted)}}class Previous{#previousCallback=()=>{};#previous=user_derived(()=>this.#previousCallback());constructor(getter,initialValue){let actualPrevious;initialValue!==void 0&&(actualPrevious=initialValue),this.#previousCallback=()=>{try{return actualPrevious}finally{actualPrevious=getter()}}}get current(){return get$4(this.#previous)}}function onDestroyEffect(fn){user_effect(()=>()=>{fn()})}function onMountEffect(fn){user_effect(()=>untrack$1(()=>fn()))} -function afterSleep(ms,cb){return setTimeout(cb,ms)}function afterTick(fn){tick().then(fn)}const ELEMENT_NODE=1,DOCUMENT_NODE=9,DOCUMENT_FRAGMENT_NODE=11;function isHTMLElement$2(node2){return isObject$2(node2)&&node2.nodeType===ELEMENT_NODE&&typeof node2.nodeName=="string"}function isDocument(node2){return isObject$2(node2)&&node2.nodeType===DOCUMENT_NODE}function isWindow(node2){return isObject$2(node2)&&node2.constructor?.name==="VisualViewport"}function isNode$1(node2){return isObject$2(node2)&& -node2.nodeType!==void 0}function isShadowRoot$1(node2){return isNode$1(node2)&&node2.nodeType===DOCUMENT_FRAGMENT_NODE&&"host"in node2}function contains$3(parent,child2){if(!parent||!child2||!isHTMLElement$2(parent)||!isHTMLElement$2(child2))return!1;const rootNode=child2.getRootNode?.();if(parent===child2||parent.contains(child2))return!0;if(rootNode&&isShadowRoot$1(rootNode)){let next2=child2;for(;next2;){if(parent===next2)return!0;next2=next2.parentNode||next2.host}}return!1}function getDocument$1(node2){ -return isDocument(node2)?node2:isWindow(node2)?node2.document:node2?.ownerDocument??document}function getWindow$1(node2){return isShadowRoot$1(node2)?getWindow$1(node2.host):isDocument(node2)?node2.defaultView??window:isHTMLElement$2(node2)?node2.ownerDocument?.defaultView??window:window}function getActiveElement$3(rootNode){let activeElement=rootNode.activeElement;for(;activeElement?.shadowRoot;){const el=activeElement.shadowRoot.activeElement;if(el===activeElement)break;activeElement=el}return activeElement} -class DOMContext{element;#root=user_derived(()=>this.element.current?this.element.current.getRootNode()??document:document);get root(){return get$4(this.#root)}set root(value){set$1(this.#root,value)}constructor(element2){typeof element2=="function"?this.element=boxWith$1(element2):this.element=element2}getDocument=()=>getDocument$1(this.root);getWindow=()=>this.getDocument().defaultView??window;getActiveElement=()=>getActiveElement$3(this.root);isActiveElement=node2=>node2===this.getActiveElement();getElementById(id2){ -return this.root.getElementById(id2)}querySelector=selector=>this.root?this.root.querySelector(selector):null;querySelectorAll=selector=>this.root?this.root.querySelectorAll(selector):[];setTimeout=(callback,delay)=>this.getWindow().setTimeout(callback,delay);clearTimeout=timeoutId=>this.getWindow().clearTimeout(timeoutId)}function attachRef(ref2,onChange){return{[createAttachmentKey()]:node2=>isBox$1(ref2)?(ref2.current=node2,untrack$1(()=>onChange?.(node2)),()=>{"isConnected"in node2&&node2.isConnected|| -(ref2.current=null,onChange?.(null))}):(ref2(node2),untrack$1(()=>onChange?.(node2)),()=>{"isConnected"in node2&&node2.isConnected||(ref2(null),onChange?.(null))})}}function boolToStr(condition){return condition?"true":"false"}function boolToStrTrueOrUndef(condition){return condition?"true":void 0}function boolToEmptyStrOrUndef(condition){return condition?"":void 0}function boolToTrueOrUndef(condition){return condition?!0:void 0}function getDataOpenClosed(condition){return condition?"open":"clos\ -ed"}function getDataChecked(condition){return condition?"checked":"unchecked"}function getAriaChecked(checked,indeterminate){return indeterminate?"mixed":checked?"true":"false"}class BitsAttrs{#variant;#prefix;attrs;constructor(config2){this.#variant=config2.getVariant?config2.getVariant():null,this.#prefix=this.#variant?`data-${this.#variant}-`:`data-${config2.component}-`,this.getAttr=this.getAttr.bind(this),this.selector=this.selector.bind(this),this.attrs=Object.fromEntries(config2.parts.map( -part=>[part,this.getAttr(part)]))}getAttr(part,variantOverride){return variantOverride?`data-${variantOverride}-${part}`:`${this.#prefix}${part}`}selector(part,variantOverride){return`[${this.getAttr(part,variantOverride)}]`}}function createBitsAttrs(config2){const bitsAttrs=new BitsAttrs(config2);return{...bitsAttrs.attrs,selector:bitsAttrs.selector,getAttr:bitsAttrs.getAttr}}const ARROW_DOWN="ArrowDown",ARROW_LEFT="ArrowLeft",ARROW_RIGHT="ArrowRight",ARROW_UP="ArrowUp",END="End",ENTER="Enter", -ESCAPE="Escape",HOME="Home",PAGE_DOWN="PageDown",PAGE_UP="PageUp",SPACE=" ",TAB="Tab";function getElemDirection(elem){return window.getComputedStyle(elem).getPropertyValue("direction")}function getNextKey(dir="ltr",orientation="horizontal"){return{horizontal:dir==="rtl"?ARROW_LEFT:ARROW_RIGHT,vertical:ARROW_DOWN}[orientation]}function getPrevKey(dir="ltr",orientation="horizontal"){return{horizontal:dir==="rtl"?ARROW_RIGHT:ARROW_LEFT,vertical:ARROW_UP}[orientation]}function getDirectionalKeys(dir="\ +super.add(element2);this.#size.v=super.size}inited||this.#init()}#source(value){return update_version===this.#update_version?state$1(value):source$2(value)}#init(){inited=!0;var proto=SvelteSet.prototype,set_proto=Set.prototype;for(const method of read_methods)proto[method]=function(...v){return get$3(this.#version),set_proto[method].apply(this,v)};for(const method of set_like_methods)proto[method]=function(...v){get$3(this.#version);var set2=set_proto[method].apply(this,v);return new SvelteSet( +set2)}}has(value){var has=super.has(value),sources=this.#sources,s2=sources.get(value);if(s2===void 0){if(!has)return get$3(this.#version),!1;s2=this.#source(!0),sources.set(value,s2)}return get$3(s2),has}add(value){return super.has(value)||(super.add(value),set$1(this.#size,super.size),increment$1(this.#version)),this}delete(value){var deleted=super.delete(value),sources=this.#sources,s2=sources.get(value);return s2!==void 0&&(sources.delete(value),set$1(s2,!1)),deleted&&(set$1(this.#size,super. +size),increment$1(this.#version)),deleted}clear(){if(super.size!==0){super.clear();var sources=this.#sources;for(var s2 of sources.values())set$1(s2,!1);sources.clear(),set$1(this.#size,0),increment$1(this.#version)}}keys(){return this.values()}values(){return get$3(this.#version),super.values()}entries(){return get$3(this.#version),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return get$3(this.#size)}}class SvelteMap extends Map{#sources=new Map;#version=state$1(0);#size=state$1( +0);#update_version=update_version||-1;constructor(value){if(super(),value){for(var[key2,v]of value)super.set(key2,v);this.#size.v=super.size}}#source(value){return update_version===this.#update_version?state$1(value):source$2(value)}has(key2){var sources=this.#sources,s2=sources.get(key2);if(s2===void 0)if(super.has(key2))s2=this.#source(0),sources.set(key2,s2);else return get$3(this.#version),!1;return get$3(s2),!0}forEach(callbackfn,this_arg){this.#read_all(),super.forEach(callbackfn,this_arg)}get(key2){ +var sources=this.#sources,s2=sources.get(key2);if(s2===void 0)if(super.has(key2))s2=this.#source(0),sources.set(key2,s2);else{get$3(this.#version);return}return get$3(s2),super.get(key2)}set(key2,value){var sources=this.#sources,s2=sources.get(key2),prev_res=super.get(key2),res=super.set(key2,value),version2=this.#version;if(s2===void 0)s2=this.#source(0),sources.set(key2,s2),set$1(this.#size,super.size),increment$1(version2);else if(prev_res!==value){increment$1(s2);var v_reactions=version2.reactions=== +null?null:new Set(version2.reactions),needs_version_increase=v_reactions===null||!s2.reactions?.every(r2=>v_reactions.has(r2));needs_version_increase&&increment$1(version2)}return res}delete(key2){var sources=this.#sources,s2=sources.get(key2),res=super.delete(key2);return s2!==void 0&&(sources.delete(key2),set$1(s2,-1)),res&&(set$1(this.#size,super.size),increment$1(this.#version)),res}clear(){if(super.size!==0){super.clear();var sources=this.#sources;set$1(this.#size,0);for(var s2 of sources.values()) +set$1(s2,-1);increment$1(this.#version),sources.clear()}}#read_all(){get$3(this.#version);var sources=this.#sources;if(this.#size.v!==sources.size){for(var key2 of super.keys())if(!sources.has(key2)){var s2=this.#source(0);sources.set(key2,s2)}}for([,s2]of this.#sources)get$3(s2)}keys(){return get$3(this.#version),super.keys()}values(){return this.#read_all(),super.values()}entries(){return this.#read_all(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return get$3(this.#size), +super.size}}class ReactiveValue{#fn;#subscribe;constructor(fn,onsubscribe){this.#fn=fn,this.#subscribe=createSubscriber(onsubscribe)}get current(){return this.#subscribe(),this.#fn()}}const parenthesis_regex=/\(.+\)/,non_parenthesized_keywords=new Set(["all","print","screen","and","or","not","only"]);class MediaQuery extends ReactiveValue{constructor(query,fallback2){let final_query=parenthesis_regex.test(query)||query.split(/[\s,]+/).some(keyword2=>non_parenthesized_keywords.has(keyword2.trim()))? +query:`(${query})`;const q2=window.matchMedia(final_query);super(()=>q2.matches,update2=>on(q2,"change",update2))}}let ActiveElement$3=class{#document;#subscribe;constructor(options={}){const{window:window2=defaultWindow$3,document:document2=window2?.document}=options;window2!==void 0&&(this.#document=document2,this.#subscribe=createSubscriber(update2=>{const cleanupFocusIn=on(window2,"focusin",update2),cleanupFocusOut=on(window2,"focusout",update2);return()=>{cleanupFocusIn(),cleanupFocusOut()}}))}get current(){ +return this.#subscribe?.(),this.#document?getActiveElement$4(this.#document):null}};new ActiveElement$3;function isFunction$1(value){return typeof value=="function"}function extract(value,defaultValue){if(isFunction$1(value)){const gotten=value();return gotten===void 0?defaultValue:gotten}return value===void 0?defaultValue:value}let Context$1=class{#name;#key;constructor(name){this.#name=name,this.#key=Symbol(name)}get key(){return this.#key}exists(){return hasContext(this.#key)}get(){const context=getContext( +this.#key);if(context===void 0)throw new Error(`Context "${this.#name}" not found`);return context}getOr(fallback2){const context=getContext(this.#key);return context===void 0?fallback2:context}set(context){return setContext(this.#key,context)}};function useDebounce(callback,wait){let context=state$1(null);const wait$=user_derived(()=>extract(wait,250));function debounced(...args){if(get$3(context))get$3(context).timeout&&clearTimeout(get$3(context).timeout);else{let resolve2,reject;const promise=new Promise( +(res,rej)=>{resolve2=res,reject=rej});set$1(context,{timeout:null,runner:null,promise,resolve:resolve2,reject},!0)}return get$3(context).runner=async()=>{if(!get$3(context))return;const ctx=get$3(context);set$1(context,null);try{ctx.resolve(await callback.apply(this,args))}catch(error2){ctx.reject(error2)}},get$3(context).timeout=setTimeout(get$3(context).runner,get$3(wait$)),get$3(context).promise}return debounced.cancel=async()=>{(!get$3(context)||get$3(context).timeout===null)&&(await new Promise( +resolve2=>setTimeout(resolve2,0)),!get$3(context)||get$3(context).timeout===null)||(clearTimeout(get$3(context).timeout),get$3(context).reject("Cancelled"),set$1(context,null))},debounced.runScheduledNow=async()=>{(!get$3(context)||!get$3(context).timeout)&&(await new Promise(resolve2=>setTimeout(resolve2,0)),!get$3(context)||!get$3(context).timeout)||(clearTimeout(get$3(context).timeout),get$3(context).timeout=null,await get$3(context).runner?.())},Object.defineProperty(debounced,"pending",{enumerable:!0, +get(){return!!get$3(context)?.timeout}}),debounced}function runEffect$1(flush,effect2){switch(flush){case"post":user_effect(effect2);break;case"pre":user_pre_effect(effect2);break}}function runWatcher$1(sources,flush,effect2,options={}){const{lazy=!1}=options;let active=!lazy,previousValues=Array.isArray(sources)?[]:void 0;runEffect$1(flush,()=>{const values=Array.isArray(sources)?sources.map(source2=>source2()):sources();if(!active){active=!0,previousValues=values;return}const cleanup=untrack$1( +()=>effect2(values,previousValues));return previousValues=values,cleanup})}function watch$1(sources,effect2,options){runWatcher$1(sources,"post",effect2,options)}function watchPre$1(sources,effect2,options){runWatcher$1(sources,"pre",effect2,options)}watch$1.pre=watchPre$1;function get$1(value){return isFunction$1(value)?value():value}class ElementSize{#size={width:0,height:0};#observed=!1;#options;#node;#window;#width=user_derived(()=>(get$3(this.#subscribe)?.(),this.getSize().width));#height=user_derived( +()=>(get$3(this.#subscribe)?.(),this.getSize().height));#subscribe=user_derived(()=>{const node$=get$1(this.#node);if(node$)return createSubscriber(update2=>{if(!this.#window)return;const observer=new this.#window.ResizeObserver(entries=>{this.#observed=!0;for(const entry of entries){const boxSize=this.#options.box==="content-box"?entry.contentBoxSize:entry.borderBoxSize,boxSizeArr=Array.isArray(boxSize)?boxSize:[boxSize];this.#size.width=boxSizeArr.reduce((acc,size2)=>Math.max(acc,size2.inlineSize), +0),this.#size.height=boxSizeArr.reduce((acc,size2)=>Math.max(acc,size2.blockSize),0)}update2()});return observer.observe(node$),()=>{this.#observed=!1,observer.disconnect()}})});constructor(node2,options={box:"border-box"}){this.#window=options.window??defaultWindow$3,this.#options=options,this.#node=node2,this.#size={width:0,height:0}}calculateSize(){const element2=get$1(this.#node);if(!element2||!this.#window)return;const offsetWidth=element2.offsetWidth,offsetHeight=element2.offsetHeight;if(this.#options. +box==="border-box")return{width:offsetWidth,height:offsetHeight};const style2=this.#window.getComputedStyle(element2),paddingWidth=parseFloat(style2.paddingLeft)+parseFloat(style2.paddingRight),paddingHeight=parseFloat(style2.paddingTop)+parseFloat(style2.paddingBottom),borderWidth=parseFloat(style2.borderLeftWidth)+parseFloat(style2.borderRightWidth),borderHeight=parseFloat(style2.borderTopWidth)+parseFloat(style2.borderBottomWidth),contentWidth=offsetWidth-paddingWidth-borderWidth,contentHeight=offsetHeight- +paddingHeight-borderHeight;return{width:contentWidth,height:contentHeight}}getSize(){return this.#observed?this.#size:this.calculateSize()??this.#size}get current(){return get$3(this.#subscribe)?.(),this.getSize()}get width(){return get$3(this.#width)}get height(){return get$3(this.#height)}}class IsMounted{#isMounted=state$1(!1);constructor(){user_effect(()=>(untrack$1(()=>set$1(this.#isMounted,!0)),()=>{set$1(this.#isMounted,!1)}))}get current(){return get$3(this.#isMounted)}}class Previous{#previousCallback=()=>{};#previous=user_derived( +()=>this.#previousCallback());constructor(getter,initialValue){let actualPrevious;initialValue!==void 0&&(actualPrevious=initialValue),this.#previousCallback=()=>{try{return actualPrevious}finally{actualPrevious=getter()}}}get current(){return get$3(this.#previous)}}function onDestroyEffect(fn){user_effect(()=>()=>{fn()})}function onMountEffect(fn){user_effect(()=>untrack$1(()=>fn()))}function afterSleep(ms,cb){return setTimeout(cb,ms)}function afterTick(fn){tick().then(fn)}const ELEMENT_NODE=1, +DOCUMENT_NODE=9,DOCUMENT_FRAGMENT_NODE=11;function isHTMLElement$2(node2){return isObject$2(node2)&&node2.nodeType===ELEMENT_NODE&&typeof node2.nodeName=="string"}function isDocument(node2){return isObject$2(node2)&&node2.nodeType===DOCUMENT_NODE}function isWindow(node2){return isObject$2(node2)&&node2.constructor?.name==="VisualViewport"}function isNode$1(node2){return isObject$2(node2)&&node2.nodeType!==void 0}function isShadowRoot$1(node2){return isNode$1(node2)&&node2.nodeType===DOCUMENT_FRAGMENT_NODE&& +"host"in node2}function contains$3(parent,child2){if(!parent||!child2||!isHTMLElement$2(parent)||!isHTMLElement$2(child2))return!1;const rootNode=child2.getRootNode?.();if(parent===child2||parent.contains(child2))return!0;if(rootNode&&isShadowRoot$1(rootNode)){let next2=child2;for(;next2;){if(parent===next2)return!0;next2=next2.parentNode||next2.host}}return!1}function getDocument$1(node2){return isDocument(node2)?node2:isWindow(node2)?node2.document:node2?.ownerDocument??document}function getWindow$1(node2){ +return isShadowRoot$1(node2)?getWindow$1(node2.host):isDocument(node2)?node2.defaultView??window:isHTMLElement$2(node2)?node2.ownerDocument?.defaultView??window:window}function getActiveElement$3(rootNode){let activeElement=rootNode.activeElement;for(;activeElement?.shadowRoot;){const el=activeElement.shadowRoot.activeElement;if(el===activeElement)break;activeElement=el}return activeElement}class DOMContext{element;#root=user_derived(()=>this.element.current?this.element.current.getRootNode()??document: +document);get root(){return get$3(this.#root)}set root(value){set$1(this.#root,value)}constructor(element2){typeof element2=="function"?this.element=boxWith$1(element2):this.element=element2}getDocument=()=>getDocument$1(this.root);getWindow=()=>this.getDocument().defaultView??window;getActiveElement=()=>getActiveElement$3(this.root);isActiveElement=node2=>node2===this.getActiveElement();getElementById(id2){return this.root.getElementById(id2)}querySelector=selector=>this.root?this.root.querySelector( +selector):null;querySelectorAll=selector=>this.root?this.root.querySelectorAll(selector):[];setTimeout=(callback,delay)=>this.getWindow().setTimeout(callback,delay);clearTimeout=timeoutId=>this.getWindow().clearTimeout(timeoutId)}function attachRef(ref2,onChange){return{[createAttachmentKey()]:node2=>isBox$1(ref2)?(ref2.current=node2,untrack$1(()=>onChange?.(node2)),()=>{"isConnected"in node2&&node2.isConnected||(ref2.current=null,onChange?.(null))}):(ref2(node2),untrack$1(()=>onChange?.(node2)), +()=>{"isConnected"in node2&&node2.isConnected||(ref2(null),onChange?.(null))})}}function boolToStr(condition){return condition?"true":"false"}function boolToStrTrueOrUndef(condition){return condition?"true":void 0}function boolToEmptyStrOrUndef(condition){return condition?"":void 0}function boolToTrueOrUndef(condition){return condition?!0:void 0}function getDataOpenClosed(condition){return condition?"open":"closed"}function getDataChecked(condition){return condition?"checked":"unchecked"}function getDataTransitionAttrs(state2){ +return state2==="starting"?{"data-starting-style":""}:state2==="ending"?{"data-ending-style":""}:{}}function getAriaChecked(checked,indeterminate){return indeterminate?"mixed":checked?"true":"false"}class BitsAttrs{#variant;#prefix;attrs;constructor(config2){this.#variant=config2.getVariant?config2.getVariant():null,this.#prefix=this.#variant?`data-${this.#variant}-`:`data-${config2.component}-`,this.getAttr=this.getAttr.bind(this),this.selector=this.selector.bind(this),this.attrs=Object.fromEntries( +config2.parts.map(part=>[part,this.getAttr(part)]))}getAttr(part,variantOverride){return variantOverride?`data-${variantOverride}-${part}`:`${this.#prefix}${part}`}selector(part,variantOverride){return`[${this.getAttr(part,variantOverride)}]`}}function createBitsAttrs(config2){const bitsAttrs=new BitsAttrs(config2);return{...bitsAttrs.attrs,selector:bitsAttrs.selector,getAttr:bitsAttrs.getAttr}}const ARROW_DOWN="ArrowDown",ARROW_LEFT="ArrowLeft",ARROW_RIGHT="ArrowRight",ARROW_UP="ArrowUp",END="E\ +nd",ENTER="Enter",ESCAPE="Escape",HOME="Home",PAGE_DOWN="PageDown",PAGE_UP="PageUp",SPACE=" ",TAB="Tab";function getElemDirection(elem){return window.getComputedStyle(elem).getPropertyValue("direction")}function getNextKey(dir="ltr",orientation="horizontal"){return{horizontal:dir==="rtl"?ARROW_LEFT:ARROW_RIGHT,vertical:ARROW_DOWN}[orientation]}function getPrevKey(dir="ltr",orientation="horizontal"){return{horizontal:dir==="rtl"?ARROW_RIGHT:ARROW_LEFT,vertical:ARROW_UP}[orientation]}function getDirectionalKeys(dir="\ ltr",orientation="horizontal"){return["ltr","rtl"].includes(dir)||(dir="ltr"),["horizontal","vertical"].includes(orientation)||(orientation="horizontal"),{nextKey:getNextKey(dir,orientation),prevKey:getPrevKey(dir,orientation)}}const isBrowser$2=typeof document<"u",isIOS=getIsIOS();function getIsIOS(){return isBrowser$2&&window?.navigator?.userAgent&&(/iP(ad|hone|od)/.test(window.navigator.userAgent)||window?.navigator?.maxTouchPoints>2&&/iPad|Macintosh/.test(window?.navigator.userAgent))}function isHTMLElement$1(element2){ return element2 instanceof HTMLElement}function isElement$1(element2){return element2 instanceof Element}function isElementOrSVGElement(element2){return element2 instanceof Element||element2 instanceof SVGElement}function isTouch(e){return e.pointerType==="touch"}function isFocusVisible(element2){return element2.matches(":focus-visible")}function isNotNull(value){return value!==null}function isSelectableInput(element2){return element2 instanceof HTMLInputElement&&"select"in element2}class RovingFocusGroup{#opts;#currentTabStopId=box$1( null);constructor(opts){this.#opts=opts}getCandidateNodes(){return this.#opts.rootNode.current?this.#opts.candidateSelector?Array.from(this.#opts.rootNode.current.querySelectorAll(this.#opts.candidateSelector)):this.#opts.candidateAttr?Array.from(this.#opts.rootNode.current.querySelectorAll(`[${this.#opts.candidateAttr}]:not([data-disabled])`)):[]:[]}focusFirstCandidate(){const items2=this.getCandidateNodes();items2.length&&items2[0]?.focus()}handleKeydown(node2,e,both=!1){const rootNode=this.#opts. rootNode.current;if(!rootNode||!node2)return;const items2=this.getCandidateNodes();if(!items2.length)return;const currentIndex=items2.indexOf(node2),dir=getElemDirection(rootNode),{nextKey,prevKey}=getDirectionalKeys(dir,this.#opts.orientation.current),loop2=this.#opts.loop.current,keyToIndex={[nextKey]:currentIndex+1,[prevKey]:currentIndex-1,[HOME]:0,[END]:items2.length-1};if(both){const altNextKey=nextKey===ARROW_DOWN?ARROW_RIGHT:ARROW_DOWN,altPrevKey=prevKey===ARROW_UP?ARROW_LEFT:ARROW_UP;keyToIndex[altNextKey]= currentIndex+1,keyToIndex[altPrevKey]=currentIndex-1}let itemIndex=keyToIndex[e.key];if(itemIndex===void 0)return;e.preventDefault(),itemIndex<0&&loop2?itemIndex=items2.length-1:itemIndex===items2.length&&loop2&&(itemIndex=0);const itemToFocus=items2[itemIndex];if(itemToFocus)return itemToFocus.focus(),this.#currentTabStopId.current=itemToFocus.id,this.#opts.onCandidateFocus?.(itemToFocus),itemToFocus}getTabIndex(node2){const items2=this.getCandidateNodes(),anyActive=this.#currentTabStopId.current!== -null;return node2&&!anyActive&&items2[0]===node2?(this.#currentTabStopId.current=node2.id,0):node2?.id===this.#currentTabStopId.current?0:-1}setCurrentTabStopId(id2){this.#currentTabStopId.current=id2}focusCurrentTabStop(){const currentTabStopId=this.#currentTabStopId.current;if(!currentTabStopId)return;const currentTabStop=this.#opts.rootNode.current?.querySelector(`#${currentTabStopId}`);!currentTabStop||!isHTMLElement$1(currentTabStop)||currentTabStop.focus()}}class AnimationsComplete{#opts;#currentFrame=null;constructor(opts){ -this.#opts=opts,onDestroyEffect(()=>this.#cleanup())}#cleanup(){this.#currentFrame&&(window.cancelAnimationFrame(this.#currentFrame),this.#currentFrame=null)}run(fn){this.#cleanup();const node2=this.#opts.ref.current;if(node2){if(typeof node2.getAnimations!="function"){this.#executeCallback(fn);return}this.#currentFrame=window.requestAnimationFrame(()=>{const animations=node2.getAnimations();if(animations.length===0){this.#executeCallback(fn);return}Promise.allSettled(animations.map(animation=>animation. -finished)).then(()=>{this.#executeCallback(fn)})})}}#executeCallback(fn){const execute=()=>{fn()};this.#opts.afterTick?afterTick(execute):execute()}}class PresenceManager{#opts;#enabled;#afterAnimations;#shouldRender=state$1(!1);constructor(opts){this.#opts=opts,set$1(this.#shouldRender,opts.open.current,!0),this.#enabled=opts.enabled??!0,this.#afterAnimations=new AnimationsComplete({ref:this.#opts.ref,afterTick:this.#opts.open}),watch$1(()=>this.#opts.open.current,isOpen=>{isOpen&&set$1(this.#shouldRender, -!0),this.#enabled&&this.#afterAnimations.run(()=>{isOpen===this.#opts.open.current&&(this.#opts.open.current||set$1(this.#shouldRender,!1),this.#opts.onComplete?.())})})}get shouldRender(){return get$4(this.#shouldRender)}}function noop$1(){}function createId(prefixOrUid,uid){return`bits-${prefixOrUid}`}const dialogAttrs=createBitsAttrs({component:"dialog",parts:["content","trigger","overlay","title","description","close","cancel","action"]}),DialogRootContext=new Context$1("Dialog.Root | AlertD\ -ialog.Root");class DialogRootState{static create(opts){const parent=DialogRootContext.getOr(null);return DialogRootContext.set(new DialogRootState(opts,parent))}opts;#triggerNode=state$1(null);get triggerNode(){return get$4(this.#triggerNode)}set triggerNode(value){set$1(this.#triggerNode,value,!0)}#contentNode=state$1(null);get contentNode(){return get$4(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}#overlayNode=state$1(null);get overlayNode(){return get$4(this.#overlayNode)}set overlayNode(value){ -set$1(this.#overlayNode,value,!0)}#descriptionNode=state$1(null);get descriptionNode(){return get$4(this.#descriptionNode)}set descriptionNode(value){set$1(this.#descriptionNode,value,!0)}#contentId=state$1(void 0);get contentId(){return get$4(this.#contentId)}set contentId(value){set$1(this.#contentId,value,!0)}#titleId=state$1(void 0);get titleId(){return get$4(this.#titleId)}set titleId(value){set$1(this.#titleId,value,!0)}#triggerId=state$1(void 0);get triggerId(){return get$4(this.#triggerId)}set triggerId(value){ -set$1(this.#triggerId,value,!0)}#descriptionId=state$1(void 0);get descriptionId(){return get$4(this.#descriptionId)}set descriptionId(value){set$1(this.#descriptionId,value,!0)}#cancelNode=state$1(null);get cancelNode(){return get$4(this.#cancelNode)}set cancelNode(value){set$1(this.#cancelNode,value,!0)}#nestedOpenCount=state$1(0);get nestedOpenCount(){return get$4(this.#nestedOpenCount)}set nestedOpenCount(value){set$1(this.#nestedOpenCount,value,!0)}depth;parent;contentPresence;overlayPresence;constructor(opts,parent){ -this.opts=opts,this.parent=parent,this.depth=parent?parent.depth+1:0,this.handleOpen=this.handleOpen.bind(this),this.handleClose=this.handleClose.bind(this),this.contentPresence=new PresenceManager({ref:boxWith$1(()=>this.contentNode),open:this.opts.open,enabled:!0,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),this.overlayPresence=new PresenceManager({ref:boxWith$1(()=>this.overlayNode),open:this.opts.open,enabled:!0}),watch$1(()=>this.opts.open.current,isOpen=>{ -this.parent&&(isOpen?this.parent.incrementNested():this.parent.decrementNested())},{lazy:!0}),onDestroyEffect(()=>{this.opts.open.current&&this.parent?.decrementNested()})}handleOpen(){this.opts.open.current||(this.opts.open.current=!0)}handleClose(){this.opts.open.current&&(this.opts.open.current=!1)}getBitsAttr=part=>dialogAttrs.getAttr(part,this.opts.variant.current);incrementNested(){this.nestedOpenCount++,this.parent?.incrementNested()}decrementNested(){this.nestedOpenCount!==0&&(this.nestedOpenCount--, -this.parent?.decrementNested())}#sharedProps=user_derived(()=>({"data-state":getDataOpenClosed(this.opts.open.current)}));get sharedProps(){return get$4(this.#sharedProps)}set sharedProps(value){set$1(this.#sharedProps,value)}}class DialogCloseState{static create(opts){return new DialogCloseState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref),this.onclick=this.onclick.bind(this),this.onkeydown=this. -onkeydown.bind(this)}onclick(e){this.opts.disabled.current||e.button>0||this.root.handleClose()}onkeydown(e){this.opts.disabled.current||(e.key===SPACE||e.key===ENTER)&&(e.preventDefault(),this.root.handleClose())}#props=user_derived(()=>({id:this.opts.id.current,[this.root.getBitsAttr(this.opts.variant.current)]:"",onclick:this.onclick,onkeydown:this.onkeydown,disabled:this.opts.disabled.current?!0:void 0,tabindex:0,...this.root.sharedProps,...this.attachment}));get props(){return get$4(this.#props)}set props(value){ -set$1(this.#props,value)}}class DialogActionState{static create(opts){return new DialogActionState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref)}#props=user_derived(()=>({id:this.opts.id.current,[this.root.getBitsAttr("action")]:"",...this.root.sharedProps,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class DialogTitleState{static create(opts){ -return new DialogTitleState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.root.titleId=this.opts.id.current,this.attachment=attachRef(this.opts.ref),watch$1.pre(()=>this.opts.id.current,id2=>{this.root.titleId=id2})}#props=user_derived(()=>({id:this.opts.id.current,role:"heading","aria-level":this.opts.level.current,[this.root.getBitsAttr("title")]:"",...this.root.sharedProps,...this.attachment}));get props(){return get$4(this.#props)}set props(value){ -set$1(this.#props,value)}}class DialogDescriptionState{static create(opts){return new DialogDescriptionState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.root.descriptionId=this.opts.id.current,this.attachment=attachRef(this.opts.ref,v=>{this.root.descriptionNode=v}),watch$1.pre(()=>this.opts.id.current,id2=>{this.root.descriptionId=id2})}#props=user_derived(()=>({id:this.opts.id.current,[this.root.getBitsAttr("description")]:"",...this. -root.sharedProps,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class DialogContentState{static create(opts){return new DialogContentState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>{this.root.contentNode=v,this.root.contentId=v?.id})}#snippetProps=user_derived(()=>({open:this.root.opts.open.current}));get snippetProps(){return get$4(this.#snippetProps)}set snippetProps(value){ -set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,role:this.root.opts.variant.current==="alert-dialog"?"alertdialog":"dialog","aria-modal":"true","aria-describedby":this.root.descriptionId,"aria-labelledby":this.root.titleId,[this.root.getBitsAttr("content")]:"",style:{pointerEvents:"auto",outline:this.root.opts.variant.current==="alert-dialog"?"none":void 0,"--bits-dialog-depth":this.root.depth,"--bits-dialog-nested-count":this.root.nestedOpenCount,contain:"layou\ -t style paint"},tabindex:this.root.opts.variant.current==="alert-dialog"?-1:void 0,"data-nested-open":boolToEmptyStrOrUndef(this.root.nestedOpenCount>0),"data-nested":boolToEmptyStrOrUndef(this.root.parent!==null),...this.root.sharedProps,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}get shouldRender(){return this.root.contentPresence.shouldRender}}class DialogOverlayState{static create(opts){return new DialogOverlayState(opts,DialogRootContext. -get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>this.root.overlayNode=v)}#snippetProps=user_derived(()=>({open:this.root.opts.open.current}));get snippetProps(){return get$4(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,[this.root.getBitsAttr("overlay")]:"",style:{pointerEvents:"auto","--bits-dialog-depth":this.root.depth,"--bits-dialog-nes\ -ted-count":this.root.nestedOpenCount},"data-nested-open":boolToEmptyStrOrUndef(this.root.nestedOpenCount>0),"data-nested":boolToEmptyStrOrUndef(this.root.parent!==null),...this.root.sharedProps,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}get shouldRender(){return this.root.overlayPresence.shouldRender}}class AlertDialogCancelState{static create(opts){return new AlertDialogCancelState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){ +null;return node2&&!anyActive&&items2[0]===node2?(this.#currentTabStopId.current=node2.id,0):node2?.id===this.#currentTabStopId.current?0:-1}setCurrentTabStopId(id2){this.#currentTabStopId.current=id2}focusCurrentTabStop(){const currentTabStopId=this.#currentTabStopId.current;if(!currentTabStopId)return;const currentTabStop=this.#opts.rootNode.current?.querySelector(`#${currentTabStopId}`);!currentTabStop||!isHTMLElement$1(currentTabStop)||currentTabStop.focus()}}class AnimationsComplete{#opts;#currentFrame=null;#observer=null;#runId=0;constructor(opts){ +this.#opts=opts,onDestroyEffect(()=>this.#cleanup())}#cleanup(){this.#currentFrame!==null&&(window.cancelAnimationFrame(this.#currentFrame),this.#currentFrame=null),this.#observer?.disconnect(),this.#observer=null,this.#runId++}run(fn){this.#cleanup();const node2=this.#opts.ref.current;if(!node2)return;if(typeof node2.getAnimations!="function"){this.#executeCallback(fn);return}const runId=this.#runId,executeIfCurrent=()=>{runId===this.#runId&&this.#executeCallback(fn)},waitForAnimations=()=>{if(runId!== +this.#runId)return;const animations=node2.getAnimations();if(animations.length===0){executeIfCurrent();return}Promise.all(animations.map(animation=>animation.finished)).then(()=>{executeIfCurrent()}).catch(()=>{if(runId!==this.#runId)return;if(node2.getAnimations().some(animation=>animation.pending||animation.playState!=="finished")){waitForAnimations();return}executeIfCurrent()})},requestWaitForAnimations=()=>{this.#currentFrame=window.requestAnimationFrame(()=>{this.#currentFrame=null,waitForAnimations()})}; +if(!this.#opts.afterTick.current){requestWaitForAnimations();return}this.#currentFrame=window.requestAnimationFrame(()=>{this.#currentFrame=null;const startingStyleAttr="data-starting-style";if(!node2.hasAttribute(startingStyleAttr)){requestWaitForAnimations();return}this.#observer=new MutationObserver(()=>{runId===this.#runId&&(node2.hasAttribute(startingStyleAttr)||(this.#observer?.disconnect(),this.#observer=null,requestWaitForAnimations()))}),this.#observer.observe(node2,{attributes:!0,attributeFilter:[ +startingStyleAttr]})})}#executeCallback(fn){const execute=()=>{fn()};this.#opts.afterTick?afterTick(execute):execute()}}class PresenceManager{#opts;#enabled;#afterAnimations;#shouldRender=state$1(!1);#transitionStatus=state$1(void 0);#hasMounted=!1;#transitionFrame=null;constructor(opts){this.#opts=opts,set$1(this.#shouldRender,opts.open.current,!0),this.#enabled=opts.enabled??!0,this.#afterAnimations=new AnimationsComplete({ref:this.#opts.ref,afterTick:this.#opts.open}),onDestroyEffect(()=>this.#clearTransitionFrame()), +watch$1(()=>this.#opts.open.current,isOpen=>{if(!this.#hasMounted){this.#hasMounted=!0;return}if(this.#clearTransitionFrame(),!isOpen&&this.#opts.shouldSkipExitAnimation?.()){set$1(this.#shouldRender,!1),set$1(this.#transitionStatus,void 0),this.#opts.onComplete?.();return}if(isOpen&&set$1(this.#shouldRender,!0),set$1(this.#transitionStatus,isOpen?"starting":"ending",!0),isOpen&&(this.#transitionFrame=window.requestAnimationFrame(()=>{this.#transitionFrame=null,this.#opts.open.current&&set$1(this.#transitionStatus, +void 0)})),!this.#enabled){isOpen||set$1(this.#shouldRender,!1),set$1(this.#transitionStatus,void 0),this.#opts.onComplete?.();return}this.#afterAnimations.run(()=>{isOpen===this.#opts.open.current&&(this.#opts.open.current||set$1(this.#shouldRender,!1),set$1(this.#transitionStatus,void 0),this.#opts.onComplete?.())})})}get shouldRender(){return get$3(this.#shouldRender)}get transitionStatus(){return get$3(this.#transitionStatus)}#clearTransitionFrame(){this.#transitionFrame!==null&&(window.cancelAnimationFrame( +this.#transitionFrame),this.#transitionFrame=null)}}function noop$1(){}function createId(prefixOrUid,uid2){return`bits-${prefixOrUid}`}const dialogAttrs=createBitsAttrs({component:"dialog",parts:["content","trigger","overlay","title","description","close","cancel","action"]}),DialogRootContext=new Context$1("Dialog.Root | AlertDialog.Root");class DialogRootState{static create(opts){const parent=DialogRootContext.getOr(null);return DialogRootContext.set(new DialogRootState(opts,parent))}opts;#triggerNode=state$1( +null);get triggerNode(){return get$3(this.#triggerNode)}set triggerNode(value){set$1(this.#triggerNode,value,!0)}#contentNode=state$1(null);get contentNode(){return get$3(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}#overlayNode=state$1(null);get overlayNode(){return get$3(this.#overlayNode)}set overlayNode(value){set$1(this.#overlayNode,value,!0)}#descriptionNode=state$1(null);get descriptionNode(){return get$3(this.#descriptionNode)}set descriptionNode(value){set$1( +this.#descriptionNode,value,!0)}#contentId=state$1(void 0);get contentId(){return get$3(this.#contentId)}set contentId(value){set$1(this.#contentId,value,!0)}#titleId=state$1(void 0);get titleId(){return get$3(this.#titleId)}set titleId(value){set$1(this.#titleId,value,!0)}#triggerId=state$1(void 0);get triggerId(){return get$3(this.#triggerId)}set triggerId(value){set$1(this.#triggerId,value,!0)}#descriptionId=state$1(void 0);get descriptionId(){return get$3(this.#descriptionId)}set descriptionId(value){ +set$1(this.#descriptionId,value,!0)}#cancelNode=state$1(null);get cancelNode(){return get$3(this.#cancelNode)}set cancelNode(value){set$1(this.#cancelNode,value,!0)}#nestedOpenCount=state$1(0);get nestedOpenCount(){return get$3(this.#nestedOpenCount)}set nestedOpenCount(value){set$1(this.#nestedOpenCount,value,!0)}depth;parent;contentPresence;overlayPresence;constructor(opts,parent){this.opts=opts,this.parent=parent,this.depth=parent?parent.depth+1:0,this.handleOpen=this.handleOpen.bind(this),this. +handleClose=this.handleClose.bind(this),this.contentPresence=new PresenceManager({ref:boxWith$1(()=>this.contentNode),open:this.opts.open,enabled:!0,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),this.overlayPresence=new PresenceManager({ref:boxWith$1(()=>this.overlayNode),open:this.opts.open,enabled:!0}),watch$1(()=>this.opts.open.current,isOpen=>{this.parent&&(isOpen?this.parent.incrementNested():this.parent.decrementNested())},{lazy:!0}),onDestroyEffect(()=>{ +this.opts.open.current&&this.parent?.decrementNested()})}handleOpen(){this.opts.open.current||(this.opts.open.current=!0)}handleClose(){this.opts.open.current&&(this.opts.open.current=!1)}getBitsAttr=part=>dialogAttrs.getAttr(part,this.opts.variant.current);incrementNested(){this.nestedOpenCount++,this.parent?.incrementNested()}decrementNested(){this.nestedOpenCount!==0&&(this.nestedOpenCount--,this.parent?.decrementNested())}#sharedProps=user_derived(()=>({"data-state":getDataOpenClosed(this.opts. +open.current)}));get sharedProps(){return get$3(this.#sharedProps)}set sharedProps(value){set$1(this.#sharedProps,value)}}class DialogCloseState{static create(opts){return new DialogCloseState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref),this.onclick=this.onclick.bind(this),this.onkeydown=this.onkeydown.bind(this)}onclick(e){this.opts.disabled.current||e.button>0||this.root.handleClose()}onkeydown(e){ +this.opts.disabled.current||(e.key===SPACE||e.key===ENTER)&&(e.preventDefault(),this.root.handleClose())}#props=user_derived(()=>({id:this.opts.id.current,[this.root.getBitsAttr(this.opts.variant.current)]:"",onclick:this.onclick,onkeydown:this.onkeydown,disabled:this.opts.disabled.current?!0:void 0,tabindex:0,...this.root.sharedProps,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class DialogActionState{static create(opts){return new DialogActionState( +opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref)}#props=user_derived(()=>({id:this.opts.id.current,[this.root.getBitsAttr("action")]:"",...this.root.sharedProps,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class DialogTitleState{static create(opts){return new DialogTitleState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){ +this.opts=opts,this.root=root2,this.root.titleId=this.opts.id.current,this.attachment=attachRef(this.opts.ref),watch$1.pre(()=>this.opts.id.current,id2=>{this.root.titleId=id2})}#props=user_derived(()=>({id:this.opts.id.current,role:"heading","aria-level":this.opts.level.current,[this.root.getBitsAttr("title")]:"",...this.root.sharedProps,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class DialogDescriptionState{static create(opts){return new DialogDescriptionState( +opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.root.descriptionId=this.opts.id.current,this.attachment=attachRef(this.opts.ref,v=>{this.root.descriptionNode=v}),watch$1.pre(()=>this.opts.id.current,id2=>{this.root.descriptionId=id2})}#props=user_derived(()=>({id:this.opts.id.current,[this.root.getBitsAttr("description")]:"",...this.root.sharedProps,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props, +value)}}class DialogContentState{static create(opts){return new DialogContentState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>{this.root.contentNode=v,this.root.contentId=v?.id})}#snippetProps=user_derived(()=>({open:this.root.opts.open.current}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts. +id.current,role:this.root.opts.variant.current==="alert-dialog"?"alertdialog":"dialog","aria-modal":"true","aria-describedby":this.root.descriptionId,"aria-labelledby":this.root.titleId,[this.root.getBitsAttr("content")]:"",style:{pointerEvents:"auto",outline:this.root.opts.variant.current==="alert-dialog"?"none":void 0,"--bits-dialog-depth":this.root.depth,"--bits-dialog-nested-count":this.root.nestedOpenCount,contain:"layout style"},tabindex:this.root.opts.variant.current==="alert-dialog"?-1:void 0, +"data-nested-open":boolToEmptyStrOrUndef(this.root.nestedOpenCount>0),"data-nested":boolToEmptyStrOrUndef(this.root.parent!==null),...getDataTransitionAttrs(this.root.contentPresence.transitionStatus),...this.root.sharedProps,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}get shouldRender(){return this.root.contentPresence.shouldRender}}class DialogOverlayState{static create(opts){return new DialogOverlayState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){ +this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>this.root.overlayNode=v)}#snippetProps=user_derived(()=>({open:this.root.opts.open.current}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,[this.root.getBitsAttr("overlay")]:"",style:{pointerEvents:"auto","--bits-dialog-depth":this.root.depth,"--bits-dialog-nested-count":this.root.nestedOpenCount},"data-nested-o\ +pen":boolToEmptyStrOrUndef(this.root.nestedOpenCount>0),"data-nested":boolToEmptyStrOrUndef(this.root.parent!==null),...getDataTransitionAttrs(this.root.overlayPresence.transitionStatus),...this.root.sharedProps,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}get shouldRender(){return this.root.overlayPresence.shouldRender}}class AlertDialogCancelState{static create(opts){return new AlertDialogCancelState(opts,DialogRootContext.get())}opts;root;attachment;constructor(opts,root2){ this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>this.root.cancelNode=v),this.onclick=this.onclick.bind(this),this.onkeydown=this.onkeydown.bind(this)}onclick(e){this.opts.disabled.current||e.button>0||this.root.handleClose()}onkeydown(e){this.opts.disabled.current||(e.key===SPACE||e.key===ENTER)&&(e.preventDefault(),this.root.handleClose())}#props=user_derived(()=>({id:this.opts.id.current,[this.root.getBitsAttr("cancel")]:"",onclick:this.onclick,onkeydown:this.onkeydown, -tabindex:0,...this.root.sharedProps,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}function Alert_dialog($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1);DialogRootState.create({variant:boxWith$1(()=>"alert-dialog"),open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),onOpenChangeComplete:boxWith$1( -()=>onOpenChangeComplete())});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}var root_2$1u=from_html("<div><!></div>");function Dialog_title$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),level=prop($$props,"level",3,2),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","child","children","level"]);const titleState=DialogTitleState. -create({id:boxWith$1(()=>id2()),level:boxWith$1(()=>level()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,titleState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1u();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child( -div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_2$1t=from_html("<button><!></button>");function Alert_dialog_action$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child", -"id","ref"]);const actionState=DialogActionState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,actionState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1t();attribute_effect(button,()=>({ -...get$4(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_2$1s=from_html("<button><!></button>");function Alert_dialog_cancel$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),disabled=prop($$props,"disabl\ -ed",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","children","child","disabled"]);const cancelState=AlertDialogCancelState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),disabled:boxWith$1(()=>!!disabled())}),mergedProps=user_derived(()=>mergeProps(restProps,cancelState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props. -child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1s();attribute_effect(button,()=>({...get$4(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}function Portal_consumer($$anchor,$$props){var fragment=comment$2(),node2=first_child(fragment);key$1( -node2,()=>$$props.children,$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3),append($$anchor2,fragment_1)}),append($$anchor,fragment)}const BitsConfigContext=new Context$1("BitsConfig");function getBitsConfig(){const fallback2=new BitsConfigState(null,{});return BitsConfigContext.getOr(fallback2).opts}class BitsConfigState{opts;constructor(parent,opts){const resolveConfigOption=createConfigResolver(parent,opts);this.opts={defaultPortalTo:resolveConfigOption( -config2=>config2.defaultPortalTo),defaultLocale:resolveConfigOption(config2=>config2.defaultLocale)}}}function createConfigResolver(parent,currentOpts){return getter=>boxWith$1(()=>{const value=getter(currentOpts)?.current;if(value!==void 0)return value;if(parent!==null)return getter(parent.opts)?.current})}function createPropResolver(configOption,fallback2){return getProp=>{const config2=getBitsConfig();return boxWith$1(()=>{const propValue=getProp();if(propValue!==void 0)return propValue;const option2=configOption( -config2).current;return option2!==void 0?option2:fallback2})}}const resolvePortalToProp=createPropResolver(config2=>config2.defaultPortalTo,"body");function Portal$2($$anchor,$$props){push$1($$props,!0);const to=resolvePortalToProp(()=>$$props.to),context=getAllContexts();let target2=user_derived(getTarget);function getTarget(){if(!isBrowser$2||$$props.disabled)return null;let localTarget=null;return typeof to.current=="string"?localTarget=document.querySelector(to.current):localTarget=to.current, -localTarget}let instance;function unmountInstance(){instance&&(unmount(instance),instance=null)}watch$1([()=>get$4(target2),()=>$$props.disabled],([target3,disabled])=>{if(!target3||disabled){unmountInstance();return}return instance=mount(Portal_consumer,{target:target3,props:{children:$$props.children},context}),()=>{unmountInstance()}});var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props. -children??noop$3),append($$anchor2,fragment_1)};if_block(node2,$$render=>{$$props.disabled&&$$render(consequent)})}append($$anchor,fragment),pop()}class CustomEventDispatcher{eventName;options;constructor(eventName,options={bubbles:!0,cancelable:!0}){this.eventName=eventName,this.options=options}createEvent(detail){return new CustomEvent(this.eventName,{...this.options,detail})}dispatch(element2,detail){const event2=this.createEvent(detail);return element2.dispatchEvent(event2),event2}listen(element2,callback,options){ -const handler=event2=>{callback(event2)};return on(element2,this.eventName,handler,options)}}function debounce$1(fn,wait=500){let timeout=null;const debounced=(...args)=>{timeout!==null&&clearTimeout(timeout),timeout=setTimeout(()=>{fn(...args)},wait)};return debounced.destroy=()=>{timeout!==null&&(clearTimeout(timeout),timeout=null)},debounced}function isOrContainsTarget(node2,target2){return node2===target2||node2.contains(target2)}function getOwnerDocument(el){return el?.ownerDocument??document} -function isClickTrulyOutside(event2,contentNode){const{clientX,clientY}=event2,rect=contentNode.getBoundingClientRect();return clientX<rect.left||clientX>rect.right||clientY<rect.top||clientY>rect.bottom}const SELECTION_KEYS=[ENTER,SPACE],FIRST_KEYS$1=[ARROW_DOWN,PAGE_UP,HOME],LAST_KEYS$1=[ARROW_UP,PAGE_DOWN,END],FIRST_LAST_KEYS$1=[...FIRST_KEYS$1,...LAST_KEYS$1],SUB_OPEN_KEYS={ltr:[...SELECTION_KEYS,ARROW_RIGHT],rtl:[...SELECTION_KEYS,ARROW_LEFT]},SUB_CLOSE_KEYS={ltr:[ARROW_LEFT],rtl:[ARROW_RIGHT]}; -function isMouseEvent(event2){return event2.pointerType==="mouse"}function focus(element2,{select=!1}={}){if(!element2||!element2.focus)return;const doc=getDocument$1(element2);if(doc.activeElement===element2)return;const previouslyFocusedElement=doc.activeElement;element2.focus({preventScroll:!0}),element2!==previouslyFocusedElement&&isSelectableInput(element2)&&select&&element2.select()}function focusFirst(candidates,{select=!1}={},getActiveElement2){const previouslyFocusedElement=getActiveElement2(); -for(const candidate of candidates)if(focus(candidate,{select}),getActiveElement2()!==previouslyFocusedElement)return!0}let isUsingKeyboard=state$1(!1);class IsUsingKeyboard{static _refs=0;static _cleanup;constructor(){user_effect(()=>(IsUsingKeyboard._refs===0&&(IsUsingKeyboard._cleanup=effect_root(()=>{const callbacksToDispose=[],handlePointer=_=>{set$1(isUsingKeyboard,!1)},handleKeydown=_=>{set$1(isUsingKeyboard,!0)};return callbacksToDispose.push(on(document,"pointerdown",handlePointer,{capture:!0}), -on(document,"pointermove",handlePointer,{capture:!0}),on(document,"keydown",handleKeydown,{capture:!0})),executeCallbacks(...callbacksToDispose)})),IsUsingKeyboard._refs++,()=>{IsUsingKeyboard._refs--,IsUsingKeyboard._refs===0&&(set$1(isUsingKeyboard,!1),IsUsingKeyboard._cleanup?.())}))}get current(){return get$4(isUsingKeyboard)}set current(value){set$1(isUsingKeyboard,value,!0)}}var candidateSelectors=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","b\ -utton:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],candidateSelector=candidateSelectors.join(","),NoElement=typeof Element>"u",matches=NoElement?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,getRootNode=!NoElement&&Element.prototype. -getRootNode?function(element2){var _element$getRootNode;return element2==null||(_element$getRootNode=element2.getRootNode)===null||_element$getRootNode===void 0?void 0:_element$getRootNode.call(element2)}:function(element2){return element2?.ownerDocument},isInert=function isInert2(node2,lookUp){var _node$getAttribute;lookUp===void 0&&(lookUp=!0);var inertAtt=node2==null||(_node$getAttribute=node2.getAttribute)===null||_node$getAttribute===void 0?void 0:_node$getAttribute.call(node2,"inert"),inert=inertAtt=== -""||inertAtt==="true",result=inert||lookUp&&node2&&isInert2(node2.parentNode);return result},isContentEditable=function(node2){var _node$getAttribute2,attValue=node2==null||(_node$getAttribute2=node2.getAttribute)===null||_node$getAttribute2===void 0?void 0:_node$getAttribute2.call(node2,"contenteditable");return attValue===""||attValue==="true"},getCandidates=function(el,includeContainer,filter){if(isInert(el))return[];var candidates=Array.prototype.slice.apply(el.querySelectorAll(candidateSelector)); -return includeContainer&&matches.call(el,candidateSelector)&&candidates.unshift(el),candidates=candidates.filter(filter),candidates},getCandidatesIteratively=function getCandidatesIteratively2(elements,includeContainer,options){for(var candidates=[],elementsToCheck=Array.from(elements);elementsToCheck.length;){var element2=elementsToCheck.shift();if(!isInert(element2,!1))if(element2.tagName==="SLOT"){var assigned=element2.assignedElements(),content2=assigned.length?assigned:element2.children,nestedCandidates=getCandidatesIteratively2( -content2,!0,options);options.flatten?candidates.push.apply(candidates,nestedCandidates):candidates.push({scopeParent:element2,candidates:nestedCandidates})}else{var validCandidate=matches.call(element2,candidateSelector);validCandidate&&options.filter(element2)&&(includeContainer||!elements.includes(element2))&&candidates.push(element2);var shadowRoot=element2.shadowRoot||typeof options.getShadowRoot=="function"&&options.getShadowRoot(element2),validShadowRoot=!isInert(shadowRoot,!1)&&(!options. -shadowRootFilter||options.shadowRootFilter(element2));if(shadowRoot&&validShadowRoot){var _nestedCandidates=getCandidatesIteratively2(shadowRoot===!0?element2.children:shadowRoot.children,!0,options);options.flatten?candidates.push.apply(candidates,_nestedCandidates):candidates.push({scopeParent:element2,candidates:_nestedCandidates})}else elementsToCheck.unshift.apply(elementsToCheck,element2.children)}}return candidates},hasTabIndex=function(node2){return!isNaN(parseInt(node2.getAttribute("tab\ -index"),10))},getTabIndex=function(node2){if(!node2)throw new Error("No node provided");return node2.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(node2.tagName)||isContentEditable(node2))&&!hasTabIndex(node2)?0:node2.tabIndex},getSortOrderTabIndex=function(node2,isScope){var tabIndex=getTabIndex(node2);return tabIndex<0&&isScope&&!hasTabIndex(node2)?0:tabIndex},sortOrderedTabbables=function(a,b){return a.tabIndex===b.tabIndex?a.documentOrder-b.documentOrder:a.tabIndex-b.tabIndex},isInput=function(node2){ -return node2.tagName==="INPUT"},isHiddenInput=function(node2){return isInput(node2)&&node2.type==="hidden"},isDetailsWithSummary=function(node2){var r2=node2.tagName==="DETAILS"&&Array.prototype.slice.apply(node2.children).some(function(child2){return child2.tagName==="SUMMARY"});return r2},getCheckedRadio=function(nodes2,form){for(var i=0;i<nodes2.length;i++)if(nodes2[i].checked&&nodes2[i].form===form)return nodes2[i]},isTabbableRadio=function(node2){if(!node2.name)return!0;var radioScope=node2. -form||getRootNode(node2),queryRadios=function(name){return radioScope.querySelectorAll('input[type="radio"][name="'+name+'"]')},radioSet;if(typeof window<"u"&&typeof window.CSS<"u"&&typeof window.CSS.escape=="function")radioSet=queryRadios(window.CSS.escape(node2.name));else try{radioSet=queryRadios(node2.name)}catch(err){return console.error("Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s",err.message),!1} -var checked=getCheckedRadio(radioSet,node2.form);return!checked||checked===node2},isRadio=function(node2){return isInput(node2)&&node2.type==="radio"},isNonTabbableRadio=function(node2){return isRadio(node2)&&!isTabbableRadio(node2)},isNodeAttached=function(node2){var _nodeRoot,nodeRoot=node2&&getRootNode(node2),nodeRootHost=(_nodeRoot=nodeRoot)===null||_nodeRoot===void 0?void 0:_nodeRoot.host,attached=!1;if(nodeRoot&&nodeRoot!==node2){var _nodeRootHost,_nodeRootHost$ownerDo,_node$ownerDocument; -for(attached=!!((_nodeRootHost=nodeRootHost)!==null&&_nodeRootHost!==void 0&&(_nodeRootHost$ownerDo=_nodeRootHost.ownerDocument)!==null&&_nodeRootHost$ownerDo!==void 0&&_nodeRootHost$ownerDo.contains(nodeRootHost)||node2!=null&&(_node$ownerDocument=node2.ownerDocument)!==null&&_node$ownerDocument!==void 0&&_node$ownerDocument.contains(node2));!attached&&nodeRootHost;){var _nodeRoot2,_nodeRootHost2,_nodeRootHost2$ownerD;nodeRoot=getRootNode(nodeRootHost),nodeRootHost=(_nodeRoot2=nodeRoot)===null|| -_nodeRoot2===void 0?void 0:_nodeRoot2.host,attached=!!((_nodeRootHost2=nodeRootHost)!==null&&_nodeRootHost2!==void 0&&(_nodeRootHost2$ownerD=_nodeRootHost2.ownerDocument)!==null&&_nodeRootHost2$ownerD!==void 0&&_nodeRootHost2$ownerD.contains(nodeRootHost))}}return attached},isZeroArea=function(node2){var _node$getBoundingClie=node2.getBoundingClientRect(),width=_node$getBoundingClie.width,height=_node$getBoundingClie.height;return width===0&&height===0},isHidden=function(node2,_ref){var displayCheck=_ref. -displayCheck,getShadowRoot=_ref.getShadowRoot;if(getComputedStyle(node2).visibility==="hidden")return!0;var isDirectSummary=matches.call(node2,"details>summary:first-of-type"),nodeUnderDetails=isDirectSummary?node2.parentElement:node2;if(matches.call(nodeUnderDetails,"details:not([open]) *"))return!0;if(!displayCheck||displayCheck==="full"||displayCheck==="legacy-full"){if(typeof getShadowRoot=="function"){for(var originalNode=node2;node2;){var parentElement=node2.parentElement,rootNode=getRootNode( -node2);if(parentElement&&!parentElement.shadowRoot&&getShadowRoot(parentElement)===!0)return isZeroArea(node2);node2.assignedSlot?node2=node2.assignedSlot:!parentElement&&rootNode!==node2.ownerDocument?node2=rootNode.host:node2=parentElement}node2=originalNode}if(isNodeAttached(node2))return!node2.getClientRects().length;if(displayCheck!=="legacy-full")return!0}else if(displayCheck==="non-zero-area")return isZeroArea(node2);return!1},isDisabledFromFieldset=function(node2){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/. -test(node2.tagName))for(var parentNode=node2.parentElement;parentNode;){if(parentNode.tagName==="FIELDSET"&&parentNode.disabled){for(var i=0;i<parentNode.children.length;i++){var child2=parentNode.children.item(i);if(child2.tagName==="LEGEND")return matches.call(parentNode,"fieldset[disabled] *")?!0:!child2.contains(node2)}return!0}parentNode=parentNode.parentElement}return!1},isNodeMatchingSelectorFocusable=function(options,node2){return!(node2.disabled||isInert(node2)||isHiddenInput(node2)||isHidden( -node2,options)||isDetailsWithSummary(node2)||isDisabledFromFieldset(node2))},isNodeMatchingSelectorTabbable=function(options,node2){return!(isNonTabbableRadio(node2)||getTabIndex(node2)<0||!isNodeMatchingSelectorFocusable(options,node2))},isValidShadowRootTabbable=function(shadowHostNode){var tabIndex=parseInt(shadowHostNode.getAttribute("tabindex"),10);return!!(isNaN(tabIndex)||tabIndex>=0)},sortByOrder=function sortByOrder2(candidates){var regularTabbables=[],orderedTabbables=[];return candidates. -forEach(function(item,i){var isScope=!!item.scopeParent,element2=isScope?item.scopeParent:item,candidateTabindex=getSortOrderTabIndex(element2,isScope),elements=isScope?sortByOrder2(item.candidates):element2;candidateTabindex===0?isScope?regularTabbables.push.apply(regularTabbables,elements):regularTabbables.push(element2):orderedTabbables.push({documentOrder:i,tabIndex:candidateTabindex,item,isScope,content:elements})}),orderedTabbables.sort(sortOrderedTabbables).reduce(function(acc,sortable){return sortable. -isScope?acc.push.apply(acc,sortable.content):acc.push(sortable.content),acc},[]).concat(regularTabbables)},tabbable=function(container2,options){options=options||{};var candidates;return options.getShadowRoot?candidates=getCandidatesIteratively([container2],options.includeContainer,{filter:isNodeMatchingSelectorTabbable.bind(null,options),flatten:!1,getShadowRoot:options.getShadowRoot,shadowRootFilter:isValidShadowRootTabbable}):candidates=getCandidates(container2,options.includeContainer,isNodeMatchingSelectorTabbable. -bind(null,options)),sortByOrder(candidates)},focusable=function(container2,options){options=options||{};var candidates;return options.getShadowRoot?candidates=getCandidatesIteratively([container2],options.includeContainer,{filter:isNodeMatchingSelectorFocusable.bind(null,options),flatten:!0,getShadowRoot:options.getShadowRoot}):candidates=getCandidates(container2,options.includeContainer,isNodeMatchingSelectorFocusable.bind(null,options)),candidates},isTabbable=function(node2,options){if(options= -options||{},!node2)throw new Error("No node provided");return matches.call(node2,candidateSelector)===!1?!1:isNodeMatchingSelectorTabbable(options,node2)},focusableCandidateSelector=candidateSelectors.concat("iframe").join(","),isFocusable=function(node2,options){if(options=options||{},!node2)throw new Error("No node provided");return matches.call(node2,focusableCandidateSelector)===!1?!1:isNodeMatchingSelectorFocusable(options,node2)};function getTabbableOptions(){return{getShadowRoot:!0,displayCheck:typeof ResizeObserver== -"function"&&ResizeObserver.toString().includes("[native code]")?"full":"none"}}function getTabbableFrom(currentNode,direction){if(!isTabbable(currentNode,getTabbableOptions()))return getTabbableFromFocusable(currentNode,direction);const doc=getDocument$1(currentNode),allTabbable=tabbable(doc.body,getTabbableOptions());direction==="prev"&&allTabbable.reverse();const activeIndex=allTabbable.indexOf(currentNode);return activeIndex===-1?doc.body:allTabbable.slice(activeIndex+1)[0]}function getTabbableFromFocusable(currentNode,direction){ -const doc=getDocument$1(currentNode);if(!isFocusable(currentNode,getTabbableOptions()))return doc.body;const allFocusable=focusable(doc.body,getTabbableOptions());direction==="prev"&&allFocusable.reverse();const activeIndex=allFocusable.indexOf(currentNode);return activeIndex===-1?doc.body:allFocusable.slice(activeIndex+1).find(node2=>isTabbable(node2,getTabbableOptions()))??doc.body}function next(array2,index2,loop2=!0){if(!(array2.length===0||index2<0||index2>=array2.length))return array2.length=== -1&&index2===0?array2[0]:index2===array2.length-1?loop2?array2[0]:void 0:array2[index2+1]}function prev(array2,index2,loop2=!0){if(!(array2.length===0||index2<0||index2>=array2.length))return array2.length===1&&index2===0?array2[0]:index2===0?loop2?array2[array2.length-1]:void 0:array2[index2-1]}function forward(array2,index2,increment2,loop2=!0){if(array2.length===0||index2<0||index2>=array2.length)return;let targetIndex=index2+increment2;return loop2?targetIndex=(targetIndex%array2.length+array2. -length)%array2.length:targetIndex=Math.max(0,Math.min(targetIndex,array2.length-1)),array2[targetIndex]}function backward(array2,index2,decrement,loop2=!0){if(array2.length===0||index2<0||index2>=array2.length)return;let targetIndex=index2-decrement;return loop2?targetIndex=(targetIndex%array2.length+array2.length)%array2.length:targetIndex=Math.max(0,Math.min(targetIndex,array2.length-1)),array2[targetIndex]}function getNextMatch(values,search2,currentMatch){const lowerSearch=search2.toLowerCase(); -if(lowerSearch.endsWith(" ")){const searchWithoutSpace=lowerSearch.slice(0,-1);if(values.filter(value=>value.toLowerCase().startsWith(searchWithoutSpace)).length<=1)return getNextMatch(values,searchWithoutSpace,currentMatch);const currentMatchLowercase=currentMatch?.toLowerCase();if(currentMatchLowercase&¤tMatchLowercase.startsWith(searchWithoutSpace)&¤tMatchLowercase.charAt(searchWithoutSpace.length)===" "&&search2.trim()===searchWithoutSpace)return currentMatch;const spacedMatches=values. -filter(value=>value.toLowerCase().startsWith(lowerSearch));if(spacedMatches.length>0){const currentMatchIndex2=currentMatch?values.indexOf(currentMatch):-1;return wrapArray(spacedMatches,Math.max(currentMatchIndex2,0)).find(match=>match!==currentMatch)||currentMatch}}const normalizedSearch=search2.length>1&&Array.from(search2).every(char=>char===search2[0])?search2[0]:search2,normalizedLowerSearch=normalizedSearch.toLowerCase(),currentMatchIndex=currentMatch?values.indexOf(currentMatch):-1;let wrappedValues=wrapArray( -values,Math.max(currentMatchIndex,0));normalizedSearch.length===1&&(wrappedValues=wrappedValues.filter(v=>v!==currentMatch));const nextMatch=wrappedValues.find(value=>value?.toLowerCase().startsWith(normalizedLowerSearch));return nextMatch!==currentMatch?nextMatch:void 0}function wrapArray(array2,startIndex){return array2.map((_,index2)=>array2[(startIndex+index2)%array2.length])}const defaultOptions={afterMs:1e4,onChange:noop$1};function boxAutoReset(defaultValue,options){const{afterMs,onChange, -getWindow:getWindow2}={...defaultOptions,...options};let timeout=null,value=state$1(proxy(defaultValue));function resetAfter(){return getWindow2().setTimeout(()=>{set$1(value,defaultValue,!0),onChange?.(defaultValue)},afterMs)}return user_effect(()=>()=>{timeout&&getWindow2().clearTimeout(timeout)}),boxWith$1(()=>get$4(value),v=>{set$1(value,v,!0),onChange?.(v),timeout&&getWindow2().clearTimeout(timeout),timeout=resetAfter()})}class DOMTypeahead{#opts;#search;#onMatch=user_derived(()=>this.#opts. -onMatch?this.#opts.onMatch:node2=>node2.focus());#getCurrentItem=user_derived(()=>this.#opts.getCurrentItem?this.#opts.getCurrentItem:this.#opts.getActiveElement);constructor(opts){this.#opts=opts,this.#search=boxAutoReset("",{afterMs:1e3,getWindow:opts.getWindow}),this.handleTypeaheadSearch=this.handleTypeaheadSearch.bind(this),this.resetTypeahead=this.resetTypeahead.bind(this)}handleTypeaheadSearch(key2,candidates){if(!candidates.length)return;this.#search.current=this.#search.current+key2;const currentItem=get$4( -this.#getCurrentItem)(),currentMatch=candidates.find(item=>item===currentItem)?.textContent?.trim()??"",values=candidates.map(item=>item.textContent?.trim()??""),nextMatch=getNextMatch(values,this.#search.current,currentMatch),newItem=candidates.find(item=>item.textContent?.trim()===nextMatch);return newItem&&get$4(this.#onMatch)(newItem),newItem}resetTypeahead(){this.#search.current=""}get search(){return this.#search.current}}class GraceArea{#opts;#enabled;#isPointerInTransit;#pointerGraceArea=state$1( -null);constructor(opts){this.#opts=opts,this.#enabled=user_derived(()=>this.#opts.enabled()),this.#isPointerInTransit=boxAutoReset(!1,{afterMs:opts.transitTimeout??300,onChange:value=>{get$4(this.#enabled)&&this.#opts.setIsPointerInTransit?.(value)},getWindow:()=>getWindow$1(this.#opts.triggerNode())}),watch$1([opts.triggerNode,opts.contentNode,opts.enabled],([triggerNode,contentNode,enabled])=>{if(!triggerNode||!contentNode||!enabled)return;const handleTriggerLeave=e=>{this.#createGraceArea(e,contentNode)}, -handleContentLeave=e=>{this.#createGraceArea(e,triggerNode)};return executeCallbacks(on(triggerNode,"pointerleave",handleTriggerLeave),on(contentNode,"pointerleave",handleContentLeave))}),watch$1(()=>get$4(this.#pointerGraceArea),()=>{const handleTrackPointerGrace=e=>{if(!get$4(this.#pointerGraceArea))return;const target2=e.target;if(!isElement$1(target2))return;const pointerPosition={x:e.clientX,y:e.clientY},hasEnteredTarget=opts.triggerNode()?.contains(target2)||opts.contentNode()?.contains(target2), -isPointerOutsideGraceArea=!isPointInPolygon$1(pointerPosition,get$4(this.#pointerGraceArea));hasEnteredTarget?this.#removeGraceArea():isPointerOutsideGraceArea&&(this.#removeGraceArea(),opts.onPointerExit())},doc=getDocument$1(opts.triggerNode()??opts.contentNode());if(doc)return on(doc,"pointermove",handleTrackPointerGrace)})}#removeGraceArea(){set$1(this.#pointerGraceArea,null),this.#isPointerInTransit.current=!1}#createGraceArea(e,hoverTarget){const currentTarget=e.currentTarget;if(!isHTMLElement$1( -currentTarget))return;const exitPoint={x:e.clientX,y:e.clientY},exitSide=getExitSideFromRect(exitPoint,currentTarget.getBoundingClientRect()),paddedExitPoints=getPaddedExitPoints(exitPoint,exitSide),hoverTargetPoints=getPointsFromRect(hoverTarget.getBoundingClientRect()),graceArea=getHull([...paddedExitPoints,...hoverTargetPoints]);set$1(this.#pointerGraceArea,graceArea,!0),this.#isPointerInTransit.current=!0}}function getExitSideFromRect(point2,rect){const top=Math.abs(rect.top-point2.y),bottom=Math. -abs(rect.bottom-point2.y),right=Math.abs(rect.right-point2.x),left=Math.abs(rect.left-point2.x);switch(Math.min(top,bottom,right,left)){case left:return"left";case right:return"right";case top:return"top";case bottom:return"bottom";default:throw new Error("unreachable")}}function getPaddedExitPoints(exitPoint,exitSide,padding=5){const tipPadding=padding*1.5;switch(exitSide){case"top":return[{x:exitPoint.x-padding,y:exitPoint.y+padding},{x:exitPoint.x,y:exitPoint.y-tipPadding},{x:exitPoint.x+padding, -y:exitPoint.y+padding}];case"bottom":return[{x:exitPoint.x-padding,y:exitPoint.y-padding},{x:exitPoint.x,y:exitPoint.y+tipPadding},{x:exitPoint.x+padding,y:exitPoint.y-padding}];case"left":return[{x:exitPoint.x+padding,y:exitPoint.y-padding},{x:exitPoint.x-tipPadding,y:exitPoint.y},{x:exitPoint.x+padding,y:exitPoint.y+padding}];case"right":return[{x:exitPoint.x-padding,y:exitPoint.y-padding},{x:exitPoint.x+tipPadding,y:exitPoint.y},{x:exitPoint.x-padding,y:exitPoint.y+padding}]}}function getPointsFromRect(rect){ -const{top,right,bottom,left}=rect;return[{x:left,y:top},{x:right,y:top},{x:right,y:bottom},{x:left,y:bottom}]}function isPointInPolygon$1(point2,polygon){const{x,y}=point2;let inside=!1;for(let i=0,j=polygon.length-1;i<polygon.length;j=i++){const xi=polygon[i].x,yi=polygon[i].y,xj=polygon[j].x,yj=polygon[j].y;yi>y!=yj>y&&x<(xj-xi)*(y-yi)/(yj-yi)+xi&&(inside=!inside)}return inside}function getHull(points){const newPoints=points.slice();return newPoints.sort((a,b)=>a.x<b.x?-1:a.x>b.x?1:a.y<b.y?-1: -a.y>b.y?1:0),getHullPresorted(newPoints)}function getHullPresorted(points){if(points.length<=1)return points.slice();const upperHull=[];for(let i=0;i<points.length;i++){const p2=points[i];for(;upperHull.length>=2;){const q2=upperHull[upperHull.length-1],r2=upperHull[upperHull.length-2];if((q2.x-r2.x)*(p2.y-r2.y)>=(q2.y-r2.y)*(p2.x-r2.x))upperHull.pop();else break}upperHull.push(p2)}upperHull.pop();const lowerHull=[];for(let i=points.length-1;i>=0;i--){const p2=points[i];for(;lowerHull.length>=2;){ -const q2=lowerHull[lowerHull.length-1],r2=lowerHull[lowerHull.length-2];if((q2.x-r2.x)*(p2.y-r2.y)>=(q2.y-r2.y)*(p2.x-r2.x))lowerHull.pop();else break}lowerHull.push(p2)}return lowerHull.pop(),upperHull.length===1&&lowerHull.length===1&&upperHull[0].x===lowerHull[0].x&&upperHull[0].y===lowerHull[0].y?upperHull:upperHull.concat(lowerHull)}const CONTEXT_MENU_TRIGGER_ATTR="data-context-menu-trigger",CONTEXT_MENU_CONTENT_ATTR="data-context-menu-content",MenuRootContext=new Context$1("Menu.Root"),MenuMenuContext=new Context$1( -"Menu.Root | Menu.Sub"),MenuContentContext=new Context$1("Menu.Content"),MenuOpenEvent=new CustomEventDispatcher("bitsmenuopen",{bubbles:!1,cancelable:!0}),menuAttrs=createBitsAttrs({component:"menu",parts:["trigger","content","sub-trigger","item","group","group-heading","checkbox-group","checkbox-item","radio-group","radio-item","separator","sub-content","arrow"]});class MenuRootState{static create(opts){const root2=new MenuRootState(opts);return MenuRootContext.set(root2)}opts;isUsingKeyboard=new IsUsingKeyboard;#ignoreCloseAutoFocus=state$1( -!1);get ignoreCloseAutoFocus(){return get$4(this.#ignoreCloseAutoFocus)}set ignoreCloseAutoFocus(value){set$1(this.#ignoreCloseAutoFocus,value,!0)}#isPointerInTransit=state$1(!1);get isPointerInTransit(){return get$4(this.#isPointerInTransit)}set isPointerInTransit(value){set$1(this.#isPointerInTransit,value,!0)}constructor(opts){this.opts=opts}getBitsAttr=part=>menuAttrs.getAttr(part,this.opts.variant.current)}class MenuMenuState{static create(opts,root2){return MenuMenuContext.set(new MenuMenuState( -opts,root2,null))}opts;root;parentMenu;contentId=boxWith$1(()=>"");#contentNode=state$1(null);get contentNode(){return get$4(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}contentPresence;#triggerNode=state$1(null);get triggerNode(){return get$4(this.#triggerNode)}set triggerNode(value){set$1(this.#triggerNode,value,!0)}constructor(opts,root2,parentMenu){this.opts=opts,this.root=root2,this.parentMenu=parentMenu,this.contentPresence=new PresenceManager({ref:boxWith$1( -()=>this.contentNode),open:this.opts.open,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),parentMenu&&watch$1(()=>parentMenu.opts.open.current,()=>{parentMenu.opts.open.current||(this.opts.open.current=!1)})}toggleOpen(){this.opts.open.current=!this.opts.open.current}onOpen(){this.opts.open.current=!0}onClose(){this.opts.open.current=!1}}class MenuContentState{static create(opts){return MenuContentContext.set(new MenuContentState(opts,MenuMenuContext.get()))}opts;parentMenu;rovingFocusGroup;domContext;attachment;#search=state$1( -"");get search(){return get$4(this.#search)}set search(value){set$1(this.#search,value,!0)}#timer=0;#handleTypeaheadSearch;#mounted=state$1(!1);get mounted(){return get$4(this.#mounted)}set mounted(value){set$1(this.#mounted,value,!0)}#isSub;constructor(opts,parentMenu){this.opts=opts,this.parentMenu=parentMenu,this.domContext=new DOMContext(opts.ref),this.attachment=attachRef(this.opts.ref,v=>{this.parentMenu.contentNode!==v&&(this.parentMenu.contentNode=v)}),parentMenu.contentId=opts.id,this.#isSub= -opts.isSub??!1,this.onkeydown=this.onkeydown.bind(this),this.onblur=this.onblur.bind(this),this.onfocus=this.onfocus.bind(this),this.handleInteractOutside=this.handleInteractOutside.bind(this),new GraceArea({contentNode:()=>this.parentMenu.contentNode,triggerNode:()=>this.parentMenu.triggerNode,enabled:()=>this.parentMenu.opts.open.current&&!!this.parentMenu.triggerNode?.hasAttribute(this.parentMenu.root.getBitsAttr("sub-trigger")),onPointerExit:()=>{this.parentMenu.opts.open.current=!1},setIsPointerInTransit:value=>{ -this.parentMenu.root.isPointerInTransit=value}}),this.#handleTypeaheadSearch=new DOMTypeahead({getActiveElement:()=>this.domContext.getActiveElement(),getWindow:()=>this.domContext.getWindow()}).handleTypeaheadSearch,this.rovingFocusGroup=new RovingFocusGroup({rootNode:boxWith$1(()=>this.parentMenu.contentNode),candidateAttr:this.parentMenu.root.getBitsAttr("item"),loop:this.opts.loop,orientation:boxWith$1(()=>"vertical")}),watch$1(()=>this.parentMenu.contentNode,contentNode=>{if(!contentNode)return; -const handler=()=>{afterTick(()=>{this.parentMenu.root.isUsingKeyboard.current&&this.rovingFocusGroup.focusFirstCandidate()})};return MenuOpenEvent.listen(contentNode,handler)}),user_effect(()=>{this.parentMenu.opts.open.current||this.domContext.getWindow().clearTimeout(this.#timer)})}#getCandidateNodes(){const node2=this.parentMenu.contentNode;return node2?Array.from(node2.querySelectorAll(`[${this.parentMenu.root.getBitsAttr("item")}]:not([data-disabled])`)):[]}#isPointerMovingToSubmenu(){return this. -parentMenu.root.isPointerInTransit}onCloseAutoFocus=e=>{this.opts.onCloseAutoFocus.current?.(e),!(e.defaultPrevented||this.#isSub)&&this.parentMenu.triggerNode&&isTabbable(this.parentMenu.triggerNode)&&(e.preventDefault(),this.parentMenu.triggerNode.focus())};handleTabKeyDown(e){let rootMenu=this.parentMenu;for(;rootMenu.parentMenu!==null;)rootMenu=rootMenu.parentMenu;if(!rootMenu.triggerNode)return;e.preventDefault();const nodeToFocus=getTabbableFrom(rootMenu.triggerNode,e.shiftKey?"prev":"next"); -nodeToFocus?(this.parentMenu.root.ignoreCloseAutoFocus=!0,rootMenu.onClose(),afterTick(()=>{nodeToFocus.focus(),afterTick(()=>{this.parentMenu.root.ignoreCloseAutoFocus=!1})})):this.domContext.getDocument().body.focus()}onkeydown(e){if(e.defaultPrevented)return;if(e.key===TAB){this.handleTabKeyDown(e);return}const target2=e.target,currentTarget=e.currentTarget;if(!isHTMLElement$1(target2)||!isHTMLElement$1(currentTarget))return;const isKeydownInside=target2.closest(`[${this.parentMenu.root.getBitsAttr( -"content")}]`)?.id===this.parentMenu.contentId.current,isModifierKey=e.ctrlKey||e.altKey||e.metaKey,isCharacterKey=e.key.length===1;if(this.rovingFocusGroup.handleKeydown(target2,e)||e.code==="Space")return;const candidateNodes=this.#getCandidateNodes();isKeydownInside&&!isModifierKey&&isCharacterKey&&this.#handleTypeaheadSearch(e.key,candidateNodes),e.target?.id===this.parentMenu.contentId.current&&FIRST_LAST_KEYS$1.includes(e.key)&&(e.preventDefault(),LAST_KEYS$1.includes(e.key)&&candidateNodes. -reverse(),focusFirst(candidateNodes,{select:!1},()=>this.domContext.getActiveElement()))}onblur(e){isElement$1(e.currentTarget)&&isElement$1(e.target)&&(e.currentTarget.contains?.(e.target)||(this.domContext.getWindow().clearTimeout(this.#timer),this.search=""))}onfocus(_){this.parentMenu.root.isUsingKeyboard.current&&afterTick(()=>this.rovingFocusGroup.focusFirstCandidate())}onItemEnter(){return this.#isPointerMovingToSubmenu()}onItemLeave(e){if(e.currentTarget.hasAttribute(this.parentMenu.root. -getBitsAttr("sub-trigger"))||this.#isPointerMovingToSubmenu()||this.parentMenu.root.isUsingKeyboard.current)return;this.parentMenu.contentNode?.focus(),this.rovingFocusGroup.setCurrentTabStopId("")}onTriggerLeave(){return!!this.#isPointerMovingToSubmenu()}handleInteractOutside(e){if(!isElementOrSVGElement(e.target))return;const triggerId=this.parentMenu.triggerNode?.id;if(e.target.id===triggerId){e.preventDefault();return}e.target.closest(`#${triggerId}`)&&e.preventDefault()}get shouldRender(){return this. -parentMenu.contentPresence.shouldRender}#snippetProps=user_derived(()=>({open:this.parentMenu.opts.open.current}));get snippetProps(){return get$4(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,role:"menu","aria-orientation":"vertical",[this.parentMenu.root.getBitsAttr("content")]:"","data-state":getDataOpenClosed(this.parentMenu.opts.open.current),onkeydown:this.onkeydown,onblur:this.onblur,onfocus:this.onfocus,dir:this. -parentMenu.root.opts.dir.current,style:{pointerEvents:"auto",contain:"layout style paint"},...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}popperProps={onCloseAutoFocus:e=>this.onCloseAutoFocus(e)}}class MenuItemSharedState{opts;content;attachment;#isFocused=state$1(!1);constructor(opts,content2){this.opts=opts,this.content=content2,this.attachment=attachRef(this.opts.ref),this.onpointermove=this.onpointermove.bind(this),this.onpointerleave=this. -onpointerleave.bind(this),this.onfocus=this.onfocus.bind(this),this.onblur=this.onblur.bind(this)}onpointermove(e){if(!e.defaultPrevented&&isMouseEvent(e))if(this.opts.disabled.current)this.content.onItemLeave(e);else{if(this.content.onItemEnter())return;const item=e.currentTarget;if(!isHTMLElement$1(item))return;item.focus()}}onpointerleave(e){e.defaultPrevented||isMouseEvent(e)&&this.content.onItemLeave(e)}onfocus(e){afterTick(()=>{e.defaultPrevented||this.opts.disabled.current||set$1(this.#isFocused, -!0)})}onblur(e){afterTick(()=>{e.defaultPrevented||set$1(this.#isFocused,!1)})}#props=user_derived(()=>({id:this.opts.id.current,tabindex:-1,role:"menuitem","aria-disabled":boolToStr(this.opts.disabled.current),"data-disabled":boolToEmptyStrOrUndef(this.opts.disabled.current),"data-highlighted":get$4(this.#isFocused)?"":void 0,[this.content.parentMenu.root.getBitsAttr("item")]:"",onpointermove:this.onpointermove,onpointerleave:this.onpointerleave,onfocus:this.onfocus,onblur:this.onblur,...this.attachment}));get props(){ -return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class MenuItemState{static create(opts){const item=new MenuItemSharedState(opts,MenuContentContext.get());return new MenuItemState(opts,item)}opts;item;root;#isPointerDown=!1;constructor(opts,item){this.opts=opts,this.item=item,this.root=item.content.parentMenu.root,this.onkeydown=this.onkeydown.bind(this),this.onclick=this.onclick.bind(this),this.onpointerdown=this.onpointerdown.bind(this),this.onpointerup=this.onpointerup.bind( -this)}#handleSelect(){if(this.item.opts.disabled.current)return;const selectEvent=new CustomEvent("menuitemselect",{bubbles:!0,cancelable:!0});if(this.opts.onSelect.current(selectEvent),selectEvent.defaultPrevented){this.item.content.parentMenu.root.isUsingKeyboard.current=!1;return}this.opts.closeOnSelect.current&&this.item.content.parentMenu.root.opts.onClose()}onkeydown(e){const isTypingAhead=this.item.content.search!=="";if(!(this.item.opts.disabled.current||isTypingAhead&&e.key===SPACE)&&SELECTION_KEYS. -includes(e.key)){if(!isHTMLElement$1(e.currentTarget))return;e.currentTarget.click(),e.preventDefault()}}onclick(_){this.item.opts.disabled.current||this.#handleSelect()}onpointerup(e){if(!e.defaultPrevented&&!this.#isPointerDown){if(!isHTMLElement$1(e.currentTarget))return;e.currentTarget?.click()}}onpointerdown(_){this.#isPointerDown=!0}#props=user_derived(()=>mergeProps(this.item.props,{onclick:this.onclick,onpointerdown:this.onpointerdown,onpointerup:this.onpointerup,onkeydown:this.onkeydown}));get props(){ -return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class MenuSubTriggerState{static create(opts){const content2=MenuContentContext.get(),item=new MenuItemSharedState(opts,content2),submenu=MenuMenuContext.get();return new MenuSubTriggerState(opts,item,content2,submenu)}opts;item;content;submenu;attachment;#openTimer=null;constructor(opts,item,content2,submenu){this.opts=opts,this.item=item,this.content=content2,this.submenu=submenu,this.attachment=attachRef(this.opts.ref,v=>this. -submenu.triggerNode=v),this.onpointerleave=this.onpointerleave.bind(this),this.onpointermove=this.onpointermove.bind(this),this.onkeydown=this.onkeydown.bind(this),this.onclick=this.onclick.bind(this),onDestroyEffect(()=>{this.#clearOpenTimer()})}#clearOpenTimer(){this.#openTimer!==null&&(this.content.domContext.getWindow().clearTimeout(this.#openTimer),this.#openTimer=null)}onpointermove(e){isMouseEvent(e)&&!this.item.opts.disabled.current&&!this.submenu.opts.open.current&&!this.#openTimer&&!this. -content.parentMenu.root.isPointerInTransit&&(this.#openTimer=this.content.domContext.setTimeout(()=>{this.submenu.onOpen(),this.#clearOpenTimer()},this.opts.openDelay.current))}onpointerleave(e){isMouseEvent(e)&&this.#clearOpenTimer()}onkeydown(e){const isTypingAhead=this.content.search!=="";this.item.opts.disabled.current||isTypingAhead&&e.key===SPACE||SUB_OPEN_KEYS[this.submenu.root.opts.dir.current].includes(e.key)&&(e.currentTarget.click(),e.preventDefault())}onclick(e){if(this.item.opts.disabled. -current||!isHTMLElement$1(e.currentTarget))return;e.currentTarget.focus();const selectEvent=new CustomEvent("menusubtriggerselect",{bubbles:!0,cancelable:!0});this.opts.onSelect.current(selectEvent),this.submenu.opts.open.current||(this.submenu.onOpen(),afterTick(()=>{const contentNode=this.submenu.contentNode;contentNode&&MenuOpenEvent.dispatch(contentNode)}))}#props=user_derived(()=>mergeProps({"aria-haspopup":"menu","aria-expanded":boolToStr(this.submenu.opts.open.current),"data-state":getDataOpenClosed( -this.submenu.opts.open.current),"aria-controls":this.submenu.opts.open.current?this.submenu.contentId.current:void 0,[this.submenu.root.getBitsAttr("sub-trigger")]:"",onclick:this.onclick,onpointermove:this.onpointermove,onpointerleave:this.onpointerleave,onkeydown:this.onkeydown,...this.attachment},this.item.props));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class MenuSeparatorState{static create(opts){return new MenuSeparatorState(opts,MenuRootContext.get())}opts;root;attachment;constructor(opts,root2){ -this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref)}#props=user_derived(()=>({id:this.opts.id.current,role:"group",[this.root.getBitsAttr("separator")]:"",...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class DropdownMenuTriggerState{static create(opts){return new DropdownMenuTriggerState(opts,MenuMenuContext.get())}opts;parentMenu;attachment;constructor(opts,parentMenu){this.opts=opts,this.parentMenu=parentMenu,this.attachment= -attachRef(this.opts.ref,v=>this.parentMenu.triggerNode=v)}onclick=e=>{this.opts.disabled.current||e.detail!==0||(this.parentMenu.toggleOpen(),e.preventDefault())};onpointerdown=e=>{if(!this.opts.disabled.current){if(e.pointerType==="touch")return e.preventDefault();e.button===0&&e.ctrlKey===!1&&(this.parentMenu.toggleOpen(),this.parentMenu.opts.open.current||e.preventDefault())}};onpointerup=e=>{this.opts.disabled.current||e.pointerType==="touch"&&(e.preventDefault(),this.parentMenu.toggleOpen())};onkeydown=e=>{ -if(!this.opts.disabled.current){if(e.key===SPACE||e.key===ENTER){this.parentMenu.toggleOpen(),e.preventDefault();return}e.key===ARROW_DOWN&&(this.parentMenu.onOpen(),e.preventDefault())}};#ariaControls=user_derived(()=>{if(this.parentMenu.opts.open.current&&this.parentMenu.contentId.current)return this.parentMenu.contentId.current});#props=user_derived(()=>({id:this.opts.id.current,disabled:this.opts.disabled.current,"aria-haspopup":"menu","aria-expanded":boolToStr(this.parentMenu.opts.open.current), -"aria-controls":get$4(this.#ariaControls),"data-disabled":boolToEmptyStrOrUndef(this.opts.disabled.current),"data-state":getDataOpenClosed(this.parentMenu.opts.open.current),[this.parentMenu.root.getBitsAttr("trigger")]:"",onclick:this.onclick,onpointerdown:this.onpointerdown,onpointerup:this.onpointerup,onkeydown:this.onkeydown,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class MenuSubmenuState{static create(opts){const menu=MenuMenuContext. -get();return MenuMenuContext.set(new MenuMenuState(opts,menu.root,menu))}}globalThis.bitsDismissableLayers??=new Map;class DismissibleLayerState{static create(opts){return new DismissibleLayerState(opts)}opts;#interactOutsideProp;#behaviorType;#interceptedEvents={pointerdown:!1};#isResponsibleLayer=!1;#isFocusInsideDOMTree=!1;#documentObj=void 0;#onFocusOutside;#unsubClickListener=noop$1;constructor(opts){this.opts=opts,this.#behaviorType=opts.interactOutsideBehavior,this.#interactOutsideProp=opts. -onInteractOutside,this.#onFocusOutside=opts.onFocusOutside,user_effect(()=>{this.#documentObj=getOwnerDocument(this.opts.ref.current)});let unsubEvents=noop$1;const cleanup=()=>{this.#resetState(),globalThis.bitsDismissableLayers.delete(this),this.#handleInteractOutside.destroy(),unsubEvents()};watch$1([()=>this.opts.enabled.current,()=>this.opts.ref.current],()=>{if(!(!this.opts.enabled.current||!this.opts.ref.current))return afterSleep(1,()=>{this.opts.ref.current&&(globalThis.bitsDismissableLayers. -set(this,this.#behaviorType),unsubEvents(),unsubEvents=this.#addEventListeners())}),cleanup}),onDestroyEffect(()=>{this.#resetState.destroy(),globalThis.bitsDismissableLayers.delete(this),this.#handleInteractOutside.destroy(),this.#unsubClickListener(),unsubEvents()})}#handleFocus=event2=>{event2.defaultPrevented||this.opts.ref.current&&afterTick(()=>{!this.opts.ref.current||this.#isTargetWithinLayer(event2.target)||event2.target&&!this.#isFocusInsideDOMTree&&this.#onFocusOutside.current?.(event2)})};#addEventListeners(){ -return executeCallbacks(on(this.#documentObj,"pointerdown",executeCallbacks(this.#markInterceptedEvent,this.#markResponsibleLayer),{capture:!0}),on(this.#documentObj,"pointerdown",executeCallbacks(this.#markNonInterceptedEvent,this.#handleInteractOutside)),on(this.#documentObj,"focusin",this.#handleFocus))}#handleDismiss=e=>{let event2=e;event2.defaultPrevented&&(event2=createWrappedEvent(e)),this.#interactOutsideProp.current(e)};#handleInteractOutside=debounce$1(e=>{if(!this.opts.ref.current){this.#unsubClickListener(); -return}const isEventValid=this.opts.isValidEvent.current(e,this.opts.ref.current)||isValidEvent(e,this.opts.ref.current);if(!this.#isResponsibleLayer||this.#isAnyEventIntercepted()||!isEventValid){this.#unsubClickListener();return}let event2=e;if(event2.defaultPrevented&&(event2=createWrappedEvent(event2)),this.#behaviorType.current!=="close"&&this.#behaviorType.current!=="defer-otherwise-close"){this.#unsubClickListener();return}e.pointerType==="touch"?(this.#unsubClickListener(),this.#unsubClickListener= -on(this.#documentObj,"click",this.#handleDismiss,{once:!0})):this.#interactOutsideProp.current(event2)},10);#markInterceptedEvent=e=>{this.#interceptedEvents[e.type]=!0};#markNonInterceptedEvent=e=>{this.#interceptedEvents[e.type]=!1};#markResponsibleLayer=()=>{this.opts.ref.current&&(this.#isResponsibleLayer=isResponsibleLayer(this.opts.ref.current))};#isTargetWithinLayer=target2=>this.opts.ref.current?isOrContainsTarget(this.opts.ref.current,target2):!1;#resetState=debounce$1(()=>{for(const eventType in this.#interceptedEvents) -this.#interceptedEvents[eventType]=!1;this.#isResponsibleLayer=!1},20);#isAnyEventIntercepted(){return Object.values(this.#interceptedEvents).some(Boolean)}#onfocuscapture=()=>{this.#isFocusInsideDOMTree=!0};#onblurcapture=()=>{this.#isFocusInsideDOMTree=!1};props={onfocuscapture:this.#onfocuscapture,onblurcapture:this.#onblurcapture}}function getTopMostDismissableLayer(layersArr=[...globalThis.bitsDismissableLayers]){return layersArr.findLast(([_,{current:behaviorType}])=>behaviorType==="close"|| -behaviorType==="ignore")}function isResponsibleLayer(node2){const layersArr=[...globalThis.bitsDismissableLayers],topMostLayer=getTopMostDismissableLayer(layersArr);if(topMostLayer)return topMostLayer[0].opts.ref.current===node2;const[firstLayerNode]=layersArr[0];return firstLayerNode.opts.ref.current===node2}function isValidEvent(e,node2){const target2=e.target;if(!isElementOrSVGElement(target2))return!1;const targetIsContextMenuTrigger=!!target2.closest(`[${CONTEXT_MENU_TRIGGER_ATTR}]`);if("bu\ -tton"in e&&e.button>0&&!targetIsContextMenuTrigger)return!1;if("button"in e&&e.button===0&&targetIsContextMenuTrigger)return!0;const nodeIsContextMenu=!!node2.closest(`[${CONTEXT_MENU_CONTENT_ATTR}]`);return targetIsContextMenuTrigger&&nodeIsContextMenu?!1:getOwnerDocument(target2).documentElement.contains(target2)&&!isOrContainsTarget(node2,target2)&&isClickTrulyOutside(e,node2)}function createWrappedEvent(e){const capturedCurrentTarget=e.currentTarget,capturedTarget=e.target;let newEvent;e instanceof -PointerEvent?newEvent=new PointerEvent(e.type,e):newEvent=new PointerEvent("pointerdown",e);let isPrevented=!1;return new Proxy(newEvent,{get:(target2,prop2)=>prop2==="currentTarget"?capturedCurrentTarget:prop2==="target"?capturedTarget:prop2==="preventDefault"?()=>{isPrevented=!0,typeof target2.preventDefault=="function"&&target2.preventDefault()}:prop2==="defaultPrevented"?isPrevented:prop2 in target2?target2[prop2]:e[prop2]})}function Dismissible_layer($$anchor,$$props){push$1($$props,!0);let interactOutsideBehavior=prop( -$$props,"interactOutsideBehavior",3,"close"),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),onFocusOutside=prop($$props,"onFocusOutside",3,noop$1),isValidEvent2=prop($$props,"isValidEvent",3,()=>!1);const dismissibleLayerState=DismissibleLayerState.create({id:boxWith$1(()=>$$props.id),interactOutsideBehavior:boxWith$1(()=>interactOutsideBehavior()),onInteractOutside:boxWith$1(()=>onInteractOutside()),enabled:boxWith$1(()=>$$props.enabled),onFocusOutside:boxWith$1(()=>onFocusOutside()), -isValidEvent:boxWith$1(()=>isValidEvent2()),ref:$$props.ref});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3,()=>({props:dismissibleLayerState.props})),append($$anchor,fragment),pop()}globalThis.bitsEscapeLayers??=new Map;class EscapeLayerState{static create(opts){return new EscapeLayerState(opts)}opts;domContext;constructor(opts){this.opts=opts,this.domContext=new DOMContext(this.opts.ref);let unsubEvents=noop$1;watch$1(()=>opts.enabled.current,enabled=>(enabled&& -(globalThis.bitsEscapeLayers.set(this,opts.escapeKeydownBehavior),unsubEvents=this.#addEventListener()),()=>{unsubEvents(),globalThis.bitsEscapeLayers.delete(this)}))}#addEventListener=()=>on(this.domContext.getDocument(),"keydown",this.#onkeydown,{passive:!1});#onkeydown=e=>{if(e.key!==ESCAPE||!isResponsibleEscapeLayer(this))return;const clonedEvent=new KeyboardEvent(e.type,e);e.preventDefault();const behaviorType=this.opts.escapeKeydownBehavior.current;behaviorType!=="close"&&behaviorType!=="d\ -efer-otherwise-close"||this.opts.onEscapeKeydown.current(clonedEvent)}}function isResponsibleEscapeLayer(instance){const layersArr=[...globalThis.bitsEscapeLayers],topMostLayer=layersArr.findLast(([_,{current:behaviorType}])=>behaviorType==="close"||behaviorType==="ignore");if(topMostLayer)return topMostLayer[0]===instance;const[firstLayerNode]=layersArr[0];return firstLayerNode===instance}function Escape_layer($$anchor,$$props){push$1($$props,!0);let escapeKeydownBehavior=prop($$props,"escapeKe\ -ydownBehavior",3,"close"),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1);EscapeLayerState.create({escapeKeydownBehavior:boxWith$1(()=>escapeKeydownBehavior()),onEscapeKeydown:boxWith$1(()=>onEscapeKeydown()),enabled:boxWith$1(()=>$$props.enabled),ref:$$props.ref});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}class FocusScopeManager{static instance;#scopeStack=simpleBox([]);#focusHistory=new WeakMap;#preFocusHistory=new WeakMap;static getInstance(){ -return this.instance||(this.instance=new FocusScopeManager),this.instance}register(scope2){const current2=this.getActive();current2&¤t2!==scope2&¤t2.pause();const activeElement=document.activeElement;activeElement&&activeElement!==document.body&&this.#preFocusHistory.set(scope2,activeElement),this.#scopeStack.current=this.#scopeStack.current.filter(s2=>s2!==scope2),this.#scopeStack.current.unshift(scope2)}unregister(scope2){this.#scopeStack.current=this.#scopeStack.current.filter(s2=>s2!== -scope2);const next2=this.getActive();next2&&next2.resume()}getActive(){return this.#scopeStack.current[0]}setFocusMemory(scope2,element2){this.#focusHistory.set(scope2,element2)}getFocusMemory(scope2){return this.#focusHistory.get(scope2)}isActiveScope(scope2){return this.getActive()===scope2}setPreFocusMemory(scope2,element2){this.#preFocusHistory.set(scope2,element2)}getPreFocusMemory(scope2){return this.#preFocusHistory.get(scope2)}clearPreFocusMemory(scope2){this.#preFocusHistory.delete(scope2)}} -class FocusScope{#paused=!1;#container=null;#manager=FocusScopeManager.getInstance();#cleanupFns=[];#opts;constructor(opts){this.#opts=opts}get paused(){return this.#paused}pause(){this.#paused=!0}resume(){this.#paused=!1}#cleanup(){for(const fn of this.#cleanupFns)fn();this.#cleanupFns=[]}mount(container2){this.#container&&this.unmount(),this.#container=container2,this.#manager.register(this),this.#setupEventListeners(),this.#handleOpenAutoFocus()}unmount(){this.#container&&(this.#cleanup(),this.#handleCloseAutoFocus(), -this.#manager.unregister(this),this.#manager.clearPreFocusMemory(this),this.#container=null)}#handleOpenAutoFocus(){if(!this.#container)return;const event2=new CustomEvent("focusScope.onOpenAutoFocus",{bubbles:!1,cancelable:!0});this.#opts.onOpenAutoFocus.current(event2),event2.defaultPrevented||requestAnimationFrame(()=>{if(!this.#container)return;const firstTabbable=this.#getFirstTabbable();firstTabbable?(firstTabbable.focus(),this.#manager.setFocusMemory(this,firstTabbable)):this.#container.focus()})}#handleCloseAutoFocus(){ -const event2=new CustomEvent("focusScope.onCloseAutoFocus",{bubbles:!1,cancelable:!0});if(this.#opts.onCloseAutoFocus.current?.(event2),!event2.defaultPrevented){const preFocusedElement=this.#manager.getPreFocusMemory(this);if(preFocusedElement&&document.contains(preFocusedElement))try{preFocusedElement.focus()}catch{document.body.focus()}}}#setupEventListeners(){if(!this.#container||!this.#opts.trap.current)return;const container2=this.#container,doc=container2.ownerDocument,handleFocus=e=>{if(this.#paused|| -!this.#manager.isActiveScope(this))return;const target2=e.target;if(!target2)return;if(container2.contains(target2))this.#manager.setFocusMemory(this,target2);else{const lastFocused=this.#manager.getFocusMemory(this);if(lastFocused&&container2.contains(lastFocused)&&isFocusable(lastFocused))e.preventDefault(),lastFocused.focus();else{const firstTabbable=this.#getFirstTabbable(),firstFocusable=this.#getAllFocusables()[0];(firstTabbable||firstFocusable||container2).focus()}}},handleKeydown=e=>{if(!this.#opts. -loop||this.#paused||e.key!=="Tab"||!this.#manager.isActiveScope(this))return;const tabbables=this.#getTabbables();if(tabbables.length===0)return;const first=tabbables[0],last=tabbables[tabbables.length-1];!e.shiftKey&&doc.activeElement===last?(e.preventDefault(),first.focus()):e.shiftKey&&doc.activeElement===first&&(e.preventDefault(),last.focus())};this.#cleanupFns.push(on(doc,"focusin",handleFocus,{capture:!0}),on(container2,"keydown",handleKeydown));const observer=new MutationObserver(()=>{const lastFocused=this.#manager. -getFocusMemory(this);if(lastFocused&&!container2.contains(lastFocused)){const firstTabbable=this.#getFirstTabbable(),firstFocusable=this.#getAllFocusables()[0],elementToFocus=firstTabbable||firstFocusable;elementToFocus?(elementToFocus.focus(),this.#manager.setFocusMemory(this,elementToFocus)):container2.focus()}});observer.observe(container2,{childList:!0,subtree:!0}),this.#cleanupFns.push(()=>observer.disconnect())}#getTabbables(){return this.#container?tabbable(this.#container,{includeContainer:!1, -getShadowRoot:!0}):[]}#getFirstTabbable(){return this.#getTabbables()[0]||null}#getAllFocusables(){return this.#container?focusable(this.#container,{includeContainer:!1,getShadowRoot:!0}):[]}static use(opts){let scope2=null;return watch$1([()=>opts.ref.current,()=>opts.enabled.current],([ref2,enabled])=>{ref2&&enabled?(scope2||(scope2=new FocusScope(opts)),scope2.mount(ref2)):scope2&&(scope2.unmount(),scope2=null)}),onDestroyEffect(()=>{scope2?.unmount()}),{get props(){return{tabindex:-1}}}}}function Focus_scope($$anchor,$$props){ -push$1($$props,!0);let enabled=prop($$props,"enabled",3,!1),trapFocus=prop($$props,"trapFocus",3,!1),loop2=prop($$props,"loop",3,!1),onCloseAutoFocus=prop($$props,"onCloseAutoFocus",3,noop$1),onOpenAutoFocus=prop($$props,"onOpenAutoFocus",3,noop$1);const focusScopeState=FocusScope.use({enabled:boxWith$1(()=>enabled()),trap:boxWith$1(()=>trapFocus()),loop:loop2(),onCloseAutoFocus:boxWith$1(()=>onCloseAutoFocus()),onOpenAutoFocus:boxWith$1(()=>onOpenAutoFocus()),ref:$$props.ref});var fragment=comment$2(), -node2=first_child(fragment);snippet(node2,()=>$$props.focusScope??noop$3,()=>({props:focusScopeState.props})),append($$anchor,fragment),pop()}globalThis.bitsTextSelectionLayers??=new Map;class TextSelectionLayerState{static create(opts){return new TextSelectionLayerState(opts)}opts;domContext;#unsubSelectionLock=noop$1;constructor(opts){this.opts=opts,this.domContext=new DOMContext(opts.ref);let unsubEvents=noop$1;watch$1(()=>this.opts.enabled.current,isEnabled=>(isEnabled&&(globalThis.bitsTextSelectionLayers. -set(this,this.opts.enabled),unsubEvents(),unsubEvents=this.#addEventListeners()),()=>{unsubEvents(),this.#resetSelectionLock(),globalThis.bitsTextSelectionLayers.delete(this)}))}#addEventListeners(){return executeCallbacks(on(this.domContext.getDocument(),"pointerdown",this.#pointerdown),on(this.domContext.getDocument(),"pointerup",composeHandlers(this.#resetSelectionLock,this.opts.onPointerUp.current)))}#pointerdown=e=>{const node2=this.opts.ref.current,target2=e.target;!isHTMLElement$1(node2)|| -!isHTMLElement$1(target2)||!this.opts.enabled.current||!isHighestLayer(this)||!contains$3(node2,target2)||(this.opts.onPointerDown.current(e),!e.defaultPrevented&&(this.#unsubSelectionLock=preventTextSelectionOverflow(node2,this.domContext.getDocument().body)))};#resetSelectionLock=()=>{this.#unsubSelectionLock(),this.#unsubSelectionLock=noop$1}}const getUserSelect=node2=>node2.style.userSelect||node2.style.webkitUserSelect;function preventTextSelectionOverflow(node2,body2){const originalBodyUserSelect=getUserSelect( -body2),originalNodeUserSelect=getUserSelect(node2);return setUserSelect(body2,"none"),setUserSelect(node2,"text"),()=>{setUserSelect(body2,originalBodyUserSelect),setUserSelect(node2,originalNodeUserSelect)}}function setUserSelect(node2,value){node2.style.userSelect=value,node2.style.webkitUserSelect=value}function isHighestLayer(instance){const layersArr=[...globalThis.bitsTextSelectionLayers];if(!layersArr.length)return!1;const highestLayer=layersArr.at(-1);return highestLayer?highestLayer[0]=== -instance:!1}function Text_selection_layer($$anchor,$$props){push$1($$props,!0);let preventOverflowTextSelection=prop($$props,"preventOverflowTextSelection",3,!0),onPointerDown=prop($$props,"onPointerDown",3,noop$1),onPointerUp=prop($$props,"onPointerUp",3,noop$1);TextSelectionLayerState.create({id:boxWith$1(()=>$$props.id),onPointerDown:boxWith$1(()=>onPointerDown()),onPointerUp:boxWith$1(()=>onPointerUp()),enabled:boxWith$1(()=>$$props.enabled&&preventOverflowTextSelection()),ref:$$props.ref}); -var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}globalThis.bitsIdCounter??={current:0};function useId(prefix="bits"){return globalThis.bitsIdCounter.current++,`${prefix}-${globalThis.bitsIdCounter.current}`}class SharedState{#factory;#subscribers=0;#state=state$1();#scope;constructor(factory){this.#factory=factory}#dispose(){this.#subscribers-=1,this.#scope&&this.#subscribers<=0&&(this.#scope(),set$1(this.#state,void 0), -this.#scope=void 0)}get(...args){return this.#subscribers+=1,get$4(this.#state)===void 0&&(this.#scope=effect_root(()=>{set$1(this.#state,this.#factory(...args),!0)})),user_effect(()=>()=>{this.#dispose()}),get$4(this.#state)}}const lockMap=new SvelteMap;let initialBodyStyle=state$1(null),stopTouchMoveListener=null,cleanupTimeoutId=null,isInCleanupTransition=!1;const anyLocked=boxWith$1(()=>{for(const value of lockMap.values())if(value)return!0;return!1});let cleanupScheduledAt=null;const bodyLockStackCount=new SharedState( -()=>{function resetBodyStyle(){document.body.setAttribute("style",get$4(initialBodyStyle)??""),document.body.style.removeProperty("--scrollbar-width"),isIOS&&stopTouchMoveListener?.(),set$1(initialBodyStyle,null)}function cancelPendingCleanup(){cleanupTimeoutId!==null&&(window.clearTimeout(cleanupTimeoutId),cleanupTimeoutId=null)}function scheduleCleanupIfNoNewLocks(delay,callback){cancelPendingCleanup(),isInCleanupTransition=!0,cleanupScheduledAt=Date.now();const currentCleanupId=cleanupScheduledAt, -cleanupFn=()=>{cleanupTimeoutId=null,cleanupScheduledAt===currentCleanupId&&(isAnyLocked(lockMap)?isInCleanupTransition=!1:(isInCleanupTransition=!1,callback()))},actualDelay=delay===null?24:delay;cleanupTimeoutId=window.setTimeout(cleanupFn,actualDelay)}function ensureInitialStyleCaptured(){get$4(initialBodyStyle)===null&&lockMap.size===0&&!isInCleanupTransition&&set$1(initialBodyStyle,document.body.getAttribute("style"),!0)}return watch$1(()=>anyLocked.current,()=>{if(!anyLocked.current)return; +tabindex:0,...this.root.sharedProps,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}function Alert_dialog($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1);DialogRootState.create({variant:boxWith$1(()=>"alert-dialog"),open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),onOpenChangeComplete:boxWith$1( +()=>onOpenChangeComplete())});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}var root_2$1E=from_html("<div><!></div>");function Dialog_title$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),level=prop($$props,"level",3,2),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","child","children","level"]); +const titleState=DialogTitleState.create({id:boxWith$1(()=>id2()),level:boxWith$1(()=>level()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,titleState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1E();attribute_effect(div, +()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_2$1D=from_html("<button><!></button>");function Alert_dialog_action$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,[ +"$$slots","$$events","$$legacy","children","child","id","ref"]);const actionState=DialogActionState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,actionState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1D(); +attribute_effect(button,()=>({...get$3(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_2$1C=from_html("<button><!></button>");function Alert_dialog_cancel$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null), +disabled=prop($$props,"disabled",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","children","child","disabled"]);const cancelState=AlertDialogCancelState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),disabled:boxWith$1(()=>!!disabled())}),mergedProps=user_derived(()=>mergeProps(restProps,cancelState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1); +snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1C();attribute_effect(button,()=>({...get$3(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}function Portal_consumer($$anchor,$$props){var fragment=comment$2(),node2=first_child( +fragment);key$1(node2,()=>$$props.children,$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3),append($$anchor2,fragment_1)}),append($$anchor,fragment)}const BitsConfigContext=new Context$1("BitsConfig");function getBitsConfig(){const fallback2=new BitsConfigState(null,{});return BitsConfigContext.getOr(fallback2).opts}class BitsConfigState{opts;constructor(parent,opts){const resolveConfigOption=createConfigResolver(parent,opts);this. +opts={defaultPortalTo:resolveConfigOption(config2=>config2.defaultPortalTo),defaultLocale:resolveConfigOption(config2=>config2.defaultLocale)}}}function createConfigResolver(parent,currentOpts){return getter=>boxWith$1(()=>{const value=getter(currentOpts)?.current;if(value!==void 0)return value;if(parent!==null)return getter(parent.opts)?.current})}function createPropResolver(configOption,fallback2){return getProp=>{const config2=getBitsConfig();return boxWith$1(()=>{const propValue=getProp();if(propValue!== +void 0)return propValue;const option2=configOption(config2).current;return option2!==void 0?option2:fallback2})}}const resolvePortalToProp=createPropResolver(config2=>config2.defaultPortalTo,"body");function Portal$2($$anchor,$$props){push$1($$props,!0);const to=resolvePortalToProp(()=>$$props.to),context=getAllContexts();let target2=user_derived(getTarget);function getTarget(){if(!isBrowser$2||$$props.disabled)return null;let localTarget=null;return typeof to.current=="string"?localTarget=document. +querySelector(to.current):localTarget=to.current,localTarget}let instance;function unmountInstance(){instance&&(unmount(instance),instance=null)}watch$1([()=>get$3(target2),()=>$$props.disabled],([target3,disabled])=>{if(!target3||disabled){unmountInstance();return}return instance=mount(Portal_consumer,{target:target3,props:{children:$$props.children},context}),()=>{unmountInstance()}});var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child( +fragment_1);snippet(node_1,()=>$$props.children??noop$3),append($$anchor2,fragment_1)};if_block(node2,$$render=>{$$props.disabled&&$$render(consequent)})}append($$anchor,fragment),pop()}class CustomEventDispatcher{eventName;options;constructor(eventName,options={bubbles:!0,cancelable:!0}){this.eventName=eventName,this.options=options}createEvent(detail){return new CustomEvent(this.eventName,{...this.options,detail})}dispatch(element2,detail){const event2=this.createEvent(detail);return element2. +dispatchEvent(event2),event2}listen(element2,callback,options){const handler=event2=>{callback(event2)};return on(element2,this.eventName,handler,options)}}function debounce$1(fn,wait=500){let timeout=null;const debounced=(...args)=>{timeout!==null&&clearTimeout(timeout),timeout=setTimeout(()=>{fn(...args)},wait)};return debounced.destroy=()=>{timeout!==null&&(clearTimeout(timeout),timeout=null)},debounced}function isOrContainsTarget(node2,target2){return node2===target2||node2.contains(target2)} +function getOwnerDocument(el){return el?.ownerDocument??document}function isClickTrulyOutside(event2,contentNode){const{clientX,clientY}=event2,rect=contentNode.getBoundingClientRect();return clientX<rect.left||clientX>rect.right||clientY<rect.top||clientY>rect.bottom}const SELECTION_KEYS=[ENTER,SPACE],FIRST_KEYS$1=[ARROW_DOWN,PAGE_UP,HOME],LAST_KEYS$1=[ARROW_UP,PAGE_DOWN,END],FIRST_LAST_KEYS$1=[...FIRST_KEYS$1,...LAST_KEYS$1],SUB_OPEN_KEYS={ltr:[...SELECTION_KEYS,ARROW_RIGHT],rtl:[...SELECTION_KEYS, +ARROW_LEFT]},SUB_CLOSE_KEYS={ltr:[ARROW_LEFT],rtl:[ARROW_RIGHT]};function isMouseEvent(event2){return event2.pointerType==="mouse"}function focus(element2,{select=!1}={}){if(!element2||!element2.focus)return;const doc=getDocument$1(element2);if(doc.activeElement===element2)return;const previouslyFocusedElement=doc.activeElement;element2.focus({preventScroll:!0}),element2!==previouslyFocusedElement&&isSelectableInput(element2)&&select&&element2.select()}function focusFirst(candidates,{select=!1}={},getActiveElement2){ +const previouslyFocusedElement=getActiveElement2();for(const candidate of candidates)if(focus(candidate,{select}),getActiveElement2()!==previouslyFocusedElement)return!0}let isUsingKeyboard=state$1(!1);class IsUsingKeyboard{static _refs=0;static _cleanup;constructor(){user_effect(()=>(IsUsingKeyboard._refs===0&&(IsUsingKeyboard._cleanup=effect_root(()=>{const callbacksToDispose=[],handlePointer=_=>{set$1(isUsingKeyboard,!1)},handleKeydown=_=>{set$1(isUsingKeyboard,!0)};return callbacksToDispose. +push(on(document,"pointerdown",handlePointer,{capture:!0}),on(document,"pointermove",handlePointer,{capture:!0}),on(document,"keydown",handleKeydown,{capture:!0})),executeCallbacks(...callbacksToDispose)})),IsUsingKeyboard._refs++,()=>{IsUsingKeyboard._refs--,IsUsingKeyboard._refs===0&&(set$1(isUsingKeyboard,!1),IsUsingKeyboard._cleanup?.())}))}get current(){return get$3(isUsingKeyboard)}set current(value){set$1(isUsingKeyboard,value,!0)}}var candidateSelectors=["input:not([inert])","select:not(\ +[inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],candidateSelector=candidateSelectors.join(","),NoElement=typeof Element>"u",matches=NoElement?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector, +getRootNode=!NoElement&&Element.prototype.getRootNode?function(element2){var _element$getRootNode;return element2==null||(_element$getRootNode=element2.getRootNode)===null||_element$getRootNode===void 0?void 0:_element$getRootNode.call(element2)}:function(element2){return element2?.ownerDocument},isInert=function isInert2(node2,lookUp){var _node$getAttribute;lookUp===void 0&&(lookUp=!0);var inertAtt=node2==null||(_node$getAttribute=node2.getAttribute)===null||_node$getAttribute===void 0?void 0:_node$getAttribute. +call(node2,"inert"),inert=inertAtt===""||inertAtt==="true",result=inert||lookUp&&node2&&isInert2(node2.parentNode);return result},isContentEditable=function(node2){var _node$getAttribute2,attValue=node2==null||(_node$getAttribute2=node2.getAttribute)===null||_node$getAttribute2===void 0?void 0:_node$getAttribute2.call(node2,"contenteditable");return attValue===""||attValue==="true"},getCandidates=function(el,includeContainer,filter){if(isInert(el))return[];var candidates=Array.prototype.slice.apply( +el.querySelectorAll(candidateSelector));return includeContainer&&matches.call(el,candidateSelector)&&candidates.unshift(el),candidates=candidates.filter(filter),candidates},getCandidatesIteratively=function getCandidatesIteratively2(elements,includeContainer,options){for(var candidates=[],elementsToCheck=Array.from(elements);elementsToCheck.length;){var element2=elementsToCheck.shift();if(!isInert(element2,!1))if(element2.tagName==="SLOT"){var assigned=element2.assignedElements(),content2=assigned. +length?assigned:element2.children,nestedCandidates=getCandidatesIteratively2(content2,!0,options);options.flatten?candidates.push.apply(candidates,nestedCandidates):candidates.push({scopeParent:element2,candidates:nestedCandidates})}else{var validCandidate=matches.call(element2,candidateSelector);validCandidate&&options.filter(element2)&&(includeContainer||!elements.includes(element2))&&candidates.push(element2);var shadowRoot=element2.shadowRoot||typeof options.getShadowRoot=="function"&&options. +getShadowRoot(element2),validShadowRoot=!isInert(shadowRoot,!1)&&(!options.shadowRootFilter||options.shadowRootFilter(element2));if(shadowRoot&&validShadowRoot){var _nestedCandidates=getCandidatesIteratively2(shadowRoot===!0?element2.children:shadowRoot.children,!0,options);options.flatten?candidates.push.apply(candidates,_nestedCandidates):candidates.push({scopeParent:element2,candidates:_nestedCandidates})}else elementsToCheck.unshift.apply(elementsToCheck,element2.children)}}return candidates}, +hasTabIndex=function(node2){return!isNaN(parseInt(node2.getAttribute("tabindex"),10))},getTabIndex=function(node2){if(!node2)throw new Error("No node provided");return node2.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(node2.tagName)||isContentEditable(node2))&&!hasTabIndex(node2)?0:node2.tabIndex},getSortOrderTabIndex=function(node2,isScope){var tabIndex=getTabIndex(node2);return tabIndex<0&&isScope&&!hasTabIndex(node2)?0:tabIndex},sortOrderedTabbables=function(a,b){return a.tabIndex===b.tabIndex? +a.documentOrder-b.documentOrder:a.tabIndex-b.tabIndex},isInput=function(node2){return node2.tagName==="INPUT"},isHiddenInput=function(node2){return isInput(node2)&&node2.type==="hidden"},isDetailsWithSummary=function(node2){var r2=node2.tagName==="DETAILS"&&Array.prototype.slice.apply(node2.children).some(function(child2){return child2.tagName==="SUMMARY"});return r2},getCheckedRadio=function(nodes2,form){for(var i=0;i<nodes2.length;i++)if(nodes2[i].checked&&nodes2[i].form===form)return nodes2[i]}, +isTabbableRadio=function(node2){if(!node2.name)return!0;var radioScope=node2.form||getRootNode(node2),queryRadios=function(name){return radioScope.querySelectorAll('input[type="radio"][name="'+name+'"]')},radioSet;if(typeof window<"u"&&typeof window.CSS<"u"&&typeof window.CSS.escape=="function")radioSet=queryRadios(window.CSS.escape(node2.name));else try{radioSet=queryRadios(node2.name)}catch(err){return console.error("Looks like you have a radio button with a name attribute containing invalid C\ +SS selector characters and need the CSS.escape polyfill: %s",err.message),!1}var checked=getCheckedRadio(radioSet,node2.form);return!checked||checked===node2},isRadio=function(node2){return isInput(node2)&&node2.type==="radio"},isNonTabbableRadio=function(node2){return isRadio(node2)&&!isTabbableRadio(node2)},isNodeAttached=function(node2){var _nodeRoot,nodeRoot=node2&&getRootNode(node2),nodeRootHost=(_nodeRoot=nodeRoot)===null||_nodeRoot===void 0?void 0:_nodeRoot.host,attached=!1;if(nodeRoot&&nodeRoot!== +node2){var _nodeRootHost,_nodeRootHost$ownerDo,_node$ownerDocument;for(attached=!!((_nodeRootHost=nodeRootHost)!==null&&_nodeRootHost!==void 0&&(_nodeRootHost$ownerDo=_nodeRootHost.ownerDocument)!==null&&_nodeRootHost$ownerDo!==void 0&&_nodeRootHost$ownerDo.contains(nodeRootHost)||node2!=null&&(_node$ownerDocument=node2.ownerDocument)!==null&&_node$ownerDocument!==void 0&&_node$ownerDocument.contains(node2));!attached&&nodeRootHost;){var _nodeRoot2,_nodeRootHost2,_nodeRootHost2$ownerD;nodeRoot=getRootNode( +nodeRootHost),nodeRootHost=(_nodeRoot2=nodeRoot)===null||_nodeRoot2===void 0?void 0:_nodeRoot2.host,attached=!!((_nodeRootHost2=nodeRootHost)!==null&&_nodeRootHost2!==void 0&&(_nodeRootHost2$ownerD=_nodeRootHost2.ownerDocument)!==null&&_nodeRootHost2$ownerD!==void 0&&_nodeRootHost2$ownerD.contains(nodeRootHost))}}return attached},isZeroArea=function(node2){var _node$getBoundingClie=node2.getBoundingClientRect(),width=_node$getBoundingClie.width,height=_node$getBoundingClie.height;return width=== +0&&height===0},isHidden=function(node2,_ref){var displayCheck=_ref.displayCheck,getShadowRoot=_ref.getShadowRoot;if(getComputedStyle(node2).visibility==="hidden")return!0;var isDirectSummary=matches.call(node2,"details>summary:first-of-type"),nodeUnderDetails=isDirectSummary?node2.parentElement:node2;if(matches.call(nodeUnderDetails,"details:not([open]) *"))return!0;if(!displayCheck||displayCheck==="full"||displayCheck==="legacy-full"){if(typeof getShadowRoot=="function"){for(var originalNode=node2;node2;){ +var parentElement=node2.parentElement,rootNode=getRootNode(node2);if(parentElement&&!parentElement.shadowRoot&&getShadowRoot(parentElement)===!0)return isZeroArea(node2);node2.assignedSlot?node2=node2.assignedSlot:!parentElement&&rootNode!==node2.ownerDocument?node2=rootNode.host:node2=parentElement}node2=originalNode}if(isNodeAttached(node2))return!node2.getClientRects().length;if(displayCheck!=="legacy-full")return!0}else if(displayCheck==="non-zero-area")return isZeroArea(node2);return!1},isDisabledFromFieldset=function(node2){ +if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node2.tagName))for(var parentNode=node2.parentElement;parentNode;){if(parentNode.tagName==="FIELDSET"&&parentNode.disabled){for(var i=0;i<parentNode.children.length;i++){var child2=parentNode.children.item(i);if(child2.tagName==="LEGEND")return matches.call(parentNode,"fieldset[disabled] *")?!0:!child2.contains(node2)}return!0}parentNode=parentNode.parentElement}return!1},isNodeMatchingSelectorFocusable=function(options,node2){return!(node2.disabled||isInert( +node2)||isHiddenInput(node2)||isHidden(node2,options)||isDetailsWithSummary(node2)||isDisabledFromFieldset(node2))},isNodeMatchingSelectorTabbable=function(options,node2){return!(isNonTabbableRadio(node2)||getTabIndex(node2)<0||!isNodeMatchingSelectorFocusable(options,node2))},isValidShadowRootTabbable=function(shadowHostNode){var tabIndex=parseInt(shadowHostNode.getAttribute("tabindex"),10);return!!(isNaN(tabIndex)||tabIndex>=0)},sortByOrder=function sortByOrder2(candidates){var regularTabbables=[], +orderedTabbables=[];return candidates.forEach(function(item,i){var isScope=!!item.scopeParent,element2=isScope?item.scopeParent:item,candidateTabindex=getSortOrderTabIndex(element2,isScope),elements=isScope?sortByOrder2(item.candidates):element2;candidateTabindex===0?isScope?regularTabbables.push.apply(regularTabbables,elements):regularTabbables.push(element2):orderedTabbables.push({documentOrder:i,tabIndex:candidateTabindex,item,isScope,content:elements})}),orderedTabbables.sort(sortOrderedTabbables). +reduce(function(acc,sortable){return sortable.isScope?acc.push.apply(acc,sortable.content):acc.push(sortable.content),acc},[]).concat(regularTabbables)},tabbable=function(container2,options){options=options||{};var candidates;return options.getShadowRoot?candidates=getCandidatesIteratively([container2],options.includeContainer,{filter:isNodeMatchingSelectorTabbable.bind(null,options),flatten:!1,getShadowRoot:options.getShadowRoot,shadowRootFilter:isValidShadowRootTabbable}):candidates=getCandidates( +container2,options.includeContainer,isNodeMatchingSelectorTabbable.bind(null,options)),sortByOrder(candidates)},focusable=function(container2,options){options=options||{};var candidates;return options.getShadowRoot?candidates=getCandidatesIteratively([container2],options.includeContainer,{filter:isNodeMatchingSelectorFocusable.bind(null,options),flatten:!0,getShadowRoot:options.getShadowRoot}):candidates=getCandidates(container2,options.includeContainer,isNodeMatchingSelectorFocusable.bind(null, +options)),candidates},isTabbable=function(node2,options){if(options=options||{},!node2)throw new Error("No node provided");return matches.call(node2,candidateSelector)===!1?!1:isNodeMatchingSelectorTabbable(options,node2)},focusableCandidateSelector=candidateSelectors.concat("iframe").join(","),isFocusable=function(node2,options){if(options=options||{},!node2)throw new Error("No node provided");return matches.call(node2,focusableCandidateSelector)===!1?!1:isNodeMatchingSelectorFocusable(options, +node2)};function getTabbableOptions(){return{getShadowRoot:!0,displayCheck:typeof ResizeObserver=="function"&&ResizeObserver.toString().includes("[native code]")?"full":"none"}}function getTabbableFrom(currentNode,direction){if(!isTabbable(currentNode,getTabbableOptions()))return getTabbableFromFocusable(currentNode,direction);const doc=getDocument$1(currentNode),allTabbable=tabbable(doc.body,getTabbableOptions());direction==="prev"&&allTabbable.reverse();const activeIndex=allTabbable.indexOf(currentNode); +return activeIndex===-1?doc.body:allTabbable.slice(activeIndex+1)[0]}function getTabbableFromFocusable(currentNode,direction){const doc=getDocument$1(currentNode);if(!isFocusable(currentNode,getTabbableOptions()))return doc.body;const allFocusable=focusable(doc.body,getTabbableOptions());direction==="prev"&&allFocusable.reverse();const activeIndex=allFocusable.indexOf(currentNode);return activeIndex===-1?doc.body:allFocusable.slice(activeIndex+1).find(node2=>isTabbable(node2,getTabbableOptions()))?? +doc.body}function next(array2,index2,loop2=!0){if(!(array2.length===0||index2<0||index2>=array2.length))return array2.length===1&&index2===0?array2[0]:index2===array2.length-1?loop2?array2[0]:void 0:array2[index2+1]}function prev(array2,index2,loop2=!0){if(!(array2.length===0||index2<0||index2>=array2.length))return array2.length===1&&index2===0?array2[0]:index2===0?loop2?array2[array2.length-1]:void 0:array2[index2-1]}function forward(array2,index2,increment2,loop2=!0){if(array2.length===0||index2< +0||index2>=array2.length)return;let targetIndex=index2+increment2;return loop2?targetIndex=(targetIndex%array2.length+array2.length)%array2.length:targetIndex=Math.max(0,Math.min(targetIndex,array2.length-1)),array2[targetIndex]}function backward(array2,index2,decrement,loop2=!0){if(array2.length===0||index2<0||index2>=array2.length)return;let targetIndex=index2-decrement;return loop2?targetIndex=(targetIndex%array2.length+array2.length)%array2.length:targetIndex=Math.max(0,Math.min(targetIndex, +array2.length-1)),array2[targetIndex]}function getNextMatch(values,search2,currentMatch){const lowerSearch=search2.toLowerCase();if(lowerSearch.endsWith(" ")){const searchWithoutSpace=lowerSearch.slice(0,-1);if(values.filter(value=>value.toLowerCase().startsWith(searchWithoutSpace)).length<=1)return getNextMatch(values,searchWithoutSpace,currentMatch);const currentMatchLowercase=currentMatch?.toLowerCase();if(currentMatchLowercase&¤tMatchLowercase.startsWith(searchWithoutSpace)&¤tMatchLowercase. +charAt(searchWithoutSpace.length)===" "&&search2.trim()===searchWithoutSpace)return currentMatch;const spacedMatches=values.filter(value=>value.toLowerCase().startsWith(lowerSearch));if(spacedMatches.length>0){const currentMatchIndex2=currentMatch?values.indexOf(currentMatch):-1;return wrapArray(spacedMatches,Math.max(currentMatchIndex2,0)).find(match=>match!==currentMatch)||currentMatch}}const normalizedSearch=search2.length>1&&Array.from(search2).every(char=>char===search2[0])?search2[0]:search2, +normalizedLowerSearch=normalizedSearch.toLowerCase(),currentMatchIndex=currentMatch?values.indexOf(currentMatch):-1;let wrappedValues=wrapArray(values,Math.max(currentMatchIndex,0));normalizedSearch.length===1&&(wrappedValues=wrappedValues.filter(v=>v!==currentMatch));const nextMatch=wrappedValues.find(value=>value?.toLowerCase().startsWith(normalizedLowerSearch));return nextMatch!==currentMatch?nextMatch:void 0}function wrapArray(array2,startIndex){return array2.map((_,index2)=>array2[(startIndex+ +index2)%array2.length])}const defaultOptions={afterMs:1e4,onChange:noop$1};function boxAutoReset(defaultValue,options){const{afterMs,onChange,getWindow:getWindow2}={...defaultOptions,...options};let timeout=null,value=state$1(proxy(defaultValue));function resetAfter(){return getWindow2().setTimeout(()=>{set$1(value,defaultValue,!0),onChange?.(defaultValue)},afterMs)}return user_effect(()=>()=>{timeout&&getWindow2().clearTimeout(timeout)}),boxWith$1(()=>get$3(value),v=>{set$1(value,v,!0),onChange?.( +v),timeout&&getWindow2().clearTimeout(timeout),timeout=resetAfter()})}class DOMTypeahead{#opts;#search;#onMatch=user_derived(()=>this.#opts.onMatch?this.#opts.onMatch:node2=>node2.focus());#getCurrentItem=user_derived(()=>this.#opts.getCurrentItem?this.#opts.getCurrentItem:this.#opts.getActiveElement);constructor(opts){this.#opts=opts,this.#search=boxAutoReset("",{afterMs:1e3,getWindow:opts.getWindow}),this.handleTypeaheadSearch=this.handleTypeaheadSearch.bind(this),this.resetTypeahead=this.resetTypeahead. +bind(this)}handleTypeaheadSearch(key2,candidates){if(!candidates.length)return;this.#search.current=this.#search.current+key2;const currentItem=get$3(this.#getCurrentItem)(),currentMatch=candidates.find(item=>item===currentItem)?.textContent?.trim()??"",values=candidates.map(item=>item.textContent?.trim()??""),nextMatch=getNextMatch(values,this.#search.current,currentMatch),newItem=candidates.find(item=>item.textContent?.trim()===nextMatch);return newItem&&get$3(this.#onMatch)(newItem),newItem}resetTypeahead(){ +this.#search.current=""}get search(){return this.#search.current}}const CONTEXT_MENU_TRIGGER_ATTR="data-context-menu-trigger",CONTEXT_MENU_CONTENT_ATTR="data-context-menu-content",MenuRootContext=new Context$1("Menu.Root"),MenuMenuContext=new Context$1("Menu.Root | Menu.Sub"),MenuContentContext=new Context$1("Menu.Content"),MenuOpenEvent=new CustomEventDispatcher("bitsmenuopen",{bubbles:!1,cancelable:!0}),menuAttrs=createBitsAttrs({component:"menu",parts:["trigger","content","sub-trigger","item", +"group","group-heading","checkbox-group","checkbox-item","radio-group","radio-item","separator","sub-content","arrow"]});class MenuSubmenuIntent{#opts;#cleanupDocMove=null;#fallbackTimer=null;#active=!1;#target=null;#apex=null;#pointerPoint=null;#launchPoint=null;constructor(opts){this.#opts=opts,watch$1([opts.triggerNode,opts.contentNode,opts.enabled],([triggerNode,contentNode,enabled])=>{if(this.#reset(),!triggerNode||!contentNode||!enabled)return;const onTriggerMove=e=>{isMouseEvent(e)&&(this.#launchPoint= +{x:e.clientX,y:e.clientY},this.#active||this.#preview(e,"content"))},onTriggerLeave=e=>{isMouseEvent(e)&&this.#engage(e,"content")},onContentMove=e=>{isMouseEvent(e)&&(this.#active||this.#preview(e,"trigger"))},onContentLeave=e=>{if(isMouseEvent(e)){if(isElement$1(e.relatedTarget)){const selector=this.#opts.subContentSelector(),matchedSubContent=e.relatedTarget.closest(selector);if(matchedSubContent&&matchedSubContent!==contentNode&&matchedSubContent.id&&!!contentNode.querySelector(`[aria-contro\ +ls="${matchedSubContent.id}"]`))return}this.#engage(e,"trigger")}},onTriggerEnter=e=>{isMouseEvent(e)&&this.#disengage()},onContentEnter=e=>{isMouseEvent(e)&&this.#disengage()};return triggerNode.addEventListener("pointermove",onTriggerMove),triggerNode.addEventListener("pointerleave",onTriggerLeave),triggerNode.addEventListener("pointerenter",onTriggerEnter),contentNode.addEventListener("pointermove",onContentMove),contentNode.addEventListener("pointerleave",onContentLeave),contentNode.addEventListener( +"pointerenter",onContentEnter),()=>{triggerNode.removeEventListener("pointermove",onTriggerMove),triggerNode.removeEventListener("pointerleave",onTriggerLeave),triggerNode.removeEventListener("pointerenter",onTriggerEnter),contentNode.removeEventListener("pointermove",onContentMove),contentNode.removeEventListener("pointerleave",onContentLeave),contentNode.removeEventListener("pointerenter",onContentEnter),this.#reset()}}),onDestroyEffect(()=>{this.#reset()})}#parentTargetRect(){const parent=this.#opts. +parentContentNode();return parent?parent.getBoundingClientRect():this.#opts.triggerNode()?.getBoundingClientRect()??null}#computePolygons(pointerPt,target2){const triggerNode=this.#opts.triggerNode(),contentNode=this.#opts.contentNode();if(!triggerNode||!contentNode)return null;const triggerRect=triggerNode.getBoundingClientRect(),contentRect=contentNode.getBoundingClientRect(),side=getSide$2(triggerRect,contentRect);let apex,targetRect,sourceRect;return target2==="content"?(apex=this.#active?this.#apex?? +pointerPt:pointerPt,targetRect=contentRect):(apex=this.#launchPoint??pointerPt,targetRect=this.#parentTargetRect()??triggerRect,sourceRect=contentRect),this.#apex=apex,{corridor:getCorridorPolygon(triggerRect,contentRect,side),intent:getIntentPolygon(apex,targetRect,side,target2,sourceRect),targetRect,side}}#isInSafeZone(pt,corridor,intent){return isPointInPolygon$1(pt,corridor)||isPointInPolygon$1(pt,intent)}#preview(e,target2){const pt={x:e.clientX,y:e.clientY};this.#computePolygons(pt,target2)&& +(this.#target=target2,this.#pointerPoint=pt)}#engage(e,target2){if(!this.#opts.enabled())return;const triggerNode=this.#opts.triggerNode(),contentNode=this.#opts.contentNode();if(!triggerNode||!contentNode)return;const related=e.relatedTarget;if(isElement$1(related)&&(target2==="content"&&contentNode.contains(related)||target2==="trigger"&&triggerNode.contains(related)))return;const pt={x:e.clientX,y:e.clientY},geo=this.#computePolygons(pt,target2);if(geo){if(!isInsideRect$1(pt,geo.targetRect)&& +!this.#isInSafeZone(pt,geo.corridor,geo.intent)){this.#clearVisuals();return}this.#active=!0,this.#target=target2,this.#pointerPoint=pt,this.#opts.setIsPointerInTransit(!0),this.#attachDocMove(),this.#startFallback()}}#disengageTimer=null;#disengage(){if(!this.#active)return;const wasReturning=this.#target==="trigger";this.#detachDocMove(),this.#clearFallback(),this.#active=!1,this.#clearVisuals(),wasReturning?(this.#clearDisengageTimer(),this.#disengageTimer=setTimeout(()=>{this.#disengageTimer= +null,this.#opts.setIsPointerInTransit(!1)},100)):this.#opts.setIsPointerInTransit(!1)}#clearDisengageTimer(){this.#disengageTimer!==null&&(clearTimeout(this.#disengageTimer),this.#disengageTimer=null)}#intentExit(){const pointerPoint=this.#pointerPoint;this.#detachDocMove(),this.#clearFallback(),this.#clearDisengageTimer(),this.#active=!1,this.#opts.setIsPointerInTransit(!1),this.#clearVisuals(),this.#opts.onIntentExit(pointerPoint)}#reset(){this.#detachDocMove(),this.#clearFallback(),this.#clearDisengageTimer(), +this.#active&&this.#opts.setIsPointerInTransit(!1),this.#active=!1,this.#target=null,this.#apex=null,this.#pointerPoint=null,this.#launchPoint=null}#isPointerInDescendantSubContent(pt){const contentNode=this.#opts.contentNode();if(!contentNode)return!1;const el=contentNode.ownerDocument.elementFromPoint(pt.x,pt.y);if(!el)return!1;const selector=this.#opts.subContentSelector(),subContent=el.closest(selector);return!subContent||subContent===contentNode?!1:subContent.id?!!contentNode.querySelector( +`[aria-controls="${subContent.id}"]`):!1}#onDocMove=e=>{if(!this.#active||!this.#target||!isMouseEvent(e))return;const triggerNode=this.#opts.triggerNode(),contentNode=this.#opts.contentNode();if(!triggerNode||!contentNode){this.#intentExit();return}this.#clearFallback();const pt={x:e.clientX,y:e.clientY};this.#pointerPoint=pt;const triggerRect=triggerNode.getBoundingClientRect(),contentRect=contentNode.getBoundingClientRect();if(this.#target==="content"&&isInsideRect$1(pt,contentRect)){this.#disengage(); +return}if(this.#target==="trigger"&&isInsideInsetRect(pt,triggerRect,4)){this.#disengage();return}if(this.#isPointerInDescendantSubContent(pt)){this.#startFallback();return}const geo=this.#computePolygons(pt,this.#target);if(!geo){this.#intentExit();return}if(this.#isInSafeZone(pt,geo.corridor,geo.intent)){this.#startFallback();return}this.#intentExit()};#attachDocMove(){if(this.#cleanupDocMove)return;const doc=getDocument$1(this.#opts.triggerNode()??this.#opts.contentNode());doc&&(doc.addEventListener( +"pointermove",this.#onDocMove,!0),this.#cleanupDocMove=()=>{doc.removeEventListener("pointermove",this.#onDocMove,!0),this.#cleanupDocMove=null})}#detachDocMove(){this.#cleanupDocMove?.()}#startFallback(){this.#clearFallback(),this.#fallbackTimer=setTimeout(()=>{this.#fallbackTimer=null,this.#active&&this.#intentExit()},500)}#clearFallback(){this.#fallbackTimer!==null&&(clearTimeout(this.#fallbackTimer),this.#fallbackTimer=null)}#clearVisuals(){this.#target=null,this.#apex=null,this.#pointerPoint= +null}}function isPointInPolygon$1(point2,polygon){const{x,y}=point2;let inside=!1;for(let i=0,j=polygon.length-1;i<polygon.length;j=i++){const xi=polygon[i].x,yi=polygon[i].y,xj=polygon[j].x,yj=polygon[j].y;yi>y!=yj>y&&x<(xj-xi)*(y-yi)/(yj-yi)+xi&&(inside=!inside)}return inside}function isInsideRect$1(point2,rect){return point2.x>=rect.left&&point2.x<=rect.right&&point2.y>=rect.top&&point2.y<=rect.bottom}function isInsideInsetRect(point2,rect,inset){return point2.x>=rect.left+inset&&point2.x<=rect. +right-inset&&point2.y>=rect.top+inset&&point2.y<=rect.bottom-inset}function getSide$2(triggerRect,contentRect){const triggerCenterX=triggerRect.left+triggerRect.width/2,triggerCenterY=triggerRect.top+triggerRect.height/2,contentCenterX=contentRect.left+contentRect.width/2,contentCenterY=contentRect.top+contentRect.height/2,deltaX=contentCenterX-triggerCenterX,deltaY=contentCenterY-triggerCenterY;return Math.abs(deltaX)>Math.abs(deltaY)?deltaX>0?"right":"left":deltaY>0?"bottom":"top"}function getCorridorPolygon(triggerRect,contentRect,side){ +switch(side){case"top":return[{x:Math.min(triggerRect.left,contentRect.left)-2,y:triggerRect.top},{x:Math.min(triggerRect.left,contentRect.left)-2,y:contentRect.bottom},{x:Math.max(triggerRect.right,contentRect.right)+2,y:contentRect.bottom},{x:Math.max(triggerRect.right,contentRect.right)+2,y:triggerRect.top}];case"bottom":return[{x:Math.min(triggerRect.left,contentRect.left)-2,y:triggerRect.bottom},{x:Math.min(triggerRect.left,contentRect.left)-2,y:contentRect.top},{x:Math.max(triggerRect.right, +contentRect.right)+2,y:contentRect.top},{x:Math.max(triggerRect.right,contentRect.right)+2,y:triggerRect.bottom}];case"left":return[{x:triggerRect.left,y:Math.min(triggerRect.top,contentRect.top)-2},{x:contentRect.right,y:Math.min(triggerRect.top,contentRect.top)-2},{x:contentRect.right,y:Math.max(triggerRect.bottom,contentRect.bottom)+2},{x:triggerRect.left,y:Math.max(triggerRect.bottom,contentRect.bottom)+2}];case"right":return[{x:triggerRect.right,y:Math.min(triggerRect.top,contentRect.top)-2}, +{x:contentRect.left,y:Math.min(triggerRect.top,contentRect.top)-2},{x:contentRect.left,y:Math.max(triggerRect.bottom,contentRect.bottom)+2},{x:triggerRect.right,y:Math.max(triggerRect.bottom,contentRect.bottom)+2}]}}function getIntentPolygon(exitPoint,targetRect,side,target2,sourceRect){const effectiveSide=target2==="trigger"?flipSide(side):side,top=sourceRect?Math.min(targetRect.top,sourceRect.top)-8:targetRect.top-8,bottom=sourceRect?Math.max(targetRect.bottom,sourceRect.bottom)+8:targetRect.bottom+ +8,left=sourceRect?Math.min(targetRect.left,sourceRect.left)-8:targetRect.left-8,right=sourceRect?Math.max(targetRect.right,sourceRect.right)+8:targetRect.right+8;switch(effectiveSide){case"right":return[exitPoint,{x:targetRect.left,y:top},{x:targetRect.left,y:bottom}];case"left":return[exitPoint,{x:targetRect.right,y:top},{x:targetRect.right,y:bottom}];case"bottom":return[exitPoint,{x:left,y:targetRect.top},{x:right,y:targetRect.top}];case"top":return[exitPoint,{x:left,y:targetRect.bottom},{x:right, +y:targetRect.bottom}]}}function flipSide(side){switch(side){case"top":return"bottom";case"bottom":return"top";case"left":return"right";case"right":return"left"}}class MenuRootState{static create(opts){const root2=new MenuRootState(opts);return MenuRootContext.set(root2)}opts;isUsingKeyboard=new IsUsingKeyboard;#ignoreCloseAutoFocus=state$1(!1);get ignoreCloseAutoFocus(){return get$3(this.#ignoreCloseAutoFocus)}set ignoreCloseAutoFocus(value){set$1(this.#ignoreCloseAutoFocus,value,!0)}#isPointerInTransit=state$1( +!1);get isPointerInTransit(){return get$3(this.#isPointerInTransit)}set isPointerInTransit(value){set$1(this.#isPointerInTransit,value,!0)}constructor(opts){this.opts=opts}getBitsAttr=part=>menuAttrs.getAttr(part,this.opts.variant.current)}class MenuMenuState{static create(opts,root2){return MenuMenuContext.set(new MenuMenuState(opts,root2,null))}opts;root;parentMenu;contentId=boxWith$1(()=>"");#contentNode=state$1(null);get contentNode(){return get$3(this.#contentNode)}set contentNode(value){set$1( +this.#contentNode,value,!0)}contentPresence;#triggerNode=state$1(null);get triggerNode(){return get$3(this.#triggerNode)}set triggerNode(value){set$1(this.#triggerNode,value,!0)}constructor(opts,root2,parentMenu){this.opts=opts,this.root=root2,this.parentMenu=parentMenu,this.contentPresence=new PresenceManager({ref:boxWith$1(()=>this.contentNode),open:this.opts.open,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)},shouldSkipExitAnimation:()=>this.root.opts.variant. +current!=="menubar"||this.parentMenu!==null?!1:this.root.opts.shouldSkipExitAnimation?.()??!1}),parentMenu&&watch$1(()=>parentMenu.opts.open.current,()=>{parentMenu.opts.open.current||(this.opts.open.current=!1)})}toggleOpen(){this.opts.open.current=!this.opts.open.current}onOpen(){this.opts.open.current=!0}onClose(){this.opts.open.current=!1}}class MenuContentState{static create(opts){return MenuContentContext.set(new MenuContentState(opts,MenuMenuContext.get()))}opts;parentMenu;rovingFocusGroup;domContext;attachment;#search=state$1( +"");get search(){return get$3(this.#search)}set search(value){set$1(this.#search,value,!0)}#timer=0;#handleTypeaheadSearch;#mounted=state$1(!1);get mounted(){return get$3(this.#mounted)}set mounted(value){set$1(this.#mounted,value,!0)}#isSub;constructor(opts,parentMenu){this.opts=opts,this.parentMenu=parentMenu,this.domContext=new DOMContext(opts.ref),this.attachment=attachRef(this.opts.ref,v=>{this.parentMenu.contentNode!==v&&(this.parentMenu.contentNode=v)}),parentMenu.contentId=opts.id,this.#isSub= +opts.isSub??!1,this.onkeydown=this.onkeydown.bind(this),this.onblur=this.onblur.bind(this),this.onfocus=this.onfocus.bind(this),this.handleInteractOutside=this.handleInteractOutside.bind(this),new MenuSubmenuIntent({contentNode:()=>this.parentMenu.contentNode,triggerNode:()=>this.parentMenu.triggerNode,parentContentNode:()=>this.parentMenu.parentMenu?.contentNode??null,subContentSelector:()=>`[${this.parentMenu.root.getBitsAttr("sub-content")}]`,enabled:()=>this.parentMenu.opts.open.current&&!!this. +parentMenu.triggerNode?.hasAttribute(this.parentMenu.root.getBitsAttr("sub-trigger")),onIntentExit:pointerPoint=>{this.parentMenu.opts.open.current=!1,this.#dispatchPointerMoveToHoveredSubTrigger(pointerPoint)},setIsPointerInTransit:value=>{this.parentMenu.root.isPointerInTransit=value}}),this.#handleTypeaheadSearch=new DOMTypeahead({getActiveElement:()=>this.domContext.getActiveElement(),getWindow:()=>this.domContext.getWindow()}).handleTypeaheadSearch,this.rovingFocusGroup=new RovingFocusGroup( +{rootNode:boxWith$1(()=>this.parentMenu.contentNode),candidateAttr:this.parentMenu.root.getBitsAttr("item"),loop:this.opts.loop,orientation:boxWith$1(()=>"vertical")}),watch$1(()=>this.parentMenu.contentNode,contentNode=>{if(!contentNode)return;const handler=()=>{afterTick(()=>{this.parentMenu.root.isUsingKeyboard.current&&this.rovingFocusGroup.focusFirstCandidate()})};return MenuOpenEvent.listen(contentNode,handler)}),user_effect(()=>{this.parentMenu.opts.open.current||this.domContext.getWindow(). +clearTimeout(this.#timer)})}#getCandidateNodes(){const node2=this.parentMenu.contentNode;return node2?Array.from(node2.querySelectorAll(`[${this.parentMenu.root.getBitsAttr("item")}]:not([data-disabled])`)):[]}#isPointerMovingToSubmenu(){return this.parentMenu.root.isPointerInTransit}#dispatchPointerMoveToHoveredSubTrigger(pointerPoint){if(!pointerPoint)return;const parentContentNode=this.parentMenu.parentMenu?.contentNode;if(!parentContentNode)return;const hoveredNode=this.domContext.getDocument(). +elementFromPoint(pointerPoint.x,pointerPoint.y);if(!isElement$1(hoveredNode))return;const hoveredSubTrigger=hoveredNode.closest(`[${this.parentMenu.root.getBitsAttr("sub-trigger")}]`);!hoveredSubTrigger||!parentContentNode.contains(hoveredSubTrigger)||hoveredSubTrigger!==this.parentMenu.triggerNode&&hoveredSubTrigger.dispatchEvent(new PointerEvent("pointermove",{bubbles:!0,cancelable:!0,pointerType:"mouse",clientX:pointerPoint.x,clientY:pointerPoint.y}))}onCloseAutoFocus=e=>{if(this.opts.onCloseAutoFocus. +current?.(e),!(e.defaultPrevented||this.#isSub)){if(this.parentMenu.root.ignoreCloseAutoFocus){e.preventDefault();return}this.parentMenu.triggerNode&&isTabbable(this.parentMenu.triggerNode)&&(e.preventDefault(),this.parentMenu.triggerNode.focus())}};handleTabKeyDown(e){let rootMenu=this.parentMenu;for(;rootMenu.parentMenu!==null;)rootMenu=rootMenu.parentMenu;if(!rootMenu.triggerNode)return;e.preventDefault();const nodeToFocus=getTabbableFrom(rootMenu.triggerNode,e.shiftKey?"prev":"next");nodeToFocus? +(this.parentMenu.root.ignoreCloseAutoFocus=!0,rootMenu.onClose(),afterTick(()=>{nodeToFocus.focus(),afterTick(()=>{this.parentMenu.root.ignoreCloseAutoFocus=!1})})):this.domContext.getDocument().body.focus()}onkeydown(e){if(e.defaultPrevented)return;if(e.key===TAB){this.handleTabKeyDown(e);return}const target2=e.target,currentTarget=e.currentTarget;if(!isHTMLElement$1(target2)||!isHTMLElement$1(currentTarget))return;const isKeydownInside=target2.closest(`[${this.parentMenu.root.getBitsAttr("cont\ +ent")}]`)?.id===this.parentMenu.contentId.current,isModifierKey=e.ctrlKey||e.altKey||e.metaKey,isCharacterKey=e.key.length===1;if(this.rovingFocusGroup.handleKeydown(target2,e)||e.code==="Space")return;const candidateNodes=this.#getCandidateNodes();isKeydownInside&&!isModifierKey&&isCharacterKey&&this.#handleTypeaheadSearch(e.key,candidateNodes),e.target?.id===this.parentMenu.contentId.current&&FIRST_LAST_KEYS$1.includes(e.key)&&(e.preventDefault(),LAST_KEYS$1.includes(e.key)&&candidateNodes.reverse(), +focusFirst(candidateNodes,{select:!1},()=>this.domContext.getActiveElement()))}onblur(e){isElement$1(e.currentTarget)&&isElement$1(e.target)&&(e.currentTarget.contains?.(e.target)||(this.domContext.getWindow().clearTimeout(this.#timer),this.search=""))}onfocus(_){this.parentMenu.root.isUsingKeyboard.current&&afterTick(()=>this.rovingFocusGroup.focusFirstCandidate())}onItemEnter(){return this.#isPointerMovingToSubmenu()}onItemLeave(e){if(e.currentTarget.hasAttribute(this.parentMenu.root.getBitsAttr( +"sub-trigger"))||this.#isPointerMovingToSubmenu()||this.parentMenu.root.isUsingKeyboard.current)return;this.parentMenu.contentNode?.focus(),this.rovingFocusGroup.setCurrentTabStopId("")}onTriggerLeave(){return!!this.#isPointerMovingToSubmenu()}handleInteractOutside(e){if(!isElementOrSVGElement(e.target))return;const triggerId=this.parentMenu.triggerNode?.id;if(e.target.id===triggerId){e.preventDefault();return}if(e.target.closest(`#${triggerId}`)){e.preventDefault();return}this.parentMenu.root.ignoreCloseAutoFocus= +!0,afterTick(()=>{this.parentMenu.root.ignoreCloseAutoFocus=!1})}get shouldRender(){return this.parentMenu.contentPresence.shouldRender}#snippetProps=user_derived(()=>({open:this.parentMenu.opts.open.current}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,role:"menu","aria-orientation":"vertical",[this.parentMenu.root.getBitsAttr("content")]:"","data-state":getDataOpenClosed(this.parentMenu. +opts.open.current),...getDataTransitionAttrs(this.parentMenu.contentPresence.transitionStatus),onkeydown:this.onkeydown,onblur:this.onblur,onfocus:this.onfocus,dir:this.parentMenu.root.opts.dir.current,style:{pointerEvents:"auto",contain:"layout style"},...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}popperProps={onCloseAutoFocus:e=>this.onCloseAutoFocus(e)}}class MenuItemSharedState{opts;content;attachment;#isFocused=state$1(!1);constructor(opts,content2){ +this.opts=opts,this.content=content2,this.attachment=attachRef(this.opts.ref),this.onpointermove=this.onpointermove.bind(this),this.onpointerleave=this.onpointerleave.bind(this),this.onfocus=this.onfocus.bind(this),this.onblur=this.onblur.bind(this)}onpointermove(e){if(!e.defaultPrevented&&isMouseEvent(e))if(this.opts.disabled.current)this.content.onItemLeave(e);else{if(this.content.onItemEnter())return;const item=e.currentTarget;if(!isHTMLElement$1(item))return;item.focus()}}onpointerleave(e){e. +defaultPrevented||isMouseEvent(e)&&this.content.onItemLeave(e)}onfocus(e){afterTick(()=>{e.defaultPrevented||this.opts.disabled.current||set$1(this.#isFocused,!0)})}onblur(e){afterTick(()=>{e.defaultPrevented||set$1(this.#isFocused,!1)})}#props=user_derived(()=>({id:this.opts.id.current,tabindex:-1,role:"menuitem","aria-disabled":boolToStr(this.opts.disabled.current),"data-disabled":boolToEmptyStrOrUndef(this.opts.disabled.current),"data-highlighted":get$3(this.#isFocused)?"":void 0,[this.content. +parentMenu.root.getBitsAttr("item")]:"",onpointermove:this.onpointermove,onpointerleave:this.onpointerleave,onfocus:this.onfocus,onblur:this.onblur,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class MenuItemState{static create(opts){const item=new MenuItemSharedState(opts,MenuContentContext.get());return new MenuItemState(opts,item)}opts;item;root;#isPointerDown=!1;constructor(opts,item){this.opts=opts,this.item=item,this.root=item.content. +parentMenu.root,this.onkeydown=this.onkeydown.bind(this),this.onclick=this.onclick.bind(this),this.onpointerdown=this.onpointerdown.bind(this),this.onpointerup=this.onpointerup.bind(this)}#handleSelect(){if(this.item.opts.disabled.current)return;const selectEvent=new CustomEvent("menuitemselect",{bubbles:!0,cancelable:!0});if(this.opts.onSelect.current(selectEvent),selectEvent.defaultPrevented){this.item.content.parentMenu.root.isUsingKeyboard.current=!1;return}this.opts.closeOnSelect.current&&this. +item.content.parentMenu.root.opts.onClose()}onkeydown(e){const isTypingAhead=this.item.content.search!=="";if(!(this.item.opts.disabled.current||isTypingAhead&&e.key===SPACE)&&SELECTION_KEYS.includes(e.key)){if(!isHTMLElement$1(e.currentTarget))return;e.currentTarget.click(),e.preventDefault()}}onclick(_){this.item.opts.disabled.current||this.#handleSelect()}onpointerup(e){if(!e.defaultPrevented&&!this.#isPointerDown){if(!isHTMLElement$1(e.currentTarget))return;e.currentTarget?.click()}}onpointerdown(_){ +this.#isPointerDown=!0}#props=user_derived(()=>mergeProps(this.item.props,{onclick:this.onclick,onpointerdown:this.onpointerdown,onpointerup:this.onpointerup,onkeydown:this.onkeydown}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class MenuSubTriggerState{static create(opts){const content2=MenuContentContext.get(),item=new MenuItemSharedState(opts,content2),submenu=MenuMenuContext.get();return new MenuSubTriggerState(opts,item,content2,submenu)}opts;item;content;submenu;attachment;#openTimer=null;constructor(opts,item,content2,submenu){ +this.opts=opts,this.item=item,this.content=content2,this.submenu=submenu,this.attachment=attachRef(this.opts.ref,v=>this.submenu.triggerNode=v),this.onpointerleave=this.onpointerleave.bind(this),this.onpointermove=this.onpointermove.bind(this),this.onkeydown=this.onkeydown.bind(this),this.onclick=this.onclick.bind(this),onDestroyEffect(()=>{this.#clearOpenTimer()})}#clearOpenTimer(){this.#openTimer!==null&&(this.content.domContext.getWindow().clearTimeout(this.#openTimer),this.#openTimer=null)}onpointermove(e){ +if(isMouseEvent(e)){if(this.submenu.root.isPointerInTransit){this.#openTimer!==null&&this.#clearOpenTimer();return}if(!this.item.opts.disabled.current&&!this.submenu.opts.open.current&&!this.#openTimer){const openDelay=this.opts.openDelay.current;if(openDelay<=0){this.submenu.onOpen();return}this.#openTimer=this.content.domContext.setTimeout(()=>{if(this.submenu.root.isPointerInTransit){this.#clearOpenTimer();return}this.submenu.onOpen(),this.#clearOpenTimer()},openDelay)}}}onpointerleave(e){isMouseEvent( +e)&&this.#clearOpenTimer()}onkeydown(e){const isTypingAhead=this.content.search!=="";this.item.opts.disabled.current||isTypingAhead&&e.key===SPACE||SUB_OPEN_KEYS[this.submenu.root.opts.dir.current].includes(e.key)&&(e.currentTarget.click(),e.preventDefault())}onclick(e){if(this.item.opts.disabled.current||!isHTMLElement$1(e.currentTarget))return;e.currentTarget.focus();const selectEvent=new CustomEvent("menusubtriggerselect",{bubbles:!0,cancelable:!0});this.opts.onSelect.current(selectEvent),this. +submenu.opts.open.current||(this.submenu.onOpen(),afterTick(()=>{const contentNode=this.submenu.contentNode;contentNode&&MenuOpenEvent.dispatch(contentNode)}))}#props=user_derived(()=>mergeProps({"aria-haspopup":"menu","aria-expanded":boolToStr(this.submenu.opts.open.current),"data-state":getDataOpenClosed(this.submenu.opts.open.current),"aria-controls":this.submenu.opts.open.current?this.submenu.contentId.current:void 0,[this.submenu.root.getBitsAttr("sub-trigger")]:"",onclick:this.onclick,onpointermove:this. +onpointermove,onpointerleave:this.onpointerleave,onkeydown:this.onkeydown,...this.attachment},this.item.props));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class MenuSeparatorState{static create(opts){return new MenuSeparatorState(opts,MenuRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref)}#props=user_derived(()=>({id:this.opts.id.current,role:"group",[this.root.getBitsAttr("\ +separator")]:"",...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class DropdownMenuTriggerState{static create(opts){return new DropdownMenuTriggerState(opts,MenuMenuContext.get())}opts;parentMenu;attachment;constructor(opts,parentMenu){this.opts=opts,this.parentMenu=parentMenu,this.attachment=attachRef(this.opts.ref,v=>this.parentMenu.triggerNode=v)}onclick=e=>{this.opts.disabled.current||e.detail!==0||(this.parentMenu.toggleOpen(),e.preventDefault())};onpointerdown=e=>{ +if(!this.opts.disabled.current){if(e.pointerType==="touch")return e.preventDefault();e.button===0&&e.ctrlKey===!1&&(this.parentMenu.toggleOpen(),this.parentMenu.opts.open.current||e.preventDefault())}};onpointerup=e=>{this.opts.disabled.current||e.pointerType==="touch"&&(e.preventDefault(),this.parentMenu.toggleOpen())};onkeydown=e=>{if(!this.opts.disabled.current){if(e.key===SPACE||e.key===ENTER){this.parentMenu.toggleOpen(),e.preventDefault();return}e.key===ARROW_DOWN&&(this.parentMenu.onOpen(), +e.preventDefault())}};#ariaControls=user_derived(()=>{if(this.parentMenu.opts.open.current&&this.parentMenu.contentId.current)return this.parentMenu.contentId.current});#props=user_derived(()=>({id:this.opts.id.current,disabled:this.opts.disabled.current,"aria-haspopup":"menu","aria-expanded":boolToStr(this.parentMenu.opts.open.current),"aria-controls":get$3(this.#ariaControls),"data-disabled":boolToEmptyStrOrUndef(this.opts.disabled.current),"data-state":getDataOpenClosed(this.parentMenu.opts.open. +current),[this.parentMenu.root.getBitsAttr("trigger")]:"",onclick:this.onclick,onpointerdown:this.onpointerdown,onpointerup:this.onpointerup,onkeydown:this.onkeydown,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class MenuSubmenuState{static create(opts){const menu=MenuMenuContext.get();return MenuMenuContext.set(new MenuMenuState(opts,menu.root,menu))}}globalThis.bitsDismissableLayers??=new Map;class DismissibleLayerState{static create(opts){ +return new DismissibleLayerState(opts)}opts;#interactOutsideProp;#behaviorType;#interceptedEvents={pointerdown:!1};#isResponsibleLayer=!1;#isFocusInsideDOMTree=!1;#documentObj=void 0;#onFocusOutside;#unsubClickListener=noop$1;constructor(opts){this.opts=opts,this.#behaviorType=opts.interactOutsideBehavior,this.#interactOutsideProp=opts.onInteractOutside,this.#onFocusOutside=opts.onFocusOutside,user_effect(()=>{this.#documentObj=getOwnerDocument(this.opts.ref.current)});let unsubEvents=noop$1;const cleanup=()=>{ +this.#resetState(),globalThis.bitsDismissableLayers.delete(this),this.#handleInteractOutside.destroy(),unsubEvents()};watch$1([()=>this.opts.enabled.current,()=>this.opts.ref.current],()=>{if(!(!this.opts.enabled.current||!this.opts.ref.current))return afterSleep(1,()=>{this.opts.ref.current&&(globalThis.bitsDismissableLayers.set(this,this.#behaviorType),unsubEvents(),unsubEvents=this.#addEventListeners())}),cleanup}),onDestroyEffect(()=>{this.#resetState.destroy(),globalThis.bitsDismissableLayers. +delete(this),this.#handleInteractOutside.destroy(),this.#unsubClickListener(),unsubEvents()})}#handleFocus=event2=>{event2.defaultPrevented||this.opts.ref.current&&afterTick(()=>{!this.opts.ref.current||this.#isTargetWithinLayer(event2.target)||event2.target&&!this.#isFocusInsideDOMTree&&this.#onFocusOutside.current?.(event2)})};#addEventListeners(){return executeCallbacks(on(this.#documentObj,"pointerdown",executeCallbacks(this.#markInterceptedEvent,this.#markResponsibleLayer),{capture:!0}),on( +this.#documentObj,"pointerdown",executeCallbacks(this.#markNonInterceptedEvent,this.#handleInteractOutside)),on(this.#documentObj,"focusin",this.#handleFocus))}#handleDismiss=e=>{let event2=e;event2.defaultPrevented&&(event2=createWrappedEvent(e)),this.#interactOutsideProp.current(e)};#handleInteractOutside=debounce$1(e=>{if(!this.opts.ref.current){this.#unsubClickListener();return}const isEventValid=this.opts.isValidEvent.current(e,this.opts.ref.current)||isValidEvent(e,this.opts.ref.current);if(!this.#isResponsibleLayer|| +this.#isAnyEventIntercepted()||!isEventValid){this.#unsubClickListener();return}let event2=e;if(event2.defaultPrevented&&(event2=createWrappedEvent(event2)),this.#behaviorType.current!=="close"&&this.#behaviorType.current!=="defer-otherwise-close"){this.#unsubClickListener();return}e.pointerType==="touch"?(this.#unsubClickListener(),this.#unsubClickListener=on(this.#documentObj,"click",this.#handleDismiss,{once:!0})):this.#interactOutsideProp.current(event2)},10);#markInterceptedEvent=e=>{this.#interceptedEvents[e. +type]=!0};#markNonInterceptedEvent=e=>{this.#interceptedEvents[e.type]=!1};#markResponsibleLayer=()=>{this.opts.ref.current&&(this.#isResponsibleLayer=isResponsibleLayer(this.opts.ref.current))};#isTargetWithinLayer=target2=>this.opts.ref.current?isOrContainsTarget(this.opts.ref.current,target2):!1;#resetState=debounce$1(()=>{for(const eventType in this.#interceptedEvents)this.#interceptedEvents[eventType]=!1;this.#isResponsibleLayer=!1},20);#isAnyEventIntercepted(){return Object.values(this.#interceptedEvents). +some(Boolean)}#onfocuscapture=()=>{this.#isFocusInsideDOMTree=!0};#onblurcapture=()=>{this.#isFocusInsideDOMTree=!1};props={onfocuscapture:this.#onfocuscapture,onblurcapture:this.#onblurcapture}}function getTopMostDismissableLayer(layersArr=[...globalThis.bitsDismissableLayers]){return layersArr.findLast(([_,{current:behaviorType}])=>behaviorType==="close"||behaviorType==="ignore")}function isResponsibleLayer(node2){const layersArr=[...globalThis.bitsDismissableLayers],topMostLayer=getTopMostDismissableLayer( +layersArr);if(topMostLayer)return topMostLayer[0].opts.ref.current===node2;const[firstLayerNode]=layersArr[0];return firstLayerNode.opts.ref.current===node2}function isValidEvent(e,node2){const target2=e.target;if(!isElementOrSVGElement(target2))return!1;const targetIsContextMenuTrigger=!!target2.closest(`[${CONTEXT_MENU_TRIGGER_ATTR}]`),nodeIsContextMenu=!!node2.closest(`[${CONTEXT_MENU_CONTENT_ATTR}]`);return"button"in e&&e.button>0&&!targetIsContextMenuTrigger?!1:"button"in e&&e.button===0&&targetIsContextMenuTrigger&& +nodeIsContextMenu?!0:targetIsContextMenuTrigger&&nodeIsContextMenu?!1:getOwnerDocument(target2).documentElement.contains(target2)&&!isOrContainsTarget(node2,target2)&&isClickTrulyOutside(e,node2)}function createWrappedEvent(e){const capturedCurrentTarget=e.currentTarget,capturedTarget=e.target;let newEvent;e instanceof PointerEvent?newEvent=new PointerEvent(e.type,e):newEvent=new PointerEvent("pointerdown",e);let isPrevented=!1;return new Proxy(newEvent,{get:(target2,prop2)=>prop2==="currentTarg\ +et"?capturedCurrentTarget:prop2==="target"?capturedTarget:prop2==="preventDefault"?()=>{isPrevented=!0,typeof target2.preventDefault=="function"&&target2.preventDefault()}:prop2==="defaultPrevented"?isPrevented:prop2 in target2?target2[prop2]:e[prop2]})}function Dismissible_layer($$anchor,$$props){push$1($$props,!0);let interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"close"),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),onFocusOutside=prop($$props,"onFocusOutside", +3,noop$1),isValidEvent2=prop($$props,"isValidEvent",3,()=>!1);const dismissibleLayerState=DismissibleLayerState.create({id:boxWith$1(()=>$$props.id),interactOutsideBehavior:boxWith$1(()=>interactOutsideBehavior()),onInteractOutside:boxWith$1(()=>onInteractOutside()),enabled:boxWith$1(()=>$$props.enabled),onFocusOutside:boxWith$1(()=>onFocusOutside()),isValidEvent:boxWith$1(()=>isValidEvent2()),ref:$$props.ref});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children?? +noop$3,()=>({props:dismissibleLayerState.props})),append($$anchor,fragment),pop()}globalThis.bitsEscapeLayers??=new Map;class EscapeLayerState{static create(opts){return new EscapeLayerState(opts)}opts;domContext;constructor(opts){this.opts=opts,this.domContext=new DOMContext(this.opts.ref);let unsubEvents=noop$1;watch$1(()=>opts.enabled.current,enabled=>(enabled&&(globalThis.bitsEscapeLayers.set(this,opts.escapeKeydownBehavior),unsubEvents=this.#addEventListener()),()=>{unsubEvents(),globalThis. +bitsEscapeLayers.delete(this)}))}#addEventListener=()=>on(this.domContext.getDocument(),"keydown",this.#onkeydown,{passive:!1});#onkeydown=e=>{if(e.key!==ESCAPE||!isResponsibleEscapeLayer(this))return;const clonedEvent=new KeyboardEvent(e.type,e);e.preventDefault();const behaviorType=this.opts.escapeKeydownBehavior.current;behaviorType!=="close"&&behaviorType!=="defer-otherwise-close"||this.opts.onEscapeKeydown.current(clonedEvent)}}function isResponsibleEscapeLayer(instance){const layersArr=[...globalThis. +bitsEscapeLayers],topMostLayer=layersArr.findLast(([_,{current:behaviorType}])=>behaviorType==="close"||behaviorType==="ignore");if(topMostLayer)return topMostLayer[0]===instance;const[firstLayerNode]=layersArr[0];return firstLayerNode===instance}function Escape_layer($$anchor,$$props){push$1($$props,!0);let escapeKeydownBehavior=prop($$props,"escapeKeydownBehavior",3,"close"),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1);EscapeLayerState.create({escapeKeydownBehavior:boxWith$1(()=>escapeKeydownBehavior()), +onEscapeKeydown:boxWith$1(()=>onEscapeKeydown()),enabled:boxWith$1(()=>$$props.enabled),ref:$$props.ref});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}class FocusScopeManager{static instance;#scopeStack=simpleBox([]);#focusHistory=new WeakMap;#preFocusHistory=new WeakMap;static getInstance(){return this.instance||(this.instance=new FocusScopeManager),this.instance}register(scope2){const current2=this.getActive(); +current2&¤t2!==scope2&¤t2.pause();const activeElement=document.activeElement;activeElement&&activeElement!==document.body&&this.#preFocusHistory.set(scope2,activeElement),this.#scopeStack.current=this.#scopeStack.current.filter(s2=>s2!==scope2),this.#scopeStack.current.unshift(scope2)}unregister(scope2){this.#scopeStack.current=this.#scopeStack.current.filter(s2=>s2!==scope2);const next2=this.getActive();next2&&next2.resume()}getActive(){return this.#scopeStack.current[0]}setFocusMemory(scope2,element2){ +this.#focusHistory.set(scope2,element2)}getFocusMemory(scope2){return this.#focusHistory.get(scope2)}isActiveScope(scope2){return this.getActive()===scope2}setPreFocusMemory(scope2,element2){this.#preFocusHistory.set(scope2,element2)}getPreFocusMemory(scope2){return this.#preFocusHistory.get(scope2)}clearPreFocusMemory(scope2){this.#preFocusHistory.delete(scope2)}}class FocusScope{#paused=!1;#container=null;#manager=FocusScopeManager.getInstance();#cleanupFns=[];#opts;constructor(opts){this.#opts= +opts}get paused(){return this.#paused}pause(){this.#paused=!0}resume(){this.#paused=!1}#cleanup(){for(const fn of this.#cleanupFns)fn();this.#cleanupFns=[]}mount(container2){this.#container&&this.unmount(),this.#container=container2,this.#manager.register(this),this.#setupEventListeners(),this.#handleOpenAutoFocus()}unmount(){this.#container&&(this.#cleanup(),this.#handleCloseAutoFocus(),this.#manager.unregister(this),this.#manager.clearPreFocusMemory(this),this.#container=null)}#handleOpenAutoFocus(){ +if(!this.#container)return;const event2=new CustomEvent("focusScope.onOpenAutoFocus",{bubbles:!1,cancelable:!0});this.#opts.onOpenAutoFocus.current(event2),event2.defaultPrevented||requestAnimationFrame(()=>{if(!this.#container)return;const firstTabbable=this.#getFirstTabbable();firstTabbable?(firstTabbable.focus(),this.#manager.setFocusMemory(this,firstTabbable)):this.#container.focus()})}#handleCloseAutoFocus(){const event2=new CustomEvent("focusScope.onCloseAutoFocus",{bubbles:!1,cancelable:!0}); +if(this.#opts.onCloseAutoFocus.current?.(event2),!event2.defaultPrevented){const preFocusedElement=this.#manager.getPreFocusMemory(this);if(preFocusedElement&&document.contains(preFocusedElement))try{preFocusedElement.focus()}catch{document.body.focus()}}}#setupEventListeners(){if(!this.#container||!this.#opts.trap.current)return;const container2=this.#container,doc=container2.ownerDocument,handleFocus=e=>{if(this.#paused||!this.#manager.isActiveScope(this))return;const target2=e.target;if(!target2) +return;if(container2.contains(target2))this.#manager.setFocusMemory(this,target2);else{const lastFocused=this.#manager.getFocusMemory(this);if(lastFocused&&container2.contains(lastFocused)&&isFocusable(lastFocused))e.preventDefault(),lastFocused.focus();else{const firstTabbable=this.#getFirstTabbable(),firstFocusable=this.#getAllFocusables()[0];(firstTabbable||firstFocusable||container2).focus()}}},handleKeydown=e=>{if(!this.#opts.loop||this.#paused||e.key!=="Tab"||!this.#manager.isActiveScope(this)) +return;const tabbables=this.#getTabbables();if(tabbables.length===0)return;const first=tabbables[0],last=tabbables[tabbables.length-1];!e.shiftKey&&doc.activeElement===last?(e.preventDefault(),first.focus()):e.shiftKey&&doc.activeElement===first&&(e.preventDefault(),last.focus())};this.#cleanupFns.push(on(doc,"focusin",handleFocus,{capture:!0}),on(container2,"keydown",handleKeydown));const observer=new MutationObserver(()=>{const lastFocused=this.#manager.getFocusMemory(this);if(lastFocused&&!container2. +contains(lastFocused)){const firstTabbable=this.#getFirstTabbable(),firstFocusable=this.#getAllFocusables()[0],elementToFocus=firstTabbable||firstFocusable;elementToFocus?(elementToFocus.focus(),this.#manager.setFocusMemory(this,elementToFocus)):container2.focus()}});observer.observe(container2,{childList:!0,subtree:!0}),this.#cleanupFns.push(()=>observer.disconnect())}#getTabbables(){return this.#container?tabbable(this.#container,{includeContainer:!1,getShadowRoot:!0}):[]}#getFirstTabbable(){return this.#getTabbables()[0]|| +null}#getAllFocusables(){return this.#container?focusable(this.#container,{includeContainer:!1,getShadowRoot:!0}):[]}static use(opts){let scope2=null;return watch$1([()=>opts.ref.current,()=>opts.enabled.current],([ref2,enabled])=>{ref2&&enabled?(scope2||(scope2=new FocusScope(opts)),scope2.mount(ref2)):scope2&&(scope2.unmount(),scope2=null)}),onDestroyEffect(()=>{scope2?.unmount()}),{get props(){return{tabindex:-1}}}}}function Focus_scope($$anchor,$$props){push$1($$props,!0);let enabled=prop($$props, +"enabled",3,!1),trapFocus=prop($$props,"trapFocus",3,!1),loop2=prop($$props,"loop",3,!1),onCloseAutoFocus=prop($$props,"onCloseAutoFocus",3,noop$1),onOpenAutoFocus=prop($$props,"onOpenAutoFocus",3,noop$1);const focusScopeState=FocusScope.use({enabled:boxWith$1(()=>enabled()),trap:boxWith$1(()=>trapFocus()),loop:loop2(),onCloseAutoFocus:boxWith$1(()=>onCloseAutoFocus()),onOpenAutoFocus:boxWith$1(()=>onOpenAutoFocus()),ref:$$props.ref});var fragment=comment$2(),node2=first_child(fragment);snippet( +node2,()=>$$props.focusScope??noop$3,()=>({props:focusScopeState.props})),append($$anchor,fragment),pop()}globalThis.bitsTextSelectionLayers??=new Map;class TextSelectionLayerState{static create(opts){return new TextSelectionLayerState(opts)}opts;domContext;#unsubSelectionLock=noop$1;constructor(opts){this.opts=opts,this.domContext=new DOMContext(opts.ref);let unsubEvents=noop$1;watch$1(()=>this.opts.enabled.current,isEnabled=>(isEnabled&&(globalThis.bitsTextSelectionLayers.set(this,this.opts.enabled), +unsubEvents(),unsubEvents=this.#addEventListeners()),()=>{unsubEvents(),this.#resetSelectionLock(),globalThis.bitsTextSelectionLayers.delete(this)}))}#addEventListeners(){return executeCallbacks(on(this.domContext.getDocument(),"pointerdown",this.#pointerdown),on(this.domContext.getDocument(),"pointerup",composeHandlers(this.#resetSelectionLock,this.opts.onPointerUp.current)))}#pointerdown=e=>{const node2=this.opts.ref.current,target2=e.target;!isHTMLElement$1(node2)||!isHTMLElement$1(target2)|| +!this.opts.enabled.current||!isHighestLayer(this)||!contains$3(node2,target2)||(this.opts.onPointerDown.current(e),!e.defaultPrevented&&(this.#unsubSelectionLock=preventTextSelectionOverflow(node2,this.domContext.getDocument().body)))};#resetSelectionLock=()=>{this.#unsubSelectionLock(),this.#unsubSelectionLock=noop$1}}const getUserSelect=node2=>node2.style.userSelect||node2.style.webkitUserSelect;function preventTextSelectionOverflow(node2,body2){const originalBodyUserSelect=getUserSelect(body2), +originalNodeUserSelect=getUserSelect(node2);return setUserSelect(body2,"none"),setUserSelect(node2,"text"),()=>{setUserSelect(body2,originalBodyUserSelect),setUserSelect(node2,originalNodeUserSelect)}}function setUserSelect(node2,value){node2.style.userSelect=value,node2.style.webkitUserSelect=value}function isHighestLayer(instance){const layersArr=[...globalThis.bitsTextSelectionLayers];if(!layersArr.length)return!1;const highestLayer=layersArr.at(-1);return highestLayer?highestLayer[0]===instance: +!1}function Text_selection_layer($$anchor,$$props){push$1($$props,!0);let preventOverflowTextSelection=prop($$props,"preventOverflowTextSelection",3,!0),onPointerDown=prop($$props,"onPointerDown",3,noop$1),onPointerUp=prop($$props,"onPointerUp",3,noop$1);TextSelectionLayerState.create({id:boxWith$1(()=>$$props.id),onPointerDown:boxWith$1(()=>onPointerDown()),onPointerUp:boxWith$1(()=>onPointerUp()),enabled:boxWith$1(()=>$$props.enabled&&preventOverflowTextSelection()),ref:$$props.ref});var fragment=comment$2(), +node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}globalThis.bitsIdCounter??={current:0};function useId(prefix="bits"){return globalThis.bitsIdCounter.current++,`${prefix}-${globalThis.bitsIdCounter.current}`}class SharedState{#factory;#subscribers=0;#state=state$1();#scope;constructor(factory){this.#factory=factory}#dispose(){this.#subscribers-=1,this.#scope&&this.#subscribers<=0&&(this.#scope(),set$1(this.#state,void 0),this.#scope=void 0)}get(...args){ +return this.#subscribers+=1,get$3(this.#state)===void 0&&(this.#scope=effect_root(()=>{set$1(this.#state,this.#factory(...args),!0)})),user_effect(()=>()=>{this.#dispose()}),get$3(this.#state)}}const lockMap=new SvelteMap;let initialBodyStyle=state$1(null),stopTouchMoveListener=null,cleanupTimeoutId=null,isInCleanupTransition=!1;const anyLocked=boxWith$1(()=>{for(const value of lockMap.values())if(value)return!0;return!1});let cleanupScheduledAt=null;const bodyLockStackCount=new SharedState(()=>{ +function resetBodyStyle(){document.body.setAttribute("style",get$3(initialBodyStyle)??""),document.body.style.removeProperty("--scrollbar-width"),isIOS&&stopTouchMoveListener?.(),set$1(initialBodyStyle,null)}function cancelPendingCleanup(){cleanupTimeoutId!==null&&(window.clearTimeout(cleanupTimeoutId),cleanupTimeoutId=null)}function scheduleCleanupIfNoNewLocks(delay,callback){cancelPendingCleanup(),isInCleanupTransition=!0,cleanupScheduledAt=Date.now();const currentCleanupId=cleanupScheduledAt, +cleanupFn=()=>{cleanupTimeoutId=null,cleanupScheduledAt===currentCleanupId&&(isAnyLocked(lockMap)?isInCleanupTransition=!1:(isInCleanupTransition=!1,callback()))},actualDelay=delay===null?24:delay;cleanupTimeoutId=window.setTimeout(cleanupFn,actualDelay)}function ensureInitialStyleCaptured(){get$3(initialBodyStyle)===null&&lockMap.size===0&&!isInCleanupTransition&&set$1(initialBodyStyle,document.body.getAttribute("style"),!0)}return watch$1(()=>anyLocked.current,()=>{if(!anyLocked.current)return; ensureInitialStyleCaptured(),isInCleanupTransition=!1;const htmlStyle=getComputedStyle(document.documentElement),bodyStyle=getComputedStyle(document.body),hasStableGutter=htmlStyle.scrollbarGutter?.includes("stable")||bodyStyle.scrollbarGutter?.includes("stable"),verticalScrollbarWidth=window.innerWidth-document.documentElement.clientWidth,config2={padding:Number.parseInt(bodyStyle.paddingRight??"0",10)+verticalScrollbarWidth,margin:Number.parseInt(bodyStyle.marginRight??"0",10)};verticalScrollbarWidth> 0&&!hasStableGutter&&(document.body.style.paddingRight=`${config2.padding}px`,document.body.style.marginRight=`${config2.margin}px`,document.body.style.setProperty("--scrollbar-width",`${verticalScrollbarWidth}px`)),document.body.style.overflow="hidden",isIOS&&(stopTouchMoveListener=on(document,"touchmove",e=>{e.target===document.documentElement&&(e.touches.length>1||e.preventDefault())},{passive:!1})),afterTick(()=>{document.body.style.pointerEvents="none",document.body.style.overflow="hidden"})}), onDestroyEffect(()=>()=>{stopTouchMoveListener?.()}),{get lockMap(){return lockMap},resetBodyStyle,scheduleCleanupIfNoNewLocks,cancelPendingCleanup,ensureInitialStyleCaptured}});class BodyScrollLock{#id=useId();#initialState;#restoreScrollDelay=()=>null;#countState;locked;constructor(initialState,restoreScrollDelay=()=>null){this.#initialState=initialState,this.#restoreScrollDelay=restoreScrollDelay,this.#countState=bodyLockStackCount.get(),this.#countState&&(this.#countState.cancelPendingCleanup(), this.#countState.ensureInitialStyleCaptured(),this.#countState.lockMap.set(this.#id,this.#initialState??!1),this.locked=boxWith$1(()=>this.#countState.lockMap.get(this.#id)??!1,v=>this.#countState.lockMap.set(this.#id,v)),onDestroyEffect(()=>{if(this.#countState.lockMap.delete(this.#id),isAnyLocked(this.#countState.lockMap))return;const restoreScrollDelay2=this.#restoreScrollDelay();this.#countState.scheduleCleanupIfNoNewLocks(restoreScrollDelay2,()=>{this.#countState.resetBodyStyle()})}))}}function isAnyLocked(map2){ -for(const[_,value]of map2)if(value)return!0;return!1}function Scroll_lock($$anchor,$$props){push$1($$props,!0);let preventScroll=prop($$props,"preventScroll",3,!0),restoreScrollDelay=prop($$props,"restoreScrollDelay",3,null);preventScroll()&&new BodyScrollLock(preventScroll(),()=>restoreScrollDelay()),pop()}var root_6$C=from_html("<!> <!>",1),root_8$r=from_html("<!> <div><!></div>",1);function Alert_dialog_content$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"\ -id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),forceMount=prop($$props,"forceMount",3,!1),interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"ignore"),onCloseAutoFocus=prop($$props,"onCloseAutoFocus",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),onOpenAutoFocus=prop($$props,"onOpenAutoFocus",3,noop$1),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),preventScroll=prop($$props,"preventScroll",3,!0),trapFocus=prop($$props,"trapFocus",3,!0), +for(const[_,value]of map2)if(value)return!0;return!1}function Scroll_lock($$anchor,$$props){push$1($$props,!0);let preventScroll=prop($$props,"preventScroll",3,!0),restoreScrollDelay=prop($$props,"restoreScrollDelay",3,null);preventScroll()&&new BodyScrollLock(preventScroll(),()=>restoreScrollDelay()),pop()}var root_6$B=from_html("<!> <!>",1),root_8$y=from_html("<!> <div><!></div>",1);function Alert_dialog_content$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props, +"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),forceMount=prop($$props,"forceMount",3,!1),interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"ignore"),onCloseAutoFocus=prop($$props,"onCloseAutoFocus",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),onOpenAutoFocus=prop($$props,"onOpenAutoFocus",3,noop$1),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),preventScroll=prop($$props,"preventScroll",3,!0),trapFocus=prop($$props,"trapFocus",3,!0), restoreScrollDelay=prop($$props,"restoreScrollDelay",3,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","children","child","ref","forceMount","interactOutsideBehavior","onCloseAutoFocus","onEscapeKeydown","onOpenAutoFocus","onInteractOutside","preventScroll","trapFocus","restoreScrollDelay"]);const contentState=DialogContentState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,contentState.props));var fragment=comment$2(), node2=first_child(fragment);{var consequent_2=$$anchor2=>{Focus_scope($$anchor2,{get ref(){return contentState.opts.ref},loop:!0,get trapFocus(){return trapFocus()},get enabled(){return contentState.root.opts.open.current},get onCloseAutoFocus(){return onCloseAutoFocus()},onOpenAutoFocus:e=>{onOpenAutoFocus()(e),!e.defaultPrevented&&(e.preventDefault(),afterSleep(0,()=>contentState.opts.ref.current?.focus()))},focusScope:($$anchor3,$$arg0)=>{let focusScopeProps=()=>$$arg0?.().props;Escape_layer( -$$anchor3,spread_props(()=>get$4(mergedProps),{get enabled(){return contentState.root.opts.open.current},get ref(){return contentState.opts.ref},onEscapeKeydown:e=>{onEscapeKeydown()(e),!e.defaultPrevented&&contentState.root.handleClose()},children:($$anchor4,$$slotProps)=>{Dismissible_layer($$anchor4,spread_props(()=>get$4(mergedProps),{get ref(){return contentState.opts.ref},get enabled(){return contentState.root.opts.open.current},get interactOutsideBehavior(){return interactOutsideBehavior()}, -onInteractOutside:e=>{onInteractOutside()(e),!e.defaultPrevented&&contentState.root.handleClose()},children:($$anchor5,$$slotProps2)=>{Text_selection_layer($$anchor5,spread_props(()=>get$4(mergedProps),{get ref(){return contentState.opts.ref},get enabled(){return contentState.root.opts.open.current},children:($$anchor6,$$slotProps3)=>{var fragment_5=comment$2(),node_1=first_child(fragment_5);{var consequent_1=$$anchor7=>{var fragment_6=root_6$C(),node_2=first_child(fragment_6);{var consequent=$$anchor8=>{ -Scroll_lock($$anchor8,{get preventScroll(){return preventScroll()},get restoreScrollDelay(){return restoreScrollDelay()}})};if_block(node_2,$$render=>{contentState.root.opts.open.current&&$$render(consequent)})}var node_3=sibling(node_2,2);{let $0=user_derived(()=>({props:mergeProps(get$4(mergedProps),focusScopeProps()),...contentState.snippetProps}));snippet(node_3,()=>$$props.child,()=>get$4($0))}append($$anchor7,fragment_6)},alternate=$$anchor7=>{var fragment_8=root_8$r(),node_4=first_child(fragment_8); -Scroll_lock(node_4,{get preventScroll(){return preventScroll()}});var div=sibling(node_4,2);attribute_effect(div,$0=>({...$0}),[()=>mergeProps(get$4(mergedProps),focusScopeProps())]);var node_5=child(div);snippet(node_5,()=>$$props.children??noop$3),reset(div),append($$anchor7,fragment_8)};if_block(node_1,$$render=>{$$props.child?$$render(consequent_1):$$render(alternate,!1)})}append($$anchor6,fragment_5)},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{focusScope:!0}})}; -if_block(node2,$$render=>{(contentState.shouldRender||forceMount())&&$$render(consequent_2)})}append($$anchor,fragment),pop()}var root_3$10=from_html("<div><!></div>");function Dialog_overlay$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),forceMount=prop($$props,"forceMount",3,!1),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","forceMount","child","children","ref"]);const overlayState=DialogOverlayState. -create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,overlayState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);{let $0=user_derived(()=>({props:mergeProps(get$4(mergedProps)),...overlayState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$4( -$0))}append($$anchor3,fragment_2)},alternate=$$anchor3=>{var div=root_3$10();attribute_effect(div,$0=>({...$0}),[()=>mergeProps(get$4(mergedProps))]);var node_3=child(div);snippet(node_3,()=>$$props.children??noop$3,()=>overlayState.snippetProps),reset(div),append($$anchor3,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{(overlayState.shouldRender||forceMount())&&$$render(consequent_1)})}append($$anchor, -fragment),pop()}var root_2$1r=from_html("<div><!></div>");function Dialog_description$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","children","child","ref"]);const descriptionState=DialogDescriptionState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,descriptionState. -props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1r();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent): -$$render(alternate,!1)})}append($$anchor,fragment),pop()}const checkboxAttrs=createBitsAttrs({component:"checkbox",parts:["root","group","group-label","input"]}),CheckboxGroupContext=new Context$1("Checkbox.Group"),CheckboxRootContext=new Context$1("Checkbox.Root");class CheckboxRootState{static create(opts,group=null){return CheckboxRootContext.set(new CheckboxRootState(opts,group))}opts;group;#trueName=user_derived(()=>this.group&&this.group.opts.name.current?this.group.opts.name.current:this. -opts.name.current);get trueName(){return get$4(this.#trueName)}set trueName(value){set$1(this.#trueName,value)}#trueRequired=user_derived(()=>this.group&&this.group.opts.required.current?!0:this.opts.required.current);get trueRequired(){return get$4(this.#trueRequired)}set trueRequired(value){set$1(this.#trueRequired,value)}#trueDisabled=user_derived(()=>this.group&&this.group.opts.disabled.current?!0:this.opts.disabled.current);get trueDisabled(){return get$4(this.#trueDisabled)}set trueDisabled(value){ -set$1(this.#trueDisabled,value)}#trueReadonly=user_derived(()=>this.group&&this.group.opts.readonly.current?!0:this.opts.readonly.current);get trueReadonly(){return get$4(this.#trueReadonly)}set trueReadonly(value){set$1(this.#trueReadonly,value)}attachment;constructor(opts,group){this.opts=opts,this.group=group,this.attachment=attachRef(this.opts.ref),this.onkeydown=this.onkeydown.bind(this),this.onclick=this.onclick.bind(this),watch$1.pre([()=>snapshot(this.group?.opts.value.current),()=>this. +$$anchor3,spread_props(()=>get$3(mergedProps),{get enabled(){return contentState.root.opts.open.current},get ref(){return contentState.opts.ref},onEscapeKeydown:e=>{onEscapeKeydown()(e),!e.defaultPrevented&&contentState.root.handleClose()},children:($$anchor4,$$slotProps)=>{Dismissible_layer($$anchor4,spread_props(()=>get$3(mergedProps),{get ref(){return contentState.opts.ref},get enabled(){return contentState.root.opts.open.current},get interactOutsideBehavior(){return interactOutsideBehavior()}, +onInteractOutside:e=>{onInteractOutside()(e),!e.defaultPrevented&&contentState.root.handleClose()},children:($$anchor5,$$slotProps2)=>{Text_selection_layer($$anchor5,spread_props(()=>get$3(mergedProps),{get ref(){return contentState.opts.ref},get enabled(){return contentState.root.opts.open.current},children:($$anchor6,$$slotProps3)=>{var fragment_5=comment$2(),node_1=first_child(fragment_5);{var consequent_1=$$anchor7=>{var fragment_6=root_6$B(),node_2=first_child(fragment_6);{var consequent=$$anchor8=>{ +Scroll_lock($$anchor8,{get preventScroll(){return preventScroll()},get restoreScrollDelay(){return restoreScrollDelay()}})};if_block(node_2,$$render=>{contentState.root.opts.open.current&&$$render(consequent)})}var node_3=sibling(node_2,2);{let $0=user_derived(()=>({props:mergeProps(get$3(mergedProps),focusScopeProps()),...contentState.snippetProps}));snippet(node_3,()=>$$props.child,()=>get$3($0))}append($$anchor7,fragment_6)},alternate=$$anchor7=>{var fragment_8=root_8$y(),node_4=first_child(fragment_8); +Scroll_lock(node_4,{get preventScroll(){return preventScroll()}});var div=sibling(node_4,2);attribute_effect(div,$0=>({...$0}),[()=>mergeProps(get$3(mergedProps),focusScopeProps())]);var node_5=child(div);snippet(node_5,()=>$$props.children??noop$3),reset(div),append($$anchor7,fragment_8)};if_block(node_1,$$render=>{$$props.child?$$render(consequent_1):$$render(alternate,-1)})}append($$anchor6,fragment_5)},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{focusScope:!0}})}; +if_block(node2,$$render=>{(contentState.shouldRender||forceMount())&&$$render(consequent_2)})}append($$anchor,fragment),pop()}var root_3$11=from_html("<div><!></div>");function Dialog_overlay$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),forceMount=prop($$props,"forceMount",3,!1),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","forceMount","child","children","ref"]);const overlayState=DialogOverlayState. +create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,overlayState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);{let $0=user_derived(()=>({props:mergeProps(get$3(mergedProps)),...overlayState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$3( +$0))}append($$anchor3,fragment_2)},alternate=$$anchor3=>{var div=root_3$11();attribute_effect(div,$0=>({...$0}),[()=>mergeProps(get$3(mergedProps))]);var node_3=child(div);snippet(node_3,()=>$$props.children??noop$3,()=>overlayState.snippetProps),reset(div),append($$anchor3,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{(overlayState.shouldRender||forceMount())&&$$render(consequent_1)})}append($$anchor, +fragment),pop()}var root_2$1B=from_html("<div><!></div>");function Dialog_description$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","children","child","ref"]);const descriptionState=DialogDescriptionState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,descriptionState. +props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1B();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent): +$$render(alternate,-1)})}append($$anchor,fragment),pop()}const checkboxAttrs=createBitsAttrs({component:"checkbox",parts:["root","group","group-label","input"]}),CheckboxGroupContext=new Context$1("Checkbox.Group"),CheckboxRootContext=new Context$1("Checkbox.Root");class CheckboxRootState{static create(opts,group=null){return CheckboxRootContext.set(new CheckboxRootState(opts,group))}opts;group;#trueName=user_derived(()=>this.group&&this.group.opts.name.current?this.group.opts.name.current:this. +opts.name.current);get trueName(){return get$3(this.#trueName)}set trueName(value){set$1(this.#trueName,value)}#trueRequired=user_derived(()=>this.group&&this.group.opts.required.current?!0:this.opts.required.current);get trueRequired(){return get$3(this.#trueRequired)}set trueRequired(value){set$1(this.#trueRequired,value)}#trueDisabled=user_derived(()=>this.group&&this.group.opts.disabled.current?!0:this.opts.disabled.current);get trueDisabled(){return get$3(this.#trueDisabled)}set trueDisabled(value){ +set$1(this.#trueDisabled,value)}#trueReadonly=user_derived(()=>this.group&&this.group.opts.readonly.current?!0:this.opts.readonly.current);get trueReadonly(){return get$3(this.#trueReadonly)}set trueReadonly(value){set$1(this.#trueReadonly,value)}attachment;constructor(opts,group){this.opts=opts,this.group=group,this.attachment=attachRef(this.opts.ref),this.onkeydown=this.onkeydown.bind(this),this.onclick=this.onclick.bind(this),watch$1.pre([()=>snapshot(this.group?.opts.value.current),()=>this. opts.value.current],([groupValue,value])=>{!groupValue||!value||(this.opts.checked.current=groupValue.includes(value))}),watch$1.pre(()=>this.opts.checked.current,checked=>{this.group&&(checked?this.group?.addValue(this.opts.value.current):this.group?.removeValue(this.opts.value.current))})}onkeydown(e){if(!(this.trueDisabled||this.trueReadonly)){if(e.key===ENTER){e.preventDefault(),this.opts.type.current==="submit"&&e.currentTarget.closest("form")?.requestSubmit();return}e.key===SPACE&&(e.preventDefault(), -this.#toggle())}}#toggle(){this.opts.indeterminate.current?(this.opts.indeterminate.current=!1,this.opts.checked.current=!0):this.opts.checked.current=!this.opts.checked.current}onclick(e){if(!(this.trueDisabled||this.trueReadonly)){if(this.opts.type.current==="submit"){this.#toggle();return}e.preventDefault(),this.#toggle()}}#snippetProps=user_derived(()=>({checked:this.opts.checked.current,indeterminate:this.opts.indeterminate.current}));get snippetProps(){return get$4(this.#snippetProps)}set snippetProps(value){ +this.#toggle())}}#toggle(){this.opts.indeterminate.current?(this.opts.indeterminate.current=!1,this.opts.checked.current=!0):this.opts.checked.current=!this.opts.checked.current}onclick(e){if(!(this.trueDisabled||this.trueReadonly)){if(this.opts.type.current==="submit"){this.#toggle();return}e.preventDefault(),this.#toggle()}}#snippetProps=user_derived(()=>({checked:this.opts.checked.current,indeterminate:this.opts.indeterminate.current}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){ set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,role:"checkbox",type:this.opts.type.current,disabled:this.trueDisabled,"aria-checked":getAriaChecked(this.opts.checked.current,this.opts.indeterminate.current),"aria-required":boolToStr(this.trueRequired),"aria-readonly":boolToStr(this.trueReadonly),"data-disabled":boolToEmptyStrOrUndef(this.trueDisabled),"data-readonly":boolToEmptyStrOrUndef(this.trueReadonly),"data-state":getCheckboxDataState(this.opts.checked.current, -this.opts.indeterminate.current),[checkboxAttrs.root]:"",onclick:this.onclick,onkeydown:this.onkeydown,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class CheckboxInputState{static create(){return new CheckboxInputState(CheckboxRootContext.get())}root;#trueChecked=user_derived(()=>this.root.group?!!(this.root.opts.value.current!==void 0&&this.root.group.opts.value.current.includes(this.root.opts.value.current)):this.root.opts.checked.current);get trueChecked(){ -return get$4(this.#trueChecked)}set trueChecked(value){set$1(this.#trueChecked,value)}#shouldRender=user_derived(()=>!!this.root.trueName);get shouldRender(){return get$4(this.#shouldRender)}set shouldRender(value){set$1(this.#shouldRender,value)}constructor(root2){this.root=root2,this.onfocus=this.onfocus.bind(this)}onfocus(_){isHTMLElement$1(this.root.opts.ref.current)&&this.root.opts.ref.current.focus()}#props=user_derived(()=>({type:"checkbox",checked:this.root.opts.checked.current===!0,disabled:this. -root.trueDisabled,required:this.root.trueRequired,name:this.root.trueName,value:this.root.opts.value.current,readonly:this.root.trueReadonly,onfocus:this.onfocus}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}function getCheckboxDataState(checked,indeterminate){return indeterminate?"indeterminate":checked?"checked":"unchecked"}enable_legacy_mode_flag();var root_1$16=from_html("<input/>"),root_2$1q=from_html("<input/>");function Hidden_input($$anchor,$$props){ -push$1($$props,!0);let value=prop($$props,"value",15),restProps=rest_props($$props,["$$slots","$$events","$$legacy","value"]);const mergedProps=user_derived(()=>mergeProps(restProps,{"aria-hidden":"true",tabindex:-1,style:srOnlyStylesString}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var input=root_1$16();attribute_effect(input,()=>({...get$4(mergedProps),value:value()}),void 0,void 0,void 0,void 0,!0),append($$anchor2,input)},alternate=$$anchor2=>{var input_1=root_2$1q(); -attribute_effect(input_1,()=>({...get$4(mergedProps)}),void 0,void 0,void 0,void 0,!0),bind_value(input_1,value),append($$anchor2,input_1)};if_block(node2,$$render=>{get$4(mergedProps).type==="checkbox"?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}function Checkbox_input($$anchor,$$props){push$1($$props,!1);const inputState=CheckboxInputState.create();init();var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Hidden_input($$anchor2,spread_props( -()=>inputState.props))};if_block(node2,$$render=>{inputState.shouldRender&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_2$1p=from_html("<button><!></button>"),root$1L=from_html("<!> <!>",1);function Checkbox$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let checked=prop($$props,"checked",15,!1),ref2=prop($$props,"ref",15,null),disabled=prop($$props,"disabled",3,!1),required2=prop($$props,"required",3,!1),name=prop($$props,"name",3,void 0),value=prop($$props,"valu\ -e",3,"on"),id2=prop($$props,"id",19,()=>createId(uid)),indeterminate=prop($$props,"indeterminate",15,!1),type2=prop($$props,"type",3,"button"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","checked","ref","onCheckedChange","children","disabled","required","name","value","id","indeterminate","onIndeterminateChange","child","type","readonly"]);const group=CheckboxGroupContext.getOr(null);group&&value()&&(group.opts.value.current.includes(value())?checked(!0):checked(!1)),watch$1.pre( -()=>value(),()=>{group&&value()&&(group.opts.value.current.includes(value())?checked(!0):checked(!1))});const rootState=CheckboxRootState.create({checked:boxWith$1(()=>checked(),v=>{checked(v),$$props.onCheckedChange?.(v)}),disabled:boxWith$1(()=>disabled()??!1),required:boxWith$1(()=>required2()),name:boxWith$1(()=>name()),value:boxWith$1(()=>value()),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),indeterminate:boxWith$1(()=>indeterminate(),v=>{indeterminate(v),$$props.onIndeterminateChange?.( -v)}),type:boxWith$1(()=>type2()),readonly:boxWith$1(()=>!!$$props.readonly)},group),mergedProps=user_derived(()=>mergeProps({...restProps},rootState.props));var fragment=root$1L(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>({props:get$4(mergedProps),...rootState.snippetProps}));snippet(node_1,()=>$$props.child,()=>get$4($0))}append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1p();attribute_effect( -button,()=>({...get$4(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3,()=>rootState.snippetProps),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}var node_3=sibling(node2,2);Checkbox_input(node_3,{}),append($$anchor,fragment),pop()}const collapsibleAttrs=createBitsAttrs({component:"collapsible",parts:["root","content","trigger"]}),CollapsibleRootContext=new Context$1("Collapsible.Ro\ -ot");class CollapsibleRootState{static create(opts){return CollapsibleRootContext.set(new CollapsibleRootState(opts))}opts;attachment;#contentNode=state$1(null);get contentNode(){return get$4(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}contentPresence;#contentId=state$1(void 0);get contentId(){return get$4(this.#contentId)}set contentId(value){set$1(this.#contentId,value,!0)}constructor(opts){this.opts=opts,this.toggleOpen=this.toggleOpen.bind(this),this.attachment= -attachRef(this.opts.ref),this.contentPresence=new PresenceManager({ref:boxWith$1(()=>this.contentNode),open:this.opts.open,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}})}toggleOpen(){this.opts.open.current=!this.opts.open.current}#props=user_derived(()=>({id:this.opts.id.current,"data-state":getDataOpenClosed(this.opts.open.current),"data-disabled":boolToEmptyStrOrUndef(this.opts.disabled.current),[collapsibleAttrs.root]:"",...this.attachment}));get props(){return get$4( -this.#props)}set props(value){set$1(this.#props,value)}}class CollapsibleContentState{static create(opts){return new CollapsibleContentState(opts,CollapsibleRootContext.get())}opts;root;attachment;#present=user_derived(()=>this.opts.hiddenUntilFound.current?this.root.opts.open.current:this.opts.forceMount.current||this.root.opts.open.current);get present(){return get$4(this.#present)}set present(value){set$1(this.#present,value)}#originalStyles;#isMountAnimationPrevented=state$1(!1);#width=state$1( -0);#height=state$1(0);constructor(opts,root2){this.opts=opts,this.root=root2,set$1(this.#isMountAnimationPrevented,root2.opts.open.current,!0),this.root.contentId=this.opts.id.current,this.attachment=attachRef(this.opts.ref,v=>this.root.contentNode=v),watch$1.pre(()=>this.opts.id.current,id2=>{this.root.contentId=id2}),user_pre_effect(()=>{const rAF=requestAnimationFrame(()=>{set$1(this.#isMountAnimationPrevented,!1)});return()=>{cancelAnimationFrame(rAF)}}),watch$1.pre([()=>this.opts.ref.current, -()=>this.opts.hiddenUntilFound.current],([node2,hiddenUntilFound])=>!node2||!hiddenUntilFound?void 0:on(node2,"beforematch",()=>{this.root.opts.open.current||requestAnimationFrame(()=>{this.root.opts.open.current=!0})})),watch$1([()=>this.opts.ref.current,()=>this.present],([node2])=>{node2&&afterTick(()=>{if(!this.opts.ref.current)return;this.#originalStyles=this.#originalStyles||{transitionDuration:node2.style.transitionDuration,animationName:node2.style.animationName},node2.style.transitionDuration= -"0s",node2.style.animationName="none";const rect=node2.getBoundingClientRect();if(set$1(this.#height,rect.height,!0),set$1(this.#width,rect.width,!0),!get$4(this.#isMountAnimationPrevented)){const{animationName,transitionDuration}=this.#originalStyles;node2.style.transitionDuration=transitionDuration,node2.style.animationName=animationName}})})}get shouldRender(){return this.root.contentPresence.shouldRender}#snippetProps=user_derived(()=>({open:this.root.opts.open.current}));get snippetProps(){ -return get$4(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,style:{"--bits-collapsible-content-height":get$4(this.#height)?`${get$4(this.#height)}px`:void 0,"--bits-collapsible-content-width":get$4(this.#width)?`${get$4(this.#width)}px`:void 0},hidden:this.opts.hiddenUntilFound.current&&!this.root.opts.open.current?"until-found":void 0,"data-state":getDataOpenClosed(this.root.opts.open.current),"data-disabled":boolToEmptyStrOrUndef( -this.root.opts.disabled.current),[collapsibleAttrs.content]:"",...this.opts.hiddenUntilFound.current&&!this.shouldRender?{}:{hidden:this.opts.hiddenUntilFound.current?!this.shouldRender:this.opts.forceMount.current?void 0:!this.shouldRender},...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class CollapsibleTriggerState{static create(opts){return new CollapsibleTriggerState(opts,CollapsibleRootContext.get())}opts;root;attachment;#isDisabled=user_derived( -()=>this.opts.disabled.current||this.root.opts.disabled.current);constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref),this.onclick=this.onclick.bind(this),this.onkeydown=this.onkeydown.bind(this)}onclick(e){if(!get$4(this.#isDisabled)){if(e.button!==0)return e.preventDefault();this.root.toggleOpen()}}onkeydown(e){get$4(this.#isDisabled)||(e.key===SPACE||e.key===ENTER)&&(e.preventDefault(),this.root.toggleOpen())}#props=user_derived(()=>({id:this.opts.id. -current,type:"button",disabled:get$4(this.#isDisabled),"aria-controls":this.root.contentId,"aria-expanded":boolToStr(this.root.opts.open.current),"data-state":getDataOpenClosed(this.root.opts.open.current),"data-disabled":boolToEmptyStrOrUndef(get$4(this.#isDisabled)),[collapsibleAttrs.trigger]:"",onclick:this.onclick,onkeydown:this.onkeydown,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}var root_2$1o=from_html("<div><!></div>");function Collapsible$1($$anchor,$$props){ -const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),open2=prop($$props,"open",15,!1),disabled=prop($$props,"disabled",3,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","id","ref","open","disabled","onOpenChange","onOpenChangeComplete"]);const rootState=CollapsibleRootState.create( -{open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),disabled:boxWith$1(()=>disabled()),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())}),mergedProps=user_derived(()=>mergeProps(restProps,rootState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2, -fragment_1)},alternate=$$anchor2=>{var div=root_2$1o();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_2$1n=from_html("<div><!></div>");function Collapsible_content$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),forceMount=prop( -$$props,"forceMount",3,!1),hiddenUntilFound=prop($$props,"hiddenUntilFound",3,!1),id2=prop($$props,"id",19,()=>createId(uid)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","ref","forceMount","hiddenUntilFound","children","id"]);const contentState=CollapsibleContentState.create({id:boxWith$1(()=>id2()),forceMount:boxWith$1(()=>forceMount()),hiddenUntilFound:boxWith$1(()=>hiddenUntilFound()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps, -contentState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>({...contentState.snippetProps,props:get$4(mergedProps)}));snippet(node_1,()=>$$props.child,()=>get$4($0))}append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1n();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append( -$$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_2$1m=from_html("<button><!></button>");function Collapsible_trigger$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),disabled=prop($$props,"disabled",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","ref","id","disabled"]);const triggerState=CollapsibleTriggerState. -create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),disabled:boxWith$1(()=>disabled())}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1m();attribute_effect(button,()=>({...get$4(mergedProps)})); -var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}const sides=["top","right","bottom","left"],min=Math.min,max=Math.max,round=Math.round,floor=Math.floor,createCoords=v=>({x:v,y:v}),oppositeSideMap={left:"right",right:"left",bottom:"top",top:"bottom"},oppositeAlignmentMap={start:"end",end:"start"};function clamp$1(start2,value,end){ -return max(start2,min(value,end))}function evaluate(value,param){return typeof value=="function"?value(param):value}function getSide$1(placement){return placement.split("-")[0]}function getAlignment(placement){return placement.split("-")[1]}function getOppositeAxis(axis){return axis==="x"?"y":"x"}function getAxisLength(axis){return axis==="y"?"height":"width"}const yAxisSides=new Set(["top","bottom"]);function getSideAxis(placement){return yAxisSides.has(getSide$1(placement))?"y":"x"}function getAlignmentAxis(placement){ -return getOppositeAxis(getSideAxis(placement))}function getAlignmentSides(placement,rects,rtl){rtl===void 0&&(rtl=!1);const alignment=getAlignment(placement),alignmentAxis=getAlignmentAxis(placement),length=getAxisLength(alignmentAxis);let mainAlignmentSide=alignmentAxis==="x"?alignment===(rtl?"end":"start")?"right":"left":alignment==="start"?"bottom":"top";return rects.reference[length]>rects.floating[length]&&(mainAlignmentSide=getOppositePlacement(mainAlignmentSide)),[mainAlignmentSide,getOppositePlacement( -mainAlignmentSide)]}function getExpandedPlacements(placement){const oppositePlacement=getOppositePlacement(placement);return[getOppositeAlignmentPlacement(placement),oppositePlacement,getOppositeAlignmentPlacement(oppositePlacement)]}function getOppositeAlignmentPlacement(placement){return placement.replace(/start|end/g,alignment=>oppositeAlignmentMap[alignment])}const lrPlacement=["left","right"],rlPlacement=["right","left"],tbPlacement=["top","bottom"],btPlacement=["bottom","top"];function getSideList(side,isStart,rtl){ -switch(side){case"top":case"bottom":return rtl?isStart?rlPlacement:lrPlacement:isStart?lrPlacement:rlPlacement;case"left":case"right":return isStart?tbPlacement:btPlacement;default:return[]}}function getOppositeAxisPlacements(placement,flipAlignment,direction,rtl){const alignment=getAlignment(placement);let list2=getSideList(getSide$1(placement),direction==="start",rtl);return alignment&&(list2=list2.map(side=>side+"-"+alignment),flipAlignment&&(list2=list2.concat(list2.map(getOppositeAlignmentPlacement)))), -list2}function getOppositePlacement(placement){return placement.replace(/left|right|bottom|top/g,side=>oppositeSideMap[side])}function expandPaddingObject(padding){return{top:0,right:0,bottom:0,left:0,...padding}}function getPaddingObject(padding){return typeof padding!="number"?expandPaddingObject(padding):{top:padding,right:padding,bottom:padding,left:padding}}function rectToClientRect(rect){const{x,y,width,height}=rect;return{width,height,top:y,left:x,right:x+width,bottom:y+height,x,y}}function computeCoordsFromPlacement(_ref,placement,rtl){ -let{reference,floating}=_ref;const sideAxis=getSideAxis(placement),alignmentAxis=getAlignmentAxis(placement),alignLength=getAxisLength(alignmentAxis),side=getSide$1(placement),isVertical=sideAxis==="y",commonX=reference.x+reference.width/2-floating.width/2,commonY=reference.y+reference.height/2-floating.height/2,commonAlign=reference[alignLength]/2-floating[alignLength]/2;let coords;switch(side){case"top":coords={x:commonX,y:reference.y-floating.height};break;case"bottom":coords={x:commonX,y:reference. -y+reference.height};break;case"right":coords={x:reference.x+reference.width,y:commonY};break;case"left":coords={x:reference.x-floating.width,y:commonY};break;default:coords={x:reference.x,y:reference.y}}switch(getAlignment(placement)){case"start":coords[alignmentAxis]-=commonAlign*(rtl&&isVertical?-1:1);break;case"end":coords[alignmentAxis]+=commonAlign*(rtl&&isVertical?-1:1);break}return coords}const computePosition$1=async(reference,floating,config2)=>{const{placement="bottom",strategy="absolu\ -te",middleware=[],platform:platform2}=config2,validMiddleware=middleware.filter(Boolean),rtl=await(platform2.isRTL==null?void 0:platform2.isRTL(floating));let rects=await platform2.getElementRects({reference,floating,strategy}),{x,y}=computeCoordsFromPlacement(rects,placement,rtl),statefulPlacement=placement,middlewareData={},resetCount=0;for(let i=0;i<validMiddleware.length;i++){const{name,fn}=validMiddleware[i],{x:nextX,y:nextY,data,reset:reset2}=await fn({x,y,initialPlacement:placement,placement:statefulPlacement, -strategy,middlewareData,rects,platform:platform2,elements:{reference,floating}});x=nextX??x,y=nextY??y,middlewareData={...middlewareData,[name]:{...middlewareData[name],...data}},reset2&&resetCount<=50&&(resetCount++,typeof reset2=="object"&&(reset2.placement&&(statefulPlacement=reset2.placement),reset2.rects&&(rects=reset2.rects===!0?await platform2.getElementRects({reference,floating,strategy}):reset2.rects),{x,y}=computeCoordsFromPlacement(rects,statefulPlacement,rtl)),i=-1)}return{x,y,placement:statefulPlacement, -strategy,middlewareData}};async function detectOverflow(state2,options){var _await$platform$isEle;options===void 0&&(options={});const{x,y,platform:platform2,rects,elements,strategy}=state2,{boundary:boundary2="clippingAncestors",rootBoundary="viewport",elementContext="floating",altBoundary=!1,padding=0}=evaluate(options,state2),paddingObject=getPaddingObject(padding),element2=elements[altBoundary?elementContext==="floating"?"reference":"floating":elementContext],clippingClientRect=rectToClientRect( -await platform2.getClippingRect({element:(_await$platform$isEle=await(platform2.isElement==null?void 0:platform2.isElement(element2)))==null||_await$platform$isEle?element2:element2.contextElement||await(platform2.getDocumentElement==null?void 0:platform2.getDocumentElement(elements.floating)),boundary:boundary2,rootBoundary,strategy})),rect=elementContext==="floating"?{x,y,width:rects.floating.width,height:rects.floating.height}:rects.reference,offsetParent=await(platform2.getOffsetParent==null? -void 0:platform2.getOffsetParent(elements.floating)),offsetScale=await(platform2.isElement==null?void 0:platform2.isElement(offsetParent))?await(platform2.getScale==null?void 0:platform2.getScale(offsetParent))||{x:1,y:1}:{x:1,y:1},elementClientRect=rectToClientRect(platform2.convertOffsetParentRelativeRectToViewportRelativeRect?await platform2.convertOffsetParentRelativeRectToViewportRelativeRect({elements,rect,offsetParent,strategy}):rect);return{top:(clippingClientRect.top-elementClientRect.top+ -paddingObject.top)/offsetScale.y,bottom:(elementClientRect.bottom-clippingClientRect.bottom+paddingObject.bottom)/offsetScale.y,left:(clippingClientRect.left-elementClientRect.left+paddingObject.left)/offsetScale.x,right:(elementClientRect.right-clippingClientRect.right+paddingObject.right)/offsetScale.x}}const arrow$1=options=>({name:"arrow",options,async fn(state2){const{x,y,placement,rects,platform:platform2,elements,middlewareData}=state2,{element:element2,padding=0}=evaluate(options,state2)|| -{};if(element2==null)return{};const paddingObject=getPaddingObject(padding),coords={x,y},axis=getAlignmentAxis(placement),length=getAxisLength(axis),arrowDimensions=await platform2.getDimensions(element2),isYAxis=axis==="y",minProp=isYAxis?"top":"left",maxProp=isYAxis?"bottom":"right",clientProp=isYAxis?"clientHeight":"clientWidth",endDiff=rects.reference[length]+rects.reference[axis]-coords[axis]-rects.floating[length],startDiff=coords[axis]-rects.reference[axis],arrowOffsetParent=await(platform2. -getOffsetParent==null?void 0:platform2.getOffsetParent(element2));let clientSize=arrowOffsetParent?arrowOffsetParent[clientProp]:0;(!clientSize||!await(platform2.isElement==null?void 0:platform2.isElement(arrowOffsetParent)))&&(clientSize=elements.floating[clientProp]||rects.floating[length]);const centerToReference=endDiff/2-startDiff/2,largestPossiblePadding=clientSize/2-arrowDimensions[length]/2-1,minPadding=min(paddingObject[minProp],largestPossiblePadding),maxPadding=min(paddingObject[maxProp], -largestPossiblePadding),min$1=minPadding,max2=clientSize-arrowDimensions[length]-maxPadding,center=clientSize/2-arrowDimensions[length]/2+centerToReference,offset2=clamp$1(min$1,center,max2),shouldAddOffset=!middlewareData.arrow&&getAlignment(placement)!=null&¢er!==offset2&&rects.reference[length]/2-(center<min$1?minPadding:maxPadding)-arrowDimensions[length]/2<0,alignmentOffset=shouldAddOffset?center<min$1?center-min$1:center-max2:0;return{[axis]:coords[axis]+alignmentOffset,data:{[axis]:offset2, -centerOffset:center-offset2-alignmentOffset,...shouldAddOffset&&{alignmentOffset}},reset:shouldAddOffset}}}),flip$1=function(options){return options===void 0&&(options={}),{name:"flip",options,async fn(state2){var _middlewareData$arrow,_middlewareData$flip;const{placement,middlewareData,rects,initialPlacement,platform:platform2,elements}=state2,{mainAxis:checkMainAxis=!0,crossAxis:checkCrossAxis=!0,fallbackPlacements:specifiedFallbackPlacements,fallbackStrategy="bestFit",fallbackAxisSideDirection="\ -none",flipAlignment=!0,...detectOverflowOptions}=evaluate(options,state2);if((_middlewareData$arrow=middlewareData.arrow)!=null&&_middlewareData$arrow.alignmentOffset)return{};const side=getSide$1(placement),initialSideAxis=getSideAxis(initialPlacement),isBasePlacement=getSide$1(initialPlacement)===initialPlacement,rtl=await(platform2.isRTL==null?void 0:platform2.isRTL(elements.floating)),fallbackPlacements=specifiedFallbackPlacements||(isBasePlacement||!flipAlignment?[getOppositePlacement(initialPlacement)]: -getExpandedPlacements(initialPlacement)),hasFallbackAxisSideDirection=fallbackAxisSideDirection!=="none";!specifiedFallbackPlacements&&hasFallbackAxisSideDirection&&fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement,flipAlignment,fallbackAxisSideDirection,rtl));const placements=[initialPlacement,...fallbackPlacements],overflow=await detectOverflow(state2,detectOverflowOptions),overflows=[];let overflowsData=((_middlewareData$flip=middlewareData.flip)==null?void 0:_middlewareData$flip. -overflows)||[];if(checkMainAxis&&overflows.push(overflow[side]),checkCrossAxis){const sides2=getAlignmentSides(placement,rects,rtl);overflows.push(overflow[sides2[0]],overflow[sides2[1]])}if(overflowsData=[...overflowsData,{placement,overflows}],!overflows.every(side2=>side2<=0)){var _middlewareData$flip2,_overflowsData$filter;const nextIndex=(((_middlewareData$flip2=middlewareData.flip)==null?void 0:_middlewareData$flip2.index)||0)+1,nextPlacement=placements[nextIndex];if(nextPlacement&&(!(checkCrossAxis=== -"alignment"?initialSideAxis!==getSideAxis(nextPlacement):!1)||overflowsData.every(d2=>d2.overflows[0]>0&&getSideAxis(d2.placement)===initialSideAxis)))return{data:{index:nextIndex,overflows:overflowsData},reset:{placement:nextPlacement}};let resetPlacement=(_overflowsData$filter=overflowsData.filter(d2=>d2.overflows[0]<=0).sort((a,b)=>a.overflows[1]-b.overflows[1])[0])==null?void 0:_overflowsData$filter.placement;if(!resetPlacement)switch(fallbackStrategy){case"bestFit":{var _overflowsData$filter2; -const placement2=(_overflowsData$filter2=overflowsData.filter(d2=>{if(hasFallbackAxisSideDirection){const currentSideAxis=getSideAxis(d2.placement);return currentSideAxis===initialSideAxis||currentSideAxis==="y"}return!0}).map(d2=>[d2.placement,d2.overflows.filter(overflow2=>overflow2>0).reduce((acc,overflow2)=>acc+overflow2,0)]).sort((a,b)=>a[1]-b[1])[0])==null?void 0:_overflowsData$filter2[0];placement2&&(resetPlacement=placement2);break}case"initialPlacement":resetPlacement=initialPlacement;break} -if(placement!==resetPlacement)return{reset:{placement:resetPlacement}}}return{}}}};function getSideOffsets(overflow,rect){return{top:overflow.top-rect.height,right:overflow.right-rect.width,bottom:overflow.bottom-rect.height,left:overflow.left-rect.width}}function isAnySideFullyClipped(overflow){return sides.some(side=>overflow[side]>=0)}const hide$1=function(options){return options===void 0&&(options={}),{name:"hide",options,async fn(state2){const{rects}=state2,{strategy="referenceHidden",...detectOverflowOptions}=evaluate( -options,state2);switch(strategy){case"referenceHidden":{const overflow=await detectOverflow(state2,{...detectOverflowOptions,elementContext:"reference"}),offsets=getSideOffsets(overflow,rects.reference);return{data:{referenceHiddenOffsets:offsets,referenceHidden:isAnySideFullyClipped(offsets)}}}case"escaped":{const overflow=await detectOverflow(state2,{...detectOverflowOptions,altBoundary:!0}),offsets=getSideOffsets(overflow,rects.floating);return{data:{escapedOffsets:offsets,escaped:isAnySideFullyClipped( -offsets)}}}default:return{}}}}},originSides=new Set(["left","top"]);async function convertValueToCoords(state2,options){const{placement,platform:platform2,elements}=state2,rtl=await(platform2.isRTL==null?void 0:platform2.isRTL(elements.floating)),side=getSide$1(placement),alignment=getAlignment(placement),isVertical=getSideAxis(placement)==="y",mainAxisMulti=originSides.has(side)?-1:1,crossAxisMulti=rtl&&isVertical?-1:1,rawValue=evaluate(options,state2);let{mainAxis,crossAxis,alignmentAxis}=typeof rawValue== -"number"?{mainAxis:rawValue,crossAxis:0,alignmentAxis:null}:{mainAxis:rawValue.mainAxis||0,crossAxis:rawValue.crossAxis||0,alignmentAxis:rawValue.alignmentAxis};return alignment&&typeof alignmentAxis=="number"&&(crossAxis=alignment==="end"?alignmentAxis*-1:alignmentAxis),isVertical?{x:crossAxis*crossAxisMulti,y:mainAxis*mainAxisMulti}:{x:mainAxis*mainAxisMulti,y:crossAxis*crossAxisMulti}}const offset$1=function(options){return options===void 0&&(options=0),{name:"offset",options,async fn(state2){ -var _middlewareData$offse,_middlewareData$arrow;const{x,y,placement,middlewareData}=state2,diffCoords=await convertValueToCoords(state2,options);return placement===((_middlewareData$offse=middlewareData.offset)==null?void 0:_middlewareData$offse.placement)&&(_middlewareData$arrow=middlewareData.arrow)!=null&&_middlewareData$arrow.alignmentOffset?{}:{x:x+diffCoords.x,y:y+diffCoords.y,data:{...diffCoords,placement}}}}},shift$1=function(options){return options===void 0&&(options={}),{name:"shift",options, -async fn(state2){const{x,y,placement}=state2,{mainAxis:checkMainAxis=!0,crossAxis:checkCrossAxis=!1,limiter={fn:_ref=>{let{x:x2,y:y2}=_ref;return{x:x2,y:y2}}},...detectOverflowOptions}=evaluate(options,state2),coords={x,y},overflow=await detectOverflow(state2,detectOverflowOptions),crossAxis=getSideAxis(getSide$1(placement)),mainAxis=getOppositeAxis(crossAxis);let mainAxisCoord=coords[mainAxis],crossAxisCoord=coords[crossAxis];if(checkMainAxis){const minSide=mainAxis==="y"?"top":"left",maxSide=mainAxis=== -"y"?"bottom":"right",min2=mainAxisCoord+overflow[minSide],max2=mainAxisCoord-overflow[maxSide];mainAxisCoord=clamp$1(min2,mainAxisCoord,max2)}if(checkCrossAxis){const minSide=crossAxis==="y"?"top":"left",maxSide=crossAxis==="y"?"bottom":"right",min2=crossAxisCoord+overflow[minSide],max2=crossAxisCoord-overflow[maxSide];crossAxisCoord=clamp$1(min2,crossAxisCoord,max2)}const limitedCoords=limiter.fn({...state2,[mainAxis]:mainAxisCoord,[crossAxis]:crossAxisCoord});return{...limitedCoords,data:{x:limitedCoords. -x-x,y:limitedCoords.y-y,enabled:{[mainAxis]:checkMainAxis,[crossAxis]:checkCrossAxis}}}}}},limitShift$1=function(options){return options===void 0&&(options={}),{options,fn(state2){const{x,y,placement,rects,middlewareData}=state2,{offset:offset2=0,mainAxis:checkMainAxis=!0,crossAxis:checkCrossAxis=!0}=evaluate(options,state2),coords={x,y},crossAxis=getSideAxis(placement),mainAxis=getOppositeAxis(crossAxis);let mainAxisCoord=coords[mainAxis],crossAxisCoord=coords[crossAxis];const rawOffset=evaluate( -offset2,state2),computedOffset=typeof rawOffset=="number"?{mainAxis:rawOffset,crossAxis:0}:{mainAxis:0,crossAxis:0,...rawOffset};if(checkMainAxis){const len=mainAxis==="y"?"height":"width",limitMin=rects.reference[mainAxis]-rects.floating[len]+computedOffset.mainAxis,limitMax=rects.reference[mainAxis]+rects.reference[len]-computedOffset.mainAxis;mainAxisCoord<limitMin?mainAxisCoord=limitMin:mainAxisCoord>limitMax&&(mainAxisCoord=limitMax)}if(checkCrossAxis){var _middlewareData$offse,_middlewareData$offse2; -const len=mainAxis==="y"?"width":"height",isOriginSide=originSides.has(getSide$1(placement)),limitMin=rects.reference[crossAxis]-rects.floating[len]+(isOriginSide&&((_middlewareData$offse=middlewareData.offset)==null?void 0:_middlewareData$offse[crossAxis])||0)+(isOriginSide?0:computedOffset.crossAxis),limitMax=rects.reference[crossAxis]+rects.reference[len]+(isOriginSide?0:((_middlewareData$offse2=middlewareData.offset)==null?void 0:_middlewareData$offse2[crossAxis])||0)-(isOriginSide?computedOffset. -crossAxis:0);crossAxisCoord<limitMin?crossAxisCoord=limitMin:crossAxisCoord>limitMax&&(crossAxisCoord=limitMax)}return{[mainAxis]:mainAxisCoord,[crossAxis]:crossAxisCoord}}}},size$1=function(options){return options===void 0&&(options={}),{name:"size",options,async fn(state2){var _state$middlewareData,_state$middlewareData2;const{placement,rects,platform:platform2,elements}=state2,{apply=()=>{},...detectOverflowOptions}=evaluate(options,state2),overflow=await detectOverflow(state2,detectOverflowOptions), -side=getSide$1(placement),alignment=getAlignment(placement),isYAxis=getSideAxis(placement)==="y",{width,height}=rects.floating;let heightSide,widthSide;side==="top"||side==="bottom"?(heightSide=side,widthSide=alignment===(await(platform2.isRTL==null?void 0:platform2.isRTL(elements.floating))?"start":"end")?"left":"right"):(widthSide=side,heightSide=alignment==="end"?"top":"bottom");const maximumClippingHeight=height-overflow.top-overflow.bottom,maximumClippingWidth=width-overflow.left-overflow.right, -overflowAvailableHeight=min(height-overflow[heightSide],maximumClippingHeight),overflowAvailableWidth=min(width-overflow[widthSide],maximumClippingWidth),noShift=!state2.middlewareData.shift;let availableHeight=overflowAvailableHeight,availableWidth=overflowAvailableWidth;if((_state$middlewareData=state2.middlewareData.shift)!=null&&_state$middlewareData.enabled.x&&(availableWidth=maximumClippingWidth),(_state$middlewareData2=state2.middlewareData.shift)!=null&&_state$middlewareData2.enabled.y&& -(availableHeight=maximumClippingHeight),noShift&&!alignment){const xMin=max(overflow.left,0),xMax=max(overflow.right,0),yMin=max(overflow.top,0),yMax=max(overflow.bottom,0);isYAxis?availableWidth=width-2*(xMin!==0||xMax!==0?xMin+xMax:max(overflow.left,overflow.right)):availableHeight=height-2*(yMin!==0||yMax!==0?yMin+yMax:max(overflow.top,overflow.bottom))}await apply({...state2,availableWidth,availableHeight});const nextDimensions=await platform2.getDimensions(elements.floating);return width!== -nextDimensions.width||height!==nextDimensions.height?{reset:{rects:!0}}:{}}}};function hasWindow(){return typeof window<"u"}function getNodeName(node2){return isNode(node2)?(node2.nodeName||"").toLowerCase():"#document"}function getWindow(node2){var _node$ownerDocument;return(node2==null||(_node$ownerDocument=node2.ownerDocument)==null?void 0:_node$ownerDocument.defaultView)||window}function getDocumentElement(node2){var _ref;return(_ref=(isNode(node2)?node2.ownerDocument:node2.document)||window. -document)==null?void 0:_ref.documentElement}function isNode(value){return hasWindow()?value instanceof Node||value instanceof getWindow(value).Node:!1}function isElement(value){return hasWindow()?value instanceof Element||value instanceof getWindow(value).Element:!1}function isHTMLElement(value){return hasWindow()?value instanceof HTMLElement||value instanceof getWindow(value).HTMLElement:!1}function isShadowRoot(value){return!hasWindow()||typeof ShadowRoot>"u"?!1:value instanceof ShadowRoot||value instanceof -getWindow(value).ShadowRoot}const invalidOverflowDisplayValues=new Set(["inline","contents"]);function isOverflowElement(element2){const{overflow,overflowX,overflowY,display}=getComputedStyle$1(element2);return/auto|scroll|overlay|hidden|clip/.test(overflow+overflowY+overflowX)&&!invalidOverflowDisplayValues.has(display)}const tableElements=new Set(["table","td","th"]);function isTableElement(element2){return tableElements.has(getNodeName(element2))}const topLayerSelectors=[":popover-open",":mod\ -al"];function isTopLayer(element2){return topLayerSelectors.some(selector=>{try{return element2.matches(selector)}catch{return!1}})}const transformProperties=["transform","translate","scale","rotate","perspective"],willChangeValues=["transform","translate","scale","rotate","perspective","filter"],containValues=["paint","layout","strict","content"];function isContainingBlock(elementOrCss){const webkit=isWebKit(),css2=isElement(elementOrCss)?getComputedStyle$1(elementOrCss):elementOrCss;return transformProperties. -some(value=>css2[value]?css2[value]!=="none":!1)||(css2.containerType?css2.containerType!=="normal":!1)||!webkit&&(css2.backdropFilter?css2.backdropFilter!=="none":!1)||!webkit&&(css2.filter?css2.filter!=="none":!1)||willChangeValues.some(value=>(css2.willChange||"").includes(value))||containValues.some(value=>(css2.contain||"").includes(value))}function getContainingBlock(element2){let currentNode=getParentNode(element2);for(;isHTMLElement(currentNode)&&!isLastTraversableNode(currentNode);){if(isContainingBlock( -currentNode))return currentNode;if(isTopLayer(currentNode))return null;currentNode=getParentNode(currentNode)}return null}function isWebKit(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const lastTraversableNodeNames=new Set(["html","body","#document"]);function isLastTraversableNode(node2){return lastTraversableNodeNames.has(getNodeName(node2))}function getComputedStyle$1(element2){return getWindow(element2).getComputedStyle(element2)}function getNodeScroll(element2){ -return isElement(element2)?{scrollLeft:element2.scrollLeft,scrollTop:element2.scrollTop}:{scrollLeft:element2.scrollX,scrollTop:element2.scrollY}}function getParentNode(node2){if(getNodeName(node2)==="html")return node2;const result=node2.assignedSlot||node2.parentNode||isShadowRoot(node2)&&node2.host||getDocumentElement(node2);return isShadowRoot(result)?result.host:result}function getNearestOverflowAncestor(node2){const parentNode=getParentNode(node2);return isLastTraversableNode(parentNode)?node2. -ownerDocument?node2.ownerDocument.body:node2.body:isHTMLElement(parentNode)&&isOverflowElement(parentNode)?parentNode:getNearestOverflowAncestor(parentNode)}function getOverflowAncestors(node2,list2,traverseIframes){var _node$ownerDocument2;list2===void 0&&(list2=[]),traverseIframes===void 0&&(traverseIframes=!0);const scrollableAncestor=getNearestOverflowAncestor(node2),isBody=scrollableAncestor===((_node$ownerDocument2=node2.ownerDocument)==null?void 0:_node$ownerDocument2.body),win=getWindow( -scrollableAncestor);if(isBody){const frameElement=getFrameElement(win);return list2.concat(win,win.visualViewport||[],isOverflowElement(scrollableAncestor)?scrollableAncestor:[],frameElement&&traverseIframes?getOverflowAncestors(frameElement):[])}return list2.concat(scrollableAncestor,getOverflowAncestors(scrollableAncestor,[],traverseIframes))}function getFrameElement(win){return win.parent&&Object.getPrototypeOf(win.parent)?win.frameElement:null}function getCssDimensions(element2){const css2=getComputedStyle$1( -element2);let width=parseFloat(css2.width)||0,height=parseFloat(css2.height)||0;const hasOffset=isHTMLElement(element2),offsetWidth=hasOffset?element2.offsetWidth:width,offsetHeight=hasOffset?element2.offsetHeight:height,shouldFallback=round(width)!==offsetWidth||round(height)!==offsetHeight;return shouldFallback&&(width=offsetWidth,height=offsetHeight),{width,height,$:shouldFallback}}function unwrapElement(element2){return isElement(element2)?element2:element2.contextElement}function getScale(element2){ -const domElement=unwrapElement(element2);if(!isHTMLElement(domElement))return createCoords(1);const rect=domElement.getBoundingClientRect(),{width,height,$}=getCssDimensions(domElement);let x=($?round(rect.width):rect.width)/width,y=($?round(rect.height):rect.height)/height;return(!x||!Number.isFinite(x))&&(x=1),(!y||!Number.isFinite(y))&&(y=1),{x,y}}const noOffsets=createCoords(0);function getVisualOffsets(element2){const win=getWindow(element2);return!isWebKit()||!win.visualViewport?noOffsets: -{x:win.visualViewport.offsetLeft,y:win.visualViewport.offsetTop}}function shouldAddVisualOffsets(element2,isFixed,floatingOffsetParent){return isFixed===void 0&&(isFixed=!1),!floatingOffsetParent||isFixed&&floatingOffsetParent!==getWindow(element2)?!1:isFixed}function getBoundingClientRect(element2,includeScale,isFixedStrategy,offsetParent){includeScale===void 0&&(includeScale=!1),isFixedStrategy===void 0&&(isFixedStrategy=!1);const clientRect=element2.getBoundingClientRect(),domElement=unwrapElement( -element2);let scale2=createCoords(1);includeScale&&(offsetParent?isElement(offsetParent)&&(scale2=getScale(offsetParent)):scale2=getScale(element2));const visualOffsets=shouldAddVisualOffsets(domElement,isFixedStrategy,offsetParent)?getVisualOffsets(domElement):createCoords(0);let x=(clientRect.left+visualOffsets.x)/scale2.x,y=(clientRect.top+visualOffsets.y)/scale2.y,width=clientRect.width/scale2.x,height=clientRect.height/scale2.y;if(domElement){const win=getWindow(domElement),offsetWin=offsetParent&& -isElement(offsetParent)?getWindow(offsetParent):offsetParent;let currentWin=win,currentIFrame=getFrameElement(currentWin);for(;currentIFrame&&offsetParent&&offsetWin!==currentWin;){const iframeScale=getScale(currentIFrame),iframeRect=currentIFrame.getBoundingClientRect(),css2=getComputedStyle$1(currentIFrame),left=iframeRect.left+(currentIFrame.clientLeft+parseFloat(css2.paddingLeft))*iframeScale.x,top=iframeRect.top+(currentIFrame.clientTop+parseFloat(css2.paddingTop))*iframeScale.y;x*=iframeScale. -x,y*=iframeScale.y,width*=iframeScale.x,height*=iframeScale.y,x+=left,y+=top,currentWin=getWindow(currentIFrame),currentIFrame=getFrameElement(currentWin)}}return rectToClientRect({width,height,x,y})}function getWindowScrollBarX(element2,rect){const leftScroll=getNodeScroll(element2).scrollLeft;return rect?rect.left+leftScroll:getBoundingClientRect(getDocumentElement(element2)).left+leftScroll}function getHTMLOffset(documentElement,scroll,ignoreScrollbarX){ignoreScrollbarX===void 0&&(ignoreScrollbarX= -!1);const htmlRect=documentElement.getBoundingClientRect(),x=htmlRect.left+scroll.scrollLeft-(ignoreScrollbarX?0:getWindowScrollBarX(documentElement,htmlRect)),y=htmlRect.top+scroll.scrollTop;return{x,y}}function convertOffsetParentRelativeRectToViewportRelativeRect(_ref){let{elements,rect,offsetParent,strategy}=_ref;const isFixed=strategy==="fixed",documentElement=getDocumentElement(offsetParent),topLayer=elements?isTopLayer(elements.floating):!1;if(offsetParent===documentElement||topLayer&&isFixed) -return rect;let scroll={scrollLeft:0,scrollTop:0},scale2=createCoords(1);const offsets=createCoords(0),isOffsetParentAnElement=isHTMLElement(offsetParent);if((isOffsetParentAnElement||!isOffsetParentAnElement&&!isFixed)&&((getNodeName(offsetParent)!=="body"||isOverflowElement(documentElement))&&(scroll=getNodeScroll(offsetParent)),isHTMLElement(offsetParent))){const offsetRect=getBoundingClientRect(offsetParent);scale2=getScale(offsetParent),offsets.x=offsetRect.x+offsetParent.clientLeft,offsets. -y=offsetRect.y+offsetParent.clientTop}const htmlOffset=documentElement&&!isOffsetParentAnElement&&!isFixed?getHTMLOffset(documentElement,scroll,!0):createCoords(0);return{width:rect.width*scale2.x,height:rect.height*scale2.y,x:rect.x*scale2.x-scroll.scrollLeft*scale2.x+offsets.x+htmlOffset.x,y:rect.y*scale2.y-scroll.scrollTop*scale2.y+offsets.y+htmlOffset.y}}function getClientRects(element2){return Array.from(element2.getClientRects())}function getDocumentRect(element2){const html2=getDocumentElement( -element2),scroll=getNodeScroll(element2),body2=element2.ownerDocument.body,width=max(html2.scrollWidth,html2.clientWidth,body2.scrollWidth,body2.clientWidth),height=max(html2.scrollHeight,html2.clientHeight,body2.scrollHeight,body2.clientHeight);let x=-scroll.scrollLeft+getWindowScrollBarX(element2);const y=-scroll.scrollTop;return getComputedStyle$1(body2).direction==="rtl"&&(x+=max(html2.clientWidth,body2.clientWidth)-width),{width,height,x,y}}function getViewportRect(element2,strategy){const win=getWindow( -element2),html2=getDocumentElement(element2),visualViewport=win.visualViewport;let width=html2.clientWidth,height=html2.clientHeight,x=0,y=0;if(visualViewport){width=visualViewport.width,height=visualViewport.height;const visualViewportBased=isWebKit();(!visualViewportBased||visualViewportBased&&strategy==="fixed")&&(x=visualViewport.offsetLeft,y=visualViewport.offsetTop)}return{width,height,x,y}}const absoluteOrFixed=new Set(["absolute","fixed"]);function getInnerBoundingClientRect(element2,strategy){ -const clientRect=getBoundingClientRect(element2,!0,strategy==="fixed"),top=clientRect.top+element2.clientTop,left=clientRect.left+element2.clientLeft,scale2=isHTMLElement(element2)?getScale(element2):createCoords(1),width=element2.clientWidth*scale2.x,height=element2.clientHeight*scale2.y,x=left*scale2.x,y=top*scale2.y;return{width,height,x,y}}function getClientRectFromClippingAncestor(element2,clippingAncestor,strategy){let rect;if(clippingAncestor==="viewport")rect=getViewportRect(element2,strategy);else if(clippingAncestor=== -"document")rect=getDocumentRect(getDocumentElement(element2));else if(isElement(clippingAncestor))rect=getInnerBoundingClientRect(clippingAncestor,strategy);else{const visualOffsets=getVisualOffsets(element2);rect={x:clippingAncestor.x-visualOffsets.x,y:clippingAncestor.y-visualOffsets.y,width:clippingAncestor.width,height:clippingAncestor.height}}return rectToClientRect(rect)}function hasFixedPositionAncestor(element2,stopNode){const parentNode=getParentNode(element2);return parentNode===stopNode|| -!isElement(parentNode)||isLastTraversableNode(parentNode)?!1:getComputedStyle$1(parentNode).position==="fixed"||hasFixedPositionAncestor(parentNode,stopNode)}function getClippingElementAncestors(element2,cache2){const cachedResult=cache2.get(element2);if(cachedResult)return cachedResult;let result=getOverflowAncestors(element2,[],!1).filter(el=>isElement(el)&&getNodeName(el)!=="body"),currentContainingBlockComputedStyle=null;const elementIsFixed=getComputedStyle$1(element2).position==="fixed";let currentNode=elementIsFixed? -getParentNode(element2):element2;for(;isElement(currentNode)&&!isLastTraversableNode(currentNode);){const computedStyle=getComputedStyle$1(currentNode),currentNodeIsContaining=isContainingBlock(currentNode);!currentNodeIsContaining&&computedStyle.position==="fixed"&&(currentContainingBlockComputedStyle=null),(elementIsFixed?!currentNodeIsContaining&&!currentContainingBlockComputedStyle:!currentNodeIsContaining&&computedStyle.position==="static"&&!!currentContainingBlockComputedStyle&&absoluteOrFixed. -has(currentContainingBlockComputedStyle.position)||isOverflowElement(currentNode)&&!currentNodeIsContaining&&hasFixedPositionAncestor(element2,currentNode))?result=result.filter(ancestor=>ancestor!==currentNode):currentContainingBlockComputedStyle=computedStyle,currentNode=getParentNode(currentNode)}return cache2.set(element2,result),result}function getClippingRect(_ref){let{element:element2,boundary:boundary2,rootBoundary,strategy}=_ref;const clippingAncestors=[...boundary2==="clippingAncestors"? -isTopLayer(element2)?[]:getClippingElementAncestors(element2,this._c):[].concat(boundary2),rootBoundary],firstClippingAncestor=clippingAncestors[0],clippingRect=clippingAncestors.reduce((accRect,clippingAncestor)=>{const rect=getClientRectFromClippingAncestor(element2,clippingAncestor,strategy);return accRect.top=max(rect.top,accRect.top),accRect.right=min(rect.right,accRect.right),accRect.bottom=min(rect.bottom,accRect.bottom),accRect.left=max(rect.left,accRect.left),accRect},getClientRectFromClippingAncestor( -element2,firstClippingAncestor,strategy));return{width:clippingRect.right-clippingRect.left,height:clippingRect.bottom-clippingRect.top,x:clippingRect.left,y:clippingRect.top}}function getDimensions(element2){const{width,height}=getCssDimensions(element2);return{width,height}}function getRectRelativeToOffsetParent(element2,offsetParent,strategy){const isOffsetParentAnElement=isHTMLElement(offsetParent),documentElement=getDocumentElement(offsetParent),isFixed=strategy==="fixed",rect=getBoundingClientRect( -element2,!0,isFixed,offsetParent);let scroll={scrollLeft:0,scrollTop:0};const offsets=createCoords(0);function setLeftRTLScrollbarOffset(){offsets.x=getWindowScrollBarX(documentElement)}if(isOffsetParentAnElement||!isOffsetParentAnElement&&!isFixed)if((getNodeName(offsetParent)!=="body"||isOverflowElement(documentElement))&&(scroll=getNodeScroll(offsetParent)),isOffsetParentAnElement){const offsetRect=getBoundingClientRect(offsetParent,!0,isFixed,offsetParent);offsets.x=offsetRect.x+offsetParent. -clientLeft,offsets.y=offsetRect.y+offsetParent.clientTop}else documentElement&&setLeftRTLScrollbarOffset();isFixed&&!isOffsetParentAnElement&&documentElement&&setLeftRTLScrollbarOffset();const htmlOffset=documentElement&&!isOffsetParentAnElement&&!isFixed?getHTMLOffset(documentElement,scroll):createCoords(0),x=rect.left+scroll.scrollLeft-offsets.x-htmlOffset.x,y=rect.top+scroll.scrollTop-offsets.y-htmlOffset.y;return{x,y,width:rect.width,height:rect.height}}function isStaticPositioned(element2){ -return getComputedStyle$1(element2).position==="static"}function getTrueOffsetParent(element2,polyfill){if(!isHTMLElement(element2)||getComputedStyle$1(element2).position==="fixed")return null;if(polyfill)return polyfill(element2);let rawOffsetParent=element2.offsetParent;return getDocumentElement(element2)===rawOffsetParent&&(rawOffsetParent=rawOffsetParent.ownerDocument.body),rawOffsetParent}function getOffsetParent(element2,polyfill){const win=getWindow(element2);if(isTopLayer(element2))return win; -if(!isHTMLElement(element2)){let svgOffsetParent=getParentNode(element2);for(;svgOffsetParent&&!isLastTraversableNode(svgOffsetParent);){if(isElement(svgOffsetParent)&&!isStaticPositioned(svgOffsetParent))return svgOffsetParent;svgOffsetParent=getParentNode(svgOffsetParent)}return win}let offsetParent=getTrueOffsetParent(element2,polyfill);for(;offsetParent&&isTableElement(offsetParent)&&isStaticPositioned(offsetParent);)offsetParent=getTrueOffsetParent(offsetParent,polyfill);return offsetParent&& -isLastTraversableNode(offsetParent)&&isStaticPositioned(offsetParent)&&!isContainingBlock(offsetParent)?win:offsetParent||getContainingBlock(element2)||win}const getElementRects=async function(data){const getOffsetParentFn=this.getOffsetParent||getOffsetParent,getDimensionsFn=this.getDimensions,floatingDimensions=await getDimensionsFn(data.floating);return{reference:getRectRelativeToOffsetParent(data.reference,await getOffsetParentFn(data.floating),data.strategy),floating:{x:0,y:0,width:floatingDimensions. -width,height:floatingDimensions.height}}};function isRTL(element2){return getComputedStyle$1(element2).direction==="rtl"}const platform={convertOffsetParentRelativeRectToViewportRelativeRect,getDocumentElement,getClippingRect,getOffsetParent,getElementRects,getClientRects,getDimensions,getScale,isElement,isRTL};function rectsAreEqual(a,b){return a.x===b.x&&a.y===b.y&&a.width===b.width&&a.height===b.height}function observeMove(element2,onMove){let io=null,timeoutId;const root2=getDocumentElement( -element2);function cleanup(){var _io;clearTimeout(timeoutId),(_io=io)==null||_io.disconnect(),io=null}function refresh(skip,threshold){skip===void 0&&(skip=!1),threshold===void 0&&(threshold=1),cleanup();const elementRectForRootMargin=element2.getBoundingClientRect(),{left,top,width,height}=elementRectForRootMargin;if(skip||onMove(),!width||!height)return;const insetTop=floor(top),insetRight=floor(root2.clientWidth-(left+width)),insetBottom=floor(root2.clientHeight-(top+height)),insetLeft=floor( -left),options={rootMargin:-insetTop+"px "+-insetRight+"px "+-insetBottom+"px "+-insetLeft+"px",threshold:max(0,min(1,threshold))||1};let isFirstUpdate=!0;function handleObserve(entries){const ratio=entries[0].intersectionRatio;if(ratio!==threshold){if(!isFirstUpdate)return refresh();ratio?refresh(!1,ratio):timeoutId=setTimeout(()=>{refresh(!1,1e-7)},1e3)}ratio===1&&!rectsAreEqual(elementRectForRootMargin,element2.getBoundingClientRect())&&refresh(),isFirstUpdate=!1}try{io=new IntersectionObserver( -handleObserve,{...options,root:root2.ownerDocument})}catch{io=new IntersectionObserver(handleObserve,options)}io.observe(element2)}return refresh(!0),cleanup}function autoUpdate(reference,floating,update2,options){options===void 0&&(options={});const{ancestorScroll=!0,ancestorResize=!0,elementResize=typeof ResizeObserver=="function",layoutShift=typeof IntersectionObserver=="function",animationFrame=!1}=options,referenceEl=unwrapElement(reference),ancestors=ancestorScroll||ancestorResize?[...referenceEl? -getOverflowAncestors(referenceEl):[],...getOverflowAncestors(floating)]:[];ancestors.forEach(ancestor=>{ancestorScroll&&ancestor.addEventListener("scroll",update2,{passive:!0}),ancestorResize&&ancestor.addEventListener("resize",update2)});const cleanupIo=referenceEl&&layoutShift?observeMove(referenceEl,update2):null;let reobserveFrame=-1,resizeObserver=null;elementResize&&(resizeObserver=new ResizeObserver(_ref=>{let[firstEntry]=_ref;firstEntry&&firstEntry.target===referenceEl&&resizeObserver&&(resizeObserver. -unobserve(floating),cancelAnimationFrame(reobserveFrame),reobserveFrame=requestAnimationFrame(()=>{var _resizeObserver;(_resizeObserver=resizeObserver)==null||_resizeObserver.observe(floating)})),update2()}),referenceEl&&!animationFrame&&resizeObserver.observe(referenceEl),resizeObserver.observe(floating));let frameId,prevRefRect=animationFrame?getBoundingClientRect(reference):null;animationFrame&&frameLoop();function frameLoop(){const nextRefRect=getBoundingClientRect(reference);prevRefRect&&!rectsAreEqual( -prevRefRect,nextRefRect)&&update2(),prevRefRect=nextRefRect,frameId=requestAnimationFrame(frameLoop)}return update2(),()=>{var _resizeObserver2;ancestors.forEach(ancestor=>{ancestorScroll&&ancestor.removeEventListener("scroll",update2),ancestorResize&&ancestor.removeEventListener("resize",update2)}),cleanupIo?.(),(_resizeObserver2=resizeObserver)==null||_resizeObserver2.disconnect(),resizeObserver=null,animationFrame&&cancelAnimationFrame(frameId)}}const offset=offset$1,shift=shift$1,flip=flip$1, -size=size$1,hide=hide$1,arrow=arrow$1,limitShift=limitShift$1,computePosition=(reference,floating,options)=>{const cache2=new Map,mergedOptions={platform,...options},platformWithCache={...mergedOptions.platform,_c:cache2};return computePosition$1(reference,floating,{...mergedOptions,platform:platformWithCache})};function get(valueOrGetValue){return typeof valueOrGetValue=="function"?valueOrGetValue():valueOrGetValue}function getDPR(element2){return typeof window>"u"?1:(element2.ownerDocument.defaultView|| -window).devicePixelRatio||1}function roundByDPR(element2,value){const dpr=getDPR(element2);return Math.round(value*dpr)/dpr}function getFloatingContentCSSVars(name){return{[`--bits-${name}-content-transform-origin`]:"var(--bits-floating-transform-origin)",[`--bits-${name}-content-available-width`]:"var(--bits-floating-available-width)",[`--bits-${name}-content-available-height`]:"var(--bits-floating-available-height)",[`--bits-${name}-anchor-width`]:"var(--bits-floating-anchor-width)",[`--bits-${name}\ --anchor-height`]:"var(--bits-floating-anchor-height)"}}function useFloating(options){const whileElementsMountedOption=options.whileElementsMounted,openOption=user_derived(()=>get(options.open)??!0),middlewareOption=user_derived(()=>get(options.middleware)),transformOption=user_derived(()=>get(options.transform)??!0),placementOption=user_derived(()=>get(options.placement)??"bottom"),strategyOption=user_derived(()=>get(options.strategy)??"absolute"),sideOffsetOption=user_derived(()=>get(options.sideOffset)?? -0),alignOffsetOption=user_derived(()=>get(options.alignOffset)??0),reference=options.reference;let x=state$1(0),y=state$1(0);const floating=simpleBox(null);let strategy=state$1(proxy(get$4(strategyOption))),placement=state$1(proxy(get$4(placementOption))),middlewareData=state$1(proxy({})),isPositioned=state$1(!1);const floatingStyles=user_derived(()=>{const xVal=floating.current?roundByDPR(floating.current,get$4(x)):get$4(x),yVal=floating.current?roundByDPR(floating.current,get$4(y)):get$4(y);return get$4( -transformOption)?{position:get$4(strategy),left:"0",top:"0",transform:`translate(${xVal}px, ${yVal}px)`,...floating.current&&getDPR(floating.current)>=1.5&&{willChange:"transform"}}:{position:get$4(strategy),left:`${xVal}px`,top:`${yVal}px`}});let whileElementsMountedCleanup;function update2(){reference.current===null||floating.current===null||computePosition(reference.current,floating.current,{middleware:get$4(middlewareOption),placement:get$4(placementOption),strategy:get$4(strategyOption)}).then( -position2=>{if(!get$4(openOption)&&get$4(x)!==0&&get$4(y)!==0){const maxExpectedOffset=Math.max(Math.abs(get$4(sideOffsetOption)),Math.abs(get$4(alignOffsetOption)),15);if(position2.x<=maxExpectedOffset&&position2.y<=maxExpectedOffset)return}set$1(x,position2.x,!0),set$1(y,position2.y,!0),set$1(strategy,position2.strategy,!0),set$1(placement,position2.placement,!0),set$1(middlewareData,position2.middlewareData,!0),set$1(isPositioned,!0)})}function cleanup(){typeof whileElementsMountedCleanup=="f\ -unction"&&(whileElementsMountedCleanup(),whileElementsMountedCleanup=void 0)}function attach2(){if(cleanup(),whileElementsMountedOption===void 0){update2();return}reference.current===null||floating.current===null||(whileElementsMountedCleanup=whileElementsMountedOption(reference.current,floating.current,update2))}function reset2(){get$4(openOption)||set$1(isPositioned,!1)}return user_effect(update2),user_effect(attach2),user_effect(reset2),user_effect(()=>cleanup),{floating,reference,get strategy(){ -return get$4(strategy)},get placement(){return get$4(placement)},get middlewareData(){return get$4(middlewareData)},get isPositioned(){return get$4(isPositioned)},get floatingStyles(){return get$4(floatingStyles)},get update(){return update2}}}const OPPOSITE_SIDE={top:"bottom",right:"left",bottom:"top",left:"right"},FloatingRootContext=new Context$1("Floating.Root"),FloatingContentContext=new Context$1("Floating.Content"),FloatingTooltipRootContext=new Context$1("Floating.Root");class FloatingRootState{static create(tooltip=!1){ -return tooltip?FloatingTooltipRootContext.set(new FloatingRootState):FloatingRootContext.set(new FloatingRootState)}anchorNode=simpleBox(null);customAnchorNode=simpleBox(null);triggerNode=simpleBox(null);constructor(){user_effect(()=>{this.customAnchorNode.current?typeof this.customAnchorNode.current=="string"?this.anchorNode.current=document.querySelector(this.customAnchorNode.current):this.anchorNode.current=this.customAnchorNode.current:this.anchorNode.current=this.triggerNode.current})}}class FloatingContentState{static create(opts,tooltip=!1){ -return tooltip?FloatingContentContext.set(new FloatingContentState(opts,FloatingTooltipRootContext.get())):FloatingContentContext.set(new FloatingContentState(opts,FloatingRootContext.get()))}opts;root;contentRef=simpleBox(null);wrapperRef=simpleBox(null);arrowRef=simpleBox(null);contentAttachment=attachRef(this.contentRef);wrapperAttachment=attachRef(this.wrapperRef);arrowAttachment=attachRef(this.arrowRef);arrowId=simpleBox(useId());#transformedStyle=user_derived(()=>{if(typeof this.opts.style== -"string")return cssToStyleObj(this.opts.style);if(!this.opts.style)return{}});#updatePositionStrategy=void 0;#arrowSize=new ElementSize(()=>this.arrowRef.current??void 0);#arrowWidth=user_derived(()=>this.#arrowSize?.width??0);#arrowHeight=user_derived(()=>this.#arrowSize?.height??0);#desiredPlacement=user_derived(()=>this.opts.side?.current+(this.opts.align.current!=="center"?`-${this.opts.align.current}`:""));#boundary=user_derived(()=>Array.isArray(this.opts.collisionBoundary.current)?this.opts. -collisionBoundary.current:[this.opts.collisionBoundary.current]);#hasExplicitBoundaries=user_derived(()=>get$4(this.#boundary).length>0);get hasExplicitBoundaries(){return get$4(this.#hasExplicitBoundaries)}set hasExplicitBoundaries(value){set$1(this.#hasExplicitBoundaries,value)}#detectOverflowOptions=user_derived(()=>({padding:this.opts.collisionPadding.current,boundary:get$4(this.#boundary).filter(isNotNull),altBoundary:this.hasExplicitBoundaries}));get detectOverflowOptions(){return get$4(this.#detectOverflowOptions)}set detectOverflowOptions(value){ -set$1(this.#detectOverflowOptions,value)}#availableWidth=state$1(void 0);#availableHeight=state$1(void 0);#anchorWidth=state$1(void 0);#anchorHeight=state$1(void 0);#middleware=user_derived(()=>[offset({mainAxis:this.opts.sideOffset.current+get$4(this.#arrowHeight),alignmentAxis:this.opts.alignOffset.current}),this.opts.avoidCollisions.current&&shift({mainAxis:!0,crossAxis:!1,limiter:this.opts.sticky.current==="partial"?limitShift():void 0,...this.detectOverflowOptions}),this.opts.avoidCollisions. -current&&flip({...this.detectOverflowOptions}),size({...this.detectOverflowOptions,apply:({rects,availableWidth,availableHeight})=>{const{width:anchorWidth,height:anchorHeight}=rects.reference;set$1(this.#availableWidth,availableWidth,!0),set$1(this.#availableHeight,availableHeight,!0),set$1(this.#anchorWidth,anchorWidth,!0),set$1(this.#anchorHeight,anchorHeight,!0)}}),this.arrowRef.current&&arrow({element:this.arrowRef.current,padding:this.opts.arrowPadding.current}),transformOrigin({arrowWidth:get$4( -this.#arrowWidth),arrowHeight:get$4(this.#arrowHeight)}),this.opts.hideWhenDetached.current&&hide({strategy:"referenceHidden",...this.detectOverflowOptions})].filter(Boolean));get middleware(){return get$4(this.#middleware)}set middleware(value){set$1(this.#middleware,value)}floating;#placedSide=user_derived(()=>getSideFromPlacement(this.floating.placement));get placedSide(){return get$4(this.#placedSide)}set placedSide(value){set$1(this.#placedSide,value)}#placedAlign=user_derived(()=>getAlignFromPlacement( -this.floating.placement));get placedAlign(){return get$4(this.#placedAlign)}set placedAlign(value){set$1(this.#placedAlign,value)}#arrowX=user_derived(()=>this.floating.middlewareData.arrow?.x??0);get arrowX(){return get$4(this.#arrowX)}set arrowX(value){set$1(this.#arrowX,value)}#arrowY=user_derived(()=>this.floating.middlewareData.arrow?.y??0);get arrowY(){return get$4(this.#arrowY)}set arrowY(value){set$1(this.#arrowY,value)}#cannotCenterArrow=user_derived(()=>this.floating.middlewareData.arrow?. -centerOffset!==0);get cannotCenterArrow(){return get$4(this.#cannotCenterArrow)}set cannotCenterArrow(value){set$1(this.#cannotCenterArrow,value)}#contentZIndex=state$1();get contentZIndex(){return get$4(this.#contentZIndex)}set contentZIndex(value){set$1(this.#contentZIndex,value,!0)}#arrowBaseSide=user_derived(()=>OPPOSITE_SIDE[this.placedSide]);get arrowBaseSide(){return get$4(this.#arrowBaseSide)}set arrowBaseSide(value){set$1(this.#arrowBaseSide,value)}#wrapperProps=user_derived(()=>({id:this. -opts.wrapperId.current,"data-bits-floating-content-wrapper":"",style:{...this.floating.floatingStyles,transform:this.floating.isPositioned?this.floating.floatingStyles.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:this.contentZIndex,"--bits-floating-transform-origin":`${this.floating.middlewareData.transformOrigin?.x} ${this.floating.middlewareData.transformOrigin?.y}`,"--bits-floating-available-width":`${get$4(this.#availableWidth)}px`,"--bits-floating-available-height":`${get$4( -this.#availableHeight)}px`,"--bits-floating-anchor-width":`${get$4(this.#anchorWidth)}px`,"--bits-floating-anchor-height":`${get$4(this.#anchorHeight)}px`,...this.floating.middlewareData.hide?.referenceHidden&&{visibility:"hidden","pointer-events":"none"},...get$4(this.#transformedStyle)},dir:this.opts.dir.current,...this.wrapperAttachment}));get wrapperProps(){return get$4(this.#wrapperProps)}set wrapperProps(value){set$1(this.#wrapperProps,value)}#props=user_derived(()=>({"data-side":this.placedSide, -"data-align":this.placedAlign,style:styleToString$1({...get$4(this.#transformedStyle)}),...this.contentAttachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}#arrowStyle=user_derived(()=>({position:"absolute",left:this.arrowX?`${this.arrowX}px`:void 0,top:this.arrowY?`${this.arrowY}px`:void 0,[this.arrowBaseSide]:0,"transform-origin":{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[this.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%\ -) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[this.placedSide],visibility:this.cannotCenterArrow?"hidden":void 0}));get arrowStyle(){return get$4(this.#arrowStyle)}set arrowStyle(value){set$1(this.#arrowStyle,value)}constructor(opts,root2){this.opts=opts,this.root=root2,opts.customAnchor&&(this.root.customAnchorNode.current=opts.customAnchor.current),watch$1(()=>opts.customAnchor.current,customAnchor=>{this.root.customAnchorNode. -current=customAnchor}),this.floating=useFloating({strategy:()=>this.opts.strategy.current,placement:()=>get$4(this.#desiredPlacement),middleware:()=>this.middleware,reference:this.root.anchorNode,whileElementsMounted:(...args)=>autoUpdate(...args,{animationFrame:this.#updatePositionStrategy?.current==="always"}),open:()=>this.opts.enabled.current,sideOffset:()=>this.opts.sideOffset.current,alignOffset:()=>this.opts.alignOffset.current}),user_effect(()=>{this.floating.isPositioned&&this.opts.onPlaced?. -current()}),watch$1(()=>this.contentRef.current,contentNode=>{if(!contentNode)return;const win=getWindow$1(contentNode);this.contentZIndex=win.getComputedStyle(contentNode).zIndex}),user_effect(()=>{this.floating.floating.current=this.wrapperRef.current})}}class FloatingArrowState{static create(opts){return new FloatingArrowState(opts,FloatingContentContext.get())}opts;content;constructor(opts,content2){this.opts=opts,this.content=content2}#props=user_derived(()=>({id:this.opts.id.current,style:this. -content.arrowStyle,"data-side":this.content.placedSide,...this.content.arrowAttachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class FloatingAnchorState{static create(opts,tooltip=!1){return tooltip?new FloatingAnchorState(opts,FloatingTooltipRootContext.get()):new FloatingAnchorState(opts,FloatingRootContext.get())}opts;root;constructor(opts,root2){this.opts=opts,this.root=root2,opts.virtualEl&&opts.virtualEl.current?root2.triggerNode=boxFrom$1(opts.virtualEl. -current):root2.triggerNode=opts.ref}}function transformOrigin(options){return{name:"transformOrigin",options,fn(data){const{placement,rects,middlewareData}=data,isArrowHidden=middlewareData.arrow?.centerOffset!==0,arrowWidth=isArrowHidden?0:options.arrowWidth,arrowHeight=isArrowHidden?0:options.arrowHeight,[placedSide,placedAlign]=getSideAndAlignFromPlacement(placement),noArrowAlign={start:"0%",center:"50%",end:"100%"}[placedAlign],arrowXCenter=(middlewareData.arrow?.x??0)+arrowWidth/2,arrowYCenter=(middlewareData. -arrow?.y??0)+arrowHeight/2;let x="",y="";return placedSide==="bottom"?(x=isArrowHidden?noArrowAlign:`${arrowXCenter}px`,y=`${-arrowHeight}px`):placedSide==="top"?(x=isArrowHidden?noArrowAlign:`${arrowXCenter}px`,y=`${rects.floating.height+arrowHeight}px`):placedSide==="right"?(x=`${-arrowHeight}px`,y=isArrowHidden?noArrowAlign:`${arrowYCenter}px`):placedSide==="left"&&(x=`${rects.floating.width+arrowHeight}px`,y=isArrowHidden?noArrowAlign:`${arrowYCenter}px`),{data:{x,y}}}}}function getSideAndAlignFromPlacement(placement){ -const[side,align="center"]=placement.split("-");return[side,align]}function getSideFromPlacement(placement){return getSideAndAlignFromPlacement(placement)[0]}function getAlignFromPlacement(placement){return getSideAndAlignFromPlacement(placement)[1]}function Floating_layer($$anchor,$$props){push$1($$props,!0);let tooltip=prop($$props,"tooltip",3,!1);FloatingRootState.create(tooltip());var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor, -fragment),pop()}class DataTypeahead{#opts;#candidateValues=user_derived(()=>this.#opts.candidateValues());#search;constructor(opts){this.#opts=opts,this.#search=boxAutoReset("",{afterMs:1e3,getWindow:this.#opts.getWindow}),this.handleTypeaheadSearch=this.handleTypeaheadSearch.bind(this),this.resetTypeahead=this.resetTypeahead.bind(this)}handleTypeaheadSearch(key2){if(!this.#opts.enabled()||!get$4(this.#candidateValues).length)return;this.#search.current=this.#search.current+key2;const currentItem=this.#opts. -getCurrentItem(),currentMatch=get$4(this.#candidateValues).find(item=>item===currentItem)??"",values=get$4(this.#candidateValues).map(item=>item??""),nextMatch=getNextMatch(values,this.#search.current,currentMatch),newItem=get$4(this.#candidateValues).find(item=>item===nextMatch);return newItem&&this.#opts.onMatch(newItem),newItem}resetTypeahead(){this.#search.current=""}}const FIRST_KEYS=[ARROW_DOWN,PAGE_UP,HOME],LAST_KEYS=[ARROW_UP,PAGE_DOWN,END],FIRST_LAST_KEYS=[...FIRST_KEYS,...LAST_KEYS],selectAttrs=createBitsAttrs( -{component:"select",parts:["trigger","content","item","viewport","scroll-up-button","scroll-down-button","group","group-label","separator","arrow","input","content-wrapper","item-text","value"]}),SelectRootContext=new Context$1("Select.Root | Combobox.Root"),SelectContentContext=new Context$1("Select.Content | Combobox.Content");class SelectBaseRootState{opts;#touchedInput=state$1(!1);get touchedInput(){return get$4(this.#touchedInput)}set touchedInput(value){set$1(this.#touchedInput,value,!0)}#inputNode=state$1( -null);get inputNode(){return get$4(this.#inputNode)}set inputNode(value){set$1(this.#inputNode,value,!0)}#contentNode=state$1(null);get contentNode(){return get$4(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}contentPresence;#viewportNode=state$1(null);get viewportNode(){return get$4(this.#viewportNode)}set viewportNode(value){set$1(this.#viewportNode,value,!0)}#triggerNode=state$1(null);get triggerNode(){return get$4(this.#triggerNode)}set triggerNode(value){set$1( -this.#triggerNode,value,!0)}#valueId=state$1("");get valueId(){return get$4(this.#valueId)}set valueId(value){set$1(this.#valueId,value,!0)}#highlightedNode=state$1(null);get highlightedNode(){return get$4(this.#highlightedNode)}set highlightedNode(value){set$1(this.#highlightedNode,value,!0)}#highlightedValue=user_derived(()=>this.highlightedNode?this.highlightedNode.getAttribute("data-value"):null);get highlightedValue(){return get$4(this.#highlightedValue)}set highlightedValue(value){set$1(this.#highlightedValue, -value)}#highlightedId=user_derived(()=>{if(this.highlightedNode)return this.highlightedNode.id});get highlightedId(){return get$4(this.#highlightedId)}set highlightedId(value){set$1(this.#highlightedId,value)}#highlightedLabel=user_derived(()=>this.highlightedNode?this.highlightedNode.getAttribute("data-label"):null);get highlightedLabel(){return get$4(this.#highlightedLabel)}set highlightedLabel(value){set$1(this.#highlightedLabel,value)}isUsingKeyboard=!1;isCombobox=!1;domContext=new DOMContext( -()=>null);constructor(opts){this.opts=opts,this.isCombobox=opts.isCombobox,this.contentPresence=new PresenceManager({ref:boxWith$1(()=>this.contentNode),open:this.opts.open,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),user_pre_effect(()=>{this.opts.open.current||this.setHighlightedNode(null)})}setHighlightedNode(node2,initial=!1){this.highlightedNode=node2,node2&&(this.isUsingKeyboard||initial)&&node2.scrollIntoView({block:this.opts.scrollAlignment.current})}getCandidateNodes(){ -const node2=this.contentNode;return node2?Array.from(node2.querySelectorAll(`[${this.getBitsAttr("item")}]:not([data-disabled])`)):[]}setHighlightedToFirstCandidate(initial=!1){this.setHighlightedNode(null);let nodes2=this.getCandidateNodes();if(nodes2.length){if(this.viewportNode){const viewportRect=this.viewportNode.getBoundingClientRect();nodes2=nodes2.filter(node2=>{if(!this.viewportNode)return!1;const nodeRect=node2.getBoundingClientRect();return nodeRect.right<viewportRect.right&&nodeRect. -left>viewportRect.left&&nodeRect.bottom<viewportRect.bottom&&nodeRect.top>viewportRect.top})}this.setHighlightedNode(nodes2[0],initial)}}getNodeByValue(value){return this.getCandidateNodes().find(node2=>node2.dataset.value===value)??null}setOpen(open2){this.opts.open.current=open2}toggleOpen(){this.opts.open.current=!this.opts.open.current}handleOpen(){this.setOpen(!0)}handleClose(){this.setHighlightedNode(null),this.setOpen(!1)}toggleMenu(){this.toggleOpen()}getBitsAttr=part=>selectAttrs.getAttr( -part,this.isCombobox?"combobox":void 0)}class SelectSingleRootState extends SelectBaseRootState{opts;isMulti=!1;#hasValue=user_derived(()=>this.opts.value.current!=="");get hasValue(){return get$4(this.#hasValue)}set hasValue(value){set$1(this.#hasValue,value)}#currentLabel=user_derived(()=>this.opts.items.current.length?this.opts.items.current.find(item=>item.value===this.opts.value.current)?.label??"":"");get currentLabel(){return get$4(this.#currentLabel)}set currentLabel(value){set$1(this.#currentLabel, -value)}#candidateLabels=user_derived(()=>this.opts.items.current.length?this.opts.items.current.filter(item=>!item.disabled).map(item=>item.label):[]);get candidateLabels(){return get$4(this.#candidateLabels)}set candidateLabels(value){set$1(this.#candidateLabels,value)}#dataTypeaheadEnabled=user_derived(()=>!(this.isMulti||this.opts.items.current.length===0));get dataTypeaheadEnabled(){return get$4(this.#dataTypeaheadEnabled)}set dataTypeaheadEnabled(value){set$1(this.#dataTypeaheadEnabled,value)}constructor(opts){ -super(opts),this.opts=opts,user_effect(()=>{!this.opts.open.current&&this.highlightedNode&&this.setHighlightedNode(null)}),watch$1(()=>this.opts.open.current,()=>{this.opts.open.current&&this.setInitialHighlightedNode()})}includesItem(itemValue){return this.opts.value.current===itemValue}toggleItem(itemValue,itemLabel=itemValue){const newValue=this.includesItem(itemValue)?"":itemValue;this.opts.value.current=newValue,newValue!==""&&(this.opts.inputValue.current=itemLabel)}setInitialHighlightedNode(){ -afterTick(()=>{if(!(this.highlightedNode&&this.domContext.getDocument().contains(this.highlightedNode))){if(this.opts.value.current!==""){const node2=this.getNodeByValue(this.opts.value.current);if(node2){this.setHighlightedNode(node2,!0);return}}this.setHighlightedToFirstCandidate(!0)}})}}class SelectMultipleRootState extends SelectBaseRootState{opts;isMulti=!0;#hasValue=user_derived(()=>this.opts.value.current.length>0);get hasValue(){return get$4(this.#hasValue)}set hasValue(value){set$1(this.#hasValue, -value)}constructor(opts){super(opts),this.opts=opts,user_effect(()=>{!this.opts.open.current&&this.highlightedNode&&this.setHighlightedNode(null)}),watch$1(()=>this.opts.open.current,()=>{this.opts.open.current&&this.setInitialHighlightedNode()})}includesItem(itemValue){return this.opts.value.current.includes(itemValue)}toggleItem(itemValue,itemLabel=itemValue){this.includesItem(itemValue)?this.opts.value.current=this.opts.value.current.filter(v=>v!==itemValue):this.opts.value.current=[...this.opts. -value.current,itemValue],this.opts.inputValue.current=itemLabel}setInitialHighlightedNode(){afterTick(()=>{if(this.domContext&&!(this.highlightedNode&&this.domContext.getDocument().contains(this.highlightedNode))){if(this.opts.value.current.length&&this.opts.value.current[0]!==""){const node2=this.getNodeByValue(this.opts.value.current[0]);if(node2){this.setHighlightedNode(node2,!0);return}}this.setHighlightedToFirstCandidate(!0)}})}}class SelectRootState{static create(props){const{type:type2,...rest}=props, -rootState=type2==="single"?new SelectSingleRootState(rest):new SelectMultipleRootState(rest);return SelectRootContext.set(rootState)}}class SelectTriggerState{static create(opts){return new SelectTriggerState(opts,SelectRootContext.get())}opts;root;attachment;#domTypeahead;#dataTypeahead;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(opts.ref,v=>this.root.triggerNode=v),this.root.domContext=new DOMContext(opts.ref),this.#domTypeahead=new DOMTypeahead({getCurrentItem:()=>this. -root.highlightedNode,onMatch:node2=>{this.root.setHighlightedNode(node2)},getActiveElement:()=>this.root.domContext.getActiveElement(),getWindow:()=>this.root.domContext.getWindow()}),this.#dataTypeahead=new DataTypeahead({getCurrentItem:()=>this.root.isMulti?"":this.root.currentLabel,onMatch:label=>{if(this.root.isMulti||!this.root.opts.items.current)return;const matchedItem=this.root.opts.items.current.find(item=>item.label===label);matchedItem&&(this.root.opts.value.current=matchedItem.value)}, -enabled:()=>!this.root.isMulti&&this.root.dataTypeaheadEnabled,candidateValues:()=>this.root.isMulti?[]:this.root.candidateLabels,getWindow:()=>this.root.domContext.getWindow()}),this.onkeydown=this.onkeydown.bind(this),this.onpointerdown=this.onpointerdown.bind(this),this.onpointerup=this.onpointerup.bind(this),this.onclick=this.onclick.bind(this)}#handleOpen(){this.root.opts.open.current=!0,this.#dataTypeahead.resetTypeahead(),this.#domTypeahead.resetTypeahead()}#handlePointerOpen(_){this.#handleOpen()}#handleKeyboardSelection(){ -const isCurrentSelectedValue=this.root.highlightedValue===this.root.opts.value.current;return!this.root.opts.allowDeselect.current&&isCurrentSelectedValue&&!this.root.isMulti?(this.root.handleClose(),!0):(this.root.highlightedValue!==null&&this.root.toggleItem(this.root.highlightedValue,this.root.highlightedLabel??void 0),!this.root.isMulti&&!isCurrentSelectedValue?(this.root.handleClose(),!0):!1)}onkeydown(e){if(this.root.isUsingKeyboard=!0,(e.key===ARROW_UP||e.key===ARROW_DOWN)&&e.preventDefault(), -!this.root.opts.open.current){if(e.key===ENTER||e.key===SPACE||e.key===ARROW_DOWN||e.key===ARROW_UP)e.preventDefault(),this.root.handleOpen();else if(!this.root.isMulti&&this.root.dataTypeaheadEnabled){this.#dataTypeahead.handleTypeaheadSearch(e.key);return}if(this.root.hasValue)return;const candidateNodes2=this.root.getCandidateNodes();if(!candidateNodes2.length)return;if(e.key===ARROW_DOWN){const firstCandidate=candidateNodes2[0];this.root.setHighlightedNode(firstCandidate)}else if(e.key===ARROW_UP){ -const lastCandidate=candidateNodes2[candidateNodes2.length-1];this.root.setHighlightedNode(lastCandidate)}return}if(e.key===TAB){this.root.handleClose();return}if((e.key===ENTER||e.key===SPACE&&this.#domTypeahead.search==="")&&!e.isComposing&&(e.preventDefault(),this.#handleKeyboardSelection()))return;if(e.key===ARROW_UP&&e.altKey&&this.root.handleClose(),FIRST_LAST_KEYS.includes(e.key)){e.preventDefault();const candidateNodes2=this.root.getCandidateNodes(),currHighlightedNode=this.root.highlightedNode, -currIndex=currHighlightedNode?candidateNodes2.indexOf(currHighlightedNode):-1,loop2=this.root.opts.loop.current;let nextItem;if(e.key===ARROW_DOWN?nextItem=next(candidateNodes2,currIndex,loop2):e.key===ARROW_UP?nextItem=prev(candidateNodes2,currIndex,loop2):e.key===PAGE_DOWN?nextItem=forward(candidateNodes2,currIndex,10,loop2):e.key===PAGE_UP?nextItem=backward(candidateNodes2,currIndex,10,loop2):e.key===HOME?nextItem=candidateNodes2[0]:e.key===END&&(nextItem=candidateNodes2[candidateNodes2.length- -1]),!nextItem)return;this.root.setHighlightedNode(nextItem);return}const isModifierKey=e.ctrlKey||e.altKey||e.metaKey,isCharacterKey=e.key.length===1,isSpaceKey=e.key===SPACE,candidateNodes=this.root.getCandidateNodes();if(e.key!==TAB){if(!isModifierKey&&(isCharacterKey||isSpaceKey)){!this.#domTypeahead.handleTypeaheadSearch(e.key,candidateNodes)&&isSpaceKey&&(e.preventDefault(),this.#handleKeyboardSelection());return}this.root.highlightedNode||this.root.setHighlightedToFirstCandidate()}}onclick(e){ -e.currentTarget.focus()}onpointerdown(e){if(this.root.opts.disabled.current)return;if(e.pointerType==="touch")return e.preventDefault();const target2=e.target;target2?.hasPointerCapture(e.pointerId)&&target2?.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&(this.root.opts.open.current===!1?this.#handlePointerOpen(e):this.root.handleClose())}onpointerup(e){this.root.opts.disabled.current||(e.preventDefault(),e.pointerType==="touch"&&(this.root.opts.open.current===!1?this.#handlePointerOpen( -e):this.root.handleClose()))}#props=user_derived(()=>({id:this.opts.id.current,disabled:this.root.opts.disabled.current?!0:void 0,"aria-haspopup":"listbox","aria-expanded":boolToStr(this.root.opts.open.current),"aria-activedescendant":this.root.highlightedId,"data-state":getDataOpenClosed(this.root.opts.open.current),"data-disabled":boolToEmptyStrOrUndef(this.root.opts.disabled.current),"data-placeholder":this.root.hasValue?void 0:"",[this.root.getBitsAttr("trigger")]:"",onpointerdown:this.onpointerdown, -onkeydown:this.onkeydown,onclick:this.onclick,onpointerup:this.onpointerup,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class SelectContentState{static create(opts){return SelectContentContext.set(new SelectContentState(opts,SelectRootContext.get()))}opts;root;attachment;#isPositioned=state$1(!1);get isPositioned(){return get$4(this.#isPositioned)}set isPositioned(value){set$1(this.#isPositioned,value,!0)}domContext;constructor(opts,root2){ -this.opts=opts,this.root=root2,this.attachment=attachRef(opts.ref,v=>this.root.contentNode=v),this.domContext=new DOMContext(this.opts.ref),this.root.domContext===null&&(this.root.domContext=this.domContext),onDestroyEffect(()=>{this.root.contentNode=null,this.isPositioned=!1}),watch$1(()=>this.root.opts.open.current,()=>{this.root.opts.open.current||(this.isPositioned=!1)}),this.onpointermove=this.onpointermove.bind(this)}onpointermove(_){this.root.isUsingKeyboard=!1}#styles=user_derived(()=>getFloatingContentCSSVars( -this.root.isCombobox?"combobox":"select"));onInteractOutside=e=>{if(e.target===this.root.triggerNode||e.target===this.root.inputNode){e.preventDefault();return}this.opts.onInteractOutside.current(e),!e.defaultPrevented&&this.root.handleClose()};onEscapeKeydown=e=>{this.opts.onEscapeKeydown.current(e),!e.defaultPrevented&&this.root.handleClose()};onOpenAutoFocus=e=>{e.preventDefault()};onCloseAutoFocus=e=>{e.preventDefault()};get shouldRender(){return this.root.contentPresence.shouldRender}#snippetProps=user_derived( -()=>({open:this.root.opts.open.current}));get snippetProps(){return get$4(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,role:"listbox","aria-multiselectable":this.root.isMulti?"true":void 0,"data-state":getDataOpenClosed(this.root.opts.open.current),[this.root.getBitsAttr("content")]:"",style:{display:"flex",flexDirection:"column",outline:"none",boxSizing:"border-box",pointerEvents:"auto",...get$4(this.#styles)},onpointermove:this. -onpointermove,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}popperProps={onInteractOutside:this.onInteractOutside,onEscapeKeydown:this.onEscapeKeydown,onOpenAutoFocus:this.onOpenAutoFocus,onCloseAutoFocus:this.onCloseAutoFocus,trapFocus:!1,loop:!1,onPlaced:()=>{this.root.opts.open.current&&(this.isPositioned=!0)}}}class SelectItemState{static create(opts){return new SelectItemState(opts,SelectRootContext.get())}opts;root;attachment;#isSelected=user_derived( -()=>this.root.includesItem(this.opts.value.current));get isSelected(){return get$4(this.#isSelected)}set isSelected(value){set$1(this.#isSelected,value)}#isHighlighted=user_derived(()=>this.root.highlightedValue===this.opts.value.current);get isHighlighted(){return get$4(this.#isHighlighted)}set isHighlighted(value){set$1(this.#isHighlighted,value)}prevHighlighted=new Previous(()=>this.isHighlighted);#mounted=state$1(!1);get mounted(){return get$4(this.#mounted)}set mounted(value){set$1(this.#mounted, -value,!0)}constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(opts.ref),watch$1([()=>this.isHighlighted,()=>this.prevHighlighted.current],()=>{this.isHighlighted?this.opts.onHighlight.current():this.prevHighlighted.current&&this.opts.onUnhighlight.current()}),watch$1(()=>this.mounted,()=>{this.mounted&&this.root.setInitialHighlightedNode()}),this.onpointerdown=this.onpointerdown.bind(this),this.onpointerup=this.onpointerup.bind(this),this.onpointermove=this.onpointermove. -bind(this)}handleSelect(){if(this.opts.disabled.current)return;const isCurrentSelectedValue=this.opts.value.current===this.root.opts.value.current;if(!this.root.opts.allowDeselect.current&&isCurrentSelectedValue&&!this.root.isMulti){this.root.handleClose();return}this.root.toggleItem(this.opts.value.current,this.opts.label.current),!this.root.isMulti&&!isCurrentSelectedValue&&this.root.handleClose()}#snippetProps=user_derived(()=>({selected:this.isSelected,highlighted:this.isHighlighted}));get snippetProps(){ -return get$4(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}onpointerdown(e){e.preventDefault()}onpointerup(e){if(!(e.defaultPrevented||!this.opts.ref.current)){if(e.pointerType==="touch"&&!isIOS){on(this.opts.ref.current,"click",()=>{this.handleSelect(),this.root.setHighlightedNode(this.opts.ref.current)},{once:!0});return}e.preventDefault(),this.handleSelect(),e.pointerType==="touch"&&this.root.setHighlightedNode(this.opts.ref.current)}}onpointermove(e){e.pointerType!== -"touch"&&this.root.highlightedNode!==this.opts.ref.current&&this.root.setHighlightedNode(this.opts.ref.current)}#props=user_derived(()=>({id:this.opts.id.current,role:"option","aria-selected":this.root.includesItem(this.opts.value.current)?"true":void 0,"data-value":this.opts.value.current,"data-disabled":boolToEmptyStrOrUndef(this.opts.disabled.current),"data-highlighted":this.root.highlightedValue===this.opts.value.current&&!this.opts.disabled.current?"":void 0,"data-selected":this.root.includesItem( -this.opts.value.current)?"":void 0,"data-label":this.opts.label.current,[this.root.getBitsAttr("item")]:"",onpointermove:this.onpointermove,onpointerdown:this.onpointerdown,onpointerup:this.onpointerup,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class SelectHiddenInputState{static create(opts){return new SelectHiddenInputState(opts,SelectRootContext.get())}opts;root;#shouldRender=user_derived(()=>this.root.opts.name.current!=="");get shouldRender(){ -return get$4(this.#shouldRender)}set shouldRender(value){set$1(this.#shouldRender,value)}constructor(opts,root2){this.opts=opts,this.root=root2,this.onfocus=this.onfocus.bind(this)}onfocus(e){e.preventDefault(),this.root.isCombobox?this.root.inputNode?.focus():this.root.triggerNode?.focus()}#props=user_derived(()=>({disabled:boolToTrueOrUndef(this.root.opts.disabled.current),required:boolToTrueOrUndef(this.root.opts.required.current),name:this.root.opts.name.current,value:this.opts.value.current, -onfocus:this.onfocus}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class SelectViewportState{static create(opts){return new SelectViewportState(opts,SelectContentContext.get())}opts;content;root;attachment;#prevScrollTop=state$1(0);get prevScrollTop(){return get$4(this.#prevScrollTop)}set prevScrollTop(value){set$1(this.#prevScrollTop,value,!0)}constructor(opts,content2){this.opts=opts,this.content=content2,this.root=content2.root,this.attachment=attachRef(opts. -ref,v=>{this.root.viewportNode=v})}#props=user_derived(()=>({id:this.opts.id.current,role:"presentation",[this.root.getBitsAttr("viewport")]:"",style:{position:"relative",flex:1,overflow:"auto"},...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class SelectScrollButtonImplState{opts;content;root;attachment;autoScrollTimer=null;userScrollTimer=-1;isUserScrolling=!1;onAutoScroll=noop$1;#mounted=state$1(!1);get mounted(){return get$4(this.#mounted)}set mounted(value){ -set$1(this.#mounted,value,!0)}constructor(opts,content2){this.opts=opts,this.content=content2,this.root=content2.root,this.attachment=attachRef(opts.ref),watch$1([()=>this.mounted],()=>{if(!this.mounted){this.isUserScrolling=!1;return}this.isUserScrolling}),user_effect(()=>{this.mounted||this.clearAutoScrollInterval()}),this.onpointerdown=this.onpointerdown.bind(this),this.onpointermove=this.onpointermove.bind(this),this.onpointerleave=this.onpointerleave.bind(this)}handleUserScroll(){this.content. -domContext.clearTimeout(this.userScrollTimer),this.isUserScrolling=!0,this.userScrollTimer=this.content.domContext.setTimeout(()=>{this.isUserScrolling=!1},200)}clearAutoScrollInterval(){this.autoScrollTimer!==null&&(this.content.domContext.clearTimeout(this.autoScrollTimer),this.autoScrollTimer=null)}onpointerdown(_){if(this.autoScrollTimer!==null)return;const autoScroll=tick2=>{this.onAutoScroll(),this.autoScrollTimer=this.content.domContext.setTimeout(()=>autoScroll(tick2+1),this.opts.delay.current( -tick2))};this.autoScrollTimer=this.content.domContext.setTimeout(()=>autoScroll(1),this.opts.delay.current(0))}onpointermove(e){this.onpointerdown(e)}onpointerleave(_){this.clearAutoScrollInterval()}#props=user_derived(()=>({id:this.opts.id.current,"aria-hidden":boolToStrTrueOrUndef(!0),style:{flexShrink:0},onpointerdown:this.onpointerdown,onpointermove:this.onpointermove,onpointerleave:this.onpointerleave,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props, -value)}}class SelectScrollDownButtonState{static create(opts){return new SelectScrollDownButtonState(new SelectScrollButtonImplState(opts,SelectContentContext.get()))}scrollButtonState;content;root;#canScrollDown=state$1(!1);get canScrollDown(){return get$4(this.#canScrollDown)}set canScrollDown(value){set$1(this.#canScrollDown,value,!0)}scrollIntoViewTimer=null;constructor(scrollButtonState){this.scrollButtonState=scrollButtonState,this.content=scrollButtonState.content,this.root=scrollButtonState. -root,this.scrollButtonState.onAutoScroll=this.handleAutoScroll,watch$1([()=>this.root.viewportNode,()=>this.content.isPositioned],()=>{if(!(!this.root.viewportNode||!this.content.isPositioned))return this.handleScroll(!0),on(this.root.viewportNode,"scroll",()=>this.handleScroll())}),watch$1([()=>this.root.opts.inputValue.current,()=>this.root.viewportNode,()=>this.content.isPositioned],()=>{!this.root.viewportNode||!this.content.isPositioned||this.handleScroll(!0)}),watch$1(()=>this.scrollButtonState. -mounted,()=>{this.scrollButtonState.mounted&&(this.scrollIntoViewTimer&&clearTimeout(this.scrollIntoViewTimer),this.scrollIntoViewTimer=afterSleep(5,()=>{this.root.highlightedNode?.scrollIntoView({block:this.root.opts.scrollAlignment.current})}))})}handleScroll=(manual=!1)=>{if(manual||this.scrollButtonState.handleUserScroll(),!this.root.viewportNode)return;const maxScroll=this.root.viewportNode.scrollHeight-this.root.viewportNode.clientHeight,paddingTop=Number.parseInt(getComputedStyle(this.root. -viewportNode).paddingTop,10);this.canScrollDown=Math.ceil(this.root.viewportNode.scrollTop)<maxScroll-paddingTop};handleAutoScroll=()=>{const viewport=this.root.viewportNode,selectedItem=this.root.highlightedNode;!viewport||!selectedItem||(viewport.scrollTop=viewport.scrollTop+selectedItem.offsetHeight)};#props=user_derived(()=>({...this.scrollButtonState.props,[this.root.getBitsAttr("scroll-down-button")]:""}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class SelectScrollUpButtonState{static create(opts){ -return new SelectScrollUpButtonState(new SelectScrollButtonImplState(opts,SelectContentContext.get()))}scrollButtonState;content;root;#canScrollUp=state$1(!1);get canScrollUp(){return get$4(this.#canScrollUp)}set canScrollUp(value){set$1(this.#canScrollUp,value,!0)}constructor(scrollButtonState){this.scrollButtonState=scrollButtonState,this.content=scrollButtonState.content,this.root=scrollButtonState.root,this.scrollButtonState.onAutoScroll=this.handleAutoScroll,watch$1([()=>this.root.viewportNode, -()=>this.content.isPositioned],()=>{if(!(!this.root.viewportNode||!this.content.isPositioned))return this.handleScroll(!0),on(this.root.viewportNode,"scroll",()=>this.handleScroll())})}handleScroll=(manual=!1)=>{if(manual||this.scrollButtonState.handleUserScroll(),!this.root.viewportNode)return;const paddingTop=Number.parseInt(getComputedStyle(this.root.viewportNode).paddingTop,10);this.canScrollUp=this.root.viewportNode.scrollTop-paddingTop>.1};handleAutoScroll=()=>{!this.root.viewportNode||!this. -root.highlightedNode||(this.root.viewportNode.scrollTop=this.root.viewportNode.scrollTop-this.root.highlightedNode.offsetHeight)};#props=user_derived(()=>({...this.scrollButtonState.props,[this.root.getBitsAttr("scroll-up-button")]:""}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}function Select_hidden_input($$anchor,$$props){push$1($$props,!0);let value=prop($$props,"value",15);const hiddenInputState=SelectHiddenInputState.create({value:boxWith$1(()=>value())}); -var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Hidden_input($$anchor2,spread_props(()=>hiddenInputState.props,{get autocomplete(){return $$props.autocomplete},get value(){return value()},set value($$value){value($$value)}}))};if_block(node2,$$render=>{hiddenInputState.shouldRender&&$$render(consequent)})}append($$anchor,fragment),pop()}function Floating_layer_anchor($$anchor,$$props){push$1($$props,!0);let tooltip=prop($$props,"tooltip",3,!1);FloatingAnchorState. -create({id:boxWith$1(()=>$$props.id),virtualEl:boxWith$1(()=>$$props.virtualEl),ref:$$props.ref},tooltip());var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}var root_4$F=from_svg('<svg viewBox="0 0 30 10" preserveAspectRatio="none" data-arrow=""><polygon points="0,0 30,0 15,10" fill="currentColor"></polygon></svg>'),root_2$1l=from_html("<span><!></span>");function Arrow($$anchor,$$props){push$1($$props,!0);let id2=prop( -$$props,"id",19,useId),width=prop($$props,"width",3,10),height=prop($$props,"height",3,5),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","children","child","width","height"]);const mergedProps=user_derived(()=>mergeProps(restProps,{id:id2()}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)}, -alternate_1=$$anchor2=>{var span=root_2$1l();attribute_effect(span,()=>({...get$4(mergedProps)}));var node_2=child(span);{var consequent_1=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children??noop$3),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var svg2=root_4$F();template_effect(()=>{set_attribute(svg2,"width",width()),set_attribute(svg2,"height",height())}),append($$anchor3,svg2)};if_block(node_2,$$render=>{$$props.children?$$render( -consequent_1):$$render(alternate,!1)})}reset(span),append($$anchor2,span)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate_1,!1)})}append($$anchor,fragment),pop()}function Floating_layer_arrow($$anchor,$$props){push$1($$props,!0);let id2=prop($$props,"id",19,useId),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref"]);const arrowState=FloatingArrowState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2( -v))}),mergedProps=user_derived(()=>mergeProps(restProps,arrowState.props));Arrow($$anchor,spread_props(()=>get$4(mergedProps))),pop()}function Floating_layer_content($$anchor,$$props){push$1($$props,!0);let side=prop($$props,"side",3,"bottom"),sideOffset=prop($$props,"sideOffset",3,0),align=prop($$props,"align",3,"center"),alignOffset=prop($$props,"alignOffset",3,0),arrowPadding=prop($$props,"arrowPadding",3,0),avoidCollisions=prop($$props,"avoidCollisions",3,!0),collisionBoundary=prop($$props,"\ -collisionBoundary",19,()=>[]),collisionPadding=prop($$props,"collisionPadding",3,0),hideWhenDetached=prop($$props,"hideWhenDetached",3,!1),onPlaced=prop($$props,"onPlaced",3,()=>{}),sticky=prop($$props,"sticky",3,"partial"),updatePositionStrategy=prop($$props,"updatePositionStrategy",3,"optimized"),strategy=prop($$props,"strategy",3,"fixed"),dir=prop($$props,"dir",3,"ltr"),style2=prop($$props,"style",19,()=>({})),wrapperId=prop($$props,"wrapperId",19,useId),customAnchor=prop($$props,"customAncho\ -r",3,null),tooltip=prop($$props,"tooltip",3,!1);const contentState=FloatingContentState.create({side:boxWith$1(()=>side()),sideOffset:boxWith$1(()=>sideOffset()),align:boxWith$1(()=>align()),alignOffset:boxWith$1(()=>alignOffset()),id:boxWith$1(()=>$$props.id),arrowPadding:boxWith$1(()=>arrowPadding()),avoidCollisions:boxWith$1(()=>avoidCollisions()),collisionBoundary:boxWith$1(()=>collisionBoundary()),collisionPadding:boxWith$1(()=>collisionPadding()),hideWhenDetached:boxWith$1(()=>hideWhenDetached()), -onPlaced:boxWith$1(()=>onPlaced()),sticky:boxWith$1(()=>sticky()),updatePositionStrategy:boxWith$1(()=>updatePositionStrategy()),strategy:boxWith$1(()=>strategy()),dir:boxWith$1(()=>dir()),style:boxWith$1(()=>style2()),enabled:boxWith$1(()=>$$props.enabled),wrapperId:boxWith$1(()=>wrapperId()),customAnchor:boxWith$1(()=>customAnchor())},tooltip()),mergedProps=user_derived(()=>mergeProps(contentState.wrapperProps,{style:{pointerEvents:"auto"}}));var fragment=comment$2(),node2=first_child(fragment); -snippet(node2,()=>$$props.content??noop$3,()=>({props:contentState.props,wrapperProps:get$4(mergedProps)})),append($$anchor,fragment),pop()}function Floating_layer_content_static($$anchor,$$props){push$1($$props,!0),onMount$1(()=>{$$props.onPlaced?.()});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.content??noop$3,()=>({props:{},wrapperProps:{}})),append($$anchor,fragment),pop()}function Popper_content($$anchor,$$props){let isStatic=prop($$props,"isStatic",3,!1), -restProps=rest_props($$props,["$$slots","$$events","$$legacy","content","isStatic","onPlaced"]);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Floating_layer_content_static($$anchor2,{get content(){return $$props.content},get onPlaced(){return $$props.onPlaced}})},alternate=$$anchor2=>{Floating_layer_content($$anchor2,spread_props({get content(){return $$props.content},get onPlaced(){return $$props.onPlaced}},()=>restProps))};if_block(node2,$$render=>{isStatic()? -$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment)}var root_1$15=from_html("<!> <!>",1);function Popper_layer_inner($$anchor,$$props){push$1($$props,!0);let interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"close"),trapFocus=prop($$props,"trapFocus",3,!0),isValidEvent2=prop($$props,"isValidEvent",3,()=>!1),customAnchor=prop($$props,"customAnchor",3,null),isStatic=prop($$props,"isStatic",3,!1),tooltip=prop($$props,"tooltip",3,!1),contentPointerEvents=prop($$props, -"contentPointerEvents",3,"auto"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","popper","onEscapeKeydown","escapeKeydownBehavior","preventOverflowTextSelection","id","onPointerDown","onPointerUp","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","sticky","hideWhenDetached","updatePositionStrategy","strategy","dir","preventScroll","wrapperId","style","onPlaced","onInteractOutside","onCloseAutoFocus","onOpenAutoFocus", -"onFocusOutside","interactOutsideBehavior","loop","trapFocus","isValidEvent","customAnchor","isStatic","enabled","ref","tooltip","contentPointerEvents"]);Popper_content($$anchor,{get isStatic(){return isStatic()},get id(){return $$props.id},get side(){return $$props.side},get sideOffset(){return $$props.sideOffset},get align(){return $$props.align},get alignOffset(){return $$props.alignOffset},get arrowPadding(){return $$props.arrowPadding},get avoidCollisions(){return $$props.avoidCollisions},get collisionBoundary(){ -return $$props.collisionBoundary},get collisionPadding(){return $$props.collisionPadding},get sticky(){return $$props.sticky},get hideWhenDetached(){return $$props.hideWhenDetached},get updatePositionStrategy(){return $$props.updatePositionStrategy},get strategy(){return $$props.strategy},get dir(){return $$props.dir},get wrapperId(){return $$props.wrapperId},get style(){return $$props.style},get onPlaced(){return $$props.onPlaced},get customAnchor(){return customAnchor()},get enabled(){return $$props. -enabled},get tooltip(){return tooltip()},content:($$anchor2,$$arg0)=>{let floatingProps=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;var fragment_1=root_1$15(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{Scroll_lock($$anchor3,{get preventScroll(){return $$props.preventScroll}})},alternate=$$anchor3=>{var fragment_3=comment$2(),node_1=first_child(fragment_3);{var consequent_1=$$anchor4=>{Scroll_lock($$anchor4,{get preventScroll(){return $$props.preventScroll}})};if_block( -node_1,$$render=>{$$props.forceMount||$$render(consequent_1)},!0)}append($$anchor3,fragment_3)};if_block(node2,$$render=>{$$props.forceMount&&$$props.enabled?$$render(consequent):$$render(alternate,!1)})}var node_2=sibling(node2,2);Focus_scope(node_2,{get onOpenAutoFocus(){return $$props.onOpenAutoFocus},get onCloseAutoFocus(){return $$props.onCloseAutoFocus},get loop(){return $$props.loop},get enabled(){return $$props.enabled},get trapFocus(){return trapFocus()},get forceMount(){return $$props. -forceMount},get ref(){return $$props.ref},focusScope:($$anchor3,$$arg02)=>{let focusScopeProps=()=>$$arg02?.().props;Escape_layer($$anchor3,{get onEscapeKeydown(){return $$props.onEscapeKeydown},get escapeKeydownBehavior(){return $$props.escapeKeydownBehavior},get enabled(){return $$props.enabled},get ref(){return $$props.ref},children:($$anchor4,$$slotProps)=>{Dismissible_layer($$anchor4,{get id(){return $$props.id},get onInteractOutside(){return $$props.onInteractOutside},get onFocusOutside(){ -return $$props.onFocusOutside},get interactOutsideBehavior(){return interactOutsideBehavior()},get isValidEvent(){return isValidEvent2()},get enabled(){return $$props.enabled},get ref(){return $$props.ref},children:($$anchor5,$$arg03)=>{let dismissibleProps=()=>$$arg03?.().props;Text_selection_layer($$anchor5,{get id(){return $$props.id},get preventOverflowTextSelection(){return $$props.preventOverflowTextSelection},get onPointerDown(){return $$props.onPointerDown},get onPointerUp(){return $$props. -onPointerUp},get enabled(){return $$props.enabled},get ref(){return $$props.ref},children:($$anchor6,$$slotProps2)=>{var fragment_8=comment$2(),node_3=first_child(fragment_8);{let $0=user_derived(()=>({props:mergeProps(restProps,floatingProps(),dismissibleProps(),focusScopeProps(),{style:{pointerEvents:contentPointerEvents()}}),wrapperProps:wrapperProps()}));snippet(node_3,()=>$$props.popper??noop$3,()=>get$4($0))}append($$anchor6,fragment_8)},$$slots:{default:!0}})},$$slots:{default:!0}})},$$slots:{ -default:!0}})},$$slots:{focusScope:!0}}),append($$anchor2,fragment_1)},$$slots:{content:!0}}),pop()}function Popper_layer($$anchor,$$props){let interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"close"),trapFocus=prop($$props,"trapFocus",3,!0),isValidEvent2=prop($$props,"isValidEvent",3,()=>!1),customAnchor=prop($$props,"customAnchor",3,null),isStatic=prop($$props,"isStatic",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","popper","open","onEscapeKeydown","esca\ -peKeydownBehavior","preventOverflowTextSelection","id","onPointerDown","onPointerUp","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","sticky","hideWhenDetached","updatePositionStrategy","strategy","dir","preventScroll","wrapperId","style","onPlaced","onInteractOutside","onCloseAutoFocus","onOpenAutoFocus","onFocusOutside","interactOutsideBehavior","loop","trapFocus","isValidEvent","customAnchor","isStatic","ref","shouldRender"]);var fragment=comment$2(), -node2=first_child(fragment);{var consequent=$$anchor2=>{Popper_layer_inner($$anchor2,spread_props({get popper(){return $$props.popper},get onEscapeKeydown(){return $$props.onEscapeKeydown},get escapeKeydownBehavior(){return $$props.escapeKeydownBehavior},get preventOverflowTextSelection(){return $$props.preventOverflowTextSelection},get id(){return $$props.id},get onPointerDown(){return $$props.onPointerDown},get onPointerUp(){return $$props.onPointerUp},get side(){return $$props.side},get sideOffset(){ -return $$props.sideOffset},get align(){return $$props.align},get alignOffset(){return $$props.alignOffset},get arrowPadding(){return $$props.arrowPadding},get avoidCollisions(){return $$props.avoidCollisions},get collisionBoundary(){return $$props.collisionBoundary},get collisionPadding(){return $$props.collisionPadding},get sticky(){return $$props.sticky},get hideWhenDetached(){return $$props.hideWhenDetached},get updatePositionStrategy(){return $$props.updatePositionStrategy},get strategy(){return $$props. -strategy},get dir(){return $$props.dir},get preventScroll(){return $$props.preventScroll},get wrapperId(){return $$props.wrapperId},get style(){return $$props.style},get onPlaced(){return $$props.onPlaced},get customAnchor(){return customAnchor()},get isStatic(){return isStatic()},get enabled(){return $$props.open},get onInteractOutside(){return $$props.onInteractOutside},get onCloseAutoFocus(){return $$props.onCloseAutoFocus},get onOpenAutoFocus(){return $$props.onOpenAutoFocus},get interactOutsideBehavior(){ -return interactOutsideBehavior()},get loop(){return $$props.loop},get trapFocus(){return trapFocus()},get isValidEvent(){return isValidEvent2()},get onFocusOutside(){return $$props.onFocusOutside},forceMount:!1,get ref(){return $$props.ref}},()=>restProps))};if_block(node2,$$render=>{$$props.shouldRender&&$$render(consequent)})}append($$anchor,fragment)}function Popper_layer_force_mount($$anchor,$$props){let interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"close"),trapFocus=prop( -$$props,"trapFocus",3,!0),isValidEvent2=prop($$props,"isValidEvent",3,()=>!1),customAnchor=prop($$props,"customAnchor",3,null),isStatic=prop($$props,"isStatic",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","popper","onEscapeKeydown","escapeKeydownBehavior","preventOverflowTextSelection","id","onPointerDown","onPointerUp","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","sticky","hideWhenDetached","updatePositi\ -onStrategy","strategy","dir","preventScroll","wrapperId","style","onPlaced","onInteractOutside","onCloseAutoFocus","onOpenAutoFocus","onFocusOutside","interactOutsideBehavior","loop","trapFocus","isValidEvent","customAnchor","isStatic","enabled"]);Popper_layer_inner($$anchor,spread_props({get popper(){return $$props.popper},get onEscapeKeydown(){return $$props.onEscapeKeydown},get escapeKeydownBehavior(){return $$props.escapeKeydownBehavior},get preventOverflowTextSelection(){return $$props.preventOverflowTextSelection}, -get id(){return $$props.id},get onPointerDown(){return $$props.onPointerDown},get onPointerUp(){return $$props.onPointerUp},get side(){return $$props.side},get sideOffset(){return $$props.sideOffset},get align(){return $$props.align},get alignOffset(){return $$props.alignOffset},get arrowPadding(){return $$props.arrowPadding},get avoidCollisions(){return $$props.avoidCollisions},get collisionBoundary(){return $$props.collisionBoundary},get collisionPadding(){return $$props.collisionPadding},get sticky(){ -return $$props.sticky},get hideWhenDetached(){return $$props.hideWhenDetached},get updatePositionStrategy(){return $$props.updatePositionStrategy},get strategy(){return $$props.strategy},get dir(){return $$props.dir},get preventScroll(){return $$props.preventScroll},get wrapperId(){return $$props.wrapperId},get style(){return $$props.style},get onPlaced(){return $$props.onPlaced},get customAnchor(){return customAnchor()},get isStatic(){return isStatic()},get enabled(){return $$props.enabled},get onInteractOutside(){ -return $$props.onInteractOutside},get onCloseAutoFocus(){return $$props.onCloseAutoFocus},get onOpenAutoFocus(){return $$props.onOpenAutoFocus},get interactOutsideBehavior(){return interactOutsideBehavior()},get loop(){return $$props.loop},get trapFocus(){return trapFocus()},get isValidEvent(){return isValidEvent2()},get onFocusOutside(){return $$props.onFocusOutside}},()=>restProps,{forceMount:!0}))}var root_4$E=from_html("<div><div><!></div></div>"),root_9$s=from_html("<div><div><!></div></div\ ->");function Select_content$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),forceMount=prop($$props,"forceMount",3,!1),side=prop($$props,"side",3,"bottom"),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),preventScroll=prop($$props,"preventScroll",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","forceMount", -"side","onInteractOutside","onEscapeKeydown","children","child","preventScroll","style"]);const contentState=SelectContentState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),onInteractOutside:boxWith$1(()=>onInteractOutside()),onEscapeKeydown:boxWith$1(()=>onEscapeKeydown())}),mergedProps=user_derived(()=>mergeProps(restProps,contentState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{Popper_layer_force_mount($$anchor2,spread_props( -()=>get$4(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get side(){return side()},get enabled(){return contentState.root.opts.open.current},get id(){return id2()},get preventScroll(){return preventScroll()},forceMount:!0,get shouldRender(){return contentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:contentState.props.style},{style:$$props. -style}));var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor4=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);{let $0=user_derived(()=>({props:get$4(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$4($0))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$E();attribute_effect(div,()=>({...wrapperProps()}));var div_1=child(div);attribute_effect(div_1,()=>({...get$4(finalProps)})); -var node_3=child(div_1);snippet(node_3,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor4,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor3,fragment_2)},$$slots:{popper:!0}}))},alternate_2=$$anchor2=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);{var consequent_3=$$anchor3=>{Popper_layer($$anchor3,spread_props(()=>get$4(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get side(){ -return side()},get open(){return contentState.root.opts.open.current},get id(){return id2()},get preventScroll(){return preventScroll()},forceMount:!1,get shouldRender(){return contentState.shouldRender},popper:($$anchor4,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:contentState.props.style},{style:$$props.style}));var fragment_6=comment$2(),node_5=first_child(fragment_6);{var consequent_2=$$anchor5=>{ -var fragment_7=comment$2(),node_6=first_child(fragment_7);{let $0=user_derived(()=>({props:get$4(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_6,()=>$$props.child,()=>get$4($0))}append($$anchor5,fragment_7)},alternate_1=$$anchor5=>{var div_2=root_9$s();attribute_effect(div_2,()=>({...wrapperProps()}));var div_3=child(div_2);attribute_effect(div_3,()=>({...get$4(finalProps)}));var node_7=child(div_3);snippet(node_7,()=>$$props.children??noop$3),reset(div_3), -reset(div_2),append($$anchor5,div_2)};if_block(node_5,$$render=>{$$props.child?$$render(consequent_2):$$render(alternate_1,!1)})}append($$anchor4,fragment_6)},$$slots:{popper:!0}}))};if_block(node_4,$$render=>{forceMount()||$$render(consequent_3)},!0)}append($$anchor2,fragment_4)};if_block(node2,$$render=>{forceMount()?$$render(consequent_1):$$render(alternate_2,!1)})}append($$anchor,fragment),pop()}function Mounted($$anchor,$$props){push$1($$props,!0);let mounted=prop($$props,"mounted",15,!1),onMountedChange=prop( -$$props,"onMountedChange",3,noop$1);onMountEffect(()=>(mounted(!0),onMountedChange()(!0),()=>{mounted(!1),onMountedChange()(!1)})),pop()}var root_2$1k=from_html("<div><!></div>"),root$1K=from_html("<!> <!>",1);function Select_item$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),label=prop($$props,"label",19,()=>$$props.value),disabled=prop($$props,"disabled",3,!1),onHighlight=prop($$props,"onHighlight",3, -noop$1),onUnhighlight=prop($$props,"onUnhighlight",3,noop$1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","value","label","disabled","children","child","onHighlight","onUnhighlight"]);const itemState=SelectItemState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),value:boxWith$1(()=>$$props.value),disabled:boxWith$1(()=>disabled()),label:boxWith$1(()=>label()),onHighlight:boxWith$1(()=>onHighlight()),onUnhighlight:boxWith$1(()=>onUnhighlight())}), -mergedProps=user_derived(()=>mergeProps(restProps,itemState.props));var fragment=root$1K(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>({props:get$4(mergedProps),...itemState.snippetProps}));snippet(node_1,()=>$$props.child,()=>get$4($0))}append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1k();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props. -children??noop$3,()=>itemState.snippetProps),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}var node_3=sibling(node2,2);Mounted(node_3,{get mounted(){return itemState.mounted},set mounted($$value){itemState.mounted=$$value}}),append($$anchor,fragment),pop()}var root_2$1j=from_html("<div><!></div>");function Select_viewport($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)), -ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","children","child"]);const viewportState=SelectViewportState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,viewportState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4( -mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1j();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_3$$=from_html("<div><!></div>"),root_1$14=from_html("<!> <!>",1);function Select_scroll_down_button$1($$anchor,$$props){const uid=props_id(); -push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),delay=prop($$props,"delay",3,()=>50),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","delay","child","children"]);const scrollButtonState=SelectScrollDownButtonState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),delay:boxWith$1(()=>delay())}),mergedProps=user_derived(()=>mergeProps(restProps,scrollButtonState.props));var fragment=comment$2(),node2=first_child( -fragment);{var consequent_1=$$anchor2=>{var fragment_1=root_1$14(),node_1=first_child(fragment_1);Mounted(node_1,{get mounted(){return scrollButtonState.scrollButtonState.mounted},set mounted($$value){scrollButtonState.scrollButtonState.mounted=$$value}});var node_2=sibling(node_1,2);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.child,()=>({props:restProps})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var div=root_3$$(); -attribute_effect(div,()=>({...get$4(mergedProps)}));var node_4=child(div);snippet(node_4,()=>$$props.children??noop$3),reset(div),append($$anchor3,div)};if_block(node_2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{scrollButtonState.canScrollDown&&$$render(consequent_1)})}append($$anchor,fragment),pop()}var root_3$_=from_html("<div><!></div>"),root_1$13=from_html("<!> <!>",1);function Select_scroll_up_button$1($$anchor,$$props){ -const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),delay=prop($$props,"delay",3,()=>50),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","delay","child","children"]);const scrollButtonState=SelectScrollUpButtonState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),delay:boxWith$1(()=>delay())}),mergedProps=user_derived(()=>mergeProps(restProps,scrollButtonState.props));var fragment=comment$2(), -node2=first_child(fragment);{var consequent_1=$$anchor2=>{var fragment_1=root_1$13(),node_1=first_child(fragment_1);Mounted(node_1,{get mounted(){return scrollButtonState.scrollButtonState.mounted},set mounted($$value){scrollButtonState.scrollButtonState.mounted=$$value}});var node_2=sibling(node_1,2);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.child,()=>({props:restProps})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var div=root_3$_(); -attribute_effect(div,()=>({...get$4(mergedProps)}));var node_4=child(div);snippet(node_4,()=>$$props.children??noop$3),reset(div),append($$anchor3,div)};if_block(node_2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{scrollButtonState.canScrollUp&&$$render(consequent_1)})}append($$anchor,fragment),pop()}function Menu_sub($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),onOpenChange=prop($$props, -"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1);MenuSubmenuState.create({open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()?.(v)}),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())}),Floating_layer($$anchor,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}var root_2$1i=from_html("<div><!></div>"); -function Menu_item($$anchor,$$props){const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),disabled=prop($$props,"disabled",3,!1),onSelect=prop($$props,"onSelect",3,noop$1),closeOnSelect=prop($$props,"closeOnSelect",3,!0),restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","children","ref","id","disabled","onSelect","closeOnSelect"]);const itemState=MenuItemState.create({id:boxWith$1(()=>id2()),disabled:boxWith$1( -()=>disabled()),onSelect:boxWith$1(()=>onSelect()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),closeOnSelect:boxWith$1(()=>closeOnSelect())}),mergedProps=user_derived(()=>mergeProps(restProps,itemState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1i();attribute_effect(div, -()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_2$1h=from_html("<div><!></div>");function Menu_separator($$anchor,$$props){const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),restProps=rest_props($$props,["$$slots","$$ev\ -ents","$$legacy","ref","id","child","children"]);const separatorState=MenuSeparatorState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,separatorState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1h(); -attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_4$D=from_html("<div><div><!></div></div>"),root_9$r=from_html("<div><div><!></div></div>");function Menu_sub_content($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)), -ref2=prop($$props,"ref",15,null),loop2=prop($$props,"loop",3,!0),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),forceMount=prop($$props,"forceMount",3,!1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"defer-otherwise-close"),escapeKeydownBehavior=prop($$props,"escapeKeydownBehavior",3,"defer-otherwise-close"),onOpenAutoFocusProp=prop($$props,"onOpenAutoFocus",3,noop$1),onCloseAutoFocusProp=prop($$props,"on\ -CloseAutoFocus",3,noop$1),onFocusOutside=prop($$props,"onFocusOutside",3,noop$1),side=prop($$props,"side",3,"right"),trapFocus=prop($$props,"trapFocus",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","children","child","loop","onInteractOutside","forceMount","onEscapeKeydown","interactOutsideBehavior","escapeKeydownBehavior","onOpenAutoFocus","onCloseAutoFocus","onFocusOutside","side","trapFocus","style"]);const subContentState=MenuContentState.create({id:boxWith$1( -()=>id2()),loop:boxWith$1(()=>loop2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),isSub:!0,onCloseAutoFocus:boxWith$1(()=>handleCloseAutoFocus)});function onkeydown(e){const isKeyDownInside=e.currentTarget.contains(e.target),isCloseKey=SUB_CLOSE_KEYS[subContentState.parentMenu.root.opts.dir.current].includes(e.key);isKeyDownInside&&isCloseKey&&(subContentState.parentMenu.onClose(),subContentState.parentMenu.triggerNode?.focus(),e.preventDefault())}const dataAttr=user_derived(()=>subContentState.parentMenu. -root.getBitsAttr("sub-content")),mergedProps=user_derived(()=>mergeProps(restProps,subContentState.props,{side:side(),onkeydown,[get$4(dataAttr)]:""}));function handleOpenAutoFocus(e){onOpenAutoFocusProp()(e),!e.defaultPrevented&&(e.preventDefault(),subContentState.parentMenu.root.isUsingKeyboard&&subContentState.parentMenu.contentNode&&MenuOpenEvent.dispatch(subContentState.parentMenu.contentNode))}function handleCloseAutoFocus(e){onCloseAutoFocusProp()(e),!e.defaultPrevented&&e.preventDefault()} -function handleInteractOutside(e){onInteractOutside()(e),!e.defaultPrevented&&subContentState.parentMenu.onClose()}function handleEscapeKeydown(e){onEscapeKeydown()(e),!e.defaultPrevented&&subContentState.parentMenu.onClose()}function handleOnFocusOutside(e){onFocusOutside()(e),!e.defaultPrevented&&isHTMLElement$1(e.target)&&e.target.id!==subContentState.parentMenu.triggerNode?.id&&subContentState.parentMenu.onClose()}var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{ -Popper_layer_force_mount($$anchor2,spread_props(()=>get$4(mergedProps),{get ref(){return subContentState.opts.ref},get interactOutsideBehavior(){return interactOutsideBehavior()},get escapeKeydownBehavior(){return escapeKeydownBehavior()},onOpenAutoFocus:handleOpenAutoFocus,get enabled(){return subContentState.parentMenu.opts.open.current},onInteractOutside:handleInteractOutside,onEscapeKeydown:handleEscapeKeydown,onFocusOutside:handleOnFocusOutside,preventScroll:!1,get loop(){return loop2()},get trapFocus(){ -return trapFocus()},get shouldRender(){return subContentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),get$4(mergedProps),{style:getFloatingContentCSSVars("menu")},{style:$$props.style}));var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor4=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);{let $0=user_derived(()=>({props:get$4(finalProps), -wrapperProps:wrapperProps(),...subContentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$4($0))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$D();attribute_effect(div,()=>({...wrapperProps()}));var div_1=child(div);attribute_effect(div_1,()=>({...get$4(finalProps)}));var node_3=child(div_1);snippet(node_3,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor4,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate, -!1)})}append($$anchor3,fragment_2)},$$slots:{popper:!0}}))},alternate_2=$$anchor2=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);{var consequent_3=$$anchor3=>{Popper_layer($$anchor3,spread_props(()=>get$4(mergedProps),{get ref(){return subContentState.opts.ref},get interactOutsideBehavior(){return interactOutsideBehavior()},get escapeKeydownBehavior(){return escapeKeydownBehavior()},onCloseAutoFocus:handleCloseAutoFocus,onOpenAutoFocus:handleOpenAutoFocus,get open(){return subContentState. -parentMenu.opts.open.current},onInteractOutside:handleInteractOutside,onEscapeKeydown:handleEscapeKeydown,onFocusOutside:handleOnFocusOutside,preventScroll:!1,get loop(){return loop2()},get trapFocus(){return trapFocus()},get shouldRender(){return subContentState.shouldRender},popper:($$anchor4,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),get$4(mergedProps),{style:getFloatingContentCSSVars("menu")},{style:$$props. -style}));var fragment_6=comment$2(),node_5=first_child(fragment_6);{var consequent_2=$$anchor5=>{var fragment_7=comment$2(),node_6=first_child(fragment_7);{let $0=user_derived(()=>({props:get$4(finalProps),wrapperProps:wrapperProps(),...subContentState.snippetProps}));snippet(node_6,()=>$$props.child,()=>get$4($0))}append($$anchor5,fragment_7)},alternate_1=$$anchor5=>{var div_2=root_9$r();attribute_effect(div_2,()=>({...wrapperProps()}));var div_3=child(div_2);attribute_effect(div_3,()=>({...get$4( -finalProps)}));var node_7=child(div_3);snippet(node_7,()=>$$props.children??noop$3),reset(div_3),reset(div_2),append($$anchor5,div_2)};if_block(node_5,$$render=>{$$props.child?$$render(consequent_2):$$render(alternate_1,!1)})}append($$anchor4,fragment_6)},$$slots:{popper:!0}}))};if_block(node_4,$$render=>{forceMount()||$$render(consequent_3)},!0)}append($$anchor2,fragment_4)};if_block(node2,$$render=>{forceMount()?$$render(consequent_1):$$render(alternate_2,!1)})}append($$anchor,fragment),pop()} -var root_3$Z=from_html("<div><!></div>");function Menu_sub_trigger($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),disabled=prop($$props,"disabled",3,!1),ref2=prop($$props,"ref",15,null),onSelect=prop($$props,"onSelect",3,noop$1),openDelay=prop($$props,"openDelay",3,100),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","disabled","ref","children","child","onSelect","openDelay"]);const subTriggerState=MenuSubTriggerState. -create({disabled:boxWith$1(()=>disabled()),onSelect:boxWith$1(()=>onSelect()),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),openDelay:boxWith$1(()=>openDelay())}),mergedProps=user_derived(()=>mergeProps(restProps,subTriggerState.props));Floating_layer_anchor($$anchor,{get id(){return id2()},get ref(){return subTriggerState.opts.ref},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_1=first_child( -fragment_2);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var div=root_3$Z();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor3,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}function isPointInPolygon(point2,polygon){const[x,y]=point2; -let isInside=!1;const length=polygon.length;for(let i=0,j=length-1;i<length;j=i++){const[xi,yi]=polygon[i]??[0,0],[xj,yj]=polygon[j]??[0,0];yi>=y!=yj>=y&&x<=(xj-xi)*(y-yi)/(yj-yi)+xi&&(isInside=!isInside)}return isInside}function isInsideRect(point2,rect){return point2[0]>=rect.left&&point2[0]<=rect.right&&point2[1]>=rect.top&&point2[1]<=rect.bottom}function getSide(triggerRect,contentRect){const triggerCenterX=triggerRect.left+triggerRect.width/2,triggerCenterY=triggerRect.top+triggerRect.height/ -2,contentCenterX=contentRect.left+contentRect.width/2,contentCenterY=contentRect.top+contentRect.height/2,deltaX=contentCenterX-triggerCenterX,deltaY=contentCenterY-triggerCenterY;return Math.abs(deltaX)>Math.abs(deltaY)?deltaX>0?"right":"left":deltaY>0?"bottom":"top"}class SafePolygon{#opts;#buffer;#exitPoint=null;#exitTarget=null;constructor(opts){this.#opts=opts,this.#buffer=opts.buffer??1,watch$1([opts.triggerNode,opts.contentNode,opts.enabled],([triggerNode,contentNode,enabled])=>{if(!triggerNode|| -!contentNode||!enabled){this.#exitPoint=null,this.#exitTarget=null;return}const doc=getDocument$1(triggerNode),handlePointerMove=e=>{this.#onPointerMove(e,triggerNode,contentNode)},handleTriggerLeave=e=>{const target2=e.relatedTarget;isElement$1(target2)&&contentNode.contains(target2)||(this.#exitPoint=[e.clientX,e.clientY],this.#exitTarget="content")},handleTriggerEnter=()=>{this.#exitPoint=null,this.#exitTarget=null},handleContentEnter=()=>{this.#exitPoint=null,this.#exitTarget=null},handleContentLeave=e=>{ -const target2=e.relatedTarget;isElement$1(target2)&&triggerNode.contains(target2)||(this.#exitPoint=[e.clientX,e.clientY],this.#exitTarget="trigger")};return[on(doc,"pointermove",handlePointerMove),on(triggerNode,"pointerleave",handleTriggerLeave),on(triggerNode,"pointerenter",handleTriggerEnter),on(contentNode,"pointerenter",handleContentEnter),on(contentNode,"pointerleave",handleContentLeave)].reduce((acc,cleanup)=>()=>{acc(),cleanup()},()=>{})})}#onPointerMove(e,triggerNode,contentNode){if(!this.#exitPoint|| -!this.#exitTarget)return;const clientPoint=[e.clientX,e.clientY],triggerRect=triggerNode.getBoundingClientRect(),contentRect=contentNode.getBoundingClientRect();if(this.#exitTarget==="content"&&isInsideRect(clientPoint,contentRect)){this.#exitPoint=null,this.#exitTarget=null;return}if(this.#exitTarget==="trigger"&&isInsideRect(clientPoint,triggerRect)){this.#exitPoint=null,this.#exitTarget=null;return}const side=getSide(triggerRect,contentRect),corridorPoly=this.#getCorridorPolygon(triggerRect,contentRect, -side);if(corridorPoly&&isPointInPolygon(clientPoint,corridorPoly))return;const targetRect=this.#exitTarget==="content"?contentRect:triggerRect,safePoly=this.#getSafePolygon(this.#exitPoint,targetRect,side,this.#exitTarget);isPointInPolygon(clientPoint,safePoly)||(this.#exitPoint=null,this.#exitTarget=null,this.#opts.onPointerExit())}#getCorridorPolygon(triggerRect,contentRect,side){const buffer=this.#buffer;switch(side){case"top":return[[Math.min(triggerRect.left,contentRect.left)-buffer,triggerRect. -top],[Math.min(triggerRect.left,contentRect.left)-buffer,contentRect.bottom],[Math.max(triggerRect.right,contentRect.right)+buffer,contentRect.bottom],[Math.max(triggerRect.right,contentRect.right)+buffer,triggerRect.top]];case"bottom":return[[Math.min(triggerRect.left,contentRect.left)-buffer,triggerRect.bottom],[Math.min(triggerRect.left,contentRect.left)-buffer,contentRect.top],[Math.max(triggerRect.right,contentRect.right)+buffer,contentRect.top],[Math.max(triggerRect.right,contentRect.right)+ -buffer,triggerRect.bottom]];case"left":return[[triggerRect.left,Math.min(triggerRect.top,contentRect.top)-buffer],[contentRect.right,Math.min(triggerRect.top,contentRect.top)-buffer],[contentRect.right,Math.max(triggerRect.bottom,contentRect.bottom)+buffer],[triggerRect.left,Math.max(triggerRect.bottom,contentRect.bottom)+buffer]];case"right":return[[triggerRect.right,Math.min(triggerRect.top,contentRect.top)-buffer],[contentRect.left,Math.min(triggerRect.top,contentRect.top)-buffer],[contentRect. -left,Math.max(triggerRect.bottom,contentRect.bottom)+buffer],[triggerRect.right,Math.max(triggerRect.bottom,contentRect.bottom)+buffer]]}}#getSafePolygon(exitPoint,targetRect,side,exitTarget){const buffer=this.#buffer*4,[x,y]=exitPoint;switch(exitTarget==="trigger"?this.#flipSide(side):side){case"top":return[[x-buffer,y+buffer],[x+buffer,y+buffer],[targetRect.right+buffer,targetRect.bottom],[targetRect.right+buffer,targetRect.top],[targetRect.left-buffer,targetRect.top],[targetRect.left-buffer,targetRect. -bottom]];case"bottom":return[[x-buffer,y-buffer],[x+buffer,y-buffer],[targetRect.right+buffer,targetRect.top],[targetRect.right+buffer,targetRect.bottom],[targetRect.left-buffer,targetRect.bottom],[targetRect.left-buffer,targetRect.top]];case"left":return[[x+buffer,y-buffer],[x+buffer,y+buffer],[targetRect.right,targetRect.bottom+buffer],[targetRect.left,targetRect.bottom+buffer],[targetRect.left,targetRect.top-buffer],[targetRect.right,targetRect.top-buffer]];case"right":return[[x-buffer,y-buffer], -[x-buffer,y+buffer],[targetRect.left,targetRect.bottom+buffer],[targetRect.right,targetRect.bottom+buffer],[targetRect.right,targetRect.top-buffer],[targetRect.left,targetRect.top-buffer]]}}#flipSide(side){switch(side){case"top":return"bottom";case"bottom":return"top";case"left":return"right";case"right":return"left"}}}const popoverAttrs=createBitsAttrs({component:"popover",parts:["root","trigger","content","close","overlay"]}),PopoverRootContext=new Context$1("Popover.Root");class PopoverRootState{static create(opts){ -return PopoverRootContext.set(new PopoverRootState(opts))}opts;#contentNode=state$1(null);get contentNode(){return get$4(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}contentPresence;#triggerNode=state$1(null);get triggerNode(){return get$4(this.#triggerNode)}set triggerNode(value){set$1(this.#triggerNode,value,!0)}#overlayNode=state$1(null);get overlayNode(){return get$4(this.#overlayNode)}set overlayNode(value){set$1(this.#overlayNode,value,!0)}overlayPresence;#openedViaHover=state$1( -!1);get openedViaHover(){return get$4(this.#openedViaHover)}set openedViaHover(value){set$1(this.#openedViaHover,value,!0)}#hasInteractedWithContent=state$1(!1);get hasInteractedWithContent(){return get$4(this.#hasInteractedWithContent)}set hasInteractedWithContent(value){set$1(this.#hasInteractedWithContent,value,!0)}#hoverCooldown=state$1(!1);get hoverCooldown(){return get$4(this.#hoverCooldown)}set hoverCooldown(value){set$1(this.#hoverCooldown,value,!0)}#closeDelay=state$1(0);get closeDelay(){ -return get$4(this.#closeDelay)}set closeDelay(value){set$1(this.#closeDelay,value,!0)}#closeTimeout=null;#domContext=null;constructor(opts){this.opts=opts,this.contentPresence=new PresenceManager({ref:boxWith$1(()=>this.contentNode),open:this.opts.open,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),this.overlayPresence=new PresenceManager({ref:boxWith$1(()=>this.overlayNode),open:this.opts.open}),watch$1(()=>this.opts.open.current,isOpen=>{isOpen||(this.openedViaHover= -!1,this.hasInteractedWithContent=!1,this.#clearCloseTimeout())})}setDomContext(ctx){this.#domContext=ctx}#clearCloseTimeout(){this.#closeTimeout!==null&&this.#domContext&&(this.#domContext.clearTimeout(this.#closeTimeout),this.#closeTimeout=null)}toggleOpen(){this.#clearCloseTimeout(),this.opts.open.current=!this.opts.open.current}handleClose(){this.#clearCloseTimeout(),this.opts.open.current&&(this.opts.open.current=!1)}handleHoverOpen(){this.#clearCloseTimeout(),!this.opts.open.current&&(this. -openedViaHover=!0,this.opts.open.current=!0)}handleHoverClose(){this.opts.open.current&&this.openedViaHover&&!this.hasInteractedWithContent&&(this.opts.open.current=!1)}handleDelayedHoverClose(){this.opts.open.current&&(!this.openedViaHover||this.hasInteractedWithContent||(this.#clearCloseTimeout(),this.closeDelay<=0?this.opts.open.current=!1:this.#domContext&&(this.#closeTimeout=this.#domContext.setTimeout(()=>{this.openedViaHover&&!this.hasInteractedWithContent&&(this.opts.open.current=!1),this.#closeTimeout= -null},this.closeDelay))))}cancelDelayedClose(){this.#clearCloseTimeout()}markInteraction(){this.hasInteractedWithContent=!0,this.#clearCloseTimeout()}}class PopoverTriggerState{static create(opts){return new PopoverTriggerState(opts,PopoverRootContext.get())}opts;root;attachment;domContext;#openTimeout=null;#closeTimeout=null;#isHovering=state$1(!1);constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>this.root.triggerNode=v),this.domContext=new DOMContext( -opts.ref),this.root.setDomContext(this.domContext),this.onclick=this.onclick.bind(this),this.onkeydown=this.onkeydown.bind(this),this.onpointerenter=this.onpointerenter.bind(this),this.onpointerleave=this.onpointerleave.bind(this),watch$1(()=>this.opts.closeDelay.current,delay=>{this.root.closeDelay=delay})}#clearOpenTimeout(){this.#openTimeout!==null&&(this.domContext.clearTimeout(this.#openTimeout),this.#openTimeout=null)}#clearCloseTimeout(){this.#closeTimeout!==null&&(this.domContext.clearTimeout( -this.#closeTimeout),this.#closeTimeout=null)}#clearAllTimeouts(){this.#clearOpenTimeout(),this.#clearCloseTimeout()}onpointerenter(e){if(this.opts.disabled.current||!this.opts.openOnHover.current||isTouch(e)||(set$1(this.#isHovering,!0),this.#clearCloseTimeout(),this.root.cancelDelayedClose(),this.root.opts.open.current||this.root.hoverCooldown))return;const delay=this.opts.openDelay.current;delay<=0?this.root.handleHoverOpen():this.#openTimeout=this.domContext.setTimeout(()=>{this.root.handleHoverOpen(), -this.#openTimeout=null},delay)}onpointerleave(e){this.opts.disabled.current||this.opts.openOnHover.current&&(isTouch(e)||(set$1(this.#isHovering,!1),this.#clearOpenTimeout(),this.root.hoverCooldown=!1))}onclick(e){if(!this.opts.disabled.current&&e.button===0){if(this.#clearAllTimeouts(),get$4(this.#isHovering)&&this.root.opts.open.current&&this.root.openedViaHover){this.root.openedViaHover=!1,this.root.hasInteractedWithContent=!0;return}get$4(this.#isHovering)&&this.opts.openOnHover.current&&this. -root.opts.open.current&&(this.root.hoverCooldown=!0),this.root.hoverCooldown&&!this.root.opts.open.current&&(this.root.hoverCooldown=!1),this.root.toggleOpen()}}onkeydown(e){this.opts.disabled.current||(e.key===ENTER||e.key===SPACE)&&(e.preventDefault(),this.#clearAllTimeouts(),this.root.toggleOpen())}#getAriaControls(){if(this.root.opts.open.current&&this.root.contentNode?.id)return this.root.contentNode?.id}#props=user_derived(()=>({id:this.opts.id.current,"aria-haspopup":"dialog","aria-expand\ -ed":boolToStr(this.root.opts.open.current),"data-state":getDataOpenClosed(this.root.opts.open.current),"aria-controls":this.#getAriaControls(),[popoverAttrs.trigger]:"",disabled:this.opts.disabled.current,onkeydown:this.onkeydown,onclick:this.onclick,onpointerenter:this.onpointerenter,onpointerleave:this.onpointerleave,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class PopoverContentState{static create(opts){return new PopoverContentState( -opts,PopoverRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>this.root.contentNode=v),this.onpointerdown=this.onpointerdown.bind(this),this.onfocusin=this.onfocusin.bind(this),this.onpointerenter=this.onpointerenter.bind(this),this.onpointerleave=this.onpointerleave.bind(this),new SafePolygon({triggerNode:()=>this.root.triggerNode,contentNode:()=>this.root.contentNode,enabled:()=>this.root.opts.open.current&& -this.root.openedViaHover&&!this.root.hasInteractedWithContent,onPointerExit:()=>{this.root.handleDelayedHoverClose()}})}onpointerdown(_){this.root.markInteraction()}onfocusin(e){const target2=e.target;isElement$1(target2)&&isTabbable(target2)&&this.root.markInteraction()}onpointerenter(e){isTouch(e)||this.root.cancelDelayedClose()}onpointerleave(e){isTouch(e)}onInteractOutside=e=>{if(this.opts.onInteractOutside.current(e),e.defaultPrevented||!isElement$1(e.target))return;const closestTrigger=e.target. -closest(popoverAttrs.selector("trigger"));if(!(closestTrigger&&closestTrigger===this.root.triggerNode)){if(this.opts.customAnchor.current){if(isElement$1(this.opts.customAnchor.current)){if(this.opts.customAnchor.current.contains(e.target))return}else if(typeof this.opts.customAnchor.current=="string"){const el=document.querySelector(this.opts.customAnchor.current);if(el&&el.contains(e.target))return}}this.root.handleClose()}};onEscapeKeydown=e=>{this.opts.onEscapeKeydown.current(e),!e.defaultPrevented&& -this.root.handleClose()};get shouldRender(){return this.root.contentPresence.shouldRender}get shouldTrapFocus(){return!(this.root.openedViaHover&&!this.root.hasInteractedWithContent)}#snippetProps=user_derived(()=>({open:this.root.opts.open.current}));get snippetProps(){return get$4(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,tabindex:-1,"data-state":getDataOpenClosed(this.root.opts.open.current),[popoverAttrs.content]:"", -style:{pointerEvents:"auto",contain:"layout style paint"},onpointerdown:this.onpointerdown,onfocusin:this.onfocusin,onpointerenter:this.onpointerenter,onpointerleave:this.onpointerleave,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}popperProps={onInteractOutside:this.onInteractOutside,onEscapeKeydown:this.onEscapeKeydown}}var root_4$C=from_html("<div><div><!></div></div>"),root_9$q=from_html("<div><div><!></div></div>");function Popover_content$1($$anchor,$$props){ -const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),forceMount=prop($$props,"forceMount",3,!1),onOpenAutoFocus=prop($$props,"onOpenAutoFocus",3,noop$1),onCloseAutoFocus=prop($$props,"onCloseAutoFocus",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),trapFocus=prop($$props,"trapFocus",3,!0),preventScroll=prop($$props,"preventScroll",3,!1),customAnchor=prop( +this.opts.indeterminate.current),[checkboxAttrs.root]:"",onclick:this.onclick,onkeydown:this.onkeydown,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class CheckboxInputState{static create(){return new CheckboxInputState(CheckboxRootContext.get())}root;#trueChecked=user_derived(()=>this.root.group?!!(this.root.opts.value.current!==void 0&&this.root.group.opts.value.current.includes(this.root.opts.value.current)):this.root.opts.checked.current);get trueChecked(){ +return get$3(this.#trueChecked)}set trueChecked(value){set$1(this.#trueChecked,value)}#shouldRender=user_derived(()=>!!this.root.trueName);get shouldRender(){return get$3(this.#shouldRender)}set shouldRender(value){set$1(this.#shouldRender,value)}constructor(root2){this.root=root2,this.onfocus=this.onfocus.bind(this)}onfocus(_){isHTMLElement$1(this.root.opts.ref.current)&&this.root.opts.ref.current.focus()}#props=user_derived(()=>({type:"checkbox",checked:this.root.opts.checked.current===!0,disabled:this. +root.trueDisabled,required:this.root.trueRequired,name:this.root.trueName,value:this.root.opts.value.current,readonly:this.root.trueReadonly,onfocus:this.onfocus}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}function getCheckboxDataState(checked,indeterminate){return indeterminate?"indeterminate":checked?"checked":"unchecked"}enable_legacy_mode_flag();var root_1$16=from_html("<input/>"),root_2$1A=from_html("<input/>");function Hidden_input($$anchor,$$props){ +push$1($$props,!0);let value=prop($$props,"value",15),restProps=rest_props($$props,["$$slots","$$events","$$legacy","value"]);const mergedProps=user_derived(()=>mergeProps(restProps,{"aria-hidden":"true",tabindex:-1,style:{...srOnlyStyles$1,position:"absolute",top:"0",left:"0"}}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var input=root_1$16();attribute_effect(input,()=>({...get$3(mergedProps),value:value()}),void 0,void 0,void 0,void 0,!0),append($$anchor2, +input)},alternate=$$anchor2=>{var input_1=root_2$1A();attribute_effect(input_1,()=>({...get$3(mergedProps)}),void 0,void 0,void 0,void 0,!0),bind_value(input_1,value),append($$anchor2,input_1)};if_block(node2,$$render=>{get$3(mergedProps).type==="checkbox"?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}function Checkbox_input($$anchor,$$props){push$1($$props,!1);const inputState=CheckboxInputState.create();init();var fragment=comment$2(),node2=first_child(fragment); +{var consequent=$$anchor2=>{Hidden_input($$anchor2,spread_props(()=>inputState.props))};if_block(node2,$$render=>{inputState.shouldRender&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_2$1z=from_html("<button><!></button>"),root$1U=from_html("<!> <!>",1);function Checkbox$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let checked=prop($$props,"checked",15,!1),ref2=prop($$props,"ref",15,null),disabled=prop($$props,"disabled",3,!1),required2=prop($$props,"required", +3,!1),name=prop($$props,"name",3,void 0),value=prop($$props,"value",3,"on"),id2=prop($$props,"id",19,()=>createId(uid2)),indeterminate=prop($$props,"indeterminate",15,!1),type2=prop($$props,"type",3,"button"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","checked","ref","onCheckedChange","children","disabled","required","name","value","id","indeterminate","onIndeterminateChange","child","type","readonly"]);const group=CheckboxGroupContext.getOr(null);group&&value()&&(group.opts.value. +current.includes(value())?checked(!0):checked(!1)),watch$1.pre(()=>value(),()=>{group&&value()&&(group.opts.value.current.includes(value())?checked(!0):checked(!1))});const rootState=CheckboxRootState.create({checked:boxWith$1(()=>checked(),v=>{checked(v),$$props.onCheckedChange?.(v)}),disabled:boxWith$1(()=>disabled()??!1),required:boxWith$1(()=>required2()),name:boxWith$1(()=>name()),value:boxWith$1(()=>value()),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),indeterminate:boxWith$1( +()=>indeterminate(),v=>{indeterminate(v),$$props.onIndeterminateChange?.(v)}),type:boxWith$1(()=>type2()),readonly:boxWith$1(()=>!!$$props.readonly)},group),mergedProps=user_derived(()=>mergeProps({...restProps},rootState.props));var fragment=root$1U(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>({props:get$3(mergedProps),...rootState.snippetProps}));snippet(node_1,()=>$$props.child,()=>get$3($0))}append( +$$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1z();attribute_effect(button,()=>({...get$3(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3,()=>rootState.snippetProps),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}var node_3=sibling(node2,2);Checkbox_input(node_3,{}),append($$anchor,fragment),pop()}const collapsibleAttrs=createBitsAttrs({component:"collapsible",parts:[ +"root","content","trigger"]}),CollapsibleRootContext=new Context$1("Collapsible.Root");class CollapsibleRootState{static create(opts){return CollapsibleRootContext.set(new CollapsibleRootState(opts))}opts;attachment;#contentNode=state$1(null);get contentNode(){return get$3(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}contentPresence;#contentId=state$1(void 0);get contentId(){return get$3(this.#contentId)}set contentId(value){set$1(this.#contentId,value,!0)}constructor(opts){ +this.opts=opts,this.toggleOpen=this.toggleOpen.bind(this),this.attachment=attachRef(this.opts.ref),this.contentPresence=new PresenceManager({ref:boxWith$1(()=>this.contentNode),open:this.opts.open,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}})}toggleOpen(){this.opts.open.current=!this.opts.open.current}#props=user_derived(()=>({id:this.opts.id.current,"data-state":getDataOpenClosed(this.opts.open.current),"data-disabled":boolToEmptyStrOrUndef(this.opts.disabled. +current),[collapsibleAttrs.root]:"",...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class CollapsibleContentState{static create(opts){return new CollapsibleContentState(opts,CollapsibleRootContext.get())}opts;root;attachment;#present=user_derived(()=>this.opts.hiddenUntilFound.current?this.root.opts.open.current:this.opts.forceMount.current||this.root.opts.open.current);get present(){return get$3(this.#present)}set present(value){set$1(this.#present, +value)}#originalStyles;#isMountAnimationPrevented=state$1(!1);#width=state$1(0);#height=state$1(0);constructor(opts,root2){this.opts=opts,this.root=root2,set$1(this.#isMountAnimationPrevented,root2.opts.open.current,!0),this.root.contentId=this.opts.id.current,this.attachment=attachRef(this.opts.ref,v=>this.root.contentNode=v),watch$1.pre(()=>this.opts.id.current,id2=>{this.root.contentId=id2}),user_pre_effect(()=>{const rAF=requestAnimationFrame(()=>{set$1(this.#isMountAnimationPrevented,!1)}); +return()=>{cancelAnimationFrame(rAF)}}),watch$1.pre([()=>this.opts.ref.current,()=>this.opts.hiddenUntilFound.current],([node2,hiddenUntilFound])=>!node2||!hiddenUntilFound?void 0:on(node2,"beforematch",()=>{this.root.opts.open.current||requestAnimationFrame(()=>{this.root.opts.open.current=!0})})),watch$1([()=>this.opts.ref.current,()=>this.present],([node2])=>{node2&&afterTick(()=>{if(!this.opts.ref.current)return;this.#originalStyles=this.#originalStyles||{transitionDuration:node2.style.transitionDuration, +animationName:node2.style.animationName},node2.style.transitionDuration="0s",node2.style.animationName="none";const rect=node2.getBoundingClientRect();if(set$1(this.#height,rect.height,!0),set$1(this.#width,rect.width,!0),!get$3(this.#isMountAnimationPrevented)){const{animationName,transitionDuration}=this.#originalStyles;node2.style.transitionDuration=transitionDuration,node2.style.animationName=animationName}})})}get shouldRender(){return this.root.contentPresence.shouldRender}#snippetProps=user_derived( +()=>({open:this.root.opts.open.current}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,style:{"--bits-collapsible-content-height":get$3(this.#height)?`${get$3(this.#height)}px`:void 0,"--bits-collapsible-content-width":get$3(this.#width)?`${get$3(this.#width)}px`:void 0},hidden:this.opts.hiddenUntilFound.current&&!this.root.opts.open.current?"until-found":void 0,"data-state":getDataOpenClosed( +this.root.opts.open.current),...getDataTransitionAttrs(this.root.contentPresence.transitionStatus),"data-disabled":boolToEmptyStrOrUndef(this.root.opts.disabled.current),[collapsibleAttrs.content]:"",...this.opts.hiddenUntilFound.current&&!this.shouldRender?{}:{hidden:this.opts.hiddenUntilFound.current?!this.shouldRender:this.opts.forceMount.current?void 0:!this.shouldRender},...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class CollapsibleTriggerState{static create(opts){ +return new CollapsibleTriggerState(opts,CollapsibleRootContext.get())}opts;root;attachment;#isDisabled=user_derived(()=>this.opts.disabled.current||this.root.opts.disabled.current);constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref),this.onclick=this.onclick.bind(this),this.onkeydown=this.onkeydown.bind(this)}onclick(e){if(!get$3(this.#isDisabled)){if(e.button!==0)return e.preventDefault();this.root.toggleOpen()}}onkeydown(e){get$3(this.#isDisabled)||(e. +key===SPACE||e.key===ENTER)&&(e.preventDefault(),this.root.toggleOpen())}#props=user_derived(()=>({id:this.opts.id.current,type:"button",disabled:get$3(this.#isDisabled),"aria-controls":this.root.contentId,"aria-expanded":boolToStr(this.root.opts.open.current),"data-state":getDataOpenClosed(this.root.opts.open.current),"data-disabled":boolToEmptyStrOrUndef(get$3(this.#isDisabled)),[collapsibleAttrs.trigger]:"",onclick:this.onclick,onkeydown:this.onkeydown,...this.attachment}));get props(){return get$3( +this.#props)}set props(value){set$1(this.#props,value)}}var root_2$1y=from_html("<div><!></div>");function Collapsible$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),open2=prop($$props,"open",15,!1),disabled=prop($$props,"disabled",3,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1),restProps=rest_props($$props,["$$slots","$$event\ +s","$$legacy","children","child","id","ref","open","disabled","onOpenChange","onOpenChangeComplete"]);const rootState=CollapsibleRootState.create({open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),disabled:boxWith$1(()=>disabled()),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())}),mergedProps=user_derived(()=>mergeProps(restProps,rootState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{ +var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1y();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_2$1x=from_html("<div><!\ +></div>");function Collapsible_content$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),forceMount=prop($$props,"forceMount",3,!1),hiddenUntilFound=prop($$props,"hiddenUntilFound",3,!1),id2=prop($$props,"id",19,()=>createId(uid2)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","ref","forceMount","hiddenUntilFound","children","id"]);const contentState=CollapsibleContentState.create({id:boxWith$1(()=>id2()),forceMount:boxWith$1( +()=>forceMount()),hiddenUntilFound:boxWith$1(()=>hiddenUntilFound()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,contentState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>({...contentState.snippetProps,props:get$3(mergedProps)}));snippet(node_1,()=>$$props.child,()=>get$3($0))}append($$anchor2,fragment_1)},alternate=$$anchor2=>{ +var div=root_2$1x();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_2$1w=from_html("<button><!></button>");function Collapsible_trigger$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId( +uid2)),disabled=prop($$props,"disabled",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","ref","id","disabled"]);const triggerState=CollapsibleTriggerState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),disabled:boxWith$1(()=>disabled())}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1); +snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1w();attribute_effect(button,()=>({...get$3(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}const sides=["top","right","bottom","left"],min=Math.min,max=Math.max,round=Math. +round,floor=Math.floor,createCoords=v=>({x:v,y:v}),oppositeSideMap={left:"right",right:"left",bottom:"top",top:"bottom"},oppositeAlignmentMap={start:"end",end:"start"};function clamp$1(start2,value,end){return max(start2,min(value,end))}function evaluate(value,param){return typeof value=="function"?value(param):value}function getSide$1(placement){return placement.split("-")[0]}function getAlignment(placement){return placement.split("-")[1]}function getOppositeAxis(axis){return axis==="x"?"y":"x"} +function getAxisLength(axis){return axis==="y"?"height":"width"}const yAxisSides=new Set(["top","bottom"]);function getSideAxis(placement){return yAxisSides.has(getSide$1(placement))?"y":"x"}function getAlignmentAxis(placement){return getOppositeAxis(getSideAxis(placement))}function getAlignmentSides(placement,rects,rtl){rtl===void 0&&(rtl=!1);const alignment=getAlignment(placement),alignmentAxis=getAlignmentAxis(placement),length=getAxisLength(alignmentAxis);let mainAlignmentSide=alignmentAxis=== +"x"?alignment===(rtl?"end":"start")?"right":"left":alignment==="start"?"bottom":"top";return rects.reference[length]>rects.floating[length]&&(mainAlignmentSide=getOppositePlacement(mainAlignmentSide)),[mainAlignmentSide,getOppositePlacement(mainAlignmentSide)]}function getExpandedPlacements(placement){const oppositePlacement=getOppositePlacement(placement);return[getOppositeAlignmentPlacement(placement),oppositePlacement,getOppositeAlignmentPlacement(oppositePlacement)]}function getOppositeAlignmentPlacement(placement){ +return placement.replace(/start|end/g,alignment=>oppositeAlignmentMap[alignment])}const lrPlacement=["left","right"],rlPlacement=["right","left"],tbPlacement=["top","bottom"],btPlacement=["bottom","top"];function getSideList(side,isStart,rtl){switch(side){case"top":case"bottom":return rtl?isStart?rlPlacement:lrPlacement:isStart?lrPlacement:rlPlacement;case"left":case"right":return isStart?tbPlacement:btPlacement;default:return[]}}function getOppositeAxisPlacements(placement,flipAlignment,direction,rtl){ +const alignment=getAlignment(placement);let list2=getSideList(getSide$1(placement),direction==="start",rtl);return alignment&&(list2=list2.map(side=>side+"-"+alignment),flipAlignment&&(list2=list2.concat(list2.map(getOppositeAlignmentPlacement)))),list2}function getOppositePlacement(placement){return placement.replace(/left|right|bottom|top/g,side=>oppositeSideMap[side])}function expandPaddingObject(padding){return{top:0,right:0,bottom:0,left:0,...padding}}function getPaddingObject(padding){return typeof padding!= +"number"?expandPaddingObject(padding):{top:padding,right:padding,bottom:padding,left:padding}}function rectToClientRect(rect){const{x,y,width,height}=rect;return{width,height,top:y,left:x,right:x+width,bottom:y+height,x,y}}function computeCoordsFromPlacement(_ref,placement,rtl){let{reference,floating}=_ref;const sideAxis=getSideAxis(placement),alignmentAxis=getAlignmentAxis(placement),alignLength=getAxisLength(alignmentAxis),side=getSide$1(placement),isVertical=sideAxis==="y",commonX=reference.x+ +reference.width/2-floating.width/2,commonY=reference.y+reference.height/2-floating.height/2,commonAlign=reference[alignLength]/2-floating[alignLength]/2;let coords;switch(side){case"top":coords={x:commonX,y:reference.y-floating.height};break;case"bottom":coords={x:commonX,y:reference.y+reference.height};break;case"right":coords={x:reference.x+reference.width,y:commonY};break;case"left":coords={x:reference.x-floating.width,y:commonY};break;default:coords={x:reference.x,y:reference.y}}switch(getAlignment( +placement)){case"start":coords[alignmentAxis]-=commonAlign*(rtl&&isVertical?-1:1);break;case"end":coords[alignmentAxis]+=commonAlign*(rtl&&isVertical?-1:1);break}return coords}const computePosition$1=async(reference,floating,config2)=>{const{placement="bottom",strategy="absolute",middleware=[],platform:platform2}=config2,validMiddleware=middleware.filter(Boolean),rtl=await(platform2.isRTL==null?void 0:platform2.isRTL(floating));let rects=await platform2.getElementRects({reference,floating,strategy}), +{x,y}=computeCoordsFromPlacement(rects,placement,rtl),statefulPlacement=placement,middlewareData={},resetCount=0;for(let i=0;i<validMiddleware.length;i++){const{name,fn}=validMiddleware[i],{x:nextX,y:nextY,data,reset:reset2}=await fn({x,y,initialPlacement:placement,placement:statefulPlacement,strategy,middlewareData,rects,platform:platform2,elements:{reference,floating}});x=nextX??x,y=nextY??y,middlewareData={...middlewareData,[name]:{...middlewareData[name],...data}},reset2&&resetCount<=50&&(resetCount++, +typeof reset2=="object"&&(reset2.placement&&(statefulPlacement=reset2.placement),reset2.rects&&(rects=reset2.rects===!0?await platform2.getElementRects({reference,floating,strategy}):reset2.rects),{x,y}=computeCoordsFromPlacement(rects,statefulPlacement,rtl)),i=-1)}return{x,y,placement:statefulPlacement,strategy,middlewareData}};async function detectOverflow(state2,options){var _await$platform$isEle;options===void 0&&(options={});const{x,y,platform:platform2,rects,elements,strategy}=state2,{boundary:boundary2="\ +clippingAncestors",rootBoundary="viewport",elementContext="floating",altBoundary=!1,padding=0}=evaluate(options,state2),paddingObject=getPaddingObject(padding),element2=elements[altBoundary?elementContext==="floating"?"reference":"floating":elementContext],clippingClientRect=rectToClientRect(await platform2.getClippingRect({element:(_await$platform$isEle=await(platform2.isElement==null?void 0:platform2.isElement(element2)))==null||_await$platform$isEle?element2:element2.contextElement||await(platform2. +getDocumentElement==null?void 0:platform2.getDocumentElement(elements.floating)),boundary:boundary2,rootBoundary,strategy})),rect=elementContext==="floating"?{x,y,width:rects.floating.width,height:rects.floating.height}:rects.reference,offsetParent=await(platform2.getOffsetParent==null?void 0:platform2.getOffsetParent(elements.floating)),offsetScale=await(platform2.isElement==null?void 0:platform2.isElement(offsetParent))?await(platform2.getScale==null?void 0:platform2.getScale(offsetParent))||{ +x:1,y:1}:{x:1,y:1},elementClientRect=rectToClientRect(platform2.convertOffsetParentRelativeRectToViewportRelativeRect?await platform2.convertOffsetParentRelativeRectToViewportRelativeRect({elements,rect,offsetParent,strategy}):rect);return{top:(clippingClientRect.top-elementClientRect.top+paddingObject.top)/offsetScale.y,bottom:(elementClientRect.bottom-clippingClientRect.bottom+paddingObject.bottom)/offsetScale.y,left:(clippingClientRect.left-elementClientRect.left+paddingObject.left)/offsetScale. +x,right:(elementClientRect.right-clippingClientRect.right+paddingObject.right)/offsetScale.x}}const arrow$1=options=>({name:"arrow",options,async fn(state2){const{x,y,placement,rects,platform:platform2,elements,middlewareData}=state2,{element:element2,padding=0}=evaluate(options,state2)||{};if(element2==null)return{};const paddingObject=getPaddingObject(padding),coords={x,y},axis=getAlignmentAxis(placement),length=getAxisLength(axis),arrowDimensions=await platform2.getDimensions(element2),isYAxis=axis=== +"y",minProp=isYAxis?"top":"left",maxProp=isYAxis?"bottom":"right",clientProp=isYAxis?"clientHeight":"clientWidth",endDiff=rects.reference[length]+rects.reference[axis]-coords[axis]-rects.floating[length],startDiff=coords[axis]-rects.reference[axis],arrowOffsetParent=await(platform2.getOffsetParent==null?void 0:platform2.getOffsetParent(element2));let clientSize=arrowOffsetParent?arrowOffsetParent[clientProp]:0;(!clientSize||!await(platform2.isElement==null?void 0:platform2.isElement(arrowOffsetParent)))&& +(clientSize=elements.floating[clientProp]||rects.floating[length]);const centerToReference=endDiff/2-startDiff/2,largestPossiblePadding=clientSize/2-arrowDimensions[length]/2-1,minPadding=min(paddingObject[minProp],largestPossiblePadding),maxPadding=min(paddingObject[maxProp],largestPossiblePadding),min$1=minPadding,max2=clientSize-arrowDimensions[length]-maxPadding,center=clientSize/2-arrowDimensions[length]/2+centerToReference,offset2=clamp$1(min$1,center,max2),shouldAddOffset=!middlewareData. +arrow&&getAlignment(placement)!=null&¢er!==offset2&&rects.reference[length]/2-(center<min$1?minPadding:maxPadding)-arrowDimensions[length]/2<0,alignmentOffset=shouldAddOffset?center<min$1?center-min$1:center-max2:0;return{[axis]:coords[axis]+alignmentOffset,data:{[axis]:offset2,centerOffset:center-offset2-alignmentOffset,...shouldAddOffset&&{alignmentOffset}},reset:shouldAddOffset}}}),flip$1=function(options){return options===void 0&&(options={}),{name:"flip",options,async fn(state2){var _middlewareData$arrow, +_middlewareData$flip;const{placement,middlewareData,rects,initialPlacement,platform:platform2,elements}=state2,{mainAxis:checkMainAxis=!0,crossAxis:checkCrossAxis=!0,fallbackPlacements:specifiedFallbackPlacements,fallbackStrategy="bestFit",fallbackAxisSideDirection="none",flipAlignment=!0,...detectOverflowOptions}=evaluate(options,state2);if((_middlewareData$arrow=middlewareData.arrow)!=null&&_middlewareData$arrow.alignmentOffset)return{};const side=getSide$1(placement),initialSideAxis=getSideAxis( +initialPlacement),isBasePlacement=getSide$1(initialPlacement)===initialPlacement,rtl=await(platform2.isRTL==null?void 0:platform2.isRTL(elements.floating)),fallbackPlacements=specifiedFallbackPlacements||(isBasePlacement||!flipAlignment?[getOppositePlacement(initialPlacement)]:getExpandedPlacements(initialPlacement)),hasFallbackAxisSideDirection=fallbackAxisSideDirection!=="none";!specifiedFallbackPlacements&&hasFallbackAxisSideDirection&&fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, +flipAlignment,fallbackAxisSideDirection,rtl));const placements=[initialPlacement,...fallbackPlacements],overflow=await detectOverflow(state2,detectOverflowOptions),overflows=[];let overflowsData=((_middlewareData$flip=middlewareData.flip)==null?void 0:_middlewareData$flip.overflows)||[];if(checkMainAxis&&overflows.push(overflow[side]),checkCrossAxis){const sides2=getAlignmentSides(placement,rects,rtl);overflows.push(overflow[sides2[0]],overflow[sides2[1]])}if(overflowsData=[...overflowsData,{placement, +overflows}],!overflows.every(side2=>side2<=0)){var _middlewareData$flip2,_overflowsData$filter;const nextIndex=(((_middlewareData$flip2=middlewareData.flip)==null?void 0:_middlewareData$flip2.index)||0)+1,nextPlacement=placements[nextIndex];if(nextPlacement&&(!(checkCrossAxis==="alignment"?initialSideAxis!==getSideAxis(nextPlacement):!1)||overflowsData.every(d2=>d2.overflows[0]>0&&getSideAxis(d2.placement)===initialSideAxis)))return{data:{index:nextIndex,overflows:overflowsData},reset:{placement:nextPlacement}}; +let resetPlacement=(_overflowsData$filter=overflowsData.filter(d2=>d2.overflows[0]<=0).sort((a,b)=>a.overflows[1]-b.overflows[1])[0])==null?void 0:_overflowsData$filter.placement;if(!resetPlacement)switch(fallbackStrategy){case"bestFit":{var _overflowsData$filter2;const placement2=(_overflowsData$filter2=overflowsData.filter(d2=>{if(hasFallbackAxisSideDirection){const currentSideAxis=getSideAxis(d2.placement);return currentSideAxis===initialSideAxis||currentSideAxis==="y"}return!0}).map(d2=>[d2. +placement,d2.overflows.filter(overflow2=>overflow2>0).reduce((acc,overflow2)=>acc+overflow2,0)]).sort((a,b)=>a[1]-b[1])[0])==null?void 0:_overflowsData$filter2[0];placement2&&(resetPlacement=placement2);break}case"initialPlacement":resetPlacement=initialPlacement;break}if(placement!==resetPlacement)return{reset:{placement:resetPlacement}}}return{}}}};function getSideOffsets(overflow,rect){return{top:overflow.top-rect.height,right:overflow.right-rect.width,bottom:overflow.bottom-rect.height,left:overflow. +left-rect.width}}function isAnySideFullyClipped(overflow){return sides.some(side=>overflow[side]>=0)}const hide$1=function(options){return options===void 0&&(options={}),{name:"hide",options,async fn(state2){const{rects}=state2,{strategy="referenceHidden",...detectOverflowOptions}=evaluate(options,state2);switch(strategy){case"referenceHidden":{const overflow=await detectOverflow(state2,{...detectOverflowOptions,elementContext:"reference"}),offsets=getSideOffsets(overflow,rects.reference);return{ +data:{referenceHiddenOffsets:offsets,referenceHidden:isAnySideFullyClipped(offsets)}}}case"escaped":{const overflow=await detectOverflow(state2,{...detectOverflowOptions,altBoundary:!0}),offsets=getSideOffsets(overflow,rects.floating);return{data:{escapedOffsets:offsets,escaped:isAnySideFullyClipped(offsets)}}}default:return{}}}}},originSides=new Set(["left","top"]);async function convertValueToCoords(state2,options){const{placement,platform:platform2,elements}=state2,rtl=await(platform2.isRTL== +null?void 0:platform2.isRTL(elements.floating)),side=getSide$1(placement),alignment=getAlignment(placement),isVertical=getSideAxis(placement)==="y",mainAxisMulti=originSides.has(side)?-1:1,crossAxisMulti=rtl&&isVertical?-1:1,rawValue=evaluate(options,state2);let{mainAxis,crossAxis,alignmentAxis}=typeof rawValue=="number"?{mainAxis:rawValue,crossAxis:0,alignmentAxis:null}:{mainAxis:rawValue.mainAxis||0,crossAxis:rawValue.crossAxis||0,alignmentAxis:rawValue.alignmentAxis};return alignment&&typeof alignmentAxis== +"number"&&(crossAxis=alignment==="end"?alignmentAxis*-1:alignmentAxis),isVertical?{x:crossAxis*crossAxisMulti,y:mainAxis*mainAxisMulti}:{x:mainAxis*mainAxisMulti,y:crossAxis*crossAxisMulti}}const offset$1=function(options){return options===void 0&&(options=0),{name:"offset",options,async fn(state2){var _middlewareData$offse,_middlewareData$arrow;const{x,y,placement,middlewareData}=state2,diffCoords=await convertValueToCoords(state2,options);return placement===((_middlewareData$offse=middlewareData. +offset)==null?void 0:_middlewareData$offse.placement)&&(_middlewareData$arrow=middlewareData.arrow)!=null&&_middlewareData$arrow.alignmentOffset?{}:{x:x+diffCoords.x,y:y+diffCoords.y,data:{...diffCoords,placement}}}}},shift$1=function(options){return options===void 0&&(options={}),{name:"shift",options,async fn(state2){const{x,y,placement}=state2,{mainAxis:checkMainAxis=!0,crossAxis:checkCrossAxis=!1,limiter={fn:_ref=>{let{x:x2,y:y2}=_ref;return{x:x2,y:y2}}},...detectOverflowOptions}=evaluate(options, +state2),coords={x,y},overflow=await detectOverflow(state2,detectOverflowOptions),crossAxis=getSideAxis(getSide$1(placement)),mainAxis=getOppositeAxis(crossAxis);let mainAxisCoord=coords[mainAxis],crossAxisCoord=coords[crossAxis];if(checkMainAxis){const minSide=mainAxis==="y"?"top":"left",maxSide=mainAxis==="y"?"bottom":"right",min2=mainAxisCoord+overflow[minSide],max2=mainAxisCoord-overflow[maxSide];mainAxisCoord=clamp$1(min2,mainAxisCoord,max2)}if(checkCrossAxis){const minSide=crossAxis==="y"?"\ +top":"left",maxSide=crossAxis==="y"?"bottom":"right",min2=crossAxisCoord+overflow[minSide],max2=crossAxisCoord-overflow[maxSide];crossAxisCoord=clamp$1(min2,crossAxisCoord,max2)}const limitedCoords=limiter.fn({...state2,[mainAxis]:mainAxisCoord,[crossAxis]:crossAxisCoord});return{...limitedCoords,data:{x:limitedCoords.x-x,y:limitedCoords.y-y,enabled:{[mainAxis]:checkMainAxis,[crossAxis]:checkCrossAxis}}}}}},limitShift$1=function(options){return options===void 0&&(options={}),{options,fn(state2){ +const{x,y,placement,rects,middlewareData}=state2,{offset:offset2=0,mainAxis:checkMainAxis=!0,crossAxis:checkCrossAxis=!0}=evaluate(options,state2),coords={x,y},crossAxis=getSideAxis(placement),mainAxis=getOppositeAxis(crossAxis);let mainAxisCoord=coords[mainAxis],crossAxisCoord=coords[crossAxis];const rawOffset=evaluate(offset2,state2),computedOffset=typeof rawOffset=="number"?{mainAxis:rawOffset,crossAxis:0}:{mainAxis:0,crossAxis:0,...rawOffset};if(checkMainAxis){const len=mainAxis==="y"?"heigh\ +t":"width",limitMin=rects.reference[mainAxis]-rects.floating[len]+computedOffset.mainAxis,limitMax=rects.reference[mainAxis]+rects.reference[len]-computedOffset.mainAxis;mainAxisCoord<limitMin?mainAxisCoord=limitMin:mainAxisCoord>limitMax&&(mainAxisCoord=limitMax)}if(checkCrossAxis){var _middlewareData$offse,_middlewareData$offse2;const len=mainAxis==="y"?"width":"height",isOriginSide=originSides.has(getSide$1(placement)),limitMin=rects.reference[crossAxis]-rects.floating[len]+(isOriginSide&&((_middlewareData$offse= +middlewareData.offset)==null?void 0:_middlewareData$offse[crossAxis])||0)+(isOriginSide?0:computedOffset.crossAxis),limitMax=rects.reference[crossAxis]+rects.reference[len]+(isOriginSide?0:((_middlewareData$offse2=middlewareData.offset)==null?void 0:_middlewareData$offse2[crossAxis])||0)-(isOriginSide?computedOffset.crossAxis:0);crossAxisCoord<limitMin?crossAxisCoord=limitMin:crossAxisCoord>limitMax&&(crossAxisCoord=limitMax)}return{[mainAxis]:mainAxisCoord,[crossAxis]:crossAxisCoord}}}},size$1=function(options){ +return options===void 0&&(options={}),{name:"size",options,async fn(state2){var _state$middlewareData,_state$middlewareData2;const{placement,rects,platform:platform2,elements}=state2,{apply=()=>{},...detectOverflowOptions}=evaluate(options,state2),overflow=await detectOverflow(state2,detectOverflowOptions),side=getSide$1(placement),alignment=getAlignment(placement),isYAxis=getSideAxis(placement)==="y",{width,height}=rects.floating;let heightSide,widthSide;side==="top"||side==="bottom"?(heightSide= +side,widthSide=alignment===(await(platform2.isRTL==null?void 0:platform2.isRTL(elements.floating))?"start":"end")?"left":"right"):(widthSide=side,heightSide=alignment==="end"?"top":"bottom");const maximumClippingHeight=height-overflow.top-overflow.bottom,maximumClippingWidth=width-overflow.left-overflow.right,overflowAvailableHeight=min(height-overflow[heightSide],maximumClippingHeight),overflowAvailableWidth=min(width-overflow[widthSide],maximumClippingWidth),noShift=!state2.middlewareData.shift; +let availableHeight=overflowAvailableHeight,availableWidth=overflowAvailableWidth;if((_state$middlewareData=state2.middlewareData.shift)!=null&&_state$middlewareData.enabled.x&&(availableWidth=maximumClippingWidth),(_state$middlewareData2=state2.middlewareData.shift)!=null&&_state$middlewareData2.enabled.y&&(availableHeight=maximumClippingHeight),noShift&&!alignment){const xMin=max(overflow.left,0),xMax=max(overflow.right,0),yMin=max(overflow.top,0),yMax=max(overflow.bottom,0);isYAxis?availableWidth= +width-2*(xMin!==0||xMax!==0?xMin+xMax:max(overflow.left,overflow.right)):availableHeight=height-2*(yMin!==0||yMax!==0?yMin+yMax:max(overflow.top,overflow.bottom))}await apply({...state2,availableWidth,availableHeight});const nextDimensions=await platform2.getDimensions(elements.floating);return width!==nextDimensions.width||height!==nextDimensions.height?{reset:{rects:!0}}:{}}}};function hasWindow(){return typeof window<"u"}function getNodeName(node2){return isNode(node2)?(node2.nodeName||"").toLowerCase(): +"#document"}function getWindow(node2){var _node$ownerDocument;return(node2==null||(_node$ownerDocument=node2.ownerDocument)==null?void 0:_node$ownerDocument.defaultView)||window}function getDocumentElement(node2){var _ref;return(_ref=(isNode(node2)?node2.ownerDocument:node2.document)||window.document)==null?void 0:_ref.documentElement}function isNode(value){return hasWindow()?value instanceof Node||value instanceof getWindow(value).Node:!1}function isElement(value){return hasWindow()?value instanceof +Element||value instanceof getWindow(value).Element:!1}function isHTMLElement(value){return hasWindow()?value instanceof HTMLElement||value instanceof getWindow(value).HTMLElement:!1}function isShadowRoot(value){return!hasWindow()||typeof ShadowRoot>"u"?!1:value instanceof ShadowRoot||value instanceof getWindow(value).ShadowRoot}const invalidOverflowDisplayValues=new Set(["inline","contents"]);function isOverflowElement(element2){const{overflow,overflowX,overflowY,display}=getComputedStyle$1(element2); +return/auto|scroll|overlay|hidden|clip/.test(overflow+overflowY+overflowX)&&!invalidOverflowDisplayValues.has(display)}const tableElements=new Set(["table","td","th"]);function isTableElement(element2){return tableElements.has(getNodeName(element2))}const topLayerSelectors=[":popover-open",":modal"];function isTopLayer(element2){return topLayerSelectors.some(selector=>{try{return element2.matches(selector)}catch{return!1}})}const transformProperties=["transform","translate","scale","rotate","per\ +spective"],willChangeValues=["transform","translate","scale","rotate","perspective","filter"],containValues=["paint","layout","strict","content"];function isContainingBlock(elementOrCss){const webkit=isWebKit(),css2=isElement(elementOrCss)?getComputedStyle$1(elementOrCss):elementOrCss;return transformProperties.some(value=>css2[value]?css2[value]!=="none":!1)||(css2.containerType?css2.containerType!=="normal":!1)||!webkit&&(css2.backdropFilter?css2.backdropFilter!=="none":!1)||!webkit&&(css2.filter? +css2.filter!=="none":!1)||willChangeValues.some(value=>(css2.willChange||"").includes(value))||containValues.some(value=>(css2.contain||"").includes(value))}function getContainingBlock(element2){let currentNode=getParentNode(element2);for(;isHTMLElement(currentNode)&&!isLastTraversableNode(currentNode);){if(isContainingBlock(currentNode))return currentNode;if(isTopLayer(currentNode))return null;currentNode=getParentNode(currentNode)}return null}function isWebKit(){return typeof CSS>"u"||!CSS.supports? +!1:CSS.supports("-webkit-backdrop-filter","none")}const lastTraversableNodeNames=new Set(["html","body","#document"]);function isLastTraversableNode(node2){return lastTraversableNodeNames.has(getNodeName(node2))}function getComputedStyle$1(element2){return getWindow(element2).getComputedStyle(element2)}function getNodeScroll(element2){return isElement(element2)?{scrollLeft:element2.scrollLeft,scrollTop:element2.scrollTop}:{scrollLeft:element2.scrollX,scrollTop:element2.scrollY}}function getParentNode(node2){ +if(getNodeName(node2)==="html")return node2;const result=node2.assignedSlot||node2.parentNode||isShadowRoot(node2)&&node2.host||getDocumentElement(node2);return isShadowRoot(result)?result.host:result}function getNearestOverflowAncestor(node2){const parentNode=getParentNode(node2);return isLastTraversableNode(parentNode)?node2.ownerDocument?node2.ownerDocument.body:node2.body:isHTMLElement(parentNode)&&isOverflowElement(parentNode)?parentNode:getNearestOverflowAncestor(parentNode)}function getOverflowAncestors(node2,list2,traverseIframes){ +var _node$ownerDocument2;list2===void 0&&(list2=[]),traverseIframes===void 0&&(traverseIframes=!0);const scrollableAncestor=getNearestOverflowAncestor(node2),isBody=scrollableAncestor===((_node$ownerDocument2=node2.ownerDocument)==null?void 0:_node$ownerDocument2.body),win=getWindow(scrollableAncestor);if(isBody){const frameElement=getFrameElement(win);return list2.concat(win,win.visualViewport||[],isOverflowElement(scrollableAncestor)?scrollableAncestor:[],frameElement&&traverseIframes?getOverflowAncestors( +frameElement):[])}return list2.concat(scrollableAncestor,getOverflowAncestors(scrollableAncestor,[],traverseIframes))}function getFrameElement(win){return win.parent&&Object.getPrototypeOf(win.parent)?win.frameElement:null}function getCssDimensions(element2){const css2=getComputedStyle$1(element2);let width=parseFloat(css2.width)||0,height=parseFloat(css2.height)||0;const hasOffset=isHTMLElement(element2),offsetWidth=hasOffset?element2.offsetWidth:width,offsetHeight=hasOffset?element2.offsetHeight: +height,shouldFallback=round(width)!==offsetWidth||round(height)!==offsetHeight;return shouldFallback&&(width=offsetWidth,height=offsetHeight),{width,height,$:shouldFallback}}function unwrapElement(element2){return isElement(element2)?element2:element2.contextElement}function getScale(element2){const domElement=unwrapElement(element2);if(!isHTMLElement(domElement))return createCoords(1);const rect=domElement.getBoundingClientRect(),{width,height,$}=getCssDimensions(domElement);let x=($?round(rect. +width):rect.width)/width,y=($?round(rect.height):rect.height)/height;return(!x||!Number.isFinite(x))&&(x=1),(!y||!Number.isFinite(y))&&(y=1),{x,y}}const noOffsets=createCoords(0);function getVisualOffsets(element2){const win=getWindow(element2);return!isWebKit()||!win.visualViewport?noOffsets:{x:win.visualViewport.offsetLeft,y:win.visualViewport.offsetTop}}function shouldAddVisualOffsets(element2,isFixed,floatingOffsetParent){return isFixed===void 0&&(isFixed=!1),!floatingOffsetParent||isFixed&& +floatingOffsetParent!==getWindow(element2)?!1:isFixed}function getBoundingClientRect(element2,includeScale,isFixedStrategy,offsetParent){includeScale===void 0&&(includeScale=!1),isFixedStrategy===void 0&&(isFixedStrategy=!1);const clientRect=element2.getBoundingClientRect(),domElement=unwrapElement(element2);let scale2=createCoords(1);includeScale&&(offsetParent?isElement(offsetParent)&&(scale2=getScale(offsetParent)):scale2=getScale(element2));const visualOffsets=shouldAddVisualOffsets(domElement, +isFixedStrategy,offsetParent)?getVisualOffsets(domElement):createCoords(0);let x=(clientRect.left+visualOffsets.x)/scale2.x,y=(clientRect.top+visualOffsets.y)/scale2.y,width=clientRect.width/scale2.x,height=clientRect.height/scale2.y;if(domElement){const win=getWindow(domElement),offsetWin=offsetParent&&isElement(offsetParent)?getWindow(offsetParent):offsetParent;let currentWin=win,currentIFrame=getFrameElement(currentWin);for(;currentIFrame&&offsetParent&&offsetWin!==currentWin;){const iframeScale=getScale( +currentIFrame),iframeRect=currentIFrame.getBoundingClientRect(),css2=getComputedStyle$1(currentIFrame),left=iframeRect.left+(currentIFrame.clientLeft+parseFloat(css2.paddingLeft))*iframeScale.x,top=iframeRect.top+(currentIFrame.clientTop+parseFloat(css2.paddingTop))*iframeScale.y;x*=iframeScale.x,y*=iframeScale.y,width*=iframeScale.x,height*=iframeScale.y,x+=left,y+=top,currentWin=getWindow(currentIFrame),currentIFrame=getFrameElement(currentWin)}}return rectToClientRect({width,height,x,y})}function getWindowScrollBarX(element2,rect){ +const leftScroll=getNodeScroll(element2).scrollLeft;return rect?rect.left+leftScroll:getBoundingClientRect(getDocumentElement(element2)).left+leftScroll}function getHTMLOffset(documentElement,scroll,ignoreScrollbarX){ignoreScrollbarX===void 0&&(ignoreScrollbarX=!1);const htmlRect=documentElement.getBoundingClientRect(),x=htmlRect.left+scroll.scrollLeft-(ignoreScrollbarX?0:getWindowScrollBarX(documentElement,htmlRect)),y=htmlRect.top+scroll.scrollTop;return{x,y}}function convertOffsetParentRelativeRectToViewportRelativeRect(_ref){ +let{elements,rect,offsetParent,strategy}=_ref;const isFixed=strategy==="fixed",documentElement=getDocumentElement(offsetParent),topLayer=elements?isTopLayer(elements.floating):!1;if(offsetParent===documentElement||topLayer&&isFixed)return rect;let scroll={scrollLeft:0,scrollTop:0},scale2=createCoords(1);const offsets=createCoords(0),isOffsetParentAnElement=isHTMLElement(offsetParent);if((isOffsetParentAnElement||!isOffsetParentAnElement&&!isFixed)&&((getNodeName(offsetParent)!=="body"||isOverflowElement( +documentElement))&&(scroll=getNodeScroll(offsetParent)),isHTMLElement(offsetParent))){const offsetRect=getBoundingClientRect(offsetParent);scale2=getScale(offsetParent),offsets.x=offsetRect.x+offsetParent.clientLeft,offsets.y=offsetRect.y+offsetParent.clientTop}const htmlOffset=documentElement&&!isOffsetParentAnElement&&!isFixed?getHTMLOffset(documentElement,scroll,!0):createCoords(0);return{width:rect.width*scale2.x,height:rect.height*scale2.y,x:rect.x*scale2.x-scroll.scrollLeft*scale2.x+offsets. +x+htmlOffset.x,y:rect.y*scale2.y-scroll.scrollTop*scale2.y+offsets.y+htmlOffset.y}}function getClientRects(element2){return Array.from(element2.getClientRects())}function getDocumentRect(element2){const html2=getDocumentElement(element2),scroll=getNodeScroll(element2),body2=element2.ownerDocument.body,width=max(html2.scrollWidth,html2.clientWidth,body2.scrollWidth,body2.clientWidth),height=max(html2.scrollHeight,html2.clientHeight,body2.scrollHeight,body2.clientHeight);let x=-scroll.scrollLeft+getWindowScrollBarX( +element2);const y=-scroll.scrollTop;return getComputedStyle$1(body2).direction==="rtl"&&(x+=max(html2.clientWidth,body2.clientWidth)-width),{width,height,x,y}}function getViewportRect(element2,strategy){const win=getWindow(element2),html2=getDocumentElement(element2),visualViewport=win.visualViewport;let width=html2.clientWidth,height=html2.clientHeight,x=0,y=0;if(visualViewport){width=visualViewport.width,height=visualViewport.height;const visualViewportBased=isWebKit();(!visualViewportBased||visualViewportBased&& +strategy==="fixed")&&(x=visualViewport.offsetLeft,y=visualViewport.offsetTop)}return{width,height,x,y}}const absoluteOrFixed=new Set(["absolute","fixed"]);function getInnerBoundingClientRect(element2,strategy){const clientRect=getBoundingClientRect(element2,!0,strategy==="fixed"),top=clientRect.top+element2.clientTop,left=clientRect.left+element2.clientLeft,scale2=isHTMLElement(element2)?getScale(element2):createCoords(1),width=element2.clientWidth*scale2.x,height=element2.clientHeight*scale2.y, +x=left*scale2.x,y=top*scale2.y;return{width,height,x,y}}function getClientRectFromClippingAncestor(element2,clippingAncestor,strategy){let rect;if(clippingAncestor==="viewport")rect=getViewportRect(element2,strategy);else if(clippingAncestor==="document")rect=getDocumentRect(getDocumentElement(element2));else if(isElement(clippingAncestor))rect=getInnerBoundingClientRect(clippingAncestor,strategy);else{const visualOffsets=getVisualOffsets(element2);rect={x:clippingAncestor.x-visualOffsets.x,y:clippingAncestor. +y-visualOffsets.y,width:clippingAncestor.width,height:clippingAncestor.height}}return rectToClientRect(rect)}function hasFixedPositionAncestor(element2,stopNode){const parentNode=getParentNode(element2);return parentNode===stopNode||!isElement(parentNode)||isLastTraversableNode(parentNode)?!1:getComputedStyle$1(parentNode).position==="fixed"||hasFixedPositionAncestor(parentNode,stopNode)}function getClippingElementAncestors(element2,cache2){const cachedResult=cache2.get(element2);if(cachedResult) +return cachedResult;let result=getOverflowAncestors(element2,[],!1).filter(el=>isElement(el)&&getNodeName(el)!=="body"),currentContainingBlockComputedStyle=null;const elementIsFixed=getComputedStyle$1(element2).position==="fixed";let currentNode=elementIsFixed?getParentNode(element2):element2;for(;isElement(currentNode)&&!isLastTraversableNode(currentNode);){const computedStyle=getComputedStyle$1(currentNode),currentNodeIsContaining=isContainingBlock(currentNode);!currentNodeIsContaining&&computedStyle. +position==="fixed"&&(currentContainingBlockComputedStyle=null),(elementIsFixed?!currentNodeIsContaining&&!currentContainingBlockComputedStyle:!currentNodeIsContaining&&computedStyle.position==="static"&&!!currentContainingBlockComputedStyle&&absoluteOrFixed.has(currentContainingBlockComputedStyle.position)||isOverflowElement(currentNode)&&!currentNodeIsContaining&&hasFixedPositionAncestor(element2,currentNode))?result=result.filter(ancestor=>ancestor!==currentNode):currentContainingBlockComputedStyle= +computedStyle,currentNode=getParentNode(currentNode)}return cache2.set(element2,result),result}function getClippingRect(_ref){let{element:element2,boundary:boundary2,rootBoundary,strategy}=_ref;const clippingAncestors=[...boundary2==="clippingAncestors"?isTopLayer(element2)?[]:getClippingElementAncestors(element2,this._c):[].concat(boundary2),rootBoundary],firstClippingAncestor=clippingAncestors[0],clippingRect=clippingAncestors.reduce((accRect,clippingAncestor)=>{const rect=getClientRectFromClippingAncestor( +element2,clippingAncestor,strategy);return accRect.top=max(rect.top,accRect.top),accRect.right=min(rect.right,accRect.right),accRect.bottom=min(rect.bottom,accRect.bottom),accRect.left=max(rect.left,accRect.left),accRect},getClientRectFromClippingAncestor(element2,firstClippingAncestor,strategy));return{width:clippingRect.right-clippingRect.left,height:clippingRect.bottom-clippingRect.top,x:clippingRect.left,y:clippingRect.top}}function getDimensions(element2){const{width,height}=getCssDimensions( +element2);return{width,height}}function getRectRelativeToOffsetParent(element2,offsetParent,strategy){const isOffsetParentAnElement=isHTMLElement(offsetParent),documentElement=getDocumentElement(offsetParent),isFixed=strategy==="fixed",rect=getBoundingClientRect(element2,!0,isFixed,offsetParent);let scroll={scrollLeft:0,scrollTop:0};const offsets=createCoords(0);function setLeftRTLScrollbarOffset(){offsets.x=getWindowScrollBarX(documentElement)}if(isOffsetParentAnElement||!isOffsetParentAnElement&& +!isFixed)if((getNodeName(offsetParent)!=="body"||isOverflowElement(documentElement))&&(scroll=getNodeScroll(offsetParent)),isOffsetParentAnElement){const offsetRect=getBoundingClientRect(offsetParent,!0,isFixed,offsetParent);offsets.x=offsetRect.x+offsetParent.clientLeft,offsets.y=offsetRect.y+offsetParent.clientTop}else documentElement&&setLeftRTLScrollbarOffset();isFixed&&!isOffsetParentAnElement&&documentElement&&setLeftRTLScrollbarOffset();const htmlOffset=documentElement&&!isOffsetParentAnElement&& +!isFixed?getHTMLOffset(documentElement,scroll):createCoords(0),x=rect.left+scroll.scrollLeft-offsets.x-htmlOffset.x,y=rect.top+scroll.scrollTop-offsets.y-htmlOffset.y;return{x,y,width:rect.width,height:rect.height}}function isStaticPositioned(element2){return getComputedStyle$1(element2).position==="static"}function getTrueOffsetParent(element2,polyfill){if(!isHTMLElement(element2)||getComputedStyle$1(element2).position==="fixed")return null;if(polyfill)return polyfill(element2);let rawOffsetParent=element2. +offsetParent;return getDocumentElement(element2)===rawOffsetParent&&(rawOffsetParent=rawOffsetParent.ownerDocument.body),rawOffsetParent}function getOffsetParent(element2,polyfill){const win=getWindow(element2);if(isTopLayer(element2))return win;if(!isHTMLElement(element2)){let svgOffsetParent=getParentNode(element2);for(;svgOffsetParent&&!isLastTraversableNode(svgOffsetParent);){if(isElement(svgOffsetParent)&&!isStaticPositioned(svgOffsetParent))return svgOffsetParent;svgOffsetParent=getParentNode( +svgOffsetParent)}return win}let offsetParent=getTrueOffsetParent(element2,polyfill);for(;offsetParent&&isTableElement(offsetParent)&&isStaticPositioned(offsetParent);)offsetParent=getTrueOffsetParent(offsetParent,polyfill);return offsetParent&&isLastTraversableNode(offsetParent)&&isStaticPositioned(offsetParent)&&!isContainingBlock(offsetParent)?win:offsetParent||getContainingBlock(element2)||win}const getElementRects=async function(data){const getOffsetParentFn=this.getOffsetParent||getOffsetParent, +getDimensionsFn=this.getDimensions,floatingDimensions=await getDimensionsFn(data.floating);return{reference:getRectRelativeToOffsetParent(data.reference,await getOffsetParentFn(data.floating),data.strategy),floating:{x:0,y:0,width:floatingDimensions.width,height:floatingDimensions.height}}};function isRTL(element2){return getComputedStyle$1(element2).direction==="rtl"}const platform={convertOffsetParentRelativeRectToViewportRelativeRect,getDocumentElement,getClippingRect,getOffsetParent,getElementRects, +getClientRects,getDimensions,getScale,isElement,isRTL};function rectsAreEqual(a,b){return a.x===b.x&&a.y===b.y&&a.width===b.width&&a.height===b.height}function observeMove(element2,onMove){let io=null,timeoutId;const root2=getDocumentElement(element2);function cleanup(){var _io;clearTimeout(timeoutId),(_io=io)==null||_io.disconnect(),io=null}function refresh(skip,threshold){skip===void 0&&(skip=!1),threshold===void 0&&(threshold=1),cleanup();const elementRectForRootMargin=element2.getBoundingClientRect(), +{left,top,width,height}=elementRectForRootMargin;if(skip||onMove(),!width||!height)return;const insetTop=floor(top),insetRight=floor(root2.clientWidth-(left+width)),insetBottom=floor(root2.clientHeight-(top+height)),insetLeft=floor(left),options={rootMargin:-insetTop+"px "+-insetRight+"px "+-insetBottom+"px "+-insetLeft+"px",threshold:max(0,min(1,threshold))||1};let isFirstUpdate=!0;function handleObserve(entries){const ratio=entries[0].intersectionRatio;if(ratio!==threshold){if(!isFirstUpdate)return refresh(); +ratio?refresh(!1,ratio):timeoutId=setTimeout(()=>{refresh(!1,1e-7)},1e3)}ratio===1&&!rectsAreEqual(elementRectForRootMargin,element2.getBoundingClientRect())&&refresh(),isFirstUpdate=!1}try{io=new IntersectionObserver(handleObserve,{...options,root:root2.ownerDocument})}catch{io=new IntersectionObserver(handleObserve,options)}io.observe(element2)}return refresh(!0),cleanup}function autoUpdate(reference,floating,update2,options){options===void 0&&(options={});const{ancestorScroll=!0,ancestorResize=!0, +elementResize=typeof ResizeObserver=="function",layoutShift=typeof IntersectionObserver=="function",animationFrame=!1}=options,referenceEl=unwrapElement(reference),ancestors=ancestorScroll||ancestorResize?[...referenceEl?getOverflowAncestors(referenceEl):[],...getOverflowAncestors(floating)]:[];ancestors.forEach(ancestor=>{ancestorScroll&&ancestor.addEventListener("scroll",update2,{passive:!0}),ancestorResize&&ancestor.addEventListener("resize",update2)});const cleanupIo=referenceEl&&layoutShift? +observeMove(referenceEl,update2):null;let reobserveFrame=-1,resizeObserver=null;elementResize&&(resizeObserver=new ResizeObserver(_ref=>{let[firstEntry]=_ref;firstEntry&&firstEntry.target===referenceEl&&resizeObserver&&(resizeObserver.unobserve(floating),cancelAnimationFrame(reobserveFrame),reobserveFrame=requestAnimationFrame(()=>{var _resizeObserver;(_resizeObserver=resizeObserver)==null||_resizeObserver.observe(floating)})),update2()}),referenceEl&&!animationFrame&&resizeObserver.observe(referenceEl), +resizeObserver.observe(floating));let frameId,prevRefRect=animationFrame?getBoundingClientRect(reference):null;animationFrame&&frameLoop();function frameLoop(){const nextRefRect=getBoundingClientRect(reference);prevRefRect&&!rectsAreEqual(prevRefRect,nextRefRect)&&update2(),prevRefRect=nextRefRect,frameId=requestAnimationFrame(frameLoop)}return update2(),()=>{var _resizeObserver2;ancestors.forEach(ancestor=>{ancestorScroll&&ancestor.removeEventListener("scroll",update2),ancestorResize&&ancestor. +removeEventListener("resize",update2)}),cleanupIo?.(),(_resizeObserver2=resizeObserver)==null||_resizeObserver2.disconnect(),resizeObserver=null,animationFrame&&cancelAnimationFrame(frameId)}}const offset=offset$1,shift=shift$1,flip=flip$1,size=size$1,hide=hide$1,arrow=arrow$1,limitShift=limitShift$1,computePosition=(reference,floating,options)=>{const cache2=new Map,mergedOptions={platform,...options},platformWithCache={...mergedOptions.platform,_c:cache2};return computePosition$1(reference,floating, +{...mergedOptions,platform:platformWithCache})};function get(valueOrGetValue){return typeof valueOrGetValue=="function"?valueOrGetValue():valueOrGetValue}function getDPR(element2){return typeof window>"u"?1:(element2.ownerDocument.defaultView||window).devicePixelRatio||1}function roundByDPR(element2,value){const dpr=getDPR(element2);return Math.round(value*dpr)/dpr}function getFloatingContentCSSVars(name){return{[`--bits-${name}-content-transform-origin`]:"var(--bits-floating-transform-origin)", +[`--bits-${name}-content-available-width`]:"var(--bits-floating-available-width)",[`--bits-${name}-content-available-height`]:"var(--bits-floating-available-height)",[`--bits-${name}-anchor-width`]:"var(--bits-floating-anchor-width)",[`--bits-${name}-anchor-height`]:"var(--bits-floating-anchor-height)"}}function useFloating(options){const whileElementsMountedOption=options.whileElementsMounted,openOption=user_derived(()=>get(options.open)??!0),middlewareOption=user_derived(()=>get(options.middleware)), +transformOption=user_derived(()=>get(options.transform)??!0),placementOption=user_derived(()=>get(options.placement)??"bottom"),strategyOption=user_derived(()=>get(options.strategy)??"absolute"),sideOffsetOption=user_derived(()=>get(options.sideOffset)??0),alignOffsetOption=user_derived(()=>get(options.alignOffset)??0),reference=options.reference;let x=state$1(0),y=state$1(0);const floating=simpleBox(null);let strategy=state$1(proxy(get$3(strategyOption))),placement=state$1(proxy(get$3(placementOption))), +middlewareData=state$1(proxy({})),isPositioned=state$1(!1),hasWhileMountedPosition=!1,updateRequestId=0;const floatingStyles=user_derived(()=>{const xVal=floating.current?roundByDPR(floating.current,get$3(x)):get$3(x),yVal=floating.current?roundByDPR(floating.current,get$3(y)):get$3(y);return get$3(transformOption)?{position:get$3(strategy),left:"0",top:"0",transform:`translate(${xVal}px, ${yVal}px)`,...floating.current&&getDPR(floating.current)>=1.5&&{willChange:"transform"}}:{position:get$3(strategy), +left:`${xVal}px`,top:`${yVal}px`}});let whileElementsMountedCleanup;function update2(){if(reference.current===null||floating.current===null)return;const referenceNode=reference.current,floatingNode=floating.current,requestId=++updateRequestId;computePosition(referenceNode,floatingNode,{middleware:get$3(middlewareOption),placement:get$3(placementOption),strategy:get$3(strategyOption)}).then(position2=>{if(requestId!==updateRequestId||reference.current!==referenceNode||floating.current!==floatingNode) +return;if(isReferenceHidden(referenceNode)){set$1(middlewareData,{...get$3(middlewareData),hide:{...get$3(middlewareData).hide,referenceHidden:!0}},!0);return}if(!get$3(openOption)&&get$3(x)!==0&&get$3(y)!==0){const maxExpectedOffset=Math.max(Math.abs(get$3(sideOffsetOption)),Math.abs(get$3(alignOffsetOption)),15);if(position2.x<=maxExpectedOffset&&position2.y<=maxExpectedOffset)return}set$1(x,position2.x,!0),set$1(y,position2.y,!0),set$1(strategy,position2.strategy,!0),set$1(placement,position2. +placement,!0),set$1(middlewareData,position2.middlewareData,!0),set$1(isPositioned,!0)})}function cleanup(){typeof whileElementsMountedCleanup=="function"&&(whileElementsMountedCleanup(),whileElementsMountedCleanup=void 0),updateRequestId++}function attach2(){if(cleanup(),whileElementsMountedOption===void 0){update2();return}get$3(openOption)&&(reference.current===null||floating.current===null||(whileElementsMountedCleanup=whileElementsMountedOption(reference.current,floating.current,update2)))} +function reset2(){!get$3(openOption)&&floating.current===null&&set$1(isPositioned,!1)}function trackWhileMountedDeps(){return[get$3(middlewareOption),get$3(placementOption),get$3(strategyOption),get$3(sideOffsetOption),get$3(alignOffsetOption),get$3(openOption)]}return user_effect(()=>{whileElementsMountedOption===void 0&&get$3(openOption)&&update2()}),user_effect(attach2),user_effect(()=>{if(whileElementsMountedOption!==void 0){if(trackWhileMountedDeps(),!get$3(openOption)){hasWhileMountedPosition= +!1;return}if(!get$3(isPositioned)){hasWhileMountedPosition=!1;return}if(!hasWhileMountedPosition){hasWhileMountedPosition=!0;return}update2()}}),user_effect(reset2),user_effect(()=>cleanup),{floating,reference,get strategy(){return get$3(strategy)},get placement(){return get$3(placement)},get middlewareData(){return get$3(middlewareData)},get isPositioned(){return get$3(isPositioned)},get floatingStyles(){return get$3(floatingStyles)},get update(){return update2}}}function isReferenceHidden(node2){ +return node2 instanceof Element?!node2.isConnected||node2 instanceof HTMLElement&&node2.hidden?!0:node2.getClientRects().length===0:!1}const OPPOSITE_SIDE={top:"bottom",right:"left",bottom:"top",left:"right"},FloatingRootContext=new Context$1("Floating.Root"),FloatingContentContext=new Context$1("Floating.Content"),FloatingTooltipRootContext=new Context$1("Floating.Root");class FloatingRootState{static create(tooltip=!1){return tooltip?FloatingTooltipRootContext.set(new FloatingRootState):FloatingRootContext. +set(new FloatingRootState)}anchorNode=simpleBox(null);customAnchorNode=simpleBox(null);triggerNode=simpleBox(null);constructor(){user_effect(()=>{this.customAnchorNode.current?typeof this.customAnchorNode.current=="string"?this.anchorNode.current=document.querySelector(this.customAnchorNode.current):this.anchorNode.current=this.customAnchorNode.current:this.anchorNode.current=this.triggerNode.current})}}class FloatingContentState{static create(opts,tooltip=!1){return tooltip?FloatingContentContext. +set(new FloatingContentState(opts,FloatingTooltipRootContext.get())):FloatingContentContext.set(new FloatingContentState(opts,FloatingRootContext.get()))}opts;root;contentRef=simpleBox(null);wrapperRef=simpleBox(null);arrowRef=simpleBox(null);contentAttachment=attachRef(this.contentRef);wrapperAttachment=attachRef(this.wrapperRef);arrowAttachment=attachRef(this.arrowRef);arrowId=simpleBox(useId());#transformedStyle=user_derived(()=>{if(typeof this.opts.style=="string")return cssToStyleObj(this.opts. +style);if(!this.opts.style)return{}});#updatePositionStrategy=void 0;#arrowSize=new ElementSize(()=>this.arrowRef.current??void 0);#arrowWidth=user_derived(()=>this.#arrowSize?.width??0);#arrowHeight=user_derived(()=>this.#arrowSize?.height??0);#desiredPlacement=user_derived(()=>this.opts.side?.current+(this.opts.align.current!=="center"?`-${this.opts.align.current}`:""));#boundary=user_derived(()=>Array.isArray(this.opts.collisionBoundary.current)?this.opts.collisionBoundary.current:[this.opts. +collisionBoundary.current]);#hasExplicitBoundaries=user_derived(()=>get$3(this.#boundary).length>0);get hasExplicitBoundaries(){return get$3(this.#hasExplicitBoundaries)}set hasExplicitBoundaries(value){set$1(this.#hasExplicitBoundaries,value)}#detectOverflowOptions=user_derived(()=>({padding:this.opts.collisionPadding.current,boundary:get$3(this.#boundary).filter(isNotNull),altBoundary:this.hasExplicitBoundaries}));get detectOverflowOptions(){return get$3(this.#detectOverflowOptions)}set detectOverflowOptions(value){ +set$1(this.#detectOverflowOptions,value)}#availableWidth=state$1(void 0);#availableHeight=state$1(void 0);#anchorWidth=state$1(void 0);#anchorHeight=state$1(void 0);#middleware=user_derived(()=>[offset({mainAxis:this.opts.sideOffset.current+get$3(this.#arrowHeight),alignmentAxis:this.opts.alignOffset.current}),this.opts.avoidCollisions.current&&shift({mainAxis:!0,crossAxis:!1,limiter:this.opts.sticky.current==="partial"?limitShift():void 0,...this.detectOverflowOptions}),this.opts.avoidCollisions. +current&&flip({...this.detectOverflowOptions}),size({...this.detectOverflowOptions,apply:({rects,availableWidth,availableHeight})=>{const{width:anchorWidth,height:anchorHeight}=rects.reference;set$1(this.#availableWidth,availableWidth,!0),set$1(this.#availableHeight,availableHeight,!0),set$1(this.#anchorWidth,anchorWidth,!0),set$1(this.#anchorHeight,anchorHeight,!0)}}),this.arrowRef.current&&arrow({element:this.arrowRef.current,padding:this.opts.arrowPadding.current}),transformOrigin({arrowWidth:get$3( +this.#arrowWidth),arrowHeight:get$3(this.#arrowHeight)}),this.opts.hideWhenDetached.current&&hide({strategy:"referenceHidden",...this.detectOverflowOptions})].filter(Boolean));get middleware(){return get$3(this.#middleware)}set middleware(value){set$1(this.#middleware,value)}floating;#placedSide=user_derived(()=>getSideFromPlacement(this.floating.placement));get placedSide(){return get$3(this.#placedSide)}set placedSide(value){set$1(this.#placedSide,value)}#placedAlign=user_derived(()=>getAlignFromPlacement( +this.floating.placement));get placedAlign(){return get$3(this.#placedAlign)}set placedAlign(value){set$1(this.#placedAlign,value)}#arrowX=user_derived(()=>this.floating.middlewareData.arrow?.x??0);get arrowX(){return get$3(this.#arrowX)}set arrowX(value){set$1(this.#arrowX,value)}#arrowY=user_derived(()=>this.floating.middlewareData.arrow?.y??0);get arrowY(){return get$3(this.#arrowY)}set arrowY(value){set$1(this.#arrowY,value)}#cannotCenterArrow=user_derived(()=>this.floating.middlewareData.arrow?. +centerOffset!==0);get cannotCenterArrow(){return get$3(this.#cannotCenterArrow)}set cannotCenterArrow(value){set$1(this.#cannotCenterArrow,value)}#contentZIndex=state$1();get contentZIndex(){return get$3(this.#contentZIndex)}set contentZIndex(value){set$1(this.#contentZIndex,value,!0)}#arrowBaseSide=user_derived(()=>OPPOSITE_SIDE[this.placedSide]);get arrowBaseSide(){return get$3(this.#arrowBaseSide)}set arrowBaseSide(value){set$1(this.#arrowBaseSide,value)}#wrapperProps=user_derived(()=>({id:this. +opts.wrapperId.current,"data-bits-floating-content-wrapper":"",style:{...this.floating.floatingStyles,transform:this.floating.isPositioned?this.floating.floatingStyles.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:this.contentZIndex,"--bits-floating-transform-origin":`${this.floating.middlewareData.transformOrigin?.x} ${this.floating.middlewareData.transformOrigin?.y}`,"--bits-floating-available-width":`${get$3(this.#availableWidth)}px`,"--bits-floating-available-height":`${get$3( +this.#availableHeight)}px`,"--bits-floating-anchor-width":`${get$3(this.#anchorWidth)}px`,"--bits-floating-anchor-height":`${get$3(this.#anchorHeight)}px`,...this.floating.middlewareData.hide?.referenceHidden&&{visibility:"hidden","pointer-events":"none"},...get$3(this.#transformedStyle)},dir:this.opts.dir.current,...this.wrapperAttachment}));get wrapperProps(){return get$3(this.#wrapperProps)}set wrapperProps(value){set$1(this.#wrapperProps,value)}#props=user_derived(()=>({"data-side":this.placedSide, +"data-align":this.placedAlign,style:styleToString$1({...get$3(this.#transformedStyle)}),...this.contentAttachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}#arrowStyle=user_derived(()=>({position:"absolute",left:this.arrowX?`${this.arrowX}px`:void 0,top:this.arrowY?`${this.arrowY}px`:void 0,[this.arrowBaseSide]:0,"transform-origin":{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[this.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%\ +) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[this.placedSide],visibility:this.cannotCenterArrow?"hidden":void 0}));get arrowStyle(){return get$3(this.#arrowStyle)}set arrowStyle(value){set$1(this.#arrowStyle,value)}constructor(opts,root2){this.opts=opts,this.root=root2,this.#updatePositionStrategy=opts.updatePositionStrategy,opts.customAnchor&&(this.root.customAnchorNode.current=opts.customAnchor.current),watch$1(()=>opts.customAnchor. +current,customAnchor=>{this.root.customAnchorNode.current=customAnchor}),this.floating=useFloating({strategy:()=>this.opts.strategy.current,placement:()=>get$3(this.#desiredPlacement),middleware:()=>this.middleware,reference:this.root.anchorNode,whileElementsMounted:(...args)=>autoUpdate(...args,{animationFrame:this.#updatePositionStrategy?.current==="always"}),open:()=>this.opts.enabled.current,sideOffset:()=>this.opts.sideOffset.current,alignOffset:()=>this.opts.alignOffset.current}),user_effect( +()=>{this.floating.isPositioned&&this.opts.onPlaced?.current()}),watch$1(()=>this.contentRef.current,contentNode=>{if(!contentNode||!this.opts.enabled.current)return;const win=getWindow$1(contentNode),rafId=win.requestAnimationFrame(()=>{if(this.contentRef.current!==contentNode||!this.opts.enabled.current)return;const zIndex=win.getComputedStyle(contentNode).zIndex;zIndex!==this.contentZIndex&&(this.contentZIndex=zIndex)});return()=>{win.cancelAnimationFrame(rafId)}}),user_effect(()=>{this.floating. +floating.current=this.wrapperRef.current})}}class FloatingArrowState{static create(opts){return new FloatingArrowState(opts,FloatingContentContext.get())}opts;content;constructor(opts,content2){this.opts=opts,this.content=content2}#props=user_derived(()=>({id:this.opts.id.current,style:this.content.arrowStyle,"data-side":this.content.placedSide,...this.content.arrowAttachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class FloatingAnchorState{static create(opts,tooltip=!1){ +return tooltip?new FloatingAnchorState(opts,FloatingTooltipRootContext.get()):new FloatingAnchorState(opts,FloatingRootContext.get())}opts;root;constructor(opts,root2){this.opts=opts,this.root=root2,opts.virtualEl&&opts.virtualEl.current?root2.triggerNode=boxFrom$1(opts.virtualEl.current):root2.triggerNode=opts.ref}}function transformOrigin(options){return{name:"transformOrigin",options,fn(data){const{placement,rects,middlewareData}=data,isArrowHidden=middlewareData.arrow?.centerOffset!==0,arrowWidth=isArrowHidden? +0:options.arrowWidth,arrowHeight=isArrowHidden?0:options.arrowHeight,[placedSide,placedAlign]=getSideAndAlignFromPlacement(placement),noArrowAlign={start:"0%",center:"50%",end:"100%"}[placedAlign],arrowXCenter=(middlewareData.arrow?.x??0)+arrowWidth/2,arrowYCenter=(middlewareData.arrow?.y??0)+arrowHeight/2;let x="",y="";return placedSide==="bottom"?(x=isArrowHidden?noArrowAlign:`${arrowXCenter}px`,y=`${-arrowHeight}px`):placedSide==="top"?(x=isArrowHidden?noArrowAlign:`${arrowXCenter}px`,y=`${rects. +floating.height+arrowHeight}px`):placedSide==="right"?(x=`${-arrowHeight}px`,y=isArrowHidden?noArrowAlign:`${arrowYCenter}px`):placedSide==="left"&&(x=`${rects.floating.width+arrowHeight}px`,y=isArrowHidden?noArrowAlign:`${arrowYCenter}px`),{data:{x,y}}}}}function getSideAndAlignFromPlacement(placement){const[side,align="center"]=placement.split("-");return[side,align]}function getSideFromPlacement(placement){return getSideAndAlignFromPlacement(placement)[0]}function getAlignFromPlacement(placement){ +return getSideAndAlignFromPlacement(placement)[1]}function Floating_layer($$anchor,$$props){push$1($$props,!0);let tooltip=prop($$props,"tooltip",3,!1);FloatingRootState.create(tooltip());var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}class DataTypeahead{#opts;#candidateValues=user_derived(()=>this.#opts.candidateValues());#search;constructor(opts){this.#opts=opts,this.#search=boxAutoReset("",{afterMs:1e3,getWindow:this.#opts. +getWindow}),this.handleTypeaheadSearch=this.handleTypeaheadSearch.bind(this),this.resetTypeahead=this.resetTypeahead.bind(this)}handleTypeaheadSearch(key2){if(!this.#opts.enabled()||!get$3(this.#candidateValues).length)return;this.#search.current=this.#search.current+key2;const currentItem=this.#opts.getCurrentItem(),currentMatch=get$3(this.#candidateValues).find(item=>item===currentItem)??"",values=get$3(this.#candidateValues).map(item=>item??""),nextMatch=getNextMatch(values,this.#search.current, +currentMatch),newItem=get$3(this.#candidateValues).find(item=>item===nextMatch);return newItem&&this.#opts.onMatch(newItem),newItem}resetTypeahead(){this.#search.current=""}}const FIRST_KEYS=[ARROW_DOWN,PAGE_UP,HOME],LAST_KEYS=[ARROW_UP,PAGE_DOWN,END],FIRST_LAST_KEYS=[...FIRST_KEYS,...LAST_KEYS],selectAttrs=createBitsAttrs({component:"select",parts:["trigger","content","item","viewport","scroll-up-button","scroll-down-button","group","group-label","separator","arrow","input","content-wrapper","i\ +tem-text","value"]}),SelectRootContext=new Context$1("Select.Root | Combobox.Root"),SelectContentContext=new Context$1("Select.Content | Combobox.Content");class SelectBaseRootState{opts;#touchedInput=state$1(!1);get touchedInput(){return get$3(this.#touchedInput)}set touchedInput(value){set$1(this.#touchedInput,value,!0)}#inputNode=state$1(null);get inputNode(){return get$3(this.#inputNode)}set inputNode(value){set$1(this.#inputNode,value,!0)}#contentNode=state$1(null);get contentNode(){return get$3( +this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}contentPresence;#viewportNode=state$1(null);get viewportNode(){return get$3(this.#viewportNode)}set viewportNode(value){set$1(this.#viewportNode,value,!0)}#triggerNode=state$1(null);get triggerNode(){return get$3(this.#triggerNode)}set triggerNode(value){set$1(this.#triggerNode,value,!0)}#valueId=state$1("");get valueId(){return get$3(this.#valueId)}set valueId(value){set$1(this.#valueId,value,!0)}#highlightedNode=state$1( +null);get highlightedNode(){return get$3(this.#highlightedNode)}set highlightedNode(value){set$1(this.#highlightedNode,value,!0)}#highlightedValue=user_derived(()=>this.highlightedNode?this.highlightedNode.getAttribute("data-value"):null);get highlightedValue(){return get$3(this.#highlightedValue)}set highlightedValue(value){set$1(this.#highlightedValue,value)}#highlightedId=user_derived(()=>{if(this.highlightedNode)return this.highlightedNode.id});get highlightedId(){return get$3(this.#highlightedId)}set highlightedId(value){ +set$1(this.#highlightedId,value)}#highlightedLabel=user_derived(()=>this.highlightedNode?this.highlightedNode.getAttribute("data-label"):null);get highlightedLabel(){return get$3(this.#highlightedLabel)}set highlightedLabel(value){set$1(this.#highlightedLabel,value)}#contentIsPositioned=state$1(!1);get contentIsPositioned(){return get$3(this.#contentIsPositioned)}set contentIsPositioned(value){set$1(this.#contentIsPositioned,value,!0)}isUsingKeyboard=!1;isCombobox=!1;domContext=new DOMContext(()=>null);constructor(opts){ +this.opts=opts,this.isCombobox=opts.isCombobox,this.contentPresence=new PresenceManager({ref:boxWith$1(()=>this.contentNode),open:this.opts.open,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),user_pre_effect(()=>{this.opts.open.current||this.setHighlightedNode(null)})}setHighlightedNode(node2,initial=!1){this.highlightedNode=node2,node2&&(this.isUsingKeyboard||initial)&&this.scrollHighlightedNodeIntoView(node2)}scrollHighlightedNodeIntoView(node2){!this.viewportNode|| +!this.contentIsPositioned||node2.scrollIntoView({block:this.opts.scrollAlignment.current})}getCandidateNodes(){const node2=this.contentNode;return node2?Array.from(node2.querySelectorAll(`[${this.getBitsAttr("item")}]:not([data-disabled])`)):[]}setHighlightedToFirstCandidate(initial=!1){this.setHighlightedNode(null);let nodes2=this.getCandidateNodes();if(nodes2.length){if(this.viewportNode){const viewportRect=this.viewportNode.getBoundingClientRect();nodes2=nodes2.filter(node2=>{if(!this.viewportNode) +return!1;const nodeRect=node2.getBoundingClientRect();return nodeRect.right<=viewportRect.right&&nodeRect.left>=viewportRect.left&&nodeRect.bottom<=viewportRect.bottom&&nodeRect.top>=viewportRect.top})}this.setHighlightedNode(nodes2[0],initial)}}getNodeByValue(value){return this.getCandidateNodes().find(node2=>node2.dataset.value===value)??null}setOpen(open2){this.opts.open.current=open2}toggleOpen(){this.opts.open.current=!this.opts.open.current}handleOpen(){this.setOpen(!0)}handleClose(){this. +setHighlightedNode(null),this.setOpen(!1)}toggleMenu(){this.toggleOpen()}getBitsAttr=part=>selectAttrs.getAttr(part,this.isCombobox?"combobox":void 0)}class SelectSingleRootState extends SelectBaseRootState{opts;isMulti=!1;#hasValue=user_derived(()=>this.opts.value.current!=="");get hasValue(){return get$3(this.#hasValue)}set hasValue(value){set$1(this.#hasValue,value)}#currentLabel=user_derived(()=>this.opts.items.current.length?this.opts.items.current.find(item=>item.value===this.opts.value.current)?. +label??"":"");get currentLabel(){return get$3(this.#currentLabel)}set currentLabel(value){set$1(this.#currentLabel,value)}#candidateLabels=user_derived(()=>this.opts.items.current.length?this.opts.items.current.filter(item=>!item.disabled).map(item=>item.label):[]);get candidateLabels(){return get$3(this.#candidateLabels)}set candidateLabels(value){set$1(this.#candidateLabels,value)}#dataTypeaheadEnabled=user_derived(()=>!(this.isMulti||this.opts.items.current.length===0));get dataTypeaheadEnabled(){ +return get$3(this.#dataTypeaheadEnabled)}set dataTypeaheadEnabled(value){set$1(this.#dataTypeaheadEnabled,value)}constructor(opts){super(opts),this.opts=opts,user_effect(()=>{!this.opts.open.current&&this.highlightedNode&&this.setHighlightedNode(null)}),watch$1(()=>this.opts.open.current,()=>{this.opts.open.current&&this.setInitialHighlightedNode()})}includesItem(itemValue){return this.opts.value.current===itemValue}toggleItem(itemValue,itemLabel=itemValue){const newValue=this.includesItem(itemValue)? +"":itemValue;this.opts.value.current=newValue,newValue!==""&&(this.opts.inputValue.current=itemLabel)}setInitialHighlightedNode(){afterTick(()=>{if(!(this.highlightedNode&&this.domContext.getDocument().contains(this.highlightedNode))){if(this.opts.value.current!==""){const node2=this.getNodeByValue(this.opts.value.current);if(node2){this.setHighlightedNode(node2,!0);return}}this.setHighlightedToFirstCandidate(!0)}})}}class SelectMultipleRootState extends SelectBaseRootState{opts;isMulti=!0;#hasValue=user_derived( +()=>this.opts.value.current.length>0);get hasValue(){return get$3(this.#hasValue)}set hasValue(value){set$1(this.#hasValue,value)}constructor(opts){super(opts),this.opts=opts,user_effect(()=>{!this.opts.open.current&&this.highlightedNode&&this.setHighlightedNode(null)}),watch$1(()=>this.opts.open.current,()=>{this.opts.open.current&&this.setInitialHighlightedNode()})}includesItem(itemValue){return this.opts.value.current.includes(itemValue)}toggleItem(itemValue,itemLabel=itemValue){this.includesItem( +itemValue)?this.opts.value.current=this.opts.value.current.filter(v=>v!==itemValue):this.opts.value.current=[...this.opts.value.current,itemValue],this.opts.inputValue.current=itemLabel}setInitialHighlightedNode(){afterTick(()=>{if(this.domContext&&!(this.highlightedNode&&this.domContext.getDocument().contains(this.highlightedNode))){if(this.opts.value.current.length&&this.opts.value.current[0]!==""){const node2=this.getNodeByValue(this.opts.value.current[0]);if(node2){this.setHighlightedNode(node2, +!0);return}}this.setHighlightedToFirstCandidate(!0)}})}}class SelectRootState{static create(props){const{type:type2,...rest}=props,rootState=type2==="single"?new SelectSingleRootState(rest):new SelectMultipleRootState(rest);return SelectRootContext.set(rootState)}}class SelectTriggerState{static create(opts){return new SelectTriggerState(opts,SelectRootContext.get())}opts;root;attachment;#domTypeahead;#dataTypeahead;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef( +opts.ref,v=>this.root.triggerNode=v),this.root.domContext=new DOMContext(opts.ref),this.#domTypeahead=new DOMTypeahead({getCurrentItem:()=>this.root.highlightedNode,onMatch:node2=>{this.root.setHighlightedNode(node2)},getActiveElement:()=>this.root.domContext.getActiveElement(),getWindow:()=>this.root.domContext.getWindow()}),this.#dataTypeahead=new DataTypeahead({getCurrentItem:()=>this.root.isMulti?"":this.root.currentLabel,onMatch:label=>{if(this.root.isMulti||!this.root.opts.items.current)return; +const matchedItem=this.root.opts.items.current.find(item=>item.label===label);matchedItem&&(this.root.opts.value.current=matchedItem.value)},enabled:()=>!this.root.isMulti&&this.root.dataTypeaheadEnabled,candidateValues:()=>this.root.isMulti?[]:this.root.candidateLabels,getWindow:()=>this.root.domContext.getWindow()}),this.onkeydown=this.onkeydown.bind(this),this.onpointerdown=this.onpointerdown.bind(this),this.onpointerup=this.onpointerup.bind(this),this.onclick=this.onclick.bind(this)}#handleOpen(){ +this.root.opts.open.current=!0,this.#dataTypeahead.resetTypeahead(),this.#domTypeahead.resetTypeahead()}#handlePointerOpen(_){this.#handleOpen()}#handleKeyboardSelection(){const isCurrentSelectedValue=this.root.highlightedValue===this.root.opts.value.current;return!this.root.opts.allowDeselect.current&&isCurrentSelectedValue&&!this.root.isMulti?(this.root.handleClose(),!0):(this.root.highlightedValue!==null&&this.root.toggleItem(this.root.highlightedValue,this.root.highlightedLabel??void 0),!this. +root.isMulti&&!isCurrentSelectedValue?(this.root.handleClose(),!0):!1)}onkeydown(e){if(this.root.isUsingKeyboard=!0,(e.key===ARROW_UP||e.key===ARROW_DOWN)&&e.preventDefault(),!this.root.opts.open.current){if(e.key===ENTER||e.key===SPACE||e.key===ARROW_DOWN||e.key===ARROW_UP)e.preventDefault(),this.root.handleOpen();else if(!this.root.isMulti&&this.root.dataTypeaheadEnabled){this.#dataTypeahead.handleTypeaheadSearch(e.key);return}if(this.root.hasValue)return;const candidateNodes2=this.root.getCandidateNodes(); +if(!candidateNodes2.length)return;if(e.key===ARROW_DOWN){const firstCandidate=candidateNodes2[0];this.root.setHighlightedNode(firstCandidate)}else if(e.key===ARROW_UP){const lastCandidate=candidateNodes2[candidateNodes2.length-1];this.root.setHighlightedNode(lastCandidate)}return}if(e.key===TAB){this.root.handleClose();return}if((e.key===ENTER||e.key===SPACE&&this.#domTypeahead.search==="")&&!e.isComposing&&(e.preventDefault(),this.#handleKeyboardSelection()))return;if(e.key===ARROW_UP&&e.altKey&& +this.root.handleClose(),FIRST_LAST_KEYS.includes(e.key)){e.preventDefault();const candidateNodes2=this.root.getCandidateNodes(),currHighlightedNode=this.root.highlightedNode,currIndex=currHighlightedNode?candidateNodes2.indexOf(currHighlightedNode):-1,loop2=this.root.opts.loop.current;let nextItem;if(e.key===ARROW_DOWN?nextItem=next(candidateNodes2,currIndex,loop2):e.key===ARROW_UP?nextItem=prev(candidateNodes2,currIndex,loop2):e.key===PAGE_DOWN?nextItem=forward(candidateNodes2,currIndex,10,loop2): +e.key===PAGE_UP?nextItem=backward(candidateNodes2,currIndex,10,loop2):e.key===HOME?nextItem=candidateNodes2[0]:e.key===END&&(nextItem=candidateNodes2[candidateNodes2.length-1]),!nextItem)return;this.root.setHighlightedNode(nextItem);return}const isModifierKey=e.ctrlKey||e.altKey||e.metaKey,isCharacterKey=e.key.length===1,isSpaceKey=e.key===SPACE,candidateNodes=this.root.getCandidateNodes();if(e.key!==TAB){if(!isModifierKey&&(isCharacterKey||isSpaceKey)){!this.#domTypeahead.handleTypeaheadSearch( +e.key,candidateNodes)&&isSpaceKey&&(e.preventDefault(),this.#handleKeyboardSelection());return}this.root.highlightedNode||this.root.setHighlightedToFirstCandidate()}}onclick(e){e.currentTarget.focus()}onpointerdown(e){if(this.root.opts.disabled.current)return;if(e.pointerType==="touch")return e.preventDefault();const target2=e.target;target2?.hasPointerCapture(e.pointerId)&&target2?.releasePointerCapture(e.pointerId),e.button===0&&e.ctrlKey===!1&&(this.root.opts.open.current===!1?this.#handlePointerOpen( +e):this.root.handleClose())}onpointerup(e){this.root.opts.disabled.current||(e.preventDefault(),e.pointerType==="touch"&&(this.root.opts.open.current===!1?this.#handlePointerOpen(e):this.root.handleClose()))}#props=user_derived(()=>({id:this.opts.id.current,disabled:this.root.opts.disabled.current?!0:void 0,"aria-haspopup":"listbox","aria-expanded":boolToStr(this.root.opts.open.current),"aria-activedescendant":this.root.highlightedId,"data-state":getDataOpenClosed(this.root.opts.open.current),"d\ +ata-disabled":boolToEmptyStrOrUndef(this.root.opts.disabled.current),"data-placeholder":this.root.hasValue?void 0:"",[this.root.getBitsAttr("trigger")]:"",onpointerdown:this.onpointerdown,onkeydown:this.onkeydown,onclick:this.onclick,onpointerup:this.onpointerup,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class SelectContentState{static create(opts){return SelectContentContext.set(new SelectContentState(opts,SelectRootContext.get()))}opts;root;attachment;#isPositioned=state$1( +!1);get isPositioned(){return get$3(this.#isPositioned)}set isPositioned(value){set$1(this.#isPositioned,value,!0)}domContext;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(opts.ref,v=>this.root.contentNode=v),this.domContext=new DOMContext(this.opts.ref),this.root.domContext===null&&(this.root.domContext=this.domContext),onDestroyEffect(()=>{this.root.contentNode=null,this.root.contentIsPositioned=!1,this.isPositioned=!1}),watch$1(()=>this.root.opts.open.current, +()=>{this.root.opts.open.current||(this.root.contentIsPositioned=!1,this.isPositioned=!1)}),watch$1([()=>this.isPositioned,()=>this.root.highlightedNode],()=>{!this.isPositioned||!this.root.highlightedNode||this.root.scrollHighlightedNodeIntoView(this.root.highlightedNode)}),this.onpointermove=this.onpointermove.bind(this)}onpointermove(_){this.root.isUsingKeyboard=!1}#styles=user_derived(()=>getFloatingContentCSSVars(this.root.isCombobox?"combobox":"select"));onInteractOutside=e=>{if(e.target=== +this.root.triggerNode||e.target===this.root.inputNode){e.preventDefault();return}this.opts.onInteractOutside.current(e),!e.defaultPrevented&&this.root.handleClose()};onEscapeKeydown=e=>{this.opts.onEscapeKeydown.current(e),!e.defaultPrevented&&this.root.handleClose()};onOpenAutoFocus=e=>{e.preventDefault()};onCloseAutoFocus=e=>{e.preventDefault()};get shouldRender(){return this.root.contentPresence.shouldRender}#snippetProps=user_derived(()=>({open:this.root.opts.open.current}));get snippetProps(){ +return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,role:"listbox","aria-multiselectable":this.root.isMulti?"true":void 0,"data-state":getDataOpenClosed(this.root.opts.open.current),...getDataTransitionAttrs(this.root.contentPresence.transitionStatus),[this.root.getBitsAttr("content")]:"",style:{display:"flex",flexDirection:"column",outline:"none",boxSizing:"border-box",pointerEvents:"auto",...get$3(this.#styles)}, +onpointermove:this.onpointermove,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}popperProps={onInteractOutside:this.onInteractOutside,onEscapeKeydown:this.onEscapeKeydown,onOpenAutoFocus:this.onOpenAutoFocus,onCloseAutoFocus:this.onCloseAutoFocus,trapFocus:!1,loop:!1,onPlaced:()=>{this.root.opts.open.current&&(this.root.contentIsPositioned=!0,this.isPositioned=!0)}}}class SelectItemState{static create(opts){return new SelectItemState(opts,SelectRootContext. +get())}opts;root;attachment;#isSelected=user_derived(()=>this.root.includesItem(this.opts.value.current));get isSelected(){return get$3(this.#isSelected)}set isSelected(value){set$1(this.#isSelected,value)}#isHighlighted=user_derived(()=>this.root.highlightedValue===this.opts.value.current);get isHighlighted(){return get$3(this.#isHighlighted)}set isHighlighted(value){set$1(this.#isHighlighted,value)}prevHighlighted=new Previous(()=>this.isHighlighted);#mounted=state$1(!1);get mounted(){return get$3( +this.#mounted)}set mounted(value){set$1(this.#mounted,value,!0)}constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(opts.ref),watch$1([()=>this.isHighlighted,()=>this.prevHighlighted.current],()=>{this.isHighlighted?this.opts.onHighlight.current():this.prevHighlighted.current&&this.opts.onUnhighlight.current()}),watch$1(()=>this.mounted,()=>{this.mounted&&this.root.setInitialHighlightedNode()}),this.onpointerdown=this.onpointerdown.bind(this),this.onpointerup=this.onpointerup. +bind(this),this.onpointermove=this.onpointermove.bind(this)}handleSelect(){if(this.opts.disabled.current)return;const isCurrentSelectedValue=this.opts.value.current===this.root.opts.value.current;if(!this.root.opts.allowDeselect.current&&isCurrentSelectedValue&&!this.root.isMulti){this.root.handleClose();return}this.root.toggleItem(this.opts.value.current,this.opts.label.current),!this.root.isMulti&&!isCurrentSelectedValue&&this.root.handleClose()}#snippetProps=user_derived(()=>({selected:this.isSelected, +highlighted:this.isHighlighted}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}onpointerdown(e){e.preventDefault()}onpointerup(e){if(!(e.defaultPrevented||!this.opts.ref.current)){if(e.pointerType==="touch"&&!isIOS){on(this.opts.ref.current,"click",()=>{this.handleSelect(),this.root.setHighlightedNode(this.opts.ref.current)},{once:!0});return}e.preventDefault(),this.handleSelect(),e.pointerType==="touch"&&this.root.setHighlightedNode( +this.opts.ref.current)}}onpointermove(e){e.pointerType!=="touch"&&this.root.highlightedNode!==this.opts.ref.current&&this.root.setHighlightedNode(this.opts.ref.current)}#props=user_derived(()=>({id:this.opts.id.current,role:"option","aria-selected":this.root.includesItem(this.opts.value.current)?"true":void 0,"data-value":this.opts.value.current,"data-disabled":boolToEmptyStrOrUndef(this.opts.disabled.current),"data-highlighted":this.root.highlightedValue===this.opts.value.current&&!this.opts.disabled. +current?"":void 0,"data-selected":this.root.includesItem(this.opts.value.current)?"":void 0,"data-label":this.opts.label.current,[this.root.getBitsAttr("item")]:"",onpointermove:this.onpointermove,onpointerdown:this.onpointerdown,onpointerup:this.onpointerup,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class SelectHiddenInputState{static create(opts){return new SelectHiddenInputState(opts,SelectRootContext.get())}opts;root;#shouldRender=user_derived( +()=>this.root.opts.name.current!=="");get shouldRender(){return get$3(this.#shouldRender)}set shouldRender(value){set$1(this.#shouldRender,value)}constructor(opts,root2){this.opts=opts,this.root=root2,this.onfocus=this.onfocus.bind(this)}onfocus(e){e.preventDefault(),this.root.isCombobox?this.root.inputNode?.focus():this.root.triggerNode?.focus()}#props=user_derived(()=>({disabled:boolToTrueOrUndef(this.root.opts.disabled.current),required:boolToTrueOrUndef(this.root.opts.required.current),name:this. +root.opts.name.current,value:this.opts.value.current,onfocus:this.onfocus}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class SelectViewportState{static create(opts){return new SelectViewportState(opts,SelectContentContext.get())}opts;content;root;attachment;#prevScrollTop=state$1(0);get prevScrollTop(){return get$3(this.#prevScrollTop)}set prevScrollTop(value){set$1(this.#prevScrollTop,value,!0)}constructor(opts,content2){this.opts=opts,this.content=content2, +this.root=content2.root,this.attachment=attachRef(opts.ref,v=>{this.root.viewportNode=v})}#props=user_derived(()=>({id:this.opts.id.current,role:"presentation",[this.root.getBitsAttr("viewport")]:"",style:{position:"relative",flex:1,overflow:"auto"},...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class SelectScrollButtonImplState{opts;content;root;attachment;autoScrollTimer=null;userScrollTimer=-1;isUserScrolling=!1;onAutoScroll=noop$1;#mounted=state$1( +!1);get mounted(){return get$3(this.#mounted)}set mounted(value){set$1(this.#mounted,value,!0)}constructor(opts,content2){this.opts=opts,this.content=content2,this.root=content2.root,this.attachment=attachRef(opts.ref),watch$1([()=>this.mounted],()=>{if(!this.mounted){this.isUserScrolling=!1;return}this.isUserScrolling}),user_effect(()=>{this.mounted||this.clearAutoScrollInterval()}),this.onpointerdown=this.onpointerdown.bind(this),this.onpointermove=this.onpointermove.bind(this),this.onpointerleave= +this.onpointerleave.bind(this)}handleUserScroll(){this.content.domContext.clearTimeout(this.userScrollTimer),this.isUserScrolling=!0,this.userScrollTimer=this.content.domContext.setTimeout(()=>{this.isUserScrolling=!1},200)}clearAutoScrollInterval(){this.autoScrollTimer!==null&&(this.content.domContext.clearTimeout(this.autoScrollTimer),this.autoScrollTimer=null)}onpointerdown(_){if(this.autoScrollTimer!==null)return;const autoScroll=tick2=>{this.onAutoScroll(),this.autoScrollTimer=this.content. +domContext.setTimeout(()=>autoScroll(tick2+1),this.opts.delay.current(tick2))};this.autoScrollTimer=this.content.domContext.setTimeout(()=>autoScroll(1),this.opts.delay.current(0))}onpointermove(e){this.onpointerdown(e)}onpointerleave(_){this.clearAutoScrollInterval()}#props=user_derived(()=>({id:this.opts.id.current,"aria-hidden":boolToStrTrueOrUndef(!0),style:{flexShrink:0},onpointerdown:this.onpointerdown,onpointermove:this.onpointermove,onpointerleave:this.onpointerleave,...this.attachment}));get props(){ +return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class SelectScrollDownButtonState{static create(opts){return new SelectScrollDownButtonState(new SelectScrollButtonImplState(opts,SelectContentContext.get()))}scrollButtonState;content;root;#canScrollDown=state$1(!1);get canScrollDown(){return get$3(this.#canScrollDown)}set canScrollDown(value){set$1(this.#canScrollDown,value,!0)}scrollIntoViewTimer=null;constructor(scrollButtonState){this.scrollButtonState=scrollButtonState,this. +content=scrollButtonState.content,this.root=scrollButtonState.root,this.scrollButtonState.onAutoScroll=this.handleAutoScroll,watch$1([()=>this.root.viewportNode,()=>this.content.isPositioned],()=>{if(!(!this.root.viewportNode||!this.content.isPositioned))return this.handleScroll(!0),on(this.root.viewportNode,"scroll",()=>this.handleScroll())}),watch$1([()=>this.root.opts.inputValue.current,()=>this.root.viewportNode,()=>this.content.isPositioned],()=>{!this.root.viewportNode||!this.content.isPositioned|| +this.handleScroll(!0)}),watch$1(()=>this.scrollButtonState.mounted,()=>{this.scrollButtonState.mounted&&(this.scrollIntoViewTimer&&clearTimeout(this.scrollIntoViewTimer),this.scrollIntoViewTimer=afterSleep(5,()=>{const activeItem=this.root.highlightedNode;activeItem&&this.root.scrollHighlightedNodeIntoView(activeItem)}))})}handleScroll=(manual=!1)=>{if(manual||this.scrollButtonState.handleUserScroll(),!this.root.viewportNode)return;const maxScroll=this.root.viewportNode.scrollHeight-this.root.viewportNode. +clientHeight,paddingTop=Number.parseInt(getComputedStyle(this.root.viewportNode).paddingTop,10);this.canScrollDown=Math.ceil(this.root.viewportNode.scrollTop)<maxScroll-paddingTop};handleAutoScroll=()=>{const viewport=this.root.viewportNode,selectedItem=this.root.highlightedNode;!viewport||!selectedItem||(viewport.scrollTop=viewport.scrollTop+selectedItem.offsetHeight)};#props=user_derived(()=>({...this.scrollButtonState.props,[this.root.getBitsAttr("scroll-down-button")]:""}));get props(){return get$3( +this.#props)}set props(value){set$1(this.#props,value)}}class SelectScrollUpButtonState{static create(opts){return new SelectScrollUpButtonState(new SelectScrollButtonImplState(opts,SelectContentContext.get()))}scrollButtonState;content;root;#canScrollUp=state$1(!1);get canScrollUp(){return get$3(this.#canScrollUp)}set canScrollUp(value){set$1(this.#canScrollUp,value,!0)}constructor(scrollButtonState){this.scrollButtonState=scrollButtonState,this.content=scrollButtonState.content,this.root=scrollButtonState. +root,this.scrollButtonState.onAutoScroll=this.handleAutoScroll,watch$1([()=>this.root.viewportNode,()=>this.content.isPositioned],()=>{if(!(!this.root.viewportNode||!this.content.isPositioned))return this.handleScroll(!0),on(this.root.viewportNode,"scroll",()=>this.handleScroll())})}handleScroll=(manual=!1)=>{if(manual||this.scrollButtonState.handleUserScroll(),!this.root.viewportNode)return;const paddingTop=Number.parseInt(getComputedStyle(this.root.viewportNode).paddingTop,10);this.canScrollUp= +this.root.viewportNode.scrollTop-paddingTop>.1};handleAutoScroll=()=>{!this.root.viewportNode||!this.root.highlightedNode||(this.root.viewportNode.scrollTop=this.root.viewportNode.scrollTop-this.root.highlightedNode.offsetHeight)};#props=user_derived(()=>({...this.scrollButtonState.props,[this.root.getBitsAttr("scroll-up-button")]:""}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}function Select_hidden_input($$anchor,$$props){push$1($$props,!0);let value=prop( +$$props,"value",15);const hiddenInputState=SelectHiddenInputState.create({value:boxWith$1(()=>value())});var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Hidden_input($$anchor2,spread_props(()=>hiddenInputState.props,{get autocomplete(){return $$props.autocomplete},get value(){return value()},set value($$value){value($$value)}}))};if_block(node2,$$render=>{hiddenInputState.shouldRender&&$$render(consequent)})}append($$anchor,fragment),pop()}function Floating_layer_anchor($$anchor,$$props){ +push$1($$props,!0);let tooltip=prop($$props,"tooltip",3,!1);FloatingAnchorState.create({id:boxWith$1(()=>$$props.id),virtualEl:boxWith$1(()=>$$props.virtualEl),ref:$$props.ref},tooltip());var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}var root_4$H=from_svg('<svg viewBox="0 0 30 10" preserveAspectRatio="none" data-arrow=""><polygon points="0,0 30,0 15,10" fill="currentColor"></polygon></svg>'),root_2$1v=from_html("<\ +span><!></span>");function Arrow($$anchor,$$props){push$1($$props,!0);let id2=prop($$props,"id",19,useId),width=prop($$props,"width",3,10),height=prop($$props,"height",3,5),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","children","child","width","height"]);const mergedProps=user_derived(()=>mergeProps(restProps,{id:id2()}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1, +()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate_1=$$anchor2=>{var span=root_2$1v();attribute_effect(span,()=>({...get$3(mergedProps)}));var node_2=child(span);{var consequent_1=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children??noop$3),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var svg2=root_4$H();template_effect(()=>{set_attribute(svg2,"width",width()),set_attribute(svg2,"height",height())}), +append($$anchor3,svg2)};if_block(node_2,$$render=>{$$props.children?$$render(consequent_1):$$render(alternate,-1)})}reset(span),append($$anchor2,span)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate_1,-1)})}append($$anchor,fragment),pop()}function Floating_layer_arrow($$anchor,$$props){push$1($$props,!0);let id2=prop($$props,"id",19,useId),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref"]);const arrowState=FloatingArrowState. +create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,arrowState.props));Arrow($$anchor,spread_props(()=>get$3(mergedProps))),pop()}function Floating_layer_content($$anchor,$$props){push$1($$props,!0);let side=prop($$props,"side",3,"bottom"),sideOffset=prop($$props,"sideOffset",3,0),align=prop($$props,"align",3,"center"),alignOffset=prop($$props,"alignOffset",3,0),arrowPadding=prop($$props,"arrowPadding",3,0),avoidCollisions=prop( +$$props,"avoidCollisions",3,!0),collisionBoundary=prop($$props,"collisionBoundary",19,()=>[]),collisionPadding=prop($$props,"collisionPadding",3,0),hideWhenDetached=prop($$props,"hideWhenDetached",3,!1),onPlaced=prop($$props,"onPlaced",3,()=>{}),sticky=prop($$props,"sticky",3,"partial"),updatePositionStrategy=prop($$props,"updatePositionStrategy",3,"optimized"),strategy=prop($$props,"strategy",3,"fixed"),dir=prop($$props,"dir",3,"ltr"),style2=prop($$props,"style",19,()=>({})),wrapperId=prop($$props, +"wrapperId",19,useId),customAnchor=prop($$props,"customAnchor",3,null),tooltip=prop($$props,"tooltip",3,!1);const contentState=FloatingContentState.create({side:boxWith$1(()=>side()),sideOffset:boxWith$1(()=>sideOffset()),align:boxWith$1(()=>align()),alignOffset:boxWith$1(()=>alignOffset()),id:boxWith$1(()=>$$props.id),arrowPadding:boxWith$1(()=>arrowPadding()),avoidCollisions:boxWith$1(()=>avoidCollisions()),collisionBoundary:boxWith$1(()=>collisionBoundary()),collisionPadding:boxWith$1(()=>collisionPadding()), +hideWhenDetached:boxWith$1(()=>hideWhenDetached()),onPlaced:boxWith$1(()=>onPlaced()),sticky:boxWith$1(()=>sticky()),updatePositionStrategy:boxWith$1(()=>updatePositionStrategy()),strategy:boxWith$1(()=>strategy()),dir:boxWith$1(()=>dir()),style:boxWith$1(()=>style2()),enabled:boxWith$1(()=>$$props.enabled),wrapperId:boxWith$1(()=>wrapperId()),customAnchor:boxWith$1(()=>customAnchor())},tooltip()),mergedProps=user_derived(()=>mergeProps(contentState.wrapperProps,{style:{pointerEvents:"auto"}})); +var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.content??noop$3,()=>({props:contentState.props,wrapperProps:get$3(mergedProps)})),append($$anchor,fragment),pop()}function Floating_layer_content_static($$anchor,$$props){push$1($$props,!0),onMount$1(()=>{$$props.onPlaced?.()});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.content??noop$3,()=>({props:{},wrapperProps:{}})),append($$anchor,fragment),pop()}function Popper_content($$anchor,$$props){ +let isStatic=prop($$props,"isStatic",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","content","isStatic","onPlaced"]);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Floating_layer_content_static($$anchor2,{get content(){return $$props.content},get onPlaced(){return $$props.onPlaced}})},alternate=$$anchor2=>{Floating_layer_content($$anchor2,spread_props({get content(){return $$props.content},get onPlaced(){return $$props.onPlaced}},()=>restProps))}; +if_block(node2,$$render=>{isStatic()?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment)}var root_1$15=from_html("<!> <!>",1);function Popper_layer_inner($$anchor,$$props){push$1($$props,!0);let interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"close"),trapFocus=prop($$props,"trapFocus",3,!0),isValidEvent2=prop($$props,"isValidEvent",3,()=>!1),customAnchor=prop($$props,"customAnchor",3,null),isStatic=prop($$props,"isStatic",3,!1),tooltip=prop($$props,"tooltip", +3,!1),contentPointerEvents=prop($$props,"contentPointerEvents",3,"auto"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","popper","onEscapeKeydown","escapeKeydownBehavior","preventOverflowTextSelection","id","onPointerDown","onPointerUp","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","sticky","hideWhenDetached","updatePositionStrategy","strategy","dir","preventScroll","wrapperId","style","onPlaced","onInteractOutsid\ +e","onCloseAutoFocus","onOpenAutoFocus","onFocusOutside","interactOutsideBehavior","loop","trapFocus","isValidEvent","customAnchor","isStatic","enabled","ref","tooltip","contentPointerEvents"]);const resolvedPreventScroll=user_derived(()=>$$props.preventScroll??!0),effectiveStrategy=user_derived(()=>$$props.strategy??(get$3(resolvedPreventScroll)?"fixed":"absolute"));Popper_content($$anchor,{get isStatic(){return isStatic()},get id(){return $$props.id},get side(){return $$props.side},get sideOffset(){ +return $$props.sideOffset},get align(){return $$props.align},get alignOffset(){return $$props.alignOffset},get arrowPadding(){return $$props.arrowPadding},get avoidCollisions(){return $$props.avoidCollisions},get collisionBoundary(){return $$props.collisionBoundary},get collisionPadding(){return $$props.collisionPadding},get sticky(){return $$props.sticky},get hideWhenDetached(){return $$props.hideWhenDetached},get updatePositionStrategy(){return $$props.updatePositionStrategy},get strategy(){return get$3( +effectiveStrategy)},get dir(){return $$props.dir},get wrapperId(){return $$props.wrapperId},get style(){return $$props.style},get onPlaced(){return $$props.onPlaced},get customAnchor(){return customAnchor()},get enabled(){return $$props.enabled},get tooltip(){return tooltip()},content:($$anchor2,$$arg0)=>{let floatingProps=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;var fragment_1=root_1$15(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{Scroll_lock($$anchor3,{get preventScroll(){ +return get$3(resolvedPreventScroll)}})},consequent_1=$$anchor3=>{Scroll_lock($$anchor3,{get preventScroll(){return get$3(resolvedPreventScroll)}})};if_block(node2,$$render=>{$$props.forceMount&&$$props.enabled?$$render(consequent):$$props.forceMount||$$render(consequent_1,1)})}var node_1=sibling(node2,2);Focus_scope(node_1,{get onOpenAutoFocus(){return $$props.onOpenAutoFocus},get onCloseAutoFocus(){return $$props.onCloseAutoFocus},get loop(){return $$props.loop},get enabled(){return $$props.enabled}, +get trapFocus(){return trapFocus()},get forceMount(){return $$props.forceMount},get ref(){return $$props.ref},focusScope:($$anchor3,$$arg02)=>{let focusScopeProps=()=>$$arg02?.().props;Escape_layer($$anchor3,{get onEscapeKeydown(){return $$props.onEscapeKeydown},get escapeKeydownBehavior(){return $$props.escapeKeydownBehavior},get enabled(){return $$props.enabled},get ref(){return $$props.ref},children:($$anchor4,$$slotProps)=>{Dismissible_layer($$anchor4,{get id(){return $$props.id},get onInteractOutside(){ +return $$props.onInteractOutside},get onFocusOutside(){return $$props.onFocusOutside},get interactOutsideBehavior(){return interactOutsideBehavior()},get isValidEvent(){return isValidEvent2()},get enabled(){return $$props.enabled},get ref(){return $$props.ref},children:($$anchor5,$$arg03)=>{let dismissibleProps=()=>$$arg03?.().props;Text_selection_layer($$anchor5,{get id(){return $$props.id},get preventOverflowTextSelection(){return $$props.preventOverflowTextSelection},get onPointerDown(){return $$props. +onPointerDown},get onPointerUp(){return $$props.onPointerUp},get enabled(){return $$props.enabled},get ref(){return $$props.ref},children:($$anchor6,$$slotProps2)=>{var fragment_7=comment$2(),node_2=first_child(fragment_7);{let $0=user_derived(()=>({props:mergeProps(restProps,floatingProps(),dismissibleProps(),focusScopeProps(),{style:{pointerEvents:contentPointerEvents()}}),wrapperProps:wrapperProps()}));snippet(node_2,()=>$$props.popper??noop$3,()=>get$3($0))}append($$anchor6,fragment_7)},$$slots:{ +default:!0}})},$$slots:{default:!0}})},$$slots:{default:!0}})},$$slots:{focusScope:!0}}),append($$anchor2,fragment_1)},$$slots:{content:!0}}),pop()}function Popper_layer($$anchor,$$props){let interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"close"),trapFocus=prop($$props,"trapFocus",3,!0),isValidEvent2=prop($$props,"isValidEvent",3,()=>!1),customAnchor=prop($$props,"customAnchor",3,null),isStatic=prop($$props,"isStatic",3,!1),restProps=rest_props($$props,["$$slots","$$events","$\ +$legacy","popper","open","onEscapeKeydown","escapeKeydownBehavior","preventOverflowTextSelection","id","onPointerDown","onPointerUp","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","sticky","hideWhenDetached","updatePositionStrategy","strategy","dir","preventScroll","wrapperId","style","onPlaced","onInteractOutside","onCloseAutoFocus","onOpenAutoFocus","onFocusOutside","interactOutsideBehavior","loop","trapFocus","isValidEvent","c\ +ustomAnchor","isStatic","ref","shouldRender"]);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Popper_layer_inner($$anchor2,spread_props({get popper(){return $$props.popper},get onEscapeKeydown(){return $$props.onEscapeKeydown},get escapeKeydownBehavior(){return $$props.escapeKeydownBehavior},get preventOverflowTextSelection(){return $$props.preventOverflowTextSelection},get id(){return $$props.id},get onPointerDown(){return $$props.onPointerDown},get onPointerUp(){ +return $$props.onPointerUp},get side(){return $$props.side},get sideOffset(){return $$props.sideOffset},get align(){return $$props.align},get alignOffset(){return $$props.alignOffset},get arrowPadding(){return $$props.arrowPadding},get avoidCollisions(){return $$props.avoidCollisions},get collisionBoundary(){return $$props.collisionBoundary},get collisionPadding(){return $$props.collisionPadding},get sticky(){return $$props.sticky},get hideWhenDetached(){return $$props.hideWhenDetached},get updatePositionStrategy(){ +return $$props.updatePositionStrategy},get strategy(){return $$props.strategy},get dir(){return $$props.dir},get preventScroll(){return $$props.preventScroll},get wrapperId(){return $$props.wrapperId},get style(){return $$props.style},get onPlaced(){return $$props.onPlaced},get customAnchor(){return customAnchor()},get isStatic(){return isStatic()},get enabled(){return $$props.open},get onInteractOutside(){return $$props.onInteractOutside},get onCloseAutoFocus(){return $$props.onCloseAutoFocus}, +get onOpenAutoFocus(){return $$props.onOpenAutoFocus},get interactOutsideBehavior(){return interactOutsideBehavior()},get loop(){return $$props.loop},get trapFocus(){return trapFocus()},get isValidEvent(){return isValidEvent2()},get onFocusOutside(){return $$props.onFocusOutside},forceMount:!1,get ref(){return $$props.ref}},()=>restProps))};if_block(node2,$$render=>{$$props.shouldRender&&$$render(consequent)})}append($$anchor,fragment)}function Popper_layer_force_mount($$anchor,$$props){let interactOutsideBehavior=prop( +$$props,"interactOutsideBehavior",3,"close"),trapFocus=prop($$props,"trapFocus",3,!0),isValidEvent2=prop($$props,"isValidEvent",3,()=>!1),customAnchor=prop($$props,"customAnchor",3,null),isStatic=prop($$props,"isStatic",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","popper","onEscapeKeydown","escapeKeydownBehavior","preventOverflowTextSelection","id","onPointerDown","onPointerUp","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary", +"collisionPadding","sticky","hideWhenDetached","updatePositionStrategy","strategy","dir","preventScroll","wrapperId","style","onPlaced","onInteractOutside","onCloseAutoFocus","onOpenAutoFocus","onFocusOutside","interactOutsideBehavior","loop","trapFocus","isValidEvent","customAnchor","isStatic","enabled"]);Popper_layer_inner($$anchor,spread_props({get popper(){return $$props.popper},get onEscapeKeydown(){return $$props.onEscapeKeydown},get escapeKeydownBehavior(){return $$props.escapeKeydownBehavior}, +get preventOverflowTextSelection(){return $$props.preventOverflowTextSelection},get id(){return $$props.id},get onPointerDown(){return $$props.onPointerDown},get onPointerUp(){return $$props.onPointerUp},get side(){return $$props.side},get sideOffset(){return $$props.sideOffset},get align(){return $$props.align},get alignOffset(){return $$props.alignOffset},get arrowPadding(){return $$props.arrowPadding},get avoidCollisions(){return $$props.avoidCollisions},get collisionBoundary(){return $$props. +collisionBoundary},get collisionPadding(){return $$props.collisionPadding},get sticky(){return $$props.sticky},get hideWhenDetached(){return $$props.hideWhenDetached},get updatePositionStrategy(){return $$props.updatePositionStrategy},get strategy(){return $$props.strategy},get dir(){return $$props.dir},get preventScroll(){return $$props.preventScroll},get wrapperId(){return $$props.wrapperId},get style(){return $$props.style},get onPlaced(){return $$props.onPlaced},get customAnchor(){return customAnchor()}, +get isStatic(){return isStatic()},get enabled(){return $$props.enabled},get onInteractOutside(){return $$props.onInteractOutside},get onCloseAutoFocus(){return $$props.onCloseAutoFocus},get onOpenAutoFocus(){return $$props.onOpenAutoFocus},get interactOutsideBehavior(){return interactOutsideBehavior()},get loop(){return $$props.loop},get trapFocus(){return trapFocus()},get isValidEvent(){return isValidEvent2()},get onFocusOutside(){return $$props.onFocusOutside}},()=>restProps,{forceMount:!0}))} +var root_4$G=from_html("<div><div><!></div></div>"),root_8$x=from_html("<div><div><!></div></div>");function Select_content$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),forceMount=prop($$props,"forceMount",3,!1),side=prop($$props,"side",3,"bottom"),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),preventScroll=prop($$props,"prevent\ +Scroll",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","forceMount","side","onInteractOutside","onEscapeKeydown","children","child","preventScroll","style"]);const contentState=SelectContentState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),onInteractOutside:boxWith$1(()=>onInteractOutside()),onEscapeKeydown:boxWith$1(()=>onEscapeKeydown())}),mergedProps=user_derived(()=>mergeProps(restProps,contentState.props));var fragment=comment$2(),node2=first_child( +fragment);{var consequent_1=$$anchor2=>{Popper_layer_force_mount($$anchor2,spread_props(()=>get$3(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get side(){return side()},get enabled(){return contentState.root.opts.open.current},get id(){return id2()},get preventScroll(){return preventScroll()},forceMount:!0,get shouldRender(){return contentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived( +()=>mergeProps(props(),{style:contentState.props.style},{style:$$props.style}));var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor4=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);{let $0=user_derived(()=>({props:get$3(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$3($0))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$G();attribute_effect(div,()=>({...wrapperProps()})); +var div_1=child(div);attribute_effect(div_1,()=>({...get$3(finalProps)}));var node_3=child(div_1);snippet(node_3,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor4,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor3,fragment_2)},$$slots:{popper:!0}}))},consequent_3=$$anchor2=>{Popper_layer($$anchor2,spread_props(()=>get$3(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get side(){return side()}, +get open(){return contentState.root.opts.open.current},get id(){return id2()},get preventScroll(){return preventScroll()},forceMount:!1,get shouldRender(){return contentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:contentState.props.style},{style:$$props.style}));var fragment_5=comment$2(),node_4=first_child(fragment_5);{var consequent_2=$$anchor4=>{var fragment_6=comment$2(), +node_5=first_child(fragment_6);{let $0=user_derived(()=>({props:get$3(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_5,()=>$$props.child,()=>get$3($0))}append($$anchor4,fragment_6)},alternate_1=$$anchor4=>{var div_2=root_8$x();attribute_effect(div_2,()=>({...wrapperProps()}));var div_3=child(div_2);attribute_effect(div_3,()=>({...get$3(finalProps)}));var node_6=child(div_3);snippet(node_6,()=>$$props.children??noop$3),reset(div_3),reset(div_2),append($$anchor4, +div_2)};if_block(node_4,$$render=>{$$props.child?$$render(consequent_2):$$render(alternate_1,-1)})}append($$anchor3,fragment_5)},$$slots:{popper:!0}}))};if_block(node2,$$render=>{forceMount()?$$render(consequent_1):forceMount()||$$render(consequent_3,1)})}append($$anchor,fragment),pop()}function Mounted($$anchor,$$props){push$1($$props,!0);let mounted=prop($$props,"mounted",15,!1),onMountedChange=prop($$props,"onMountedChange",3,noop$1);onMountEffect(()=>(mounted(!0),onMountedChange()(!0),()=>{mounted( +!1),onMountedChange()(!1)})),pop()}var root_2$1u=from_html("<div><!></div>"),root$1T=from_html("<!> <!>",1);function Select_item$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),label=prop($$props,"label",19,()=>$$props.value),disabled=prop($$props,"disabled",3,!1),onHighlight=prop($$props,"onHighlight",3,noop$1),onUnhighlight=prop($$props,"onUnhighlight",3,noop$1),restProps=rest_props($$props,["$$slots", +"$$events","$$legacy","id","ref","value","label","disabled","children","child","onHighlight","onUnhighlight"]);const itemState=SelectItemState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),value:boxWith$1(()=>$$props.value),disabled:boxWith$1(()=>disabled()),label:boxWith$1(()=>label()),onHighlight:boxWith$1(()=>onHighlight()),onUnhighlight:boxWith$1(()=>onUnhighlight())}),mergedProps=user_derived(()=>mergeProps(restProps,itemState.props));var fragment=root$1T(),node2=first_child( +fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>({props:get$3(mergedProps),...itemState.snippetProps}));snippet(node_1,()=>$$props.child,()=>get$3($0))}append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1u();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3,()=>itemState.snippetProps),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{ +$$props.child?$$render(consequent):$$render(alternate,-1)})}var node_3=sibling(node2,2);Mounted(node_3,{get mounted(){return itemState.mounted},set mounted($$value){itemState.mounted=$$value}}),append($$anchor,fragment),pop()}var root_2$1t=from_html("<div><!></div>");function Select_viewport($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id", +"ref","children","child"]);const viewportState=SelectViewportState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,viewportState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1t();attribute_effect( +div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_3$10=from_html("<div><!></div>"),root_1$14=from_html("<!> <!>",1);function Select_scroll_down_button$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15, +null),delay=prop($$props,"delay",3,()=>50),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","delay","child","children"]);const scrollButtonState=SelectScrollDownButtonState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),delay:boxWith$1(()=>delay())}),mergedProps=user_derived(()=>mergeProps(restProps,scrollButtonState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{var fragment_1=root_1$14(),node_1=first_child( +fragment_1);Mounted(node_1,{get mounted(){return scrollButtonState.scrollButtonState.mounted},set mounted($$value){scrollButtonState.scrollButtonState.mounted=$$value}});var node_2=sibling(node_1,2);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.child,()=>({props:restProps})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var div=root_3$10();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_4=child(div);snippet(node_4, +()=>$$props.children??noop$3),reset(div),append($$anchor3,div)};if_block(node_2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{scrollButtonState.canScrollDown&&$$render(consequent_1)})}append($$anchor,fragment),pop()}var root_3$$=from_html("<div><!></div>"),root_1$13=from_html("<!> <!>",1);function Select_scroll_up_button$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId( +uid2)),ref2=prop($$props,"ref",15,null),delay=prop($$props,"delay",3,()=>50),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","delay","child","children"]);const scrollButtonState=SelectScrollUpButtonState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),delay:boxWith$1(()=>delay())}),mergedProps=user_derived(()=>mergeProps(restProps,scrollButtonState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{var fragment_1=root_1$13(), +node_1=first_child(fragment_1);Mounted(node_1,{get mounted(){return scrollButtonState.scrollButtonState.mounted},set mounted($$value){scrollButtonState.scrollButtonState.mounted=$$value}});var node_2=sibling(node_1,2);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.child,()=>({props:restProps})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var div=root_3$$();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_4=child( +div);snippet(node_4,()=>$$props.children??noop$3),reset(div),append($$anchor3,div)};if_block(node_2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{scrollButtonState.canScrollUp&&$$render(consequent_1)})}append($$anchor,fragment),pop()}function Menu_sub($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenC\ +hangeComplete",3,noop$1);MenuSubmenuState.create({open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()?.(v)}),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())}),Floating_layer($$anchor,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}var root_2$1s=from_html("<div><!></div>");function Menu_item($$anchor,$$props){const uid2=props_id();push$1( +$$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid2)),disabled=prop($$props,"disabled",3,!1),onSelect=prop($$props,"onSelect",3,noop$1),closeOnSelect=prop($$props,"closeOnSelect",3,!0),restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","children","ref","id","disabled","onSelect","closeOnSelect"]);const itemState=MenuItemState.create({id:boxWith$1(()=>id2()),disabled:boxWith$1(()=>disabled()),onSelect:boxWith$1(()=>onSelect()),ref:boxWith$1( +()=>ref2(),v=>ref2(v)),closeOnSelect:boxWith$1(()=>closeOnSelect())}),mergedProps=user_derived(()=>mergeProps(restProps,itemState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1s();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2, +()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_2$1r=from_html("<div><!></div>");function Menu_separator($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid2)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id","child","children"]);const separatorState=MenuSeparatorState. +create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,separatorState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1r();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet( +node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_4$F=from_html("<div><div><!></div></div>"),root_8$w=from_html("<div><div><!></div></div>");function Menu_sub_content($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),loop2=prop($$props,"loop",3,!0),onInteractOutside=prop( +$$props,"onInteractOutside",3,noop$1),forceMount=prop($$props,"forceMount",3,!1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),interactOutsideBehavior=prop($$props,"interactOutsideBehavior",3,"defer-otherwise-close"),escapeKeydownBehavior=prop($$props,"escapeKeydownBehavior",3,"defer-otherwise-close"),onOpenAutoFocusProp=prop($$props,"onOpenAutoFocus",3,noop$1),onCloseAutoFocusProp=prop($$props,"onCloseAutoFocus",3,noop$1),onFocusOutside=prop($$props,"onFocusOutside",3,noop$1),side=prop( +$$props,"side",3,"right"),trapFocus=prop($$props,"trapFocus",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","children","child","loop","onInteractOutside","forceMount","onEscapeKeydown","interactOutsideBehavior","escapeKeydownBehavior","onOpenAutoFocus","onCloseAutoFocus","onFocusOutside","side","trapFocus","style"]);const subContentState=MenuContentState.create({id:boxWith$1(()=>id2()),loop:boxWith$1(()=>loop2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),isSub:!0,onCloseAutoFocus:boxWith$1( +()=>handleCloseAutoFocus)});function onkeydown(e){const isKeyDownInside=e.currentTarget.contains(e.target),isCloseKey=SUB_CLOSE_KEYS[subContentState.parentMenu.root.opts.dir.current].includes(e.key);isKeyDownInside&&isCloseKey&&(subContentState.parentMenu.onClose(),subContentState.parentMenu.triggerNode?.focus(),e.preventDefault())}const dataAttr=user_derived(()=>subContentState.parentMenu.root.getBitsAttr("sub-content")),mergedProps=user_derived(()=>mergeProps(restProps,subContentState.props,{side:side(), +onkeydown,[get$3(dataAttr)]:""}));function handleOpenAutoFocus(e){onOpenAutoFocusProp()(e),!e.defaultPrevented&&(e.preventDefault(),subContentState.parentMenu.root.isUsingKeyboard&&subContentState.parentMenu.contentNode&&MenuOpenEvent.dispatch(subContentState.parentMenu.contentNode))}function handleCloseAutoFocus(e){onCloseAutoFocusProp()(e),!e.defaultPrevented&&e.preventDefault()}function handleInteractOutside(e){onInteractOutside()(e),!e.defaultPrevented&&subContentState.parentMenu.onClose()}function handleEscapeKeydown(e){ +onEscapeKeydown()(e),!e.defaultPrevented&&subContentState.parentMenu.onClose()}function handleOnFocusOutside(e){if(onFocusOutside()(e),e.defaultPrevented||!isHTMLElement$1(e.target)||e.target.id===subContentState.parentMenu.triggerNode?.id)return;if(subContentState.parentMenu.parentMenu?.contentNode?.contains(e.target)){subContentState.parentMenu.onClose(),e.preventDefault();return}const subContentSelector=`[${subContentState.parentMenu.root.getBitsAttr("sub-content")}]`;if(e.target.closest(subContentSelector)){ +e.preventDefault();return}subContentState.parentMenu.onClose()}var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{Popper_layer_force_mount($$anchor2,spread_props(()=>get$3(mergedProps),{get ref(){return subContentState.opts.ref},get interactOutsideBehavior(){return interactOutsideBehavior()},get escapeKeydownBehavior(){return escapeKeydownBehavior()},onOpenAutoFocus:handleOpenAutoFocus,get enabled(){return subContentState.parentMenu.opts.open.current},onInteractOutside:handleInteractOutside, +onEscapeKeydown:handleEscapeKeydown,onFocusOutside:handleOnFocusOutside,preventScroll:!1,get loop(){return loop2()},get trapFocus(){return trapFocus()},get shouldRender(){return subContentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),get$3(mergedProps),{style:getFloatingContentCSSVars("menu")},{style:$$props.style}));var fragment_2=comment$2(),node_1=first_child(fragment_2); +{var consequent=$$anchor4=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);{let $0=user_derived(()=>({props:get$3(finalProps),wrapperProps:wrapperProps(),...subContentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$3($0))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$F();attribute_effect(div,()=>({...wrapperProps()}));var div_1=child(div);attribute_effect(div_1,()=>({...get$3(finalProps)}));var node_3=child(div_1);snippet(node_3,()=>$$props.children?? +noop$3),reset(div_1),reset(div),append($$anchor4,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor3,fragment_2)},$$slots:{popper:!0}}))},consequent_3=$$anchor2=>{Popper_layer($$anchor2,spread_props(()=>get$3(mergedProps),{get ref(){return subContentState.opts.ref},get interactOutsideBehavior(){return interactOutsideBehavior()},get escapeKeydownBehavior(){return escapeKeydownBehavior()},onCloseAutoFocus:handleCloseAutoFocus,onOpenAutoFocus:handleOpenAutoFocus, +get open(){return subContentState.parentMenu.opts.open.current},onInteractOutside:handleInteractOutside,onEscapeKeydown:handleEscapeKeydown,onFocusOutside:handleOnFocusOutside,preventScroll:!1,get loop(){return loop2()},get trapFocus(){return trapFocus()},get shouldRender(){return subContentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),get$3(mergedProps),{style:getFloatingContentCSSVars( +"menu")},{style:$$props.style}));var fragment_5=comment$2(),node_4=first_child(fragment_5);{var consequent_2=$$anchor4=>{var fragment_6=comment$2(),node_5=first_child(fragment_6);{let $0=user_derived(()=>({props:get$3(finalProps),wrapperProps:wrapperProps(),...subContentState.snippetProps}));snippet(node_5,()=>$$props.child,()=>get$3($0))}append($$anchor4,fragment_6)},alternate_1=$$anchor4=>{var div_2=root_8$w();attribute_effect(div_2,()=>({...wrapperProps()}));var div_3=child(div_2);attribute_effect( +div_3,()=>({...get$3(finalProps)}));var node_6=child(div_3);snippet(node_6,()=>$$props.children??noop$3),reset(div_3),reset(div_2),append($$anchor4,div_2)};if_block(node_4,$$render=>{$$props.child?$$render(consequent_2):$$render(alternate_1,-1)})}append($$anchor3,fragment_5)},$$slots:{popper:!0}}))};if_block(node2,$$render=>{forceMount()?$$render(consequent_1):forceMount()||$$render(consequent_3,1)})}append($$anchor,fragment),pop()}var root_3$_=from_html("<div><!></div>");function Menu_sub_trigger($$anchor,$$props){ +const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),disabled=prop($$props,"disabled",3,!1),ref2=prop($$props,"ref",15,null),onSelect=prop($$props,"onSelect",3,noop$1),openDelay=prop($$props,"openDelay",3,0),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","disabled","ref","children","child","onSelect","openDelay"]);const subTriggerState=MenuSubTriggerState.create({disabled:boxWith$1(()=>disabled()),onSelect:boxWith$1(()=>onSelect()),id:boxWith$1( +()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),openDelay:boxWith$1(()=>openDelay())}),mergedProps=user_derived(()=>mergeProps(restProps,subTriggerState.props));Floating_layer_anchor($$anchor,{get id(){return id2()},get ref(){return subTriggerState.opts.ref},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_1=first_child(fragment_2);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})), +append($$anchor3,fragment_2)},alternate=$$anchor3=>{var div=root_3$_();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor3,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}function isPointInPolygon(point2,polygon){const[x,y]=point2;let isInside=!1;const length=polygon.length;for(let i=0,j=length-1;i<length;j= +i++){const[xi,yi]=polygon[i]??[0,0],[xj,yj]=polygon[j]??[0,0];yi>=y!=yj>=y&&x<=(xj-xi)*(y-yi)/(yj-yi)+xi&&(isInside=!isInside)}return isInside}function isInsideRect(point2,rect){return point2[0]>=rect.left&&point2[0]<=rect.right&&point2[1]>=rect.top&&point2[1]<=rect.bottom}function getSide(triggerRect,contentRect){const triggerCenterX=triggerRect.left+triggerRect.width/2,triggerCenterY=triggerRect.top+triggerRect.height/2,contentCenterX=contentRect.left+contentRect.width/2,contentCenterY=contentRect. +top+contentRect.height/2,deltaX=contentCenterX-triggerCenterX,deltaY=contentCenterY-triggerCenterY;return Math.abs(deltaX)>Math.abs(deltaY)?deltaX>0?"right":"left":deltaY>0?"bottom":"top"}class SafePolygon{#opts;#buffer;#transitIntentTimeout;#exitPoint=null;#exitTarget=null;#transitTargets=[];#trackedTriggerNode=null;#leaveFallbackRafId=null;#transitIntentTimeoutId=null;#cancelLeaveFallback(){this.#leaveFallbackRafId!==null&&(cancelAnimationFrame(this.#leaveFallbackRafId),this.#leaveFallbackRafId= +null)}#scheduleLeaveFallback(){this.#cancelLeaveFallback(),this.#leaveFallbackRafId=requestAnimationFrame(()=>{this.#leaveFallbackRafId=null,!(!this.#exitPoint||!this.#exitTarget)&&(this.#clearTracking(),this.#opts.onPointerExit())})}#cancelTransitIntentTimeout(){this.#transitIntentTimeoutId!==null&&(clearTimeout(this.#transitIntentTimeoutId),this.#transitIntentTimeoutId=null)}#scheduleTransitIntentTimeout(){this.#transitIntentTimeout!==null&&(this.#cancelTransitIntentTimeout(),this.#transitIntentTimeoutId= +window.setTimeout(()=>{this.#transitIntentTimeoutId=null,!(!this.#exitPoint||!this.#exitTarget)&&(this.#clearTracking(),this.#opts.onPointerExit())},this.#transitIntentTimeout))}constructor(opts){this.#opts=opts,this.#buffer=opts.buffer??1;const transitIntentTimeout=opts.transitIntentTimeout;this.#transitIntentTimeout=typeof transitIntentTimeout=="number"&&transitIntentTimeout>0?transitIntentTimeout:null,watch$1([opts.triggerNode,opts.contentNode,opts.enabled],([triggerNode,contentNode,enabled])=>{ +if(!triggerNode||!contentNode||!enabled){this.#trackedTriggerNode=null,this.#clearTracking();return}this.#trackedTriggerNode&&this.#trackedTriggerNode!==triggerNode&&this.#clearTracking(),this.#trackedTriggerNode=triggerNode;const doc=getDocument$1(triggerNode),handlePointerMove=e=>{this.#onPointerMove([e.clientX,e.clientY],triggerNode,contentNode)},handleTriggerLeave=e=>{const target2=e.relatedTarget;if(isElement$1(target2)&&contentNode.contains(target2))return;const ignoredTargets=this.#opts.ignoredTargets?.()?? +[];isElement$1(target2)&&ignoredTargets.some(n=>n===target2||n.contains(target2))||(this.#transitTargets=isElement$1(target2)&&ignoredTargets.length>0?ignoredTargets.filter(n=>target2.contains(n)):[],this.#exitPoint=[e.clientX,e.clientY],this.#exitTarget="content",this.#scheduleLeaveFallback())},handleTriggerEnter=()=>{this.#clearTracking()},handleContentEnter=()=>{this.#clearTracking()},handleContentLeave=e=>{const target2=e.relatedTarget;isElement$1(target2)&&triggerNode.contains(target2)||(this.#exitPoint= +[e.clientX,e.clientY],this.#exitTarget="trigger",this.#scheduleLeaveFallback())};return[on(doc,"pointermove",handlePointerMove),on(triggerNode,"pointerleave",handleTriggerLeave),on(triggerNode,"pointerenter",handleTriggerEnter),on(contentNode,"pointerenter",handleContentEnter),on(contentNode,"pointerleave",handleContentLeave)].reduce((acc,cleanup)=>()=>{acc(),cleanup()},()=>{})})}#onPointerMove(clientPoint,triggerNode,contentNode){if(!this.#exitPoint||!this.#exitTarget)return;this.#cancelLeaveFallback(), +this.#scheduleTransitIntentTimeout();const triggerRect=triggerNode.getBoundingClientRect(),contentRect=contentNode.getBoundingClientRect();if(this.#exitTarget==="content"&&isInsideRect(clientPoint,contentRect)){this.#clearTracking();return}if(this.#exitTarget==="trigger"&&isInsideRect(clientPoint,triggerRect)){this.#clearTracking();return}if(this.#exitTarget==="content"&&this.#transitTargets.length>0)for(const transitTarget of this.#transitTargets){const transitRect=transitTarget.getBoundingClientRect(); +if(isInsideRect(clientPoint,transitRect))return;const transitSide=getSide(triggerRect,transitRect),transitCorridor=this.#getCorridorPolygon(triggerRect,transitRect,transitSide);if(transitCorridor&&isPointInPolygon(clientPoint,transitCorridor))return}const side=getSide(triggerRect,contentRect),corridorPoly=this.#getCorridorPolygon(triggerRect,contentRect,side);if(corridorPoly&&isPointInPolygon(clientPoint,corridorPoly))return;const targetRect=this.#exitTarget==="content"?contentRect:triggerRect,safePoly=this.#getSafePolygon( +this.#exitPoint,targetRect,side,this.#exitTarget);isPointInPolygon(clientPoint,safePoly)||(this.#clearTracking(),this.#opts.onPointerExit())}#clearTracking(){this.#exitPoint=null,this.#exitTarget=null,this.#transitTargets=[],this.#cancelLeaveFallback(),this.#cancelTransitIntentTimeout()}#getCorridorPolygon(triggerRect,contentRect,side){const buffer=this.#buffer;switch(side){case"top":return[[Math.min(triggerRect.left,contentRect.left)-buffer,triggerRect.top],[Math.min(triggerRect.left,contentRect. +left)-buffer,contentRect.bottom],[Math.max(triggerRect.right,contentRect.right)+buffer,contentRect.bottom],[Math.max(triggerRect.right,contentRect.right)+buffer,triggerRect.top]];case"bottom":return[[Math.min(triggerRect.left,contentRect.left)-buffer,triggerRect.bottom],[Math.min(triggerRect.left,contentRect.left)-buffer,contentRect.top],[Math.max(triggerRect.right,contentRect.right)+buffer,contentRect.top],[Math.max(triggerRect.right,contentRect.right)+buffer,triggerRect.bottom]];case"left":return[ +[triggerRect.left,Math.min(triggerRect.top,contentRect.top)-buffer],[contentRect.right,Math.min(triggerRect.top,contentRect.top)-buffer],[contentRect.right,Math.max(triggerRect.bottom,contentRect.bottom)+buffer],[triggerRect.left,Math.max(triggerRect.bottom,contentRect.bottom)+buffer]];case"right":return[[triggerRect.right,Math.min(triggerRect.top,contentRect.top)-buffer],[contentRect.left,Math.min(triggerRect.top,contentRect.top)-buffer],[contentRect.left,Math.max(triggerRect.bottom,contentRect. +bottom)+buffer],[triggerRect.right,Math.max(triggerRect.bottom,contentRect.bottom)+buffer]]}}#getSafePolygon(exitPoint,targetRect,side,exitTarget){const buffer=this.#buffer*4,[x,y]=exitPoint;switch(exitTarget==="trigger"?this.#flipSide(side):side){case"top":return[[x-buffer,y+buffer],[x+buffer,y+buffer],[targetRect.right+buffer,targetRect.bottom],[targetRect.right+buffer,targetRect.top],[targetRect.left-buffer,targetRect.top],[targetRect.left-buffer,targetRect.bottom]];case"bottom":return[[x-buffer, +y-buffer],[x+buffer,y-buffer],[targetRect.right+buffer,targetRect.top],[targetRect.right+buffer,targetRect.bottom],[targetRect.left-buffer,targetRect.bottom],[targetRect.left-buffer,targetRect.top]];case"left":return[[x+buffer,y-buffer],[x+buffer,y+buffer],[targetRect.right,targetRect.bottom+buffer],[targetRect.left,targetRect.bottom+buffer],[targetRect.left,targetRect.top-buffer],[targetRect.right,targetRect.top-buffer]];case"right":return[[x-buffer,y-buffer],[x-buffer,y+buffer],[targetRect.left, +targetRect.bottom+buffer],[targetRect.right,targetRect.bottom+buffer],[targetRect.right,targetRect.top-buffer],[targetRect.left,targetRect.top-buffer]]}}#flipSide(side){switch(side){case"top":return"bottom";case"bottom":return"top";case"left":return"right";case"right":return"left"}}}const popoverAttrs=createBitsAttrs({component:"popover",parts:["root","trigger","content","close","overlay"]}),PopoverRootContext=new Context$1("Popover.Root");class PopoverRootState{static create(opts){return PopoverRootContext. +set(new PopoverRootState(opts))}opts;#contentNode=state$1(null);get contentNode(){return get$3(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}contentPresence;#triggerNode=state$1(null);get triggerNode(){return get$3(this.#triggerNode)}set triggerNode(value){set$1(this.#triggerNode,value,!0)}#overlayNode=state$1(null);get overlayNode(){return get$3(this.#overlayNode)}set overlayNode(value){set$1(this.#overlayNode,value,!0)}overlayPresence;#openedViaHover=state$1(!1);get openedViaHover(){ +return get$3(this.#openedViaHover)}set openedViaHover(value){set$1(this.#openedViaHover,value,!0)}#hasInteractedWithContent=state$1(!1);get hasInteractedWithContent(){return get$3(this.#hasInteractedWithContent)}set hasInteractedWithContent(value){set$1(this.#hasInteractedWithContent,value,!0)}#hoverCooldown=state$1(!1);get hoverCooldown(){return get$3(this.#hoverCooldown)}set hoverCooldown(value){set$1(this.#hoverCooldown,value,!0)}#closeDelay=state$1(0);get closeDelay(){return get$3(this.#closeDelay)}set closeDelay(value){ +set$1(this.#closeDelay,value,!0)}#closeTimeout=null;#domContext=null;constructor(opts){this.opts=opts,this.contentPresence=new PresenceManager({ref:boxWith$1(()=>this.contentNode),open:this.opts.open,onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),this.overlayPresence=new PresenceManager({ref:boxWith$1(()=>this.overlayNode),open:this.opts.open}),watch$1(()=>this.opts.open.current,isOpen=>{isOpen||(this.openedViaHover=!1,this.hasInteractedWithContent=!1,this.#clearCloseTimeout())})}setDomContext(ctx){ +this.#domContext=ctx}#clearCloseTimeout(){this.#closeTimeout!==null&&this.#domContext&&(this.#domContext.clearTimeout(this.#closeTimeout),this.#closeTimeout=null)}toggleOpen(){this.#clearCloseTimeout(),this.opts.open.current=!this.opts.open.current}handleClose(){this.#clearCloseTimeout(),this.opts.open.current&&(this.opts.open.current=!1)}handleHoverOpen(){this.#clearCloseTimeout(),!this.opts.open.current&&(this.openedViaHover=!0,this.opts.open.current=!0)}handleHoverClose(){this.opts.open.current&& +this.openedViaHover&&!this.hasInteractedWithContent&&(this.opts.open.current=!1)}handleDelayedHoverClose(){this.opts.open.current&&(!this.openedViaHover||this.hasInteractedWithContent||(this.#clearCloseTimeout(),this.closeDelay<=0?this.opts.open.current=!1:this.#domContext&&(this.#closeTimeout=this.#domContext.setTimeout(()=>{this.openedViaHover&&!this.hasInteractedWithContent&&(this.opts.open.current=!1),this.#closeTimeout=null},this.closeDelay))))}cancelDelayedClose(){this.#clearCloseTimeout()}markInteraction(){ +this.hasInteractedWithContent=!0,this.#clearCloseTimeout()}}class PopoverTriggerState{static create(opts){return new PopoverTriggerState(opts,PopoverRootContext.get())}opts;root;attachment;domContext;#openTimeout=null;#closeTimeout=null;#isHovering=state$1(!1);constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>this.root.triggerNode=v),this.domContext=new DOMContext(opts.ref),this.root.setDomContext(this.domContext),this.onclick=this.onclick.bind(this), +this.onkeydown=this.onkeydown.bind(this),this.onpointerenter=this.onpointerenter.bind(this),this.onpointerleave=this.onpointerleave.bind(this),watch$1(()=>this.opts.closeDelay.current,delay=>{this.root.closeDelay=delay})}#clearOpenTimeout(){this.#openTimeout!==null&&(this.domContext.clearTimeout(this.#openTimeout),this.#openTimeout=null)}#clearCloseTimeout(){this.#closeTimeout!==null&&(this.domContext.clearTimeout(this.#closeTimeout),this.#closeTimeout=null)}#clearAllTimeouts(){this.#clearOpenTimeout(), +this.#clearCloseTimeout()}onpointerenter(e){if(this.opts.disabled.current||!this.opts.openOnHover.current||isTouch(e)||(set$1(this.#isHovering,!0),this.#clearCloseTimeout(),this.root.cancelDelayedClose(),this.root.opts.open.current||this.root.hoverCooldown))return;const delay=this.opts.openDelay.current;delay<=0?this.root.handleHoverOpen():this.#openTimeout=this.domContext.setTimeout(()=>{this.root.handleHoverOpen(),this.#openTimeout=null},delay)}onpointerleave(e){this.opts.disabled.current||this. +opts.openOnHover.current&&(isTouch(e)||(set$1(this.#isHovering,!1),this.#clearOpenTimeout(),this.root.hoverCooldown=!1))}onclick(e){if(!this.opts.disabled.current&&e.button===0){if(this.#clearAllTimeouts(),get$3(this.#isHovering)&&this.root.opts.open.current&&this.root.openedViaHover){this.root.openedViaHover=!1,this.root.hasInteractedWithContent=!0;return}get$3(this.#isHovering)&&this.opts.openOnHover.current&&this.root.opts.open.current&&(this.root.hoverCooldown=!0),this.root.hoverCooldown&&!this. +root.opts.open.current&&(this.root.hoverCooldown=!1),this.root.toggleOpen()}}onkeydown(e){this.opts.disabled.current||(e.key===ENTER||e.key===SPACE)&&(e.preventDefault(),this.#clearAllTimeouts(),this.root.toggleOpen())}#getAriaControls(){if(this.root.opts.open.current&&this.root.contentNode?.id)return this.root.contentNode?.id}#props=user_derived(()=>({id:this.opts.id.current,"aria-haspopup":"dialog","aria-expanded":boolToStr(this.root.opts.open.current),"data-state":getDataOpenClosed(this.root. +opts.open.current),"aria-controls":this.#getAriaControls(),[popoverAttrs.trigger]:"",disabled:this.opts.disabled.current,onkeydown:this.onkeydown,onclick:this.onclick,onpointerenter:this.onpointerenter,onpointerleave:this.onpointerleave,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class PopoverContentState{static create(opts){return new PopoverContentState(opts,PopoverRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts= +opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>this.root.contentNode=v),this.onpointerdown=this.onpointerdown.bind(this),this.onfocusin=this.onfocusin.bind(this),this.onpointerenter=this.onpointerenter.bind(this),this.onpointerleave=this.onpointerleave.bind(this),new SafePolygon({triggerNode:()=>this.root.triggerNode,contentNode:()=>this.root.contentNode,enabled:()=>this.root.opts.open.current&&this.root.openedViaHover&&!this.root.hasInteractedWithContent,onPointerExit:()=>{this. +root.handleDelayedHoverClose()}})}onpointerdown(_){this.root.markInteraction()}onfocusin(e){const target2=e.target;isElement$1(target2)&&isTabbable(target2)&&this.root.markInteraction()}onpointerenter(e){isTouch(e)||this.root.cancelDelayedClose()}onpointerleave(e){isTouch(e)}onInteractOutside=e=>{if(this.opts.onInteractOutside.current(e),e.defaultPrevented||!isElement$1(e.target))return;const closestTrigger=e.target.closest(popoverAttrs.selector("trigger"));if(!(closestTrigger&&closestTrigger=== +this.root.triggerNode)){if(this.opts.customAnchor.current){if(isElement$1(this.opts.customAnchor.current)){if(this.opts.customAnchor.current.contains(e.target))return}else if(typeof this.opts.customAnchor.current=="string"){const el=document.querySelector(this.opts.customAnchor.current);if(el&&el.contains(e.target))return}}this.root.handleClose()}};onEscapeKeydown=e=>{this.opts.onEscapeKeydown.current(e),!e.defaultPrevented&&this.root.handleClose()};get shouldRender(){return this.root.contentPresence. +shouldRender}get shouldTrapFocus(){return!(this.root.openedViaHover&&!this.root.hasInteractedWithContent)}#snippetProps=user_derived(()=>({open:this.root.opts.open.current}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,tabindex:-1,"data-state":getDataOpenClosed(this.root.opts.open.current),...getDataTransitionAttrs(this.root.contentPresence.transitionStatus),[popoverAttrs.content]:"", +style:{pointerEvents:"auto",contain:"layout style"},onpointerdown:this.onpointerdown,onfocusin:this.onfocusin,onpointerenter:this.onpointerenter,onpointerleave:this.onpointerleave,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}popperProps={onInteractOutside:this.onInteractOutside,onEscapeKeydown:this.onEscapeKeydown}}var root_4$E=from_html("<div><div><!></div></div>"),root_8$v=from_html("<div><div><!></div></div>");function Popover_content$1($$anchor,$$props){ +const uid2=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid2)),forceMount=prop($$props,"forceMount",3,!1),onOpenAutoFocus=prop($$props,"onOpenAutoFocus",3,noop$1),onCloseAutoFocus=prop($$props,"onCloseAutoFocus",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),trapFocus=prop($$props,"trapFocus",3,!0),preventScroll=prop($$props,"preventScroll",3,!1),customAnchor=prop( $$props,"customAnchor",3,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","children","ref","id","forceMount","onOpenAutoFocus","onCloseAutoFocus","onEscapeKeydown","onInteractOutside","trapFocus","preventScroll","customAnchor","style"]);const contentState=PopoverContentState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),onInteractOutside:boxWith$1(()=>onInteractOutside()),onEscapeKeydown:boxWith$1(()=>onEscapeKeydown()),customAnchor:boxWith$1(()=>customAnchor())}), -mergedProps=user_derived(()=>mergeProps(restProps,contentState.props)),effectiveTrapFocus=user_derived(()=>trapFocus()&&contentState.shouldTrapFocus);function handleOpenAutoFocus(e){contentState.shouldTrapFocus||e.preventDefault(),onOpenAutoFocus()(e)}var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{Popper_layer_force_mount($$anchor2,spread_props(()=>get$4(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get enabled(){return contentState. -root.opts.open.current},get id(){return id2()},get trapFocus(){return get$4(effectiveTrapFocus)},get preventScroll(){return preventScroll()},loop:!0,forceMount:!0,get customAnchor(){return customAnchor()},onOpenAutoFocus:handleOpenAutoFocus,get onCloseAutoFocus(){return onCloseAutoFocus()},get shouldRender(){return contentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars( -"popover")},{style:$$props.style}));var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor4=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);{let $0=user_derived(()=>({props:get$4(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$4($0))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$C();attribute_effect(div,()=>({...wrapperProps()}));var div_1=child(div);attribute_effect(div_1, -()=>({...get$4(finalProps)}));var node_3=child(div_1);snippet(node_3,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor4,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor3,fragment_2)},$$slots:{popper:!0}}))},alternate_2=$$anchor2=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);{var consequent_3=$$anchor3=>{Popper_layer($$anchor3,spread_props(()=>get$4(mergedProps),()=>contentState.popperProps,{get ref(){return contentState. -opts.ref},get open(){return contentState.root.opts.open.current},get id(){return id2()},get trapFocus(){return get$4(effectiveTrapFocus)},get preventScroll(){return preventScroll()},loop:!0,forceMount:!1,get customAnchor(){return customAnchor()},onOpenAutoFocus:handleOpenAutoFocus,get onCloseAutoFocus(){return onCloseAutoFocus()},get shouldRender(){return contentState.shouldRender},popper:($$anchor4,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived( -()=>mergeProps(props(),{style:getFloatingContentCSSVars("popover")},{style:$$props.style}));var fragment_6=comment$2(),node_5=first_child(fragment_6);{var consequent_2=$$anchor5=>{var fragment_7=comment$2(),node_6=first_child(fragment_7);{let $0=user_derived(()=>({props:get$4(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_6,()=>$$props.child,()=>get$4($0))}append($$anchor5,fragment_7)},alternate_1=$$anchor5=>{var div_2=root_9$q();attribute_effect(div_2,()=>({ -...wrapperProps()}));var div_3=child(div_2);attribute_effect(div_3,()=>({...get$4(finalProps)}));var node_7=child(div_3);snippet(node_7,()=>$$props.children??noop$3),reset(div_3),reset(div_2),append($$anchor5,div_2)};if_block(node_5,$$render=>{$$props.child?$$render(consequent_2):$$render(alternate_1,!1)})}append($$anchor4,fragment_6)},$$slots:{popper:!0}}))};if_block(node_4,$$render=>{forceMount()||$$render(consequent_3)},!0)}append($$anchor2,fragment_4)};if_block(node2,$$render=>{forceMount()? -$$render(consequent_1):$$render(alternate_2,!1)})}append($$anchor,fragment),pop()}var root_3$Y=from_html("<button><!></button>");function Popover_trigger$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),type2=prop($$props,"type",3,"button"),disabled=prop($$props,"disabled",3,!1),openOnHover=prop($$props,"openOnHover",3,!1),openDelay=prop($$props,"openDelay",3,700),closeDelay=prop($$props,"closeDelay",3,300), -restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","id","ref","type","disabled","openOnHover","openDelay","closeDelay"]);const triggerState=PopoverTriggerState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),disabled:boxWith$1(()=>!!disabled()),openOnHover:boxWith$1(()=>openOnHover()),openDelay:boxWith$1(()=>openDelay()),closeDelay:boxWith$1(()=>closeDelay())}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState.props,{type:type2()})); -Floating_layer_anchor($$anchor,{get id(){return id2()},get ref(){return triggerState.opts.ref},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_1=first_child(fragment_2);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var button=root_3$Y();attribute_effect(button,()=>({...get$4(mergedProps)}));var node_2=child(button);snippet( -node_2,()=>$$props.children??noop$3),reset(button),append($$anchor3,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}function Dialog($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1);DialogRootState.create({variant:boxWith$1(()=>"dialog"),open:boxWith$1( -()=>open2(),v=>{open2(v),onOpenChange()(v)}),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}var root_2$1g=from_html("<button><!></button>");function Dialog_close($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),disabled=prop($$props,"disabled",3,!1),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","children","child","id","ref","disabled"]);const closeState=DialogCloseState.create({variant:boxWith$1(()=>"close"),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),disabled:boxWith$1(()=>!!disabled())}),mergedProps=user_derived(()=>mergeProps(restProps,closeState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({ -props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1g();attribute_effect(button,()=>({...get$4(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_6$B=from_html("<!> <!>",1),root_8$q=from_html("<!> <div><!></div>",1);function Dialog_content$1($$anchor,$$props){ -const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),forceMount=prop($$props,"forceMount",3,!1),onCloseAutoFocus=prop($$props,"onCloseAutoFocus",3,noop$1),onOpenAutoFocus=prop($$props,"onOpenAutoFocus",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),trapFocus=prop($$props,"trapFocus",3,!0),preventScroll=prop($$props,"preventScroll",3,!0),restoreScrollDelay=prop( -$$props,"restoreScrollDelay",3,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","children","child","ref","forceMount","onCloseAutoFocus","onOpenAutoFocus","onEscapeKeydown","onInteractOutside","trapFocus","preventScroll","restoreScrollDelay"]);const contentState=DialogContentState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,contentState.props));var fragment=comment$2(),node2=first_child(fragment); -{var consequent_2=$$anchor2=>{Focus_scope($$anchor2,{get ref(){return contentState.opts.ref},loop:!0,get trapFocus(){return trapFocus()},get enabled(){return contentState.root.opts.open.current},get onOpenAutoFocus(){return onOpenAutoFocus()},get onCloseAutoFocus(){return onCloseAutoFocus()},focusScope:($$anchor3,$$arg0)=>{let focusScopeProps=()=>$$arg0?.().props;Escape_layer($$anchor3,spread_props(()=>get$4(mergedProps),{get enabled(){return contentState.root.opts.open.current},get ref(){return contentState. -opts.ref},onEscapeKeydown:e=>{onEscapeKeydown()(e),!e.defaultPrevented&&contentState.root.handleClose()},children:($$anchor4,$$slotProps)=>{Dismissible_layer($$anchor4,spread_props(()=>get$4(mergedProps),{get ref(){return contentState.opts.ref},get enabled(){return contentState.root.opts.open.current},onInteractOutside:e=>{onInteractOutside()(e),!e.defaultPrevented&&contentState.root.handleClose()},children:($$anchor5,$$slotProps2)=>{Text_selection_layer($$anchor5,spread_props(()=>get$4(mergedProps), -{get ref(){return contentState.opts.ref},get enabled(){return contentState.root.opts.open.current},children:($$anchor6,$$slotProps3)=>{var fragment_5=comment$2(),node_1=first_child(fragment_5);{var consequent_1=$$anchor7=>{var fragment_6=root_6$B(),node_2=first_child(fragment_6);{var consequent=$$anchor8=>{Scroll_lock($$anchor8,{get preventScroll(){return preventScroll()},get restoreScrollDelay(){return restoreScrollDelay()}})};if_block(node_2,$$render=>{contentState.root.opts.open.current&&$$render( -consequent)})}var node_3=sibling(node_2,2);{let $0=user_derived(()=>({props:mergeProps(get$4(mergedProps),focusScopeProps()),...contentState.snippetProps}));snippet(node_3,()=>$$props.child,()=>get$4($0))}append($$anchor7,fragment_6)},alternate=$$anchor7=>{var fragment_8=root_8$q(),node_4=first_child(fragment_8);Scroll_lock(node_4,{get preventScroll(){return preventScroll()}});var div=sibling(node_4,2);attribute_effect(div,$0=>({...$0}),[()=>mergeProps(get$4(mergedProps),focusScopeProps())]);var node_5=child( -div);snippet(node_5,()=>$$props.children??noop$3),reset(div),append($$anchor7,fragment_8)};if_block(node_1,$$render=>{$$props.child?$$render(consequent_1):$$render(alternate,!1)})}append($$anchor6,fragment_5)},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{focusScope:!0}})};if_block(node2,$$render=>{(contentState.shouldRender||forceMount())&&$$render(consequent_2)})}append($$anchor,fragment),pop()}function Menu($$anchor,$$props){push$1($$props,!0);let open2=prop( -$$props,"open",15,!1),dir=prop($$props,"dir",3,"ltr"),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1),variant=prop($$props,"_internal_variant",3,"dropdown-menu");const root2=MenuRootState.create({variant:boxWith$1(()=>variant()),dir:boxWith$1(()=>dir()),onClose:()=>{open2(!1),onOpenChange()(!1)}});MenuMenuState.create({open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())}, -root2),Floating_layer($$anchor,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}var root_4$B=from_html("<div><div><!></div></div>"),root_9$p=from_html("<div><div><!></div></div>");function Dropdown_menu_content$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),loop2=prop( -$$props,"loop",3,!0),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),onCloseAutoFocus=prop($$props,"onCloseAutoFocus",3,noop$1),forceMount=prop($$props,"forceMount",3,!1),trapFocus=prop($$props,"trapFocus",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","child","children","ref","loop","onInteractOutside","onEscapeKeydown","onCloseAutoFocus","forceMount","trapFocus","style"]);const contentState=MenuContentState. -create({id:boxWith$1(()=>id2()),loop:boxWith$1(()=>loop2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),onCloseAutoFocus:boxWith$1(()=>onCloseAutoFocus())}),mergedProps=user_derived(()=>mergeProps(restProps,contentState.props));function handleInteractOutside(e){if(contentState.handleInteractOutside(e),!e.defaultPrevented&&(onInteractOutside()(e),!e.defaultPrevented)){if(e.target&&e.target instanceof Element){const subContentSelector=`[${contentState.parentMenu.root.getBitsAttr("sub-content")}]`;if(e.target. -closest(subContentSelector))return}contentState.parentMenu.onClose()}}function handleEscapeKeydown(e){onEscapeKeydown()(e),!e.defaultPrevented&&contentState.parentMenu.onClose()}var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{Popper_layer_force_mount($$anchor2,spread_props(()=>get$4(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get enabled(){return contentState.parentMenu.opts.open.current},onInteractOutside:handleInteractOutside, -onEscapeKeydown:handleEscapeKeydown,get trapFocus(){return trapFocus()},get loop(){return loop2()},forceMount:!0,get id(){return id2()},get shouldRender(){return contentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars("dropdown-menu")},{style:$$props.style}));var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor4=>{ -var fragment_3=comment$2(),node_2=first_child(fragment_3);{let $0=user_derived(()=>({props:get$4(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$4($0))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$B();attribute_effect(div,()=>({...wrapperProps()}));var div_1=child(div);attribute_effect(div_1,()=>({...get$4(finalProps)}));var node_3=child(div_1);snippet(node_3,()=>$$props.children??noop$3),reset(div_1),reset(div), -append($$anchor4,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor3,fragment_2)},$$slots:{popper:!0}}))},alternate_2=$$anchor2=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);{var consequent_3=$$anchor3=>{Popper_layer($$anchor3,spread_props(()=>get$4(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get open(){return contentState.parentMenu.opts.open.current},onInteractOutside:handleInteractOutside, -onEscapeKeydown:handleEscapeKeydown,get trapFocus(){return trapFocus()},get loop(){return loop2()},forceMount:!1,get id(){return id2()},get shouldRender(){return contentState.shouldRender},popper:($$anchor4,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars("dropdown-menu")},{style:$$props.style}));var fragment_6=comment$2(),node_5=first_child(fragment_6);{var consequent_2=$$anchor5=>{ -var fragment_7=comment$2(),node_6=first_child(fragment_7);{let $0=user_derived(()=>({props:get$4(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_6,()=>$$props.child,()=>get$4($0))}append($$anchor5,fragment_7)},alternate_1=$$anchor5=>{var div_2=root_9$p();attribute_effect(div_2,()=>({...wrapperProps()}));var div_3=child(div_2);attribute_effect(div_3,()=>({...get$4(finalProps)}));var node_7=child(div_3);snippet(node_7,()=>$$props.children??noop$3),reset(div_3), -reset(div_2),append($$anchor5,div_2)};if_block(node_5,$$render=>{$$props.child?$$render(consequent_2):$$render(alternate_1,!1)})}append($$anchor4,fragment_6)},$$slots:{popper:!0}}))};if_block(node_4,$$render=>{forceMount()||$$render(consequent_3)},!0)}append($$anchor2,fragment_4)};if_block(node2,$$render=>{forceMount()?$$render(consequent_1):$$render(alternate_2,!1)})}append($$anchor,fragment),pop()}var root_3$X=from_html("<button><!></button>");function Menu_trigger($$anchor,$$props){const uid=props_id(); -push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),disabled=prop($$props,"disabled",3,!1),type2=prop($$props,"type",3,"button"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","child","children","disabled","type"]);const triggerState=DropdownMenuTriggerState.create({id:boxWith$1(()=>id2()),disabled:boxWith$1(()=>disabled()??!1),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState. -props,{type:type2()}));Floating_layer_anchor($$anchor,{get id(){return id2()},get ref(){return triggerState.opts.ref},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_1=first_child(fragment_2);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var button=root_3$X();attribute_effect(button,()=>({...get$4(mergedProps)}));var node_2=child( -button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor3,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}const labelAttrs=createBitsAttrs({component:"label",parts:["root"]});class LabelRootState{static create(opts){return new LabelRootState(opts)}opts;attachment;constructor(opts){this.opts=opts,this.attachment=attachRef(this.opts.ref),this.onmousedown=this.onmousedown. -bind(this)}onmousedown(e){e.detail>1&&e.preventDefault()}#props=user_derived(()=>({id:this.opts.id.current,[labelAttrs.root]:"",onmousedown:this.onmousedown,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}var root_2$1f=from_html("<label><!></label>");function Label$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots", -"$$events","$$legacy","children","child","id","ref","for"]);const rootState=LabelRootState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,rootState.props,{for:$$props.for}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{ -var label=root_2$1f();attribute_effect(label,()=>({...get$4(mergedProps),for:$$props.for}));var node_2=child(label);snippet(node_2,()=>$$props.children??noop$3),reset(label),append($$anchor2,label)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}class SvelteResizeObserver{#node;#onResize;constructor(node2,onResize){this.#node=node2,this.#onResize=onResize,this.handler=this.handler.bind(this),user_effect(this.handler)}handler(){ -let rAF=0;const _node=this.#node();if(!_node)return;const resizeObserver=new ResizeObserver(()=>{cancelAnimationFrame(rAF),rAF=window.requestAnimationFrame(this.#onResize)});return resizeObserver.observe(_node),()=>{window.cancelAnimationFrame(rAF),resizeObserver.unobserve(_node)}}}class StateMachine{state;#machine;constructor(initialState,machine){this.state=simpleBox(initialState),this.#machine=machine,this.dispatch=this.dispatch.bind(this)}#reducer(event2){return this.#machine[this.state.current][event2]?? -this.state.current}dispatch(event2){this.state.current=this.#reducer(event2)}}const animationNameCache=new WeakMap,ANIMATION_NAME_CACHE_TTL_MS=16,presenceMachine={mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}};class Presence{opts;#prevAnimationNameState=state$1("none");get prevAnimationNameState(){return get$4(this.#prevAnimationNameState)}set prevAnimationNameState(value){set$1(this.#prevAnimationNameState, -value,!0)}#styles=state$1(proxy({display:"",animationName:"none"}));get styles(){return get$4(this.#styles)}set styles(value){set$1(this.#styles,value,!0)}initialStatus;previousPresent;machine;present;constructor(opts){this.opts=opts,this.present=this.opts.open,this.initialStatus=opts.open.current?"mounted":"unmounted",this.previousPresent=new Previous(()=>this.present.current),this.machine=new StateMachine(this.initialStatus,presenceMachine),this.handleAnimationEnd=this.handleAnimationEnd.bind( -this),this.handleAnimationStart=this.handleAnimationStart.bind(this),watchPresenceChange(this),watchStatusChange(this),watchRefChange(this)}handleAnimationEnd(event2){if(!this.opts.ref.current)return;const currAnimationName=this.styles.animationName||getAnimationName(this.opts.ref.current),isCurrentAnimation=currAnimationName.includes(event2.animationName)||currAnimationName==="none";event2.target===this.opts.ref.current&&isCurrentAnimation&&this.machine.dispatch("ANIMATION_END")}handleAnimationStart(event2){ -if(this.opts.ref.current&&event2.target===this.opts.ref.current){const animationName=getAnimationName(this.opts.ref.current,!0);this.prevAnimationNameState=animationName,this.styles.animationName=animationName}}#isPresent=user_derived(()=>["mounted","unmountSuspended"].includes(this.machine.state.current));get isPresent(){return get$4(this.#isPresent)}set isPresent(value){set$1(this.#isPresent,value)}}function watchPresenceChange(state2){watch$1(()=>state2.present.current,()=>{if(!state2.opts.ref. -current||!(state2.present.current!==state2.previousPresent.current))return;const prevAnimationName=state2.prevAnimationNameState,currAnimationName=getAnimationName(state2.opts.ref.current,!0);if(state2.styles.animationName=currAnimationName,state2.present.current)state2.machine.dispatch("MOUNT");else if(currAnimationName==="none"||state2.styles.display==="none")state2.machine.dispatch("UNMOUNT");else{const isAnimating=prevAnimationName!==currAnimationName;state2.previousPresent.current&&isAnimating? -state2.machine.dispatch("ANIMATION_OUT"):state2.machine.dispatch("UNMOUNT")}})}function watchStatusChange(state2){watch$1(()=>state2.machine.state.current,()=>{if(!state2.opts.ref.current)return;const currAnimationName=state2.machine.state.current==="mounted"?getAnimationName(state2.opts.ref.current,!0):"none";state2.prevAnimationNameState=currAnimationName,state2.styles.animationName=currAnimationName})}function watchRefChange(state2){watch$1(()=>state2.opts.ref.current,()=>{if(!state2.opts.ref. -current)return;const computed=getComputedStyle(state2.opts.ref.current);return state2.styles={display:computed.display,animationName:computed.animationName||"none"},executeCallbacks(on(state2.opts.ref.current,"animationstart",state2.handleAnimationStart),on(state2.opts.ref.current,"animationcancel",state2.handleAnimationEnd),on(state2.opts.ref.current,"animationend",state2.handleAnimationEnd))})}function getAnimationName(node2,forceRefresh=!1){if(!node2)return"none";const now2=performance.now(), -cached2=animationNameCache.get(node2);if(!forceRefresh&&cached2&&now2-cached2.timestamp<ANIMATION_NAME_CACHE_TTL_MS)return cached2.value;const value=getComputedStyle(node2).animationName||"none";return animationNameCache.set(node2,{value,timestamp:now2}),value}function Presence_layer($$anchor,$$props){push$1($$props,!0);const presenceState=new Presence({open:boxWith$1(()=>$$props.open),ref:$$props.ref});var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(), -node_1=first_child(fragment_1);snippet(node_1,()=>$$props.presence??noop$3,()=>({present:presenceState.isPresent})),append($$anchor2,fragment_1)};if_block(node2,$$render=>{($$props.forceMount||$$props.open||presenceState.isPresent)&&$$render(consequent)})}append($$anchor,fragment),pop()}function Popover$1($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1);PopoverRootState. -create({open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())}),Floating_layer($$anchor,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}function clamp(n,min2,max2){return Math.min(max2,Math.max(min2,n))}const scrollAreaAttrs=createBitsAttrs({component:"scroll-area",parts:["root","viewpo\ -rt","corner","thumb","scrollbar"]}),ScrollAreaRootContext=new Context$1("ScrollArea.Root"),ScrollAreaScrollbarContext=new Context$1("ScrollArea.Scrollbar"),ScrollAreaScrollbarVisibleContext=new Context$1("ScrollArea.ScrollbarVisible"),ScrollAreaScrollbarAxisContext=new Context$1("ScrollArea.ScrollbarAxis"),ScrollAreaScrollbarSharedContext=new Context$1("ScrollArea.ScrollbarShared");class ScrollAreaRootState{static create(opts){return ScrollAreaRootContext.set(new ScrollAreaRootState(opts))}opts;attachment;#scrollAreaNode=state$1( -null);get scrollAreaNode(){return get$4(this.#scrollAreaNode)}set scrollAreaNode(value){set$1(this.#scrollAreaNode,value,!0)}#viewportNode=state$1(null);get viewportNode(){return get$4(this.#viewportNode)}set viewportNode(value){set$1(this.#viewportNode,value,!0)}#contentNode=state$1(null);get contentNode(){return get$4(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}#scrollbarXNode=state$1(null);get scrollbarXNode(){return get$4(this.#scrollbarXNode)}set scrollbarXNode(value){ -set$1(this.#scrollbarXNode,value,!0)}#scrollbarYNode=state$1(null);get scrollbarYNode(){return get$4(this.#scrollbarYNode)}set scrollbarYNode(value){set$1(this.#scrollbarYNode,value,!0)}#cornerWidth=state$1(0);get cornerWidth(){return get$4(this.#cornerWidth)}set cornerWidth(value){set$1(this.#cornerWidth,value,!0)}#cornerHeight=state$1(0);get cornerHeight(){return get$4(this.#cornerHeight)}set cornerHeight(value){set$1(this.#cornerHeight,value,!0)}#scrollbarXEnabled=state$1(!1);get scrollbarXEnabled(){ -return get$4(this.#scrollbarXEnabled)}set scrollbarXEnabled(value){set$1(this.#scrollbarXEnabled,value,!0)}#scrollbarYEnabled=state$1(!1);get scrollbarYEnabled(){return get$4(this.#scrollbarYEnabled)}set scrollbarYEnabled(value){set$1(this.#scrollbarYEnabled,value,!0)}domContext;constructor(opts){this.opts=opts,this.attachment=attachRef(opts.ref,v=>this.scrollAreaNode=v),this.domContext=new DOMContext(opts.ref)}#props=user_derived(()=>({id:this.opts.id.current,dir:this.opts.dir.current,style:{position:"\ -relative","--bits-scroll-area-corner-height":`${this.cornerHeight}px`,"--bits-scroll-area-corner-width":`${this.cornerWidth}px`},[scrollAreaAttrs.root]:"",...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaViewportState{static create(opts){return new ScrollAreaViewportState(opts,ScrollAreaRootContext.get())}opts;root;attachment;#contentId=simpleBox(useId());#contentRef=simpleBox(null);contentAttachment=attachRef(this.#contentRef, -v=>this.root.contentNode=v);constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(opts.ref,v=>this.root.viewportNode=v)}#props=user_derived(()=>({id:this.opts.id.current,style:{overflowX:this.root.scrollbarXEnabled?"scroll":"hidden",overflowY:this.root.scrollbarYEnabled?"scroll":"hidden"},[scrollAreaAttrs.viewport]:"",...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}#contentProps=user_derived(()=>({id:this.#contentId. -current,"data-scroll-area-content":"",style:{minWidth:this.root.scrollbarXEnabled?"fit-content":void 0},...this.contentAttachment}));get contentProps(){return get$4(this.#contentProps)}set contentProps(value){set$1(this.#contentProps,value)}}class ScrollAreaScrollbarState{static create(opts){return ScrollAreaScrollbarContext.set(new ScrollAreaScrollbarState(opts,ScrollAreaRootContext.get()))}opts;root;#isHorizontal=user_derived(()=>this.opts.orientation.current==="horizontal");get isHorizontal(){ -return get$4(this.#isHorizontal)}set isHorizontal(value){set$1(this.#isHorizontal,value)}#hasThumb=state$1(!1);get hasThumb(){return get$4(this.#hasThumb)}set hasThumb(value){set$1(this.#hasThumb,value,!0)}constructor(opts,root2){this.opts=opts,this.root=root2,watch$1(()=>this.isHorizontal,isHorizontal=>isHorizontal?(this.root.scrollbarXEnabled=!0,()=>{this.root.scrollbarXEnabled=!1}):(this.root.scrollbarYEnabled=!0,()=>{this.root.scrollbarYEnabled=!1}))}}class ScrollAreaScrollbarHoverState{static create(){ -return new ScrollAreaScrollbarHoverState(ScrollAreaScrollbarContext.get())}scrollbar;root;#isVisible=state$1(!1);get isVisible(){return get$4(this.#isVisible)}set isVisible(value){set$1(this.#isVisible,value,!0)}constructor(scrollbar){this.scrollbar=scrollbar,this.root=scrollbar.root,user_effect(()=>{const scrollAreaNode=this.root.scrollAreaNode,hideDelay=this.root.opts.scrollHideDelay.current;let hideTimer=0;if(!scrollAreaNode)return;const handlePointerEnter=()=>{this.root.domContext.clearTimeout( -hideTimer),untrack$1(()=>this.isVisible=!0)},handlePointerLeave=()=>{hideTimer&&this.root.domContext.clearTimeout(hideTimer),hideTimer=this.root.domContext.setTimeout(()=>{untrack$1(()=>{this.scrollbar.hasThumb=!1,this.isVisible=!1})},hideDelay)},unsubListeners=executeCallbacks(on(scrollAreaNode,"pointerenter",handlePointerEnter),on(scrollAreaNode,"pointerleave",handlePointerLeave));return()=>{this.root.domContext.getWindow().clearTimeout(hideTimer),unsubListeners()}})}#props=user_derived(()=>({ -"data-state":this.isVisible?"visible":"hidden"}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaScrollbarScrollState{static create(){return new ScrollAreaScrollbarScrollState(ScrollAreaScrollbarContext.get())}scrollbar;root;machine=new StateMachine("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"\ -interacting"}});#isHidden=user_derived(()=>this.machine.state.current==="hidden");get isHidden(){return get$4(this.#isHidden)}set isHidden(value){set$1(this.#isHidden,value)}constructor(scrollbar){this.scrollbar=scrollbar,this.root=scrollbar.root;const debounceScrollend=useDebounce(()=>this.machine.dispatch("SCROLL_END"),100);user_effect(()=>{const _state=this.machine.state.current,scrollHideDelay=this.root.opts.scrollHideDelay.current;if(_state==="idle"){const hideTimer=this.root.domContext.setTimeout( -()=>this.machine.dispatch("HIDE"),scrollHideDelay);return()=>this.root.domContext.clearTimeout(hideTimer)}}),user_effect(()=>{const viewportNode=this.root.viewportNode;if(!viewportNode)return;const scrollDirection=this.scrollbar.isHorizontal?"scrollLeft":"scrollTop";let prevScrollPos=viewportNode[scrollDirection];return on(viewportNode,"scroll",()=>{const scrollPos=viewportNode[scrollDirection];prevScrollPos!==scrollPos&&(this.machine.dispatch("SCROLL"),debounceScrollend()),prevScrollPos=scrollPos})}), -this.onpointerenter=this.onpointerenter.bind(this),this.onpointerleave=this.onpointerleave.bind(this)}onpointerenter(_){this.machine.dispatch("POINTER_ENTER")}onpointerleave(_){this.machine.dispatch("POINTER_LEAVE")}#props=user_derived(()=>({"data-state":this.machine.state.current==="hidden"?"hidden":"visible",onpointerenter:this.onpointerenter,onpointerleave:this.onpointerleave}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaScrollbarAutoState{static create(){ -return new ScrollAreaScrollbarAutoState(ScrollAreaScrollbarContext.get())}scrollbar;root;#isVisible=state$1(!1);get isVisible(){return get$4(this.#isVisible)}set isVisible(value){set$1(this.#isVisible,value,!0)}constructor(scrollbar){this.scrollbar=scrollbar,this.root=scrollbar.root;const handleResize=useDebounce(()=>{const viewportNode=this.root.viewportNode;if(!viewportNode)return;const isOverflowX=viewportNode.offsetWidth<viewportNode.scrollWidth,isOverflowY=viewportNode.offsetHeight<viewportNode. -scrollHeight;this.isVisible=this.scrollbar.isHorizontal?isOverflowX:isOverflowY},10);new SvelteResizeObserver(()=>this.root.viewportNode,handleResize),new SvelteResizeObserver(()=>this.root.contentNode,handleResize)}#props=user_derived(()=>({"data-state":this.isVisible?"visible":"hidden"}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaScrollbarVisibleState{static create(){return ScrollAreaScrollbarVisibleContext.set(new ScrollAreaScrollbarVisibleState( -ScrollAreaScrollbarContext.get()))}scrollbar;root;#thumbNode=state$1(null);get thumbNode(){return get$4(this.#thumbNode)}set thumbNode(value){set$1(this.#thumbNode,value,!0)}#pointerOffset=state$1(0);get pointerOffset(){return get$4(this.#pointerOffset)}set pointerOffset(value){set$1(this.#pointerOffset,value,!0)}#sizes=state$1({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}});get sizes(){return get$4(this.#sizes)}set sizes(value){set$1(this.#sizes,value)}#thumbRatio=user_derived( -()=>getThumbRatio(this.sizes.viewport,this.sizes.content));get thumbRatio(){return get$4(this.#thumbRatio)}set thumbRatio(value){set$1(this.#thumbRatio,value)}#hasThumb=user_derived(()=>this.thumbRatio>0&&this.thumbRatio<1);get hasThumb(){return get$4(this.#hasThumb)}set hasThumb(value){set$1(this.#hasThumb,value)}#prevTransformStyle=state$1("");get prevTransformStyle(){return get$4(this.#prevTransformStyle)}set prevTransformStyle(value){set$1(this.#prevTransformStyle,value,!0)}constructor(scrollbar){ -this.scrollbar=scrollbar,this.root=scrollbar.root,user_effect(()=>{this.scrollbar.hasThumb=this.hasThumb}),user_effect(()=>{!this.scrollbar.hasThumb&&this.thumbNode&&(this.prevTransformStyle=this.thumbNode.style.transform)})}setSizes(sizes){this.sizes=sizes}getScrollPosition(pointerPos,dir){return getScrollPositionFromPointer({pointerPos,pointerOffset:this.pointerOffset,sizes:this.sizes,dir})}onThumbPointerUp(){this.pointerOffset=0}onThumbPointerDown(pointerPos){this.pointerOffset=pointerPos}xOnThumbPositionChange(){ -if(!(this.root.viewportNode&&this.thumbNode))return;const scrollPos=this.root.viewportNode.scrollLeft,transformStyle=`translate3d(${getThumbOffsetFromScroll({scrollPos,sizes:this.sizes,dir:this.root.opts.dir.current})}px, 0, 0)`;this.thumbNode.style.transform=transformStyle,this.prevTransformStyle=transformStyle}xOnWheelScroll(scrollPos){this.root.viewportNode&&(this.root.viewportNode.scrollLeft=scrollPos)}xOnDragScroll(pointerPos){this.root.viewportNode&&(this.root.viewportNode.scrollLeft=this. -getScrollPosition(pointerPos,this.root.opts.dir.current))}yOnThumbPositionChange(){if(!(this.root.viewportNode&&this.thumbNode))return;const scrollPos=this.root.viewportNode.scrollTop,transformStyle=`translate3d(0, ${getThumbOffsetFromScroll({scrollPos,sizes:this.sizes})}px, 0)`;this.thumbNode.style.transform=transformStyle,this.prevTransformStyle=transformStyle}yOnWheelScroll(scrollPos){this.root.viewportNode&&(this.root.viewportNode.scrollTop=scrollPos)}yOnDragScroll(pointerPos){this.root.viewportNode&& -(this.root.viewportNode.scrollTop=this.getScrollPosition(pointerPos,this.root.opts.dir.current))}}class ScrollAreaScrollbarXState{static create(opts){return ScrollAreaScrollbarAxisContext.set(new ScrollAreaScrollbarXState(opts,ScrollAreaScrollbarVisibleContext.get()))}opts;scrollbarVis;root;scrollbar;attachment;#computedStyle=state$1();get computedStyle(){return get$4(this.#computedStyle)}set computedStyle(value){set$1(this.#computedStyle,value,!0)}constructor(opts,scrollbarVis){this.opts=opts,this. -scrollbarVis=scrollbarVis,this.root=scrollbarVis.root,this.scrollbar=scrollbarVis.scrollbar,this.attachment=attachRef(this.scrollbar.opts.ref,v=>this.root.scrollbarXNode=v),user_effect(()=>{this.scrollbar.opts.ref.current&&this.opts.mounted.current&&(this.computedStyle=getComputedStyle(this.scrollbar.opts.ref.current))}),user_effect(()=>{this.onResize()})}onThumbPointerDown=pointerPos=>{this.scrollbarVis.onThumbPointerDown(pointerPos.x)};onDragScroll=pointerPos=>{this.scrollbarVis.xOnDragScroll( -pointerPos.x)};onThumbPointerUp=()=>{this.scrollbarVis.onThumbPointerUp()};onThumbPositionChange=()=>{this.scrollbarVis.xOnThumbPositionChange()};onWheelScroll=(e,maxScrollPos)=>{if(!this.root.viewportNode)return;const scrollPos=this.root.viewportNode.scrollLeft+e.deltaX;this.scrollbarVis.xOnWheelScroll(scrollPos),isScrollingWithinScrollbarBounds(scrollPos,maxScrollPos)&&e.preventDefault()};onResize=()=>{this.scrollbar.opts.ref.current&&this.root.viewportNode&&this.computedStyle&&this.scrollbarVis. -setSizes({content:this.root.viewportNode.scrollWidth,viewport:this.root.viewportNode.offsetWidth,scrollbar:{size:this.scrollbar.opts.ref.current.clientWidth,paddingStart:toInt(this.computedStyle.paddingLeft),paddingEnd:toInt(this.computedStyle.paddingRight)}})};#thumbSize=user_derived(()=>getThumbSize(this.scrollbarVis.sizes));get thumbSize(){return get$4(this.#thumbSize)}set thumbSize(value){set$1(this.#thumbSize,value)}#props=user_derived(()=>({id:this.scrollbar.opts.id.current,"data-orientati\ -on":"horizontal",style:{bottom:0,left:this.root.opts.dir.current==="rtl"?"var(--bits-scroll-area-corner-width)":0,right:this.root.opts.dir.current==="ltr"?"var(--bits-scroll-area-corner-width)":0,"--bits-scroll-area-thumb-width":`${this.thumbSize}px`},...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaScrollbarYState{static create(opts){return ScrollAreaScrollbarAxisContext.set(new ScrollAreaScrollbarYState(opts,ScrollAreaScrollbarVisibleContext. -get()))}opts;scrollbarVis;root;scrollbar;attachment;#computedStyle=state$1();get computedStyle(){return get$4(this.#computedStyle)}set computedStyle(value){set$1(this.#computedStyle,value,!0)}constructor(opts,scrollbarVis){this.opts=opts,this.scrollbarVis=scrollbarVis,this.root=scrollbarVis.root,this.scrollbar=scrollbarVis.scrollbar,this.attachment=attachRef(this.scrollbar.opts.ref,v=>this.root.scrollbarYNode=v),user_effect(()=>{this.scrollbar.opts.ref.current&&this.opts.mounted.current&&(this.computedStyle= -getComputedStyle(this.scrollbar.opts.ref.current))}),user_effect(()=>{this.onResize()}),this.onThumbPointerDown=this.onThumbPointerDown.bind(this),this.onDragScroll=this.onDragScroll.bind(this),this.onThumbPointerUp=this.onThumbPointerUp.bind(this),this.onThumbPositionChange=this.onThumbPositionChange.bind(this),this.onWheelScroll=this.onWheelScroll.bind(this),this.onResize=this.onResize.bind(this)}onThumbPointerDown(pointerPos){this.scrollbarVis.onThumbPointerDown(pointerPos.y)}onDragScroll(pointerPos){ -this.scrollbarVis.yOnDragScroll(pointerPos.y)}onThumbPointerUp(){this.scrollbarVis.onThumbPointerUp()}onThumbPositionChange(){this.scrollbarVis.yOnThumbPositionChange()}onWheelScroll(e,maxScrollPos){if(!this.root.viewportNode)return;const scrollPos=this.root.viewportNode.scrollTop+e.deltaY;this.scrollbarVis.yOnWheelScroll(scrollPos),isScrollingWithinScrollbarBounds(scrollPos,maxScrollPos)&&e.preventDefault()}onResize(){this.scrollbar.opts.ref.current&&this.root.viewportNode&&this.computedStyle&& -this.scrollbarVis.setSizes({content:this.root.viewportNode.scrollHeight,viewport:this.root.viewportNode.offsetHeight,scrollbar:{size:this.scrollbar.opts.ref.current.clientHeight,paddingStart:toInt(this.computedStyle.paddingTop),paddingEnd:toInt(this.computedStyle.paddingBottom)}})}#thumbSize=user_derived(()=>getThumbSize(this.scrollbarVis.sizes));get thumbSize(){return get$4(this.#thumbSize)}set thumbSize(value){set$1(this.#thumbSize,value)}#props=user_derived(()=>({id:this.scrollbar.opts.id.current, -"data-orientation":"vertical",style:{top:0,right:this.root.opts.dir.current==="ltr"?0:void 0,left:this.root.opts.dir.current==="rtl"?0:void 0,bottom:"var(--bits-scroll-area-corner-height)","--bits-scroll-area-thumb-height":`${this.thumbSize}px`},...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaScrollbarSharedState{static create(){return ScrollAreaScrollbarSharedContext.set(new ScrollAreaScrollbarSharedState(ScrollAreaScrollbarAxisContext. -get()))}scrollbarState;root;scrollbarVis;scrollbar;#rect=state$1(null);get rect(){return get$4(this.#rect)}set rect(value){set$1(this.#rect,value)}#prevWebkitUserSelect=state$1("");get prevWebkitUserSelect(){return get$4(this.#prevWebkitUserSelect)}set prevWebkitUserSelect(value){set$1(this.#prevWebkitUserSelect,value,!0)}handleResize;handleThumbPositionChange;handleWheelScroll;handleThumbPointerDown;handleThumbPointerUp;#maxScrollPos=user_derived(()=>this.scrollbarVis.sizes.content-this.scrollbarVis. -sizes.viewport);get maxScrollPos(){return get$4(this.#maxScrollPos)}set maxScrollPos(value){set$1(this.#maxScrollPos,value)}constructor(scrollbarState){this.scrollbarState=scrollbarState,this.root=scrollbarState.root,this.scrollbarVis=scrollbarState.scrollbarVis,this.scrollbar=scrollbarState.scrollbarVis.scrollbar,this.handleResize=useDebounce(()=>this.scrollbarState.onResize(),10),this.handleThumbPositionChange=this.scrollbarState.onThumbPositionChange,this.handleWheelScroll=this.scrollbarState. -onWheelScroll,this.handleThumbPointerDown=this.scrollbarState.onThumbPointerDown,this.handleThumbPointerUp=this.scrollbarState.onThumbPointerUp,user_effect(()=>{const maxScrollPos=this.maxScrollPos,scrollbarNode=this.scrollbar.opts.ref.current;this.root.viewportNode;const handleWheel=e=>{const node2=e.target;scrollbarNode?.contains(node2)&&this.handleWheelScroll(e,maxScrollPos)};return on(this.root.domContext.getDocument(),"wheel",handleWheel,{passive:!1})}),user_pre_effect(()=>{this.scrollbarVis. -sizes,untrack$1(()=>this.handleThumbPositionChange())}),new SvelteResizeObserver(()=>this.scrollbar.opts.ref.current,this.handleResize),new SvelteResizeObserver(()=>this.root.contentNode,this.handleResize),this.onpointerdown=this.onpointerdown.bind(this),this.onpointermove=this.onpointermove.bind(this),this.onpointerup=this.onpointerup.bind(this),this.onlostpointercapture=this.onlostpointercapture.bind(this)}handleDragScroll(e){if(!this.rect)return;const x=e.clientX-this.rect.left,y=e.clientY-this. -rect.top;this.scrollbarState.onDragScroll({x,y})}#cleanupPointerState(){this.rect!==null&&(this.root.domContext.getDocument().body.style.webkitUserSelect=this.prevWebkitUserSelect,this.root.viewportNode&&(this.root.viewportNode.style.scrollBehavior=""),this.rect=null)}onpointerdown(e){if(e.button!==0)return;e.target.setPointerCapture(e.pointerId),this.rect=this.scrollbar.opts.ref.current?.getBoundingClientRect()??null,this.prevWebkitUserSelect=this.root.domContext.getDocument().body.style.webkitUserSelect, -this.root.domContext.getDocument().body.style.webkitUserSelect="none",this.root.viewportNode&&(this.root.viewportNode.style.scrollBehavior="auto"),this.handleDragScroll(e)}onpointermove(e){this.handleDragScroll(e)}onpointerup(e){const target2=e.target;target2.hasPointerCapture(e.pointerId)&&target2.releasePointerCapture(e.pointerId),this.#cleanupPointerState()}onlostpointercapture(_){this.#cleanupPointerState()}#props=user_derived(()=>mergeProps({...this.scrollbarState.props,style:{position:"abs\ -olute",...this.scrollbarState.props.style},[scrollAreaAttrs.scrollbar]:"",onpointerdown:this.onpointerdown,onpointermove:this.onpointermove,onpointerup:this.onpointerup,onlostpointercapture:this.onlostpointercapture}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaThumbImplState{static create(opts){return new ScrollAreaThumbImplState(opts,ScrollAreaScrollbarSharedContext.get())}opts;scrollbarState;attachment;#root;#removeUnlinkedScrollListener=state$1();#debounceScrollEnd=useDebounce( -()=>{get$4(this.#removeUnlinkedScrollListener)&&(get$4(this.#removeUnlinkedScrollListener)(),set$1(this.#removeUnlinkedScrollListener,void 0))},100);constructor(opts,scrollbarState){this.opts=opts,this.scrollbarState=scrollbarState,this.#root=scrollbarState.root,this.attachment=attachRef(this.opts.ref,v=>this.scrollbarState.scrollbarVis.thumbNode=v),user_effect(()=>{const viewportNode=this.#root.viewportNode;if(!viewportNode)return;const handleScroll=()=>{if(this.#debounceScrollEnd(),!get$4(this.#removeUnlinkedScrollListener)){ -const listener=addUnlinkedScrollListener(viewportNode,this.scrollbarState.handleThumbPositionChange);set$1(this.#removeUnlinkedScrollListener,listener,!0),this.scrollbarState.handleThumbPositionChange()}};return untrack$1(()=>this.scrollbarState.handleThumbPositionChange()),on(viewportNode,"scroll",handleScroll)}),this.onpointerdowncapture=this.onpointerdowncapture.bind(this),this.onpointerup=this.onpointerup.bind(this)}onpointerdowncapture(e){const thumb=e.target;if(!thumb)return;const thumbRect=thumb. -getBoundingClientRect(),x=e.clientX-thumbRect.left,y=e.clientY-thumbRect.top;this.scrollbarState.handleThumbPointerDown({x,y})}onpointerup(_){this.scrollbarState.handleThumbPointerUp()}#props=user_derived(()=>({id:this.opts.id.current,"data-state":this.scrollbarState.scrollbarVis.hasThumb?"visible":"hidden",style:{width:"var(--bits-scroll-area-thumb-width)",height:"var(--bits-scroll-area-thumb-height)",transform:this.scrollbarState.scrollbarVis.prevTransformStyle},onpointerdowncapture:this.onpointerdowncapture, -onpointerup:this.onpointerup,[scrollAreaAttrs.thumb]:"",...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaCornerImplState{static create(opts){return new ScrollAreaCornerImplState(opts,ScrollAreaRootContext.get())}opts;root;attachment;#width=state$1(0);#height=state$1(0);#hasSize=user_derived(()=>!!(get$4(this.#width)&&get$4(this.#height)));get hasSize(){return get$4(this.#hasSize)}set hasSize(value){set$1(this.#hasSize,value)}constructor(opts,root2){ -this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref),new SvelteResizeObserver(()=>this.root.scrollbarXNode,()=>{const height=this.root.scrollbarXNode?.offsetHeight||0;this.root.cornerHeight=height,set$1(this.#height,height,!0)}),new SvelteResizeObserver(()=>this.root.scrollbarYNode,()=>{const width=this.root.scrollbarYNode?.offsetWidth||0;this.root.cornerWidth=width,set$1(this.#width,width,!0)})}#props=user_derived(()=>({id:this.opts.id.current,style:{width:get$4(this.#width), -height:get$4(this.#height),position:"absolute",right:this.root.opts.dir.current==="ltr"?0:void 0,left:this.root.opts.dir.current==="rtl"?0:void 0,bottom:0},[scrollAreaAttrs.corner]:"",...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}function toInt(value){return value?Number.parseInt(value,10):0}function getThumbRatio(viewportSize,contentSize){const ratio=viewportSize/contentSize;return Number.isNaN(ratio)?0:ratio}function getThumbSize(sizes){ -const ratio=getThumbRatio(sizes.viewport,sizes.content),scrollbarPadding=sizes.scrollbar.paddingStart+sizes.scrollbar.paddingEnd,thumbSize=(sizes.scrollbar.size-scrollbarPadding)*ratio;return Math.max(thumbSize,18)}function getScrollPositionFromPointer({pointerPos,pointerOffset,sizes,dir="ltr"}){const thumbSizePx=getThumbSize(sizes),thumbCenter=thumbSizePx/2,offset2=pointerOffset||thumbCenter,thumbOffsetFromEnd=thumbSizePx-offset2,minPointerPos=sizes.scrollbar.paddingStart+offset2,maxPointerPos=sizes. -scrollbar.size-sizes.scrollbar.paddingEnd-thumbOffsetFromEnd,maxScrollPos=sizes.content-sizes.viewport,scrollRange=dir==="ltr"?[0,maxScrollPos]:[maxScrollPos*-1,0];return linearScale([minPointerPos,maxPointerPos],scrollRange)(pointerPos)}function getThumbOffsetFromScroll({scrollPos,sizes,dir="ltr"}){const thumbSizePx=getThumbSize(sizes),scrollbarPadding=sizes.scrollbar.paddingStart+sizes.scrollbar.paddingEnd,scrollbar=sizes.scrollbar.size-scrollbarPadding,maxScrollPos=sizes.content-sizes.viewport, -maxThumbPos=scrollbar-thumbSizePx,scrollClampRange=dir==="ltr"?[0,maxScrollPos]:[maxScrollPos*-1,0],scrollWithoutMomentum=clamp(scrollPos,scrollClampRange[0],scrollClampRange[1]);return linearScale([0,maxScrollPos],[0,maxThumbPos])(scrollWithoutMomentum)}function linearScale(input,output){return value=>{if(input[0]===input[1]||output[0]===output[1])return output[0];const ratio=(output[1]-output[0])/(input[1]-input[0]);return output[0]+ratio*(value-input[0])}}function isScrollingWithinScrollbarBounds(scrollPos,maxScrollPos){ -return scrollPos>0&&scrollPos<maxScrollPos}function addUnlinkedScrollListener(node2,handler){let prevPosition={left:node2.scrollLeft,top:node2.scrollTop},rAF=0;const win=getWindow$1(node2);return function loop2(){const position2={left:node2.scrollLeft,top:node2.scrollTop},isHorizontalScroll=prevPosition.left!==position2.left,isVerticalScroll=prevPosition.top!==position2.top;(isHorizontalScroll||isVerticalScroll)&&handler(),prevPosition=position2,rAF=win.requestAnimationFrame(loop2)}(),()=>win.cancelAnimationFrame( -rAF)}var root_2$1e=from_html("<div><!></div>");function Scroll_area$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),type2=prop($$props,"type",3,"hover"),dir=prop($$props,"dir",3,"ltr"),scrollHideDelay=prop($$props,"scrollHideDelay",3,600),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id","type","dir","scrollHideDelay","children","child"]);const rootState=ScrollAreaRootState.create( -{type:boxWith$1(()=>type2()),dir:boxWith$1(()=>dir()),scrollHideDelay:boxWith$1(()=>scrollHideDelay()),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,rootState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1e(); -attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root$1J=from_html("<div><div><!></div></div>");function Scroll_area_viewport($$anchor,$$props){const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","ref","id","children"]);const viewportState=ScrollAreaViewportState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,viewportState.props)),mergedContentProps=user_derived(()=>mergeProps({},viewportState.contentProps));var div=root$1J();attribute_effect(div,()=>({...get$4(mergedProps)}));var div_1=child(div);attribute_effect(div_1,()=>({...get$4(mergedContentProps)}));var node2=child(div_1); -snippet(node2,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor,div),pop()}var root_2$1d=from_html("<div><!></div>");function Scroll_area_scrollbar_shared($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","children"]);const scrollbarSharedState=ScrollAreaScrollbarSharedState.create(),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarSharedState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{ -var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1d();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}function Scroll_area_scrollbar_x($$anchor,$$props){ -push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]);const isMounted=new IsMounted,scrollbarXState=ScrollAreaScrollbarXState.create({mounted:boxWith$1(()=>isMounted.current)}),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarXState.props));Scroll_area_scrollbar_shared($$anchor,spread_props(()=>get$4(mergedProps))),pop()}function Scroll_area_scrollbar_y($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]); -const isMounted=new IsMounted,scrollbarYState=ScrollAreaScrollbarYState.create({mounted:boxWith$1(()=>isMounted.current)}),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarYState.props));Scroll_area_scrollbar_shared($$anchor,spread_props(()=>get$4(mergedProps))),pop()}function Scroll_area_scrollbar_visible($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]);const scrollbarVisibleState=ScrollAreaScrollbarVisibleState.create();var fragment=comment$2(), -node2=first_child(fragment);{var consequent=$$anchor2=>{Scroll_area_scrollbar_x($$anchor2,spread_props(()=>restProps))},alternate=$$anchor2=>{Scroll_area_scrollbar_y($$anchor2,spread_props(()=>restProps))};if_block(node2,$$render=>{scrollbarVisibleState.scrollbar.opts.orientation.current==="horizontal"?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}function Scroll_area_scrollbar_auto($$anchor,$$props){push$1($$props,!0);let forceMount=prop($$props,"forceMount",3,!1), -restProps=rest_props($$props,["$$slots","$$events","$$legacy","forceMount"]);const scrollbarAutoState=ScrollAreaScrollbarAutoState.create(),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarAutoState.props));{const presence=$$anchor2=>{Scroll_area_scrollbar_visible($$anchor2,spread_props(()=>get$4(mergedProps)))};let $0=user_derived(()=>forceMount()||scrollbarAutoState.isVisible);Presence_layer($$anchor,{get open(){return get$4($0)},get ref(){return scrollbarAutoState.scrollbar.opts.ref}, -presence,$$slots:{presence:!0}})}pop()}function Scroll_area_scrollbar_scroll($$anchor,$$props){push$1($$props,!0);let forceMount=prop($$props,"forceMount",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","forceMount"]);const scrollbarScrollState=ScrollAreaScrollbarScrollState.create(),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarScrollState.props));{const presence=$$anchor2=>{Scroll_area_scrollbar_visible($$anchor2,spread_props(()=>get$4(mergedProps)))};let $0=user_derived( -()=>forceMount()||!scrollbarScrollState.isHidden);Presence_layer($$anchor,spread_props(()=>get$4(mergedProps),{get open(){return get$4($0)},get ref(){return scrollbarScrollState.scrollbar.opts.ref},presence,$$slots:{presence:!0}}))}pop()}function Scroll_area_scrollbar_hover($$anchor,$$props){push$1($$props,!0);let forceMount=prop($$props,"forceMount",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","forceMount"]);const scrollbarHoverState=ScrollAreaScrollbarHoverState.create(), -scrollbarAutoState=ScrollAreaScrollbarAutoState.create(),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarHoverState.props,scrollbarAutoState.props,{"data-state":scrollbarHoverState.isVisible?"visible":"hidden"})),open2=user_derived(()=>forceMount()||scrollbarHoverState.isVisible&&scrollbarAutoState.isVisible);Presence_layer($$anchor,{get open(){return get$4(open2)},get ref(){return scrollbarAutoState.scrollbar.opts.ref},presence:$$anchor2=>{Scroll_area_scrollbar_visible($$anchor2,spread_props( -()=>get$4(mergedProps)))},$$slots:{presence:!0}}),pop()}function Scroll_area_scrollbar$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id","orientation"]);const scrollbarState=ScrollAreaScrollbarState.create({orientation:boxWith$1(()=>$$props.orientation),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),type2=user_derived( -()=>scrollbarState.root.opts.type.current);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Scroll_area_scrollbar_hover($$anchor2,spread_props(()=>restProps,{get id(){return id2()}}))},alternate_2=$$anchor2=>{var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent_1=$$anchor3=>{Scroll_area_scrollbar_scroll($$anchor3,spread_props(()=>restProps,{get id(){return id2()}}))},alternate_1=$$anchor3=>{var fragment_4=comment$2(),node_2=first_child(fragment_4); -{var consequent_2=$$anchor4=>{Scroll_area_scrollbar_auto($$anchor4,spread_props(()=>restProps,{get id(){return id2()}}))},alternate=$$anchor4=>{var fragment_6=comment$2(),node_3=first_child(fragment_6);{var consequent_3=$$anchor5=>{Scroll_area_scrollbar_visible($$anchor5,spread_props(()=>restProps,{get id(){return id2()}}))};if_block(node_3,$$render=>{get$4(type2)==="always"&&$$render(consequent_3)},!0)}append($$anchor4,fragment_6)};if_block(node_2,$$render=>{get$4(type2)==="auto"?$$render(consequent_2): -$$render(alternate,!1)},!0)}append($$anchor3,fragment_4)};if_block(node_1,$$render=>{get$4(type2)==="scroll"?$$render(consequent_1):$$render(alternate_1,!1)},!0)}append($$anchor2,fragment_2)};if_block(node2,$$render=>{get$4(type2)==="hover"?$$render(consequent):$$render(alternate_2,!1)})}append($$anchor,fragment),pop()}var root_2$1c=from_html("<div><!></div>");function Scroll_area_thumb_impl($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["\ -$$slots","$$events","$$legacy","ref","id","child","children","present"]);const isMounted=new IsMounted,thumbState=ScrollAreaThumbImplState.create({id:boxWith$1(()=>$$props.id),ref:boxWith$1(()=>ref2(),v=>ref2(v)),mounted:boxWith$1(()=>isMounted.current)}),mergedProps=user_derived(()=>mergeProps(restProps,thumbState.props,{style:{hidden:!$$props.present}}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet( -node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1c();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}function Scroll_area_thumb($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop( -$$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),forceMount=prop($$props,"forceMount",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","forceMount"]);const scrollbarState=ScrollAreaScrollbarVisibleContext.get();{const presence=($$anchor2,$$arg0)=>{let present=()=>$$arg0?.().present;Scroll_area_thumb_impl($$anchor2,spread_props(()=>restProps,{get id(){return id2()},get present(){return present()},get ref(){return ref2()},set ref($$value){ref2($$value)}}))}; -let $0=user_derived(()=>forceMount()||scrollbarState.hasThumb);Presence_layer($$anchor,{get open(){return get$4($0)},get ref(){return scrollbarState.scrollbar.opts.ref},presence,$$slots:{presence:!0}})}pop()}var root_2$1b=from_html("<div><!></div>");function Scroll_area_corner_impl($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id","children","child"]);const cornerState=ScrollAreaCornerImplState.create( -{id:boxWith$1(()=>$$props.id),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,cornerState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1b();attribute_effect(div,()=>({...get$4(mergedProps)}));var node_2=child(div);snippet(node_2, -()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}function Scroll_area_corner($$anchor,$$props){const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id"]);const scrollAreaState=ScrollAreaRootContext.get(),hasBothScrollbarsVisible=user_derived( -()=>!!(scrollAreaState.scrollbarXNode&&scrollAreaState.scrollbarYNode)),hasCorner=user_derived(()=>scrollAreaState.opts.type.current!=="scroll"&&get$4(hasBothScrollbarsVisible));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Scroll_area_corner_impl($$anchor2,spread_props(()=>restProps,{get id(){return id2()},get ref(){return ref2()},set ref($$value){ref2($$value)}}))};if_block(node2,$$render=>{get$4(hasCorner)&&$$render(consequent)})}append($$anchor,fragment),pop()} -var root$1I=from_html("<!> <!>",1);function Select($$anchor,$$props){push$1($$props,!0);let value=prop($$props,"value",15),onValueChange=prop($$props,"onValueChange",3,noop$1),name=prop($$props,"name",3,""),disabled=prop($$props,"disabled",3,!1),open2=prop($$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1),loop2=prop($$props,"loop",3,!1),scrollAlignment=prop($$props,"scrollAlignment",3,"nearest"),required2=prop( -$$props,"required",3,!1),items2=prop($$props,"items",19,()=>[]),allowDeselect=prop($$props,"allowDeselect",3,!1);function handleDefaultValue(){value()===void 0&&value($$props.type==="single"?"":[])}handleDefaultValue(),watch$1.pre(()=>value(),()=>{handleDefaultValue()});let inputValue=state$1("");const rootState=SelectRootState.create({type:$$props.type,value:boxWith$1(()=>value(),v=>{value(v),onValueChange()(v)}),disabled:boxWith$1(()=>disabled()),required:boxWith$1(()=>required2()),open:boxWith$1( -()=>open2(),v=>{open2(v),onOpenChange()(v)}),loop:boxWith$1(()=>loop2()),scrollAlignment:boxWith$1(()=>scrollAlignment()),name:boxWith$1(()=>name()),isCombobox:!1,items:boxWith$1(()=>items2()),allowDeselect:boxWith$1(()=>allowDeselect()),inputValue:boxWith$1(()=>get$4(inputValue),v=>set$1(inputValue,v,!0)),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())});var fragment=root$1I(),node2=first_child(fragment);Floating_layer(node2,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(), -node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}});var node_2=sibling(node2,2);{var consequent_1=$$anchor2=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);{var consequent=$$anchor3=>{Select_hidden_input($$anchor3,{get autocomplete(){return $$props.autocomplete}})},alternate=$$anchor3=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);each(node_4,16,()=>rootState.opts.value.current,item=>item,($$anchor4,item)=>{ -Select_hidden_input($$anchor4,{get value(){return item},get autocomplete(){return $$props.autocomplete}})}),append($$anchor3,fragment_4)};if_block(node_3,$$render=>{rootState.opts.value.current.length===0?$$render(consequent):$$render(alternate,!1)})}append($$anchor2,fragment_2)},alternate_1=$$anchor2=>{Select_hidden_input($$anchor2,{get autocomplete(){return $$props.autocomplete},get value(){return rootState.opts.value.current},set value($$value){rootState.opts.value.current=$$value}})};if_block( -node_2,$$render=>{Array.isArray(rootState.opts.value.current)?$$render(consequent_1):$$render(alternate_1,!1)})}append($$anchor,fragment),pop()}var root_3$W=from_html("<button><!></button>");function Select_trigger$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),type2=prop($$props,"type",3,"button"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","child","children","type"]);const triggerState=SelectTriggerState. -create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState.props,{type:type2()}));var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Floating_layer_anchor,($$anchor2,FloatingLayer_Anchor)=>{FloatingLayer_Anchor($$anchor2,{get id(){return id2()},get ref(){return triggerState.opts.ref},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{var consequent=$$anchor4=>{ -var fragment_2=comment$2(),node_2=first_child(fragment_2);snippet(node_2,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor4,fragment_2)},alternate=$$anchor4=>{var button=root_3$W();attribute_effect(button,()=>({...get$4(mergedProps)}));var node_3=child(button);snippet(node_3,()=>$$props.children??noop$3),reset(button),append($$anchor4,button)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor3,fragment_1)},$$slots:{default:!0}})}), -append($$anchor,fragment),pop()}const switchAttrs=createBitsAttrs({component:"switch",parts:["root","thumb"]}),SwitchRootContext=new Context$1("Switch.Root");class SwitchRootState{static create(opts){return SwitchRootContext.set(new SwitchRootState(opts))}opts;attachment;constructor(opts){this.opts=opts,this.attachment=attachRef(opts.ref),this.onkeydown=this.onkeydown.bind(this),this.onclick=this.onclick.bind(this)}#toggle(){this.opts.checked.current=!this.opts.checked.current}onkeydown(e){!(e.key=== -ENTER||e.key===SPACE)||this.opts.disabled.current||(e.preventDefault(),this.#toggle())}onclick(_){this.opts.disabled.current||this.#toggle()}#sharedProps=user_derived(()=>({"data-disabled":boolToEmptyStrOrUndef(this.opts.disabled.current),"data-state":getDataChecked(this.opts.checked.current),"data-required":boolToEmptyStrOrUndef(this.opts.required.current)}));get sharedProps(){return get$4(this.#sharedProps)}set sharedProps(value){set$1(this.#sharedProps,value)}#snippetProps=user_derived(()=>({ -checked:this.opts.checked.current}));get snippetProps(){return get$4(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({...this.sharedProps,id:this.opts.id.current,role:"switch",disabled:boolToTrueOrUndef(this.opts.disabled.current),"aria-checked":getAriaChecked(this.opts.checked.current,!1),"aria-required":boolToStr(this.opts.required.current),[switchAttrs.root]:"",onclick:this.onclick,onkeydown:this.onkeydown,...this.attachment}));get props(){ -return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class SwitchInputState{static create(){return new SwitchInputState(SwitchRootContext.get())}root;#shouldRender=user_derived(()=>this.root.opts.name.current!==void 0);get shouldRender(){return get$4(this.#shouldRender)}set shouldRender(value){set$1(this.#shouldRender,value)}constructor(root2){this.root=root2}#props=user_derived(()=>({type:"checkbox",name:this.root.opts.name.current,value:this.root.opts.value.current,checked:this. -root.opts.checked.current,disabled:this.root.opts.disabled.current,required:this.root.opts.required.current}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class SwitchThumbState{static create(opts){return new SwitchThumbState(opts,SwitchRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(opts.ref)}#snippetProps=user_derived(()=>({checked:this.root.opts.checked.current}));get snippetProps(){return get$4( -this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({...this.root.sharedProps,id:this.opts.id.current,[switchAttrs.thumb]:"",...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}function Switch_input($$anchor,$$props){push$1($$props,!1);const inputState=SwitchInputState.create();init();var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Hidden_input($$anchor2,spread_props( -()=>inputState.props))};if_block(node2,$$render=>{inputState.shouldRender&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_2$1a=from_html("<button><!></button>"),root$1H=from_html("<!> <!>",1);function Switch$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),disabled=prop($$props,"disabled",3,!1),required2=prop($$props,"required",3,!1),checked=prop($$props,"checked",15,!1),value=prop($$props, -"value",3,"on"),name=prop($$props,"name",3,void 0),type2=prop($$props,"type",3,"button"),onCheckedChange=prop($$props,"onCheckedChange",3,noop$1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","children","ref","id","disabled","required","checked","value","name","type","onCheckedChange"]);const rootState=SwitchRootState.create({checked:boxWith$1(()=>checked(),v=>{checked(v),onCheckedChange()?.(v)}),disabled:boxWith$1(()=>disabled()??!1),required:boxWith$1(()=>required2()),value:boxWith$1( -()=>value()),name:boxWith$1(()=>name()),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,rootState.props,{type:type2()}));var fragment=root$1H(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>({props:get$4(mergedProps),...rootState.snippetProps}));snippet(node_1,()=>$$props.child,()=>get$4($0))}append($$anchor2,fragment_1)},alternate=$$anchor2=>{ -var button=root_2$1a();attribute_effect(button,()=>({...get$4(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3,()=>rootState.snippetProps),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}var node_3=sibling(node2,2);Switch_input(node_3,{}),append($$anchor,fragment),pop()}var root_2$19=from_html("<span><!></span>");function Switch_thumb($$anchor,$$props){const uid=props_id();push$1($$props, -!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","children","ref","id"]);const thumbState=SwitchThumbState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,thumbState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived( -()=>({props:get$4(mergedProps),...thumbState.snippetProps}));snippet(node_1,()=>$$props.child,()=>get$4($0))}append($$anchor2,fragment_1)},alternate=$$anchor2=>{var span=root_2$19();attribute_effect(span,()=>({...get$4(mergedProps)}));var node_2=child(span);snippet(node_2,()=>$$props.children??noop$3,()=>thumbState.snippetProps),reset(span),append($$anchor2,span)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}class TimeoutFn{#interval;#cb;#timer=null;constructor(cb,interval){ -this.#cb=cb,this.#interval=interval,this.stop=this.stop.bind(this),this.start=this.start.bind(this),onDestroyEffect(this.stop)}#clear(){this.#timer!==null&&(window.clearTimeout(this.#timer),this.#timer=null)}stop(){this.#clear()}start(...args){this.#clear(),this.#timer=window.setTimeout(()=>{this.#timer=null,this.#cb(...args)},this.#interval)}}const tooltipAttrs=createBitsAttrs({component:"tooltip",parts:["content","trigger"]}),TooltipProviderContext=new Context$1("Tooltip.Provider"),TooltipRootContext=new Context$1( -"Tooltip.Root");class TooltipProviderState{static create(opts){return TooltipProviderContext.set(new TooltipProviderState(opts))}opts;#isOpenDelayed=state$1(!0);get isOpenDelayed(){return get$4(this.#isOpenDelayed)}set isOpenDelayed(value){set$1(this.#isOpenDelayed,value,!0)}isPointerInTransit=simpleBox(!1);#timerFn;#openTooltip=state$1(null);constructor(opts){this.opts=opts,this.#timerFn=new TimeoutFn(()=>{this.isOpenDelayed=!0},this.opts.skipDelayDuration.current)}#startTimer=()=>{this.opts.skipDelayDuration. -current!==0&&this.#timerFn.start()};#clearTimer=()=>{this.#timerFn.stop()};onOpen=tooltip=>{get$4(this.#openTooltip)&&get$4(this.#openTooltip)!==tooltip&&get$4(this.#openTooltip).handleClose(),this.#clearTimer(),this.isOpenDelayed=!1,set$1(this.#openTooltip,tooltip,!0)};onClose=tooltip=>{get$4(this.#openTooltip)===tooltip&&set$1(this.#openTooltip,null),this.#startTimer()};isTooltipOpen=tooltip=>get$4(this.#openTooltip)===tooltip}class TooltipRootState{static create(opts){return TooltipRootContext. -set(new TooltipRootState(opts,TooltipProviderContext.get()))}opts;provider;#delayDuration=user_derived(()=>this.opts.delayDuration.current??this.provider.opts.delayDuration.current);get delayDuration(){return get$4(this.#delayDuration)}set delayDuration(value){set$1(this.#delayDuration,value)}#disableHoverableContent=user_derived(()=>this.opts.disableHoverableContent.current??this.provider.opts.disableHoverableContent.current);get disableHoverableContent(){return get$4(this.#disableHoverableContent)}set disableHoverableContent(value){ -set$1(this.#disableHoverableContent,value)}#disableCloseOnTriggerClick=user_derived(()=>this.opts.disableCloseOnTriggerClick.current??this.provider.opts.disableCloseOnTriggerClick.current);get disableCloseOnTriggerClick(){return get$4(this.#disableCloseOnTriggerClick)}set disableCloseOnTriggerClick(value){set$1(this.#disableCloseOnTriggerClick,value)}#disabled=user_derived(()=>this.opts.disabled.current??this.provider.opts.disabled.current);get disabled(){return get$4(this.#disabled)}set disabled(value){ -set$1(this.#disabled,value)}#ignoreNonKeyboardFocus=user_derived(()=>this.opts.ignoreNonKeyboardFocus.current??this.provider.opts.ignoreNonKeyboardFocus.current);get ignoreNonKeyboardFocus(){return get$4(this.#ignoreNonKeyboardFocus)}set ignoreNonKeyboardFocus(value){set$1(this.#ignoreNonKeyboardFocus,value)}#contentNode=state$1(null);get contentNode(){return get$4(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}contentPresence;#triggerNode=state$1(null);get triggerNode(){ -return get$4(this.#triggerNode)}set triggerNode(value){set$1(this.#triggerNode,value,!0)}#wasOpenDelayed=state$1(!1);#timerFn;#stateAttr=user_derived(()=>this.opts.open.current?get$4(this.#wasOpenDelayed)?"delayed-open":"instant-open":"closed");get stateAttr(){return get$4(this.#stateAttr)}set stateAttr(value){set$1(this.#stateAttr,value)}constructor(opts,provider){this.opts=opts,this.provider=provider,this.#timerFn=new TimeoutFn(()=>{set$1(this.#wasOpenDelayed,!0),this.opts.open.current=!0},this. -delayDuration??0),this.contentPresence=new PresenceManager({open:this.opts.open,ref:boxWith$1(()=>this.contentNode),onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),watch$1(()=>this.delayDuration,()=>{this.delayDuration!==void 0&&(this.#timerFn=new TimeoutFn(()=>{set$1(this.#wasOpenDelayed,!0),this.opts.open.current=!0},this.delayDuration))}),watch$1(()=>this.opts.open.current,isOpen=>{isOpen?this.provider.onOpen(this):this.provider.onClose(this)},{lazy:!0})}handleOpen=()=>{ -this.#timerFn.stop(),set$1(this.#wasOpenDelayed,!1),this.opts.open.current=!0};handleClose=()=>{this.#timerFn.stop(),this.opts.open.current=!1};#handleDelayedOpen=()=>{this.#timerFn.stop();const shouldSkipDelay=!this.provider.isOpenDelayed,delayDuration=this.delayDuration??0;shouldSkipDelay||delayDuration===0?(set$1(this.#wasOpenDelayed,delayDuration>0&&shouldSkipDelay,!0),this.opts.open.current=!0):this.#timerFn.start()};onTriggerEnter=()=>{this.#handleDelayedOpen()};onTriggerLeave=()=>{this.disableHoverableContent? -this.handleClose():this.#timerFn.stop()}}class TooltipTriggerState{static create(opts){return new TooltipTriggerState(opts,TooltipRootContext.get())}opts;root;attachment;#isPointerDown=simpleBox(!1);#hasPointerMoveOpened=state$1(!1);#isDisabled=user_derived(()=>this.opts.disabled.current||this.root.disabled);domContext;#transitCheckTimeout=null;constructor(opts,root2){this.opts=opts,this.root=root2,this.domContext=new DOMContext(opts.ref),this.attachment=attachRef(this.opts.ref,v=>this.root.triggerNode= -v)}#clearTransitCheck=()=>{this.#transitCheckTimeout!==null&&(clearTimeout(this.#transitCheckTimeout),this.#transitCheckTimeout=null)};handlePointerUp=()=>{this.#isPointerDown.current=!1};#onpointerup=()=>{get$4(this.#isDisabled)||(this.#isPointerDown.current=!1)};#onpointerdown=()=>{get$4(this.#isDisabled)||(this.#isPointerDown.current=!0,this.domContext.getDocument().addEventListener("pointerup",()=>{this.handlePointerUp()},{once:!0}))};#onpointerenter=e=>{if(!get$4(this.#isDisabled)&&e.pointerType!== -"touch"){if(this.root.provider.isPointerInTransit.current){this.#clearTransitCheck(),this.#transitCheckTimeout=window.setTimeout(()=>{this.root.provider.isPointerInTransit.current&&(this.root.provider.isPointerInTransit.current=!1,this.root.onTriggerEnter(),set$1(this.#hasPointerMoveOpened,!0))},250);return}this.root.onTriggerEnter(),set$1(this.#hasPointerMoveOpened,!0)}};#onpointermove=e=>{get$4(this.#isDisabled)||e.pointerType!=="touch"&&(get$4(this.#hasPointerMoveOpened)||(this.#clearTransitCheck(), -this.root.provider.isPointerInTransit.current=!1,this.root.onTriggerEnter(),set$1(this.#hasPointerMoveOpened,!0)))};#onpointerleave=()=>{get$4(this.#isDisabled)||(this.#clearTransitCheck(),this.root.onTriggerLeave(),set$1(this.#hasPointerMoveOpened,!1))};#onfocus=e=>{this.#isPointerDown.current||get$4(this.#isDisabled)||this.root.ignoreNonKeyboardFocus&&!isFocusVisible(e.currentTarget)||this.root.handleOpen()};#onblur=()=>{get$4(this.#isDisabled)||this.root.handleClose()};#onclick=()=>{this.root. -disableCloseOnTriggerClick||get$4(this.#isDisabled)||this.root.handleClose()};#props=user_derived(()=>({id:this.opts.id.current,"aria-describedby":this.root.opts.open.current?this.root.contentNode?.id:void 0,"data-state":this.root.stateAttr,"data-disabled":boolToEmptyStrOrUndef(get$4(this.#isDisabled)),"data-delay-duration":`${this.root.delayDuration}`,[tooltipAttrs.trigger]:"",tabindex:get$4(this.#isDisabled)?void 0:this.opts.tabindex.current,disabled:this.opts.disabled.current,onpointerup:this.#onpointerup, -onpointerdown:this.#onpointerdown,onpointerenter:this.#onpointerenter,onpointermove:this.#onpointermove,onpointerleave:this.#onpointerleave,onfocus:this.#onfocus,onblur:this.#onblur,onclick:this.#onclick,...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}}class TooltipContentState{static create(opts){return new TooltipContentState(opts,TooltipRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment= -attachRef(this.opts.ref,v=>this.root.contentNode=v),new SafePolygon({triggerNode:()=>this.root.triggerNode,contentNode:()=>this.root.contentNode,enabled:()=>this.root.opts.open.current&&!this.root.disableHoverableContent,onPointerExit:()=>{this.root.provider.isTooltipOpen(this.root)&&this.root.handleClose()}}),onMountEffect(()=>on(window,"scroll",e=>{const target2=e.target;target2&&target2.contains(this.root.triggerNode)&&this.root.handleClose()}))}onInteractOutside=e=>{if(isElement$1(e.target)&& -this.root.triggerNode?.contains(e.target)&&this.root.disableCloseOnTriggerClick){e.preventDefault();return}this.opts.onInteractOutside.current(e),!e.defaultPrevented&&this.root.handleClose()};onEscapeKeydown=e=>{this.opts.onEscapeKeydown.current?.(e),!e.defaultPrevented&&this.root.handleClose()};onOpenAutoFocus=e=>{e.preventDefault()};onCloseAutoFocus=e=>{e.preventDefault()};get shouldRender(){return this.root.contentPresence.shouldRender}#snippetProps=user_derived(()=>({open:this.root.opts.open. -current}));get snippetProps(){return get$4(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,"data-state":this.root.stateAttr,"data-disabled":boolToEmptyStrOrUndef(this.root.disabled),style:{outline:"none"},[tooltipAttrs.content]:"",...this.attachment}));get props(){return get$4(this.#props)}set props(value){set$1(this.#props,value)}popperProps={onInteractOutside:this.onInteractOutside,onEscapeKeydown:this.onEscapeKeydown, -onOpenAutoFocus:this.onOpenAutoFocus,onCloseAutoFocus:this.onCloseAutoFocus}}function Tooltip($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1);TooltipRootState.create({open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),delayDuration:boxWith$1(()=>$$props.delayDuration),disableCloseOnTriggerClick:boxWith$1(()=>$$props.disableCloseOnTriggerClick),disableHoverableContent:boxWith$1( -()=>$$props.disableHoverableContent),ignoreNonKeyboardFocus:boxWith$1(()=>$$props.ignoreNonKeyboardFocus),disabled:boxWith$1(()=>$$props.disabled),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())}),Floating_layer($$anchor,{tooltip:!0,children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}var root_4$A=from_html("<div><div><!></div></div>"),root_9$o=from_html( -"<div><div><!></div></div>");function Tooltip_content$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),ref2=prop($$props,"ref",15,null),side=prop($$props,"side",3,"top"),sideOffset=prop($$props,"sideOffset",3,0),align=prop($$props,"align",3,"center"),avoidCollisions=prop($$props,"avoidCollisions",3,!0),arrowPadding=prop($$props,"arrowPadding",3,0),sticky=prop($$props,"sticky",3,"partial"),hideWhenDetached=prop($$props,"hideWhenDetached", -3,!1),collisionPadding=prop($$props,"collisionPadding",3,0),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),forceMount=prop($$props,"forceMount",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","id","ref","side","sideOffset","align","avoidCollisions","arrowPadding","sticky","strategy","hideWhenDetached","collisionPadding","onInteractOutside","onEscapeKeydown","forceMount","style"]);const contentState=TooltipContentState. -create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),onInteractOutside:boxWith$1(()=>onInteractOutside()),onEscapeKeydown:boxWith$1(()=>onEscapeKeydown())}),floatingProps=user_derived(()=>({side:side(),sideOffset:sideOffset(),align:align(),avoidCollisions:avoidCollisions(),arrowPadding:arrowPadding(),sticky:sticky(),hideWhenDetached:hideWhenDetached(),collisionPadding:collisionPadding(),strategy:$$props.strategy})),mergedProps=user_derived(()=>mergeProps(restProps,get$4(floatingProps), -contentState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{{const popper=($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars("tooltip")},{style:$$props.style}));var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor4=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);{let $02=user_derived(()=>({ -props:get$4(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$4($02))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$A();attribute_effect(div,()=>({...wrapperProps()}));var div_1=child(div);attribute_effect(div_1,()=>({...get$4(finalProps)}));var node_3=child(div_1);snippet(node_3,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor4,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent): -$$render(alternate,!1)})}append($$anchor3,fragment_2)};let $0=user_derived(()=>contentState.root.disableHoverableContent?"none":"auto");Popper_layer_force_mount($$anchor2,spread_props(()=>get$4(mergedProps),()=>contentState.popperProps,{get enabled(){return contentState.root.opts.open.current},get id(){return id2()},trapFocus:!1,loop:!1,preventScroll:!1,forceMount:!0,get ref(){return contentState.opts.ref},tooltip:!0,get shouldRender(){return contentState.shouldRender},get contentPointerEvents(){ -return get$4($0)},popper,$$slots:{popper:!0}}))}},alternate_2=$$anchor2=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);{var consequent_3=$$anchor3=>{{const popper=($$anchor4,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars("tooltip")},{style:$$props.style}));var fragment_6=comment$2(),node_5=first_child(fragment_6);{var consequent_2=$$anchor5=>{var fragment_7=comment$2(), -node_6=first_child(fragment_7);{let $02=user_derived(()=>({props:get$4(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_6,()=>$$props.child,()=>get$4($02))}append($$anchor5,fragment_7)},alternate_1=$$anchor5=>{var div_2=root_9$o();attribute_effect(div_2,()=>({...wrapperProps()}));var div_3=child(div_2);attribute_effect(div_3,()=>({...get$4(finalProps)}));var node_7=child(div_3);snippet(node_7,()=>$$props.children??noop$3),reset(div_3),reset(div_2),append($$anchor5, -div_2)};if_block(node_5,$$render=>{$$props.child?$$render(consequent_2):$$render(alternate_1,!1)})}append($$anchor4,fragment_6)};let $0=user_derived(()=>contentState.root.disableHoverableContent?"none":"auto");Popper_layer($$anchor3,spread_props(()=>get$4(mergedProps),()=>contentState.popperProps,{get open(){return contentState.root.opts.open.current},get id(){return id2()},trapFocus:!1,loop:!1,preventScroll:!1,forceMount:!1,get ref(){return contentState.opts.ref},tooltip:!0,get shouldRender(){return contentState. -shouldRender},get contentPointerEvents(){return get$4($0)},popper,$$slots:{popper:!0}}))}};if_block(node_4,$$render=>{forceMount()||$$render(consequent_3)},!0)}append($$anchor2,fragment_4)};if_block(node2,$$render=>{forceMount()?$$render(consequent_1):$$render(alternate_2,!1)})}append($$anchor,fragment),pop()}var root_3$V=from_html("<button><!></button>");function Tooltip_trigger$1($$anchor,$$props){const uid=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid)),disabled=prop( -$$props,"disabled",3,!1),type2=prop($$props,"type",3,"button"),tabindex=prop($$props,"tabindex",3,0),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","id","disabled","type","tabindex","ref"]);const triggerState=TooltipTriggerState.create({id:boxWith$1(()=>id2()),disabled:boxWith$1(()=>disabled()??!1),tabindex:boxWith$1(()=>tabindex()??0),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState. -props,{type:type2()}));Floating_layer_anchor($$anchor,{get id(){return id2()},get ref(){return triggerState.opts.ref},tooltip:!0,children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{var fragment_2=comment$2(),node_1=first_child(fragment_2);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var button=root_3$V();attribute_effect(button,()=>({...get$4(mergedProps)})); -var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor3,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}function Tooltip_arrow($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref"]);Floating_layer_arrow($$anchor,spread_props(()=>restProps,{get ref(){return ref2()}, -set ref($$value){ref2($$value)}})),pop()}function Tooltip_provider($$anchor,$$props){push$1($$props,!0);let delayDuration=prop($$props,"delayDuration",3,700),disableCloseOnTriggerClick=prop($$props,"disableCloseOnTriggerClick",3,!1),disableHoverableContent=prop($$props,"disableHoverableContent",3,!1),disabled=prop($$props,"disabled",3,!1),ignoreNonKeyboardFocus=prop($$props,"ignoreNonKeyboardFocus",3,!1),skipDelayDuration=prop($$props,"skipDelayDuration",3,300);TooltipProviderState.create({delayDuration:boxWith$1( -()=>delayDuration()),disableCloseOnTriggerClick:boxWith$1(()=>disableCloseOnTriggerClick()),disableHoverableContent:boxWith$1(()=>disableHoverableContent()),disabled:boxWith$1(()=>disabled()),ignoreNonKeyboardFocus:boxWith$1(()=>ignoreNonKeyboardFocus()),skipDelayDuration:boxWith$1(()=>skipDelayDuration())});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}function Tooltip_trigger($$anchor,$$props){push$1($$props,!0); -let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Tooltip_trigger$1,($$anchor2,TooltipPrimitive_Trigger)=>{TooltipPrimitive_Trigger($$anchor2,spread_props({"data-slot":"tooltip-trigger"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}var root_3$U=from_html("<div></div>"),root_2$18=from_html("<!> <!>",1);function Tooltip_content($$anchor,$$props){ -push$1($$props,!0);const tooltipContent=$$anchor2=>{var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Tooltip_content$1,($$anchor3,TooltipPrimitive_Content)=>{TooltipPrimitive_Content($$anchor3,spread_props({"data-slot":"tooltip-content",get sideOffset(){return sideOffset()},get side(){return side()},get class(){return get$4(contentClass)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor4,$$slotProps)=>{var fragment_1=root_2$18(), -node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);{const child2=($$anchor5,$$arg0)=>{let props=()=>$$arg0?.().props;var div=root_3$U();attribute_effect(div,$0=>({class:$0,...props()}),[()=>cn$1("z-50 size-2.5 rotate-45 rounded-[2px] bg-primary","data-[side=top]:translate-x-1/2 data-[side=top]:translate-y-[calc(-50%_+_2px)]","data-[side=bottom]:-translate-x-1/2 data-[side=bottom]:-translate-y-[calc(-50%_+_1px)]","data-[side=right]:translate-x\ --[calc(50%_+_2px)] data-[side=right]:translate-y-1/2","data-[side=left]:-translate-y-[calc(50%_-_3px)]",$$props.arrowClasses)]),append($$anchor5,div)};component(node_2,()=>Tooltip_arrow,($$anchor5,TooltipPrimitive_Arrow)=>{TooltipPrimitive_Arrow($$anchor5,{child:child2,$$slots:{child:!0}})})}append($$anchor4,fragment_1)},$$slots:{default:!0}}))}),append($$anchor2,fragment)};let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props,"sideOffset",3,0),side=prop($$props,"side",3,"top"),noPortal=prop( -$$props,"noPortal",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","sideOffset","side","children","arrowClasses","noPortal"]);const contentClass=user_derived(()=>cn$1("z-50 w-fit origin-(--bits-tooltip-content-transform-origin) animate-in rounded-md bg-primary px-3 py-1.5 text-xs text-balance text-primary-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side\ -=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",$$props.class));var fragment_2=comment$2(),node_3=first_child(fragment_2);{var consequent=$$anchor2=>{tooltipContent($$anchor2)},alternate=$$anchor2=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);component(node_4,()=>Portal$2,($$anchor3,TooltipPrimitive_Portal)=>{TooltipPrimitive_Portal($$anchor3,{children:($$anchor4,$$slotProps)=>{tooltipContent($$anchor4)},$$slots:{ -default:!0}})}),append($$anchor2,fragment_4)};if_block(node_3,$$render=>{noPortal()?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment_2),pop()}const Root$5=Tooltip,Provider=Tooltip_provider;var root_4$z=from_html("<p> </p>"),root_1$12=from_html("<!> <!>",1);function ActionIcon($$anchor,$$props){let variant=prop($$props,"variant",3,"ghost"),size2=prop($$props,"size",3,"sm"),className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),iconSize=prop($$props,"icon\ -Size",3,"h-3 w-3");var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$5,($$anchor2,Tooltip_Root)=>{Tooltip_Root($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$12(),node_1=first_child(fragment_1);component(node_1,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor4,{children:($$anchor5,$$slotProps2)=>{{let $0=user_derived(()=>$$props["aria-label"]||$$props.tooltip);Button($$anchor5,{get variant(){return variant()},get size(){return size2()}, -get disabled(){return disabled()},get onclick(){return $$props.onclick},get class(){return`h-6 w-6 p-0 ${className()??""} flex`},get"aria-label"(){return get$4($0)},children:($$anchor6,$$slotProps3)=>{const IconComponent=user_derived(()=>$$props.icon);var fragment_3=comment$2(),node_2=first_child(fragment_3);component(node_2,()=>get$4(IconComponent),($$anchor7,IconComponent_1)=>{IconComponent_1($$anchor7,{get class(){return iconSize()}})}),append($$anchor6,fragment_3)},$$slots:{default:!0}})}},$$slots:{ -default:!0}})});var node_3=sibling(node_1,2);component(node_3,()=>Tooltip_content,($$anchor4,Tooltip_Content)=>{Tooltip_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var p2=root_4$z(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,$$props.tooltip)),append($$anchor5,p2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment)}const defaultAttributes={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24", -fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};var root$1G=from_svg("<svg><!><!></svg>");function Icon($$anchor,$$props){push$1($$props,!0);const color=prop($$props,"color",3,"currentColor"),size2=prop($$props,"size",3,24),strokeWidth=prop($$props,"strokeWidth",3,2),absoluteStrokeWidth=prop($$props,"absoluteStrokeWidth",3,!1),iconNode=prop($$props,"iconNode",19,()=>[]),props=rest_props($$props,["$$slots","$$events","$$legacy","name","color", -"size","strokeWidth","absoluteStrokeWidth","iconNode","children"]);var svg2=root$1G();attribute_effect(svg2,$0=>({...defaultAttributes,...props,width:size2(),height:size2(),stroke:color(),"stroke-width":$0,class:["lucide-icon lucide",$$props.name&&`lucide-${$$props.name}`,$$props.class]}),[()=>absoluteStrokeWidth()?Number(strokeWidth())*24/Number(size2()):strokeWidth()]);var node2=child(svg2);each(node2,17,iconNode,index$2,($$anchor2,$$item)=>{var $$array=user_derived(()=>to_array(get$4($$item), -2));let tag=()=>get$4($$array)[0],attrs=()=>get$4($$array)[1];var fragment=comment$2(),node_1=first_child(fragment);element$4(node_1,tag,!0,($$element,$$anchor3)=>{attribute_effect($$element,()=>({...attrs()}))}),append($$anchor2,fragment)});var node_2=sibling(node2);snippet(node_2,()=>$$props.children??noop$3),reset(svg2),append($$anchor,svg2),pop()}function Arrow_big_up($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path", -{d:"M9 18v-6H5l7-7 7 7h-4v6H9z"}]];Icon($$anchor,spread_props({name:"arrow-big-up"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Arrow_right($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M5 12h14"}],["path",{d:"m12\ - 5 7 7-7 7"}]];Icon($$anchor,spread_props({name:"arrow-right"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Arrow_up($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m5 12 7-7 7 7"}],["path",{d:"M12 19V5"}]];Icon($$anchor, -spread_props({name:"arrow-up"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Book_open_text($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 7v14"}],["path",{d:"M16 12h2"}],["path",{d:"M16 8h2"}],["path",{d:"M3 18a\ -1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"}],["path",{d:"M6 12h2"}],["path",{d:"M6 8h2"}]];Icon($$anchor,spread_props({name:"book-open-text"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Braces($$anchor,$$props){push$1( -$$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"}],["path",{d:"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1"}]];Icon($$anchor,spread_props({name:"braces"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2, -fragment_1)},$$slots:{default:!0}})),pop()}function Brain($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375"}],["path",{d:"M6.003 \ -5.125A3 3 0 0 0 6.401 6.5"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18"}]];Icon($$anchor,spread_props({name:"brain"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Cable($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M17 21v-2a1 1 0 0 1-1-1v-1a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1"}],["path",{d:"M19 15V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V9"}],["path",{d:"M21 21v-2h-4"}],["path",{d:"M3 5h4V3"}],["path",{d:"M7 5a1 1 0 0 1 1 1v1a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1V3"}]];Icon($$anchor,spread_props({name:"cable"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ -var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Check($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M20 6 9 17l-5-5"}]];Icon($$anchor,spread_props({name:"check"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1); -snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Chevron_down($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m6 9 6 6 6-6"}]];Icon($$anchor,spread_props({name:"chevron-down"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3), -append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Chevron_left($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m15 18-6-6 6-6"}]];Icon($$anchor,spread_props({name:"chevron-left"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})), -pop()}function Chevron_up($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m18 15-6-6-6 6"}]];Icon($$anchor,spread_props({name:"chevron-up"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Chevron_right($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m9 18 6-6-6-6"}]];Icon($$anchor,spread_props({name:"chevron-right"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Chevrons_up_down($$anchor,$$props){push$1($$props,!0);let props=rest_props( -$$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m7 15 5 5 5-5"}],["path",{d:"m7 9 5-5 5 5"}]];Icon($$anchor,spread_props({name:"chevrons-up-down"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Circle_alert($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$\ -$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16"}]];Icon($$anchor,spread_props({name:"circle-alert"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Circle_check_big($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335"}],["path",{d:"m9 11 3 3L22 4"}]];Icon($$anchor,spread_props({name:"circle-check-big"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Circle_x($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"m15 9-6 6"}],["path",{d:"m9 9 6 6"}]];Icon($$anchor,spread_props({name:"circle-x"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Clock($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 16 14"}]];Icon($$anchor,spread_props({name:"clock"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Code($$anchor,$$props){push$1($$props, -!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m16 18 6-6-6-6"}],["path",{d:"m8 6-6 6 6 6"}]];Icon($$anchor,spread_props({name:"code"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Copy($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props, -["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]];Icon($$anchor,spread_props({name:"copy"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Database($$anchor,$$props){push$1( -$$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5"}],["path",{d:"M3 12A9 3 0 0 0 21 12"}]];Icon($$anchor,spread_props({name:"database"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Download($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 15V3"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}],["path",{d:"m7 10 5 5 5-5"}]];Icon($$anchor,spread_props({name:"download"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Ellipsis($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"1"}],["circle",{cx:"19",cy:"12",r:"1"}],["circle",{cx:"5",cy:"12",r:"1"}]];Icon($$anchor,spread_props({name:"ellipsis"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function External_link($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M15 3h6v6"}],["path",{d:"M10 14 21 3"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}]];Icon($$anchor,spread_props({name:"external-link"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})), -pop()}function Eye($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"}],["circle",{cx:"12",cy:"12",r:"3"}]];Icon($$anchor,spread_props({name:"eye"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children?? -noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function File_text($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4"}],["path",{d:"M10 9H8"}],["path",{d:"M16 13H8"}],["path",{d:"M16 17H8"}]];Icon($$anchor,spread_props({name:"file-text"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ -var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function File_x($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4"}],["path",{d:"m14.5 12.5-5 5"}],["path",{d:"m9.5 12.5 5 5"}]];Icon($$anchor,spread_props({name:"\ -file-x"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function File$1($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4"}]];Icon( -$$anchor,spread_props({name:"file"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Flask_conical($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.\ -96l5.51-10.08A2 2 0 0 0 10 8V2"}],["path",{d:"M6.453 15h11.094"}],["path",{d:"M8.5 2h7"}]];Icon($$anchor,spread_props({name:"flask-conical"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Folder_open($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]); -const iconNode=[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"}]];Icon($$anchor,spread_props({name:"folder-open"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Funnel($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z"}]];Icon($$anchor,spread_props({name:"funnel"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2, -fragment_1)},$$slots:{default:!0}})),pop()}function Gauge($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m12 14 4-4"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0"}]];Icon($$anchor,spread_props({name:"gauge"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{ -default:!0}})),pop()}function Git_branch($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["line",{x1:"6",x2:"6",y1:"3",y2:"15"}],["circle",{cx:"18",cy:"6",r:"3"}],["circle",{cx:"6",cy:"18",r:"3"}],["path",{d:"M18 9a9 9 0 0 1-9 9"}]];Icon($$anchor,spread_props({name:"git-branch"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props. -children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Globe($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"}],["path",{d:"M2 12h20"}]];Icon($$anchor,spread_props({name:"globe"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1); -snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Heart_off($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["line",{x1:"2",y1:"2",x2:"22",y2:"22"}],["path",{d:"M16.5 16.5 12 21l-7-7c-1.5-1.45-3-3.2-3-5.5a5.5 5.5 0 0 1 2.14-4.35"}],["path",{d:"M8.76 3.1c1.15.22 2.13.78 3.24 1.9 1.5-1.5 2.74-2 4.5-2A5.5 5.5 0 0 1 22 8.5c0 2.12-1.3 3.78-2.67 5.17"}]];Icon($$anchor,spread_props( -{name:"heart-off"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Heart($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5\ - 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"}]];Icon($$anchor,spread_props({name:"heart"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Image$1($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"18",height:"18",x:"3",y:"3", -rx:"2",ry:"2"}],["circle",{cx:"9",cy:"9",r:"2"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"}]];Icon($$anchor,spread_props({name:"image"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Info$1($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legac\ -y"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 16v-4"}],["path",{d:"M12 8h.01"}]];Icon($$anchor,spread_props({name:"info"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Key($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]); -const iconNode=[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4"}],["path",{d:"m21 2-9.6 9.6"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5"}]];Icon($$anchor,spread_props({name:"key"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Layers($$anchor,$$props){push$1($$props,!0);let props=rest_props( -$$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"}]];Icon($$anchor,spread_props({name:"layers"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(), -node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function List_checks($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m3 17 2 2 4-4"}],["path",{d:"m3 7 2 2 4-4"}],["path",{d:"M13 6h8"}],["path",{d:"M13 12h8"}],["path",{d:"M13 18h8"}]];Icon($$anchor,spread_props({name:"list-checks"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ -var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Loader_circle($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56"}]];Icon($$anchor,spread_props({name:"loader-circle"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(), -node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Message_square($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"}]];Icon($$anchor,spread_props({name:"message-square"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(), -node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Mic($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22"}]];Icon($$anchor,spread_props({name:"mic"},()=>props,{get iconNode(){return iconNode}, -children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Minus($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M5 12h14"}]];Icon($$anchor,spread_props({name:"minus"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(), -node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Monitor($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21"}]];Icon($$anchor,spread_props({name:"monitor"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ -var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Moon($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"}]];Icon($$anchor,spread_props({name:"moon"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child( -fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Music($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M9 18V5l12-2v13"}],["circle",{cx:"6",cy:"18",r:"3"}],["circle",{cx:"18",cy:"16",r:"3"}]];Icon($$anchor,spread_props({name:"music"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child( -fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Package($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z"}],["path",{d:"M12 22V12"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["path",{d:"m7.5 4.27 9 5.15"}]];Icon($$anchor, -spread_props({name:"package"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Panel_left($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M9 3v18"}]];Icon($$anchor,spread_props( -{name:"panel-left"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Pencil($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.62\ -2l4.353-1.32a2 2 0 0 0 .83-.497z"}],["path",{d:"m15 5 4 4"}]];Icon($$anchor,spread_props({name:"pencil"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Plus($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M5 12h14"}],[ -"path",{d:"M12 5v14"}]];Icon($$anchor,spread_props({name:"plus"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Power_off($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M18.36 6.64A9 9 0 0 1 20.77 15"}],["path",{d:"M6\ -.16 6.16a9 9 0 1 0 12.68 12.68"}],["path",{d:"M12 2v4"}],["path",{d:"m2 2 20 20"}]];Icon($$anchor,spread_props({name:"power-off"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Power($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[ -["path",{d:"M12 2v10"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04"}]];Icon($$anchor,spread_props({name:"power"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Radio($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M4.9 1\ -9.1C1 15.2 1 8.8 4.9 4.9"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5"}],["circle",{cx:"12",cy:"12",r:"2"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5"}],["path",{d:"M19.1 4.9C23 8.8 23 15.1 19.1 19"}]];Icon($$anchor,spread_props({name:"radio"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Refresh_cw($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"}],["path",{d:"M21 3v5h-5"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"}],["path",{d:"M8 16H3v5"}]];Icon($$anchor,spread_props({name:"refresh-cw"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children?? -noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Rotate_ccw($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}],["path",{d:"M3 3v5h5"}]];Icon($$anchor,spread_props({name:"rotate-ccw"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props. -children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Rotate_cw($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"}],["path",{d:"M21 3v5h-5"}]];Icon($$anchor,spread_props({name:"rotate-cw"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2, -()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Search($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m21 21-4.34-4.34"}],["circle",{cx:"11",cy:"11",r:"8"}]];Icon($$anchor,spread_props({name:"search"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children?? -noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Server($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18"}]];Icon($$anchor,spread_props({name:"server"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ -var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Settings$1($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73\ - 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}],["circle",{cx:"12",cy:"12",r:"3"}]];Icon($$anchor,spread_props({name:"settings"},()=>props,{get iconNode(){return iconNode}, -children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Sparkles($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6\ -.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"}],["path",{d:"M20 3v4"}],["path",{d:"M22 5h-4"}],["path",{d:"M4 17v2"}],["path",{d:"M5 18H3"}]];Icon($$anchor,spread_props({name:"sparkles"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Square_pen($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"}]];Icon($$anchor,spread_props({name:"square-pen"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2, -()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Square($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}]];Icon($$anchor,spread_props({name:"square"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append( -$$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Sun($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"4"}],["path",{d:"M12 2v2"}],["path",{d:"M12 20v2"}],["path",{d:"m4.93 4.93 1.41 1.41"}],["path",{d:"m17.66 17.66 1.41 1.41"}],["path",{d:"M2 12h2"}],["path",{d:"M20 12h2"}],["path",{d:"m6.34 17.66-1.41 1.41"}],["path",{d:"m19.07 4.93-1.41 1.41"}]];Icon($$anchor,spread_props({name:"sun"}, -()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Timer_off($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M10 2h4"}],["path",{d:"M4.6 11a8 8 0 0 0 1.7 8.7 8 8 0 0 0 8.7 1.7"}],["path",{d:"M7.4 7.4a8 8 0 0 1 10.3 1 8 8 0\ - 0 1 .9 10.2"}],["path",{d:"m2 2 20 20"}],["path",{d:"M12 12v-2"}]];Icon($$anchor,spread_props({name:"timer-off"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Trash_2($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M\ -3 6h18"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17"}]];Icon($$anchor,spread_props({name:"trash-2"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Triangle_alert($$anchor,$$props){ -push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}],["path",{d:"M12 9v4"}],["path",{d:"M12 17h.01"}]];Icon($$anchor,spread_props({name:"triangle-alert"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{ -default:!0}})),pop()}function Upload($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 3v12"}],["path",{d:"m17 8-5-5-5 5"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}]];Icon($$anchor,spread_props({name:"upload"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2, -fragment_1)},$$slots:{default:!0}})),pop()}function Whole_word($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"7",cy:"12",r:"3"}],["path",{d:"M10 9v6"}],["circle",{cx:"17",cy:"12",r:"3"}],["path",{d:"M14 7v8"}],["path",{d:"M22 17v1c0 .5-.5 1-1 1H3c-.5 0-1-.5-1-1v-1"}]];Icon($$anchor,spread_props({name:"whole-word"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(), -node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Wrench($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"}]];Icon($$anchor,spread_props({name:"wrench"},()=>props,{get iconNode(){ -return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function X($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];Icon($$anchor,spread_props({name:"x"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ -var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Zap($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"}]];Icon($$anchor,spread_props({name:"zap"}, -()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}var AttachmentType=(AttachmentType2=>(AttachmentType2.AUDIO="AUDIO",AttachmentType2.IMAGE="IMAGE",AttachmentType2.MCP_PROMPT="MCP_PROMPT",AttachmentType2.MCP_RESOURCE="MCP_RESOURCE",AttachmentType2.PDF="PDF",AttachmentType2.TEXT="TEXT",AttachmentType2.LEGACY_CONTEXT= -"context",AttachmentType2))(AttachmentType||{}),ToolCallType=(ToolCallType2=>(ToolCallType2.FUNCTION="function",ToolCallType2))(ToolCallType||{}),AgenticSectionType=(AgenticSectionType2=>(AgenticSectionType2.TEXT="text",AgenticSectionType2.TOOL_CALL="tool_call",AgenticSectionType2.TOOL_CALL_PENDING="tool_call_pending",AgenticSectionType2.TOOL_CALL_STREAMING="tool_call_streaming",AgenticSectionType2.REASONING="reasoning",AgenticSectionType2.REASONING_PENDING="reasoning_pending",AgenticSectionType2))( -AgenticSectionType||{}),ChatMessageStatsView=(ChatMessageStatsView2=>(ChatMessageStatsView2.GENERATION="generation",ChatMessageStatsView2.READING="reading",ChatMessageStatsView2.TOOLS="tools",ChatMessageStatsView2.SUMMARY="summary",ChatMessageStatsView2))(ChatMessageStatsView||{}),ReasoningFormat=(ReasoningFormat2=>(ReasoningFormat2.NONE="none",ReasoningFormat2.AUTO="auto",ReasoningFormat2))(ReasoningFormat||{}),MessageRole=(MessageRole2=>(MessageRole2.USER="user",MessageRole2.ASSISTANT="assista\ -nt",MessageRole2.SYSTEM="system",MessageRole2.TOOL="tool",MessageRole2))(MessageRole||{}),MessageType=(MessageType2=>(MessageType2.ROOT="root",MessageType2.TEXT="text",MessageType2.THINK="think",MessageType2.SYSTEM="system",MessageType2))(MessageType||{}),ContentPartType=(ContentPartType2=>(ContentPartType2.TEXT="text",ContentPartType2.IMAGE_URL="image_url",ContentPartType2.INPUT_AUDIO="input_audio",ContentPartType2))(ContentPartType||{}),ErrorDialogType=(ErrorDialogType2=>(ErrorDialogType2.TIMEOUT= -"timeout",ErrorDialogType2.SERVER="server",ErrorDialogType2))(ErrorDialogType||{}),FileTypeCategory=(FileTypeCategory2=>(FileTypeCategory2.IMAGE="image",FileTypeCategory2.AUDIO="audio",FileTypeCategory2.PDF="pdf",FileTypeCategory2.TEXT="text",FileTypeCategory2))(FileTypeCategory||{}),SpecialFileType=(SpecialFileType2=>(SpecialFileType2.MCP_PROMPT="mcp-prompt",SpecialFileType2))(SpecialFileType||{}),FileTypeImage=(FileTypeImage2=>(FileTypeImage2.JPEG="jpeg",FileTypeImage2.PNG="png",FileTypeImage2. -GIF="gif",FileTypeImage2.WEBP="webp",FileTypeImage2.SVG="svg",FileTypeImage2))(FileTypeImage||{}),FileTypeAudio=(FileTypeAudio2=>(FileTypeAudio2.MP3="mp3",FileTypeAudio2.WAV="wav",FileTypeAudio2.WEBM="webm",FileTypeAudio2))(FileTypeAudio||{}),FileTypePdf=(FileTypePdf2=>(FileTypePdf2.PDF="pdf",FileTypePdf2))(FileTypePdf||{}),FileTypeText=(FileTypeText2=>(FileTypeText2.PLAIN_TEXT="plainText",FileTypeText2.MARKDOWN="md",FileTypeText2.ASCIIDOC="asciidoc",FileTypeText2.JAVASCRIPT="js",FileTypeText2.TYPESCRIPT= -"ts",FileTypeText2.JSX="jsx",FileTypeText2.TSX="tsx",FileTypeText2.CSS="css",FileTypeText2.HTML="html",FileTypeText2.JSON="json",FileTypeText2.XML="xml",FileTypeText2.YAML="yaml",FileTypeText2.CSV="csv",FileTypeText2.LOG="log",FileTypeText2.PYTHON="python",FileTypeText2.JAVA="java",FileTypeText2.CPP="cpp",FileTypeText2.PHP="php",FileTypeText2.RUBY="ruby",FileTypeText2.GO="go",FileTypeText2.RUST="rust",FileTypeText2.SHELL="shell",FileTypeText2.SQL="sql",FileTypeText2.R="r",FileTypeText2.SCALA="sc\ -ala",FileTypeText2.KOTLIN="kotlin",FileTypeText2.SWIFT="swift",FileTypeText2.DART="dart",FileTypeText2.VUE="vue",FileTypeText2.SVELTE="svelte",FileTypeText2.LATEX="latex",FileTypeText2.BIBTEX="bibtex",FileTypeText2.CUDA="cuda",FileTypeText2.VULKAN="vulkan",FileTypeText2.HASKELL="haskell",FileTypeText2.CSHARP="csharp",FileTypeText2.PROPERTIES="properties",FileTypeText2))(FileTypeText||{}),FileExtensionImage=(FileExtensionImage2=>(FileExtensionImage2.JPG=".jpg",FileExtensionImage2.JPEG=".jpeg",FileExtensionImage2. -PNG=".png",FileExtensionImage2.GIF=".gif",FileExtensionImage2.WEBP=".webp",FileExtensionImage2.SVG=".svg",FileExtensionImage2))(FileExtensionImage||{}),FileExtensionAudio=(FileExtensionAudio2=>(FileExtensionAudio2.MP3=".mp3",FileExtensionAudio2.WAV=".wav",FileExtensionAudio2))(FileExtensionAudio||{}),FileExtensionPdf=(FileExtensionPdf2=>(FileExtensionPdf2.PDF=".pdf",FileExtensionPdf2))(FileExtensionPdf||{}),FileExtensionText=(FileExtensionText2=>(FileExtensionText2.TXT=".txt",FileExtensionText2. -MD=".md",FileExtensionText2.ADOC=".adoc",FileExtensionText2.JS=".js",FileExtensionText2.TS=".ts",FileExtensionText2.JSX=".jsx",FileExtensionText2.TSX=".tsx",FileExtensionText2.CSS=".css",FileExtensionText2.HTML=".html",FileExtensionText2.HTM=".htm",FileExtensionText2.JSON=".json",FileExtensionText2.XML=".xml",FileExtensionText2.YAML=".yaml",FileExtensionText2.YML=".yml",FileExtensionText2.CSV=".csv",FileExtensionText2.LOG=".log",FileExtensionText2.PY=".py",FileExtensionText2.JAVA=".java",FileExtensionText2. -CPP=".cpp",FileExtensionText2.C=".c",FileExtensionText2.H=".h",FileExtensionText2.PHP=".php",FileExtensionText2.RB=".rb",FileExtensionText2.GO=".go",FileExtensionText2.RS=".rs",FileExtensionText2.SH=".sh",FileExtensionText2.BAT=".bat",FileExtensionText2.SQL=".sql",FileExtensionText2.R=".r",FileExtensionText2.SCALA=".scala",FileExtensionText2.KT=".kt",FileExtensionText2.SWIFT=".swift",FileExtensionText2.DART=".dart",FileExtensionText2.VUE=".vue",FileExtensionText2.SVELTE=".svelte",FileExtensionText2. -TEX=".tex",FileExtensionText2.BIB=".bib",FileExtensionText2.CU=".cu",FileExtensionText2.CUH=".cuh",FileExtensionText2.COMP=".comp",FileExtensionText2.HPP=".hpp",FileExtensionText2.HS=".hs",FileExtensionText2.PROPERTIES=".properties",FileExtensionText2.CS=".cs",FileExtensionText2))(FileExtensionText||{}),MimeTypePrefix=(MimeTypePrefix2=>(MimeTypePrefix2.IMAGE="image/",MimeTypePrefix2.TEXT="text",MimeTypePrefix2))(MimeTypePrefix||{}),MimeTypeIncludes=(MimeTypeIncludes2=>(MimeTypeIncludes2.JSON="js\ -on",MimeTypeIncludes2.JAVASCRIPT="javascript",MimeTypeIncludes2.TYPESCRIPT="typescript",MimeTypeIncludes2))(MimeTypeIncludes||{}),UriPattern=(UriPattern2=>(UriPattern2.DATABASE_KEYWORD="database",UriPattern2.DATABASE_SCHEME="db://",UriPattern2))(UriPattern||{}),MimeTypeApplication=(MimeTypeApplication2=>(MimeTypeApplication2.PDF="application/pdf",MimeTypeApplication2.OCTET_STREAM="application/octet-stream",MimeTypeApplication2))(MimeTypeApplication||{}),MimeTypeAudio=(MimeTypeAudio2=>(MimeTypeAudio2. +mergedProps=user_derived(()=>mergeProps(restProps,contentState.props)),effectiveTrapFocus=user_derived(()=>trapFocus()&&contentState.shouldTrapFocus);function handleOpenAutoFocus(e){contentState.shouldTrapFocus||e.preventDefault(),onOpenAutoFocus()(e)}var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{Popper_layer_force_mount($$anchor2,spread_props(()=>get$3(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get enabled(){return contentState. +root.opts.open.current},get id(){return id2()},get trapFocus(){return get$3(effectiveTrapFocus)},get preventScroll(){return preventScroll()},loop:!0,forceMount:!0,get customAnchor(){return customAnchor()},onOpenAutoFocus:handleOpenAutoFocus,get onCloseAutoFocus(){return onCloseAutoFocus()},get shouldRender(){return contentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars( +"popover")},{style:$$props.style}));var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor4=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);{let $0=user_derived(()=>({props:get$3(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$3($0))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$E();attribute_effect(div,()=>({...wrapperProps()}));var div_1=child(div);attribute_effect(div_1, +()=>({...get$3(finalProps)}));var node_3=child(div_1);snippet(node_3,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor4,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor3,fragment_2)},$$slots:{popper:!0}}))},consequent_3=$$anchor2=>{Popper_layer($$anchor2,spread_props(()=>get$3(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get open(){return contentState.root.opts.open.current},get id(){ +return id2()},get trapFocus(){return get$3(effectiveTrapFocus)},get preventScroll(){return preventScroll()},loop:!0,forceMount:!1,get customAnchor(){return customAnchor()},onOpenAutoFocus:handleOpenAutoFocus,get onCloseAutoFocus(){return onCloseAutoFocus()},get shouldRender(){return contentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars("po\ +pover")},{style:$$props.style}));var fragment_5=comment$2(),node_4=first_child(fragment_5);{var consequent_2=$$anchor4=>{var fragment_6=comment$2(),node_5=first_child(fragment_6);{let $0=user_derived(()=>({props:get$3(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_5,()=>$$props.child,()=>get$3($0))}append($$anchor4,fragment_6)},alternate_1=$$anchor4=>{var div_2=root_8$v();attribute_effect(div_2,()=>({...wrapperProps()}));var div_3=child(div_2);attribute_effect( +div_3,()=>({...get$3(finalProps)}));var node_6=child(div_3);snippet(node_6,()=>$$props.children??noop$3),reset(div_3),reset(div_2),append($$anchor4,div_2)};if_block(node_4,$$render=>{$$props.child?$$render(consequent_2):$$render(alternate_1,-1)})}append($$anchor3,fragment_5)},$$slots:{popper:!0}}))};if_block(node2,$$render=>{forceMount()?$$render(consequent_1):forceMount()||$$render(consequent_3,1)})}append($$anchor,fragment),pop()}var root_3$Z=from_html("<button><!></button>");function Popover_trigger$1($$anchor,$$props){ +const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),type2=prop($$props,"type",3,"button"),disabled=prop($$props,"disabled",3,!1),openOnHover=prop($$props,"openOnHover",3,!1),openDelay=prop($$props,"openDelay",3,700),closeDelay=prop($$props,"closeDelay",3,300),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","id","ref","type","disabled","openOnHover","openDelay","closeDelay"]);const triggerState=PopoverTriggerState. +create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),disabled:boxWith$1(()=>!!disabled()),openOnHover:boxWith$1(()=>openOnHover()),openDelay:boxWith$1(()=>openDelay()),closeDelay:boxWith$1(()=>closeDelay())}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState.props,{type:type2()}));Floating_layer_anchor($$anchor,{get id(){return id2()},get ref(){return triggerState.opts.ref},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{ +var fragment_2=comment$2(),node_1=first_child(fragment_2);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var button=root_3$Z();attribute_effect(button,()=>({...get$3(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor3,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment_1)},$$slots:{default:!0}}), +pop()}function Dialog($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1);DialogRootState.create({variant:boxWith$1(()=>"dialog"),open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor, +fragment),pop()}var root_2$1q=from_html("<button><!></button>");function Dialog_close($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),disabled=prop($$props,"disabled",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","id","ref","disabled"]);const closeState=DialogCloseState.create({variant:boxWith$1(()=>"close"),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2( +v)),disabled:boxWith$1(()=>!!disabled())}),mergedProps=user_derived(()=>mergeProps(restProps,closeState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1q();attribute_effect(button,()=>({...get$3(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props. +children??noop$3),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_6$A=from_html("<!> <!>",1),root_8$u=from_html("<!> <div><!></div>",1);function Dialog_content$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),forceMount=prop($$props,"forceMount",3,!1),onCloseAutoFocus=prop($$props,"onCl\ +oseAutoFocus",3,noop$1),onOpenAutoFocus=prop($$props,"onOpenAutoFocus",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),trapFocus=prop($$props,"trapFocus",3,!0),preventScroll=prop($$props,"preventScroll",3,!0),restoreScrollDelay=prop($$props,"restoreScrollDelay",3,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","children","child","ref","forceMount","onCloseAutoFocus","onOpenAutoFocus","onEscap\ +eKeydown","onInteractOutside","trapFocus","preventScroll","restoreScrollDelay"]);const contentState=DialogContentState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,contentState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent_2=$$anchor2=>{Focus_scope($$anchor2,{get ref(){return contentState.opts.ref},loop:!0,get trapFocus(){return trapFocus()},get enabled(){return contentState.root.opts.open. +current},get onOpenAutoFocus(){return onOpenAutoFocus()},get onCloseAutoFocus(){return onCloseAutoFocus()},focusScope:($$anchor3,$$arg0)=>{let focusScopeProps=()=>$$arg0?.().props;Escape_layer($$anchor3,spread_props(()=>get$3(mergedProps),{get enabled(){return contentState.root.opts.open.current},get ref(){return contentState.opts.ref},onEscapeKeydown:e=>{onEscapeKeydown()(e),!e.defaultPrevented&&contentState.root.handleClose()},children:($$anchor4,$$slotProps)=>{Dismissible_layer($$anchor4,spread_props( +()=>get$3(mergedProps),{get ref(){return contentState.opts.ref},get enabled(){return contentState.root.opts.open.current},onInteractOutside:e=>{onInteractOutside()(e),!e.defaultPrevented&&contentState.root.handleClose()},children:($$anchor5,$$slotProps2)=>{Text_selection_layer($$anchor5,spread_props(()=>get$3(mergedProps),{get ref(){return contentState.opts.ref},get enabled(){return contentState.root.opts.open.current},children:($$anchor6,$$slotProps3)=>{var fragment_5=comment$2(),node_1=first_child( +fragment_5);{var consequent_1=$$anchor7=>{var fragment_6=root_6$A(),node_2=first_child(fragment_6);{var consequent=$$anchor8=>{Scroll_lock($$anchor8,{get preventScroll(){return preventScroll()},get restoreScrollDelay(){return restoreScrollDelay()}})};if_block(node_2,$$render=>{contentState.root.opts.open.current&&$$render(consequent)})}var node_3=sibling(node_2,2);{let $0=user_derived(()=>({props:mergeProps(get$3(mergedProps),focusScopeProps()),...contentState.snippetProps}));snippet(node_3,()=>$$props. +child,()=>get$3($0))}append($$anchor7,fragment_6)},alternate=$$anchor7=>{var fragment_8=root_8$u(),node_4=first_child(fragment_8);Scroll_lock(node_4,{get preventScroll(){return preventScroll()}});var div=sibling(node_4,2);attribute_effect(div,$0=>({...$0}),[()=>mergeProps(get$3(mergedProps),focusScopeProps())]);var node_5=child(div);snippet(node_5,()=>$$props.children??noop$3),reset(div),append($$anchor7,fragment_8)};if_block(node_1,$$render=>{$$props.child?$$render(consequent_1):$$render(alternate, +-1)})}append($$anchor6,fragment_5)},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{default:!0}}))},$$slots:{focusScope:!0}})};if_block(node2,$$render=>{(contentState.shouldRender||forceMount())&&$$render(consequent_2)})}append($$anchor,fragment),pop()}function Menu($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),dir=prop($$props,"dir",3,"ltr"),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1), +variant=prop($$props,"_internal_variant",3,"dropdown-menu"),shouldSkipExitAnimation=prop($$props,"_internal_should_skip_exit_animation",3,void 0);const root2=MenuRootState.create({variant:boxWith$1(()=>variant()),dir:boxWith$1(()=>dir()),onClose:()=>{open2(!1),onOpenChange()(!1)},shouldSkipExitAnimation:()=>shouldSkipExitAnimation()?.()??!1});MenuMenuState.create({open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())},root2),Floating_layer( +$$anchor,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}var root_4$D=from_html("<div><div><!></div></div>"),root_8$t=from_html("<div><div><!></div></div>");function Dropdown_menu_content$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),loop2=prop($$props,"l\ +oop",3,!0),onInteractOutside=prop($$props,"onInteractOutside",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),onCloseAutoFocus=prop($$props,"onCloseAutoFocus",3,noop$1),forceMount=prop($$props,"forceMount",3,!1),trapFocus=prop($$props,"trapFocus",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","child","children","ref","loop","onInteractOutside","onEscapeKeydown","onCloseAutoFocus","forceMount","trapFocus","style"]);const contentState=MenuContentState.create( +{id:boxWith$1(()=>id2()),loop:boxWith$1(()=>loop2()),ref:boxWith$1(()=>ref2(),v=>ref2(v)),onCloseAutoFocus:boxWith$1(()=>onCloseAutoFocus())}),mergedProps=user_derived(()=>mergeProps(restProps,contentState.props));function handleInteractOutside(e){if(contentState.handleInteractOutside(e),!e.defaultPrevented&&(onInteractOutside()(e),!e.defaultPrevented)){if(e.target&&e.target instanceof Element){const subContentSelector=`[${contentState.parentMenu.root.getBitsAttr("sub-content")}]`;if(e.target.closest( +subContentSelector))return}contentState.parentMenu.onClose()}}function handleEscapeKeydown(e){onEscapeKeydown()(e),!e.defaultPrevented&&contentState.parentMenu.onClose()}var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{Popper_layer_force_mount($$anchor2,spread_props(()=>get$3(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get enabled(){return contentState.parentMenu.opts.open.current},onInteractOutside:handleInteractOutside,onEscapeKeydown:handleEscapeKeydown, +get trapFocus(){return trapFocus()},get loop(){return loop2()},forceMount:!0,get id(){return id2()},get shouldRender(){return contentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars("dropdown-menu")},{style:$$props.style}));var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor4=>{var fragment_3=comment$2(),node_2=first_child( +fragment_3);{let $0=user_derived(()=>({props:get$3(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$3($0))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$D();attribute_effect(div,()=>({...wrapperProps()}));var div_1=child(div);attribute_effect(div_1,()=>({...get$3(finalProps)}));var node_3=child(div_1);snippet(node_3,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor4,div)};if_block(node_1,$$render=>{ +$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor3,fragment_2)},$$slots:{popper:!0}}))},consequent_3=$$anchor2=>{Popper_layer($$anchor2,spread_props(()=>get$3(mergedProps),()=>contentState.popperProps,{get ref(){return contentState.opts.ref},get open(){return contentState.parentMenu.opts.open.current},onInteractOutside:handleInteractOutside,onEscapeKeydown:handleEscapeKeydown,get trapFocus(){return trapFocus()},get loop(){return loop2()},forceMount:!1,get id(){return id2()}, +get shouldRender(){return contentState.shouldRender},popper:($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars("dropdown-menu")},{style:$$props.style}));var fragment_5=comment$2(),node_4=first_child(fragment_5);{var consequent_2=$$anchor4=>{var fragment_6=comment$2(),node_5=first_child(fragment_6);{let $0=user_derived(()=>({props:get$3(finalProps),wrapperProps:wrapperProps(), +...contentState.snippetProps}));snippet(node_5,()=>$$props.child,()=>get$3($0))}append($$anchor4,fragment_6)},alternate_1=$$anchor4=>{var div_2=root_8$t();attribute_effect(div_2,()=>({...wrapperProps()}));var div_3=child(div_2);attribute_effect(div_3,()=>({...get$3(finalProps)}));var node_6=child(div_3);snippet(node_6,()=>$$props.children??noop$3),reset(div_3),reset(div_2),append($$anchor4,div_2)};if_block(node_4,$$render=>{$$props.child?$$render(consequent_2):$$render(alternate_1,-1)})}append($$anchor3, +fragment_5)},$$slots:{popper:!0}}))};if_block(node2,$$render=>{forceMount()?$$render(consequent_1):forceMount()||$$render(consequent_3,1)})}append($$anchor,fragment),pop()}var root_3$Y=from_html("<button><!></button>");function Menu_trigger($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),disabled=prop($$props,"disabled",3,!1),type2=prop($$props,"type",3,"button"),restProps=rest_props($$props,["$$slots","\ +$$events","$$legacy","id","ref","child","children","disabled","type"]);const triggerState=DropdownMenuTriggerState.create({id:boxWith$1(()=>id2()),disabled:boxWith$1(()=>disabled()??!1),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState.props,{type:type2()}));Floating_layer_anchor($$anchor,{get id(){return id2()},get ref(){return triggerState.opts.ref},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{ +var fragment_2=comment$2(),node_1=first_child(fragment_2);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var button=root_3$Y();attribute_effect(button,()=>({...get$3(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor3,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment_1)},$$slots:{default:!0}}), +pop()}const labelAttrs=createBitsAttrs({component:"label",parts:["root"]});class LabelRootState{static create(opts){return new LabelRootState(opts)}opts;attachment;constructor(opts){this.opts=opts,this.attachment=attachRef(this.opts.ref),this.onmousedown=this.onmousedown.bind(this)}onmousedown(e){e.detail>1&&e.preventDefault()}#props=user_derived(()=>({id:this.opts.id.current,[labelAttrs.root]:"",onmousedown:this.onmousedown,...this.attachment}));get props(){return get$3(this.#props)}set props(value){ +set$1(this.#props,value)}}var root_2$1p=from_html("<label><!></label>");function Label$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","id","ref","for"]);const rootState=LabelRootState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,rootState.props,{for:$$props. +for}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var label=root_2$1p();attribute_effect(label,()=>({...get$3(mergedProps),for:$$props.for}));var node_2=child(label);snippet(node_2,()=>$$props.children??noop$3),reset(label),append($$anchor2,label)};if_block(node2,$$render=>{$$props.child? +$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}class SvelteResizeObserver{#node;#onResize;constructor(node2,onResize){this.#node=node2,this.#onResize=onResize,this.handler=this.handler.bind(this),user_effect(this.handler)}handler(){let rAF=0;const _node=this.#node();if(!_node)return;const resizeObserver=new ResizeObserver(()=>{cancelAnimationFrame(rAF),rAF=window.requestAnimationFrame(this.#onResize)});return resizeObserver.observe(_node),()=>{window.cancelAnimationFrame( +rAF),resizeObserver.unobserve(_node)}}}class Presence{opts;present;#afterAnimations;#isPresent=state$1(!1);#hasMounted=!1;#transitionStatus=state$1(void 0);#transitionFrame=null;constructor(opts){this.opts=opts,this.present=this.opts.open,set$1(this.#isPresent,opts.open.current,!0),this.#afterAnimations=new AnimationsComplete({ref:this.opts.ref,afterTick:this.opts.open}),onDestroyEffect(()=>this.#clearTransitionFrame()),watch$1(()=>this.present.current,isOpen=>{if(!this.#hasMounted){this.#hasMounted= +!0;return}this.#clearTransitionFrame(),isOpen&&set$1(this.#isPresent,!0),set$1(this.#transitionStatus,isOpen?"starting":"ending",!0),isOpen&&(this.#transitionFrame=window.requestAnimationFrame(()=>{this.#transitionFrame=null,this.present.current&&set$1(this.#transitionStatus,void 0)})),this.#afterAnimations.run(()=>{isOpen===this.present.current&&(isOpen||set$1(this.#isPresent,!1),set$1(this.#transitionStatus,void 0))})})}#_isPresent=user_derived(()=>get$3(this.#isPresent));get isPresent(){return get$3( +this.#_isPresent)}set isPresent(value){set$1(this.#_isPresent,value)}get transitionStatus(){return get$3(this.#transitionStatus)}#clearTransitionFrame(){this.#transitionFrame!==null&&(window.cancelAnimationFrame(this.#transitionFrame),this.#transitionFrame=null)}}function Presence_layer($$anchor,$$props){push$1($$props,!0);const presenceState=new Presence({open:boxWith$1(()=>$$props.open),ref:$$props.ref});var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(), +node_1=first_child(fragment_1);snippet(node_1,()=>$$props.presence??noop$3,()=>({present:presenceState.isPresent,transitionStatus:presenceState.transitionStatus})),append($$anchor2,fragment_1)};if_block(node2,$$render=>{($$props.forceMount||$$props.open||presenceState.isPresent)&&$$render(consequent)})}append($$anchor,fragment),pop()}function Popover$1($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop( +$$props,"onOpenChangeComplete",3,noop$1);PopoverRootState.create({open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())}),Floating_layer($$anchor,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}function clamp(n,min2,max2){return Math.min(max2,Math.max(min2,n))}class StateMachine{state;#machine;constructor(initialState,machine){ +this.state=simpleBox(initialState),this.#machine=machine,this.dispatch=this.dispatch.bind(this)}#reducer(event2){return this.#machine[this.state.current][event2]??this.state.current}dispatch(event2){this.state.current=this.#reducer(event2)}}const scrollAreaAttrs=createBitsAttrs({component:"scroll-area",parts:["root","viewport","corner","thumb","scrollbar"]}),ScrollAreaRootContext=new Context$1("ScrollArea.Root"),ScrollAreaScrollbarContext=new Context$1("ScrollArea.Scrollbar"),ScrollAreaScrollbarVisibleContext=new Context$1( +"ScrollArea.ScrollbarVisible"),ScrollAreaScrollbarAxisContext=new Context$1("ScrollArea.ScrollbarAxis"),ScrollAreaScrollbarSharedContext=new Context$1("ScrollArea.ScrollbarShared");class ScrollAreaRootState{static create(opts){return ScrollAreaRootContext.set(new ScrollAreaRootState(opts))}opts;attachment;#scrollAreaNode=state$1(null);get scrollAreaNode(){return get$3(this.#scrollAreaNode)}set scrollAreaNode(value){set$1(this.#scrollAreaNode,value,!0)}#viewportNode=state$1(null);get viewportNode(){ +return get$3(this.#viewportNode)}set viewportNode(value){set$1(this.#viewportNode,value,!0)}#contentNode=state$1(null);get contentNode(){return get$3(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}#scrollbarXNode=state$1(null);get scrollbarXNode(){return get$3(this.#scrollbarXNode)}set scrollbarXNode(value){set$1(this.#scrollbarXNode,value,!0)}#scrollbarYNode=state$1(null);get scrollbarYNode(){return get$3(this.#scrollbarYNode)}set scrollbarYNode(value){set$1(this.#scrollbarYNode, +value,!0)}#cornerWidth=state$1(0);get cornerWidth(){return get$3(this.#cornerWidth)}set cornerWidth(value){set$1(this.#cornerWidth,value,!0)}#cornerHeight=state$1(0);get cornerHeight(){return get$3(this.#cornerHeight)}set cornerHeight(value){set$1(this.#cornerHeight,value,!0)}#scrollbarXEnabled=state$1(!1);get scrollbarXEnabled(){return get$3(this.#scrollbarXEnabled)}set scrollbarXEnabled(value){set$1(this.#scrollbarXEnabled,value,!0)}#scrollbarYEnabled=state$1(!1);get scrollbarYEnabled(){return get$3( +this.#scrollbarYEnabled)}set scrollbarYEnabled(value){set$1(this.#scrollbarYEnabled,value,!0)}domContext;constructor(opts){this.opts=opts,this.attachment=attachRef(opts.ref,v=>this.scrollAreaNode=v),this.domContext=new DOMContext(opts.ref)}#props=user_derived(()=>({id:this.opts.id.current,dir:this.opts.dir.current,style:{position:"relative","--bits-scroll-area-corner-height":`${this.cornerHeight}px`,"--bits-scroll-area-corner-width":`${this.cornerWidth}px`},[scrollAreaAttrs.root]:"",...this.attachment}));get props(){ +return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaViewportState{static create(opts){return new ScrollAreaViewportState(opts,ScrollAreaRootContext.get())}opts;root;attachment;#contentId=simpleBox(useId());#contentRef=simpleBox(null);contentAttachment=attachRef(this.#contentRef,v=>this.root.contentNode=v);constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(opts.ref,v=>this.root.viewportNode=v)}#props=user_derived(()=>({id:this.opts.id. +current,style:{overflowX:this.root.scrollbarXEnabled?"scroll":"hidden",overflowY:this.root.scrollbarYEnabled?"scroll":"hidden"},[scrollAreaAttrs.viewport]:"",...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}#contentProps=user_derived(()=>({id:this.#contentId.current,"data-scroll-area-content":"",style:{minWidth:this.root.scrollbarXEnabled?"fit-content":void 0},...this.contentAttachment}));get contentProps(){return get$3(this.#contentProps)}set contentProps(value){ +set$1(this.#contentProps,value)}}class ScrollAreaScrollbarState{static create(opts){return ScrollAreaScrollbarContext.set(new ScrollAreaScrollbarState(opts,ScrollAreaRootContext.get()))}opts;root;#isHorizontal=user_derived(()=>this.opts.orientation.current==="horizontal");get isHorizontal(){return get$3(this.#isHorizontal)}set isHorizontal(value){set$1(this.#isHorizontal,value)}#hasThumb=state$1(!1);get hasThumb(){return get$3(this.#hasThumb)}set hasThumb(value){set$1(this.#hasThumb,value,!0)}constructor(opts,root2){ +this.opts=opts,this.root=root2,watch$1(()=>this.isHorizontal,isHorizontal=>isHorizontal?(this.root.scrollbarXEnabled=!0,()=>{this.root.scrollbarXEnabled=!1}):(this.root.scrollbarYEnabled=!0,()=>{this.root.scrollbarYEnabled=!1}))}}class ScrollAreaScrollbarHoverState{static create(){return new ScrollAreaScrollbarHoverState(ScrollAreaScrollbarContext.get())}scrollbar;root;#isVisible=state$1(!1);get isVisible(){return get$3(this.#isVisible)}set isVisible(value){set$1(this.#isVisible,value,!0)}constructor(scrollbar){ +this.scrollbar=scrollbar,this.root=scrollbar.root,user_effect(()=>{const scrollAreaNode=this.root.scrollAreaNode,hideDelay=this.root.opts.scrollHideDelay.current;let hideTimer=0;if(!scrollAreaNode)return;const handlePointerEnter=()=>{this.root.domContext.clearTimeout(hideTimer),untrack$1(()=>this.isVisible=!0)},handlePointerLeave=()=>{hideTimer&&this.root.domContext.clearTimeout(hideTimer),hideTimer=this.root.domContext.setTimeout(()=>{untrack$1(()=>{this.scrollbar.hasThumb=!1,this.isVisible=!1})}, +hideDelay)},unsubListeners=executeCallbacks(on(scrollAreaNode,"pointerenter",handlePointerEnter),on(scrollAreaNode,"pointerleave",handlePointerLeave));return()=>{this.root.domContext.getWindow().clearTimeout(hideTimer),unsubListeners()}})}#props=user_derived(()=>({"data-state":this.isVisible?"visible":"hidden"}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaScrollbarScrollState{static create(){return new ScrollAreaScrollbarScrollState(ScrollAreaScrollbarContext. +get())}scrollbar;root;machine=new StateMachine("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});#isHidden=user_derived(()=>this.machine.state.current==="hidden");get isHidden(){return get$3(this.#isHidden)}set isHidden(value){set$1(this.#isHidden,value)}constructor(scrollbar){this.scrollbar=scrollbar,this.root=scrollbar.root; +const debounceScrollend=useDebounce(()=>this.machine.dispatch("SCROLL_END"),100);user_effect(()=>{const _state=this.machine.state.current,scrollHideDelay=this.root.opts.scrollHideDelay.current;if(_state==="idle"){const hideTimer=this.root.domContext.setTimeout(()=>this.machine.dispatch("HIDE"),scrollHideDelay);return()=>this.root.domContext.clearTimeout(hideTimer)}}),user_effect(()=>{const viewportNode=this.root.viewportNode;if(!viewportNode)return;const scrollDirection=this.scrollbar.isHorizontal? +"scrollLeft":"scrollTop";let prevScrollPos=viewportNode[scrollDirection];return on(viewportNode,"scroll",()=>{const scrollPos=viewportNode[scrollDirection];prevScrollPos!==scrollPos&&(this.machine.dispatch("SCROLL"),debounceScrollend()),prevScrollPos=scrollPos})}),this.onpointerenter=this.onpointerenter.bind(this),this.onpointerleave=this.onpointerleave.bind(this)}onpointerenter(_){this.machine.dispatch("POINTER_ENTER")}onpointerleave(_){this.machine.dispatch("POINTER_LEAVE")}#props=user_derived( +()=>({"data-state":this.machine.state.current==="hidden"?"hidden":"visible",onpointerenter:this.onpointerenter,onpointerleave:this.onpointerleave}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaScrollbarAutoState{static create(){return new ScrollAreaScrollbarAutoState(ScrollAreaScrollbarContext.get())}scrollbar;root;#isVisible=state$1(!1);get isVisible(){return get$3(this.#isVisible)}set isVisible(value){set$1(this.#isVisible,value,!0)}constructor(scrollbar){ +this.scrollbar=scrollbar,this.root=scrollbar.root;const handleResize=useDebounce(()=>{const viewportNode=this.root.viewportNode;if(!viewportNode)return;const isOverflowX=viewportNode.offsetWidth<viewportNode.scrollWidth,isOverflowY=viewportNode.offsetHeight<viewportNode.scrollHeight;this.isVisible=this.scrollbar.isHorizontal?isOverflowX:isOverflowY},10);new SvelteResizeObserver(()=>this.root.viewportNode,handleResize),new SvelteResizeObserver(()=>this.root.contentNode,handleResize)}#props=user_derived( +()=>({"data-state":this.isVisible?"visible":"hidden"}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaScrollbarVisibleState{static create(){return ScrollAreaScrollbarVisibleContext.set(new ScrollAreaScrollbarVisibleState(ScrollAreaScrollbarContext.get()))}scrollbar;root;#thumbNode=state$1(null);get thumbNode(){return get$3(this.#thumbNode)}set thumbNode(value){set$1(this.#thumbNode,value,!0)}#pointerOffset=state$1(0);get pointerOffset(){return get$3( +this.#pointerOffset)}set pointerOffset(value){set$1(this.#pointerOffset,value,!0)}#sizes=state$1({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}});get sizes(){return get$3(this.#sizes)}set sizes(value){set$1(this.#sizes,value)}#thumbRatio=user_derived(()=>getThumbRatio(this.sizes.viewport,this.sizes.content));get thumbRatio(){return get$3(this.#thumbRatio)}set thumbRatio(value){set$1(this.#thumbRatio,value)}#hasThumb=user_derived(()=>this.thumbRatio>0&&this.thumbRatio<1);get hasThumb(){ +return get$3(this.#hasThumb)}set hasThumb(value){set$1(this.#hasThumb,value)}#prevTransformStyle=state$1("");get prevTransformStyle(){return get$3(this.#prevTransformStyle)}set prevTransformStyle(value){set$1(this.#prevTransformStyle,value,!0)}constructor(scrollbar){this.scrollbar=scrollbar,this.root=scrollbar.root,user_effect(()=>{this.scrollbar.hasThumb=this.hasThumb}),user_effect(()=>{!this.scrollbar.hasThumb&&this.thumbNode&&(this.prevTransformStyle=this.thumbNode.style.transform)})}setSizes(sizes){ +this.sizes=sizes}getScrollPosition(pointerPos,dir){return getScrollPositionFromPointer({pointerPos,pointerOffset:this.pointerOffset,sizes:this.sizes,dir})}onThumbPointerUp(){this.pointerOffset=0}onThumbPointerDown(pointerPos){this.pointerOffset=pointerPos}xOnThumbPositionChange(){if(!(this.root.viewportNode&&this.thumbNode))return;const scrollPos=this.root.viewportNode.scrollLeft,transformStyle=`translate3d(${getThumbOffsetFromScroll({scrollPos,sizes:this.sizes,dir:this.root.opts.dir.current})}p\ +x, 0, 0)`;this.thumbNode.style.transform=transformStyle,this.prevTransformStyle=transformStyle}xOnWheelScroll(scrollPos){this.root.viewportNode&&(this.root.viewportNode.scrollLeft=scrollPos)}xOnDragScroll(pointerPos){this.root.viewportNode&&(this.root.viewportNode.scrollLeft=this.getScrollPosition(pointerPos,this.root.opts.dir.current))}yOnThumbPositionChange(){if(!(this.root.viewportNode&&this.thumbNode))return;const scrollPos=this.root.viewportNode.scrollTop,transformStyle=`translate3d(0, ${getThumbOffsetFromScroll( +{scrollPos,sizes:this.sizes})}px, 0)`;this.thumbNode.style.transform=transformStyle,this.prevTransformStyle=transformStyle}yOnWheelScroll(scrollPos){this.root.viewportNode&&(this.root.viewportNode.scrollTop=scrollPos)}yOnDragScroll(pointerPos){this.root.viewportNode&&(this.root.viewportNode.scrollTop=this.getScrollPosition(pointerPos,this.root.opts.dir.current))}}class ScrollAreaScrollbarXState{static create(opts){return ScrollAreaScrollbarAxisContext.set(new ScrollAreaScrollbarXState(opts,ScrollAreaScrollbarVisibleContext. +get()))}opts;scrollbarVis;root;scrollbar;attachment;#computedStyle=state$1();get computedStyle(){return get$3(this.#computedStyle)}set computedStyle(value){set$1(this.#computedStyle,value,!0)}constructor(opts,scrollbarVis){this.opts=opts,this.scrollbarVis=scrollbarVis,this.root=scrollbarVis.root,this.scrollbar=scrollbarVis.scrollbar,this.attachment=attachRef(this.scrollbar.opts.ref,v=>this.root.scrollbarXNode=v),user_effect(()=>{this.scrollbar.opts.ref.current&&this.opts.mounted.current&&(this.computedStyle= +getComputedStyle(this.scrollbar.opts.ref.current))}),user_effect(()=>{this.onResize()})}onThumbPointerDown=pointerPos=>{this.scrollbarVis.onThumbPointerDown(pointerPos.x)};onDragScroll=pointerPos=>{this.scrollbarVis.xOnDragScroll(pointerPos.x)};onThumbPointerUp=()=>{this.scrollbarVis.onThumbPointerUp()};onThumbPositionChange=()=>{this.scrollbarVis.xOnThumbPositionChange()};onWheelScroll=(e,maxScrollPos)=>{if(!this.root.viewportNode)return;const scrollPos=this.root.viewportNode.scrollLeft+e.deltaX; +this.scrollbarVis.xOnWheelScroll(scrollPos),isScrollingWithinScrollbarBounds(scrollPos,maxScrollPos)&&e.preventDefault()};onResize=()=>{this.scrollbar.opts.ref.current&&this.root.viewportNode&&this.computedStyle&&this.scrollbarVis.setSizes({content:this.root.viewportNode.scrollWidth,viewport:this.root.viewportNode.offsetWidth,scrollbar:{size:this.scrollbar.opts.ref.current.clientWidth,paddingStart:toInt(this.computedStyle.paddingLeft),paddingEnd:toInt(this.computedStyle.paddingRight)}})};#thumbSize=user_derived( +()=>getThumbSize(this.scrollbarVis.sizes));get thumbSize(){return get$3(this.#thumbSize)}set thumbSize(value){set$1(this.#thumbSize,value)}#props=user_derived(()=>({id:this.scrollbar.opts.id.current,"data-orientation":"horizontal",style:{bottom:0,left:this.root.opts.dir.current==="rtl"?"var(--bits-scroll-area-corner-width)":0,right:this.root.opts.dir.current==="ltr"?"var(--bits-scroll-area-corner-width)":0,"--bits-scroll-area-thumb-width":`${this.thumbSize}px`},...this.attachment}));get props(){ +return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaScrollbarYState{static create(opts){return ScrollAreaScrollbarAxisContext.set(new ScrollAreaScrollbarYState(opts,ScrollAreaScrollbarVisibleContext.get()))}opts;scrollbarVis;root;scrollbar;attachment;#computedStyle=state$1();get computedStyle(){return get$3(this.#computedStyle)}set computedStyle(value){set$1(this.#computedStyle,value,!0)}constructor(opts,scrollbarVis){this.opts=opts,this.scrollbarVis=scrollbarVis, +this.root=scrollbarVis.root,this.scrollbar=scrollbarVis.scrollbar,this.attachment=attachRef(this.scrollbar.opts.ref,v=>this.root.scrollbarYNode=v),user_effect(()=>{this.scrollbar.opts.ref.current&&this.opts.mounted.current&&(this.computedStyle=getComputedStyle(this.scrollbar.opts.ref.current))}),user_effect(()=>{this.onResize()}),this.onThumbPointerDown=this.onThumbPointerDown.bind(this),this.onDragScroll=this.onDragScroll.bind(this),this.onThumbPointerUp=this.onThumbPointerUp.bind(this),this.onThumbPositionChange= +this.onThumbPositionChange.bind(this),this.onWheelScroll=this.onWheelScroll.bind(this),this.onResize=this.onResize.bind(this)}onThumbPointerDown(pointerPos){this.scrollbarVis.onThumbPointerDown(pointerPos.y)}onDragScroll(pointerPos){this.scrollbarVis.yOnDragScroll(pointerPos.y)}onThumbPointerUp(){this.scrollbarVis.onThumbPointerUp()}onThumbPositionChange(){this.scrollbarVis.yOnThumbPositionChange()}onWheelScroll(e,maxScrollPos){if(!this.root.viewportNode)return;const scrollPos=this.root.viewportNode. +scrollTop+e.deltaY;this.scrollbarVis.yOnWheelScroll(scrollPos),isScrollingWithinScrollbarBounds(scrollPos,maxScrollPos)&&e.preventDefault()}onResize(){this.scrollbar.opts.ref.current&&this.root.viewportNode&&this.computedStyle&&this.scrollbarVis.setSizes({content:this.root.viewportNode.scrollHeight,viewport:this.root.viewportNode.offsetHeight,scrollbar:{size:this.scrollbar.opts.ref.current.clientHeight,paddingStart:toInt(this.computedStyle.paddingTop),paddingEnd:toInt(this.computedStyle.paddingBottom)}})}#thumbSize=user_derived( +()=>getThumbSize(this.scrollbarVis.sizes));get thumbSize(){return get$3(this.#thumbSize)}set thumbSize(value){set$1(this.#thumbSize,value)}#props=user_derived(()=>({id:this.scrollbar.opts.id.current,"data-orientation":"vertical",style:{top:0,right:this.root.opts.dir.current==="ltr"?0:void 0,left:this.root.opts.dir.current==="rtl"?0:void 0,bottom:"var(--bits-scroll-area-corner-height)","--bits-scroll-area-thumb-height":`${this.thumbSize}px`},...this.attachment}));get props(){return get$3(this.#props)}set props(value){ +set$1(this.#props,value)}}class ScrollAreaScrollbarSharedState{static create(){return ScrollAreaScrollbarSharedContext.set(new ScrollAreaScrollbarSharedState(ScrollAreaScrollbarAxisContext.get()))}scrollbarState;root;scrollbarVis;scrollbar;#rect=state$1(null);get rect(){return get$3(this.#rect)}set rect(value){set$1(this.#rect,value)}#prevWebkitUserSelect=state$1("");get prevWebkitUserSelect(){return get$3(this.#prevWebkitUserSelect)}set prevWebkitUserSelect(value){set$1(this.#prevWebkitUserSelect, +value,!0)}handleResize;handleThumbPositionChange;handleWheelScroll;handleThumbPointerDown;handleThumbPointerUp;#maxScrollPos=user_derived(()=>this.scrollbarVis.sizes.content-this.scrollbarVis.sizes.viewport);get maxScrollPos(){return get$3(this.#maxScrollPos)}set maxScrollPos(value){set$1(this.#maxScrollPos,value)}constructor(scrollbarState){this.scrollbarState=scrollbarState,this.root=scrollbarState.root,this.scrollbarVis=scrollbarState.scrollbarVis,this.scrollbar=scrollbarState.scrollbarVis.scrollbar, +this.handleResize=useDebounce(()=>this.scrollbarState.onResize(),10),this.handleThumbPositionChange=this.scrollbarState.onThumbPositionChange,this.handleWheelScroll=this.scrollbarState.onWheelScroll,this.handleThumbPointerDown=this.scrollbarState.onThumbPointerDown,this.handleThumbPointerUp=this.scrollbarState.onThumbPointerUp,user_effect(()=>{const maxScrollPos=this.maxScrollPos,scrollbarNode=this.scrollbar.opts.ref.current;this.root.viewportNode;const handleWheel=e=>{const node2=e.target;scrollbarNode?. +contains(node2)&&this.handleWheelScroll(e,maxScrollPos)};return on(this.root.domContext.getDocument(),"wheel",handleWheel,{passive:!1})}),user_pre_effect(()=>{this.scrollbarVis.sizes,untrack$1(()=>this.handleThumbPositionChange())}),new SvelteResizeObserver(()=>this.scrollbar.opts.ref.current,this.handleResize),new SvelteResizeObserver(()=>this.root.contentNode,this.handleResize),this.onpointerdown=this.onpointerdown.bind(this),this.onpointermove=this.onpointermove.bind(this),this.onpointerup=this. +onpointerup.bind(this),this.onlostpointercapture=this.onlostpointercapture.bind(this)}handleDragScroll(e){if(!this.rect)return;const x=e.clientX-this.rect.left,y=e.clientY-this.rect.top;this.scrollbarState.onDragScroll({x,y})}#cleanupPointerState(){this.rect!==null&&(this.root.domContext.getDocument().body.style.webkitUserSelect=this.prevWebkitUserSelect,this.root.viewportNode&&(this.root.viewportNode.style.scrollBehavior=""),this.rect=null)}onpointerdown(e){if(e.button!==0)return;e.target.setPointerCapture( +e.pointerId),this.rect=this.scrollbar.opts.ref.current?.getBoundingClientRect()??null,this.prevWebkitUserSelect=this.root.domContext.getDocument().body.style.webkitUserSelect,this.root.domContext.getDocument().body.style.webkitUserSelect="none",this.root.viewportNode&&(this.root.viewportNode.style.scrollBehavior="auto"),this.handleDragScroll(e)}onpointermove(e){this.handleDragScroll(e)}onpointerup(e){const target2=e.target;target2.hasPointerCapture(e.pointerId)&&target2.releasePointerCapture(e.pointerId), +this.#cleanupPointerState()}onlostpointercapture(_){this.#cleanupPointerState()}#props=user_derived(()=>mergeProps({...this.scrollbarState.props,style:{position:"absolute",...this.scrollbarState.props.style},[scrollAreaAttrs.scrollbar]:"",onpointerdown:this.onpointerdown,onpointermove:this.onpointermove,onpointerup:this.onpointerup,onlostpointercapture:this.onlostpointercapture}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaThumbImplState{static create(opts){ +return new ScrollAreaThumbImplState(opts,ScrollAreaScrollbarSharedContext.get())}opts;scrollbarState;attachment;#root;#removeUnlinkedScrollListener=state$1();#debounceScrollEnd=useDebounce(()=>{get$3(this.#removeUnlinkedScrollListener)&&(get$3(this.#removeUnlinkedScrollListener)(),set$1(this.#removeUnlinkedScrollListener,void 0))},100);constructor(opts,scrollbarState){this.opts=opts,this.scrollbarState=scrollbarState,this.#root=scrollbarState.root,this.attachment=attachRef(this.opts.ref,v=>this. +scrollbarState.scrollbarVis.thumbNode=v),user_effect(()=>{const viewportNode=this.#root.viewportNode;if(!viewportNode)return;const handleScroll=()=>{if(this.#debounceScrollEnd(),!get$3(this.#removeUnlinkedScrollListener)){const listener=addUnlinkedScrollListener(viewportNode,this.scrollbarState.handleThumbPositionChange);set$1(this.#removeUnlinkedScrollListener,listener,!0),this.scrollbarState.handleThumbPositionChange()}};return untrack$1(()=>this.scrollbarState.handleThumbPositionChange()),on( +viewportNode,"scroll",handleScroll)}),this.onpointerdowncapture=this.onpointerdowncapture.bind(this),this.onpointerup=this.onpointerup.bind(this)}onpointerdowncapture(e){const thumb=e.target;if(!thumb)return;const thumbRect=thumb.getBoundingClientRect(),x=e.clientX-thumbRect.left,y=e.clientY-thumbRect.top;this.scrollbarState.handleThumbPointerDown({x,y})}onpointerup(_){this.scrollbarState.handleThumbPointerUp()}#props=user_derived(()=>({id:this.opts.id.current,"data-state":this.scrollbarState.scrollbarVis. +hasThumb?"visible":"hidden",style:{width:"var(--bits-scroll-area-thumb-width)",height:"var(--bits-scroll-area-thumb-height)",transform:this.scrollbarState.scrollbarVis.prevTransformStyle},onpointerdowncapture:this.onpointerdowncapture,onpointerup:this.onpointerup,[scrollAreaAttrs.thumb]:"",...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class ScrollAreaCornerImplState{static create(opts){return new ScrollAreaCornerImplState(opts,ScrollAreaRootContext. +get())}opts;root;attachment;#width=state$1(0);#height=state$1(0);#hasSize=user_derived(()=>!!(get$3(this.#width)&&get$3(this.#height)));get hasSize(){return get$3(this.#hasSize)}set hasSize(value){set$1(this.#hasSize,value)}constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref),new SvelteResizeObserver(()=>this.root.scrollbarXNode,()=>{const height=this.root.scrollbarXNode?.offsetHeight||0;this.root.cornerHeight=height,set$1(this.#height,height,!0)}),new SvelteResizeObserver( +()=>this.root.scrollbarYNode,()=>{const width=this.root.scrollbarYNode?.offsetWidth||0;this.root.cornerWidth=width,set$1(this.#width,width,!0)})}#props=user_derived(()=>({id:this.opts.id.current,style:{width:get$3(this.#width),height:get$3(this.#height),position:"absolute",right:this.root.opts.dir.current==="ltr"?0:void 0,left:this.root.opts.dir.current==="rtl"?0:void 0,bottom:0},[scrollAreaAttrs.corner]:"",...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props, +value)}}function toInt(value){return value?Number.parseInt(value,10):0}function getThumbRatio(viewportSize,contentSize){const ratio=viewportSize/contentSize;return Number.isNaN(ratio)?0:ratio}function getThumbSize(sizes){const ratio=getThumbRatio(sizes.viewport,sizes.content),scrollbarPadding=sizes.scrollbar.paddingStart+sizes.scrollbar.paddingEnd,thumbSize=(sizes.scrollbar.size-scrollbarPadding)*ratio;return Math.max(thumbSize,18)}function getScrollPositionFromPointer({pointerPos,pointerOffset, +sizes,dir="ltr"}){const thumbSizePx=getThumbSize(sizes),thumbCenter=thumbSizePx/2,offset2=pointerOffset||thumbCenter,thumbOffsetFromEnd=thumbSizePx-offset2,minPointerPos=sizes.scrollbar.paddingStart+offset2,maxPointerPos=sizes.scrollbar.size-sizes.scrollbar.paddingEnd-thumbOffsetFromEnd,maxScrollPos=sizes.content-sizes.viewport,scrollRange=dir==="ltr"?[0,maxScrollPos]:[maxScrollPos*-1,0];return linearScale([minPointerPos,maxPointerPos],scrollRange)(pointerPos)}function getThumbOffsetFromScroll({ +scrollPos,sizes,dir="ltr"}){const thumbSizePx=getThumbSize(sizes),scrollbarPadding=sizes.scrollbar.paddingStart+sizes.scrollbar.paddingEnd,scrollbar=sizes.scrollbar.size-scrollbarPadding,maxScrollPos=sizes.content-sizes.viewport,maxThumbPos=scrollbar-thumbSizePx,scrollClampRange=dir==="ltr"?[0,maxScrollPos]:[maxScrollPos*-1,0],scrollWithoutMomentum=clamp(scrollPos,scrollClampRange[0],scrollClampRange[1]);return linearScale([0,maxScrollPos],[0,maxThumbPos])(scrollWithoutMomentum)}function linearScale(input,output){ +return value=>{if(input[0]===input[1]||output[0]===output[1])return output[0];const ratio=(output[1]-output[0])/(input[1]-input[0]);return output[0]+ratio*(value-input[0])}}function isScrollingWithinScrollbarBounds(scrollPos,maxScrollPos){return scrollPos>0&&scrollPos<maxScrollPos}function addUnlinkedScrollListener(node2,handler){let prevPosition={left:node2.scrollLeft,top:node2.scrollTop},rAF=0;const win=getWindow$1(node2);return(function loop2(){const position2={left:node2.scrollLeft,top:node2. +scrollTop},isHorizontalScroll=prevPosition.left!==position2.left,isVerticalScroll=prevPosition.top!==position2.top;(isHorizontalScroll||isVerticalScroll)&&handler(),prevPosition=position2,rAF=win.requestAnimationFrame(loop2)})(),()=>win.cancelAnimationFrame(rAF)}var root_2$1o=from_html("<div><!></div>");function Scroll_area$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid2)),type2=prop($$props,"type",3,"ho\ +ver"),dir=prop($$props,"dir",3,"ltr"),scrollHideDelay=prop($$props,"scrollHideDelay",3,600),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id","type","dir","scrollHideDelay","children","child"]);const rootState=ScrollAreaRootState.create({type:boxWith$1(()=>type2()),dir:boxWith$1(()=>dir()),scrollHideDelay:boxWith$1(()=>scrollHideDelay()),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,rootState.props));var fragment=comment$2(), +node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1o();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor, +fragment),pop()}var root$1S=from_html("<div><div><!></div></div>");function Scroll_area_viewport($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid2)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id","children"]);const viewportState=ScrollAreaViewportState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,viewportState. +props)),mergedContentProps=user_derived(()=>mergeProps({},viewportState.contentProps));var div=root$1S();attribute_effect(div,()=>({...get$3(mergedProps)}));var div_1=child(div);attribute_effect(div_1,()=>({...get$3(mergedContentProps)}));var node2=child(div_1);snippet(node2,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor,div),pop()}var root_2$1n=from_html("<div><!></div>");function Scroll_area_scrollbar_shared($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props, +["$$slots","$$events","$$legacy","child","children"]);const scrollbarSharedState=ScrollAreaScrollbarSharedState.create(),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarSharedState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1n();attribute_effect(div,()=>({ +...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}function Scroll_area_scrollbar_x($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]);const isMounted=new IsMounted,scrollbarXState=ScrollAreaScrollbarXState.create({mounted:boxWith$1(()=>isMounted.current)}), +mergedProps=user_derived(()=>mergeProps(restProps,scrollbarXState.props));Scroll_area_scrollbar_shared($$anchor,spread_props(()=>get$3(mergedProps))),pop()}function Scroll_area_scrollbar_y($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]);const isMounted=new IsMounted,scrollbarYState=ScrollAreaScrollbarYState.create({mounted:boxWith$1(()=>isMounted.current)}),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarYState.props));Scroll_area_scrollbar_shared( +$$anchor,spread_props(()=>get$3(mergedProps))),pop()}function Scroll_area_scrollbar_visible($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]);const scrollbarVisibleState=ScrollAreaScrollbarVisibleState.create();var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Scroll_area_scrollbar_x($$anchor2,spread_props(()=>restProps))},alternate=$$anchor2=>{Scroll_area_scrollbar_y($$anchor2,spread_props(()=>restProps))};if_block( +node2,$$render=>{scrollbarVisibleState.scrollbar.opts.orientation.current==="horizontal"?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}function Scroll_area_scrollbar_auto($$anchor,$$props){push$1($$props,!0);let forceMount=prop($$props,"forceMount",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","forceMount"]);const scrollbarAutoState=ScrollAreaScrollbarAutoState.create(),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarAutoState.props)); +{const presence=$$anchor2=>{Scroll_area_scrollbar_visible($$anchor2,spread_props(()=>get$3(mergedProps)))};let $0=user_derived(()=>forceMount()||scrollbarAutoState.isVisible);Presence_layer($$anchor,{get open(){return get$3($0)},get ref(){return scrollbarAutoState.scrollbar.opts.ref},presence,$$slots:{presence:!0}})}pop()}function Scroll_area_scrollbar_scroll($$anchor,$$props){push$1($$props,!0);let forceMount=prop($$props,"forceMount",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$\ +legacy","forceMount"]);const scrollbarScrollState=ScrollAreaScrollbarScrollState.create(),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarScrollState.props));{const presence=$$anchor2=>{Scroll_area_scrollbar_visible($$anchor2,spread_props(()=>get$3(mergedProps)))};let $0=user_derived(()=>forceMount()||!scrollbarScrollState.isHidden);Presence_layer($$anchor,spread_props(()=>get$3(mergedProps),{get open(){return get$3($0)},get ref(){return scrollbarScrollState.scrollbar.opts.ref},presence, +$$slots:{presence:!0}}))}pop()}function Scroll_area_scrollbar_hover($$anchor,$$props){push$1($$props,!0);let forceMount=prop($$props,"forceMount",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","forceMount"]);const scrollbarHoverState=ScrollAreaScrollbarHoverState.create(),scrollbarAutoState=ScrollAreaScrollbarAutoState.create(),mergedProps=user_derived(()=>mergeProps(restProps,scrollbarHoverState.props,scrollbarAutoState.props,{"data-state":scrollbarHoverState.isVisible?"vis\ +ible":"hidden"})),open2=user_derived(()=>forceMount()||scrollbarHoverState.isVisible&&scrollbarAutoState.isVisible);Presence_layer($$anchor,{get open(){return get$3(open2)},get ref(){return scrollbarAutoState.scrollbar.opts.ref},presence:$$anchor2=>{Scroll_area_scrollbar_visible($$anchor2,spread_props(()=>get$3(mergedProps)))},$$slots:{presence:!0}}),pop()}function Scroll_area_scrollbar$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props, +"id",19,()=>createId(uid2)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id","orientation"]);const scrollbarState=ScrollAreaScrollbarState.create({orientation:boxWith$1(()=>$$props.orientation),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),type2=user_derived(()=>scrollbarState.root.opts.type.current);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Scroll_area_scrollbar_hover($$anchor2,spread_props(()=>restProps,{get id(){return id2()}}))}, +consequent_1=$$anchor2=>{Scroll_area_scrollbar_scroll($$anchor2,spread_props(()=>restProps,{get id(){return id2()}}))},consequent_2=$$anchor2=>{Scroll_area_scrollbar_auto($$anchor2,spread_props(()=>restProps,{get id(){return id2()}}))},consequent_3=$$anchor2=>{Scroll_area_scrollbar_visible($$anchor2,spread_props(()=>restProps,{get id(){return id2()}}))};if_block(node2,$$render=>{get$3(type2)==="hover"?$$render(consequent):get$3(type2)==="scroll"?$$render(consequent_1,1):get$3(type2)==="auto"?$$render( +consequent_2,2):get$3(type2)==="always"&&$$render(consequent_3,3)})}append($$anchor,fragment),pop()}var root_2$1m=from_html("<div><!></div>");function Scroll_area_thumb_impl($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id","child","children","present"]);const isMounted=new IsMounted,thumbState=ScrollAreaThumbImplState.create({id:boxWith$1(()=>$$props.id),ref:boxWith$1(()=>ref2(),v=>ref2(v)),mounted:boxWith$1( +()=>isMounted.current)}),mergedProps=user_derived(()=>mergeProps(restProps,thumbState.props,{style:{hidden:!$$props.present}}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1m();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props. +children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}function Scroll_area_thumb($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),forceMount=prop($$props,"forceMount",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","forceMount"]);const scrollbarState=ScrollAreaScrollbarVisibleContext. +get();{const presence=($$anchor2,$$arg0)=>{let present=()=>$$arg0?.().present;Scroll_area_thumb_impl($$anchor2,spread_props(()=>restProps,{get id(){return id2()},get present(){return present()},get ref(){return ref2()},set ref($$value){ref2($$value)}}))};let $0=user_derived(()=>forceMount()||scrollbarState.hasThumb);Presence_layer($$anchor,{get open(){return get$3($0)},get ref(){return scrollbarState.scrollbar.opts.ref},presence,$$slots:{presence:!0}})}pop()}var root_2$1l=from_html("<div><!></di\ +v>");function Scroll_area_corner_impl($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id","children","child"]);const cornerState=ScrollAreaCornerImplState.create({id:boxWith$1(()=>$$props.id),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,cornerState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(), +node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$1l();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}function Scroll_area_corner($$anchor,$$props){const uid2=props_id(); +push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid2)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","id"]);const scrollAreaState=ScrollAreaRootContext.get(),hasBothScrollbarsVisible=user_derived(()=>!!(scrollAreaState.scrollbarXNode&&scrollAreaState.scrollbarYNode)),hasCorner=user_derived(()=>scrollAreaState.opts.type.current!=="scroll"&&get$3(hasBothScrollbarsVisible));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{ +Scroll_area_corner_impl($$anchor2,spread_props(()=>restProps,{get id(){return id2()},get ref(){return ref2()},set ref($$value){ref2($$value)}}))};if_block(node2,$$render=>{get$3(hasCorner)&&$$render(consequent)})}append($$anchor,fragment),pop()}var root$1R=from_html("<!> <!>",1);function Select($$anchor,$$props){push$1($$props,!0);let value=prop($$props,"value",15),onValueChange=prop($$props,"onValueChange",3,noop$1),name=prop($$props,"name",3,""),disabled=prop($$props,"disabled",3,!1),open2=prop( +$$props,"open",15,!1),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1),loop2=prop($$props,"loop",3,!1),scrollAlignment=prop($$props,"scrollAlignment",3,"nearest"),required2=prop($$props,"required",3,!1),items2=prop($$props,"items",19,()=>[]),allowDeselect=prop($$props,"allowDeselect",3,!1);function handleDefaultValue(){value()===void 0&&value($$props.type==="single"?"":[])}handleDefaultValue(),watch$1.pre(()=>value(),()=>{handleDefaultValue()}); +let inputValue=state$1("");const rootState=SelectRootState.create({type:$$props.type,value:boxWith$1(()=>value(),v=>{value(v),onValueChange()(v)}),disabled:boxWith$1(()=>disabled()),required:boxWith$1(()=>required2()),open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),loop:boxWith$1(()=>loop2()),scrollAlignment:boxWith$1(()=>scrollAlignment()),name:boxWith$1(()=>name()),isCombobox:!1,items:boxWith$1(()=>items2()),allowDeselect:boxWith$1(()=>allowDeselect()),inputValue:boxWith$1(()=>get$3( +inputValue),v=>set$1(inputValue,v,!0)),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete())});var fragment=root$1R(),node2=first_child(fragment);Floating_layer(node2,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}});var node_2=sibling(node2,2);{var consequent_1=$$anchor2=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);{var consequent=$$anchor3=>{ +Select_hidden_input($$anchor3,{get autocomplete(){return $$props.autocomplete}})},alternate=$$anchor3=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);each(node_4,16,()=>rootState.opts.value.current,item=>item,($$anchor4,item)=>{Select_hidden_input($$anchor4,{get value(){return item},get autocomplete(){return $$props.autocomplete}})}),append($$anchor3,fragment_4)};if_block(node_3,$$render=>{rootState.opts.value.current.length===0?$$render(consequent):$$render(alternate,-1)})}append($$anchor2, +fragment_2)},d2=user_derived(()=>Array.isArray(rootState.opts.value.current)),alternate_1=$$anchor2=>{Select_hidden_input($$anchor2,{get autocomplete(){return $$props.autocomplete},get value(){return rootState.opts.value.current},set value($$value){rootState.opts.value.current=$$value}})};if_block(node_2,$$render=>{get$3(d2)?$$render(consequent_1):$$render(alternate_1,-1)})}append($$anchor,fragment),pop()}var root_3$X=from_html("<button><!></button>");function Select_trigger$1($$anchor,$$props){ +const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),type2=prop($$props,"type",3,"button"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","id","ref","child","children","type"]);const triggerState=SelectTriggerState.create({id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState.props,{type:type2()}));var fragment=comment$2(),node2=first_child( +fragment);component(node2,()=>Floating_layer_anchor,($$anchor2,FloatingLayer_Anchor)=>{FloatingLayer_Anchor($$anchor2,{get id(){return id2()},get ref(){return triggerState.opts.ref},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{var consequent=$$anchor4=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);snippet(node_2,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor4,fragment_2)},alternate=$$anchor4=>{var button=root_3$X(); +attribute_effect(button,()=>({...get$3(mergedProps)}));var node_3=child(button);snippet(node_3,()=>$$props.children??noop$3),reset(button),append($$anchor4,button)};if_block(node_1,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}const switchAttrs=createBitsAttrs({component:"switch",parts:["root","thumb"]}),SwitchRootContext=new Context$1("Switch.Root");class SwitchRootState{static create(opts){ +return SwitchRootContext.set(new SwitchRootState(opts))}opts;attachment;constructor(opts){this.opts=opts,this.attachment=attachRef(opts.ref),this.onkeydown=this.onkeydown.bind(this),this.onclick=this.onclick.bind(this)}#toggle(){this.opts.checked.current=!this.opts.checked.current}onkeydown(e){!(e.key===ENTER||e.key===SPACE)||this.opts.disabled.current||(e.preventDefault(),this.#toggle())}onclick(_){this.opts.disabled.current||this.#toggle()}#sharedProps=user_derived(()=>({"data-disabled":boolToEmptyStrOrUndef( +this.opts.disabled.current),"data-state":getDataChecked(this.opts.checked.current),"data-required":boolToEmptyStrOrUndef(this.opts.required.current)}));get sharedProps(){return get$3(this.#sharedProps)}set sharedProps(value){set$1(this.#sharedProps,value)}#snippetProps=user_derived(()=>({checked:this.opts.checked.current}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({...this.sharedProps,id:this.opts.id.current, +role:"switch",disabled:boolToTrueOrUndef(this.opts.disabled.current),"aria-checked":getAriaChecked(this.opts.checked.current,!1),"aria-required":boolToStr(this.opts.required.current),[switchAttrs.root]:"",onclick:this.onclick,onkeydown:this.onkeydown,...this.attachment}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class SwitchInputState{static create(){return new SwitchInputState(SwitchRootContext.get())}root;#shouldRender=user_derived(()=>this.root.opts.name. +current!==void 0);get shouldRender(){return get$3(this.#shouldRender)}set shouldRender(value){set$1(this.#shouldRender,value)}constructor(root2){this.root=root2}#props=user_derived(()=>({type:"checkbox",name:this.root.opts.name.current,value:this.root.opts.value.current,checked:this.root.opts.checked.current,disabled:this.root.opts.disabled.current,required:this.root.opts.required.current}));get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class SwitchThumbState{static create(opts){ +return new SwitchThumbState(opts,SwitchRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(opts.ref)}#snippetProps=user_derived(()=>({checked:this.root.opts.checked.current}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({...this.root.sharedProps,id:this.opts.id.current,[switchAttrs.thumb]:"",...this.attachment}));get props(){return get$3(this.#props)}set props(value){ +set$1(this.#props,value)}}function Switch_input($$anchor,$$props){push$1($$props,!1);const inputState=SwitchInputState.create();init();var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Hidden_input($$anchor2,spread_props(()=>inputState.props))};if_block(node2,$$render=>{inputState.shouldRender&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_2$1k=from_html("<button><!></button>"),root$1Q=from_html("<!> <!>",1);function Switch$1($$anchor,$$props){const uid2=props_id(); +push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid2)),disabled=prop($$props,"disabled",3,!1),required2=prop($$props,"required",3,!1),checked=prop($$props,"checked",15,!1),value=prop($$props,"value",3,"on"),name=prop($$props,"name",3,void 0),type2=prop($$props,"type",3,"button"),onCheckedChange=prop($$props,"onCheckedChange",3,noop$1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","children","ref","id","disabled","required","ch\ +ecked","value","name","type","onCheckedChange"]);const rootState=SwitchRootState.create({checked:boxWith$1(()=>checked(),v=>{checked(v),onCheckedChange()?.(v)}),disabled:boxWith$1(()=>disabled()??!1),required:boxWith$1(()=>required2()),value:boxWith$1(()=>value()),name:boxWith$1(()=>name()),id:boxWith$1(()=>id2()),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,rootState.props,{type:type2()}));var fragment=root$1Q(),node2=first_child(fragment);{var consequent=$$anchor2=>{ +var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>({props:get$3(mergedProps),...rootState.snippetProps}));snippet(node_1,()=>$$props.child,()=>get$3($0))}append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1k();attribute_effect(button,()=>({...get$3(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3,()=>rootState.snippetProps),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render( +consequent):$$render(alternate,-1)})}var node_3=sibling(node2,2);Switch_input(node_3,{}),append($$anchor,fragment),pop()}var root_2$1j=from_html("<span><!></span>");function Switch_thumb($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let ref2=prop($$props,"ref",15,null),id2=prop($$props,"id",19,()=>createId(uid2)),restProps=rest_props($$props,["$$slots","$$events","$$legacy","child","children","ref","id"]);const thumbState=SwitchThumbState.create({id:boxWith$1(()=>id2()),ref:boxWith$1( +()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,thumbState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>({props:get$3(mergedProps),...thumbState.snippetProps}));snippet(node_1,()=>$$props.child,()=>get$3($0))}append($$anchor2,fragment_1)},alternate=$$anchor2=>{var span=root_2$1j();attribute_effect(span,()=>({...get$3(mergedProps)}));var node_2=child( +span);snippet(node_2,()=>$$props.children??noop$3,()=>thumbState.snippetProps),reset(span),append($$anchor2,span)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}class TimeoutFn{#interval;#cb;#timer=null;constructor(cb,interval){this.#cb=cb,this.#interval=interval,this.stop=this.stop.bind(this),this.start=this.start.bind(this),onDestroyEffect(this.stop)}#clear(){this.#timer!==null&&(window.clearTimeout(this.#timer),this.#timer= +null)}stop(){this.#clear()}start(...args){this.#clear(),this.#timer=window.setTimeout(()=>{this.#timer=null,this.#cb(...args)},this.#interval)}}const tooltipAttrs=createBitsAttrs({component:"tooltip",parts:["content","trigger"]}),TooltipProviderContext=new Context$1("Tooltip.Provider"),TooltipRootContext=new Context$1("Tooltip.Root");class TooltipTriggerRegistryState{#triggers=state$1(proxy(new Map));get triggers(){return get$3(this.#triggers)}set triggers(value){set$1(this.#triggers,value,!0)}#activeTriggerId=state$1( +null);get activeTriggerId(){return get$3(this.#activeTriggerId)}set activeTriggerId(value){set$1(this.#activeTriggerId,value,!0)}#activeTriggerNode=user_derived(()=>{const activeTriggerId=this.activeTriggerId;return activeTriggerId===null?null:this.triggers.get(activeTriggerId)?.node??null});get activeTriggerNode(){return get$3(this.#activeTriggerNode)}set activeTriggerNode(value){set$1(this.#activeTriggerNode,value)}#activePayload=user_derived(()=>{const activeTriggerId=this.activeTriggerId;return activeTriggerId=== +null?null:this.triggers.get(activeTriggerId)?.payload??null});get activePayload(){return get$3(this.#activePayload)}set activePayload(value){set$1(this.#activePayload,value)}register=record2=>{const next2=new Map(this.triggers);next2.set(record2.id,record2),this.triggers=next2,this.#coerceActiveTrigger()};update=record2=>{const next2=new Map(this.triggers);next2.set(record2.id,record2),this.triggers=next2,this.#coerceActiveTrigger()};unregister=id2=>{if(!this.triggers.has(id2))return;const next2=new Map( +this.triggers);next2.delete(id2),this.triggers=next2,this.activeTriggerId===id2&&(this.activeTriggerId=null)};setActiveTrigger=id2=>{if(id2===null){this.activeTriggerId=null;return}if(!this.triggers.has(id2)){this.activeTriggerId=null;return}this.activeTriggerId=id2};get=id2=>this.triggers.get(id2);has=id2=>this.triggers.has(id2);getFirstTriggerId=()=>{const firstEntry=this.triggers.entries().next();return firstEntry.done?null:firstEntry.value[0]};#coerceActiveTrigger=()=>{const activeTriggerId=this. +activeTriggerId;activeTriggerId!==null&&(this.triggers.has(activeTriggerId)||(this.activeTriggerId=null))}}class TooltipProviderState{static create(opts){return TooltipProviderContext.set(new TooltipProviderState(opts))}opts;#isOpenDelayed=state$1(!0);get isOpenDelayed(){return get$3(this.#isOpenDelayed)}set isOpenDelayed(value){set$1(this.#isOpenDelayed,value,!0)}isPointerInTransit=simpleBox(!1);#timerFn;#openTooltip=state$1(null);constructor(opts){this.opts=opts,this.#timerFn=new TimeoutFn(()=>{ +this.isOpenDelayed=!0},this.opts.skipDelayDuration.current),onMountEffect(()=>on(window,"scroll",e=>{const activeTooltip=get$3(this.#openTooltip);if(!activeTooltip)return;const triggerNode=activeTooltip.triggerNode;if(!triggerNode)return;const target2=e.target;(target2 instanceof Element||target2 instanceof Document)&&target2.contains(triggerNode)&&activeTooltip.handleClose()}))}#startTimer=()=>{if(this.opts.skipDelayDuration.current===0){this.isOpenDelayed=!0;return}else this.#timerFn.start()};#clearTimer=()=>{ +this.#timerFn.stop()};onOpen=tooltip=>{get$3(this.#openTooltip)&&get$3(this.#openTooltip)!==tooltip&&get$3(this.#openTooltip).handleClose(),this.#clearTimer(),this.isOpenDelayed=!1,set$1(this.#openTooltip,tooltip,!0)};onClose=tooltip=>{get$3(this.#openTooltip)===tooltip&&(set$1(this.#openTooltip,null),this.#startTimer())};isTooltipOpen=tooltip=>get$3(this.#openTooltip)===tooltip}class TooltipRootState{static create(opts){return TooltipRootContext.set(new TooltipRootState(opts,TooltipProviderContext. +get()))}opts;provider;#delayDuration=user_derived(()=>this.opts.delayDuration.current??this.provider.opts.delayDuration.current);get delayDuration(){return get$3(this.#delayDuration)}set delayDuration(value){set$1(this.#delayDuration,value)}#disableHoverableContent=user_derived(()=>this.opts.disableHoverableContent.current??this.provider.opts.disableHoverableContent.current);get disableHoverableContent(){return get$3(this.#disableHoverableContent)}set disableHoverableContent(value){set$1(this.#disableHoverableContent, +value)}#disableCloseOnTriggerClick=user_derived(()=>this.opts.disableCloseOnTriggerClick.current??this.provider.opts.disableCloseOnTriggerClick.current);get disableCloseOnTriggerClick(){return get$3(this.#disableCloseOnTriggerClick)}set disableCloseOnTriggerClick(value){set$1(this.#disableCloseOnTriggerClick,value)}#disabled=user_derived(()=>this.opts.disabled.current??this.provider.opts.disabled.current);get disabled(){return get$3(this.#disabled)}set disabled(value){set$1(this.#disabled,value)}#ignoreNonKeyboardFocus=user_derived( +()=>this.opts.ignoreNonKeyboardFocus.current??this.provider.opts.ignoreNonKeyboardFocus.current);get ignoreNonKeyboardFocus(){return get$3(this.#ignoreNonKeyboardFocus)}set ignoreNonKeyboardFocus(value){set$1(this.#ignoreNonKeyboardFocus,value)}registry;tether;#contentNode=state$1(null);get contentNode(){return get$3(this.#contentNode)}set contentNode(value){set$1(this.#contentNode,value,!0)}contentPresence;#wasOpenDelayed=state$1(!1);#timerFn;#stateAttr=user_derived(()=>this.opts.open.current?get$3( +this.#wasOpenDelayed)?"delayed-open":"instant-open":"closed");get stateAttr(){return get$3(this.#stateAttr)}set stateAttr(value){set$1(this.#stateAttr,value)}constructor(opts,provider){this.opts=opts,this.provider=provider,this.tether=opts.tether.current?.state??null,this.registry=this.tether?.registry??new TooltipTriggerRegistryState,this.#timerFn=new TimeoutFn(()=>{set$1(this.#wasOpenDelayed,!0),this.opts.open.current=!0},this.delayDuration??0),this.tether&&(this.tether.root=this,onMountEffect( +()=>()=>{this.tether?.root===this&&(this.tether.root=null)})),this.contentPresence=new PresenceManager({open:this.opts.open,ref:boxWith$1(()=>this.contentNode),onComplete:()=>{this.opts.onOpenChangeComplete.current(this.opts.open.current)}}),watch$1(()=>this.delayDuration,()=>{this.delayDuration!==void 0&&(this.#timerFn=new TimeoutFn(()=>{set$1(this.#wasOpenDelayed,!0),this.opts.open.current=!0},this.delayDuration))}),watch$1(()=>this.opts.open.current,isOpen=>{isOpen?(this.ensureActiveTrigger(), +this.provider.onOpen(this)):this.provider.onClose(this)},{lazy:!0}),watch$1(()=>this.opts.triggerId.current,triggerId=>{triggerId!==this.registry.activeTriggerId&&this.registry.setActiveTrigger(triggerId)}),watch$1(()=>this.registry.activeTriggerId,activeTriggerId=>{this.opts.triggerId.current!==activeTriggerId&&(this.opts.triggerId.current=activeTriggerId)})}handleOpen=()=>{this.#timerFn.stop(),set$1(this.#wasOpenDelayed,!1),this.ensureActiveTrigger(),this.opts.open.current=!0};handleClose=()=>{ +this.#timerFn.stop(),this.opts.open.current=!1};#handleDelayedOpen=()=>{this.#timerFn.stop();const shouldSkipDelay=!this.provider.isOpenDelayed,delayDuration=this.delayDuration??0;shouldSkipDelay||delayDuration===0?(set$1(this.#wasOpenDelayed,!1),this.opts.open.current=!0):this.#timerFn.start()};onTriggerEnter=triggerId=>{this.setActiveTrigger(triggerId),this.#handleDelayedOpen()};onTriggerLeave=()=>{this.disableHoverableContent?this.handleClose():this.#timerFn.stop()};ensureActiveTrigger=()=>{if(this. +registry.activeTriggerId!==null&&this.registry.has(this.registry.activeTriggerId))return;if(this.opts.triggerId.current!==null&&this.registry.has(this.opts.triggerId.current)){this.registry.setActiveTrigger(this.opts.triggerId.current);return}const firstTriggerId=this.registry.getFirstTriggerId();this.registry.setActiveTrigger(firstTriggerId)};setActiveTrigger=triggerId=>{this.registry.setActiveTrigger(triggerId)};registerTrigger=trigger=>{this.registry.register(trigger),trigger.disabled&&this.registry. +activeTriggerId===trigger.id&&this.opts.open.current&&this.handleClose()};updateTrigger=trigger=>{this.registry.update(trigger),trigger.disabled&&this.registry.activeTriggerId===trigger.id&&this.opts.open.current&&this.handleClose()};unregisterTrigger=id2=>{const isActive=this.registry.activeTriggerId===id2;this.registry.unregister(id2),isActive&&this.opts.open.current&&this.handleClose()};isActiveTrigger=triggerId=>this.registry.activeTriggerId===triggerId;get triggerNode(){return this.registry. +activeTriggerNode}get activePayload(){return this.registry.activePayload}get activeTriggerId(){return this.registry.activeTriggerId}}class TooltipTriggerState{static create(opts){return opts.tether.current?new TooltipTriggerState(opts,null,opts.tether.current.state):new TooltipTriggerState(opts,TooltipRootContext.get(),null)}opts;root;tether;attachment;#isPointerDown=simpleBox(!1);#hasPointerMoveOpened=state$1(!1);domContext;#transitCheckTimeout=null;#mounted=!1;#lastRegisteredId=null;constructor(opts,root2,tether){ +this.opts=opts,this.root=root2,this.tether=tether,this.domContext=new DOMContext(opts.ref),this.attachment=attachRef(this.opts.ref,v=>this.#register(v)),watch$1(()=>this.opts.id.current,()=>{this.#register(this.opts.ref.current)}),watch$1(()=>this.opts.payload.current,()=>{this.#register(this.opts.ref.current)}),watch$1(()=>this.opts.disabled.current,()=>{this.#register(this.opts.ref.current)}),onMountEffect(()=>(this.#mounted=!0,this.#register(this.opts.ref.current),()=>{const root3=this.#getRoot(), +id2=this.#lastRegisteredId;id2&&(this.tether?this.tether.registry.unregister(id2):root3?.unregisterTrigger(id2)),this.#lastRegisteredId=null,this.#mounted=!1}))}#getRoot=()=>this.tether?.root??this.root;#isDisabled=()=>{const root2=this.#getRoot();return this.opts.disabled.current||!!root2?.disabled};#register=node2=>{if(!this.#mounted)return;const id2=this.opts.id.current,payload=this.opts.payload.current,disabled=this.opts.disabled.current;if(this.#lastRegisteredId&&this.#lastRegisteredId!==id2){ +const root3=this.#getRoot();this.tether?this.tether.registry.unregister(this.#lastRegisteredId):root3?.unregisterTrigger(this.#lastRegisteredId)}const triggerRecord={id:id2,node:node2,payload,disabled},root2=this.#getRoot();this.tether?(this.tether.registry.has(id2)?this.tether.registry.update(triggerRecord):this.tether.registry.register(triggerRecord),disabled&&this.tether.registry.activeTriggerId===id2&&root2?.opts.open.current&&root2.handleClose()):root2?.registry.has(id2)?root2.updateTrigger( +triggerRecord):root2?.registerTrigger(triggerRecord),this.#lastRegisteredId=id2};#clearTransitCheck=()=>{this.#transitCheckTimeout!==null&&(clearTimeout(this.#transitCheckTimeout),this.#transitCheckTimeout=null)};handlePointerUp=()=>{this.#isPointerDown.current=!1};#onpointerup=()=>{this.#isDisabled()||(this.#isPointerDown.current=!1)};#onpointerdown=()=>{this.#isDisabled()||(this.#isPointerDown.current=!0,this.domContext.getDocument().addEventListener("pointerup",()=>{this.handlePointerUp()},{once:!0}))};#onpointerenter=e=>{ +const root2=this.#getRoot();if(root2){if(this.#isDisabled()){root2.opts.open.current&&root2.handleClose();return}if(e.pointerType!=="touch"){if(root2.provider.isPointerInTransit.current){this.#clearTransitCheck(),this.#transitCheckTimeout=window.setTimeout(()=>{root2.provider.isPointerInTransit.current&&(root2.provider.isPointerInTransit.current=!1,root2.onTriggerEnter(this.opts.id.current),set$1(this.#hasPointerMoveOpened,!0))},250);return}root2.onTriggerEnter(this.opts.id.current),set$1(this.#hasPointerMoveOpened, +!0)}}};#onpointermove=e=>{const root2=this.#getRoot();if(root2){if(this.#isDisabled()){root2.opts.open.current&&root2.handleClose();return}e.pointerType!=="touch"&&(get$3(this.#hasPointerMoveOpened)||(this.#clearTransitCheck(),root2.provider.isPointerInTransit.current=!1,root2.onTriggerEnter(this.opts.id.current),set$1(this.#hasPointerMoveOpened,!0)))}};#onpointerleave=e=>{const root2=this.#getRoot();if(!root2||this.#isDisabled())return;if(this.#clearTransitCheck(),!root2.isActiveTrigger(this.opts. +id.current)){set$1(this.#hasPointerMoveOpened,!1);return}const relatedTarget=e.relatedTarget;if(isElement$1(relatedTarget)){for(const record2 of root2.registry.triggers.values())if(record2.node===relatedTarget){if(root2.provider.opts.skipDelayDuration.current>0){set$1(this.#hasPointerMoveOpened,!1);return}root2.handleClose(),set$1(this.#hasPointerMoveOpened,!1);return}}root2.onTriggerLeave(),set$1(this.#hasPointerMoveOpened,!1)};#onfocus=e=>{const root2=this.#getRoot();if(root2&&!this.#isPointerDown. +current){if(this.#isDisabled()){root2.opts.open.current&&root2.handleClose();return}root2.ignoreNonKeyboardFocus&&!isFocusVisible(e.currentTarget)||(root2.setActiveTrigger(this.opts.id.current),root2.handleOpen())}};#onblur=()=>{const root2=this.#getRoot();!root2||this.#isDisabled()||root2.handleClose()};#onclick=()=>{const root2=this.#getRoot();!root2||root2.disableCloseOnTriggerClick||this.#isDisabled()||root2.handleClose()};#props=user_derived(()=>{const root2=this.#getRoot(),isOpenForTrigger=!!(root2?. +opts.open.current&&root2.isActiveTrigger(this.opts.id.current)),isDisabled=this.#isDisabled();return{id:this.opts.id.current,"aria-describedby":isOpenForTrigger?root2?.contentNode?.id:void 0,"data-state":isOpenForTrigger?root2?.stateAttr:"closed","data-disabled":boolToEmptyStrOrUndef(isDisabled),"data-delay-duration":`${root2?.delayDuration??0}`,[tooltipAttrs.trigger]:"",tabindex:isDisabled?void 0:this.opts.tabindex.current,disabled:this.opts.disabled.current,onpointerup:this.#onpointerup,onpointerdown:this.#onpointerdown, +onpointerenter:this.#onpointerenter,onpointermove:this.#onpointermove,onpointerleave:this.#onpointerleave,onfocus:this.#onfocus,onblur:this.#onblur,onclick:this.#onclick,...this.attachment}});get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value)}}class TooltipContentState{static create(opts){return new TooltipContentState(opts,TooltipRootContext.get())}opts;root;attachment;constructor(opts,root2){this.opts=opts,this.root=root2,this.attachment=attachRef(this.opts.ref,v=>this. +root.contentNode=v),new SafePolygon({triggerNode:()=>this.root.triggerNode,contentNode:()=>this.root.contentNode,enabled:()=>this.root.opts.open.current&&!this.root.disableHoverableContent,transitIntentTimeout:180,ignoredTargets:()=>{if(this.root.provider.opts.skipDelayDuration.current===0)return[];const nodes2=[],activeTriggerNode=this.root.triggerNode;for(const record2 of this.root.registry.triggers.values())record2.node&&record2.node!==activeTriggerNode&&nodes2.push(record2.node);return nodes2}, +onPointerExit:()=>{this.root.provider.isTooltipOpen(this.root)&&this.root.handleClose()}})}onInteractOutside=e=>{if(isElement$1(e.target)&&this.root.triggerNode?.contains(e.target)&&this.root.disableCloseOnTriggerClick){e.preventDefault();return}this.opts.onInteractOutside.current(e),!e.defaultPrevented&&this.root.handleClose()};onEscapeKeydown=e=>{this.opts.onEscapeKeydown.current?.(e),!e.defaultPrevented&&this.root.handleClose()};onOpenAutoFocus=e=>{e.preventDefault()};onCloseAutoFocus=e=>{e.preventDefault()};get shouldRender(){ +return this.root.contentPresence.shouldRender}#snippetProps=user_derived(()=>({open:this.root.opts.open.current}));get snippetProps(){return get$3(this.#snippetProps)}set snippetProps(value){set$1(this.#snippetProps,value)}#props=user_derived(()=>({id:this.opts.id.current,"data-state":this.root.stateAttr,"data-disabled":boolToEmptyStrOrUndef(this.root.disabled),...getDataTransitionAttrs(this.root.contentPresence.transitionStatus),style:{outline:"none"},[tooltipAttrs.content]:"",...this.attachment}));get props(){ +return get$3(this.#props)}set props(value){set$1(this.#props,value)}popperProps={onInteractOutside:this.onInteractOutside,onEscapeKeydown:this.onEscapeKeydown,onOpenAutoFocus:this.onOpenAutoFocus,onCloseAutoFocus:this.onCloseAutoFocus}}function Tooltip($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),triggerId=prop($$props,"triggerId",15,null),onOpenChange=prop($$props,"onOpenChange",3,noop$1),onOpenChangeComplete=prop($$props,"onOpenChangeComplete",3,noop$1);const rootState=TooltipRootState. +create({open:boxWith$1(()=>open2(),v=>{open2(v),onOpenChange()(v)}),triggerId:boxWith$1(()=>triggerId(),v=>{triggerId(v)}),delayDuration:boxWith$1(()=>$$props.delayDuration),disableCloseOnTriggerClick:boxWith$1(()=>$$props.disableCloseOnTriggerClick),disableHoverableContent:boxWith$1(()=>$$props.disableHoverableContent),ignoreNonKeyboardFocus:boxWith$1(()=>$$props.ignoreNonKeyboardFocus),disabled:boxWith$1(()=>$$props.disabled),onOpenChangeComplete:boxWith$1(()=>onOpenChangeComplete()),tether:boxWith$1( +()=>$$props.tether)});Floating_layer($$anchor,{tooltip:!0,children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3,()=>({open:rootState.opts.open.current,triggerId:rootState.activeTriggerId,payload:rootState.activePayload})),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}var root_4$C=from_html("<div><div><!></div></div>"),root_8$s=from_html("<div><div><!></div></div>");function Tooltip_content$1($$anchor,$$props){ +const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),ref2=prop($$props,"ref",15,null),side=prop($$props,"side",3,"top"),sideOffset=prop($$props,"sideOffset",3,0),align=prop($$props,"align",3,"center"),avoidCollisions=prop($$props,"avoidCollisions",3,!0),arrowPadding=prop($$props,"arrowPadding",3,0),sticky=prop($$props,"sticky",3,"partial"),hideWhenDetached=prop($$props,"hideWhenDetached",3,!1),collisionPadding=prop($$props,"collisionPadding",3,0),onInteractOutside=prop( +$$props,"onInteractOutside",3,noop$1),onEscapeKeydown=prop($$props,"onEscapeKeydown",3,noop$1),forceMount=prop($$props,"forceMount",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","children","child","id","ref","side","sideOffset","align","avoidCollisions","arrowPadding","sticky","strategy","hideWhenDetached","customAnchor","collisionPadding","onInteractOutside","onEscapeKeydown","forceMount","style"]);const contentState=TooltipContentState.create({id:boxWith$1(()=>id2()),ref:boxWith$1( +()=>ref2(),v=>ref2(v)),onInteractOutside:boxWith$1(()=>onInteractOutside()),onEscapeKeydown:boxWith$1(()=>onEscapeKeydown())}),floatingProps=user_derived(()=>({side:side(),sideOffset:sideOffset(),align:align(),avoidCollisions:avoidCollisions(),arrowPadding:arrowPadding(),sticky:sticky(),hideWhenDetached:hideWhenDetached(),collisionPadding:collisionPadding(),strategy:$$props.strategy,customAnchor:$$props.customAnchor??contentState.root.triggerNode})),mergedProps=user_derived(()=>mergeProps(restProps, +get$3(floatingProps),contentState.props));var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{{const popper=($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars("tooltip")},{style:$$props.style}));var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor4=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);{let $02=user_derived( +()=>({props:get$3(finalProps),wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_2,()=>$$props.child,()=>get$3($02))}append($$anchor4,fragment_3)},alternate=$$anchor4=>{var div=root_4$C();attribute_effect(div,()=>({...wrapperProps()}));var div_1=child(div);attribute_effect(div_1,()=>({...get$3(finalProps)}));var node_3=child(div_1);snippet(node_3,()=>$$props.children??noop$3),reset(div_1),reset(div),append($$anchor4,div)};if_block(node_1,$$render=>{$$props.child?$$render(consequent): +$$render(alternate,-1)})}append($$anchor3,fragment_2)};let $0=user_derived(()=>contentState.root.disableHoverableContent?"none":"auto");Popper_layer_force_mount($$anchor2,spread_props(()=>get$3(mergedProps),()=>contentState.popperProps,{get enabled(){return contentState.root.opts.open.current},get id(){return id2()},trapFocus:!1,loop:!1,preventScroll:!1,forceMount:!0,get ref(){return contentState.opts.ref},tooltip:!0,get shouldRender(){return contentState.shouldRender},get contentPointerEvents(){ +return get$3($0)},popper,$$slots:{popper:!0}}))}},consequent_3=$$anchor2=>{{const popper=($$anchor3,$$arg0)=>{let props=()=>$$arg0?.().props,wrapperProps=()=>$$arg0?.().wrapperProps;const finalProps=user_derived(()=>mergeProps(props(),{style:getFloatingContentCSSVars("tooltip")},{style:$$props.style}));var fragment_5=comment$2(),node_4=first_child(fragment_5);{var consequent_2=$$anchor4=>{var fragment_6=comment$2(),node_5=first_child(fragment_6);{let $02=user_derived(()=>({props:get$3(finalProps), +wrapperProps:wrapperProps(),...contentState.snippetProps}));snippet(node_5,()=>$$props.child,()=>get$3($02))}append($$anchor4,fragment_6)},alternate_1=$$anchor4=>{var div_2=root_8$s();attribute_effect(div_2,()=>({...wrapperProps()}));var div_3=child(div_2);attribute_effect(div_3,()=>({...get$3(finalProps)}));var node_6=child(div_3);snippet(node_6,()=>$$props.children??noop$3),reset(div_3),reset(div_2),append($$anchor4,div_2)};if_block(node_4,$$render=>{$$props.child?$$render(consequent_2):$$render( +alternate_1,-1)})}append($$anchor3,fragment_5)};let $0=user_derived(()=>contentState.root.disableHoverableContent?"none":"auto");Popper_layer($$anchor2,spread_props(()=>get$3(mergedProps),()=>contentState.popperProps,{get open(){return contentState.root.opts.open.current},get id(){return id2()},trapFocus:!1,loop:!1,preventScroll:!1,forceMount:!1,get ref(){return contentState.opts.ref},tooltip:!0,get shouldRender(){return contentState.shouldRender},get contentPointerEvents(){return get$3($0)},popper, +$$slots:{popper:!0}}))}};if_block(node2,$$render=>{forceMount()?$$render(consequent_1):forceMount()||$$render(consequent_3,1)})}append($$anchor,fragment),pop()}var root_2$1i=from_html("<button><!></button>");function Tooltip_trigger$1($$anchor,$$props){const uid2=props_id();push$1($$props,!0);let id2=prop($$props,"id",19,()=>createId(uid2)),disabled=prop($$props,"disabled",3,!1),type2=prop($$props,"type",3,"button"),tabindex=prop($$props,"tabindex",3,0),ref2=prop($$props,"ref",15,null),restProps=rest_props( +$$props,["$$slots","$$events","$$legacy","children","child","id","disabled","payload","tether","type","tabindex","ref"]);const triggerState=TooltipTriggerState.create({id:boxWith$1(()=>id2()),disabled:boxWith$1(()=>disabled()??!1),tabindex:boxWith$1(()=>tabindex()??0),payload:boxWith$1(()=>$$props.payload),tether:boxWith$1(()=>$$props.tether),ref:boxWith$1(()=>ref2(),v=>ref2(v))}),mergedProps=user_derived(()=>mergeProps(restProps,triggerState.props,{type:type2()}));var fragment=comment$2(),node2=first_child( +fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var button=root_2$1i();attribute_effect(button,()=>({...get$3(mergedProps)}));var node_2=child(button);snippet(node_2,()=>$$props.children??noop$3),reset(button),append($$anchor2,button)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor, +fragment),pop()}function Tooltip_arrow($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref"]);Floating_layer_arrow($$anchor,spread_props(()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}})),pop()}function Tooltip_provider($$anchor,$$props){push$1($$props,!0);let delayDuration=prop($$props,"delayDuration",3,700),disableCloseOnTriggerClick=prop($$props,"disableCloseOnTriggerClick",3,!1),disableHoverableContent=prop( +$$props,"disableHoverableContent",3,!1),disabled=prop($$props,"disabled",3,!1),ignoreNonKeyboardFocus=prop($$props,"ignoreNonKeyboardFocus",3,!1),skipDelayDuration=prop($$props,"skipDelayDuration",3,300);TooltipProviderState.create({delayDuration:boxWith$1(()=>delayDuration()),disableCloseOnTriggerClick:boxWith$1(()=>disableCloseOnTriggerClick()),disableHoverableContent:boxWith$1(()=>disableHoverableContent()),disabled:boxWith$1(()=>disabled()),ignoreNonKeyboardFocus:boxWith$1(()=>ignoreNonKeyboardFocus()), +skipDelayDuration:boxWith$1(()=>skipDelayDuration())});var fragment=comment$2(),node2=first_child(fragment);snippet(node2,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}function Tooltip_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Tooltip_trigger$1,($$anchor2,TooltipPrimitive_Trigger)=>{TooltipPrimitive_Trigger( +$$anchor2,spread_props({"data-slot":"tooltip-trigger",class:"cursor-pointer"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}var root_3$W=from_html("<div></div>"),root_2$1h=from_html("<!> <!>",1);function Tooltip_content($$anchor,$$props){push$1($$props,!0);const tooltipContent=$$anchor2=>{var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Tooltip_content$1,($$anchor3,TooltipPrimitive_Content)=>{TooltipPrimitive_Content( +$$anchor3,spread_props({"data-slot":"tooltip-content",get sideOffset(){return sideOffset()},get side(){return side()},get class(){return get$3(contentClass)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor4,$$slotProps)=>{var fragment_1=root_2$1h(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);{const child2=($$anchor5,$$arg0)=>{let props=()=>$$arg0?.().props;var div=root_3$W();attribute_effect( +div,$0=>({class:$0,...props()}),[()=>cn$1("z-50 size-2.5 rotate-45 rounded-[2px] bg-primary","data-[side=top]:translate-x-1/2 data-[side=top]:translate-y-[calc(-50%_+_2px)]","data-[side=bottom]:-translate-x-1/2 data-[side=bottom]:-translate-y-[calc(-50%_+_1px)]","data-[side=right]:translate-x-[calc(50%_+_2px)] data-[side=right]:translate-y-1/2","data-[side=left]:-translate-y-[calc(50%_-_3px)]",$$props.arrowClasses)]),append($$anchor5,div)};component(node_2,()=>Tooltip_arrow,($$anchor5,TooltipPrimitive_Arrow)=>{ +TooltipPrimitive_Arrow($$anchor5,{child:child2,$$slots:{child:!0}})})}append($$anchor4,fragment_1)},$$slots:{default:!0}}))}),append($$anchor2,fragment)};let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props,"sideOffset",3,0),side=prop($$props,"side",3,"top"),noPortal=prop($$props,"noPortal",3,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","sideOffset","side","children","arrowClasses","noPortal"]);const contentClass=user_derived(()=>cn$1("z-50 w-fit origin\ +-(--bits-tooltip-content-transform-origin) animate-in rounded-md bg-primary px-3 py-1.5 text-xs text-balance text-primary-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",$$props.class));var fragment_2=comment$2(),node_3=first_child(fragment_2);{var consequent=$$anchor2=>{ +tooltipContent($$anchor2)},alternate=$$anchor2=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);component(node_4,()=>Portal$2,($$anchor3,TooltipPrimitive_Portal)=>{TooltipPrimitive_Portal($$anchor3,{children:($$anchor4,$$slotProps)=>{tooltipContent($$anchor4)},$$slots:{default:!0}})}),append($$anchor2,fragment_4)};if_block(node_3,$$render=>{noPortal()?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment_2),pop()}const Root$5=Tooltip,Provider=Tooltip_provider;var AttachmentType=(AttachmentType2=>(AttachmentType2. +AUDIO="AUDIO",AttachmentType2.IMAGE="IMAGE",AttachmentType2.MCP_PROMPT="MCP_PROMPT",AttachmentType2.MCP_RESOURCE="MCP_RESOURCE",AttachmentType2.PDF="PDF",AttachmentType2.TEXT="TEXT",AttachmentType2.LEGACY_CONTEXT="context",AttachmentType2))(AttachmentType||{}),AttachmentMenuItemId=(AttachmentMenuItemId2=>(AttachmentMenuItemId2.IMAGES="images",AttachmentMenuItemId2.AUDIO="audio",AttachmentMenuItemId2.TEXT="text",AttachmentMenuItemId2.PDF="pdf",AttachmentMenuItemId2.SYSTEM_MESSAGE="system-message", +AttachmentMenuItemId2.MCP_PROMPT="mcp-prompt",AttachmentMenuItemId2.MCP_RESOURCES="mcp-resources",AttachmentMenuItemId2))(AttachmentMenuItemId||{}),AttachmentItemEnabledWhen=(AttachmentItemEnabledWhen2=>(AttachmentItemEnabledWhen2.ALWAYS="always",AttachmentItemEnabledWhen2.HAS_VISION_MODALITY="hasVisionModality",AttachmentItemEnabledWhen2.HAS_AUDIO_MODALITY="hasAudioModality",AttachmentItemEnabledWhen2))(AttachmentItemEnabledWhen||{}),AttachmentAction=(AttachmentAction2=>(AttachmentAction2.FILE_UPLOAD= +"onFileUpload",AttachmentAction2.SYSTEM_PROMPT_CLICK="onSystemPromptClick",AttachmentAction2.MCP_PROMPT_CLICK="onMcpPromptClick",AttachmentAction2.MCP_RESOURCES_CLICK="onMcpResourcesClick",AttachmentAction2))(AttachmentAction||{}),AttachmentItemVisibleWhen=(AttachmentItemVisibleWhen2=>(AttachmentItemVisibleWhen2.HAS_MCP_PROMPTS_SUPPORT="hasMcpPromptsSupport",AttachmentItemVisibleWhen2.HAS_MCP_RESOURCES_SUPPORT="hasMcpResourcesSupport",AttachmentItemVisibleWhen2))(AttachmentItemVisibleWhen||{}),ToolCallType=(ToolCallType2=>(ToolCallType2. +FUNCTION="function",ToolCallType2))(ToolCallType||{}),AgenticSectionType=(AgenticSectionType2=>(AgenticSectionType2.TEXT="text",AgenticSectionType2.TOOL_CALL="tool_call",AgenticSectionType2.TOOL_CALL_PENDING="tool_call_pending",AgenticSectionType2.TOOL_CALL_STREAMING="tool_call_streaming",AgenticSectionType2.REASONING="reasoning",AgenticSectionType2.REASONING_PENDING="reasoning_pending",AgenticSectionType2))(AgenticSectionType||{}),ChatMessageStatsView=(ChatMessageStatsView2=>(ChatMessageStatsView2. +GENERATION="generation",ChatMessageStatsView2.READING="reading",ChatMessageStatsView2.TOOLS="tools",ChatMessageStatsView2.SUMMARY="summary",ChatMessageStatsView2))(ChatMessageStatsView||{}),ReasoningFormat=(ReasoningFormat2=>(ReasoningFormat2.NONE="none",ReasoningFormat2.AUTO="auto",ReasoningFormat2))(ReasoningFormat||{}),MessageRole=(MessageRole2=>(MessageRole2.USER="user",MessageRole2.ASSISTANT="assistant",MessageRole2.SYSTEM="system",MessageRole2.TOOL="tool",MessageRole2))(MessageRole||{}),MessageType=(MessageType2=>(MessageType2. +ROOT="root",MessageType2.TEXT="text",MessageType2.THINK="think",MessageType2.SYSTEM="system",MessageType2))(MessageType||{}),ContentPartType=(ContentPartType2=>(ContentPartType2.TEXT="text",ContentPartType2.IMAGE_URL="image_url",ContentPartType2.INPUT_AUDIO="input_audio",ContentPartType2))(ContentPartType||{}),ErrorDialogType=(ErrorDialogType2=>(ErrorDialogType2.TIMEOUT="timeout",ErrorDialogType2.SERVER="server",ErrorDialogType2))(ErrorDialogType||{}),ConversationSelectionMode=(ConversationSelectionMode2=>(ConversationSelectionMode2. +EXPORT="export",ConversationSelectionMode2.IMPORT="import",ConversationSelectionMode2))(ConversationSelectionMode||{}),FileTypeCategory=(FileTypeCategory2=>(FileTypeCategory2.IMAGE="image",FileTypeCategory2.AUDIO="audio",FileTypeCategory2.PDF="pdf",FileTypeCategory2.TEXT="text",FileTypeCategory2))(FileTypeCategory||{}),SpecialFileType=(SpecialFileType2=>(SpecialFileType2.MCP_PROMPT="mcp-prompt",SpecialFileType2))(SpecialFileType||{}),FileTypeImage=(FileTypeImage2=>(FileTypeImage2.JPEG="jpeg",FileTypeImage2. +PNG="png",FileTypeImage2.GIF="gif",FileTypeImage2.WEBP="webp",FileTypeImage2.SVG="svg",FileTypeImage2))(FileTypeImage||{}),FileTypeAudio=(FileTypeAudio2=>(FileTypeAudio2.MP3="mp3",FileTypeAudio2.WAV="wav",FileTypeAudio2.WEBM="webm",FileTypeAudio2))(FileTypeAudio||{}),FileTypePdf=(FileTypePdf2=>(FileTypePdf2.PDF="pdf",FileTypePdf2))(FileTypePdf||{}),FileTypeText=(FileTypeText2=>(FileTypeText2.PLAIN_TEXT="plainText",FileTypeText2.MARKDOWN="md",FileTypeText2.ASCIIDOC="asciidoc",FileTypeText2.JAVASCRIPT= +"js",FileTypeText2.TYPESCRIPT="ts",FileTypeText2.JSX="jsx",FileTypeText2.TSX="tsx",FileTypeText2.CSS="css",FileTypeText2.HTML="html",FileTypeText2.JSON="json",FileTypeText2.XML="xml",FileTypeText2.YAML="yaml",FileTypeText2.CSV="csv",FileTypeText2.LOG="log",FileTypeText2.PYTHON="python",FileTypeText2.JAVA="java",FileTypeText2.CPP="cpp",FileTypeText2.PHP="php",FileTypeText2.RUBY="ruby",FileTypeText2.GO="go",FileTypeText2.RUST="rust",FileTypeText2.SHELL="shell",FileTypeText2.SQL="sql",FileTypeText2. +R="r",FileTypeText2.SCALA="scala",FileTypeText2.KOTLIN="kotlin",FileTypeText2.SWIFT="swift",FileTypeText2.DART="dart",FileTypeText2.VUE="vue",FileTypeText2.SVELTE="svelte",FileTypeText2.LATEX="latex",FileTypeText2.BIBTEX="bibtex",FileTypeText2.CUDA="cuda",FileTypeText2.VULKAN="vulkan",FileTypeText2.HASKELL="haskell",FileTypeText2.CSHARP="csharp",FileTypeText2.PROPERTIES="properties",FileTypeText2))(FileTypeText||{}),FileExtensionImage=(FileExtensionImage2=>(FileExtensionImage2.JPG=".jpg",FileExtensionImage2. +JPEG=".jpeg",FileExtensionImage2.PNG=".png",FileExtensionImage2.GIF=".gif",FileExtensionImage2.WEBP=".webp",FileExtensionImage2.SVG=".svg",FileExtensionImage2))(FileExtensionImage||{}),FileExtensionAudio=(FileExtensionAudio2=>(FileExtensionAudio2.MP3=".mp3",FileExtensionAudio2.WAV=".wav",FileExtensionAudio2))(FileExtensionAudio||{}),FileExtensionPdf=(FileExtensionPdf2=>(FileExtensionPdf2.PDF=".pdf",FileExtensionPdf2))(FileExtensionPdf||{}),FileExtensionText=(FileExtensionText2=>(FileExtensionText2. +TXT=".txt",FileExtensionText2.MD=".md",FileExtensionText2.ADOC=".adoc",FileExtensionText2.JS=".js",FileExtensionText2.TS=".ts",FileExtensionText2.JSX=".jsx",FileExtensionText2.TSX=".tsx",FileExtensionText2.CSS=".css",FileExtensionText2.HTML=".html",FileExtensionText2.HTM=".htm",FileExtensionText2.JSON=".json",FileExtensionText2.XML=".xml",FileExtensionText2.YAML=".yaml",FileExtensionText2.YML=".yml",FileExtensionText2.CSV=".csv",FileExtensionText2.LOG=".log",FileExtensionText2.PY=".py",FileExtensionText2. +JAVA=".java",FileExtensionText2.CPP=".cpp",FileExtensionText2.C=".c",FileExtensionText2.H=".h",FileExtensionText2.PHP=".php",FileExtensionText2.RB=".rb",FileExtensionText2.GO=".go",FileExtensionText2.RS=".rs",FileExtensionText2.SH=".sh",FileExtensionText2.BAT=".bat",FileExtensionText2.SQL=".sql",FileExtensionText2.R=".r",FileExtensionText2.SCALA=".scala",FileExtensionText2.KT=".kt",FileExtensionText2.SWIFT=".swift",FileExtensionText2.DART=".dart",FileExtensionText2.VUE=".vue",FileExtensionText2. +SVELTE=".svelte",FileExtensionText2.TEX=".tex",FileExtensionText2.BIB=".bib",FileExtensionText2.CU=".cu",FileExtensionText2.CUH=".cuh",FileExtensionText2.COMP=".comp",FileExtensionText2.HPP=".hpp",FileExtensionText2.HS=".hs",FileExtensionText2.PROPERTIES=".properties",FileExtensionText2.CS=".cs",FileExtensionText2))(FileExtensionText||{}),MimeTypePrefix=(MimeTypePrefix2=>(MimeTypePrefix2.IMAGE="image/",MimeTypePrefix2.TEXT="text",MimeTypePrefix2))(MimeTypePrefix||{}),MimeTypeIncludes=(MimeTypeIncludes2=>(MimeTypeIncludes2. +JSON="json",MimeTypeIncludes2.JAVASCRIPT="javascript",MimeTypeIncludes2.TYPESCRIPT="typescript",MimeTypeIncludes2))(MimeTypeIncludes||{}),UriPattern=(UriPattern2=>(UriPattern2.DATABASE_KEYWORD="database",UriPattern2.DATABASE_SCHEME="db://",UriPattern2))(UriPattern||{}),MimeTypeApplication=(MimeTypeApplication2=>(MimeTypeApplication2.PDF="application/pdf",MimeTypeApplication2.OCTET_STREAM="application/octet-stream",MimeTypeApplication2))(MimeTypeApplication||{}),MimeTypeAudio=(MimeTypeAudio2=>(MimeTypeAudio2. MP3_MPEG="audio/mpeg",MimeTypeAudio2.MP3="audio/mp3",MimeTypeAudio2.MP4="audio/mp4",MimeTypeAudio2.WAV="audio/wav",MimeTypeAudio2.WEBM="audio/webm",MimeTypeAudio2.WEBM_OPUS="audio/webm;codecs=opus",MimeTypeAudio2))(MimeTypeAudio||{}),MimeTypeImage=(MimeTypeImage2=>(MimeTypeImage2.JPEG="image/jpeg",MimeTypeImage2.JPG="image/jpg",MimeTypeImage2.PNG="image/png",MimeTypeImage2.GIF="image/gif",MimeTypeImage2.WEBP="image/webp",MimeTypeImage2.SVG="image/svg+xml",MimeTypeImage2))(MimeTypeImage||{}),MimeTypeText=(MimeTypeText2=>(MimeTypeText2. PLAIN="text/plain",MimeTypeText2.MARKDOWN="text/markdown",MimeTypeText2.ASCIIDOC="text/asciidoc",MimeTypeText2.JAVASCRIPT="text/javascript",MimeTypeText2.JAVASCRIPT_APP="application/javascript",MimeTypeText2.TYPESCRIPT="text/typescript",MimeTypeText2.JSX="text/jsx",MimeTypeText2.TSX="text/tsx",MimeTypeText2.CSS="text/css",MimeTypeText2.HTML="text/html",MimeTypeText2.JSON="application/json",MimeTypeText2.XML_TEXT="text/xml",MimeTypeText2.XML_APP="application/xml",MimeTypeText2.YAML_TEXT="text/yam\ l",MimeTypeText2.YAML_APP="application/yaml",MimeTypeText2.CSV="text/csv",MimeTypeText2.PYTHON="text/x-python",MimeTypeText2.JAVA="text/x-java-source",MimeTypeText2.CPP_HDR="text/x-c++hdr",MimeTypeText2.CPP_SRC="text/x-c++src",MimeTypeText2.CSHARP="text/x-csharp",MimeTypeText2.HASKELL="text/x-haskell",MimeTypeText2.C_SRC="text/x-csrc",MimeTypeText2.C_HDR="text/x-chdr",MimeTypeText2.PHP="text/x-php",MimeTypeText2.RUBY="text/x-ruby",MimeTypeText2.GO="text/x-go",MimeTypeText2.RUST="text/x-rust",MimeTypeText2. @@ -1208,22 +1175,121 @@ ERROR="error",MCPConnectionPhase2.DISCONNECTED="disconnected",MCPConnectionPhase IDLE="idle",HealthCheckStatus2.CONNECTING="connecting",HealthCheckStatus2.SUCCESS="success",HealthCheckStatus2.ERROR="error",HealthCheckStatus2))(HealthCheckStatus||{}),MCPContentType=(MCPContentType2=>(MCPContentType2.TEXT="text",MCPContentType2.IMAGE="image",MCPContentType2.RESOURCE="resource",MCPContentType2))(MCPContentType||{}),JsonSchemaType=(JsonSchemaType2=>(JsonSchemaType2.OBJECT="object",JsonSchemaType2))(JsonSchemaType||{}),MCPRefType=(MCPRefType2=>(MCPRefType2.PROMPT="ref/prompt",MCPRefType2. RESOURCE="ref/resource",MCPRefType2))(MCPRefType||{}),ModelModality=(ModelModality2=>(ModelModality2.TEXT="TEXT",ModelModality2.AUDIO="AUDIO",ModelModality2.VISION="VISION",ModelModality2))(ModelModality||{}),ServerRole=(ServerRole2=>(ServerRole2.MODEL="model",ServerRole2.ROUTER="router",ServerRole2))(ServerRole||{}),ServerModelStatus=(ServerModelStatus2=>(ServerModelStatus2.UNLOADED="unloaded",ServerModelStatus2.LOADING="loading",ServerModelStatus2.LOADED="loaded",ServerModelStatus2.SLEEPING="s\ leeping",ServerModelStatus2.FAILED="failed",ServerModelStatus2))(ServerModelStatus||{}),ParameterSource=(ParameterSource2=>(ParameterSource2.DEFAULT="default",ParameterSource2.CUSTOM="custom",ParameterSource2))(ParameterSource||{}),SyncableParameterType=(SyncableParameterType2=>(SyncableParameterType2.NUMBER="number",SyncableParameterType2.STRING="string",SyncableParameterType2.BOOLEAN="boolean",SyncableParameterType2))(SyncableParameterType||{}),SettingsFieldType=(SettingsFieldType2=>(SettingsFieldType2. -INPUT="input",SettingsFieldType2.TEXTAREA="textarea",SettingsFieldType2.CHECKBOX="checkbox",SettingsFieldType2.SELECT="select",SettingsFieldType2))(SettingsFieldType||{}),ColorMode=(ColorMode2=>(ColorMode2.LIGHT="light",ColorMode2.DARK="dark",ColorMode2.SYSTEM="system",ColorMode2))(ColorMode||{}),McpPromptVariant=(McpPromptVariant2=>(McpPromptVariant2.MESSAGE="message",McpPromptVariant2.ATTACHMENT="attachment",McpPromptVariant2))(McpPromptVariant||{}),UrlProtocol=(UrlProtocol2=>(UrlProtocol2.DATA= -"data:",UrlProtocol2.HTTP="http://",UrlProtocol2.HTTPS="https://",UrlProtocol2.WEBSOCKET="ws://",UrlProtocol2.WEBSOCKET_SECURE="wss://",UrlProtocol2))(UrlProtocol||{}),KeyboardKey=(KeyboardKey2=>(KeyboardKey2.ENTER="Enter",KeyboardKey2.ESCAPE="Escape",KeyboardKey2.ARROW_UP="ArrowUp",KeyboardKey2.ARROW_DOWN="ArrowDown",KeyboardKey2.TAB="Tab",KeyboardKey2.D_LOWER="d",KeyboardKey2.D_UPPER="D",KeyboardKey2.E_UPPER="E",KeyboardKey2.K_LOWER="k",KeyboardKey2.O_UPPER="O",KeyboardKey2.SPACE=" ",KeyboardKey2))( -KeyboardKey||{}),root_1$11=from_html('<button aria-label="Preview code" type="button"><!></button>'),root$1F=from_html('<div class="code-block-actions"><div><!></div> <!></div>');function ActionIconsCodeBlock($$anchor,$$props){push$1($$props,!0);let disabled=prop($$props,"disabled",3,!1);const showPreview=user_derived(()=>$$props.language?.toLowerCase()===FileTypeText.HTML);function handlePreview(){disabled()||$$props.onPreview?.($$props.code,$$props.language)}var div=root$1F(),div_1=child(div); -let classes;var node2=child(div_1);{let $0=user_derived(()=>!disabled()),$1=user_derived(()=>disabled()?"Code incomplete":"Copy code");ActionIconCopyToClipboard(node2,{get text(){return $$props.code},get canCopy(){return get$4($0)},get ariaLabel(){return get$4($1)}})}reset(div_1);var node_1=sibling(div_1,2);{var consequent=$$anchor2=>{var button=root_1$11();let classes_1;button.__click=handlePreview;var node_2=child(button);Eye(node_2,{size:16}),reset(button),template_effect(()=>{classes_1=set_class( -button,1,"preview-code-btn",null,classes_1,{"opacity-50":disabled(),"!cursor-not-allowed":disabled()}),set_attribute(button,"title",disabled()?"Code incomplete":"Preview code"),set_attribute(button,"aria-disabled",disabled())}),append($$anchor2,button)};if_block(node_1,$$render=>{get$4(showPreview)&&$$render(consequent)})}reset(div),template_effect(()=>classes=set_class(div_1,1,"copy-code-btn",null,classes,{"opacity-50":disabled(),"!cursor-not-allowed":disabled()})),append($$anchor,div),pop()}delegate( -["click"]);const ATTACHMENT_SAVED_REGEX=/\[Attachment saved: ([^\]]+)\]/,NEWLINE_SEPARATOR=` -`,TURN_LIMIT_MESSAGE="\n\n```\nTurn limit reached\n```\n",LLM_ERROR_BLOCK_START=` +INPUT="input",SettingsFieldType2.TEXTAREA="textarea",SettingsFieldType2.CHECKBOX="checkbox",SettingsFieldType2.SELECT="select",SettingsFieldType2))(SettingsFieldType||{}),ColorMode=(ColorMode2=>(ColorMode2.LIGHT="light",ColorMode2.DARK="dark",ColorMode2.SYSTEM="system",ColorMode2))(ColorMode||{}),TooltipSide=(TooltipSide2=>(TooltipSide2.TOP="top",TooltipSide2.RIGHT="right",TooltipSide2.BOTTOM="bottom",TooltipSide2.LEFT="left",TooltipSide2))(TooltipSide||{}),McpPromptVariant=(McpPromptVariant2=>(McpPromptVariant2. +MESSAGE="message",McpPromptVariant2.ATTACHMENT="attachment",McpPromptVariant2))(McpPromptVariant||{}),UrlProtocol=(UrlProtocol2=>(UrlProtocol2.DATA="data:",UrlProtocol2.HTTP="http://",UrlProtocol2.HTTPS="https://",UrlProtocol2.WEBSOCKET="ws://",UrlProtocol2.WEBSOCKET_SECURE="wss://",UrlProtocol2))(UrlProtocol||{}),HtmlInputType=(HtmlInputType2=>(HtmlInputType2.FILE="file",HtmlInputType2))(HtmlInputType||{}),KeyboardKey=(KeyboardKey2=>(KeyboardKey2.ENTER="Enter",KeyboardKey2.ESCAPE="Escape",KeyboardKey2. +ARROW_UP="ArrowUp",KeyboardKey2.ARROW_DOWN="ArrowDown",KeyboardKey2.TAB="Tab",KeyboardKey2.D_LOWER="d",KeyboardKey2.D_UPPER="D",KeyboardKey2.E_UPPER="E",KeyboardKey2.K_LOWER="k",KeyboardKey2.O_UPPER="O",KeyboardKey2.SPACE=" ",KeyboardKey2))(KeyboardKey||{}),ToolSource=(ToolSource2=>(ToolSource2.BUILTIN="builtin",ToolSource2.MCP="mcp",ToolSource2.CUSTOM="custom",ToolSource2))(ToolSource||{}),ToolPermissionDecision=(ToolPermissionDecision2=>(ToolPermissionDecision2.ALWAYS="always",ToolPermissionDecision2. +ALWAYS_SERVER="always_server",ToolPermissionDecision2.ONCE="once",ToolPermissionDecision2.DENY="deny",ToolPermissionDecision2))(ToolPermissionDecision||{}),ToolResponseField=(ToolResponseField2=>(ToolResponseField2.PLAIN_TEXT="plain_text_response",ToolResponseField2.ERROR="error",ToolResponseField2))(ToolResponseField||{}),root_4$B=from_html("<p> </p>"),root_1$12=from_html("<!> <!>",1);function ActionIcon($$anchor,$$props){push$1($$props,!0);let variant=prop($$props,"variant",3,"ghost"),size2=prop( +$$props,"size",3,"sm"),className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),iconSize=prop($$props,"iconSize",3,"h-3 w-3"),tooltipSide=prop($$props,"tooltipSide",19,()=>TooltipSide.TOP);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$5,($$anchor2,Tooltip_Root)=>{Tooltip_Root($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$12(),node_1=first_child(fragment_1);component(node_1,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger)=>{Tooltip_Trigger( +$$anchor4,{children:($$anchor5,$$slotProps2)=>{{let $0=user_derived(()=>$$props["aria-label"]||$$props.tooltip);Button($$anchor5,{get variant(){return variant()},get size(){return size2()},get disabled(){return disabled()},get onclick(){return $$props.onclick},get class(){return`h-6 w-6 p-0 ${className()??""} flex hover:bg-transparent data-[state=open]:bg-transparent!`},get"aria-label"(){return get$3($0)},children:($$anchor6,$$slotProps3)=>{const IconComponent=user_derived(()=>$$props.icon);var fragment_3=comment$2(), +node_2=first_child(fragment_3);component(node_2,()=>get$3(IconComponent),($$anchor7,IconComponent_1)=>{IconComponent_1($$anchor7,{get class(){return iconSize()}})}),append($$anchor6,fragment_3)},$$slots:{default:!0}})}},$$slots:{default:!0}})});var node_3=sibling(node_1,2);component(node_3,()=>Tooltip_content,($$anchor4,Tooltip_Content)=>{Tooltip_Content($$anchor4,{get side(){return tooltipSide()},children:($$anchor5,$$slotProps2)=>{var p2=root_4$B(),text2=child(p2,!0);reset(p2),template_effect( +()=>set_text(text2,$$props.tooltip)),append($$anchor5,p2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}const defaultAttributes={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};var root$1P=from_svg("<svg><!><!></svg>");function Icon($$anchor,$$props){push$1($$props,!0);const color=prop($$props,"color",3, +"currentColor"),size2=prop($$props,"size",3,24),strokeWidth=prop($$props,"strokeWidth",3,2),absoluteStrokeWidth=prop($$props,"absoluteStrokeWidth",3,!1),iconNode=prop($$props,"iconNode",19,()=>[]),props=rest_props($$props,["$$slots","$$events","$$legacy","name","color","size","strokeWidth","absoluteStrokeWidth","iconNode","children"]);var svg2=root$1P();attribute_effect(svg2,$0=>({...defaultAttributes,...props,width:size2(),height:size2(),stroke:color(),"stroke-width":$0,class:["lucide-icon luci\ +de",$$props.name&&`lucide-${$$props.name}`,$$props.class]}),[()=>absoluteStrokeWidth()?Number(strokeWidth())*24/Number(size2()):strokeWidth()]);var node2=child(svg2);each(node2,17,iconNode,index$2,($$anchor2,$$item)=>{var $$array=user_derived(()=>to_array(get$3($$item),2));let tag=()=>get$3($$array)[0],attrs=()=>get$3($$array)[1];var fragment=comment$2(),node_1=first_child(fragment);element$4(node_1,tag,!0,($$element,$$anchor3)=>{attribute_effect($$element,()=>({...attrs()}))}),append($$anchor2, +fragment)});var node_2=sibling(node2);snippet(node_2,()=>$$props.children??noop$3),reset(svg2),append($$anchor,svg2),pop()}function Arrow_big_up($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M9 18v-6H5l7-7 7 7h-4v6H9z"}]];Icon($$anchor,spread_props({name:"arrow-big-up"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2, +()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Arrow_right($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M5 12h14"}],["path",{d:"m12 5 7 7-7 7"}]];Icon($$anchor,spread_props({name:"arrow-right"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children?? +noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Arrow_up($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m5 12 7-7 7 7"}],["path",{d:"M12 19V5"}]];Icon($$anchor,spread_props({name:"arrow-up"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)}, +$$slots:{default:!0}})),pop()}function Book_open_text($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 7v14"}],["path",{d:"M16 12h2"}],["path",{d:"M16 8h2"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"}],["path",{d:"M6 12h2"}],["path",{d:"M6 8h2"}]];Icon($$anchor,spread_props({name:"book-open-text"},()=>props,{get iconNode(){ +return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Braces($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1"}],["path",{d:"M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 \ +2 0 0 0-2-2h-1"}]];Icon($$anchor,spread_props({name:"braces"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Brain($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 \ +0 .556 6.588A4 4 0 1 0 12 18Z"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18"}]];Icon($$anchor,spread_props({ +name:"brain"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Cable($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M17 21v-2a1 1 0 0 1-1-1v-1a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1"}],["path",{d:"M19 15V6.5a1 1 \ +0 0 0-7 0v11a1 1 0 0 1-7 0V9"}],["path",{d:"M21 21v-2h-4"}],["path",{d:"M3 5h4V3"}],["path",{d:"M7 5a1 1 0 0 1 1 1v1a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1V3"}]];Icon($$anchor,spread_props({name:"cable"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Check($$anchor,$$props){push$1($$props,!0); +let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M20 6 9 17l-5-5"}]];Icon($$anchor,spread_props({name:"check"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Chevron_down($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$event\ +s","$$legacy"]);const iconNode=[["path",{d:"m6 9 6 6 6-6"}]];Icon($$anchor,spread_props({name:"chevron-down"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Chevron_left($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"\ +m15 18-6-6 6-6"}]];Icon($$anchor,spread_props({name:"chevron-left"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Chevron_up($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m18 15-6-6-6 6"}]];Icon($$anchor,spread_props( +{name:"chevron-up"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Chevron_right($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m9 18 6-6-6-6"}]];Icon($$anchor,spread_props({name:"chevron-right"},()=>props,{get iconNode(){ +return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Chevrons_up_down($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m7 15 5 5 5-5"}],["path",{d:"m7 9 5-5 5 5"}]];Icon($$anchor,spread_props({name:"chevrons-up-down"},()=>props,{get iconNode(){return iconNode}, +children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Circle_alert($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16"}]];Icon($$anchor,spread_props({name:"circle\ +-alert"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Circle_check_big($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335"}],["path",{d:"m9 11 3 3L22 4"}]];Icon($$anchor,spread_props({name:"\ +circle-check-big"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Circle_x($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"m15 9-6 6"}],["path",{d:"m9 9 6 6"}]];Icon($$anchor,spread_props( +{name:"circle-x"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Clock($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["polyline",{points:"12 6 12 12 16 14"}]];Icon($$anchor,spread_props({name:"\ +clock"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Code($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m16 18 6-6-6-6"}],["path",{d:"m8 6-6 6 6 6"}]];Icon($$anchor,spread_props({name:"code"},()=>props,{get iconNode(){ +return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Copy($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]];Icon($$anchor,spread_props( +{name:"copy"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Database($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5"}],["path",{d:"M3 12A9 3 0 0 0 \ +21 12"}]];Icon($$anchor,spread_props({name:"database"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Download($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 15V3"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-\ +2-2v-4"}],["path",{d:"m7 10 5 5 5-5"}]];Icon($$anchor,spread_props({name:"download"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Ellipsis($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"1"}],["circ\ +le",{cx:"19",cy:"12",r:"1"}],["circle",{cx:"5",cy:"12",r:"1"}]];Icon($$anchor,spread_props({name:"ellipsis"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function External_link($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"\ +M15 3h6v6"}],["path",{d:"M10 14 21 3"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}]];Icon($$anchor,spread_props({name:"external-link"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Eye($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$event\ +s","$$legacy"]);const iconNode=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"}],["circle",{cx:"12",cy:"12",r:"3"}]];Icon($$anchor,spread_props({name:"eye"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function File_text($$anchor,$$props){ +push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4"}],["path",{d:"M10 9H8"}],["path",{d:"M16 13H8"}],["path",{d:"M16 17H8"}]];Icon($$anchor,spread_props({name:"file-text"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children?? +noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function File_x($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4"}],["path",{d:"m14.5 12.5-5 5"}],["path",{d:"m9.5 12.5 5 5"}]];Icon($$anchor,spread_props({name:"file-x"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(), +node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function File$1($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4"}]];Icon($$anchor,spread_props({name:"file"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ +var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Flask_conical($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2"}],["path",{d:"M6.453 15h11.094"}],["path",{d:"M8.5 2h7"}]];Icon($$anchor,spread_props( +{name:"flask-conical"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Folder_open($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0\ + 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"}]];Icon($$anchor,spread_props({name:"folder-open"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Funnel($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[ +["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z"}]];Icon($$anchor,spread_props({name:"funnel"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Gauge($$anchor,$$props){push$1($$props,!0);let props=rest_props( +$$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m12 14 4-4"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0"}]];Icon($$anchor,spread_props({name:"gauge"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Git_branch($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$\ +$slots","$$events","$$legacy"]);const iconNode=[["line",{x1:"6",x2:"6",y1:"3",y2:"15"}],["circle",{cx:"18",cy:"6",r:"3"}],["circle",{cx:"6",cy:"18",r:"3"}],["path",{d:"M18 9a9 9 0 0 1-9 9"}]];Icon($$anchor,spread_props({name:"git-branch"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Globe($$anchor,$$props){ +push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"}],["path",{d:"M2 12h20"}]];Icon($$anchor,spread_props({name:"globe"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()} +function Heart_off($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["line",{x1:"2",y1:"2",x2:"22",y2:"22"}],["path",{d:"M16.5 16.5 12 21l-7-7c-1.5-1.45-3-3.2-3-5.5a5.5 5.5 0 0 1 2.14-4.35"}],["path",{d:"M8.76 3.1c1.15.22 2.13.78 3.24 1.9 1.5-1.5 2.74-2 4.5-2A5.5 5.5 0 0 1 22 8.5c0 2.12-1.3 3.78-2.67 5.17"}]];Icon($$anchor,spread_props({name:"heart-off"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ +var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Heart($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"}]];Icon($$anchor,spread_props({name:"heart"},()=>props,{get iconNode(){ +return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Image$1($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2"}],["circle",{cx:"9",cy:"9",r:"2"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"}]];Icon( +$$anchor,spread_props({name:"image"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Info$1($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 16v-4"}],["path",{d:"M12 8h.01"}]];Icon( +$$anchor,spread_props({name:"info"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Key($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4"}],["path",{d:"m21 2\ +-9.6 9.6"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5"}]];Icon($$anchor,spread_props({name:"key"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Layers($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12.83 2.18a2 2 0 0 0-1\ +.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"}]];Icon($$anchor,spread_props({name:"layers"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2, +fragment_1)},$$slots:{default:!0}})),pop()}function List_checks($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m3 17 2 2 4-4"}],["path",{d:"m3 7 2 2 4-4"}],["path",{d:"M13 6h8"}],["path",{d:"M13 12h8"}],["path",{d:"M13 18h8"}]];Icon($$anchor,spread_props({name:"list-checks"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet( +node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function List_restart($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21 6H3"}],["path",{d:"M7 12H3"}],["path",{d:"M7 18H3"}],["path",{d:"M12 18a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L11 14"}],["path",{d:"M11 10v4h4"}]];Icon($$anchor,spread_props({name:"list-restart"},()=>props,{get iconNode(){return iconNode}, +children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Loader_circle($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56"}]];Icon($$anchor,spread_props({name:"loader-circle"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ +var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Message_square($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"}]];Icon($$anchor,spread_props({name:"message-square"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ +var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Mic($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22"}]];Icon($$anchor,spread_props({name:"mic"},()=>props,{get iconNode(){ +return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Minus($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M5 12h14"}]];Icon($$anchor,spread_props({name:"minus"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(), +node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Monitor($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21"}]];Icon($$anchor,spread_props({name:"monitor"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ +var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Moon($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"}]];Icon($$anchor,spread_props({name:"moon"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child( +fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Music($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M9 18V5l12-2v13"}],["circle",{cx:"6",cy:"18",r:"3"}],["circle",{cx:"18",cy:"16",r:"3"}]];Icon($$anchor,spread_props({name:"music"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child( +fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Package($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z"}],["path",{d:"M12 22V12"}],["polyline",{points:"3.29 7 12 12 20.71 7"}],["path",{d:"m7.5 4.27 9 5.15"}]];Icon($$anchor, +spread_props({name:"package"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Panel_left_close($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M9 3v18"}],["path",{d:"\ +m16 15-3-3 3-3"}]];Icon($$anchor,spread_props({name:"panel-left-close"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Panel_left($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}], +["path",{d:"M9 3v18"}]];Icon($$anchor,spread_props({name:"panel-left"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Pencil_ruler($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M13 7 8.7 2.7a2.41 2.41 0 0 0-3.4 0L2.7\ + 5.3a2.41 2.41 0 0 0 0 3.4L7 13"}],["path",{d:"m8 6 2-2"}],["path",{d:"m18 16 2-2"}],["path",{d:"m17 11 4.3 4.3c.94.94.94 2.46 0 3.4l-2.6 2.6c-.94.94-2.46.94-3.4 0L11 17"}],["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"}],["path",{d:"m15 5 4 4"}]];Icon($$anchor,spread_props({name:"pencil-ruler"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child( +fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Pencil($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"}],["path",{d:"m15 5 4 4"}]];Icon($$anchor,spread_props({name:"pencil"},()=>props,{get iconNode(){return iconNode}, +children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Plus($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M5 12h14"}],["path",{d:"M12 5v14"}]];Icon($$anchor,spread_props({name:"plus"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(), +node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Power_off($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M18.36 6.64A9 9 0 0 1 20.77 15"}],["path",{d:"M6.16 6.16a9 9 0 1 0 12.68 12.68"}],["path",{d:"M12 2v4"}],["path",{d:"m2 2 20 20"}]];Icon($$anchor,spread_props({name:"power-off"},()=>props,{get iconNode(){return iconNode}, +children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Power($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 2v10"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04"}]];Icon($$anchor,spread_props({name:"power"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{ +var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Radio($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M4.9 19.1C1 15.2 1 8.8 4.9 4.9"}],["path",{d:"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5"}],["circle",{cx:"12",cy:"12",r:"2"}],["path",{d:"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5"}],["path",{d:"M19.1 4.9C23 8.8 23\ + 15.1 19.1 19"}]];Icon($$anchor,spread_props({name:"radio"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Refresh_cw($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"}], +["path",{d:"M21 3v5h-5"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"}],["path",{d:"M8 16H3v5"}]];Icon($$anchor,spread_props({name:"refresh-cw"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Rotate_ccw($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots", +"$$events","$$legacy"]);const iconNode=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}],["path",{d:"M3 3v5h5"}]];Icon($$anchor,spread_props({name:"rotate-ccw"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Rotate_cw($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props, +["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"}],["path",{d:"M21 3v5h-5"}]];Icon($$anchor,spread_props({name:"rotate-cw"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Search($$anchor,$$props){push$1($$props,!0);let props=rest_props( +$$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m21 21-4.34-4.34"}],["circle",{cx:"11",cy:"11",r:"8"}]];Icon($$anchor,spread_props({name:"search"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Server($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots", +"$$events","$$legacy"]);const iconNode=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18"}]];Icon($$anchor,spread_props({name:"server"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{ +default:!0}})),pop()}function Settings$1($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.2\ +5a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}],["circle",{cx:"12",cy:"12",r:"3"}]];Icon($$anchor,spread_props({name:"settings"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append( +$$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Shield_question($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"}],["path",{d:"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3"}],["path",{d:"M12 17h.01"}]];Icon($$anchor,spread_props({name:"shield-question"}, +()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Sliders_vertical($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["line",{x1:"4",x2:"4",y1:"21",y2:"14"}],["line",{x1:"4",x2:"4",y1:"10",y2:"3"}],["line",{x1:"12",x2:"12",y1:"21",y2:"\ +12"}],["line",{x1:"12",x2:"12",y1:"8",y2:"3"}],["line",{x1:"20",x2:"20",y1:"21",y2:"16"}],["line",{x1:"20",x2:"20",y1:"12",y2:"3"}],["line",{x1:"2",x2:"6",y1:"14",y2:"14"}],["line",{x1:"10",x2:"14",y1:"8",y2:"8"}],["line",{x1:"18",x2:"22",y1:"16",y2:"16"}]];Icon($$anchor,spread_props({name:"sliders-vertical"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2, +fragment_1)},$$slots:{default:!0}})),pop()}function Sparkles($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"}],["path",{d:"M20 3v4"}],["path",{d:"M22 5h-4"}],["path", +{d:"M4 17v2"}],["path",{d:"M5 18H3"}]];Icon($$anchor,spread_props({name:"sparkles"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Square_pen($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2\ + 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z"}]];Icon($$anchor,spread_props({name:"square-pen"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Square($$anchor,$$props){push$1($$props, +!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}]];Icon($$anchor,spread_props({name:"square"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Sun($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,[ +"$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"12",cy:"12",r:"4"}],["path",{d:"M12 2v2"}],["path",{d:"M12 20v2"}],["path",{d:"m4.93 4.93 1.41 1.41"}],["path",{d:"m17.66 17.66 1.41 1.41"}],["path",{d:"M2 12h2"}],["path",{d:"M20 12h2"}],["path",{d:"m6.34 17.66-1.41 1.41"}],["path",{d:"m19.07 4.93-1.41 1.41"}]];Icon($$anchor,spread_props({name:"sun"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1); +snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Timer_off($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M10 2h4"}],["path",{d:"M4.6 11a8 8 0 0 0 1.7 8.7 8 8 0 0 0 8.7 1.7"}],["path",{d:"M7.4 7.4a8 8 0 0 1 10.3 1 8 8 0 0 1 .9 10.2"}],["path",{d:"m2 2 20 20"}],["path",{d:"M12 12v-2"}]];Icon($$anchor,spread_props({name:"timer-off"},()=>props,{get iconNode(){ +return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Trash_2($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M3 6h18"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2"}],["line",{x1:"10",x2:"10",y1:"\ +11",y2:"17"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17"}]];Icon($$anchor,spread_props({name:"trash-2"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Triangle_alert($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"m21.73\ + 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}],["path",{d:"M12 9v4"}],["path",{d:"M12 17h.01"}]];Icon($$anchor,spread_props({name:"triangle-alert"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Upload($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slot\ +s","$$events","$$legacy"]);const iconNode=[["path",{d:"M12 3v12"}],["path",{d:"m17 8-5-5-5 5"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}]];Icon($$anchor,spread_props({name:"upload"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Whole_word($$anchor,$$props){push$1($$props,!0);let props=rest_props( +$$props,["$$slots","$$events","$$legacy"]);const iconNode=[["circle",{cx:"7",cy:"12",r:"3"}],["path",{d:"M10 9v6"}],["circle",{cx:"17",cy:"12",r:"3"}],["path",{d:"M14 7v8"}],["path",{d:"M22 17v1c0 .5-.5 1-1 1H3c-.5 0-1-.5-1-1v-1"}]];Icon($$anchor,spread_props({name:"whole-word"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})), +pop()}function Wrench($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"}]];Icon($$anchor,spread_props({name:"wrench"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2, +()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function X($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];Icon($$anchor,spread_props({name:"x"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2, +fragment_1)},$$slots:{default:!0}})),pop()}function Zap($$anchor,$$props){push$1($$props,!0);let props=rest_props($$props,["$$slots","$$events","$$legacy"]);const iconNode=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"}]];Icon($$anchor,spread_props({name:"zap"},()=>props,{get iconNode(){return iconNode},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child( +fragment_1);snippet(node2,()=>$$props.children??noop$3),append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}var root_1$11=from_html('<button aria-label="Preview code" type="button"><!></button>'),root$1O=from_html('<div class="code-block-actions"><div><!></div> <!></div>');function ActionIconsCodeBlock($$anchor,$$props){push$1($$props,!0);let disabled=prop($$props,"disabled",3,!1);const showPreview=user_derived(()=>$$props.language?.toLowerCase()===FileTypeText.HTML);function handlePreview(){ +disabled()||$$props.onPreview?.($$props.code,$$props.language)}var div=root$1O(),div_1=child(div);let classes;var node2=child(div_1);{let $0=user_derived(()=>!disabled()),$1=user_derived(()=>disabled()?"Code incomplete":"Copy code");ActionIconCopyToClipboard(node2,{get text(){return $$props.code},get canCopy(){return get$3($0)},get ariaLabel(){return get$3($1)}})}reset(div_1);var node_1=sibling(div_1,2);{var consequent=$$anchor2=>{var button=root_1$11();let classes_1;var node_2=child(button);Eye( +node_2,{size:16}),reset(button),template_effect(()=>{classes_1=set_class(button,1,"preview-code-btn",null,classes_1,{"opacity-50":disabled(),"!cursor-not-allowed":disabled()}),set_attribute(button,"title",disabled()?"Code incomplete":"Preview code"),set_attribute(button,"aria-disabled",disabled())}),delegated("click",button,handlePreview),append($$anchor2,button)};if_block(node_1,$$render=>{get$3(showPreview)&&$$render(consequent)})}reset(div),template_effect(()=>classes=set_class(div_1,1,"copy-\ +code-btn",null,classes,{"opacity-50":disabled(),"!cursor-not-allowed":disabled()})),append($$anchor,div),pop()}delegate(["click"]);const ATTACHMENT_SAVED_REGEX=/\[Attachment saved: ([^\]]+)\]/,NEWLINE_SEPARATOR=` +`,LLM_ERROR_BLOCK_START=` \`\`\` Upstream LLM error: `,LLM_ERROR_BLOCK_END="\n```\n",DEFAULT_AGENTIC_CONFIG={enabled:!0,maxTurns:100,maxToolPreviewLines:25},REASONING_TAGS={START:"<think>",END:"</think>"},LEGACY_REASONING_TAGS={START:"<<<reasoning_content_start>>>"},LEGACY_AGENTIC_REGEX={COMPLETED_TOOL_CALL:/<<<AGENTIC_TOOL_CALL_START>>>\n<<<TOOL_NAME:(.+?)>>>\n<<<TOOL_ARGS_START>>>([\s\S]*?)<<<TOOL_ARGS_END>>>([\s\S]*?)<<<AGENTIC_TOOL_CALL_END>>>/g,REASONING_BLOCK:/<<<reasoning_content_start>>>[\s\S]*?<<<reasoning_content_end>>>/g,REASONING_EXTRACT:/<<<reasoning_content_start>>>([\s\S]*?)<<<reasoning_content_end>>>/, -REASONING_OPEN:/<<<reasoning_content_start>>>[\s\S]*$/,AGENTIC_TOOL_CALL_OPEN:/\n*<<<AGENTIC_TOOL_CALL_START>>>[\s\S]*$/,HAS_LEGACY_MARKERS:/<<<(?:AGENTIC_TOOL_CALL_START|reasoning_content_start)>>>/},API_MODELS={LIST:"/v1/models",LOAD:"/models/load",UNLOAD:"/models/unload"},CORS_PROXY_ENDPOINT="/cors-proxy",ATTACHMENT_LABEL_PDF_FILE="PDF File",ATTACHMENT_LABEL_MCP_PROMPT="MCP Prompt",ATTACHMENT_LABEL_MCP_RESOURCE="MCP Resource",AUTO_SCROLL_INTERVAL=100,AUTO_SCROLL_AT_BOTTOM_THRESHOLD=10,DEFAULT_BINARY_DETECTION_OPTIONS={ +REASONING_OPEN:/<<<reasoning_content_start>>>[\s\S]*$/,AGENTIC_TOOL_CALL_OPEN:/\n*<<<AGENTIC_TOOL_CALL_START>>>[\s\S]*$/,HAS_LEGACY_MARKERS:/<<<(?:AGENTIC_TOOL_CALL_START|reasoning_content_start)>>>/},API_MODELS={LIST:"/v1/models",LOAD:"/models/load",UNLOAD:"/models/unload"},API_TOOLS={LIST:"/tools",EXECUTE:"/tools"},CORS_PROXY_ENDPOINT="/cors-proxy",ATTACHMENT_LABEL_PDF_FILE="PDF File",ATTACHMENT_LABEL_MCP_PROMPT="MCP Prompt",ATTACHMENT_LABEL_MCP_RESOURCE="MCP Resource",FILE_TYPE_ICONS={[FileTypeCategory. +IMAGE]:Image$1,[FileTypeCategory.AUDIO]:Mic,[FileTypeCategory.TEXT]:File_text,[FileTypeCategory.PDF]:File$1},MODALITY_ICONS={[ModelModality.VISION]:Eye,[ModelModality.AUDIO]:Mic},MODALITY_LABELS={[ModelModality.VISION]:"Vision",[ModelModality.AUDIO]:"Audio"},ATTACHMENT_FILE_ITEMS=[{id:AttachmentMenuItemId.IMAGES,label:"Images",icon:FILE_TYPE_ICONS.image,class:"images-button",enabledWhen:AttachmentItemEnabledWhen.HAS_VISION_MODALITY,disabledTooltip:"Image processing requires a vision model",action:AttachmentAction. +FILE_UPLOAD},{id:AttachmentMenuItemId.AUDIO,label:"Audio Files",icon:FILE_TYPE_ICONS.audio,class:"audio-button",enabledWhen:AttachmentItemEnabledWhen.HAS_AUDIO_MODALITY,disabledTooltip:"Audio files processing requires an audio model",action:AttachmentAction.FILE_UPLOAD},{id:AttachmentMenuItemId.TEXT,label:"Text Files",icon:FILE_TYPE_ICONS.text,enabledWhen:AttachmentItemEnabledWhen.ALWAYS,action:AttachmentAction.FILE_UPLOAD},{id:AttachmentMenuItemId.PDF,label:"PDF Files",icon:FILE_TYPE_ICONS.pdf, +enabledWhen:AttachmentItemEnabledWhen.ALWAYS,disabledTooltip:"PDFs will be converted to text. Image-based PDFs may not work properly.",hasEnabledTooltip:!0,action:AttachmentAction.FILE_UPLOAD}],ATTACHMENT_EXTRA_ITEMS=[{id:AttachmentMenuItemId.SYSTEM_MESSAGE,label:"System Message",icon:Message_square,enabledWhen:AttachmentItemEnabledWhen.ALWAYS,hasEnabledTooltip:!0,action:AttachmentAction.SYSTEM_PROMPT_CLICK}],ATTACHMENT_MCP_ITEMS=[{id:AttachmentMenuItemId.MCP_PROMPT,label:"MCP Prompt",icon:Zap,enabledWhen:AttachmentItemEnabledWhen. +ALWAYS,action:AttachmentAction.MCP_PROMPT_CLICK,visibleWhen:AttachmentItemVisibleWhen.HAS_MCP_PROMPTS_SUPPORT},{id:AttachmentMenuItemId.MCP_RESOURCES,label:"MCP Resources",icon:Folder_open,enabledWhen:AttachmentItemEnabledWhen.ALWAYS,action:AttachmentAction.MCP_RESOURCES_CLICK,visibleWhen:AttachmentItemVisibleWhen.HAS_MCP_RESOURCES_SUPPORT}],ATTACHMENT_TOOLTIP_TEXT="Add files, system prompt or MCP Servers",AUTO_SCROLL_INTERVAL=100,AUTO_SCROLL_AT_BOTTOM_THRESHOLD=10,DEFAULT_BINARY_DETECTION_OPTIONS={ prefixLength:1024*10,suspiciousCharThresholdRatio:.15,maxAbsoluteNullBytes:2},DEFAULT_CACHE_TTL_MS=300*1e3,DEFAULT_CACHE_MAX_ENTRIES=100,MODEL_PROPS_CACHE_TTL_MS=600*1e3,MODEL_PROPS_CACHE_MAX_ENTRIES=50,MCP_RESOURCE_CACHE_MAX_ENTRIES=50,MCP_RESOURCE_CACHE_TTL_MS=300*1e3,MAX_INACTIVE_CONVERSATION_STATES=10,INACTIVE_CONVERSATION_STATE_MAX_AGE_MS=1800*1e3,INITIAL_FILE_SIZE=0,PROMPT_CONTENT_SEPARATOR=` -`,CLIPBOARD_CONTENT_QUOTE_PREFIX='"',PROMPT_TRIGGER_PREFIX="/",RESOURCE_TRIGGER_PREFIX="@",CODE_BLOCK_SCROLL_CONTAINER_CLASS="code-block-scroll-container",CODE_BLOCK_WRAPPER_CLASS="code-block-wrapper",CODE_BLOCK_HEADER_CLASS="code-block-header",CODE_BLOCK_ACTIONS_CLASS="code-block-actions",CODE_LANGUAGE_CLASS="code-language",COPY_CODE_BTN_CLASS="copy-code-btn",PREVIEW_CODE_BTN_CLASS="preview-code-btn",RELATIVE_CLASS="relative",NEWLINE=` -`,DEFAULT_LANGUAGE="text",LANG_PATTERN=/^(\w*)\n?/,AMPERSAND_REGEX=/&/g,LT_REGEX=/</g,GT_REGEX=/>/g,FENCE_PATTERN=/^```|\n```/g,CONTEXT_KEY_MESSAGE_EDIT="chat-message-edit",CONTEXT_KEY_CHAT_ACTIONS="chat-actions",CONTEXT_KEY_CHAT_SETTINGS_DIALOG="chat-settings-dialog",BOX_BORDER="border border-border/30 focus-within:border-border dark:border-border/20 dark:focus-within:border-border",INPUT_CLASSES=` +`,CLIPBOARD_CONTENT_QUOTE_PREFIX='"',PROMPT_TRIGGER_PREFIX="/",RESOURCE_TRIGGER_PREFIX="@",NEW_CHAT_DRAFT_KEY="__new_chat__",CODE_BLOCK_SCROLL_CONTAINER_CLASS="code-block-scroll-container",CODE_BLOCK_WRAPPER_CLASS="code-block-wrapper",CODE_BLOCK_HEADER_CLASS="code-block-header",CODE_BLOCK_ACTIONS_CLASS="code-block-actions",CODE_LANGUAGE_CLASS="code-language",COPY_CODE_BTN_CLASS="copy-code-btn",PREVIEW_CODE_BTN_CLASS="preview-code-btn",RELATIVE_CLASS="relative",NEWLINE=` +`,DEFAULT_LANGUAGE="text",LANG_PATTERN=/^(\w*)\n?/,AMPERSAND_REGEX=/&/g,LT_REGEX=/</g,GT_REGEX=/>/g,FENCE_PATTERN=/^```|\n```/g,CONTEXT_KEY_MESSAGE_EDIT="chat-message-edit",CONTEXT_KEY_CHAT_ACTIONS="chat-actions",CONTEXT_KEY_CHAT_SETTINGS_CONFIG="chat-settings-config",CONTEXT_KEY_PROCESSING_INFO="processing-info",BOX_BORDER="border border-border/30 focus-within:border-border dark:border-border/20 dark:focus-within:border-border",INPUT_CLASSES=` bg-muted/60 dark:bg-muted/75 ${BOX_BORDER} shadow-sm @@ -1235,16 +1301,16 @@ prefixLength:1024*10,suspiciousCharThresholdRatio:.15,maxAbsoluteNullBytes:2},DE shadow-sm backdrop-blur-lg! rounded-t-lg! `,CHAT_FORM_POPOVER_MAX_HEIGHT="max-h-80",GOOGLE_FAVICON_BASE_URL="https://www.google.com/s2/favicons",DEFAULT_FAVICON_SIZE=32,DOMAIN_SEPARATOR=".",ROOT_DOMAIN_MIN_PARTS=2,MS_PER_SECOND=1e3,SECONDS_PER_MINUTE=60,SECONDS_PER_HOUR=3600,SHORT_DURATION_THRESHOLD=1,MEDIUM_DURATION_THRESHOLD=10,DEFAULT_PERFORMANCE_TIME="0s",KEY_VALUE_PAIR_KEY_MAX_LENGTH=256,KEY_VALUE_PAIR_VALUE_MAX_LENGTH=8192,KEY_VALUE_PAIR_UNSAFE_KEY_RE=/[\x00-\x1F\x7F]/g,KEY_VALUE_PAIR_UNSAFE_VALUE_RE=/[\x00-\x08\x0A-\x0D\x0E-\x1F\x7F]/g, -FILE_TYPE_ICONS={[FileTypeCategory.IMAGE]:Image$1,[FileTypeCategory.AUDIO]:Mic,[FileTypeCategory.TEXT]:File_text,[FileTypeCategory.PDF]:File$1},MODALITY_ICONS={[ModelModality.VISION]:Eye,[ModelModality.AUDIO]:Mic},MODALITY_LABELS={[ModelModality.VISION]:"Vision",[ModelModality.AUDIO]:"Audio"},CODE_BLOCK_REGEXP=/(```[\s\S]*?```|`[^`\n]+`)/g,LATEX_MATH_AND_CODE_PATTERN=new RegExp("(```[\\S\\s]*?```|`.*?`)|(?<!\\\\)\\\\\\[([\\S\\s]*?[^\\\\])\\\\]|(?<!\\\\)\\\\\\((.*?)\\\\\\)","g"),LATEX_LINEBREAK_REGEXP=/\$\$([\s\S]*?\\\\[\s\S]*?)\$\$/, -LINE_BREAK=/\r?\n/,PHRASE_PARENTS=new Set(["paragraph","heading","emphasis","strong","delete","link","linkReference","tableCell"]),NBSP=" ",TAB_AS_SPACES=NBSP.repeat(4),CONFIG_LOCALSTORAGE_KEY="LlamaCppWebui.config",USER_OVERRIDES_LOCALSTORAGE_KEY="LlamaCppWebui.userOverrides",FAVORITE_MODELS_LOCALSTORAGE_KEY="LlamaCppWebui.favoriteModels",MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY="LlamaCppWebui.mcpDefaultEnabled",IMAGE_NOT_ERROR_BOUND_SELECTOR="img:not([data-error-bound])",DATA_ERROR_BOUND_ATTR="er\ -rorBound",DATA_ERROR_HANDLED_ATTR="errorHandled",BOOL_TRUE_STRING="true",DEFAULT_CLIENT_VERSION="1.0.0",DEFAULT_IMAGE_MIME_TYPE=MimeTypeImage.PNG,MCP_ALLOWED_ICON_MIME_TYPES=new Set([MimeTypeImage.PNG,MimeTypeImage.JPEG,MimeTypeImage.JPG,MimeTypeImage.SVG,MimeTypeImage.WEBP]),MCP_PROTOCOL_VERSION="2025-06-18",DEFAULT_MCP_CONFIG={protocolVersion:MCP_PROTOCOL_VERSION,capabilities:{tools:{listChanged:!0}},clientInfo:{name:"llama-webui-mcp",version:DEFAULT_CLIENT_VERSION},requestTimeoutSeconds:300,connectionTimeoutMs:1e4}, -MCP_SERVER_ID_PREFIX="LlamaCpp-WebUI-MCP-Server",MCP_RECONNECT_INITIAL_DELAY=1e3,MCP_RECONNECT_BACKOFF_MULTIPLIER=2,MCP_RECONNECT_MAX_DELAY=3e4,MCP_RECONNECT_ATTEMPT_TIMEOUT_MS=15e3,MAX_DISPLAYED_MCP_AVATARS=3,EXPECTED_THEMED_ICON_PAIR_COUNT=2,CORS_PROXY_URL_PARAM="url",MCP_SESSION_ID_VISIBLE_CHARS=5,MCP_PARTIAL_REDACT_HEADERS=new Map([["mcp-session-id",MCP_SESSION_ID_VISIBLE_CHARS]]),REDACTED_HEADERS=new Set(["authorization","api-key","cookie","mcp-session-id","proxy-authorization","set-cookie", -"x-auth-token","x-api-key"]),MCP_TRANSPORT_LABELS={[MCPTransportType.WEBSOCKET]:"WebSocket",[MCPTransportType.STREAMABLE_HTTP]:"HTTP",[MCPTransportType.SSE]:"SSE"},MCP_TRANSPORT_ICONS={[MCPTransportType.WEBSOCKET]:Zap,[MCPTransportType.STREAMABLE_HTTP]:Globe,[MCPTransportType.SSE]:Radio},MCP_SERVER_URL_PLACEHOLDER="https://mcp.example.com/sse",MIN_AUTOCOMPLETE_INPUT_LENGTH=1,IMAGE_FILE_EXTENSION_REGEX=/\.(png|jpg|jpeg|gif|svg|webp)$/i,CODE_FILE_EXTENSION_REGEX=/\.(js|ts|json|yaml|yml|xml|html|css|py|rs|go|java|cpp|c|h|rb|sh|toml)$/i, -TEXT_FILE_EXTENSION_REGEX=/\.(txt|md|log)$/i,PROTOCOL_PREFIX_REGEX=/^[a-z]+:\/\//,FILE_EXTENSION_REGEX=/\.[^.]+$/,DISPLAY_NAME_SEPARATOR_REGEX=/[-_]/,DATA_URI_BASE64_REGEX=/^data:([^;]+);base64,([A-Za-z0-9+/]+=*)$/,MCP_ATTACHMENT_NAME_PREFIX="mcp-attachment",MCP_RESOURCE_ATTACHMENT_ID_PREFIX="res",DEFAULT_IMAGE_EXTENSION="img",DEFAULT_RESOURCE_FILENAME="resource.txt",PATH_SEPARATOR="/",RESOURCE_TEXT_CONTENT_SEPARATOR=` +CODE_BLOCK_REGEXP=/(```[\s\S]*?```|`[^`\n]+`)/g,LATEX_MATH_AND_CODE_PATTERN=new RegExp("(```[\\S\\s]*?```|`.*?`)|(?<!\\\\)\\\\\\[([\\S\\s]*?[^\\\\])\\\\]|(?<!\\\\)\\\\\\((.*?)\\\\\\)","g"),LATEX_LINEBREAK_REGEXP=/\$\$([\s\S]*?\\\\[\s\S]*?)\$\$/,LINE_BREAK=/\r?\n/,PHRASE_PARENTS=new Set(["paragraph","heading","emphasis","strong","delete","link","linkReference","tableCell"]),NBSP=" ",TAB_AS_SPACES=NBSP.repeat(4),ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY="LlamaCppWebui.alwaysAllowedTools",CONFIG_LOCALSTORAGE_KEY="\ +LlamaCppWebui.config",DISABLED_TOOLS_LOCALSTORAGE_KEY="LlamaCppWebui.disabledTools",FAVORITE_MODELS_LOCALSTORAGE_KEY="LlamaCppWebui.favoriteModels",MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY="LlamaCppWebui.mcpDefaultEnabled",USER_OVERRIDES_LOCALSTORAGE_KEY="LlamaCppWebui.userOverrides",IMAGE_NOT_ERROR_BOUND_SELECTOR="img:not([data-error-bound])",DATA_ERROR_BOUND_ATTR="errorBound",DATA_ERROR_HANDLED_ATTR="errorHandled",BOOL_TRUE_STRING="true",DEFAULT_CLIENT_VERSION="1.0.0",DEFAULT_IMAGE_MIME_TYPE=MimeTypeImage. +PNG,MCP_ALLOWED_ICON_MIME_TYPES=new Set([MimeTypeImage.PNG,MimeTypeImage.JPEG,MimeTypeImage.JPG,MimeTypeImage.SVG,MimeTypeImage.WEBP]),MCP_PROTOCOL_VERSION="2025-06-18",DEFAULT_MCP_CONFIG={protocolVersion:MCP_PROTOCOL_VERSION,capabilities:{tools:{listChanged:!0}},clientInfo:{name:"llama-webui-mcp",version:DEFAULT_CLIENT_VERSION},requestTimeoutSeconds:300,connectionTimeoutMs:1e4},MCP_SERVER_ID_PREFIX="LlamaCpp-WebUI-MCP-Server",MCP_RECONNECT_INITIAL_DELAY=1e3,MCP_RECONNECT_BACKOFF_MULTIPLIER=2,MCP_RECONNECT_MAX_DELAY=3e4, +MCP_RECONNECT_ATTEMPT_TIMEOUT_MS=15e3,EXPECTED_THEMED_ICON_PAIR_COUNT=2,CORS_PROXY_URL_PARAM="url",MCP_SESSION_ID_VISIBLE_CHARS=5,MCP_PARTIAL_REDACT_HEADERS=new Map([["mcp-session-id",MCP_SESSION_ID_VISIBLE_CHARS]]),REDACTED_HEADERS=new Set(["authorization","api-key","cookie","mcp-session-id","proxy-authorization","set-cookie","x-auth-token","x-api-key"]),MCP_TRANSPORT_LABELS={[MCPTransportType.WEBSOCKET]:"WebSocket",[MCPTransportType.STREAMABLE_HTTP]:"HTTP",[MCPTransportType.SSE]:"SSE"},MCP_TRANSPORT_ICONS={ +[MCPTransportType.WEBSOCKET]:Zap,[MCPTransportType.STREAMABLE_HTTP]:Globe,[MCPTransportType.SSE]:Radio},MCP_SERVER_URL_PLACEHOLDER="https://mcp.example.com/sse",MIN_AUTOCOMPLETE_INPUT_LENGTH=1,IMAGE_FILE_EXTENSION_REGEX=/\.(png|jpg|jpeg|gif|svg|webp)$/i,CODE_FILE_EXTENSION_REGEX=/\.(js|ts|json|yaml|yml|xml|html|css|py|rs|go|java|cpp|c|h|rb|sh|toml)$/i,TEXT_FILE_EXTENSION_REGEX=/\.(txt|md|log)$/i,PROTOCOL_PREFIX_REGEX=/^[a-z]+:\/\//,FILE_EXTENSION_REGEX=/\.[^.]+$/,DISPLAY_NAME_SEPARATOR_REGEX=/[-_]/, +DATA_URI_BASE64_REGEX=/^data:([^;]+);base64,([A-Za-z0-9+/]+=*)$/,MCP_ATTACHMENT_NAME_PREFIX="mcp-attachment",MCP_RESOURCE_ATTACHMENT_ID_PREFIX="res",DEFAULT_IMAGE_EXTENSION="img",DEFAULT_RESOURCE_FILENAME="resource.txt",PATH_SEPARATOR="/",RESOURCE_TEXT_CONTENT_SEPARATOR=` `,RESOURCE_UNKNOWN_TYPE="unknown type",BINARY_CONTENT_LABEL="Binary content",IMAGE_MIME_TO_EXTENSION={[MimeTypeImage.JPEG]:"jpg",[MimeTypeImage.JPG]:"jpg",[MimeTypeImage.PNG]:"png",[MimeTypeImage.GIF]:"gif",[MimeTypeImage.WEBP]:"webp"},EXPORT_CONV_ID_TRIM_LENGTH=8,EXPORT_CONV_NAME_SUFFIX_MAX_LENGTH=20,ISO_TIMESTAMP_SLICE_LENGTH=19,NON_ALPHANUMERIC_REGEX=/[^a-z0-9]/gi,EXPORT_CONV_NONALNUM_REPLACEMENT="_",MULTIPLE_UNDERSCORE_REGEX=/_+/g,ISO_DATE_TIME_SEPARATOR="T",ISO_DATE_TIME_SEPARATOR_REPLACEMENT="\ _",ISO_TIME_SEPARATOR=":",ISO_TIME_SEPARATOR_REPLACEMENT="-",MODEL_ID_NOT_FOUND=-1,MODEL_ID_ORG_SEPARATOR="/",MODEL_ID_SEGMENT_SEPARATOR="-",MODEL_ID_QUANTIZATION_SEPARATOR=":",MODEL_QUANTIZATION_SEGMENT_RE=/^(I?Q\d+(_[A-Z0-9]+)*|F\d+|BF\d+|MXFP\d+(_[A-Z0-9]+)*)$/i,MODEL_CUSTOM_QUANTIZATION_PREFIX_RE=/^UD$/i,MODEL_PARAMS_RE=/^\d+(\.\d+)?[BbMmKkTt]$/,MODEL_ACTIVATED_PARAMS_RE=/^[Aa]\d+(\.\d+)?[BbMmKkTt]$/,MODEL_IGNORED_SEGMENTS=new Set(["GGUF","GGML"]),PRECISION_MULTIPLIER=1e6,PROCESSING_INFO_TIMEOUT=2e3, -STATS_UNITS={TOKENS_PER_SECOND:"t/s"},SETTING_CONFIG_DEFAULT={apiKey:"",systemMessage:"",showSystemMessage:!0,theme:ColorMode.SYSTEM,showThoughtInProgress:!1,disableReasoningParsing:!1,excludeReasoningFromContext:!1,showRawOutputSwitch:!1,keepStatsVisible:!1,showMessageStats:!0,askForTitleConfirmation:!1,titleGenerationUseFirstLine:!1,pasteLongTextToFileLen:2500,copyTextAttachmentsAsPlainText:!1,pdfAsImage:!1,disableAutoScroll:!1,renderUserContentAsMarkdown:!1,alwaysShowSidebarOnDesktop:!1,autoShowSidebarOnNewChat:!0, +STATS_UNITS={TOKENS_PER_SECOND:"t/s"},SETTING_CONFIG_DEFAULT={apiKey:"",systemMessage:"",showSystemMessage:!0,theme:ColorMode.SYSTEM,showThoughtInProgress:!0,disableReasoningParsing:!1,excludeReasoningFromContext:!1,showRawOutputSwitch:!1,keepStatsVisible:!1,showMessageStats:!0,askForTitleConfirmation:!1,titleGenerationUseFirstLine:!1,pasteLongTextToFileLen:2500,copyTextAttachmentsAsPlainText:!1,pdfAsImage:!1,disableAutoScroll:!1,renderUserContentAsMarkdown:!1,alwaysShowSidebarOnDesktop:!1,autoShowSidebarOnNewChat:!0, sendOnEnter:!0,autoMicOnEmpty:!1,fullHeightCodeBlocks:!1,showRawModelNames:!1,mcpServers:"[]",mcpServerUsageStats:"{}",agenticMaxTurns:10,agenticMaxToolPreviewLines:25,showToolCallInProgress:!1,alwaysShowAgenticTurns:!1,samplers:"",backend_sampling:!1,temperature:void 0,dynatemp_range:void 0,dynatemp_exponent:void 0,top_k:void 0,top_p:void 0,min_p:void 0,xtc_probability:void 0,xtc_threshold:void 0,typ_p:void 0,repeat_last_n:void 0,repeat_penalty:void 0,presence_penalty:void 0,frequency_penalty:void 0, dry_multiplier:void 0,dry_base:void 0,dry_allowed_length:void 0,dry_penalty_last_n:void 0,max_tokens:void 0,custom:"",preEncodeConversation:!1,pyInterpreterEnabled:!1,enableContinueGeneration:!1},SETTING_CONFIG_INFO={apiKey:"Set the API Key if you are using <code>--api-key</code> option for the server.",systemMessage:"The starting message that defines how model should behave.",showSystemMessage:"Display the system message at the top of each conversation.",theme:"Choose the color theme for the in\ terface. You can choose between System (follows your device settings), Light, or Dark.",pasteLongTextToFileLen:"On pasting long text, it will be converted to a file. You can control the file length by setting the value of this parameter. Value 0 means disable.",copyTextAttachmentsAsPlainText:"When copying a message with text attachments, combine them into a single plain text string instead of a special format that can be pasted back as attachments.",samplers:'The order at which samplers are appl\ @@ -1260,97 +1326,118 @@ Disable automatic scrolling while messages stream so you can control the viewpor ient settings section to edit.",mcpServerUsageStats:"Usage statistics for MCP servers. Tracks how many times tools from each server have been used.",agenticMaxTurns:"Maximum number of tool execution cycles before stopping (prevents infinite loops).",agenticMaxToolPreviewLines:"Number of lines shown in tool output previews (last N lines). Only these previews and the final LLM response persist after the agentic loop completes.",showToolCallInProgress:"Automatically expand tool call details while e\ xecuting and keep them expanded after completion.",pyInterpreterEnabled:"Enable Python interpreter using Pyodide. Allows running Python code in markdown code blocks.",preEncodeConversation:"After each response, re-submit the conversation to pre-fill the server KV cache. Makes the next turn faster since the prompt is already encoded while you read the response.",enableContinueGeneration:'Enable "Continue" button for assistant messages. Currently works only with non-reasoning models.'},SETTINGS_COLOR_MODES_CONFIG=[ {value:ColorMode.SYSTEM,label:"System",icon:Monitor},{value:ColorMode.LIGHT,label:"Light",icon:Sun},{value:ColorMode.DARK,label:"Dark",icon:Moon}],NUMERIC_FIELDS=["temperature","top_k","top_p","min_p","max_tokens","pasteLongTextToFileLen","dynatemp_range","dynatemp_exponent","typ_p","xtc_probability","xtc_threshold","repeat_last_n","repeat_penalty","presence_penalty","frequency_penalty","dry_multiplier","dry_base","dry_allowed_length","dry_penalty_last_n","agenticMaxTurns","agenticMaxToolPreview\ -Lines"],POSITIVE_INTEGER_FIELDS=["agenticMaxTurns","agenticMaxToolPreviewLines"],SETTINGS_KEYS={THEME:"theme",API_KEY:"apiKey",SYSTEM_MESSAGE:"systemMessage",PASTE_LONG_TEXT_TO_FILE_LEN:"pasteLongTextToFileLen",COPY_TEXT_ATTACHMENTS_AS_PLAIN_TEXT:"copyTextAttachmentsAsPlainText",SEND_ON_ENTER:"sendOnEnter",ENABLE_CONTINUE_GENERATION:"enableContinueGeneration",PDF_AS_IMAGE:"pdfAsImage",ASK_FOR_TITLE_CONFIRMATION:"askForTitleConfirmation",TITLE_GENERATION_USE_FIRST_LINE:"titleGenerationUseFirstLin\ -e",SHOW_MESSAGE_STATS:"showMessageStats",SHOW_THOUGHT_IN_PROGRESS:"showThoughtInProgress",KEEP_STATS_VISIBLE:"keepStatsVisible",AUTO_MIC_ON_EMPTY:"autoMicOnEmpty",RENDER_USER_CONTENT_AS_MARKDOWN:"renderUserContentAsMarkdown",DISABLE_AUTO_SCROLL:"disableAutoScroll",ALWAYS_SHOW_SIDEBAR_ON_DESKTOP:"alwaysShowSidebarOnDesktop",AUTO_SHOW_SIDEBAR_ON_NEW_CHAT:"autoShowSidebarOnNewChat",FULL_HEIGHT_CODE_BLOCKS:"fullHeightCodeBlocks",SHOW_RAW_MODEL_NAMES:"showRawModelNames",TEMPERATURE:"temperature",DYNATEMP_RANGE:"\ -dynatemp_range",DYNATEMP_EXPONENT:"dynatemp_exponent",TOP_K:"top_k",TOP_P:"top_p",MIN_P:"min_p",XTC_PROBABILITY:"xtc_probability",XTC_THRESHOLD:"xtc_threshold",TYP_P:"typ_p",MAX_TOKENS:"max_tokens",SAMPLERS:"samplers",BACKEND_SAMPLING:"backend_sampling",REPEAT_LAST_N:"repeat_last_n",REPEAT_PENALTY:"repeat_penalty",PRESENCE_PENALTY:"presence_penalty",FREQUENCY_PENALTY:"frequency_penalty",DRY_MULTIPLIER:"dry_multiplier",DRY_BASE:"dry_base",DRY_ALLOWED_LENGTH:"dry_allowed_length",DRY_PENALTY_LAST_N:"\ -dry_penalty_last_n",AGENTIC_MAX_TURNS:"agenticMaxTurns",ALWAYS_SHOW_AGENTIC_TURNS:"alwaysShowAgenticTurns",AGENTIC_MAX_TOOL_PREVIEW_LINES:"agenticMaxToolPreviewLines",SHOW_TOOL_CALL_IN_PROGRESS:"showToolCallInProgress",PRE_ENCODE_CONVERSATION:"preEncodeConversation",DISABLE_REASONING_PARSING:"disableReasoningParsing",EXCLUDE_REASONING_FROM_CONTEXT:"excludeReasoningFromContext",SHOW_RAW_OUTPUT_SWITCH:"showRawOutputSwitch",CUSTOM:"custom"},SETTINGS_SECTION_TITLES={GENERAL:"General",DISPLAY:"Displa\ -y",SAMPLING:"Sampling",PENALTIES:"Penalties",IMPORT_EXPORT:"Import/Export",MCP:"MCP",DEVELOPER:"Developer"};FileTypeAudio.MP3+"",FileExtensionAudio.MP3,MimeTypeAudio.MP3_MPEG,MimeTypeAudio.MP3,FileTypeAudio.WAV+"",FileExtensionAudio.WAV,MimeTypeAudio.WAV;FileTypeImage.JPEG+"",FileExtensionImage.JPG,FileExtensionImage.JPEG,MimeTypeImage.JPEG,FileTypeImage.PNG+"",FileExtensionImage.PNG,MimeTypeImage.PNG,FileTypeImage.GIF+"",FileExtensionImage.GIF,MimeTypeImage.GIF,FileTypeImage.WEBP+"",FileExtensionImage. -WEBP,MimeTypeImage.WEBP,FileTypeImage.SVG+"",FileExtensionImage.SVG,MimeTypeImage.SVG;FileTypePdf.PDF+"",FileExtensionPdf.PDF,MimeTypeApplication.PDF;FileTypeText.PLAIN_TEXT+"",FileExtensionText.TXT,MimeTypeText.PLAIN,FileTypeText.MARKDOWN+"",FileExtensionText.MD,MimeTypeText.MARKDOWN,FileTypeText.ASCIIDOC+"",FileExtensionText.ADOC,MimeTypeText.ASCIIDOC,FileTypeText.JAVASCRIPT+"",FileExtensionText.JS,MimeTypeText.JAVASCRIPT,MimeTypeText.JAVASCRIPT_APP,FileTypeText.TYPESCRIPT+"",FileExtensionText. -TS,MimeTypeText.TYPESCRIPT,FileTypeText.JSX+"",FileExtensionText.JSX,MimeTypeText.JSX,FileTypeText.TSX+"",FileExtensionText.TSX,MimeTypeText.TSX,FileTypeText.CSS+"",FileExtensionText.CSS,MimeTypeText.CSS,FileTypeText.HTML+"",FileExtensionText.HTML,FileExtensionText.HTM,MimeTypeText.HTML,FileTypeText.JSON+"",FileExtensionText.JSON,MimeTypeText.JSON,FileTypeText.XML+"",FileExtensionText.XML,MimeTypeText.XML_TEXT,MimeTypeText.XML_APP,FileTypeText.YAML+"",FileExtensionText.YAML,FileExtensionText.YML, -MimeTypeText.YAML_TEXT,MimeTypeText.YAML_APP,FileTypeText.CSV+"",FileExtensionText.CSV,MimeTypeText.CSV,FileTypeText.LOG+"",FileExtensionText.LOG,MimeTypeText.PLAIN,FileTypeText.PYTHON+"",FileExtensionText.PY,MimeTypeText.PYTHON,FileTypeText.JAVA+"",FileExtensionText.JAVA,MimeTypeText.JAVA,FileTypeText.CPP+"",FileExtensionText.CPP,FileExtensionText.C,FileExtensionText.H,FileExtensionText.HPP,MimeTypeText.CPP_SRC,MimeTypeText.CPP_HDR,MimeTypeText.C_SRC,MimeTypeText.C_HDR,FileTypeText.PHP+"",FileExtensionText. -PHP,MimeTypeText.PHP,FileTypeText.RUBY+"",FileExtensionText.RB,MimeTypeText.RUBY,FileTypeText.GO+"",FileExtensionText.GO,MimeTypeText.GO,FileTypeText.RUST+"",FileExtensionText.RS,MimeTypeText.RUST,FileTypeText.SHELL+"",FileExtensionText.SH,FileExtensionText.BAT,MimeTypeText.SHELL,MimeTypeText.BAT,FileTypeText.SQL+"",FileExtensionText.SQL,MimeTypeText.SQL,FileTypeText.R+"",FileExtensionText.R,MimeTypeText.R,FileTypeText.SCALA+"",FileExtensionText.SCALA,MimeTypeText.SCALA,FileTypeText.KOTLIN+"",FileExtensionText. -KT,MimeTypeText.KOTLIN,FileTypeText.SWIFT+"",FileExtensionText.SWIFT,MimeTypeText.SWIFT,FileTypeText.DART+"",FileExtensionText.DART,MimeTypeText.DART,FileTypeText.VUE+"",FileExtensionText.VUE,MimeTypeText.VUE,FileTypeText.SVELTE+"",FileExtensionText.SVELTE,MimeTypeText.SVELTE,FileTypeText.LATEX+"",FileExtensionText.TEX,MimeTypeText.LATEX,MimeTypeText.TEX,MimeTypeText.TEX_APP,FileTypeText.BIBTEX+"",FileExtensionText.BIB,MimeTypeText.BIBTEX,FileTypeText.CUDA+"",FileExtensionText.CU,FileExtensionText. -CUH,MimeTypeText.CUDA,FileTypeText.VULKAN+"",FileExtensionText.COMP,MimeTypeText.PLAIN,FileTypeText.HASKELL+"",FileExtensionText.HS,MimeTypeText.HASKELL,FileTypeText.CSHARP+"",FileExtensionText.CS,MimeTypeText.CSHARP,FileTypeText.PROPERTIES+"",FileExtensionText.PROPERTIES,MimeTypeText.PROPERTIES;const BR_PATTERN=/<br\s*\/?\s*>/gi,LIST_PATTERN=/^<ul>([\s\S]*)<\/ul>$/i,LI_PATTERN=/<li>([\s\S]*?)<\/li>/gi,TOOLTIP_DELAY_DURATION=500,FORK_TREE_DEPTH_PADDING=8,SYSTEM_MESSAGE_PLACEHOLDER="System messag\ -e",URI_SCHEME_SEPARATOR="://",TEMPLATE_EXPRESSION_REGEX=/\{([+#./;?&]?)([^}]+)\}/g,URI_TEMPLATE_OPERATORS={RESERVED:"+",FRAGMENT:"#",PATH_SEGMENT:"/",LABEL:".",PATH_PARAM:";",FORM_QUERY:"?",FORM_CONTINUATION:"&"},URI_TEMPLATE_SEPARATORS={COMMA:",",SLASH:"/",PERIOD:".",SEMICOLON:";",QUERY_PREFIX:"?",QUERY_CONTINUATION:"&"},VARIABLE_EXPLODE_MODIFIER_REGEX=/[*]$/,VARIABLE_PREFIX_MODIFIER_REGEX=/:[\d]+$/,LEADING_SLASHES_REGEX=/^\/+/,DEFAULT_MOBILE_BREAKPOINT=768;class IsMobile extends MediaQuery{constructor(breakpoint=DEFAULT_MOBILE_BREAKPOINT){ -super(`max-width: ${breakpoint-1}px`)}}const SYNCABLE_PARAMETERS=[{key:"temperature",serverKey:"temperature",type:SyncableParameterType.NUMBER,canSync:!0},{key:"top_k",serverKey:"top_k",type:SyncableParameterType.NUMBER,canSync:!0},{key:"top_p",serverKey:"top_p",type:SyncableParameterType.NUMBER,canSync:!0},{key:"min_p",serverKey:"min_p",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dynatemp_range",serverKey:"dynatemp_range",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dynatemp_expo\ -nent",serverKey:"dynatemp_exponent",type:SyncableParameterType.NUMBER,canSync:!0},{key:"xtc_probability",serverKey:"xtc_probability",type:SyncableParameterType.NUMBER,canSync:!0},{key:"xtc_threshold",serverKey:"xtc_threshold",type:SyncableParameterType.NUMBER,canSync:!0},{key:"typ_p",serverKey:"typ_p",type:SyncableParameterType.NUMBER,canSync:!0},{key:"repeat_last_n",serverKey:"repeat_last_n",type:SyncableParameterType.NUMBER,canSync:!0},{key:"repeat_penalty",serverKey:"repeat_penalty",type:SyncableParameterType. -NUMBER,canSync:!0},{key:"presence_penalty",serverKey:"presence_penalty",type:SyncableParameterType.NUMBER,canSync:!0},{key:"frequency_penalty",serverKey:"frequency_penalty",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dry_multiplier",serverKey:"dry_multiplier",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dry_base",serverKey:"dry_base",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dry_allowed_length",serverKey:"dry_allowed_length",type:SyncableParameterType.NUMBER,canSync:!0}, -{key:"dry_penalty_last_n",serverKey:"dry_penalty_last_n",type:SyncableParameterType.NUMBER,canSync:!0},{key:"max_tokens",serverKey:"max_tokens",type:SyncableParameterType.NUMBER,canSync:!0},{key:"samplers",serverKey:"samplers",type:SyncableParameterType.STRING,canSync:!0},{key:"backend_sampling",serverKey:"backend_sampling",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"pasteLongTextToFileLen",serverKey:"pasteLongTextToFileLen",type:SyncableParameterType.NUMBER,canSync:!0},{key:"pdfAsImage", -serverKey:"pdfAsImage",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"showThoughtInProgress",serverKey:"showThoughtInProgress",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"keepStatsVisible",serverKey:"keepStatsVisible",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"showMessageStats",serverKey:"showMessageStats",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"askForTitleConfirmation",serverKey:"askForTitleConfirmation",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"\ -titleGenerationUseFirstLine",serverKey:"titleGenerationUseFirstLine",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"disableAutoScroll",serverKey:"disableAutoScroll",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"renderUserContentAsMarkdown",serverKey:"renderUserContentAsMarkdown",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"autoMicOnEmpty",serverKey:"autoMicOnEmpty",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"pyInterpreterEnabled",serverKey:"pyInterpreterEnabled",type:SyncableParameterType. -BOOLEAN,canSync:!0},{key:"enableContinueGeneration",serverKey:"enableContinueGeneration",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"fullHeightCodeBlocks",serverKey:"fullHeightCodeBlocks",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"systemMessage",serverKey:"systemMessage",type:SyncableParameterType.STRING,canSync:!0},{key:"showSystemMessage",serverKey:"showSystemMessage",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"theme",serverKey:"theme",type:SyncableParameterType.STRING, -canSync:!0},{key:"copyTextAttachmentsAsPlainText",serverKey:"copyTextAttachmentsAsPlainText",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"showRawOutputSwitch",serverKey:"showRawOutputSwitch",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"alwaysShowSidebarOnDesktop",serverKey:"alwaysShowSidebarOnDesktop",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"autoShowSidebarOnNewChat",serverKey:"autoShowSidebarOnNewChat",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"showRawModel\ -Names",serverKey:"showRawModelNames",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"mcpServers",serverKey:"mcpServers",type:SyncableParameterType.STRING,canSync:!0},{key:"agenticMaxTurns",serverKey:"agenticMaxTurns",type:SyncableParameterType.NUMBER,canSync:!0},{key:"agenticMaxToolPreviewLines",serverKey:"agenticMaxToolPreviewLines",type:SyncableParameterType.NUMBER,canSync:!0},{key:"showToolCallInProgress",serverKey:"showToolCallInProgress",type:SyncableParameterType.BOOLEAN,canSync:!0},{ -key:"alwaysShowAgenticTurns",serverKey:"alwaysShowAgenticTurns",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"excludeReasoningFromContext",serverKey:"excludeReasoningFromContext",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"sendOnEnter",serverKey:"sendOnEnter",type:SyncableParameterType.BOOLEAN,canSync:!0}];class ParameterSyncService{static roundFloatingPoint(value){return normalizeFloatingPoint(value)}static extractServerDefaults(serverParams,webuiSettings){const extracted={};if(serverParams){ -for(const param of SYNCABLE_PARAMETERS)if(param.canSync&¶m.serverKey in serverParams){const value=serverParams[param.serverKey];value!==void 0&&(extracted[param.key]=this.roundFloatingPoint(value))}serverParams.samplers&&Array.isArray(serverParams.samplers)&&(extracted.samplers=serverParams.samplers.join(";"))}if(webuiSettings){for(const param of SYNCABLE_PARAMETERS)if(param.canSync&¶m.serverKey in webuiSettings){const value=webuiSettings[param.serverKey];value!==void 0&&(extracted[param. -key]=this.roundFloatingPoint(value))}}return extracted}static mergeWithServerDefaults(currentSettings,serverDefaults,userOverrides=new Set){const merged={...currentSettings};for(const[key2,serverValue]of Object.entries(serverDefaults))userOverrides.has(key2)||(merged[key2]=this.roundFloatingPoint(serverValue));return merged}static getParameterInfo(key2,currentValue,propsDefaults,userOverrides){const hasPropsDefault=propsDefaults[key2]!==void 0,isUserOverride=userOverrides.has(key2),source2=isUserOverride? -ParameterSource.CUSTOM:ParameterSource.DEFAULT;return{value:currentValue,source:source2,serverDefault:hasPropsDefault?propsDefaults[key2]:void 0,userOverride:isUserOverride?currentValue:void 0}}static canSyncParameter(key2){return SYNCABLE_PARAMETERS.some(param=>param.key===key2&¶m.canSync)}static getSyncableParameterKeys(){return SYNCABLE_PARAMETERS.filter(param=>param.canSync).map(param=>param.key)}static validateServerParameter(key2,value){const param=SYNCABLE_PARAMETERS.find(p2=>p2.key=== -key2);if(!param)return!1;switch(param.type){case SyncableParameterType.NUMBER:return typeof value=="number"&&!isNaN(value);case SyncableParameterType.STRING:return typeof value=="string";case SyncableParameterType.BOOLEAN:return typeof value=="boolean";default:return!1}}static createParameterDiff(currentSettings,serverDefaults){const diff2={};for(const key2 of this.getSyncableParameterKeys()){const currentValue=currentSettings[key2],serverValue=serverDefaults[key2];serverValue!==void 0&&(diff2[key2]= -{current:currentValue,server:serverValue,differs:currentValue!==serverValue})}return diff2}}class PropsService{static async fetch(autoload=!1){const params={};return autoload||(params.autoload="false"),apiFetchWithParams("./props",params,{authOnly:!0})}static async fetchForModel(modelId,autoload=!1){const params={model:modelId};return autoload||(params.autoload="false"),apiFetchWithParams("./props",params,{authOnly:!0})}}class ServerStore{#props=state$1(null);get props(){return get$4(this.#props)}set props(value){ -set$1(this.#props,value,!0)}#loading=state$1(!1);get loading(){return get$4(this.#loading)}set loading(value){set$1(this.#loading,value,!0)}#error=state$1(null);get error(){return get$4(this.#error)}set error(value){set$1(this.#error,value,!0)}#role=state$1(null);get role(){return get$4(this.#role)}set role(value){set$1(this.#role,value,!0)}fetchPromise=null;get defaultParams(){return this.props?.default_generation_settings?.params||null}get contextSize(){const nCtx=this.props?.default_generation_settings?. -n_ctx;return typeof nCtx=="number"?nCtx:null}get webuiSettings(){return this.props?.webui_settings}get isRouterMode(){return this.role===ServerRole.ROUTER}get isModelMode(){return this.role===ServerRole.MODEL}async fetch(){if(this.fetchPromise)return this.fetchPromise;this.loading=!0,this.error=null;const fetchPromise=(async()=>{try{const props=await PropsService.fetch();this.props=props,this.error=null,this.detectRole(props)}catch(error2){this.error=this.getErrorMessage(error2),console.error("E\ -rror fetching server properties:",error2)}finally{this.loading=!1,this.fetchPromise=null}})();this.fetchPromise=fetchPromise,await fetchPromise}getErrorMessage(error2){if(error2 instanceof Error){const message=error2.message||"";if(error2.name==="TypeError"&&message.includes("fetch"))return"Server is not running or unreachable";if(message.includes("ECONNREFUSED"))return"Connection refused - server may be offline";if(message.includes("ENOTFOUND"))return"Server not found - check server address";if(message. -includes("ETIMEDOUT"))return"Request timed out";if(message.includes("503"))return"Server temporarily unavailable";if(message.includes("500"))return"Server error - check server logs";if(message.includes("404"))return"Server endpoint not found";if(message.includes("403")||message.includes("401"))return"Access denied"}return"Failed to connect to server"}clear(){this.props=null,this.error=null,this.loading=!1,this.role=null,this.fetchPromise=null}detectRole(props){const newRole=props?.role===ServerRole. -ROUTER?ServerRole.ROUTER:ServerRole.MODEL;this.role!==newRole&&(this.role=newRole,console.info(`Server running in ${newRole===ServerRole.ROUTER?"ROUTER":"MODEL"} mode`))}}const serverStore=new ServerStore,serverProps=()=>serverStore.props,serverLoading=()=>serverStore.loading,serverError=()=>serverStore.error,contextSize=()=>serverStore.contextSize,isRouterMode=()=>serverStore.isRouterMode;class SettingsStore{#config=state$1(proxy({...SETTING_CONFIG_DEFAULT}));get config(){return get$4(this.#config)}set config(value){ -set$1(this.#config,value,!0)}#theme=state$1("auto");get theme(){return get$4(this.#theme)}set theme(value){set$1(this.#theme,value,!0)}#isInitialized=state$1(!1);get isInitialized(){return get$4(this.#isInitialized)}set isInitialized(value){set$1(this.#isInitialized,value,!0)}#userOverrides=state$1(proxy(new Set));get userOverrides(){return get$4(this.#userOverrides)}set userOverrides(value){set$1(this.#userOverrides,value,!0)}getServerDefaults(){const serverParams=serverStore.defaultParams,webuiSettings=serverStore. -webuiSettings;return ParameterSyncService.extractServerDefaults(serverParams,webuiSettings)}constructor(){this.initialize()}initialize(){try{this.loadConfig(),this.loadTheme(),this.isInitialized=!0}catch(error2){console.error("Failed to initialize settings store:",error2)}}loadConfig(){try{const storedConfigRaw=localStorage.getItem(CONFIG_LOCALSTORAGE_KEY),savedVal=JSON.parse(storedConfigRaw||"{}");this.config={...SETTING_CONFIG_DEFAULT,...savedVal},"sendOnEnter"in savedVal||new IsMobile().current&& -(this.config.sendOnEnter=!1);const savedOverrides=JSON.parse(localStorage.getItem(USER_OVERRIDES_LOCALSTORAGE_KEY)||"[]");this.userOverrides=new Set(savedOverrides)}catch(error2){console.warn("Failed to parse config from localStorage, using defaults:",error2),this.config={...SETTING_CONFIG_DEFAULT},this.userOverrides=new Set}}loadTheme(){this.theme=localStorage.getItem("theme")||"auto"}updateConfig(key2,value){if(this.config[key2]=value,ParameterSyncService.canSyncParameter(key2)){const propsDefault=this. -getServerDefaults()[key2];if(propsDefault!==void 0){const normalizedValue=normalizeFloatingPoint(value),normalizedDefault=normalizeFloatingPoint(propsDefault);normalizedValue===normalizedDefault?this.userOverrides.delete(key2):this.userOverrides.add(key2)}}this.saveConfig()}updateMultipleConfig(updates){Object.assign(this.config,updates);const propsDefaults=this.getServerDefaults();for(const[key2,value]of Object.entries(updates))if(ParameterSyncService.canSyncParameter(key2)){const propsDefault=propsDefaults[key2]; -if(propsDefault!==void 0){const normalizedValue=normalizeFloatingPoint(value),normalizedDefault=normalizeFloatingPoint(propsDefault);normalizedValue===normalizedDefault?this.userOverrides.delete(key2):this.userOverrides.add(key2)}}this.saveConfig()}saveConfig(){try{localStorage.setItem(CONFIG_LOCALSTORAGE_KEY,JSON.stringify(this.config)),localStorage.setItem(USER_OVERRIDES_LOCALSTORAGE_KEY,JSON.stringify(Array.from(this.userOverrides)))}catch(error2){console.error("Failed to save config to local\ -Storage:",error2)}}updateTheme(newTheme){this.theme=newTheme,this.saveTheme()}saveTheme(){try{this.theme==="auto"?localStorage.removeItem("theme"):localStorage.setItem("theme",this.theme)}catch(error2){console.error("Failed to save theme to localStorage:",error2)}}resetConfig(){this.config={...SETTING_CONFIG_DEFAULT},this.saveConfig()}resetTheme(){this.theme="auto",this.saveTheme()}resetAll(){this.resetConfig(),this.resetTheme()}resetParameterToServerDefault(key2){const serverDefaults=this.getServerDefaults(), -webuiSettings=serverStore.webuiSettings;webuiSettings&&key2 in webuiSettings?setConfigValue(this.config,key2,webuiSettings[key2]):serverDefaults[key2]!==void 0?setConfigValue(this.config,key2,""):key2 in SETTING_CONFIG_DEFAULT&&setConfigValue(this.config,key2,getConfigValue(SETTING_CONFIG_DEFAULT,key2)),this.userOverrides.delete(key2),this.saveConfig()}syncWithServerDefaults(){const propsDefaults=this.getServerDefaults();if(Object.keys(propsDefaults).length===0)return;for(const[key2,propsValue]of Object. -entries(propsDefaults)){const currentValue=getConfigValue(this.config,key2),normalizedCurrent=normalizeFloatingPoint(currentValue),normalizedDefault=normalizeFloatingPoint(propsValue);normalizedCurrent===normalizedDefault&&this.userOverrides.delete(key2)}const webuiSettings=serverStore.webuiSettings;if(webuiSettings)for(const[key2,value]of Object.entries(webuiSettings))!this.userOverrides.has(key2)&&value!==void 0&&setConfigValue(this.config,key2,value);this.saveConfig(),console.log("User overri\ -des after sync:",Array.from(this.userOverrides))}forceSyncWithServerDefaults(){const propsDefaults=this.getServerDefaults(),webuiSettings=serverStore.webuiSettings;for(const key2 of ParameterSyncService.getSyncableParameterKeys())webuiSettings&&key2 in webuiSettings?setConfigValue(this.config,key2,webuiSettings[key2]):propsDefaults[key2]!==void 0?setConfigValue(this.config,key2,""):key2 in SETTING_CONFIG_DEFAULT&&setConfigValue(this.config,key2,getConfigValue(SETTING_CONFIG_DEFAULT,key2)),this.userOverrides. -delete(key2);this.saveConfig()}getConfig(key2){return this.config[key2]}getAllConfig(){return{...this.config}}canSyncParameter(key2){return ParameterSyncService.canSyncParameter(key2)}getParameterInfo(key2){const propsDefaults=this.getServerDefaults(),currentValue=getConfigValue(this.config,key2);return ParameterSyncService.getParameterInfo(key2,currentValue??"",propsDefaults,this.userOverrides)}getParameterDiff(){const serverDefaults=this.getServerDefaults();if(Object.keys(serverDefaults).length=== -0)return{};const configAsRecord=configToParameterRecord(this.config,ParameterSyncService.getSyncableParameterKeys());return ParameterSyncService.createParameterDiff(configAsRecord,serverDefaults)}clearAllUserOverrides(){this.userOverrides.clear(),this.saveConfig(),console.log("Cleared all user overrides")}}const settingsStore=new SettingsStore,config$1=()=>settingsStore.config;function redactValue(value,showLastChars){return showLastChars?`....${value.slice(-showLastChars)}`:"[redacted]"}function getAuthHeaders(){ -const apiKey=config$1().apiKey?.toString().trim();return apiKey?{Authorization:`Bearer ${apiKey}`}:{}}function getJsonHeaders(){return{"Content-Type":"application/json",...getAuthHeaders()}}function sanitizeHeaders(headers,extraRedactedHeaders,partialRedactHeaders){if(!headers)return{};const normalized=new Headers(headers),sanitized={},redactedHeaders=new Set(Array.from(extraRedactedHeaders??[],header=>header.toLowerCase()));for(const[key2,value]of normalized.entries()){const normalizedKey=key2. -toLowerCase(),partialChars=partialRedactHeaders?.get(normalizedKey);partialChars!==void 0?sanitized[key2]=redactValue(value,partialChars):REDACTED_HEADERS.has(normalizedKey)||redactedHeaders.has(normalizedKey)?sanitized[key2]=redactValue(value):sanitized[key2]=value}return sanitized}async function apiFetch(path2,options={}){const{authOnly=!1,headers:customHeaders,...fetchOptions}=options,headers={...authOnly?getAuthHeaders():getJsonHeaders(),...customHeaders},url2=path2.startsWith(UrlProtocol.HTTP)|| -path2.startsWith(UrlProtocol.HTTPS)?path2:`${base}${path2}`,response=await fetch(url2,{...fetchOptions,headers});if(!response.ok){const errorMessage=await parseErrorMessage(response);throw new Error(errorMessage)}return response.json()}async function apiFetchWithParams(basePath,params,options={}){const url2=new URL(basePath,window.location.href);for(const[key2,value]of Object.entries(params))value!=null&&url2.searchParams.set(key2,value);const{authOnly=!1,headers:customHeaders,...fetchOptions}=options, -headers={...authOnly?getAuthHeaders():getJsonHeaders(),...customHeaders},response=await fetch(url2.toString(),{...fetchOptions,headers});if(!response.ok){const errorMessage=await parseErrorMessage(response);throw new Error(errorMessage)}return response.json()}async function apiPost(path2,body2,options={}){return apiFetch(path2,{method:"POST",body:JSON.stringify(body2),...options})}async function parseErrorMessage(response){try{const errorData=await response.json();if(errorData?.error?.message)return errorData. -error.message;if(errorData?.error&&typeof errorData.error=="string")return errorData.error;if(errorData?.message)return errorData.message}catch{}return`Request failed: ${response.status} ${response.statusText}`}function error(status,body2){throw new HttpError(status,body2)}async function validateApiKey(fetch2){try{const apiKey=config$1().apiKey,headers={"Content-Type":"application/json"};apiKey&&(headers.Authorization=`Bearer ${apiKey}`);const response=await fetch2(`${base}/props`,{headers});if(!response. -ok){if(response.status===401||response.status===403)throw error(401,"Access denied");console.warn(`Server responded with status ${response.status} during API key validation`);return}}catch(err){if(err&&typeof err=="object"&&"status"in err)throw err;console.warn("Cannot connect to server for API key validation:",err)}}function isMcpPromptUpload(file){return file.type===SpecialFileType.MCP_PROMPT&&!!file.mcpPrompt}function isMcpPromptAttachment(attachment){return attachment.type===AttachmentType.MCP_PROMPT} -function isMcpResourceAttachment(attachment){return attachment.type===AttachmentType.MCP_RESOURCE}function getUploadedFileCategory$1(file){const categoryByMime=getFileTypeCategory(file.type);return categoryByMime||getFileTypeCategoryByExtension(file.name)}function getAttachmentDisplayItems(options){const{uploadedFiles=[],attachments=[]}=options,items2=[];for(const file of uploadedFiles)items2.push({id:file.id,name:file.name,size:file.size,preview:file.preview,isImage:getUploadedFileCategory$1(file)=== -FileTypeCategory.IMAGE,isMcpPrompt:isMcpPromptUpload(file),isLoading:file.isLoading,loadError:file.loadError,uploadedFile:file,textContent:file.textContent});for(const[index2,attachment]of attachments.entries()){const isImage2=isImageFile(attachment),isMcpPrompt=isMcpPromptAttachment(attachment),isMcpResource=isMcpResourceAttachment(attachment);items2.push({id:`attachment-${index2}`,name:attachment.name,preview:isImage2&&"base64Url"in attachment?attachment.base64Url:void 0,isImage:isImage2,isMcpPrompt, -isMcpResource,attachment,attachmentIndex:index2,textContent:"content"in attachment?attachment.content:void 0})}return items2.reverse()}function getUploadedFileCategory(uploadedFile){const categoryByMime=getFileTypeCategory(uploadedFile.type);return categoryByMime||getFileTypeCategoryByExtension(uploadedFile.name)}function isTextFile(attachment,uploadedFile){return uploadedFile?getUploadedFileCategory(uploadedFile)===FileTypeCategory.TEXT:attachment?attachment.type===AttachmentType.TEXT||attachment. -type===AttachmentType.LEGACY_CONTEXT:!1}function isImageFile(attachment,uploadedFile){return uploadedFile?getUploadedFileCategory(uploadedFile)===FileTypeCategory.IMAGE:attachment?attachment.type===AttachmentType.IMAGE:!1}function isPdfFile$1(attachment,uploadedFile){return uploadedFile?getUploadedFileCategory(uploadedFile)===FileTypeCategory.PDF:attachment?attachment.type===AttachmentType.PDF:!1}function isAudioFile(attachment,uploadedFile){return uploadedFile?getUploadedFileCategory(uploadedFile)=== -FileTypeCategory.AUDIO:attachment?attachment.type===AttachmentType.AUDIO:!1}function autoResizeTextarea(textareaElement){textareaElement&&(textareaElement.style.height="1rem",textareaElement.style.height=textareaElement.scrollHeight+"px")}function findMessageById(messages,id2){if(id2)return messages.find(m=>m.id===id2)}function filterByLeafNodeId(messages,leafNodeId,includeRoot=!1){const result=[],nodeMap=new Map;for(const msg of messages)nodeMap.set(msg.id,msg);let startNode=nodeMap.get(leafNodeId); -if(!startNode){let latestTime=-1;for(const msg of messages)msg.timestamp>latestTime&&(startNode=msg,latestTime=msg.timestamp)}let currentNode=startNode;for(;currentNode&&((currentNode.type!=="root"||includeRoot)&&result.push(currentNode),currentNode.parent!==null);)currentNode=nodeMap.get(currentNode.parent);return result.sort((a,b)=>a.role===MessageRole.SYSTEM&&b.role!==MessageRole.SYSTEM?-1:a.role!==MessageRole.SYSTEM&&b.role===MessageRole.SYSTEM?1:a.timestamp-b.timestamp),result}function findLeafNode(messages,messageId){ -const nodeMap=new Map;for(const msg of messages)nodeMap.set(msg.id,msg);let currentNode=nodeMap.get(messageId);for(;currentNode&¤tNode.children.length>0;){const lastChildId=currentNode.children[currentNode.children.length-1];currentNode=nodeMap.get(lastChildId)}return currentNode?.id??messageId}function findDescendantMessages(messages,messageId){const nodeMap=new Map;for(const msg of messages)nodeMap.set(msg.id,msg);const descendants=[],queue=[messageId];for(;queue.length>0;){const currentId=queue. -shift(),currentNode=nodeMap.get(currentId);if(currentNode)for(const childId of currentNode.children)descendants.push(childId),queue.push(childId)}return descendants}function getMessageSiblings(messages,messageId){const nodeMap=new Map;for(const msg of messages)nodeMap.set(msg.id,msg);const message=nodeMap.get(messageId);if(!message)return null;if(message.parent===null)return{message,siblingIds:[messageId],currentIndex:0,totalSiblings:1};const parentNode=nodeMap.get(message.parent);if(!parentNode) -return{message,siblingIds:[messageId],currentIndex:0,totalSiblings:1};const siblingIds=parentNode.children,siblingLeafIds=siblingIds.map(siblingId=>findLeafNode(messages,siblingId)),currentIndex=siblingIds.indexOf(messageId);return{message,siblingIds:siblingLeafIds,currentIndex,totalSiblings:siblingIds.length}}var core$5,hasRequiredCore$4;function requireCore$4(){if(hasRequiredCore$4)return core$5;hasRequiredCore$4=1;function deepFreeze(obj){return obj instanceof Map?obj.clear=obj.delete=obj.set= -function(){throw new Error("map is read-only")}:obj instanceof Set&&(obj.add=obj.clear=obj.delete=function(){throw new Error("set is read-only")}),Object.freeze(obj),Object.getOwnPropertyNames(obj).forEach(name=>{const prop2=obj[name],type2=typeof prop2;(type2==="object"||type2==="function")&&!Object.isFrozen(prop2)&&deepFreeze(prop2)}),obj}class Response2{constructor(mode){mode.data===void 0&&(mode.data={}),this.data=mode.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function escapeHTML(value){ -return value.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function inherit$1(original,...objects){const result=Object.create(null);for(const key2 in original)result[key2]=original[key2];return objects.forEach(function(obj){for(const key2 in obj)result[key2]=obj[key2]}),result}const SPAN_CLOSE="</span>",emitsWrappingTags=node2=>!!node2.scope,scopeToCSSClass=(name,{prefix})=>{if(name.startsWith("language:"))return name.replace("langu\ -age:","language-");if(name.includes(".")){const pieces=name.split(".");return[`${prefix}${pieces.shift()}`,...pieces.map((x,i)=>`${x}${"_".repeat(i+1)}`)].join(" ")}return`${prefix}${name}`};class HTMLRenderer{constructor(parseTree3,options){this.buffer="",this.classPrefix=options.classPrefix,parseTree3.walk(this)}addText(text2){this.buffer+=escapeHTML(text2)}openNode(node2){if(!emitsWrappingTags(node2))return;const className=scopeToCSSClass(node2.scope,{prefix:this.classPrefix});this.span(className)}closeNode(node2){ -emitsWrappingTags(node2)&&(this.buffer+=SPAN_CLOSE)}value(){return this.buffer}span(className){this.buffer+=`<span class="${className}">`}}const newNode=(opts={})=>{const result={children:[]};return Object.assign(result,opts),result};class TokenTree{constructor(){this.rootNode=newNode(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(node2){this.top.children.push(node2)}openNode(scope2){const node2=newNode({scope:scope2});this.add(node2), -this.stack.push(node2)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(builder){return this.constructor._walk(builder,this.rootNode)}static _walk(builder,node2){return typeof node2=="string"?builder.addText(node2):node2.children&&(builder.openNode(node2),node2.children.forEach(child2=>this._walk(builder,child2)),builder.closeNode(node2)),builder}static _collapse(node2){typeof node2!="str\ -ing"&&node2.children&&(node2.children.every(el=>typeof el=="string")?node2.children=[node2.children.join("")]:node2.children.forEach(child2=>{TokenTree._collapse(child2)}))}}class TokenTreeEmitter extends TokenTree{constructor(options){super(),this.options=options}addText(text2){text2!==""&&this.add(text2)}startScope(scope2){this.openNode(scope2)}endScope(){this.closeNode()}__addSublanguage(emitter,name){const node2=emitter.root;name&&(node2.scope=`language:${name}`),this.add(node2)}toHTML(){return new HTMLRenderer( -this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function source2(re2){return re2?typeof re2=="string"?re2:re2.source:null}function lookahead2(re2){return concat2("(?=",re2,")")}function anyNumberOfTimes(re2){return concat2("(?:",re2,")*")}function optional2(re2){return concat2("(?:",re2,")?")}function concat2(...args){return args.map(x=>source2(x)).join("")}function stripOptionsFromArgs2(args){const opts=args[args.length-1];return typeof opts=="object"&&opts.constructor===Object? -(args.splice(args.length-1,1),opts):{}}function either2(...args){return"("+(stripOptionsFromArgs2(args).capture?"":"?:")+args.map(x=>source2(x)).join("|")+")"}function countMatchGroups(re2){return new RegExp(re2.toString()+"|").exec("").length-1}function startsWith(re2,lexeme){const match=re2&&re2.exec(lexeme);return match&&match.index===0}const BACKREF_RE=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function _rewriteBackreferences(regexps,{joinWith}){let numCaptures=0;return regexps.map(regex=>{ -numCaptures+=1;const offset2=numCaptures;let re2=source2(regex),out="";for(;re2.length>0;){const match=BACKREF_RE.exec(re2);if(!match){out+=re2;break}out+=re2.substring(0,match.index),re2=re2.substring(match.index+match[0].length),match[0][0]==="\\"&&match[1]?out+="\\"+String(Number(match[1])+offset2):(out+=match[0],match[0]==="("&&numCaptures++)}return out}).map(re2=>`(${re2})`).join(joinWith)}const MATCH_NOTHING_RE=/\b\B/,IDENT_RE2="[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",NUMBER_RE="\ -\\b\\d+(\\.\\d+)?",C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",BINARY_NUMBER_RE="\\b(0b[01]+)",RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG=(opts={})=>{const beginShebang=/^#![ ]*\//;return opts.binary&&(opts.begin=concat2(beginShebang,/.*\b/,opts.binary,/\b.*/)),inherit$1({scope:"meta",begin:beginShebang,end:/$/,relevance:0,"on:begin":(m,resp)=>{ -m.index!==0&&resp.ignoreMatch()}},opts)},BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},APOS_STRING_MODE={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[BACKSLASH_ESCAPE]},QUOTE_STRING_MODE={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[BACKSLASH_ESCAPE]},PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},COMMENT=function(begin,end,modeOptions={}){const mode=inherit$1( -{scope:"comment",begin,end,contains:[]},modeOptions);mode.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const ENGLISH_WORD=either2("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return mode.contains.push({begin:concat2(/[ ]+/,"(",ENGLISH_WORD,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),mode},C_LINE_COMMENT_MODE=COMMENT( -"//","$"),C_BLOCK_COMMENT_MODE=COMMENT("/\\*","\\*/"),HASH_COMMENT_MODE=COMMENT("#","$"),NUMBER_MODE={scope:"number",begin:NUMBER_RE,relevance:0},C_NUMBER_MODE={scope:"number",begin:C_NUMBER_RE,relevance:0},BINARY_NUMBER_MODE={scope:"number",begin:BINARY_NUMBER_RE,relevance:0},REGEXP_MODE={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[BACKSLASH_ESCAPE]}]},TITLE_MODE={scope:"title",begin:IDENT_RE2,relevance:0},UNDERSCORE_TITLE_MODE={ -scope:"title",begin:UNDERSCORE_IDENT_RE,relevance:0},METHOD_GUARD={begin:"\\.\\s*"+UNDERSCORE_IDENT_RE,relevance:0};var MODES2=Object.freeze({__proto__:null,APOS_STRING_MODE,BACKSLASH_ESCAPE,BINARY_NUMBER_MODE,BINARY_NUMBER_RE,COMMENT,C_BLOCK_COMMENT_MODE,C_LINE_COMMENT_MODE,C_NUMBER_MODE,C_NUMBER_RE,END_SAME_AS_BEGIN:function(mode){return Object.assign(mode,{"on:begin":(m,resp)=>{resp.data._beginMatch=m[1]},"on:end":(m,resp)=>{resp.data._beginMatch!==m[1]&&resp.ignoreMatch()}})},HASH_COMMENT_MODE, -IDENT_RE:IDENT_RE2,MATCH_NOTHING_RE,METHOD_GUARD,NUMBER_MODE,NUMBER_RE,PHRASAL_WORDS_MODE,QUOTE_STRING_MODE,REGEXP_MODE,RE_STARTERS_RE,SHEBANG,TITLE_MODE,UNDERSCORE_IDENT_RE,UNDERSCORE_TITLE_MODE});function skipIfHasPrecedingDot(match,response){match.input[match.index-1]==="."&&response.ignoreMatch()}function scopeClassName(mode,_parent){mode.className!==void 0&&(mode.scope=mode.className,delete mode.className)}function beginKeywords(mode,parent){parent&&mode.beginKeywords&&(mode.begin="\\b("+mode. -beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",mode.__beforeBegin=skipIfHasPrecedingDot,mode.keywords=mode.keywords||mode.beginKeywords,delete mode.beginKeywords,mode.relevance===void 0&&(mode.relevance=0))}function compileIllegal(mode,_parent){Array.isArray(mode.illegal)&&(mode.illegal=either2(...mode.illegal))}function compileMatch(mode,_parent){if(mode.match){if(mode.begin||mode.end)throw new Error("begin & end are not supported with match");mode.begin=mode.match,delete mode.match}} -function compileRelevance(mode,_parent){mode.relevance===void 0&&(mode.relevance=1)}const beforeMatchExt=(mode,parent)=>{if(!mode.beforeMatch)return;if(mode.starts)throw new Error("beforeMatch cannot be used with starts");const originalMode=Object.assign({},mode);Object.keys(mode).forEach(key2=>{delete mode[key2]}),mode.keywords=originalMode.keywords,mode.begin=concat2(originalMode.beforeMatch,lookahead2(originalMode.begin)),mode.starts={relevance:0,contains:[Object.assign(originalMode,{endsParent:!0})]}, -mode.relevance=0,delete originalMode.beforeMatch},COMMON_KEYWORDS=["of","and","for","in","not","or","if","then","parent","list","value"],DEFAULT_KEYWORD_SCOPE="keyword";function compileKeywords(rawKeywords,caseInsensitive,scopeName=DEFAULT_KEYWORD_SCOPE){const compiledKeywords=Object.create(null);return typeof rawKeywords=="string"?compileList(scopeName,rawKeywords.split(" ")):Array.isArray(rawKeywords)?compileList(scopeName,rawKeywords):Object.keys(rawKeywords).forEach(function(scopeName2){Object. -assign(compiledKeywords,compileKeywords(rawKeywords[scopeName2],caseInsensitive,scopeName2))}),compiledKeywords;function compileList(scopeName2,keywordList){caseInsensitive&&(keywordList=keywordList.map(x=>x.toLowerCase())),keywordList.forEach(function(keyword2){const pair=keyword2.split("|");compiledKeywords[pair[0]]=[scopeName2,scoreForKeyword(pair[0],pair[1])]})}}function scoreForKeyword(keyword2,providedScore){return providedScore?Number(providedScore):commonKeyword(keyword2)?0:1}function commonKeyword(keyword2){ -return COMMON_KEYWORDS.includes(keyword2.toLowerCase())}const seenDeprecations={},error2=message=>{console.error(message)},warn2=(message,...args)=>{console.log(`WARN: ${message}`,...args)},deprecated2=(version3,message)=>{seenDeprecations[`${version3}/${message}`]||(console.log(`Deprecated as of ${version3}. ${message}`),seenDeprecations[`${version3}/${message}`]=!0)},MultiClassError=new Error;function remapScopeNames(mode,regexes,{key:key2}){let offset2=0;const scopeNames=mode[key2],emit={},positions={}; -for(let i=1;i<=regexes.length;i++)positions[i+offset2]=scopeNames[i],emit[i+offset2]=!0,offset2+=countMatchGroups(regexes[i-1]);mode[key2]=positions,mode[key2]._emit=emit,mode[key2]._multi=!0}function beginMultiClass(mode){if(Array.isArray(mode.begin)){if(mode.skip||mode.excludeBegin||mode.returnBegin)throw error2("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),MultiClassError;if(typeof mode.beginScope!="object"||mode.beginScope===null)throw error2("beginScope must be objec\ -t"),MultiClassError;remapScopeNames(mode,mode.begin,{key:"beginScope"}),mode.begin=_rewriteBackreferences(mode.begin,{joinWith:""})}}function endMultiClass(mode){if(Array.isArray(mode.end)){if(mode.skip||mode.excludeEnd||mode.returnEnd)throw error2("skip, excludeEnd, returnEnd not compatible with endScope: {}"),MultiClassError;if(typeof mode.endScope!="object"||mode.endScope===null)throw error2("endScope must be object"),MultiClassError;remapScopeNames(mode,mode.end,{key:"endScope"}),mode.end=_rewriteBackreferences( -mode.end,{joinWith:""})}}function scopeSugar(mode){mode.scope&&typeof mode.scope=="object"&&mode.scope!==null&&(mode.beginScope=mode.scope,delete mode.scope)}function MultiClass(mode){scopeSugar(mode),typeof mode.beginScope=="string"&&(mode.beginScope={_wrap:mode.beginScope}),typeof mode.endScope=="string"&&(mode.endScope={_wrap:mode.endScope}),beginMultiClass(mode),endMultiClass(mode)}function compileLanguage(language2){function langRe(value,global2){return new RegExp(source2(value),"m"+(language2. -case_insensitive?"i":"")+(language2.unicodeRegex?"u":"")+(global2?"g":""))}class MultiRegex{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(re2,opts){opts.position=this.position++,this.matchIndexes[this.matchAt]=opts,this.regexes.push([opts,re2]),this.matchAt+=countMatchGroups(re2)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const terminators=this.regexes.map(el=>el[1]);this.matcherRe=langRe(_rewriteBackreferences(terminators,{joinWith:"|"}), -!0),this.lastIndex=0}exec(s2){this.matcherRe.lastIndex=this.lastIndex;const match=this.matcherRe.exec(s2);if(!match)return null;const i=match.findIndex((el,i2)=>i2>0&&el!==void 0),matchData=this.matchIndexes[i];return match.splice(0,i),Object.assign(match,matchData)}}class ResumableMultiRegex{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(index2){if(this.multiRegexes[index2])return this.multiRegexes[index2];const matcher=new MultiRegex; -return this.rules.slice(index2).forEach(([re2,opts])=>matcher.addRule(re2,opts)),matcher.compile(),this.multiRegexes[index2]=matcher,matcher}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(re2,opts){this.rules.push([re2,opts]),opts.type==="begin"&&this.count++}exec(s2){const m=this.getMatcher(this.regexIndex);m.lastIndex=this.lastIndex;let result=m.exec(s2);if(this.resumingScanAtSamePosition()&&!(result&&result.index===this.lastIndex)){const m2=this. -getMatcher(0);m2.lastIndex=this.lastIndex+1,result=m2.exec(s2)}return result&&(this.regexIndex+=result.position+1,this.regexIndex===this.count&&this.considerAll()),result}}function buildModeRegex(mode){const mm=new ResumableMultiRegex;return mode.contains.forEach(term=>mm.addRule(term.begin,{rule:term,type:"begin"})),mode.terminatorEnd&&mm.addRule(mode.terminatorEnd,{type:"end"}),mode.illegal&&mm.addRule(mode.illegal,{type:"illegal"}),mm}function compileMode(mode,parent){const cmode=mode;if(mode. -isCompiled)return cmode;[scopeClassName,compileMatch,MultiClass,beforeMatchExt].forEach(ext=>ext(mode,parent)),language2.compilerExtensions.forEach(ext=>ext(mode,parent)),mode.__beforeBegin=null,[beginKeywords,compileIllegal,compileRelevance].forEach(ext=>ext(mode,parent)),mode.isCompiled=!0;let keywordPattern=null;return typeof mode.keywords=="object"&&mode.keywords.$pattern&&(mode.keywords=Object.assign({},mode.keywords),keywordPattern=mode.keywords.$pattern,delete mode.keywords.$pattern),keywordPattern= -keywordPattern||/\w+/,mode.keywords&&(mode.keywords=compileKeywords(mode.keywords,language2.case_insensitive)),cmode.keywordPatternRe=langRe(keywordPattern,!0),parent&&(mode.begin||(mode.begin=/\B|\b/),cmode.beginRe=langRe(cmode.begin),!mode.end&&!mode.endsWithParent&&(mode.end=/\B|\b/),mode.end&&(cmode.endRe=langRe(cmode.end)),cmode.terminatorEnd=source2(cmode.end)||"",mode.endsWithParent&&parent.terminatorEnd&&(cmode.terminatorEnd+=(mode.end?"|":"")+parent.terminatorEnd)),mode.illegal&&(cmode. -illegalRe=langRe(mode.illegal)),mode.contains||(mode.contains=[]),mode.contains=[].concat(...mode.contains.map(function(c2){return expandOrCloneMode(c2==="self"?mode:c2)})),mode.contains.forEach(function(c2){compileMode(c2,cmode)}),mode.starts&&compileMode(mode.starts,parent),cmode.matcher=buildModeRegex(cmode),cmode}if(language2.compilerExtensions||(language2.compilerExtensions=[]),language2.contains&&language2.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at \ -the top-level of a language. See documentation.");return language2.classNameAliases=inherit$1(language2.classNameAliases||{}),compileMode(language2)}function dependencyOnParent(mode){return mode?mode.endsWithParent||dependencyOnParent(mode.starts):!1}function expandOrCloneMode(mode){return mode.variants&&!mode.cachedVariants&&(mode.cachedVariants=mode.variants.map(function(variant){return inherit$1(mode,{variants:null},variant)})),mode.cachedVariants?mode.cachedVariants:dependencyOnParent(mode)? -inherit$1(mode,{starts:mode.starts?inherit$1(mode.starts):null}):Object.isFrozen(mode)?inherit$1(mode):mode}var version2="11.11.1";class HTMLInjectionError extends Error{constructor(reason,html2){super(reason),this.name="HTMLInjectionError",this.html=html2}}const escape2=escapeHTML,inherit=inherit$1,NO_MATCH=Symbol("nomatch"),MAX_KEYWORD_HITS=7,HLJS=function(hljs){const languages=Object.create(null),aliases=Object.create(null),plugins=[];let SAFE_MODE=!0;const LANGUAGE_NOT_FOUND="Could not find \ -the language '{}', did you forget to load/include a language module?",PLAINTEXT_LANGUAGE={disableAutodetect:!0,name:"Plain text",contains:[]};let options={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:TokenTreeEmitter};function shouldNotHighlight(languageName){return options.noHighlightRe.test(languageName)}function blockLanguage(block2){let classes=block2. +Lines"],POSITIVE_INTEGER_FIELDS=["agenticMaxTurns","agenticMaxToolPreviewLines"],SETTINGS_KEYS={THEME:"theme",API_KEY:"apiKey",SYSTEM_MESSAGE:"systemMessage",PASTE_LONG_TEXT_TO_FILE_LEN:"pasteLongTextToFileLen",COPY_TEXT_ATTACHMENTS_AS_PLAIN_TEXT:"copyTextAttachmentsAsPlainText",ENABLE_CONTINUE_GENERATION:"enableContinueGeneration",PDF_AS_IMAGE:"pdfAsImage",ASK_FOR_TITLE_CONFIRMATION:"askForTitleConfirmation",SHOW_MESSAGE_STATS:"showMessageStats",SHOW_THOUGHT_IN_PROGRESS:"showThoughtInProgress", +KEEP_STATS_VISIBLE:"keepStatsVisible",AUTO_MIC_ON_EMPTY:"autoMicOnEmpty",RENDER_USER_CONTENT_AS_MARKDOWN:"renderUserContentAsMarkdown",DISABLE_AUTO_SCROLL:"disableAutoScroll",ALWAYS_SHOW_SIDEBAR_ON_DESKTOP:"alwaysShowSidebarOnDesktop",FULL_HEIGHT_CODE_BLOCKS:"fullHeightCodeBlocks",SHOW_RAW_MODEL_NAMES:"showRawModelNames",TEMPERATURE:"temperature",DYNATEMP_RANGE:"dynatemp_range",DYNATEMP_EXPONENT:"dynatemp_exponent",TOP_K:"top_k",TOP_P:"top_p",MIN_P:"min_p",XTC_PROBABILITY:"xtc_probability",XTC_THRESHOLD:"\ +xtc_threshold",TYP_P:"typ_p",MAX_TOKENS:"max_tokens",SAMPLERS:"samplers",BACKEND_SAMPLING:"backend_sampling",REPEAT_LAST_N:"repeat_last_n",REPEAT_PENALTY:"repeat_penalty",PRESENCE_PENALTY:"presence_penalty",FREQUENCY_PENALTY:"frequency_penalty",DRY_MULTIPLIER:"dry_multiplier",DRY_BASE:"dry_base",DRY_ALLOWED_LENGTH:"dry_allowed_length",DRY_PENALTY_LAST_N:"dry_penalty_last_n",AGENTIC_MAX_TURNS:"agenticMaxTurns",ALWAYS_SHOW_AGENTIC_TURNS:"alwaysShowAgenticTurns",AGENTIC_MAX_TOOL_PREVIEW_LINES:"agen\ +ticMaxToolPreviewLines",SHOW_TOOL_CALL_IN_PROGRESS:"showToolCallInProgress",DISABLE_REASONING_PARSING:"disableReasoningParsing",EXCLUDE_REASONING_FROM_CONTEXT:"excludeReasoningFromContext",SHOW_RAW_OUTPUT_SWITCH:"showRawOutputSwitch",CUSTOM:"custom"},SETTINGS_SECTION_TITLES={GENERAL:"General",DISPLAY:"Display",SAMPLING:"Sampling",PENALTIES:"Penalties",AGENTIC:"Agentic",TOOLS:"Tools",DEVELOPER:"Developer"},SETTINGS_CHAT_SECTIONS=[{title:SETTINGS_SECTION_TITLES.GENERAL,slug:"general",icon:Sliders_vertical, +fields:[{key:SETTINGS_KEYS.THEME,label:"Theme",type:SettingsFieldType.SELECT,options:SETTINGS_COLOR_MODES_CONFIG},{key:SETTINGS_KEYS.API_KEY,label:"API Key",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.SYSTEM_MESSAGE,label:"System Message",type:SettingsFieldType.TEXTAREA},{key:SETTINGS_KEYS.PASTE_LONG_TEXT_TO_FILE_LEN,label:"Paste long text to file length",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.COPY_TEXT_ATTACHMENTS_AS_PLAIN_TEXT,label:"Copy text attachments as plain text",type:SettingsFieldType. +CHECKBOX},{key:SETTINGS_KEYS.ENABLE_CONTINUE_GENERATION,label:'Enable "Continue" button',type:SettingsFieldType.CHECKBOX,isExperimental:!0},{key:SETTINGS_KEYS.PDF_AS_IMAGE,label:"Parse PDF as image",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.ASK_FOR_TITLE_CONFIRMATION,label:"Ask for confirmation before changing conversation title",type:SettingsFieldType.CHECKBOX}]},{title:SETTINGS_SECTION_TITLES.DISPLAY,slug:"display",icon:Monitor,fields:[{key:SETTINGS_KEYS.SHOW_MESSAGE_STATS,label:"Sho\ +w message generation statistics",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.SHOW_THOUGHT_IN_PROGRESS,label:"Show thought in progress",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.SHOW_TOOL_CALL_IN_PROGRESS,label:"Show tool call in progress",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.KEEP_STATS_VISIBLE,label:"Keep stats visible after generation",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.AUTO_MIC_ON_EMPTY,label:"Show microphone on empty input",type:SettingsFieldType. +CHECKBOX,isExperimental:!0},{key:SETTINGS_KEYS.RENDER_USER_CONTENT_AS_MARKDOWN,label:"Render user content as Markdown",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.FULL_HEIGHT_CODE_BLOCKS,label:"Use full height code blocks",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.DISABLE_AUTO_SCROLL,label:"Disable automatic scroll",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.ALWAYS_SHOW_SIDEBAR_ON_DESKTOP,label:"Always show sidebar on desktop",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS. +SHOW_RAW_MODEL_NAMES,label:"Show raw model names",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.ALWAYS_SHOW_AGENTIC_TURNS,label:"Always show agentic turns in conversation",type:SettingsFieldType.CHECKBOX}]},{title:SETTINGS_SECTION_TITLES.SAMPLING,slug:"sampling",icon:Funnel,fields:[{key:SETTINGS_KEYS.TEMPERATURE,label:"Temperature",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DYNATEMP_RANGE,label:"Dynamic temperature range",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DYNATEMP_EXPONENT, +label:"Dynamic temperature exponent",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.TOP_K,label:"Top K",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.TOP_P,label:"Top P",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.MIN_P,label:"Min P",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.XTC_PROBABILITY,label:"XTC probability",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.XTC_THRESHOLD,label:"XTC threshold",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.TYP_P,label:"Typical P",type:SettingsFieldType. +INPUT},{key:SETTINGS_KEYS.MAX_TOKENS,label:"Max tokens",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.SAMPLERS,label:"Samplers",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.BACKEND_SAMPLING,label:"Backend sampling",type:SettingsFieldType.CHECKBOX}]},{title:SETTINGS_SECTION_TITLES.PENALTIES,slug:"penalties",icon:Triangle_alert,fields:[{key:SETTINGS_KEYS.REPEAT_LAST_N,label:"Repeat last N",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.REPEAT_PENALTY,label:"Repeat penalty",type:SettingsFieldType. +INPUT},{key:SETTINGS_KEYS.PRESENCE_PENALTY,label:"Presence penalty",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.FREQUENCY_PENALTY,label:"Frequency penalty",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DRY_MULTIPLIER,label:"DRY multiplier",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DRY_BASE,label:"DRY base",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DRY_ALLOWED_LENGTH,label:"DRY allowed length",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DRY_PENALTY_LAST_N,label:"DRY pen\ +alty last N",type:SettingsFieldType.INPUT}]},{title:SETTINGS_SECTION_TITLES.AGENTIC,slug:"agentic",icon:List_restart,fields:[{key:SETTINGS_KEYS.AGENTIC_MAX_TURNS,label:"Agentic turns",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.AGENTIC_MAX_TOOL_PREVIEW_LINES,label:"Max lines per tool preview",type:SettingsFieldType.INPUT}]},{title:SETTINGS_SECTION_TITLES.TOOLS,slug:"tools",icon:Pencil_ruler},{title:SETTINGS_SECTION_TITLES.DEVELOPER,slug:"developer",icon:Code,fields:[{key:SETTINGS_KEYS.DISABLE_REASONING_PARSING, +label:"Disable reasoning content parsing",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.EXCLUDE_REASONING_FROM_CONTEXT,label:"Exclude reasoning from context",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.SHOW_RAW_OUTPUT_SWITCH,label:"Enable raw output toggle",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.CUSTOM,label:"Custom JSON",type:SettingsFieldType.TEXTAREA}]}];FileTypeAudio.MP3+"",FileExtensionAudio.MP3,MimeTypeAudio.MP3_MPEG,MimeTypeAudio.MP3,FileTypeAudio.WAV+"",FileExtensionAudio. +WAV,MimeTypeAudio.WAV;FileTypeImage.JPEG+"",FileExtensionImage.JPG,FileExtensionImage.JPEG,MimeTypeImage.JPEG,FileTypeImage.PNG+"",FileExtensionImage.PNG,MimeTypeImage.PNG,FileTypeImage.GIF+"",FileExtensionImage.GIF,MimeTypeImage.GIF,FileTypeImage.WEBP+"",FileExtensionImage.WEBP,MimeTypeImage.WEBP,FileTypeImage.SVG+"",FileExtensionImage.SVG,MimeTypeImage.SVG;FileTypePdf.PDF+"",FileExtensionPdf.PDF,MimeTypeApplication.PDF;FileTypeText.PLAIN_TEXT+"",FileExtensionText.TXT,MimeTypeText.PLAIN,FileTypeText. +MARKDOWN+"",FileExtensionText.MD,MimeTypeText.MARKDOWN,FileTypeText.ASCIIDOC+"",FileExtensionText.ADOC,MimeTypeText.ASCIIDOC,FileTypeText.JAVASCRIPT+"",FileExtensionText.JS,MimeTypeText.JAVASCRIPT,MimeTypeText.JAVASCRIPT_APP,FileTypeText.TYPESCRIPT+"",FileExtensionText.TS,MimeTypeText.TYPESCRIPT,FileTypeText.JSX+"",FileExtensionText.JSX,MimeTypeText.JSX,FileTypeText.TSX+"",FileExtensionText.TSX,MimeTypeText.TSX,FileTypeText.CSS+"",FileExtensionText.CSS,MimeTypeText.CSS,FileTypeText.HTML+"",FileExtensionText. +HTML,FileExtensionText.HTM,MimeTypeText.HTML,FileTypeText.JSON+"",FileExtensionText.JSON,MimeTypeText.JSON,FileTypeText.XML+"",FileExtensionText.XML,MimeTypeText.XML_TEXT,MimeTypeText.XML_APP,FileTypeText.YAML+"",FileExtensionText.YAML,FileExtensionText.YML,MimeTypeText.YAML_TEXT,MimeTypeText.YAML_APP,FileTypeText.CSV+"",FileExtensionText.CSV,MimeTypeText.CSV,FileTypeText.LOG+"",FileExtensionText.LOG,MimeTypeText.PLAIN,FileTypeText.PYTHON+"",FileExtensionText.PY,MimeTypeText.PYTHON,FileTypeText. +JAVA+"",FileExtensionText.JAVA,MimeTypeText.JAVA,FileTypeText.CPP+"",FileExtensionText.CPP,FileExtensionText.C,FileExtensionText.H,FileExtensionText.HPP,MimeTypeText.CPP_SRC,MimeTypeText.CPP_HDR,MimeTypeText.C_SRC,MimeTypeText.C_HDR,FileTypeText.PHP+"",FileExtensionText.PHP,MimeTypeText.PHP,FileTypeText.RUBY+"",FileExtensionText.RB,MimeTypeText.RUBY,FileTypeText.GO+"",FileExtensionText.GO,MimeTypeText.GO,FileTypeText.RUST+"",FileExtensionText.RS,MimeTypeText.RUST,FileTypeText.SHELL+"",FileExtensionText. +SH,FileExtensionText.BAT,MimeTypeText.SHELL,MimeTypeText.BAT,FileTypeText.SQL+"",FileExtensionText.SQL,MimeTypeText.SQL,FileTypeText.R+"",FileExtensionText.R,MimeTypeText.R,FileTypeText.SCALA+"",FileExtensionText.SCALA,MimeTypeText.SCALA,FileTypeText.KOTLIN+"",FileExtensionText.KT,MimeTypeText.KOTLIN,FileTypeText.SWIFT+"",FileExtensionText.SWIFT,MimeTypeText.SWIFT,FileTypeText.DART+"",FileExtensionText.DART,MimeTypeText.DART,FileTypeText.VUE+"",FileExtensionText.VUE,MimeTypeText.VUE,FileTypeText. +SVELTE+"",FileExtensionText.SVELTE,MimeTypeText.SVELTE,FileTypeText.LATEX+"",FileExtensionText.TEX,MimeTypeText.LATEX,MimeTypeText.TEX,MimeTypeText.TEX_APP,FileTypeText.BIBTEX+"",FileExtensionText.BIB,MimeTypeText.BIBTEX,FileTypeText.CUDA+"",FileExtensionText.CU,FileExtensionText.CUH,MimeTypeText.CUDA,FileTypeText.VULKAN+"",FileExtensionText.COMP,MimeTypeText.PLAIN,FileTypeText.HASKELL+"",FileExtensionText.HS,MimeTypeText.HASKELL,FileTypeText.CSHARP+"",FileExtensionText.CS,MimeTypeText.CSHARP,FileTypeText. +PROPERTIES+"",FileExtensionText.PROPERTIES,MimeTypeText.PROPERTIES;const BR_PATTERN=/<br\s*\/?\s*>/gi,LIST_PATTERN=/^<ul>([\s\S]*)<\/ul>$/i,LI_PATTERN=/<li>([\s\S]*?)<\/li>/gi,TOOL_GROUP_LABELS={[ToolSource.BUILTIN]:"Built-in",[ToolSource.CUSTOM]:"JSON Schema"},TOOL_SERVER_LABELS={[ToolSource.BUILTIN]:"Built-in Tools",[ToolSource.CUSTOM]:"Custom Tools"},TOOLTIP_DELAY_DURATION=500;var root$1N=from_svg('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 174 174" xmlns:xlink="http://www.w3.org/19\ +99/xlink" fill="none" version="1.1"><g id="shape-320b5b95-d08d-8089-8007-585a8e498184"><defs><clipPath id="frame-clip-320b5b95-d08d-8089-8007-585a8e498184-render-1" class="frame-clip frame-clip-def"><rect rx="0" ry="0" x="0" y="0" width="174.00000000000045" height="174" transform="matrix(1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000)"></rect></clipPath></defs><g class="frame-container-wrapper"><g class="frame-container-blur"><g class="frame-container-shadows"><g clip-path="url(#fram\ +e-clip-320b5b95-d08d-8089-8007-585a8e498184-render-1)" fill="none"><g class="fills" id="fills-320b5b95-d08d-8089-8007-585a8e498184"><rect rx="0" ry="0" x="0" y="0" width="174.00000000000045" height="174" transform="matrix(1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000)" class="frame-background"></rect></g><g class="frame-children"><g id="shape-320b5b95-d08d-8089-8007-585a974337b1"><g class="fills" id="fills-320b5b95-d08d-8089-8007-585a974337b1"><path d="M15.5587158203125,81.592773437\ +5L83.44091796875,13.7105712890625C92.813720703125,4.3380126953125,108.0096435546875,4.3380126953125,117.3817138671875,13.7105712890625L117.3817138671875,13.7105712890625C126.7547607421875,23.08306884765625,126.7547607421875,38.27911376953125,117.3817138671875,47.65167236328125L66.1168212890625,98.9169921875" fill="none" stroke-linecap="round" style="fill: none;"></path></g><g fill="none" stroke-linecap="round" id="strokes-b954dcef-3e3e-8015-8007-585acd4382b6-320b5b95-d08d-8089-8007-585a974337b1"\ + class="strokes"><g class="stroke-shape"><path d="M15.5587158203125,81.5927734375L83.44091796875,13.7105712890625C92.813720703125,4.3380126953125,108.0096435546875,4.3380126953125,117.3817138671875,13.7105712890625L117.3817138671875,13.7105712890625C126.7547607421875,23.08306884765625,126.7547607421875,38.27911376953125,117.3817138671875,47.65167236328125L66.1168212890625,98.9169921875" style="fill: none; stroke-width: 12; stroke: currentColor; stroke-opacity: 1;"></path></g></g></g><g id="shape\ +-320b5b95-d08d-8089-8007-585a974337b2"><g class="fills" id="fills-320b5b95-d08d-8089-8007-585a974337b2"><path d="M66.5587158203125,98.26885986328125L117.1165771484375,47.7105712890625C126.489501953125,38.3380126953125,141.6854248046875,38.3380126953125,151.0584716796875,47.7105712890625L151.4114990234375,48.0640869140625C160.7845458984375,57.43670654296875,160.7845458984375,72.6326904296875,151.4114990234375,82.00518798828125L90.018310546875,143.39886474609375C86.8941650390625,146.52288818359375\ +,86.8941650390625,151.587890625,90.018310546875,154.71185302734375L102.62451171875,167.31890869140625" fill="none" stroke-linecap="round" style="fill: none;"></path></g><g fill="none" stroke-linecap="round" id="strokes-b954dcef-3e3e-8015-8007-585acd447743-320b5b95-d08d-8089-8007-585a974337b2" class="strokes"><g class="stroke-shape"><path d="M66.5587158203125,98.26885986328125L117.1165771484375,47.7105712890625C126.489501953125,38.3380126953125,141.6854248046875,38.3380126953125,151.0584716796875\ +,47.7105712890625L151.4114990234375,48.0640869140625C160.7845458984375,57.43670654296875,160.7845458984375,72.6326904296875,151.4114990234375,82.00518798828125L90.018310546875,143.39886474609375C86.8941650390625,146.52288818359375,86.8941650390625,151.587890625,90.018310546875,154.71185302734375L102.62451171875,167.31890869140625" style="fill: none; stroke-width: 12; stroke: currentColor; stroke-opacity: 1;"></path></g></g></g><g id="shape-320b5b95-d08d-8089-8007-585a974337b3"><g class="fills" i\ +d="fills-320b5b95-d08d-8089-8007-585a974337b3"><path d="M99.79296875,30.68115234375L49.588134765625,80.8857421875C40.215576171875,90.258056640625,40.215576171875,105.45404052734375,49.588134765625,114.82708740234375L49.588134765625,114.82708740234375C58.9608154296875,124.19903564453125,74.1566162109375,124.19903564453125,83.529296875,114.82708740234375L133.7340087890625,64.62225341796875" fill="none" stroke-linecap="round" style="fill: none;"></path></g><g fill="none" stroke-linecap="round" id="\ +strokes-b954dcef-3e3e-8015-8007-585acd44c5c9-320b5b95-d08d-8089-8007-585a974337b3" class="strokes"><g class="stroke-shape"><path d="M99.79296875,30.68115234375L49.588134765625,80.8857421875C40.215576171875,90.258056640625,40.215576171875,105.45404052734375,49.588134765625,114.82708740234375L49.588134765625,114.82708740234375C58.9608154296875,124.19903564453125,74.1566162109375,124.19903564453125,83.529296875,114.82708740234375L133.7340087890625,64.62225341796875" style="fill: none; stroke-width:\ + 12; stroke: currentColor; stroke-opacity: 1;"></path></g></g></g></g></g></g></g></g></g></svg>');function McpLogo($$anchor,$$props){let className=prop($$props,"class",3,""),style2=prop($$props,"style",3,"");var svg2=root$1N();template_effect(()=>{set_class(svg2,0,clsx(className())),set_style(svg2,style2())}),append($$anchor,svg2)}const FORK_TREE_DEPTH_PADDING=8,SYSTEM_MESSAGE_PLACEHOLDER="System message",APP_NAME="llama.cpp",ICON_STRIP_TRANSITION_DURATION=150,ICON_STRIP_TRANSITION_DELAY_MULTIPLIER=50, +SIDEBAR_ACTIONS_ITEMS=[{icon:Square_pen,tooltip:"New chat",route:"?new_chat=true#/",keys:["shift","cmd","o"]},{icon:Search,tooltip:"Search",keys:["cmd","k"]},{icon:McpLogo,tooltip:"MCP Servers",route:"#/settings/mcp",activeRouteId:"/settings/mcp"},{icon:Database,tooltip:"Import / Export",route:"#/settings/import-export",activeRouteId:"/settings/import-export"},{icon:Settings$1,tooltip:"Settings",route:"#/settings/chat/general",activeRoutePrefix:"/settings/chat"}],URI_SCHEME_SEPARATOR="://",TEMPLATE_EXPRESSION_REGEX=/\{([+#./;?&]?)([^}]+)\}/g, +URI_TEMPLATE_OPERATORS={RESERVED:"+",FRAGMENT:"#",PATH_SEGMENT:"/",LABEL:".",PATH_PARAM:";",FORM_QUERY:"?",FORM_CONTINUATION:"&"},URI_TEMPLATE_SEPARATORS={COMMA:",",SLASH:"/",PERIOD:".",SEMICOLON:";",QUERY_PREFIX:"?",QUERY_CONTINUATION:"&"},VARIABLE_EXPLODE_MODIFIER_REGEX=/[*]$/,VARIABLE_PREFIX_MODIFIER_REGEX=/:[\d]+$/,LEADING_SLASHES_REGEX=/^\/+/,DEFAULT_MOBILE_BREAKPOINT=768;class IsMobile extends MediaQuery{constructor(breakpoint=DEFAULT_MOBILE_BREAKPOINT){super(`max-width: ${breakpoint-1}px`)}} +const SYNCABLE_PARAMETERS=[{key:"temperature",serverKey:"temperature",type:SyncableParameterType.NUMBER,canSync:!0},{key:"top_k",serverKey:"top_k",type:SyncableParameterType.NUMBER,canSync:!0},{key:"top_p",serverKey:"top_p",type:SyncableParameterType.NUMBER,canSync:!0},{key:"min_p",serverKey:"min_p",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dynatemp_range",serverKey:"dynatemp_range",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dynatemp_exponent",serverKey:"dynatemp_exponent",type:SyncableParameterType. +NUMBER,canSync:!0},{key:"xtc_probability",serverKey:"xtc_probability",type:SyncableParameterType.NUMBER,canSync:!0},{key:"xtc_threshold",serverKey:"xtc_threshold",type:SyncableParameterType.NUMBER,canSync:!0},{key:"typ_p",serverKey:"typ_p",type:SyncableParameterType.NUMBER,canSync:!0},{key:"repeat_last_n",serverKey:"repeat_last_n",type:SyncableParameterType.NUMBER,canSync:!0},{key:"repeat_penalty",serverKey:"repeat_penalty",type:SyncableParameterType.NUMBER,canSync:!0},{key:"presence_penalty",serverKey:"\ +presence_penalty",type:SyncableParameterType.NUMBER,canSync:!0},{key:"frequency_penalty",serverKey:"frequency_penalty",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dry_multiplier",serverKey:"dry_multiplier",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dry_base",serverKey:"dry_base",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dry_allowed_length",serverKey:"dry_allowed_length",type:SyncableParameterType.NUMBER,canSync:!0},{key:"dry_penalty_last_n",serverKey:"dry_penalty_last_\ +n",type:SyncableParameterType.NUMBER,canSync:!0},{key:"max_tokens",serverKey:"max_tokens",type:SyncableParameterType.NUMBER,canSync:!0},{key:"samplers",serverKey:"samplers",type:SyncableParameterType.STRING,canSync:!0},{key:"backend_sampling",serverKey:"backend_sampling",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"pasteLongTextToFileLen",serverKey:"pasteLongTextToFileLen",type:SyncableParameterType.NUMBER,canSync:!0},{key:"pdfAsImage",serverKey:"pdfAsImage",type:SyncableParameterType.BOOLEAN, +canSync:!0},{key:"showThoughtInProgress",serverKey:"showThoughtInProgress",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"keepStatsVisible",serverKey:"keepStatsVisible",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"showMessageStats",serverKey:"showMessageStats",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"askForTitleConfirmation",serverKey:"askForTitleConfirmation",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"titleGenerationUseFirstLine",serverKey:"titleGenerationUse\ +FirstLine",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"disableAutoScroll",serverKey:"disableAutoScroll",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"renderUserContentAsMarkdown",serverKey:"renderUserContentAsMarkdown",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"autoMicOnEmpty",serverKey:"autoMicOnEmpty",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"pyInterpreterEnabled",serverKey:"pyInterpreterEnabled",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"enableCo\ +ntinueGeneration",serverKey:"enableContinueGeneration",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"fullHeightCodeBlocks",serverKey:"fullHeightCodeBlocks",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"systemMessage",serverKey:"systemMessage",type:SyncableParameterType.STRING,canSync:!0},{key:"showSystemMessage",serverKey:"showSystemMessage",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"theme",serverKey:"theme",type:SyncableParameterType.STRING,canSync:!0},{key:"copyTextAtta\ +chmentsAsPlainText",serverKey:"copyTextAttachmentsAsPlainText",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"showRawOutputSwitch",serverKey:"showRawOutputSwitch",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"alwaysShowSidebarOnDesktop",serverKey:"alwaysShowSidebarOnDesktop",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"showRawModelNames",serverKey:"showRawModelNames",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"mcpServers",serverKey:"mcpServers",type:SyncableParameterType. +STRING,canSync:!0},{key:"agenticMaxTurns",serverKey:"agenticMaxTurns",type:SyncableParameterType.NUMBER,canSync:!0},{key:"agenticMaxToolPreviewLines",serverKey:"agenticMaxToolPreviewLines",type:SyncableParameterType.NUMBER,canSync:!0},{key:"showToolCallInProgress",serverKey:"showToolCallInProgress",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"alwaysShowAgenticTurns",serverKey:"alwaysShowAgenticTurns",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"excludeReasoningFromContext",serverKey:"\ +excludeReasoningFromContext",type:SyncableParameterType.BOOLEAN,canSync:!0},{key:"sendOnEnter",serverKey:"sendOnEnter",type:SyncableParameterType.BOOLEAN,canSync:!0}];class ParameterSyncService{static roundFloatingPoint(value){return normalizeFloatingPoint(value)}static extractServerDefaults(serverParams,webuiSettings){const extracted={};if(serverParams){for(const param of SYNCABLE_PARAMETERS)if(param.canSync&¶m.serverKey in serverParams){const value=serverParams[param.serverKey];value!==void 0&& +(extracted[param.key]=this.roundFloatingPoint(value))}serverParams.samplers&&Array.isArray(serverParams.samplers)&&(extracted.samplers=serverParams.samplers.join(";"))}if(webuiSettings){for(const param of SYNCABLE_PARAMETERS)if(param.canSync&¶m.serverKey in webuiSettings){const value=webuiSettings[param.serverKey];value!==void 0&&(extracted[param.key]=this.roundFloatingPoint(value))}}return extracted}static mergeWithServerDefaults(currentSettings,serverDefaults,userOverrides=new Set){const merged={ +...currentSettings};for(const[key2,serverValue]of Object.entries(serverDefaults))userOverrides.has(key2)||(merged[key2]=this.roundFloatingPoint(serverValue));return merged}static getParameterInfo(key2,currentValue,propsDefaults,userOverrides){const hasPropsDefault=propsDefaults[key2]!==void 0,isUserOverride=userOverrides.has(key2),source2=isUserOverride?ParameterSource.CUSTOM:ParameterSource.DEFAULT;return{value:currentValue,source:source2,serverDefault:hasPropsDefault?propsDefaults[key2]:void 0, +userOverride:isUserOverride?currentValue:void 0}}static canSyncParameter(key2){return SYNCABLE_PARAMETERS.some(param=>param.key===key2&¶m.canSync)}static getSyncableParameterKeys(){return SYNCABLE_PARAMETERS.filter(param=>param.canSync).map(param=>param.key)}static validateServerParameter(key2,value){const param=SYNCABLE_PARAMETERS.find(p2=>p2.key===key2);if(!param)return!1;switch(param.type){case SyncableParameterType.NUMBER:return typeof value=="number"&&!isNaN(value);case SyncableParameterType. +STRING:return typeof value=="string";case SyncableParameterType.BOOLEAN:return typeof value=="boolean";default:return!1}}static createParameterDiff(currentSettings,serverDefaults){const diff2={};for(const key2 of this.getSyncableParameterKeys()){const currentValue=currentSettings[key2],serverValue=serverDefaults[key2];serverValue!==void 0&&(diff2[key2]={current:currentValue,server:serverValue,differs:currentValue!==serverValue})}return diff2}}class PropsService{static async fetch(autoload=!1){const params={}; +return autoload||(params.autoload="false"),apiFetchWithParams("./props",params,{authOnly:!0})}static async fetchForModel(modelId,autoload=!1){const params={model:modelId};return autoload||(params.autoload="false"),apiFetchWithParams("./props",params,{authOnly:!0})}}class ServerStore{#props=state$1(null);get props(){return get$3(this.#props)}set props(value){set$1(this.#props,value,!0)}#loading=state$1(!1);get loading(){return get$3(this.#loading)}set loading(value){set$1(this.#loading,value,!0)}#error=state$1( +null);get error(){return get$3(this.#error)}set error(value){set$1(this.#error,value,!0)}#role=state$1(null);get role(){return get$3(this.#role)}set role(value){set$1(this.#role,value,!0)}fetchPromise=null;get defaultParams(){return this.props?.default_generation_settings?.params||null}get contextSize(){const nCtx=this.props?.default_generation_settings?.n_ctx;return typeof nCtx=="number"?nCtx:null}get webuiSettings(){return this.props?.webui_settings}get isRouterMode(){return this.role===ServerRole. +ROUTER}get isModelMode(){return this.role===ServerRole.MODEL}async fetch(){if(this.fetchPromise)return this.fetchPromise;this.loading=!0,this.error=null;const fetchPromise=(async()=>{try{const props=await PropsService.fetch();this.props=props,this.error=null,this.detectRole(props)}catch(error2){this.error=this.getErrorMessage(error2),console.error("Error fetching server properties:",error2)}finally{this.loading=!1,this.fetchPromise=null}})();this.fetchPromise=fetchPromise,await fetchPromise}getErrorMessage(error2){ +if(error2 instanceof Error){const message=error2.message||"";if(error2.name==="TypeError"&&message.includes("fetch"))return"Server is not running or unreachable";if(message.includes("ECONNREFUSED"))return"Connection refused - server may be offline";if(message.includes("ENOTFOUND"))return"Server not found - check server address";if(message.includes("ETIMEDOUT"))return"Request timed out";if(message.includes("503"))return"Server temporarily unavailable";if(message.includes("500"))return"Server erro\ +r - check server logs";if(message.includes("404"))return"Server endpoint not found";if(message.includes("403")||message.includes("401"))return"Access denied"}return"Failed to connect to server"}clear(){this.props=null,this.error=null,this.loading=!1,this.role=null,this.fetchPromise=null}detectRole(props){const newRole=props?.role===ServerRole.ROUTER?ServerRole.ROUTER:ServerRole.MODEL;this.role!==newRole&&(this.role=newRole,console.info(`Server running in ${newRole===ServerRole.ROUTER?"ROUTER":"M\ +ODEL"} mode`))}}const serverStore=new ServerStore,serverProps=()=>serverStore.props,serverLoading=()=>serverStore.loading,serverError=()=>serverStore.error,contextSize=()=>serverStore.contextSize,isRouterMode=()=>serverStore.isRouterMode;class SettingsStore{#config=state$1(proxy({...SETTING_CONFIG_DEFAULT}));get config(){return get$3(this.#config)}set config(value){set$1(this.#config,value,!0)}#theme=state$1("auto");get theme(){return get$3(this.#theme)}set theme(value){set$1(this.#theme,value,!0)}#isInitialized=state$1( +!1);get isInitialized(){return get$3(this.#isInitialized)}set isInitialized(value){set$1(this.#isInitialized,value,!0)}#userOverrides=state$1(proxy(new Set));get userOverrides(){return get$3(this.#userOverrides)}set userOverrides(value){set$1(this.#userOverrides,value,!0)}getServerDefaults(){const serverParams=serverStore.defaultParams,webuiSettings=serverStore.webuiSettings;return ParameterSyncService.extractServerDefaults(serverParams,webuiSettings)}constructor(){this.initialize()}initialize(){ +try{this.loadConfig(),this.loadTheme(),this.isInitialized=!0}catch(error2){console.error("Failed to initialize settings store:",error2)}}loadConfig(){try{const storedConfigRaw=localStorage.getItem(CONFIG_LOCALSTORAGE_KEY),savedVal=JSON.parse(storedConfigRaw||"{}");this.config={...SETTING_CONFIG_DEFAULT,...savedVal},"sendOnEnter"in savedVal||new IsMobile().current&&(this.config.sendOnEnter=!1);const savedOverrides=JSON.parse(localStorage.getItem(USER_OVERRIDES_LOCALSTORAGE_KEY)||"[]");this.userOverrides= +new Set(savedOverrides)}catch(error2){console.warn("Failed to parse config from localStorage, using defaults:",error2),this.config={...SETTING_CONFIG_DEFAULT},this.userOverrides=new Set}}loadTheme(){this.theme=localStorage.getItem("theme")||"auto"}updateConfig(key2,value){if(this.config[key2]=value,ParameterSyncService.canSyncParameter(key2)){const propsDefault=this.getServerDefaults()[key2];if(propsDefault!==void 0){const normalizedValue=normalizeFloatingPoint(value),normalizedDefault=normalizeFloatingPoint( +propsDefault);normalizedValue===normalizedDefault?this.userOverrides.delete(key2):this.userOverrides.add(key2)}}this.saveConfig()}updateMultipleConfig(updates){Object.assign(this.config,updates);const propsDefaults=this.getServerDefaults();for(const[key2,value]of Object.entries(updates))if(ParameterSyncService.canSyncParameter(key2)){const propsDefault=propsDefaults[key2];if(propsDefault!==void 0){const normalizedValue=normalizeFloatingPoint(value),normalizedDefault=normalizeFloatingPoint(propsDefault); +normalizedValue===normalizedDefault?this.userOverrides.delete(key2):this.userOverrides.add(key2)}}this.saveConfig()}saveConfig(){try{localStorage.setItem(CONFIG_LOCALSTORAGE_KEY,JSON.stringify(this.config)),localStorage.setItem(USER_OVERRIDES_LOCALSTORAGE_KEY,JSON.stringify(Array.from(this.userOverrides)))}catch(error2){console.error("Failed to save config to localStorage:",error2)}}updateTheme(newTheme){this.theme=newTheme,this.saveTheme()}saveTheme(){try{this.theme==="auto"?localStorage.removeItem( +"theme"):localStorage.setItem("theme",this.theme)}catch(error2){console.error("Failed to save theme to localStorage:",error2)}}resetConfig(){this.config={...SETTING_CONFIG_DEFAULT},this.saveConfig()}resetTheme(){this.theme="auto",this.saveTheme()}resetAll(){this.resetConfig(),this.resetTheme()}resetParameterToServerDefault(key2){const serverDefaults=this.getServerDefaults(),webuiSettings=serverStore.webuiSettings;webuiSettings&&key2 in webuiSettings?setConfigValue(this.config,key2,webuiSettings[key2]): +serverDefaults[key2]!==void 0?setConfigValue(this.config,key2,""):key2 in SETTING_CONFIG_DEFAULT&&setConfigValue(this.config,key2,getConfigValue(SETTING_CONFIG_DEFAULT,key2)),this.userOverrides.delete(key2),this.saveConfig()}syncWithServerDefaults(){const propsDefaults=this.getServerDefaults();if(Object.keys(propsDefaults).length===0)return;const webuiSettings=serverStore.webuiSettings,webuiSettingsKeys=new Set(webuiSettings?Object.keys(webuiSettings):[]);for(const[key2,propsValue]of Object.entries( +propsDefaults)){const currentValue=getConfigValue(this.config,key2),normalizedCurrent=normalizeFloatingPoint(currentValue),normalizedDefault=normalizeFloatingPoint(propsValue);normalizedCurrent===normalizedDefault&&(this.userOverrides.delete(key2),!webuiSettingsKeys.has(key2)&&getConfigValue(SETTING_CONFIG_DEFAULT,key2)===void 0&&setConfigValue(this.config,key2,void 0))}if(webuiSettings)for(const[key2,value]of Object.entries(webuiSettings))!this.userOverrides.has(key2)&&value!==void 0&&setConfigValue( +this.config,key2,value);this.saveConfig(),console.log("User overrides after sync:",Array.from(this.userOverrides))}forceSyncWithServerDefaults(){const propsDefaults=this.getServerDefaults(),webuiSettings=serverStore.webuiSettings;for(const key2 of ParameterSyncService.getSyncableParameterKeys())webuiSettings&&key2 in webuiSettings?setConfigValue(this.config,key2,webuiSettings[key2]):propsDefaults[key2]!==void 0?setConfigValue(this.config,key2,""):key2 in SETTING_CONFIG_DEFAULT&&setConfigValue(this. +config,key2,getConfigValue(SETTING_CONFIG_DEFAULT,key2)),this.userOverrides.delete(key2);this.saveConfig()}getConfig(key2){return this.config[key2]}getAllConfig(){return{...this.config}}canSyncParameter(key2){return ParameterSyncService.canSyncParameter(key2)}getParameterInfo(key2){const propsDefaults=this.getServerDefaults(),currentValue=getConfigValue(this.config,key2);return ParameterSyncService.getParameterInfo(key2,currentValue??"",propsDefaults,this.userOverrides)}getParameterDiff(){const serverDefaults=this. +getServerDefaults();if(Object.keys(serverDefaults).length===0)return{};const configAsRecord=configToParameterRecord(this.config,ParameterSyncService.getSyncableParameterKeys());return ParameterSyncService.createParameterDiff(configAsRecord,serverDefaults)}clearAllUserOverrides(){this.userOverrides.clear(),this.saveConfig(),console.log("Cleared all user overrides")}}const settingsStore=new SettingsStore,config$1=()=>settingsStore.config;function redactValue(value,showLastChars){return showLastChars? +`....${value.slice(-showLastChars)}`:"[redacted]"}function getAuthHeaders(){const apiKey=config$1().apiKey?.toString().trim();return apiKey?{Authorization:`Bearer ${apiKey}`}:{}}function getJsonHeaders(){return{"Content-Type":"application/json",...getAuthHeaders()}}function sanitizeHeaders(headers,extraRedactedHeaders,partialRedactHeaders){if(!headers)return{};const normalized=new Headers(headers),sanitized={},redactedHeaders=new Set(Array.from(extraRedactedHeaders??[],header=>header.toLowerCase())); +for(const[key2,value]of normalized.entries()){const normalizedKey=key2.toLowerCase(),partialChars=partialRedactHeaders?.get(normalizedKey);partialChars!==void 0?sanitized[key2]=redactValue(value,partialChars):REDACTED_HEADERS.has(normalizedKey)||redactedHeaders.has(normalizedKey)?sanitized[key2]=redactValue(value):sanitized[key2]=value}return sanitized}async function apiFetch(path2,options={}){const{authOnly=!1,headers:customHeaders,...fetchOptions}=options,headers={...authOnly?getAuthHeaders(): +getJsonHeaders(),...customHeaders},url2=path2.startsWith(UrlProtocol.HTTP)||path2.startsWith(UrlProtocol.HTTPS)?path2:`${base}${path2}`,response=await fetch(url2,{...fetchOptions,headers});if(!response.ok){const errorMessage=await parseErrorMessage(response);throw new Error(errorMessage)}return response.json()}async function apiFetchWithParams(basePath,params,options={}){const url2=new URL(basePath,window.location.href);for(const[key2,value]of Object.entries(params))value!=null&&url2.searchParams. +set(key2,value);const{authOnly=!1,headers:customHeaders,...fetchOptions}=options,headers={...authOnly?getAuthHeaders():getJsonHeaders(),...customHeaders},response=await fetch(url2.toString(),{...fetchOptions,headers});if(!response.ok){const errorMessage=await parseErrorMessage(response);throw new Error(errorMessage)}return response.json()}async function apiPost(path2,body2,options={}){return apiFetch(path2,{method:"POST",body:JSON.stringify(body2),...options})}async function parseErrorMessage(response){ +try{const errorData=await response.json();if(errorData?.error?.message)return errorData.error.message;if(errorData?.error&&typeof errorData.error=="string")return errorData.error;if(errorData?.message)return errorData.message}catch{}return`Request failed: ${response.status} ${response.statusText}`}function error(status,body2){throw new HttpError(status,body2)}async function validateApiKey(fetch2){try{const apiKey=config$1().apiKey,headers={"Content-Type":"application/json"};apiKey&&(headers.Authorization= +`Bearer ${apiKey}`);const response=await fetch2(`${base}/props`,{headers});if(!response.ok){if(response.status===401||response.status===403)throw error(401,"Access denied");console.warn(`Server responded with status ${response.status} during API key validation`);return}}catch(err){if(err&&typeof err=="object"&&"status"in err)throw err;console.warn("Cannot connect to server for API key validation:",err)}}function isMcpPromptUpload(file){return file.type===SpecialFileType.MCP_PROMPT&&!!file.mcpPrompt} +function isMcpPromptAttachment(attachment){return attachment.type===AttachmentType.MCP_PROMPT}function isMcpResourceAttachment(attachment){return attachment.type===AttachmentType.MCP_RESOURCE}function getUploadedFileCategory$1(file){const categoryByMime=getFileTypeCategory(file.type);return categoryByMime||getFileTypeCategoryByExtension(file.name)}function getAttachmentDisplayItems(options){const{uploadedFiles=[],attachments=[]}=options,items2=[];for(const file of uploadedFiles)items2.push({id:file. +id,name:file.name,size:file.size,preview:file.preview,isImage:getUploadedFileCategory$1(file)===FileTypeCategory.IMAGE,isMcpPrompt:isMcpPromptUpload(file),isLoading:file.isLoading,loadError:file.loadError,uploadedFile:file,textContent:file.textContent});for(const[index2,attachment]of attachments.entries()){const isImage2=isImageFile(attachment),isMcpPrompt=isMcpPromptAttachment(attachment),isMcpResource=isMcpResourceAttachment(attachment);items2.push({id:`attachment-${index2}`,name:attachment.name, +preview:isImage2&&"base64Url"in attachment?attachment.base64Url:void 0,isImage:isImage2,isMcpPrompt,isMcpResource,attachment,attachmentIndex:index2,textContent:"content"in attachment?attachment.content:void 0})}return items2.reverse()}function getUploadedFileCategory(uploadedFile){const categoryByMime=getFileTypeCategory(uploadedFile.type);return categoryByMime||getFileTypeCategoryByExtension(uploadedFile.name)}function isTextFile(attachment,uploadedFile){return uploadedFile?getUploadedFileCategory( +uploadedFile)===FileTypeCategory.TEXT:attachment?attachment.type===AttachmentType.TEXT||attachment.type===AttachmentType.LEGACY_CONTEXT:!1}function isImageFile(attachment,uploadedFile){return uploadedFile?getUploadedFileCategory(uploadedFile)===FileTypeCategory.IMAGE:attachment?attachment.type===AttachmentType.IMAGE:!1}function isPdfFile$1(attachment,uploadedFile){return uploadedFile?getUploadedFileCategory(uploadedFile)===FileTypeCategory.PDF:attachment?attachment.type===AttachmentType.PDF:!1}function isAudioFile(attachment,uploadedFile){ +return uploadedFile?getUploadedFileCategory(uploadedFile)===FileTypeCategory.AUDIO:attachment?attachment.type===AttachmentType.AUDIO:!1}function autoResizeTextarea(textareaElement){textareaElement&&(textareaElement.style.height="1rem",textareaElement.style.height=textareaElement.scrollHeight+"px")}function findMessageById(messages,id2){if(id2)return messages.find(m=>m.id===id2)}function filterByLeafNodeId(messages,leafNodeId,includeRoot=!1){const result=[],nodeMap=new Map;for(const msg of messages) +nodeMap.set(msg.id,msg);let startNode=nodeMap.get(leafNodeId);if(!startNode){let latestTime=-1;for(const msg of messages)msg.timestamp>latestTime&&(startNode=msg,latestTime=msg.timestamp)}let currentNode=startNode;for(;currentNode&&((currentNode.type!=="root"||includeRoot)&&result.push(currentNode),currentNode.parent!==null);)currentNode=nodeMap.get(currentNode.parent);return result.sort((a,b)=>a.role===MessageRole.SYSTEM&&b.role!==MessageRole.SYSTEM?-1:a.role!==MessageRole.SYSTEM&&b.role===MessageRole. +SYSTEM?1:a.timestamp-b.timestamp),result}function findLeafNode(messages,messageId){const nodeMap=new Map;for(const msg of messages)nodeMap.set(msg.id,msg);let currentNode=nodeMap.get(messageId);for(;currentNode&¤tNode.children.length>0;){const lastChildId=currentNode.children[currentNode.children.length-1];currentNode=nodeMap.get(lastChildId)}return currentNode?.id??messageId}function findDescendantMessages(messages,messageId){const nodeMap=new Map;for(const msg of messages)nodeMap.set(msg. +id,msg);const descendants=[],queue=[messageId];for(;queue.length>0;){const currentId=queue.shift(),currentNode=nodeMap.get(currentId);if(currentNode)for(const childId of currentNode.children)descendants.push(childId),queue.push(childId)}return descendants}function getMessageSiblings(messages,messageId){const nodeMap=new Map;for(const msg of messages)nodeMap.set(msg.id,msg);const message=nodeMap.get(messageId);if(!message)return null;if(message.parent===null)return{message,siblingIds:[messageId], +currentIndex:0,totalSiblings:1};const parentNode=nodeMap.get(message.parent);if(!parentNode)return{message,siblingIds:[messageId],currentIndex:0,totalSiblings:1};const siblingIds=parentNode.children,siblingLeafIds=siblingIds.map(siblingId=>findLeafNode(messages,siblingId)),currentIndex=siblingIds.indexOf(messageId);return{message,siblingIds:siblingLeafIds,currentIndex,totalSiblings:siblingIds.length}}var core$5,hasRequiredCore$4;function requireCore$4(){if(hasRequiredCore$4)return core$5;hasRequiredCore$4= +1;function deepFreeze(obj){return obj instanceof Map?obj.clear=obj.delete=obj.set=function(){throw new Error("map is read-only")}:obj instanceof Set&&(obj.add=obj.clear=obj.delete=function(){throw new Error("set is read-only")}),Object.freeze(obj),Object.getOwnPropertyNames(obj).forEach(name=>{const prop2=obj[name],type2=typeof prop2;(type2==="object"||type2==="function")&&!Object.isFrozen(prop2)&&deepFreeze(prop2)}),obj}class Response2{constructor(mode){mode.data===void 0&&(mode.data={}),this.data= +mode.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function escapeHTML(value){return value.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function inherit$1(original,...objects){const result=Object.create(null);for(const key2 in original)result[key2]=original[key2];return objects.forEach(function(obj){for(const key2 in obj)result[key2]=obj[key2]}),result}const SPAN_CLOSE="</span>",emitsWrappingTags=node2=>!!node2. +scope,scopeToCSSClass=(name,{prefix})=>{if(name.startsWith("language:"))return name.replace("language:","language-");if(name.includes(".")){const pieces=name.split(".");return[`${prefix}${pieces.shift()}`,...pieces.map((x,i)=>`${x}${"_".repeat(i+1)}`)].join(" ")}return`${prefix}${name}`};class HTMLRenderer{constructor(parseTree3,options){this.buffer="",this.classPrefix=options.classPrefix,parseTree3.walk(this)}addText(text2){this.buffer+=escapeHTML(text2)}openNode(node2){if(!emitsWrappingTags(node2)) +return;const className=scopeToCSSClass(node2.scope,{prefix:this.classPrefix});this.span(className)}closeNode(node2){emitsWrappingTags(node2)&&(this.buffer+=SPAN_CLOSE)}value(){return this.buffer}span(className){this.buffer+=`<span class="${className}">`}}const newNode=(opts={})=>{const result={children:[]};return Object.assign(result,opts),result};class TokenTree{constructor(){this.rootNode=newNode(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this. +rootNode}add(node2){this.top.children.push(node2)}openNode(scope2){const node2=newNode({scope:scope2});this.add(node2),this.stack.push(node2)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(builder){return this.constructor._walk(builder,this.rootNode)}static _walk(builder,node2){return typeof node2=="string"?builder.addText(node2):node2.children&&(builder.openNode(node2),node2.children.forEach( +child2=>this._walk(builder,child2)),builder.closeNode(node2)),builder}static _collapse(node2){typeof node2!="string"&&node2.children&&(node2.children.every(el=>typeof el=="string")?node2.children=[node2.children.join("")]:node2.children.forEach(child2=>{TokenTree._collapse(child2)}))}}class TokenTreeEmitter extends TokenTree{constructor(options){super(),this.options=options}addText(text2){text2!==""&&this.add(text2)}startScope(scope2){this.openNode(scope2)}endScope(){this.closeNode()}__addSublanguage(emitter,name){ +const node2=emitter.root;name&&(node2.scope=`language:${name}`),this.add(node2)}toHTML(){return new HTMLRenderer(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function source2(re2){return re2?typeof re2=="string"?re2:re2.source:null}function lookahead2(re2){return concat2("(?=",re2,")")}function anyNumberOfTimes(re2){return concat2("(?:",re2,")*")}function optional2(re2){return concat2("(?:",re2,")?")}function concat2(...args){return args.map(x=>source2(x)).join("")}function stripOptionsFromArgs2(args){ +const opts=args[args.length-1];return typeof opts=="object"&&opts.constructor===Object?(args.splice(args.length-1,1),opts):{}}function either2(...args){return"("+(stripOptionsFromArgs2(args).capture?"":"?:")+args.map(x=>source2(x)).join("|")+")"}function countMatchGroups(re2){return new RegExp(re2.toString()+"|").exec("").length-1}function startsWith(re2,lexeme){const match=re2&&re2.exec(lexeme);return match&&match.index===0}const BACKREF_RE=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function _rewriteBackreferences(regexps,{ +joinWith}){let numCaptures=0;return regexps.map(regex=>{numCaptures+=1;const offset2=numCaptures;let re2=source2(regex),out="";for(;re2.length>0;){const match=BACKREF_RE.exec(re2);if(!match){out+=re2;break}out+=re2.substring(0,match.index),re2=re2.substring(match.index+match[0].length),match[0][0]==="\\"&&match[1]?out+="\\"+String(Number(match[1])+offset2):(out+=match[0],match[0]==="("&&numCaptures++)}return out}).map(re2=>`(${re2})`).join(joinWith)}const MATCH_NOTHING_RE=/\b\B/,IDENT_RE2="[a-zA\ +-Z]\\w*",UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",NUMBER_RE="\\b\\d+(\\.\\d+)?",C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",BINARY_NUMBER_RE="\\b(0b[01]+)",RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG=(opts={})=>{const beginShebang=/^#![ ]*\//;return opts.binary&&(opts.begin=concat2(beginShebang,/.*\b/,opts.binary,/\b.*/)),inherit$1({scope:"\ +meta",begin:beginShebang,end:/$/,relevance:0,"on:begin":(m,resp)=>{m.index!==0&&resp.ignoreMatch()}},opts)},BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},APOS_STRING_MODE={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[BACKSLASH_ESCAPE]},QUOTE_STRING_MODE={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[BACKSLASH_ESCAPE]},PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/}, +COMMENT=function(begin,end,modeOptions={}){const mode=inherit$1({scope:"comment",begin,end,contains:[]},modeOptions);mode.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const ENGLISH_WORD=either2("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return mode.contains.push({begin:concat2(/[ ]+/,"(",ENGLISH_WORD, +/[.]?[:]?([.][ ]|[ ])/,"){3}")}),mode},C_LINE_COMMENT_MODE=COMMENT("//","$"),C_BLOCK_COMMENT_MODE=COMMENT("/\\*","\\*/"),HASH_COMMENT_MODE=COMMENT("#","$"),NUMBER_MODE={scope:"number",begin:NUMBER_RE,relevance:0},C_NUMBER_MODE={scope:"number",begin:C_NUMBER_RE,relevance:0},BINARY_NUMBER_MODE={scope:"number",begin:BINARY_NUMBER_RE,relevance:0},REGEXP_MODE={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[BACKSLASH_ESCAPE]}]}, +TITLE_MODE={scope:"title",begin:IDENT_RE2,relevance:0},UNDERSCORE_TITLE_MODE={scope:"title",begin:UNDERSCORE_IDENT_RE,relevance:0},METHOD_GUARD={begin:"\\.\\s*"+UNDERSCORE_IDENT_RE,relevance:0};var MODES2=Object.freeze({__proto__:null,APOS_STRING_MODE,BACKSLASH_ESCAPE,BINARY_NUMBER_MODE,BINARY_NUMBER_RE,COMMENT,C_BLOCK_COMMENT_MODE,C_LINE_COMMENT_MODE,C_NUMBER_MODE,C_NUMBER_RE,END_SAME_AS_BEGIN:function(mode){return Object.assign(mode,{"on:begin":(m,resp)=>{resp.data._beginMatch=m[1]},"on:end":(m,resp)=>{ +resp.data._beginMatch!==m[1]&&resp.ignoreMatch()}})},HASH_COMMENT_MODE,IDENT_RE:IDENT_RE2,MATCH_NOTHING_RE,METHOD_GUARD,NUMBER_MODE,NUMBER_RE,PHRASAL_WORDS_MODE,QUOTE_STRING_MODE,REGEXP_MODE,RE_STARTERS_RE,SHEBANG,TITLE_MODE,UNDERSCORE_IDENT_RE,UNDERSCORE_TITLE_MODE});function skipIfHasPrecedingDot(match,response){match.input[match.index-1]==="."&&response.ignoreMatch()}function scopeClassName(mode,_parent){mode.className!==void 0&&(mode.scope=mode.className,delete mode.className)}function beginKeywords(mode,parent){ +parent&&mode.beginKeywords&&(mode.begin="\\b("+mode.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",mode.__beforeBegin=skipIfHasPrecedingDot,mode.keywords=mode.keywords||mode.beginKeywords,delete mode.beginKeywords,mode.relevance===void 0&&(mode.relevance=0))}function compileIllegal(mode,_parent){Array.isArray(mode.illegal)&&(mode.illegal=either2(...mode.illegal))}function compileMatch(mode,_parent){if(mode.match){if(mode.begin||mode.end)throw new Error("begin & end are not supported wi\ +th match");mode.begin=mode.match,delete mode.match}}function compileRelevance(mode,_parent){mode.relevance===void 0&&(mode.relevance=1)}const beforeMatchExt=(mode,parent)=>{if(!mode.beforeMatch)return;if(mode.starts)throw new Error("beforeMatch cannot be used with starts");const originalMode=Object.assign({},mode);Object.keys(mode).forEach(key2=>{delete mode[key2]}),mode.keywords=originalMode.keywords,mode.begin=concat2(originalMode.beforeMatch,lookahead2(originalMode.begin)),mode.starts={relevance:0, +contains:[Object.assign(originalMode,{endsParent:!0})]},mode.relevance=0,delete originalMode.beforeMatch},COMMON_KEYWORDS=["of","and","for","in","not","or","if","then","parent","list","value"],DEFAULT_KEYWORD_SCOPE="keyword";function compileKeywords(rawKeywords,caseInsensitive,scopeName=DEFAULT_KEYWORD_SCOPE){const compiledKeywords=Object.create(null);return typeof rawKeywords=="string"?compileList(scopeName,rawKeywords.split(" ")):Array.isArray(rawKeywords)?compileList(scopeName,rawKeywords):Object. +keys(rawKeywords).forEach(function(scopeName2){Object.assign(compiledKeywords,compileKeywords(rawKeywords[scopeName2],caseInsensitive,scopeName2))}),compiledKeywords;function compileList(scopeName2,keywordList){caseInsensitive&&(keywordList=keywordList.map(x=>x.toLowerCase())),keywordList.forEach(function(keyword2){const pair=keyword2.split("|");compiledKeywords[pair[0]]=[scopeName2,scoreForKeyword(pair[0],pair[1])]})}}function scoreForKeyword(keyword2,providedScore){return providedScore?Number( +providedScore):commonKeyword(keyword2)?0:1}function commonKeyword(keyword2){return COMMON_KEYWORDS.includes(keyword2.toLowerCase())}const seenDeprecations={},error2=message=>{console.error(message)},warn2=(message,...args)=>{console.log(`WARN: ${message}`,...args)},deprecated2=(version3,message)=>{seenDeprecations[`${version3}/${message}`]||(console.log(`Deprecated as of ${version3}. ${message}`),seenDeprecations[`${version3}/${message}`]=!0)},MultiClassError=new Error;function remapScopeNames(mode,regexes,{ +key:key2}){let offset2=0;const scopeNames=mode[key2],emit={},positions={};for(let i=1;i<=regexes.length;i++)positions[i+offset2]=scopeNames[i],emit[i+offset2]=!0,offset2+=countMatchGroups(regexes[i-1]);mode[key2]=positions,mode[key2]._emit=emit,mode[key2]._multi=!0}function beginMultiClass(mode){if(Array.isArray(mode.begin)){if(mode.skip||mode.excludeBegin||mode.returnBegin)throw error2("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),MultiClassError;if(typeof mode.beginScope!= +"object"||mode.beginScope===null)throw error2("beginScope must be object"),MultiClassError;remapScopeNames(mode,mode.begin,{key:"beginScope"}),mode.begin=_rewriteBackreferences(mode.begin,{joinWith:""})}}function endMultiClass(mode){if(Array.isArray(mode.end)){if(mode.skip||mode.excludeEnd||mode.returnEnd)throw error2("skip, excludeEnd, returnEnd not compatible with endScope: {}"),MultiClassError;if(typeof mode.endScope!="object"||mode.endScope===null)throw error2("endScope must be object"),MultiClassError; +remapScopeNames(mode,mode.end,{key:"endScope"}),mode.end=_rewriteBackreferences(mode.end,{joinWith:""})}}function scopeSugar(mode){mode.scope&&typeof mode.scope=="object"&&mode.scope!==null&&(mode.beginScope=mode.scope,delete mode.scope)}function MultiClass(mode){scopeSugar(mode),typeof mode.beginScope=="string"&&(mode.beginScope={_wrap:mode.beginScope}),typeof mode.endScope=="string"&&(mode.endScope={_wrap:mode.endScope}),beginMultiClass(mode),endMultiClass(mode)}function compileLanguage(language2){ +function langRe(value,global2){return new RegExp(source2(value),"m"+(language2.case_insensitive?"i":"")+(language2.unicodeRegex?"u":"")+(global2?"g":""))}class MultiRegex{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(re2,opts){opts.position=this.position++,this.matchIndexes[this.matchAt]=opts,this.regexes.push([opts,re2]),this.matchAt+=countMatchGroups(re2)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const terminators=this.regexes.map(el=>el[1]); +this.matcherRe=langRe(_rewriteBackreferences(terminators,{joinWith:"|"}),!0),this.lastIndex=0}exec(s2){this.matcherRe.lastIndex=this.lastIndex;const match=this.matcherRe.exec(s2);if(!match)return null;const i=match.findIndex((el,i2)=>i2>0&&el!==void 0),matchData=this.matchIndexes[i];return match.splice(0,i),Object.assign(match,matchData)}}class ResumableMultiRegex{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(index2){if(this.multiRegexes[index2]) +return this.multiRegexes[index2];const matcher=new MultiRegex;return this.rules.slice(index2).forEach(([re2,opts])=>matcher.addRule(re2,opts)),matcher.compile(),this.multiRegexes[index2]=matcher,matcher}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(re2,opts){this.rules.push([re2,opts]),opts.type==="begin"&&this.count++}exec(s2){const m=this.getMatcher(this.regexIndex);m.lastIndex=this.lastIndex;let result=m.exec(s2);if(this.resumingScanAtSamePosition()&& +!(result&&result.index===this.lastIndex)){const m2=this.getMatcher(0);m2.lastIndex=this.lastIndex+1,result=m2.exec(s2)}return result&&(this.regexIndex+=result.position+1,this.regexIndex===this.count&&this.considerAll()),result}}function buildModeRegex(mode){const mm=new ResumableMultiRegex;return mode.contains.forEach(term=>mm.addRule(term.begin,{rule:term,type:"begin"})),mode.terminatorEnd&&mm.addRule(mode.terminatorEnd,{type:"end"}),mode.illegal&&mm.addRule(mode.illegal,{type:"illegal"}),mm}function compileMode(mode,parent){ +const cmode=mode;if(mode.isCompiled)return cmode;[scopeClassName,compileMatch,MultiClass,beforeMatchExt].forEach(ext=>ext(mode,parent)),language2.compilerExtensions.forEach(ext=>ext(mode,parent)),mode.__beforeBegin=null,[beginKeywords,compileIllegal,compileRelevance].forEach(ext=>ext(mode,parent)),mode.isCompiled=!0;let keywordPattern=null;return typeof mode.keywords=="object"&&mode.keywords.$pattern&&(mode.keywords=Object.assign({},mode.keywords),keywordPattern=mode.keywords.$pattern,delete mode. +keywords.$pattern),keywordPattern=keywordPattern||/\w+/,mode.keywords&&(mode.keywords=compileKeywords(mode.keywords,language2.case_insensitive)),cmode.keywordPatternRe=langRe(keywordPattern,!0),parent&&(mode.begin||(mode.begin=/\B|\b/),cmode.beginRe=langRe(cmode.begin),!mode.end&&!mode.endsWithParent&&(mode.end=/\B|\b/),mode.end&&(cmode.endRe=langRe(cmode.end)),cmode.terminatorEnd=source2(cmode.end)||"",mode.endsWithParent&&parent.terminatorEnd&&(cmode.terminatorEnd+=(mode.end?"|":"")+parent.terminatorEnd)), +mode.illegal&&(cmode.illegalRe=langRe(mode.illegal)),mode.contains||(mode.contains=[]),mode.contains=[].concat(...mode.contains.map(function(c2){return expandOrCloneMode(c2==="self"?mode:c2)})),mode.contains.forEach(function(c2){compileMode(c2,cmode)}),mode.starts&&compileMode(mode.starts,parent),cmode.matcher=buildModeRegex(cmode),cmode}if(language2.compilerExtensions||(language2.compilerExtensions=[]),language2.contains&&language2.contains.includes("self"))throw new Error("ERR: contains `self`\ + is not supported at the top-level of a language. See documentation.");return language2.classNameAliases=inherit$1(language2.classNameAliases||{}),compileMode(language2)}function dependencyOnParent(mode){return mode?mode.endsWithParent||dependencyOnParent(mode.starts):!1}function expandOrCloneMode(mode){return mode.variants&&!mode.cachedVariants&&(mode.cachedVariants=mode.variants.map(function(variant){return inherit$1(mode,{variants:null},variant)})),mode.cachedVariants?mode.cachedVariants:dependencyOnParent( +mode)?inherit$1(mode,{starts:mode.starts?inherit$1(mode.starts):null}):Object.isFrozen(mode)?inherit$1(mode):mode}var version2="11.11.1";class HTMLInjectionError extends Error{constructor(reason,html2){super(reason),this.name="HTMLInjectionError",this.html=html2}}const escape2=escapeHTML,inherit=inherit$1,NO_MATCH=Symbol("nomatch"),MAX_KEYWORD_HITS=7,HLJS=function(hljs){const languages=Object.create(null),aliases=Object.create(null),plugins=[];let SAFE_MODE=!0;const LANGUAGE_NOT_FOUND="Could not\ + find the language '{}', did you forget to load/include a language module?",PLAINTEXT_LANGUAGE={disableAutodetect:!0,name:"Plain text",contains:[]};let options={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:TokenTreeEmitter};function shouldNotHighlight(languageName){return options.noHighlightRe.test(languageName)}function blockLanguage(block2){let classes=block2. className+" ";classes+=block2.parentNode?block2.parentNode.className:"";const match=options.languageDetectRe.exec(classes);if(match){const language2=getLanguage(match[1]);return language2||(warn2(LANGUAGE_NOT_FOUND.replace("{}",match[1])),warn2("Falling back to no-highlight mode for this block.",block2)),language2?match[1]:"no-highlight"}return classes.split(/\s+/).find(_class=>shouldNotHighlight(_class)||getLanguage(_class))}function highlight2(codeOrLanguageName,optionsOrCode,ignoreIllegals){let code2="", languageName="";typeof optionsOrCode=="object"?(code2=codeOrLanguageName,ignoreIllegals=optionsOrCode.ignoreIllegals,languageName=optionsOrCode.language):(deprecated2("10.7.0","highlight(lang, code, ...args) has been deprecated."),deprecated2("10.7.0",`Please use highlight(code, options) instead. https://github.com/highlightjs/highlight.js/issues/2277`),languageName=codeOrLanguageName,code2=optionsOrCode),ignoreIllegals===void 0&&(ignoreIllegals=!0);const context={code:code2,language:languageName};fire("before:highlight",context);const result=context.result?context.result:_highlight(context.language,context.code,ignoreIllegals);return result.code=context.code,fire("after:highlight",result),result}function _highlight(languageName,codeToHighlight,ignoreIllegals,continuation){const keywordHits=Object. @@ -3360,93 +3447,89 @@ registerLanguage("verilog",requireVerilog()),hljs.registerLanguage("vhdl",requir libExports);function highlightCode(code2,language2){if(!code2)return"";try{const lang=language2.toLowerCase();return HighlightJS$1.getLanguage(lang)?HighlightJS$1.highlight(code2,{language:lang}).value:HighlightJS$1.highlightAuto(code2).value}catch{return code2.replace(AMPERSAND_REGEX,"&").replace(LT_REGEX,"<").replace(GT_REGEX,">")}}function detectIncompleteCodeBlock(markdown2){const fencePattern=new RegExp(FENCE_PATTERN.source,FENCE_PATTERN.flags),fences=[];let fenceMatch;for(;(fenceMatch= fencePattern.exec(markdown2))!==null;){const pos=fenceMatch[0].startsWith(NEWLINE)?fenceMatch.index+1:fenceMatch.index;fences.push(pos)}if(fences.length%2===0)return null;const openingIndex=fences[fences.length-1],langMatch=markdown2.slice(openingIndex+3).match(LANG_PATTERN),language2=langMatch?.[1]||DEFAULT_LANGUAGE,codeStartIndex=openingIndex+3+(langMatch?.[0]?.length??0),code2=markdown2.slice(codeStartIndex);return{language:language2,code:code2,openingIndex}}function setConfigValue(config2,key2,value){ key2 in config2&&(config2[key2]=value)}function getConfigValue(config2,key2){return config2[key2]}function configToParameterRecord(config2,keys2){const record2={};for(const key2 of keys2){const value=getConfigValue(config2,key2);value!==void 0&&(record2[key2]=value)}return record2}function buildProxiedUrl(targetUrl){const proxyPath=`${base}${CORS_PROXY_ENDPOINT}`,proxyUrl=new URL(proxyPath,window.location.origin);return proxyUrl.searchParams.set(CORS_PROXY_URL_PARAM,targetUrl),proxyUrl}function buildProxiedHeaders(headers){ -const proxiedHeaders={};for(const[key2,value]of Object.entries(headers))proxiedHeaders[`x-proxy-header-${key2}`]=value;return proxiedHeaders}function getProxiedUrlString(targetUrl){return buildProxiedUrl(targetUrl).href}function createMessageCountMap(exportedData){const countMap=new Map;for(const item of exportedData)countMap.set(item.conv.id,item.messages.length);return countMap}const bars=Array(12).fill(0);var root_1$10=from_html('<div class="sonner-loading-bar"></div>'),root$1E=from_html('<di\ -v><div class="sonner-spinner"></div></div>');function Loader($$anchor,$$props){push$1($$props,!0);var div=root$1E(),div_1=child(div);each(div_1,23,()=>bars,(_,i)=>`spinner-bar-${i}`,($$anchor2,_)=>{var div_2=root_1$10();append($$anchor2,div_2)}),reset(div_1),reset(div),template_effect($0=>{set_class(div,1,$0),set_attribute(div,"data-visible",$$props.visible)},[()=>clsx(["sonner-loading-wrapper",$$props.class].filter(Boolean).join(" "))]),append($$anchor,div),pop()}function cn(...classes){return classes. +const proxiedHeaders={};for(const[key2,value]of Object.entries(headers))proxiedHeaders[`x-proxy-header-${key2}`]=value;return proxiedHeaders}function getProxiedUrlString(targetUrl){return buildProxiedUrl(targetUrl).href}function createMessageCountMap(exportedData){const countMap=new Map;for(const item of exportedData)countMap.set(item.conv.id,item.messages.length);return countMap}const bars=Array(12).fill(0);var root_1$10=from_html('<div class="sonner-loading-bar"></div>'),root$1M=from_html('<di\ +v><div class="sonner-spinner"></div></div>');function Loader($$anchor,$$props){push$1($$props,!0);var div=root$1M(),div_1=child(div);each(div_1,23,()=>bars,(_,i)=>`spinner-bar-${i}`,($$anchor2,_)=>{var div_2=root_1$10();append($$anchor2,div_2)}),reset(div_1),reset(div),template_effect($0=>{set_class(div,1,$0),set_attribute(div,"data-visible",$$props.visible)},[()=>clsx(["sonner-loading-wrapper",$$props.class].filter(Boolean).join(" "))]),append($$anchor,div),pop()}function cn(...classes){return classes. filter(Boolean).join(" ")}const isBrowser$1=typeof document<"u",defaultWindow$2=typeof window<"u"?window:void 0;function getActiveElement$2(document2){let activeElement=document2.activeElement;for(;activeElement?.shadowRoot;){const node2=activeElement.shadowRoot.activeElement;if(node2===activeElement)break;activeElement=node2}return activeElement}let ActiveElement$2=class{#document;#subscribe;constructor(options={}){const{window:window2=defaultWindow$2,document:document2=window2?.document}=options; window2!==void 0&&(this.#document=document2,this.#subscribe=createSubscriber(update2=>{const cleanupFocusIn=on(window2,"focusin",update2),cleanupFocusOut=on(window2,"focusout",update2);return()=>{cleanupFocusIn(),cleanupFocusOut()}}))}get current(){return this.#subscribe?.(),this.#document?getActiveElement$2(this.#document):null}};new ActiveElement$2;class Context2{#name;#key;constructor(name){this.#name=name,this.#key=Symbol(name)}get key(){return this.#key}exists(){return hasContext(this.#key)}get(){ -const context=getContext(this.#key);if(context===void 0)throw new Error(`Context "${this.#name}" not found`);return context}getOr(fallback2){const context=getContext(this.#key);return context===void 0?fallback2:context}set(context){return setContext(this.#key,context)}}const sonnerContext=new Context2("<Toaster/>");let toastsCounter=0;class ToastState{#toasts=state$1(proxy([]));get toasts(){return get$4(this.#toasts)}set toasts(value){set$1(this.#toasts,value,!0)}#heights=state$1(proxy([]));get heights(){ -return get$4(this.#heights)}set heights(value){set$1(this.#heights,value,!0)}#findToastIdx=id2=>{const idx=this.toasts.findIndex(toast2=>toast2.id===id2);return idx===-1?null:idx};addToast=data=>{isBrowser$1&&this.toasts.unshift(data)};updateToast=({id:id2,data,type:type2,message})=>{const toastIdx=this.toasts.findIndex(toast2=>toast2.id===id2),toastToUpdate=this.toasts[toastIdx];this.toasts[toastIdx]={...toastToUpdate,...data,id:id2,title:message,type:type2,updated:!0}};create=data=>{const{message, +const context=getContext(this.#key);if(context===void 0)throw new Error(`Context "${this.#name}" not found`);return context}getOr(fallback2){const context=getContext(this.#key);return context===void 0?fallback2:context}set(context){return setContext(this.#key,context)}}const sonnerContext=new Context2("<Toaster/>");let toastsCounter=0;class ToastState{#toasts=state$1(proxy([]));get toasts(){return get$3(this.#toasts)}set toasts(value){set$1(this.#toasts,value,!0)}#heights=state$1(proxy([]));get heights(){ +return get$3(this.#heights)}set heights(value){set$1(this.#heights,value,!0)}#findToastIdx=id2=>{const idx=this.toasts.findIndex(toast2=>toast2.id===id2);return idx===-1?null:idx};addToast=data=>{isBrowser$1&&this.toasts.unshift(data)};updateToast=({id:id2,data,type:type2,message})=>{const toastIdx=this.toasts.findIndex(toast2=>toast2.id===id2),toastToUpdate=this.toasts[toastIdx];this.toasts[toastIdx]={...toastToUpdate,...data,id:id2,title:message,type:type2,updated:!0}};create=data=>{const{message, ...rest}=data,id2=typeof data?.id=="number"||data.id&&data.id?.length>0?data.id:toastsCounter++,dismissable=data.dismissable===void 0?!0:data.dismissable,type2=data.type===void 0?"default":data.type;return untrack$1(()=>{this.toasts.find(toast2=>toast2.id===id2)?this.updateToast({id:id2,data,type:type2,message,dismissable}):this.addToast({...rest,id:id2,title:message,dismissable,type:type2})}),id2};dismiss=id2=>(untrack$1(()=>{if(id2===void 0){this.toasts=this.toasts.map(toast2=>({...toast2,dismiss:!0})); return}const toastIdx=this.toasts.findIndex(toast2=>toast2.id===id2);this.toasts[toastIdx]&&(this.toasts[toastIdx]={...this.toasts[toastIdx],dismiss:!0})}),id2);remove=id2=>{if(id2===void 0){this.toasts=[];return}const toastIdx=this.#findToastIdx(id2);if(toastIdx!==null)return this.toasts.splice(toastIdx,1),id2};message=(message,data)=>this.create({...data,type:"default",message});error=(message,data)=>this.create({...data,type:"error",message});success=(message,data)=>this.create({...data,type:"\ success",message});info=(message,data)=>this.create({...data,type:"info",message});warning=(message,data)=>this.create({...data,type:"warning",message});loading=(message,data)=>this.create({...data,type:"loading",message});promise=(promise,data)=>{if(!data)return;let id2;data.loading!==void 0&&(id2=this.create({...data,promise,type:"loading",message:typeof data.loading=="string"?data.loading:data.loading()}));const p2=promise instanceof Promise?promise:promise();let shouldDismiss=id2!==void 0;return p2. then(response=>{if(typeof response=="object"&&response&&"ok"in response&&typeof response.ok=="boolean"&&!response.ok){shouldDismiss=!1;const message=constructPromiseErrorMessage(response);this.create({id:id2,type:"error",message})}else if(data.success!==void 0){shouldDismiss=!1;const message=typeof data.success=="function"?data.success(response):data.success;this.create({id:id2,type:"success",message})}}).catch(error2=>{if(data.error!==void 0){shouldDismiss=!1;const message=typeof data.error=="f\ unction"?data.error(error2):data.error;this.create({id:id2,type:"error",message})}}).finally(()=>{shouldDismiss&&(this.dismiss(id2),id2=void 0),data.finally?.()}),id2};custom=(component2,data)=>{const id2=data?.id||toastsCounter++;return this.create({component:component2,id:id2,...data}),id2};removeHeight=id2=>{this.heights=this.heights.filter(height=>height.toastId!==id2)};setHeight=data=>{const toastIdx=this.#findToastIdx(data.toastId);if(toastIdx===null){this.heights.push(data);return}this.heights[toastIdx]= -data};reset=()=>{this.toasts=[],this.heights=[]}}function constructPromiseErrorMessage(response){return response&&typeof response=="object"&&"status"in response?`HTTP error! Status: ${response.status}`:`Error! ${response}`}const toastState=new ToastState;function toastFunction(message,data){return toastState.create({message,...data})}class SonnerState{#activeToasts=user_derived(()=>toastState.toasts.filter(toast2=>!toast2.dismiss));get toasts(){return get$4(this.#activeToasts)}}const basicToast=toastFunction, +data};reset=()=>{this.toasts=[],this.heights=[]}}function constructPromiseErrorMessage(response){return response&&typeof response=="object"&&"status"in response?`HTTP error! Status: ${response.status}`:`Error! ${response}`}const toastState=new ToastState;function toastFunction(message,data){return toastState.create({message,...data})}class SonnerState{#activeToasts=user_derived(()=>toastState.toasts.filter(toast2=>!toast2.dismiss));get toasts(){return get$3(this.#activeToasts)}}const basicToast=toastFunction, toast=Object.assign(basicToast,{success:toastState.success,info:toastState.info,warning:toastState.warning,error:toastState.error,custom:toastState.custom,message:toastState.message,promise:toastState.promise,dismiss:toastState.dismiss,loading:toastState.loading,getActiveToasts:()=>toastState.toasts.filter(toast2=>!toast2.dismiss)});function isAction(action2){return action2.label!==void 0}function useDocumentHidden(){let current2=state$1(proxy(typeof document<"u"?document.hidden:!1));return user_effect( -()=>on(document,"visibilitychange",()=>{set$1(current2,document.hidden,!0)})),{get current(){return get$4(current2)}}}const TOAST_LIFETIME$1=4e3,GAP$1=14,SWIPE_THRESHOLD=45,TIME_BEFORE_UNMOUNT=200,SCALE_MULTIPLIER=.05,DEFAULT_TOAST_CLASSES={toast:"",title:"",description:"",loader:"",closeButton:"",cancelButton:"",actionButton:"",action:"",warning:"",error:"",success:"",default:"",info:"",loading:""};function getDefaultSwipeDirections(position2){const[y,x]=position2.split("-"),directions=[];return y&& -directions.push(y),x&&directions.push(x),directions}function getDampening(delta){return 1/(1.5+Math.abs(delta)/20)}var root_2$17=from_html("<div><!></div>"),root_4$y=from_html('<button data-close-button=""><!></button>'),root_7$s=from_html('<div data-icon=""><!> <!></div>'),root_24$4=from_html('<div data-description=""><!></div>'),root_30$3=from_html('<button data-button="" data-cancel=""> </button>'),root_34$1=from_html('<button data-button=""> </button>'),root_6$A=from_html('<!> <div data-cont\ -ent=""><div data-title=""><!></div> <!></div> <!> <!>',1),root$1D=from_html('<li data-sonner-toast=""><!> <!></li>');function Toast($$anchor,$$props){push$1($$props,!0);const LoadingIcon=$$anchor2=>{var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor3=>{var div=root_2$17(),node_1=child(div);snippet(node_1,()=>$$props.loadingIcon),reset(div),template_effect($0=>{set_class(div,1,$0),set_attribute(div,"data-visible",get$4(toastType)==="loading")},[()=>clsx(cn(get$4(classes)?. -loader,$$props.toast?.classes?.loader,"sonner-loader"))]),append($$anchor3,div)},alternate=$$anchor3=>{{let $0=user_derived(()=>cn(get$4(classes)?.loader,$$props.toast.classes?.loader)),$1=user_derived(()=>get$4(toastType)==="loading");Loader($$anchor3,{get class(){return get$4($0)},get visible(){return get$4($1)}})}};if_block(node2,$$render=>{$$props.loadingIcon?$$render(consequent):$$render(alternate,!1)})}append($$anchor2,fragment)};let cancelButtonStyle=prop($$props,"cancelButtonStyle",3,""), +()=>on(document,"visibilitychange",()=>{set$1(current2,document.hidden,!0)})),{get current(){return get$3(current2)}}}const TOAST_LIFETIME$1=4e3,GAP$1=14,SWIPE_THRESHOLD=45,TIME_BEFORE_UNMOUNT=200,SCALE_MULTIPLIER=.05,DEFAULT_TOAST_CLASSES={toast:"",title:"",description:"",loader:"",closeButton:"",cancelButton:"",actionButton:"",action:"",warning:"",error:"",success:"",default:"",info:"",loading:""};function getDefaultSwipeDirections(position2){const[y,x]=position2.split("-"),directions=[];return y&& +directions.push(y),x&&directions.push(x),directions}function getDampening(delta){return 1/(1.5+Math.abs(delta)/20)}var root_2$1g=from_html("<div><!></div>"),root_4$A=from_html('<button data-close-button=""><!></button>'),root_7$v=from_html('<div data-icon=""><!> <!></div>'),root_20$7=from_html('<div data-description=""><!></div>'),root_25$4=from_html('<button data-button="" data-cancel=""> </button>'),root_28$1=from_html('<button data-button=""> </button>'),root_6$z=from_html('<!> <div data-cont\ +ent=""><div data-title=""><!></div> <!></div> <!> <!>',1),root$1L=from_html('<li data-sonner-toast=""><!> <!></li>');function Toast($$anchor,$$props){push$1($$props,!0);const LoadingIcon=$$anchor2=>{var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor3=>{var div=root_2$1g(),node_1=child(div);snippet(node_1,()=>$$props.loadingIcon),reset(div),template_effect($0=>{set_class(div,1,$0),set_attribute(div,"data-visible",get$3(toastType)==="loading")},[()=>clsx(cn(get$3(classes)?. +loader,$$props.toast?.classes?.loader,"sonner-loader"))]),append($$anchor3,div)},alternate=$$anchor3=>{{let $0=user_derived(()=>cn(get$3(classes)?.loader,$$props.toast.classes?.loader)),$1=user_derived(()=>get$3(toastType)==="loading");Loader($$anchor3,{get class(){return get$3($0)},get visible(){return get$3($1)}})}};if_block(node2,$$render=>{$$props.loadingIcon?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment)};let cancelButtonStyle=prop($$props,"cancelButtonStyle",3,""), actionButtonStyle=prop($$props,"actionButtonStyle",3,""),descriptionClass=prop($$props,"descriptionClass",3,""),unstyled=prop($$props,"unstyled",3,!1),defaultRichColors=prop($$props,"defaultRichColors",3,!1);const defaultClasses={...DEFAULT_TOAST_CLASSES};let mounted=state$1(!1),removed=state$1(!1),swiping=state$1(!1),swipeOut=state$1(!1),isSwiped=state$1(!1),offsetBeforeRemove=state$1(0),initialHeight=state$1(0),remainingTime=$$props.toast.duration||$$props.duration||TOAST_LIFETIME$1,toastRef=state$1( void 0),swipeDirection=state$1(null),swipeOutDirection=state$1(null);const isFront=user_derived(()=>$$props.index===0),isVisible=user_derived(()=>$$props.index+1<=$$props.visibleToasts),toastType=user_derived(()=>$$props.toast.type),dismissable=user_derived(()=>$$props.toast.dismissable!==!1),toastClass=user_derived(()=>$$props.toast.class||""),toastDescriptionClass=user_derived(()=>$$props.toast.descriptionClass||""),heightIndex=user_derived(()=>toastState.heights.findIndex(height=>height.toastId=== -$$props.toast.id)||0),closeButton=user_derived(()=>$$props.toast.closeButton??$$props.closeButton),duration2=user_derived(()=>$$props.toast.duration??$$props.duration??TOAST_LIFETIME$1);let pointerStart=null;const coords=user_derived(()=>$$props.position.split("-")),toastsHeightBefore=user_derived(()=>toastState.heights.reduce((prev2,curr,reducerIndex)=>reducerIndex>=get$4(heightIndex)?prev2:prev2+curr.height,0)),isDocumentHidden=useDocumentHidden(),invert=user_derived(()=>$$props.toast.invert|| -$$props.invert),disabled=user_derived(()=>get$4(toastType)==="loading"),classes=user_derived(()=>({...defaultClasses,...$$props.classes})),toastTitle=user_derived(()=>$$props.toast.title),toastDescription=user_derived(()=>$$props.toast.description);let closeTimerStartTime=state$1(0),lastCloseTimerStartTime=state$1(0);const offset2=user_derived(()=>Math.round(get$4(heightIndex)*GAP$1+get$4(toastsHeightBefore)));user_effect(()=>{get$4(toastTitle),get$4(toastDescription);let scale2;$$props.expanded|| -$$props.expandByDefault?scale2=1:scale2=1-$$props.index*SCALE_MULTIPLIER;const toastEl=untrack$1(()=>get$4(toastRef));if(toastEl===void 0)return;toastEl.style.setProperty("height","auto");const offsetHeight=toastEl.offsetHeight,rectHeight=toastEl.getBoundingClientRect().height,scaledRectHeight=Math.round(rectHeight/scale2+Number.EPSILON&100)/100;toastEl.style.removeProperty("height");let finalHeight;Math.abs(scaledRectHeight-offsetHeight)<1?finalHeight=scaledRectHeight:finalHeight=offsetHeight,set$1( -initialHeight,finalHeight,!0),untrack$1(()=>{toastState.setHeight({toastId:$$props.toast.id,height:finalHeight})})});function deleteToast(){set$1(removed,!0),set$1(offsetBeforeRemove,get$4(offset2),!0),toastState.removeHeight($$props.toast.id),setTimeout(()=>{toastState.remove($$props.toast.id)},TIME_BEFORE_UNMOUNT)}let timeoutId;const isPromiseLoadingOrInfiniteDuration=user_derived(()=>$$props.toast.promise&&get$4(toastType)==="loading"||$$props.toast.duration===Number.POSITIVE_INFINITY);function startTimer(){ -set$1(closeTimerStartTime,new Date().getTime(),!0),timeoutId=setTimeout(()=>{$$props.toast.onAutoClose?.($$props.toast),deleteToast()},remainingTime)}function pauseTimer(){if(get$4(lastCloseTimerStartTime)<get$4(closeTimerStartTime)){const elapsedTime=new Date().getTime()-get$4(closeTimerStartTime);remainingTime=remainingTime-elapsedTime}set$1(lastCloseTimerStartTime,new Date().getTime(),!0)}user_effect(()=>{$$props.toast.updated&&(clearTimeout(timeoutId),remainingTime=get$4(duration2),startTimer())}), -user_effect(()=>(get$4(isPromiseLoadingOrInfiniteDuration)||($$props.expanded||$$props.interacting||isDocumentHidden.current?pauseTimer():startTimer()),()=>clearTimeout(timeoutId))),onMount$1(()=>{set$1(mounted,!0);const height=get$4(toastRef)?.getBoundingClientRect().height;return set$1(initialHeight,height,!0),toastState.setHeight({toastId:$$props.toast.id,height}),()=>{toastState.removeHeight($$props.toast.id)}}),user_effect(()=>{$$props.toast.delete&&untrack$1(()=>{deleteToast(),$$props.toast. -onDismiss?.($$props.toast)})});const handlePointerDown=event2=>{if(get$4(disabled))return;set$1(offsetBeforeRemove,get$4(offset2),!0);const target2=event2.target;target2.setPointerCapture(event2.pointerId),target2.tagName!=="BUTTON"&&(set$1(swiping,!0),pointerStart={x:event2.clientX,y:event2.clientY})},handlePointerUp=()=>{if(get$4(swipeOut)||!get$4(dismissable))return;pointerStart=null;const swipeAmountX=Number(get$4(toastRef)?.style.getPropertyValue("--swipe-amount-x").replace("px","")||0),swipeAmountY=Number( -get$4(toastRef)?.style.getPropertyValue("--swipe-amount-y").replace("px","")||0),timeTaken=new Date().getTime()-0,swipeAmount=get$4(swipeDirection)==="x"?swipeAmountX:swipeAmountY,velocity=Math.abs(swipeAmount)/timeTaken;if(Math.abs(swipeAmount)>=SWIPE_THRESHOLD||velocity>.11){set$1(offsetBeforeRemove,get$4(offset2),!0),$$props.toast.onDismiss?.($$props.toast),get$4(swipeDirection)==="x"?set$1(swipeOutDirection,swipeAmountX>0?"right":"left",!0):set$1(swipeOutDirection,swipeAmountY>0?"down":"up", -!0),deleteToast(),set$1(swipeOut,!0);return}else get$4(toastRef)?.style.setProperty("--swipe-amount-x","0px"),get$4(toastRef)?.style.setProperty("--swipe-amount-y","0px");set$1(isSwiped,!1),set$1(swiping,!1),set$1(swipeDirection,null)},handlePointerMove=event2=>{if(!pointerStart||!get$4(dismissable)||(window.getSelection()?.toString().length??-1)>0)return;const yDelta=event2.clientY-pointerStart.y,xDelta=event2.clientX-pointerStart.x,swipeDirections=$$props.swipeDirections??getDefaultSwipeDirections( -$$props.position);!get$4(swipeDirection)&&(Math.abs(xDelta)>1||Math.abs(yDelta)>1)&&set$1(swipeDirection,Math.abs(xDelta)>Math.abs(yDelta)?"x":"y",!0);let swipeAmount={x:0,y:0};if(get$4(swipeDirection)==="y"){if(swipeDirections.includes("top")||swipeDirections.includes("bottom"))if(swipeDirections.includes("top")&&yDelta<0||swipeDirections.includes("bottom")&&yDelta>0)swipeAmount.y=yDelta;else{const dampenedDelta=yDelta*getDampening(yDelta);swipeAmount.y=Math.abs(dampenedDelta)<Math.abs(yDelta)? -dampenedDelta:yDelta}}else if(get$4(swipeDirection)==="x"&&(swipeDirections.includes("left")||swipeDirections.includes("right")))if(swipeDirections.includes("left")&&xDelta<0||swipeDirections.includes("right")&&xDelta>0)swipeAmount.x=xDelta;else{const dampenedDelta=xDelta*getDampening(xDelta);swipeAmount.x=Math.abs(dampenedDelta)<Math.abs(xDelta)?dampenedDelta:xDelta}(Math.abs(swipeAmount.x)>0||Math.abs(swipeAmount.y)>0)&&set$1(isSwiped,!0),get$4(toastRef)?.style.setProperty("--swipe-amount-x",`${swipeAmount. -x}px`),get$4(toastRef)?.style.setProperty("--swipe-amount-y",`${swipeAmount.y}px`)},handleDragEnd=()=>{set$1(swiping,!1),set$1(swipeDirection,null),pointerStart=null},icon=user_derived(()=>$$props.toast.icon?$$props.toast.icon:get$4(toastType)==="success"?$$props.successIcon:get$4(toastType)==="error"?$$props.errorIcon:get$4(toastType)==="warning"?$$props.warningIcon:get$4(toastType)==="info"?$$props.infoIcon:get$4(toastType)==="loading"?$$props.loadingIcon:null);var li2=root$1D();set_attribute( -li2,"tabindex",0);let styles2;li2.__pointermove=handlePointerMove,li2.__pointerup=handlePointerUp,li2.__pointerdown=handlePointerDown;var node_2=child(li2);{var consequent_1=$$anchor2=>{var button=root_4$y();button.__click=()=>{get$4(disabled)||!get$4(dismissable)||(deleteToast(),$$props.toast.onDismiss?.($$props.toast))};var node_3=child(button);snippet(node_3,()=>$$props.closeIcon??noop$3),reset(button),template_effect($0=>{set_attribute(button,"aria-label",$$props.closeButtonAriaLabel),set_attribute( -button,"data-disabled",get$4(disabled)),set_class(button,1,$0)},[()=>clsx(cn(get$4(classes)?.closeButton,$$props.toast?.classes?.closeButton))]),append($$anchor2,button)};if_block(node_2,$$render=>{get$4(closeButton)&&!$$props.toast.component&&get$4(toastType)!=="loading"&&$$props.closeIcon!==null&&$$render(consequent_1)})}var node_4=sibling(node_2,2);{var consequent_2=$$anchor2=>{const Component=user_derived(()=>$$props.toast.component);var fragment_2=comment$2(),node_5=first_child(fragment_2); -component(node_5,()=>get$4(Component),($$anchor3,Component_1)=>{Component_1($$anchor3,spread_props(()=>$$props.toast.componentProps,{closeToast:deleteToast}))}),append($$anchor2,fragment_2)},alternate_10=$$anchor2=>{var fragment_3=root_6$A(),node_6=first_child(fragment_3);{var consequent_11=$$anchor3=>{var div_1=root_7$s(),node_7=child(div_1);{var consequent_4=$$anchor4=>{var fragment_4=comment$2(),node_8=first_child(fragment_4);{var consequent_3=$$anchor5=>{var fragment_5=comment$2(),node_9=first_child( -fragment_5);component(node_9,()=>$$props.toast.icon,($$anchor6,toast_icon)=>{toast_icon($$anchor6,{})}),append($$anchor5,fragment_5)},alternate_1=$$anchor5=>{LoadingIcon($$anchor5)};if_block(node_8,$$render=>{$$props.toast.icon?$$render(consequent_3):$$render(alternate_1,!1)})}append($$anchor4,fragment_4)};if_block(node_7,$$render=>{($$props.toast.promise||get$4(toastType)==="loading")&&$$render(consequent_4)})}var node_10=sibling(node_7,2);{var consequent_10=$$anchor4=>{var fragment_7=comment$2(), -node_11=first_child(fragment_7);{var consequent_5=$$anchor5=>{var fragment_8=comment$2(),node_12=first_child(fragment_8);component(node_12,()=>$$props.toast.icon,($$anchor6,toast_icon_1)=>{toast_icon_1($$anchor6,{})}),append($$anchor5,fragment_8)},alternate_5=$$anchor5=>{var fragment_9=comment$2(),node_13=first_child(fragment_9);{var consequent_6=$$anchor6=>{var fragment_10=comment$2(),node_14=first_child(fragment_10);snippet(node_14,()=>$$props.successIcon??noop$3),append($$anchor6,fragment_10)}, -alternate_4=$$anchor6=>{var fragment_11=comment$2(),node_15=first_child(fragment_11);{var consequent_7=$$anchor7=>{var fragment_12=comment$2(),node_16=first_child(fragment_12);snippet(node_16,()=>$$props.errorIcon??noop$3),append($$anchor7,fragment_12)},alternate_3=$$anchor7=>{var fragment_13=comment$2(),node_17=first_child(fragment_13);{var consequent_8=$$anchor8=>{var fragment_14=comment$2(),node_18=first_child(fragment_14);snippet(node_18,()=>$$props.warningIcon??noop$3),append($$anchor8,fragment_14)}, -alternate_2=$$anchor8=>{var fragment_15=comment$2(),node_19=first_child(fragment_15);{var consequent_9=$$anchor9=>{var fragment_16=comment$2(),node_20=first_child(fragment_16);snippet(node_20,()=>$$props.infoIcon??noop$3),append($$anchor9,fragment_16)};if_block(node_19,$$render=>{get$4(toastType)==="info"&&$$render(consequent_9)},!0)}append($$anchor8,fragment_15)};if_block(node_17,$$render=>{get$4(toastType)==="warning"?$$render(consequent_8):$$render(alternate_2,!1)},!0)}append($$anchor7,fragment_13)}; -if_block(node_15,$$render=>{get$4(toastType)==="error"?$$render(consequent_7):$$render(alternate_3,!1)},!0)}append($$anchor6,fragment_11)};if_block(node_13,$$render=>{get$4(toastType)==="success"?$$render(consequent_6):$$render(alternate_4,!1)},!0)}append($$anchor5,fragment_9)};if_block(node_11,$$render=>{$$props.toast.icon?$$render(consequent_5):$$render(alternate_5,!1)})}append($$anchor4,fragment_7)};if_block(node_10,$$render=>{$$props.toast.type!=="loading"&&$$render(consequent_10)})}reset(div_1), -template_effect($0=>set_class(div_1,1,$0),[()=>clsx(cn(get$4(classes)?.icon,$$props.toast?.classes?.icon))]),append($$anchor3,div_1)};if_block(node_6,$$render=>{(get$4(toastType)||$$props.toast.icon||$$props.toast.promise)&&$$props.toast.icon!==null&&(get$4(icon)!==null||$$props.toast.icon)&&$$render(consequent_11)})}var div_2=sibling(node_6,2),div_3=child(div_2),node_21=child(div_3);{var consequent_13=$$anchor3=>{var fragment_17=comment$2(),node_22=first_child(fragment_17);{var consequent_12=$$anchor4=>{ -const Title=user_derived(()=>$$props.toast.title);var fragment_18=comment$2(),node_23=first_child(fragment_18);component(node_23,()=>get$4(Title),($$anchor5,Title_1)=>{Title_1($$anchor5,spread_props(()=>$$props.toast.componentProps))}),append($$anchor4,fragment_18)},alternate_6=$$anchor4=>{var text2=text$8();template_effect(()=>set_text(text2,$$props.toast.title)),append($$anchor4,text2)};if_block(node_22,$$render=>{typeof $$props.toast.title!="string"?$$render(consequent_12):$$render(alternate_6, -!1)})}append($$anchor3,fragment_17)};if_block(node_21,$$render=>{$$props.toast.title&&$$render(consequent_13)})}reset(div_3);var node_24=sibling(div_3,2);{var consequent_15=$$anchor3=>{var div_4=root_24$4(),node_25=child(div_4);{var consequent_14=$$anchor4=>{const Description=user_derived(()=>$$props.toast.description);var fragment_20=comment$2(),node_26=first_child(fragment_20);component(node_26,()=>get$4(Description),($$anchor5,Description_1)=>{Description_1($$anchor5,spread_props(()=>$$props. -toast.componentProps))}),append($$anchor4,fragment_20)},alternate_7=$$anchor4=>{var text_1=text$8();template_effect(()=>set_text(text_1,$$props.toast.description)),append($$anchor4,text_1)};if_block(node_25,$$render=>{typeof $$props.toast.description!="string"?$$render(consequent_14):$$render(alternate_7,!1)})}reset(div_4),template_effect($0=>set_class(div_4,1,$0),[()=>clsx(cn(descriptionClass(),get$4(toastDescriptionClass),get$4(classes)?.description,$$props.toast.classes?.description))]),append( -$$anchor3,div_4)};if_block(node_24,$$render=>{$$props.toast.description&&$$render(consequent_15)})}reset(div_2);var node_27=sibling(div_2,2);{var consequent_18=$$anchor3=>{var fragment_22=comment$2(),node_28=first_child(fragment_22);{var consequent_16=$$anchor4=>{var fragment_23=comment$2(),node_29=first_child(fragment_23);component(node_29,()=>$$props.toast.cancel,($$anchor5,toast_cancel)=>{toast_cancel($$anchor5,{})}),append($$anchor4,fragment_23)},alternate_8=$$anchor4=>{var fragment_24=comment$2(), -node_30=first_child(fragment_24);{var consequent_17=$$anchor5=>{var button_1=root_30$3();button_1.__click=event2=>{isAction($$props.toast.cancel)&&get$4(dismissable)&&($$props.toast.cancel?.onClick?.(event2),deleteToast())};var text_2=child(button_1,!0);reset(button_1),template_effect($0=>{set_style(button_1,$$props.toast.cancelButtonStyle??cancelButtonStyle()),set_class(button_1,1,$0),set_text(text_2,$$props.toast.cancel.label)},[()=>clsx(cn(get$4(classes)?.cancelButton,$$props.toast?.classes?. -cancelButton))]),append($$anchor5,button_1)};if_block(node_30,$$render=>{isAction($$props.toast.cancel)&&$$render(consequent_17)},!0)}append($$anchor4,fragment_24)};if_block(node_28,$$render=>{typeof $$props.toast.cancel=="function"?$$render(consequent_16):$$render(alternate_8,!1)})}append($$anchor3,fragment_22)};if_block(node_27,$$render=>{$$props.toast.cancel&&$$render(consequent_18)})}var node_31=sibling(node_27,2);{var consequent_21=$$anchor3=>{var fragment_25=comment$2(),node_32=first_child( -fragment_25);{var consequent_19=$$anchor4=>{var fragment_26=comment$2(),node_33=first_child(fragment_26);component(node_33,()=>$$props.toast.action,($$anchor5,toast_action)=>{toast_action($$anchor5,{})}),append($$anchor4,fragment_26)},alternate_9=$$anchor4=>{var fragment_27=comment$2(),node_34=first_child(fragment_27);{var consequent_20=$$anchor5=>{var button_2=root_34$1();button_2.__click=event2=>{isAction($$props.toast.action)&&($$props.toast.action?.onClick(event2),!event2.defaultPrevented&&deleteToast())}; -var text_3=child(button_2,!0);reset(button_2),template_effect($0=>{set_style(button_2,$$props.toast.actionButtonStyle??actionButtonStyle()),set_class(button_2,1,$0),set_text(text_3,$$props.toast.action.label)},[()=>clsx(cn(get$4(classes)?.actionButton,$$props.toast?.classes?.actionButton))]),append($$anchor5,button_2)};if_block(node_34,$$render=>{isAction($$props.toast.action)&&$$render(consequent_20)},!0)}append($$anchor4,fragment_27)};if_block(node_32,$$render=>{typeof $$props.toast.action=="f\ -unction"?$$render(consequent_19):$$render(alternate_9,!1)})}append($$anchor3,fragment_25)};if_block(node_31,$$render=>{$$props.toast.action&&$$render(consequent_21)})}template_effect($0=>set_class(div_3,1,$0),[()=>clsx(cn(get$4(classes)?.title,$$props.toast?.classes?.title))]),append($$anchor2,fragment_3)};if_block(node_4,$$render=>{$$props.toast.component?$$render(consequent_2):$$render(alternate_10,!1)})}reset(li2),bind_this(li2,$$value=>set$1(toastRef,$$value),()=>get$4(toastRef)),template_effect( -($0,$1,$2)=>{set_class(li2,1,$0),set_attribute(li2,"data-rich-colors",$$props.toast.richColors??defaultRichColors()),set_attribute(li2,"data-styled",!($$props.toast.component||$$props.toast.unstyled||unstyled())),set_attribute(li2,"data-mounted",get$4(mounted)),set_attribute(li2,"data-promise",$1),set_attribute(li2,"data-swiped",get$4(isSwiped)),set_attribute(li2,"data-removed",get$4(removed)),set_attribute(li2,"data-visible",get$4(isVisible)),set_attribute(li2,"data-y-position",get$4(coords)[0]), -set_attribute(li2,"data-x-position",get$4(coords)[1]),set_attribute(li2,"data-index",$$props.index),set_attribute(li2,"data-front",get$4(isFront)),set_attribute(li2,"data-swiping",get$4(swiping)),set_attribute(li2,"data-dismissable",get$4(dismissable)),set_attribute(li2,"data-type",get$4(toastType)),set_attribute(li2,"data-invert",get$4(invert)),set_attribute(li2,"data-swipe-out",get$4(swipeOut)),set_attribute(li2,"data-swipe-direction",get$4(swipeOutDirection)),set_attribute(li2,"data-expanded", -$2),styles2=set_style(li2,`${$$props.style} ${$$props.toast.style}`,styles2,{"--index":$$props.index,"--toasts-before":$$props.index,"--z-index":toastState.toasts.length-$$props.index,"--offset":`${get$4(removed)?get$4(offsetBeforeRemove):get$4(offset2)}px`,"--initial-height":$$props.expandByDefault?"auto":`${get$4(initialHeight)}px`})},[()=>clsx(cn($$props.class,get$4(toastClass),get$4(classes)?.toast,$$props.toast?.classes?.toast,get$4(classes)?.[get$4(toastType)],$$props.toast?.classes?.[get$4( -toastType)])),()=>!!$$props.toast.promise,()=>!!($$props.expanded||$$props.expandByDefault&&get$4(mounted))]),event("dragend",li2,handleDragEnd),append($$anchor,li2),pop()}delegate(["pointermove","pointerup","pointerdown","click"]);var root$1C=from_svg('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" height="20" width="20" data-sonner-success-icon=""><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-\ -1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" clip-rule="evenodd"></path></svg>');function SuccessIcon($$anchor){var svg2=root$1C();append($$anchor,svg2)}var root$1B=from_svg('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" height="20" width="20" data-sonner-error-icon=""><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z" clip-rule="ev\ -enodd"></path></svg>');function ErrorIcon($$anchor){var svg2=root$1B();append($$anchor,svg2)}var root$1A=from_svg('<svg viewBox="0 0 64 64" fill="currentColor" height="20" width="20" data-sonner-warning-icon="" xmlns="http://www.w3.org/2000/svg"><path d="M32.427,7.987c2.183,0.124 4,1.165 5.096,3.281l17.936,36.208c1.739,3.66 -0.954,8.585 -5.373,8.656l-36.119,0c-4.022,-0.064 -7.322,-4.631 -5.352,-8.696l18.271,-36.207c0.342,-0.65 0.498,-0.838 0.793,-1.179c1.186,-1.375 2.483,-2.111 4.748,-2.063Zm-0.\ -295,3.997c-0.687,0.034 -1.316,0.419 -1.659,1.017c-6.312,11.979 -12.397,24.081 -18.301,36.267c-0.546,1.225 0.391,2.797 1.762,2.863c12.06,0.195 24.125,0.195 36.185,0c1.325,-0.064 2.321,-1.584 1.769,-2.85c-5.793,-12.184 -11.765,-24.286 -17.966,-36.267c-0.366,-0.651 -0.903,-1.042 -1.79,-1.03Z"></path><path d="M33.631,40.581l-3.348,0l-0.368,-16.449l4.1,0l-0.384,16.449Zm-3.828,5.03c0,-0.609 0.197,-1.113 0.592,-1.514c0.396,-0.4 0.935,-0.601 1.618,-0.601c0.684,0 1.223,0.201 1.618,0.601c0.395,0.401 0.593\ -,0.905 0.593,1.514c0,0.587 -0.193,1.078 -0.577,1.473c-0.385,0.395 -0.929,0.593 -1.634,0.593c-0.705,0 -1.249,-0.198 -1.634,-0.593c-0.384,-0.395 -0.576,-0.886 -0.576,-1.473Z"></path></svg>');function WarningIcon($$anchor){var svg2=root$1A();append($$anchor,svg2)}var root$1z=from_svg('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" height="20" width="20" data-sonner-info-icon=""><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 0\ -12 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z" clip-rule="evenodd"></path></svg>');function InfoIcon($$anchor){var svg2=root$1z();append($$anchor,svg2)}var root$1y=from_svg('<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" data-sonner-close\ --icon=""><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>');function CloseIcon($$anchor){var svg2=root$1y();append($$anchor,svg2)}const VISIBLE_TOASTS_AMOUNT=3,VIEWPORT_OFFSET="24px",MOBILE_VIEWPORT_OFFSET="16px",TOAST_LIFETIME=4e3,TOAST_WIDTH=356,GAP=14,DARK="dark",LIGHT="light";function getOffsetObject(defaultOffset,mobileOffset){const styles2={};return[defaultOffset,mobileOffset].forEach((offset2,index2)=>{const isMobile=index2===1,prefix=isMobile?"\ ---mobile-offset":"--offset",defaultValue=isMobile?MOBILE_VIEWPORT_OFFSET:VIEWPORT_OFFSET;function assignAll(offset3){["top","right","bottom","left"].forEach(key2=>{styles2[`${prefix}-${key2}`]=typeof offset3=="number"?`${offset3}px`:offset3})}typeof offset2=="number"||typeof offset2=="string"?assignAll(offset2):typeof offset2=="object"?["top","right","bottom","left"].forEach(key2=>{const value=offset2[key2];value===void 0?styles2[`${prefix}-${key2}`]=defaultValue:styles2[`${prefix}-${key2}`]=typeof value== -"number"?`${value}px`:value}):assignAll(defaultValue)}),styles2}var root_2$16=from_html("<ol></ol>"),root$1x=from_html('<section aria-live="polite" aria-relevant="additions text" aria-atomic="false" class="svelte-nbs0zk"><!></section>');function Toaster($$anchor,$$props){push$1($$props,!0);function getInitialTheme(t){return t!=="system"?t:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?DARK:LIGHT}let invert=prop($$props,"invert",3,!1),position2=prop( -$$props,"position",3,"bottom-right"),hotkey=prop($$props,"hotkey",19,()=>["altKey","KeyT"]),expand=prop($$props,"expand",3,!1),closeButton=prop($$props,"closeButton",3,!1),offset2=prop($$props,"offset",3,VIEWPORT_OFFSET),mobileOffset=prop($$props,"mobileOffset",3,MOBILE_VIEWPORT_OFFSET),theme=prop($$props,"theme",3,"light"),richColors=prop($$props,"richColors",3,!1),duration2=prop($$props,"duration",3,TOAST_LIFETIME),visibleToasts=prop($$props,"visibleToasts",3,VISIBLE_TOASTS_AMOUNT),toastOptions=prop( -$$props,"toastOptions",19,()=>({})),dir=prop($$props,"dir",7,"auto"),gap=prop($$props,"gap",3,GAP),containerAriaLabel=prop($$props,"containerAriaLabel",3,"Notifications"),closeButtonAriaLabel=prop($$props,"closeButtonAriaLabel",3,"Close toast"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","invert","position","hotkey","expand","closeButton","offset","mobileOffset","theme","richColors","duration","visibleToasts","toastOptions","dir","gap","loadingIcon","successIcon","errorIcon","w\ -arningIcon","closeIcon","infoIcon","containerAriaLabel","class","closeButtonAriaLabel","onblur","onfocus","onmouseenter","onmousemove","onmouseleave","ondragend","onpointerdown","onpointerup"]);function getDocumentDirection(){if(dir()!=="auto")return dir();if(typeof window>"u"||typeof document>"u")return"ltr";const dirAttribute=document.documentElement.getAttribute("dir");return dirAttribute==="auto"||!dirAttribute?(untrack$1(()=>dir(window.getComputedStyle(document.documentElement).direction??"\ -ltr")),dir()):(untrack$1(()=>dir(dirAttribute)),dirAttribute)}const possiblePositions=user_derived(()=>Array.from(new Set([position2(),...toastState.toasts.filter(toast2=>toast2.position).map(toast2=>toast2.position)].filter(Boolean))));let expanded=state$1(!1),interacting=state$1(!1),actualTheme=state$1(proxy(getInitialTheme(theme()))),listRef=state$1(void 0),lastFocusedElementRef=state$1(null),isFocusWithin=state$1(!1);const hotkeyLabel=user_derived(()=>hotkey().join("+").replace(/Key/g,"").replace( -/Digit/g,""));user_effect(()=>{toastState.toasts.length<=1&&set$1(expanded,!1)}),user_effect(()=>{const toastsToDismiss=toastState.toasts.filter(toast2=>toast2.dismiss&&!toast2.delete);if(toastsToDismiss.length>0){const updatedToasts=toastState.toasts.map(toast2=>toastsToDismiss.find(dismissToast=>dismissToast.id===toast2.id)?{...toast2,delete:!0}:toast2);toastState.toasts=updatedToasts}}),user_effect(()=>()=>{get$4(listRef)&&get$4(lastFocusedElementRef)&&(get$4(lastFocusedElementRef).focus({preventScroll:!0}), -set$1(lastFocusedElementRef,null),set$1(isFocusWithin,!1))}),onMount$1(()=>(toastState.reset(),on(document,"keydown",event2=>{hotkey().every(key2=>event2[key2]||event2.code===key2)&&(set$1(expanded,!0),get$4(listRef)?.focus()),event2.code==="Escape"&&(document.activeElement===get$4(listRef)||get$4(listRef)?.contains(document.activeElement))&&set$1(expanded,!1)}))),user_effect(()=>{if(theme()!=="system"&&set$1(actualTheme,theme()),typeof window<"u"){theme()==="system"&&(window.matchMedia&&window. -matchMedia("(prefers-color-scheme: dark)").matches?set$1(actualTheme,DARK):set$1(actualTheme,LIGHT));const mediaQueryList=window.matchMedia("(prefers-color-scheme: dark)"),changeHandler=({matches:matches2})=>{set$1(actualTheme,matches2?DARK:LIGHT,!0)};"addEventListener"in mediaQueryList?mediaQueryList.addEventListener("change",changeHandler):mediaQueryList.addListener(changeHandler)}});const handleBlur=event2=>{$$props.onblur?.(event2),get$4(isFocusWithin)&&!event2.currentTarget.contains(event2. -relatedTarget)&&(set$1(isFocusWithin,!1),get$4(lastFocusedElementRef)&&(get$4(lastFocusedElementRef).focus({preventScroll:!0}),set$1(lastFocusedElementRef,null)))},handleFocus=event2=>{$$props.onfocus?.(event2),!(event2.target instanceof HTMLElement&&event2.target.dataset.dismissable==="false")&&(get$4(isFocusWithin)||(set$1(isFocusWithin,!0),set$1(lastFocusedElementRef,event2.relatedTarget,!0)))},handlePointerDown=event2=>{$$props.onpointerdown?.(event2),!(event2.target instanceof HTMLElement&& -event2.target.dataset.dismissable==="false")&&set$1(interacting,!0)},handleMouseEnter=event2=>{$$props.onmouseenter?.(event2),set$1(expanded,!0)},handleMouseLeave=event2=>{$$props.onmouseleave?.(event2),get$4(interacting)||set$1(expanded,!1)},handleMouseMove=event2=>{$$props.onmousemove?.(event2),set$1(expanded,!0)},handleDragEnd=event2=>{$$props.ondragend?.(event2),set$1(expanded,!1)},handlePointerUp=event2=>{$$props.onpointerup?.(event2),set$1(interacting,!1)};sonnerContext.set(new SonnerState); -var section=root$1x();set_attribute(section,"tabindex",-1);var node2=child(section);{var consequent_10=$$anchor2=>{var fragment=comment$2(),node_1=first_child(fragment);each(node_1,18,()=>get$4(possiblePositions),position3=>position3,($$anchor3,position3,index2,$$array)=>{const computed_const=user_derived(()=>{const[y,x]=position3.split("-");return{y,x}}),offsetObject=user_derived(()=>getOffsetObject(offset2(),mobileOffset()));var ol=root_2$16();attribute_effect(ol,$0=>({tabindex:-1,dir:$0,class:$$props. -class,"data-sonner-toaster":!0,"data-sonner-theme":get$4(actualTheme),"data-y-position":get$4(computed_const).y,"data-x-position":get$4(computed_const).x,style:$$props.style,onblur:handleBlur,onfocus:handleFocus,onmouseenter:handleMouseEnter,onmousemove:handleMouseMove,onmouseleave:handleMouseLeave,ondragend:handleDragEnd,onpointerdown:handlePointerDown,onpointerup:handlePointerUp,...restProps,[STYLE]:{"--front-toast-height":`${toastState.heights[0]?.height}px`,"--width":`${TOAST_WIDTH}px`,"--ga\ -p":`${gap()}px`,"--offset-top":get$4(offsetObject)["--offset-top"],"--offset-right":get$4(offsetObject)["--offset-right"],"--offset-bottom":get$4(offsetObject)["--offset-bottom"],"--offset-left":get$4(offsetObject)["--offset-left"],"--mobile-offset-top":get$4(offsetObject)["--mobile-offset-top"],"--mobile-offset-right":get$4(offsetObject)["--mobile-offset-right"],"--mobile-offset-bottom":get$4(offsetObject)["--mobile-offset-bottom"],"--mobile-offset-left":get$4(offsetObject)["--mobile-offset-lef\ -t"]}}),[getDocumentDirection],void 0,void 0,"svelte-nbs0zk"),each(ol,23,()=>toastState.toasts.filter(toast2=>!toast2.position&&get$4(index2)===0||toast2.position===position3),toast2=>toast2.id,($$anchor4,toast2,index3,$$array_1)=>{{const successIcon=$$anchor5=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);{var consequent=$$anchor6=>{var fragment_3=comment$2(),node_3=first_child(fragment_3);snippet(node_3,()=>$$props.successIcon??noop$3),append($$anchor6,fragment_3)},alternate=$$anchor6=>{ -var fragment_4=comment$2(),node_4=first_child(fragment_4);{var consequent_1=$$anchor7=>{SuccessIcon($$anchor7)};if_block(node_4,$$render=>{$$props.successIcon!==null&&$$render(consequent_1)},!0)}append($$anchor6,fragment_4)};if_block(node_2,$$render=>{$$props.successIcon?$$render(consequent):$$render(alternate,!1)})}append($$anchor5,fragment_2)},errorIcon=$$anchor5=>{var fragment_6=comment$2(),node_5=first_child(fragment_6);{var consequent_2=$$anchor6=>{var fragment_7=comment$2(),node_6=first_child( -fragment_7);snippet(node_6,()=>$$props.errorIcon??noop$3),append($$anchor6,fragment_7)},alternate_1=$$anchor6=>{var fragment_8=comment$2(),node_7=first_child(fragment_8);{var consequent_3=$$anchor7=>{ErrorIcon($$anchor7)};if_block(node_7,$$render=>{$$props.errorIcon!==null&&$$render(consequent_3)},!0)}append($$anchor6,fragment_8)};if_block(node_5,$$render=>{$$props.errorIcon?$$render(consequent_2):$$render(alternate_1,!1)})}append($$anchor5,fragment_6)},warningIcon=$$anchor5=>{var fragment_10=comment$2(), -node_8=first_child(fragment_10);{var consequent_4=$$anchor6=>{var fragment_11=comment$2(),node_9=first_child(fragment_11);snippet(node_9,()=>$$props.warningIcon??noop$3),append($$anchor6,fragment_11)},alternate_2=$$anchor6=>{var fragment_12=comment$2(),node_10=first_child(fragment_12);{var consequent_5=$$anchor7=>{WarningIcon($$anchor7)};if_block(node_10,$$render=>{$$props.warningIcon!==null&&$$render(consequent_5)},!0)}append($$anchor6,fragment_12)};if_block(node_8,$$render=>{$$props.warningIcon? -$$render(consequent_4):$$render(alternate_2,!1)})}append($$anchor5,fragment_10)},infoIcon=$$anchor5=>{var fragment_14=comment$2(),node_11=first_child(fragment_14);{var consequent_6=$$anchor6=>{var fragment_15=comment$2(),node_12=first_child(fragment_15);snippet(node_12,()=>$$props.infoIcon??noop$3),append($$anchor6,fragment_15)},alternate_3=$$anchor6=>{var fragment_16=comment$2(),node_13=first_child(fragment_16);{var consequent_7=$$anchor7=>{InfoIcon($$anchor7)};if_block(node_13,$$render=>{$$props. -infoIcon!==null&&$$render(consequent_7)},!0)}append($$anchor6,fragment_16)};if_block(node_11,$$render=>{$$props.infoIcon?$$render(consequent_6):$$render(alternate_3,!1)})}append($$anchor5,fragment_14)},closeIcon=$$anchor5=>{var fragment_18=comment$2(),node_14=first_child(fragment_18);{var consequent_8=$$anchor6=>{var fragment_19=comment$2(),node_15=first_child(fragment_19);snippet(node_15,()=>$$props.closeIcon??noop$3),append($$anchor6,fragment_19)},alternate_4=$$anchor6=>{var fragment_20=comment$2(), -node_16=first_child(fragment_20);{var consequent_9=$$anchor7=>{CloseIcon($$anchor7)};if_block(node_16,$$render=>{$$props.closeIcon!==null&&$$render(consequent_9)},!0)}append($$anchor6,fragment_20)};if_block(node_14,$$render=>{$$props.closeIcon?$$render(consequent_8):$$render(alternate_4,!1)})}append($$anchor5,fragment_18)};let $0=user_derived(()=>toastOptions()?.duration??duration2()),$1=user_derived(()=>toastOptions()?.class??""),$2=user_derived(()=>toastOptions()?.descriptionClass||""),$3=user_derived( -()=>toastOptions()?.style??""),$4=user_derived(()=>toastOptions().classes||{}),$5=user_derived(()=>toastOptions().unstyled??!1),$6=user_derived(()=>toastOptions()?.cancelButtonStyle??""),$7=user_derived(()=>toastOptions()?.actionButtonStyle??""),$8=user_derived(()=>toastOptions()?.closeButtonAriaLabel??closeButtonAriaLabel());Toast($$anchor4,{get index(){return get$4(index3)},get toast(){return get$4(toast2)},get defaultRichColors(){return richColors()},get duration(){return get$4($0)},get class(){ -return get$4($1)},get descriptionClass(){return get$4($2)},get invert(){return invert()},get visibleToasts(){return visibleToasts()},get closeButton(){return closeButton()},get interacting(){return get$4(interacting)},get position(){return position3},get style(){return get$4($3)},get classes(){return get$4($4)},get unstyled(){return get$4($5)},get cancelButtonStyle(){return get$4($6)},get actionButtonStyle(){return get$4($7)},get closeButtonAriaLabel(){return get$4($8)},get expandByDefault(){return expand()}, -get expanded(){return get$4(expanded)},get loadingIcon(){return $$props.loadingIcon},successIcon,errorIcon,warningIcon,infoIcon,closeIcon,$$slots:{successIcon:!0,errorIcon:!0,warningIcon:!0,infoIcon:!0,closeIcon:!0}})}}),reset(ol),bind_this(ol,$$value=>set$1(listRef,$$value),()=>get$4(listRef)),template_effect(()=>ol.dir=ol.dir),append($$anchor3,ol)}),append($$anchor2,fragment)};if_block(node2,$$render=>{toastState.toasts.length>0&&$$render(consequent_10)})}reset(section),template_effect(()=>set_attribute( -section,"aria-label",`${containerAriaLabel()??""} ${get$4(hotkeyLabel)??""}`)),append($$anchor,section),pop()}async function copyToClipboard(text2,successMessage="Copied to clipboard",errorMessage="Failed to copy to clipboard"){try{if(navigator.clipboard&&navigator.clipboard.writeText)return await navigator.clipboard.writeText(text2),toast.success(successMessage),!0;const textArea=document.createElement("textarea");textArea.value=text2,textArea.style.position="fixed",textArea.style.left="-999999\ -px",textArea.style.top="-999999px",document.body.appendChild(textArea),textArea.focus(),textArea.select();const successful=document.execCommand("copy");if(document.body.removeChild(textArea),successful)return toast.success(successMessage),!0;throw new Error("execCommand failed")}catch(error2){return console.error("Failed to copy to clipboard:",error2),toast.error(errorMessage),!1}}async function copyCodeToClipboard(rawCode,successMessage="Code copied to clipboard",errorMessage="Failed to copy co\ -de"){return copyToClipboard(rawCode,successMessage,errorMessage)}function formatMessageForClipboard(content2,extras,asPlainText=!1){const textAttachments=extras?.filter(extra=>extra.type===AttachmentType.TEXT||extra.type===AttachmentType.LEGACY_CONTEXT||extra.type===AttachmentType.MCP_PROMPT||extra.type===AttachmentType.MCP_RESOURCE)??[];if(textAttachments.length===0)return content2;if(asPlainText){const parts=[content2];for(const att of textAttachments)parts.push(att.content);return parts.join( -` +$$props.toast.id)||0),closeButton=user_derived(()=>$$props.toast.closeButton??$$props.closeButton),duration2=user_derived(()=>$$props.toast.duration??$$props.duration??TOAST_LIFETIME$1);let pointerStart=null;const coords=user_derived(()=>$$props.position.split("-")),toastsHeightBefore=user_derived(()=>toastState.heights.reduce((prev2,curr,reducerIndex)=>reducerIndex>=get$3(heightIndex)?prev2:prev2+curr.height,0)),isDocumentHidden=useDocumentHidden(),invert=user_derived(()=>$$props.toast.invert|| +$$props.invert),disabled=user_derived(()=>get$3(toastType)==="loading"),classes=user_derived(()=>({...defaultClasses,...$$props.classes})),toastTitle=user_derived(()=>$$props.toast.title),toastDescription=user_derived(()=>$$props.toast.description);let closeTimerStartTime=state$1(0),lastCloseTimerStartTime=state$1(0);const offset2=user_derived(()=>Math.round(get$3(heightIndex)*GAP$1+get$3(toastsHeightBefore)));user_effect(()=>{get$3(toastTitle),get$3(toastDescription);let scale2;$$props.expanded|| +$$props.expandByDefault?scale2=1:scale2=1-$$props.index*SCALE_MULTIPLIER;const toastEl=untrack$1(()=>get$3(toastRef));if(toastEl===void 0)return;toastEl.style.setProperty("height","auto");const offsetHeight=toastEl.offsetHeight,rectHeight=toastEl.getBoundingClientRect().height,scaledRectHeight=Math.round(rectHeight/scale2+Number.EPSILON&100)/100;toastEl.style.removeProperty("height");let finalHeight;Math.abs(scaledRectHeight-offsetHeight)<1?finalHeight=scaledRectHeight:finalHeight=offsetHeight,set$1( +initialHeight,finalHeight,!0),untrack$1(()=>{toastState.setHeight({toastId:$$props.toast.id,height:finalHeight})})});function deleteToast(){set$1(removed,!0),set$1(offsetBeforeRemove,get$3(offset2),!0),toastState.removeHeight($$props.toast.id),setTimeout(()=>{toastState.remove($$props.toast.id)},TIME_BEFORE_UNMOUNT)}let timeoutId;const isPromiseLoadingOrInfiniteDuration=user_derived(()=>$$props.toast.promise&&get$3(toastType)==="loading"||$$props.toast.duration===Number.POSITIVE_INFINITY);function startTimer(){ +set$1(closeTimerStartTime,new Date().getTime(),!0),timeoutId=setTimeout(()=>{$$props.toast.onAutoClose?.($$props.toast),deleteToast()},remainingTime)}function pauseTimer(){if(get$3(lastCloseTimerStartTime)<get$3(closeTimerStartTime)){const elapsedTime=new Date().getTime()-get$3(closeTimerStartTime);remainingTime=remainingTime-elapsedTime}set$1(lastCloseTimerStartTime,new Date().getTime(),!0)}user_effect(()=>{$$props.toast.updated&&(clearTimeout(timeoutId),remainingTime=get$3(duration2),startTimer())}), +user_effect(()=>(get$3(isPromiseLoadingOrInfiniteDuration)||($$props.expanded||$$props.interacting||isDocumentHidden.current?pauseTimer():startTimer()),()=>clearTimeout(timeoutId))),onMount$1(()=>{set$1(mounted,!0);const height=get$3(toastRef)?.getBoundingClientRect().height;return set$1(initialHeight,height,!0),toastState.setHeight({toastId:$$props.toast.id,height}),()=>{toastState.removeHeight($$props.toast.id)}}),user_effect(()=>{$$props.toast.delete&&untrack$1(()=>{deleteToast(),$$props.toast. +onDismiss?.($$props.toast)})});const handlePointerDown=event2=>{if(get$3(disabled))return;set$1(offsetBeforeRemove,get$3(offset2),!0);const target2=event2.target;target2.setPointerCapture(event2.pointerId),target2.tagName!=="BUTTON"&&(set$1(swiping,!0),pointerStart={x:event2.clientX,y:event2.clientY})},handlePointerUp=()=>{if(get$3(swipeOut)||!get$3(dismissable))return;pointerStart=null;const swipeAmountX=Number(get$3(toastRef)?.style.getPropertyValue("--swipe-amount-x").replace("px","")||0),swipeAmountY=Number( +get$3(toastRef)?.style.getPropertyValue("--swipe-amount-y").replace("px","")||0),timeTaken=new Date().getTime()-0,swipeAmount=get$3(swipeDirection)==="x"?swipeAmountX:swipeAmountY,velocity=Math.abs(swipeAmount)/timeTaken;if(Math.abs(swipeAmount)>=SWIPE_THRESHOLD||velocity>.11){set$1(offsetBeforeRemove,get$3(offset2),!0),$$props.toast.onDismiss?.($$props.toast),get$3(swipeDirection)==="x"?set$1(swipeOutDirection,swipeAmountX>0?"right":"left",!0):set$1(swipeOutDirection,swipeAmountY>0?"down":"up", +!0),deleteToast(),set$1(swipeOut,!0);return}else get$3(toastRef)?.style.setProperty("--swipe-amount-x","0px"),get$3(toastRef)?.style.setProperty("--swipe-amount-y","0px");set$1(isSwiped,!1),set$1(swiping,!1),set$1(swipeDirection,null)},handlePointerMove=event2=>{if(!pointerStart||!get$3(dismissable)||(window.getSelection()?.toString().length??-1)>0)return;const yDelta=event2.clientY-pointerStart.y,xDelta=event2.clientX-pointerStart.x,swipeDirections=$$props.swipeDirections??getDefaultSwipeDirections( +$$props.position);!get$3(swipeDirection)&&(Math.abs(xDelta)>1||Math.abs(yDelta)>1)&&set$1(swipeDirection,Math.abs(xDelta)>Math.abs(yDelta)?"x":"y",!0);let swipeAmount={x:0,y:0};if(get$3(swipeDirection)==="y"){if(swipeDirections.includes("top")||swipeDirections.includes("bottom"))if(swipeDirections.includes("top")&&yDelta<0||swipeDirections.includes("bottom")&&yDelta>0)swipeAmount.y=yDelta;else{const dampenedDelta=yDelta*getDampening(yDelta);swipeAmount.y=Math.abs(dampenedDelta)<Math.abs(yDelta)? +dampenedDelta:yDelta}}else if(get$3(swipeDirection)==="x"&&(swipeDirections.includes("left")||swipeDirections.includes("right")))if(swipeDirections.includes("left")&&xDelta<0||swipeDirections.includes("right")&&xDelta>0)swipeAmount.x=xDelta;else{const dampenedDelta=xDelta*getDampening(xDelta);swipeAmount.x=Math.abs(dampenedDelta)<Math.abs(xDelta)?dampenedDelta:xDelta}(Math.abs(swipeAmount.x)>0||Math.abs(swipeAmount.y)>0)&&set$1(isSwiped,!0),get$3(toastRef)?.style.setProperty("--swipe-amount-x",`${swipeAmount. +x}px`),get$3(toastRef)?.style.setProperty("--swipe-amount-y",`${swipeAmount.y}px`)},handleDragEnd=()=>{set$1(swiping,!1),set$1(swipeDirection,null),pointerStart=null},icon=user_derived(()=>$$props.toast.icon?$$props.toast.icon:get$3(toastType)==="success"?$$props.successIcon:get$3(toastType)==="error"?$$props.errorIcon:get$3(toastType)==="warning"?$$props.warningIcon:get$3(toastType)==="info"?$$props.infoIcon:get$3(toastType)==="loading"?$$props.loadingIcon:null);var li2=root$1L();set_attribute( +li2,"tabindex",0);let styles2;var node_2=child(li2);{var consequent_1=$$anchor2=>{var button=root_4$A(),node_3=child(button);snippet(node_3,()=>$$props.closeIcon??noop$3),reset(button),template_effect($0=>{set_attribute(button,"aria-label",$$props.closeButtonAriaLabel),set_attribute(button,"data-disabled",get$3(disabled)),set_class(button,1,$0)},[()=>clsx(cn(get$3(classes)?.closeButton,$$props.toast?.classes?.closeButton))]),delegated("click",button,()=>{get$3(disabled)||!get$3(dismissable)||(deleteToast(), +$$props.toast.onDismiss?.($$props.toast))}),append($$anchor2,button)};if_block(node_2,$$render=>{get$3(closeButton)&&!$$props.toast.component&&get$3(toastType)!=="loading"&&$$props.closeIcon!==null&&$$render(consequent_1)})}var node_4=sibling(node_2,2);{var consequent_2=$$anchor2=>{const Component=user_derived(()=>$$props.toast.component);var fragment_2=comment$2(),node_5=first_child(fragment_2);component(node_5,()=>get$3(Component),($$anchor3,Component_1)=>{Component_1($$anchor3,spread_props(()=>$$props. +toast.componentProps,{closeToast:deleteToast}))}),append($$anchor2,fragment_2)},alternate_4=$$anchor2=>{var fragment_3=root_6$z(),node_6=first_child(fragment_3);{var consequent_11=$$anchor3=>{var div_1=root_7$v(),node_7=child(div_1);{var consequent_4=$$anchor4=>{var fragment_4=comment$2(),node_8=first_child(fragment_4);{var consequent_3=$$anchor5=>{var fragment_5=comment$2(),node_9=first_child(fragment_5);component(node_9,()=>$$props.toast.icon,($$anchor6,toast_icon)=>{toast_icon($$anchor6,{})}), +append($$anchor5,fragment_5)},alternate_1=$$anchor5=>{LoadingIcon($$anchor5)};if_block(node_8,$$render=>{$$props.toast.icon?$$render(consequent_3):$$render(alternate_1,-1)})}append($$anchor4,fragment_4)};if_block(node_7,$$render=>{($$props.toast.promise||get$3(toastType)==="loading")&&$$render(consequent_4)})}var node_10=sibling(node_7,2);{var consequent_10=$$anchor4=>{var fragment_7=comment$2(),node_11=first_child(fragment_7);{var consequent_5=$$anchor5=>{var fragment_8=comment$2(),node_12=first_child( +fragment_8);component(node_12,()=>$$props.toast.icon,($$anchor6,toast_icon_1)=>{toast_icon_1($$anchor6,{})}),append($$anchor5,fragment_8)},consequent_6=$$anchor5=>{var fragment_9=comment$2(),node_13=first_child(fragment_9);snippet(node_13,()=>$$props.successIcon??noop$3),append($$anchor5,fragment_9)},consequent_7=$$anchor5=>{var fragment_10=comment$2(),node_14=first_child(fragment_10);snippet(node_14,()=>$$props.errorIcon??noop$3),append($$anchor5,fragment_10)},consequent_8=$$anchor5=>{var fragment_11=comment$2(), +node_15=first_child(fragment_11);snippet(node_15,()=>$$props.warningIcon??noop$3),append($$anchor5,fragment_11)},consequent_9=$$anchor5=>{var fragment_12=comment$2(),node_16=first_child(fragment_12);snippet(node_16,()=>$$props.infoIcon??noop$3),append($$anchor5,fragment_12)};if_block(node_11,$$render=>{$$props.toast.icon?$$render(consequent_5):get$3(toastType)==="success"?$$render(consequent_6,1):get$3(toastType)==="error"?$$render(consequent_7,2):get$3(toastType)==="warning"?$$render(consequent_8, +3):get$3(toastType)==="info"&&$$render(consequent_9,4)})}append($$anchor4,fragment_7)};if_block(node_10,$$render=>{$$props.toast.type!=="loading"&&$$render(consequent_10)})}reset(div_1),template_effect($0=>set_class(div_1,1,$0),[()=>clsx(cn(get$3(classes)?.icon,$$props.toast?.classes?.icon))]),append($$anchor3,div_1)};if_block(node_6,$$render=>{(get$3(toastType)||$$props.toast.icon||$$props.toast.promise)&&$$props.toast.icon!==null&&(get$3(icon)!==null||$$props.toast.icon)&&$$render(consequent_11)})} +var div_2=sibling(node_6,2),div_3=child(div_2),node_17=child(div_3);{var consequent_13=$$anchor3=>{var fragment_13=comment$2(),node_18=first_child(fragment_13);{var consequent_12=$$anchor4=>{const Title=user_derived(()=>$$props.toast.title);var fragment_14=comment$2(),node_19=first_child(fragment_14);component(node_19,()=>get$3(Title),($$anchor5,Title_1)=>{Title_1($$anchor5,spread_props(()=>$$props.toast.componentProps))}),append($$anchor4,fragment_14)},alternate_2=$$anchor4=>{var text2=text$8(); +template_effect(()=>set_text(text2,$$props.toast.title)),append($$anchor4,text2)};if_block(node_18,$$render=>{typeof $$props.toast.title!="string"?$$render(consequent_12):$$render(alternate_2,-1)})}append($$anchor3,fragment_13)};if_block(node_17,$$render=>{$$props.toast.title&&$$render(consequent_13)})}reset(div_3);var node_20=sibling(div_3,2);{var consequent_15=$$anchor3=>{var div_4=root_20$7(),node_21=child(div_4);{var consequent_14=$$anchor4=>{const Description=user_derived(()=>$$props.toast. +description);var fragment_16=comment$2(),node_22=first_child(fragment_16);component(node_22,()=>get$3(Description),($$anchor5,Description_1)=>{Description_1($$anchor5,spread_props(()=>$$props.toast.componentProps))}),append($$anchor4,fragment_16)},alternate_3=$$anchor4=>{var text_1=text$8();template_effect(()=>set_text(text_1,$$props.toast.description)),append($$anchor4,text_1)};if_block(node_21,$$render=>{typeof $$props.toast.description!="string"?$$render(consequent_14):$$render(alternate_3,-1)})} +reset(div_4),template_effect($0=>set_class(div_4,1,$0),[()=>clsx(cn(descriptionClass(),get$3(toastDescriptionClass),get$3(classes)?.description,$$props.toast.classes?.description))]),append($$anchor3,div_4)};if_block(node_20,$$render=>{$$props.toast.description&&$$render(consequent_15)})}reset(div_2);var node_23=sibling(div_2,2);{var consequent_18=$$anchor3=>{var fragment_18=comment$2(),node_24=first_child(fragment_18);{var consequent_16=$$anchor4=>{var fragment_19=comment$2(),node_25=first_child( +fragment_19);component(node_25,()=>$$props.toast.cancel,($$anchor5,toast_cancel)=>{toast_cancel($$anchor5,{})}),append($$anchor4,fragment_19)},consequent_17=$$anchor4=>{var button_1=root_25$4(),text_2=child(button_1,!0);reset(button_1),template_effect($0=>{set_style(button_1,$$props.toast.cancelButtonStyle??cancelButtonStyle()),set_class(button_1,1,$0),set_text(text_2,$$props.toast.cancel.label)},[()=>clsx(cn(get$3(classes)?.cancelButton,$$props.toast?.classes?.cancelButton))]),delegated("click", +button_1,event2=>{isAction($$props.toast.cancel)&&get$3(dismissable)&&($$props.toast.cancel?.onClick?.(event2),deleteToast())}),append($$anchor4,button_1)},d2=user_derived(()=>isAction($$props.toast.cancel));if_block(node_24,$$render=>{typeof $$props.toast.cancel=="function"?$$render(consequent_16):get$3(d2)&&$$render(consequent_17,1)})}append($$anchor3,fragment_18)};if_block(node_23,$$render=>{$$props.toast.cancel&&$$render(consequent_18)})}var node_26=sibling(node_23,2);{var consequent_21=$$anchor3=>{ +var fragment_20=comment$2(),node_27=first_child(fragment_20);{var consequent_19=$$anchor4=>{var fragment_21=comment$2(),node_28=first_child(fragment_21);component(node_28,()=>$$props.toast.action,($$anchor5,toast_action)=>{toast_action($$anchor5,{})}),append($$anchor4,fragment_21)},consequent_20=$$anchor4=>{var button_2=root_28$1(),text_3=child(button_2,!0);reset(button_2),template_effect($0=>{set_style(button_2,$$props.toast.actionButtonStyle??actionButtonStyle()),set_class(button_2,1,$0),set_text( +text_3,$$props.toast.action.label)},[()=>clsx(cn(get$3(classes)?.actionButton,$$props.toast?.classes?.actionButton))]),delegated("click",button_2,event2=>{isAction($$props.toast.action)&&($$props.toast.action?.onClick(event2),!event2.defaultPrevented&&deleteToast())}),append($$anchor4,button_2)},d_12=user_derived(()=>isAction($$props.toast.action));if_block(node_27,$$render=>{typeof $$props.toast.action=="function"?$$render(consequent_19):get$3(d_12)&&$$render(consequent_20,1)})}append($$anchor3, +fragment_20)};if_block(node_26,$$render=>{$$props.toast.action&&$$render(consequent_21)})}template_effect($0=>set_class(div_3,1,$0),[()=>clsx(cn(get$3(classes)?.title,$$props.toast?.classes?.title))]),append($$anchor2,fragment_3)};if_block(node_4,$$render=>{$$props.toast.component?$$render(consequent_2):$$render(alternate_4,-1)})}reset(li2),bind_this(li2,$$value=>set$1(toastRef,$$value),()=>get$3(toastRef)),template_effect(($0,$1,$2)=>{set_class(li2,1,$0),set_attribute(li2,"data-rich-colors",$$props. +toast.richColors??defaultRichColors()),set_attribute(li2,"data-styled",!($$props.toast.component||$$props.toast.unstyled||unstyled())),set_attribute(li2,"data-mounted",get$3(mounted)),set_attribute(li2,"data-promise",$1),set_attribute(li2,"data-swiped",get$3(isSwiped)),set_attribute(li2,"data-removed",get$3(removed)),set_attribute(li2,"data-visible",get$3(isVisible)),set_attribute(li2,"data-y-position",get$3(coords)[0]),set_attribute(li2,"data-x-position",get$3(coords)[1]),set_attribute(li2,"dat\ +a-index",$$props.index),set_attribute(li2,"data-front",get$3(isFront)),set_attribute(li2,"data-swiping",get$3(swiping)),set_attribute(li2,"data-dismissable",get$3(dismissable)),set_attribute(li2,"data-type",get$3(toastType)),set_attribute(li2,"data-invert",get$3(invert)),set_attribute(li2,"data-swipe-out",get$3(swipeOut)),set_attribute(li2,"data-swipe-direction",get$3(swipeOutDirection)),set_attribute(li2,"data-expanded",$2),styles2=set_style(li2,`${$$props.style} ${$$props.toast.style}`,styles2, +{"--index":$$props.index,"--toasts-before":$$props.index,"--z-index":toastState.toasts.length-$$props.index,"--offset":`${get$3(removed)?get$3(offsetBeforeRemove):get$3(offset2)}px`,"--initial-height":$$props.expandByDefault?"auto":`${get$3(initialHeight)}px`})},[()=>clsx(cn($$props.class,get$3(toastClass),get$3(classes)?.toast,$$props.toast?.classes?.toast,get$3(classes)?.[get$3(toastType)],$$props.toast?.classes?.[get$3(toastType)])),()=>!!$$props.toast.promise,()=>!!($$props.expanded||$$props. +expandByDefault&&get$3(mounted))]),delegated("pointermove",li2,handlePointerMove),delegated("pointerup",li2,handlePointerUp),delegated("pointerdown",li2,handlePointerDown),event("dragend",li2,handleDragEnd),append($$anchor,li2),pop()}delegate(["pointermove","pointerup","pointerdown","click"]);var root$1K=from_svg('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" height="20" width="20" data-sonner-success-icon=""><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 \ +0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" clip-rule="evenodd"></path></svg>');function SuccessIcon($$anchor){var svg2=root$1K();append($$anchor,svg2)}var root$1J=from_svg('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" height="20" width="20" data-sonner-error-icon=""><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5\ +A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z" clip-rule="evenodd"></path></svg>');function ErrorIcon($$anchor){var svg2=root$1J();append($$anchor,svg2)}var root$1I=from_svg('<svg viewBox="0 0 64 64" fill="currentColor" height="20" width="20" data-sonner-warning-icon="" xmlns="http://www.w3.org/2000/svg"><path d="M32.427,7.987c2.183,0.124 4,1.165 5.096,3.281l17.936,36.208c1.739,3.66 -0.954,8.585 -5.373,8.656l-36.119,0c-4.022,-0.064 -7.322,-4.631 -5.352,-8.696l18.271,-36.207c0.342,-0.65 0.498,-\ +0.838 0.793,-1.179c1.186,-1.375 2.483,-2.111 4.748,-2.063Zm-0.295,3.997c-0.687,0.034 -1.316,0.419 -1.659,1.017c-6.312,11.979 -12.397,24.081 -18.301,36.267c-0.546,1.225 0.391,2.797 1.762,2.863c12.06,0.195 24.125,0.195 36.185,0c1.325,-0.064 2.321,-1.584 1.769,-2.85c-5.793,-12.184 -11.765,-24.286 -17.966,-36.267c-0.366,-0.651 -0.903,-1.042 -1.79,-1.03Z"></path><path d="M33.631,40.581l-3.348,0l-0.368,-16.449l4.1,0l-0.384,16.449Zm-3.828,5.03c0,-0.609 0.197,-1.113 0.592,-1.514c0.396,-0.4 0.935,-0.601 \ +1.618,-0.601c0.684,0 1.223,0.201 1.618,0.601c0.395,0.401 0.593,0.905 0.593,1.514c0,0.587 -0.193,1.078 -0.577,1.473c-0.385,0.395 -0.929,0.593 -1.634,0.593c-0.705,0 -1.249,-0.198 -1.634,-0.593c-0.384,-0.395 -0.576,-0.886 -0.576,-1.473Z"></path></svg>');function WarningIcon($$anchor){var svg2=root$1I();append($$anchor,svg2)}var root$1H=from_svg('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" height="20" width="20" data-sonner-info-icon=""><path fill-rule="evenodd" d\ +="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z" clip-rule="evenodd"></path></svg>');function InfoIcon($$anchor){var svg2=root$1H();append($$anchor,svg2)}var root$1G=from_svg('<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" st\ +roke-linecap="round" stroke-linejoin="round" data-sonner-close-icon=""><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>');function CloseIcon($$anchor){var svg2=root$1G();append($$anchor,svg2)}const VISIBLE_TOASTS_AMOUNT=3,VIEWPORT_OFFSET="24px",MOBILE_VIEWPORT_OFFSET="16px",TOAST_LIFETIME=4e3,TOAST_WIDTH=356,GAP=14,DARK="dark",LIGHT="light";function getOffsetObject(defaultOffset,mobileOffset){const styles2={};return[defaultOffset,mobileOffset].forEach( +(offset2,index2)=>{const isMobile=index2===1,prefix=isMobile?"--mobile-offset":"--offset",defaultValue=isMobile?MOBILE_VIEWPORT_OFFSET:VIEWPORT_OFFSET;function assignAll(offset3){["top","right","bottom","left"].forEach(key2=>{styles2[`${prefix}-${key2}`]=typeof offset3=="number"?`${offset3}px`:offset3})}typeof offset2=="number"||typeof offset2=="string"?assignAll(offset2):typeof offset2=="object"?["top","right","bottom","left"].forEach(key2=>{const value=offset2[key2];value===void 0?styles2[`${prefix}\ +-${key2}`]=defaultValue:styles2[`${prefix}-${key2}`]=typeof value=="number"?`${value}px`:value}):assignAll(defaultValue)}),styles2}var root_2$1f=from_html("<ol></ol>"),root$1F=from_html('<section aria-live="polite" aria-relevant="additions text" aria-atomic="false" class="svelte-nbs0zk"><!></section>');function Toaster($$anchor,$$props){push$1($$props,!0);function getInitialTheme(t){return t!=="system"?t:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches? +DARK:LIGHT}let invert=prop($$props,"invert",3,!1),position2=prop($$props,"position",3,"bottom-right"),hotkey=prop($$props,"hotkey",19,()=>["altKey","KeyT"]),expand=prop($$props,"expand",3,!1),closeButton=prop($$props,"closeButton",3,!1),offset2=prop($$props,"offset",3,VIEWPORT_OFFSET),mobileOffset=prop($$props,"mobileOffset",3,MOBILE_VIEWPORT_OFFSET),theme=prop($$props,"theme",3,"light"),richColors=prop($$props,"richColors",3,!1),duration2=prop($$props,"duration",3,TOAST_LIFETIME),visibleToasts=prop( +$$props,"visibleToasts",3,VISIBLE_TOASTS_AMOUNT),toastOptions=prop($$props,"toastOptions",19,()=>({})),dir=prop($$props,"dir",7,"auto"),gap=prop($$props,"gap",3,GAP),containerAriaLabel=prop($$props,"containerAriaLabel",3,"Notifications"),closeButtonAriaLabel=prop($$props,"closeButtonAriaLabel",3,"Close toast"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","invert","position","hotkey","expand","closeButton","offset","mobileOffset","theme","richColors","duration","visibleToasts","t\ +oastOptions","dir","gap","loadingIcon","successIcon","errorIcon","warningIcon","closeIcon","infoIcon","containerAriaLabel","class","closeButtonAriaLabel","onblur","onfocus","onmouseenter","onmousemove","onmouseleave","ondragend","onpointerdown","onpointerup"]);function getDocumentDirection(){if(dir()!=="auto")return dir();if(typeof window>"u"||typeof document>"u")return"ltr";const dirAttribute=document.documentElement.getAttribute("dir");return dirAttribute==="auto"||!dirAttribute?(untrack$1(()=>dir( +window.getComputedStyle(document.documentElement).direction??"ltr")),dir()):(untrack$1(()=>dir(dirAttribute)),dirAttribute)}const possiblePositions=user_derived(()=>Array.from(new Set([position2(),...toastState.toasts.filter(toast2=>toast2.position).map(toast2=>toast2.position)].filter(Boolean))));let expanded=state$1(!1),interacting=state$1(!1),actualTheme=state$1(proxy(getInitialTheme(theme()))),listRef=state$1(void 0),lastFocusedElementRef=state$1(null),isFocusWithin=state$1(!1);const hotkeyLabel=user_derived( +()=>hotkey().join("+").replace(/Key/g,"").replace(/Digit/g,""));user_effect(()=>{toastState.toasts.length<=1&&set$1(expanded,!1)}),user_effect(()=>{const toastsToDismiss=toastState.toasts.filter(toast2=>toast2.dismiss&&!toast2.delete);if(toastsToDismiss.length>0){const updatedToasts=toastState.toasts.map(toast2=>toastsToDismiss.find(dismissToast=>dismissToast.id===toast2.id)?{...toast2,delete:!0}:toast2);toastState.toasts=updatedToasts}}),user_effect(()=>()=>{get$3(listRef)&&get$3(lastFocusedElementRef)&& +(get$3(lastFocusedElementRef).focus({preventScroll:!0}),set$1(lastFocusedElementRef,null),set$1(isFocusWithin,!1))}),onMount$1(()=>(toastState.reset(),on(document,"keydown",event2=>{hotkey().every(key2=>event2[key2]||event2.code===key2)&&(set$1(expanded,!0),get$3(listRef)?.focus()),event2.code==="Escape"&&(document.activeElement===get$3(listRef)||get$3(listRef)?.contains(document.activeElement))&&set$1(expanded,!1)}))),user_effect(()=>{if(theme()!=="system"&&set$1(actualTheme,theme()),typeof window< +"u"){theme()==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?set$1(actualTheme,DARK):set$1(actualTheme,LIGHT));const mediaQueryList=window.matchMedia("(prefers-color-scheme: dark)"),changeHandler=({matches:matches2})=>{set$1(actualTheme,matches2?DARK:LIGHT,!0)};"addEventListener"in mediaQueryList?mediaQueryList.addEventListener("change",changeHandler):mediaQueryList.addListener(changeHandler)}});const handleBlur=event2=>{$$props.onblur?.(event2),get$3(isFocusWithin)&& +!event2.currentTarget.contains(event2.relatedTarget)&&(set$1(isFocusWithin,!1),get$3(lastFocusedElementRef)&&(get$3(lastFocusedElementRef).focus({preventScroll:!0}),set$1(lastFocusedElementRef,null)))},handleFocus=event2=>{$$props.onfocus?.(event2),!(event2.target instanceof HTMLElement&&event2.target.dataset.dismissable==="false")&&(get$3(isFocusWithin)||(set$1(isFocusWithin,!0),set$1(lastFocusedElementRef,event2.relatedTarget,!0)))},handlePointerDown=event2=>{$$props.onpointerdown?.(event2),!(event2. +target instanceof HTMLElement&&event2.target.dataset.dismissable==="false")&&set$1(interacting,!0)},handleMouseEnter=event2=>{$$props.onmouseenter?.(event2),set$1(expanded,!0)},handleMouseLeave=event2=>{$$props.onmouseleave?.(event2),get$3(interacting)||set$1(expanded,!1)},handleMouseMove=event2=>{$$props.onmousemove?.(event2),set$1(expanded,!0)},handleDragEnd=event2=>{$$props.ondragend?.(event2),set$1(expanded,!1)},handlePointerUp=event2=>{$$props.onpointerup?.(event2),set$1(interacting,!1)};sonnerContext. +set(new SonnerState);var section2=root$1F();set_attribute(section2,"tabindex",-1);var node2=child(section2);{var consequent_10=$$anchor2=>{var fragment=comment$2(),node_1=first_child(fragment);each(node_1,18,()=>get$3(possiblePositions),position3=>position3,($$anchor3,position3,index2,$$array)=>{const computed_const=user_derived(()=>{const[y,x]=position3.split("-");return{y,x}}),offsetObject=user_derived(()=>getOffsetObject(offset2(),mobileOffset()));var ol=root_2$1f();attribute_effect(ol,$0=>({ +tabindex:-1,dir:$0,class:$$props.class,"data-sonner-toaster":!0,"data-sonner-theme":get$3(actualTheme),"data-y-position":get$3(computed_const).y,"data-x-position":get$3(computed_const).x,style:$$props.style,onblur:handleBlur,onfocus:handleFocus,onmouseenter:handleMouseEnter,onmousemove:handleMouseMove,onmouseleave:handleMouseLeave,ondragend:handleDragEnd,onpointerdown:handlePointerDown,onpointerup:handlePointerUp,...restProps,[STYLE]:{"--front-toast-height":`${toastState.heights[0]?.height}px`,"\ +--width":`${TOAST_WIDTH}px`,"--gap":`${gap()}px`,"--offset-top":get$3(offsetObject)["--offset-top"],"--offset-right":get$3(offsetObject)["--offset-right"],"--offset-bottom":get$3(offsetObject)["--offset-bottom"],"--offset-left":get$3(offsetObject)["--offset-left"],"--mobile-offset-top":get$3(offsetObject)["--mobile-offset-top"],"--mobile-offset-right":get$3(offsetObject)["--mobile-offset-right"],"--mobile-offset-bottom":get$3(offsetObject)["--mobile-offset-bottom"],"--mobile-offset-left":get$3(offsetObject)["\ +--mobile-offset-left"]}}),[()=>getDocumentDirection()],void 0,void 0,"svelte-nbs0zk"),each(ol,23,()=>toastState.toasts.filter(toast2=>!toast2.position&&get$3(index2)===0||toast2.position===position3),toast2=>toast2.id,($$anchor4,toast2,index3,$$array_1)=>{{const successIcon=$$anchor5=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);{var consequent=$$anchor6=>{var fragment_3=comment$2(),node_3=first_child(fragment_3);snippet(node_3,()=>$$props.successIcon??noop$3),append($$anchor6,fragment_3)}, +consequent_1=$$anchor6=>{SuccessIcon($$anchor6)};if_block(node_2,$$render=>{$$props.successIcon?$$render(consequent):$$props.successIcon!==null&&$$render(consequent_1,1)})}append($$anchor5,fragment_2)},errorIcon=$$anchor5=>{var fragment_5=comment$2(),node_4=first_child(fragment_5);{var consequent_2=$$anchor6=>{var fragment_6=comment$2(),node_5=first_child(fragment_6);snippet(node_5,()=>$$props.errorIcon??noop$3),append($$anchor6,fragment_6)},consequent_3=$$anchor6=>{ErrorIcon($$anchor6)};if_block( +node_4,$$render=>{$$props.errorIcon?$$render(consequent_2):$$props.errorIcon!==null&&$$render(consequent_3,1)})}append($$anchor5,fragment_5)},warningIcon=$$anchor5=>{var fragment_8=comment$2(),node_6=first_child(fragment_8);{var consequent_4=$$anchor6=>{var fragment_9=comment$2(),node_7=first_child(fragment_9);snippet(node_7,()=>$$props.warningIcon??noop$3),append($$anchor6,fragment_9)},consequent_5=$$anchor6=>{WarningIcon($$anchor6)};if_block(node_6,$$render=>{$$props.warningIcon?$$render(consequent_4): +$$props.warningIcon!==null&&$$render(consequent_5,1)})}append($$anchor5,fragment_8)},infoIcon=$$anchor5=>{var fragment_11=comment$2(),node_8=first_child(fragment_11);{var consequent_6=$$anchor6=>{var fragment_12=comment$2(),node_9=first_child(fragment_12);snippet(node_9,()=>$$props.infoIcon??noop$3),append($$anchor6,fragment_12)},consequent_7=$$anchor6=>{InfoIcon($$anchor6)};if_block(node_8,$$render=>{$$props.infoIcon?$$render(consequent_6):$$props.infoIcon!==null&&$$render(consequent_7,1)})}append( +$$anchor5,fragment_11)},closeIcon=$$anchor5=>{var fragment_14=comment$2(),node_10=first_child(fragment_14);{var consequent_8=$$anchor6=>{var fragment_15=comment$2(),node_11=first_child(fragment_15);snippet(node_11,()=>$$props.closeIcon??noop$3),append($$anchor6,fragment_15)},consequent_9=$$anchor6=>{CloseIcon($$anchor6)};if_block(node_10,$$render=>{$$props.closeIcon?$$render(consequent_8):$$props.closeIcon!==null&&$$render(consequent_9,1)})}append($$anchor5,fragment_14)};let $0=user_derived(()=>toastOptions()?. +duration??duration2()),$1=user_derived(()=>toastOptions()?.class??""),$2=user_derived(()=>toastOptions()?.descriptionClass||""),$3=user_derived(()=>toastOptions()?.style??""),$4=user_derived(()=>toastOptions().classes||{}),$5=user_derived(()=>toastOptions().unstyled??!1),$6=user_derived(()=>toastOptions()?.cancelButtonStyle??""),$7=user_derived(()=>toastOptions()?.actionButtonStyle??""),$8=user_derived(()=>toastOptions()?.closeButtonAriaLabel??closeButtonAriaLabel());Toast($$anchor4,{get index(){ +return get$3(index3)},get toast(){return get$3(toast2)},get defaultRichColors(){return richColors()},get duration(){return get$3($0)},get class(){return get$3($1)},get descriptionClass(){return get$3($2)},get invert(){return invert()},get visibleToasts(){return visibleToasts()},get closeButton(){return closeButton()},get interacting(){return get$3(interacting)},get position(){return position3},get style(){return get$3($3)},get classes(){return get$3($4)},get unstyled(){return get$3($5)},get cancelButtonStyle(){ +return get$3($6)},get actionButtonStyle(){return get$3($7)},get closeButtonAriaLabel(){return get$3($8)},get expandByDefault(){return expand()},get expanded(){return get$3(expanded)},get loadingIcon(){return $$props.loadingIcon},successIcon,errorIcon,warningIcon,infoIcon,closeIcon,$$slots:{successIcon:!0,errorIcon:!0,warningIcon:!0,infoIcon:!0,closeIcon:!0}})}}),reset(ol),bind_this(ol,$$value=>set$1(listRef,$$value),()=>get$3(listRef)),template_effect(()=>ol.dir=ol.dir),append($$anchor3,ol)}),append( +$$anchor2,fragment)};if_block(node2,$$render=>{toastState.toasts.length>0&&$$render(consequent_10)})}reset(section2),template_effect(()=>set_attribute(section2,"aria-label",`${containerAriaLabel()??""} ${get$3(hotkeyLabel)??""}`)),append($$anchor,section2),pop()}async function copyToClipboard(text2,successMessage="Copied to clipboard",errorMessage="Failed to copy to clipboard"){try{if(navigator.clipboard&&navigator.clipboard.writeText)return await navigator.clipboard.writeText(text2),toast.success( +successMessage),!0;const textArea=document.createElement("textarea");textArea.value=text2,textArea.style.position="fixed",textArea.style.left="-999999px",textArea.style.top="-999999px",document.body.appendChild(textArea),textArea.focus(),textArea.select();const successful=document.execCommand("copy");if(document.body.removeChild(textArea),successful)return toast.success(successMessage),!0;throw new Error("execCommand failed")}catch(error2){return console.error("Failed to copy to clipboard:",error2), +toast.error(errorMessage),!1}}async function copyCodeToClipboard(rawCode,successMessage="Code copied to clipboard",errorMessage="Failed to copy code"){return copyToClipboard(rawCode,successMessage,errorMessage)}function formatMessageForClipboard(content2,extras,asPlainText=!1){const textAttachments=extras?.filter(extra=>extra.type===AttachmentType.TEXT||extra.type===AttachmentType.LEGACY_CONTEXT||extra.type===AttachmentType.MCP_PROMPT||extra.type===AttachmentType.MCP_RESOURCE)??[];if(textAttachments. +length===0)return content2;if(asPlainText){const parts=[content2];for(const att of textAttachments)parts.push(att.content);return parts.join(` `)}const clipboardAttachments=textAttachments.map(att=>{if(att.type===AttachmentType.MCP_PROMPT){const mcpAtt=att;return{type:AttachmentType.MCP_PROMPT,name:mcpAtt.name,serverName:mcpAtt.serverName,promptName:mcpAtt.promptName,content:mcpAtt.content,arguments:mcpAtt.arguments}}return{type:AttachmentType.TEXT,name:att.name,content:att.content}});return`${JSON.stringify(content2)} ${JSON.stringify(clipboardAttachments,null,2)}`}function parseClipboardContent(clipboardText){const defaultResult={message:clipboardText,textAttachments:[],mcpPromptAttachments:[]};if(!clipboardText.startsWith('"'))return defaultResult;try{let stringEndIndex=-1,escaped=!1;for(let i=1;i<clipboardText.length;i++){const char=clipboardText[i];if(escaped){escaped=!1;continue}if(char==="\\"){escaped=!0;continue}if(char==='"'){stringEndIndex=i;break}}if(stringEndIndex===-1)return defaultResult;const jsonStringPart=clipboardText. @@ -3507,34 +3590,34 @@ join(URI_TEMPLATE_SEPARATORS.COMMA);case URI_TEMPLATE_OPERATORS.FORM_CONTINUATIO "").trim()!=="")}function createBase64DataUrl(mimeType,base64Data){return`data:${mimeType};base64,${base64Data}`}function parseHeadersToArray(headersJson){if(!headersJson?.trim())return[];try{const parsed=JSON.parse(headersJson);if(typeof parsed=="object"&&parsed!==null&&!Array.isArray(parsed))return Object.entries(parsed).map(([key2,value])=>({key:key2,value:String(value)}))}catch{return[]}return[]}function serializeHeaders(pairs){const validPairs=pairs.filter(p2=>p2.key.trim());if(validPairs.length=== 0)return"";const obj={};for(const pair of validPairs)obj[pair.key.trim()]=pair.value;return JSON.stringify(obj)}function getFaviconUrl(urlString,useProxy=!0){try{const url2=new URL(urlString),hostnameParts=url2.hostname.split(DOMAIN_SEPARATOR),rootDomain=hostnameParts.length>=ROOT_DOMAIN_MIN_PARTS?hostnameParts.slice(-ROOT_DOMAIN_MIN_PARTS).join(DOMAIN_SEPARATOR):url2.hostname,googleFaviconUrl=`${GOOGLE_FAVICON_BASE_URL}?domain=${rootDomain}&sz=${DEFAULT_FAVICON_SIZE}`;return useProxy?getProxiedUrlString( googleFaviconUrl):googleFaviconUrl}catch{return null}}function deriveSingleTurnSections(message,toolMessages=[],streamingToolCalls=[],isStreaming=!1){const sections=[];if(message.reasoningContent){const toolCalls2=parseToolCalls(message.toolCalls),hasContentAfterReasoning=!!message.content?.trim()||toolCalls2.length>0||streamingToolCalls.length>0,isPending=isStreaming&&!hasContentAfterReasoning;sections.push({type:isPending?AgenticSectionType.REASONING_PENDING:AgenticSectionType.REASONING,content:message. -reasoningContent})}message.content?.trim()&§ions.push({type:AgenticSectionType.TEXT,content:message.content});const toolCalls=parseToolCalls(message.toolCalls);for(const tc of toolCalls){const resultMsg=toolMessages.find(m=>m.toolCallId===tc.id);sections.push({type:resultMsg?AgenticSectionType.TOOL_CALL:AgenticSectionType.TOOL_CALL_PENDING,content:resultMsg?.content||"",toolName:tc.function?.name,toolArgs:tc.function?.arguments,toolResult:resultMsg?.content,toolResultExtras:resultMsg?.extra})} -for(const tc of streamingToolCalls)tc.id&&toolCalls.find(t=>t.id===tc.id)||sections.push({type:AgenticSectionType.TOOL_CALL_STREAMING,content:"",toolName:tc.function?.name,toolArgs:tc.function?.arguments});return sections}function deriveAgenticSections(message,toolMessages=[],streamingToolCalls=[],isStreaming=!1){if(!toolMessages.some(m=>m.role===MessageRole.ASSISTANT))return deriveSingleTurnSections(message,toolMessages,streamingToolCalls,isStreaming);const sections=[],firstTurnToolMsgs=collectToolMessages( -toolMessages,0);sections.push(...deriveSingleTurnSections(message,firstTurnToolMsgs));let i=firstTurnToolMsgs.length;for(;i<toolMessages.length;){const msg=toolMessages[i];if(msg.role===MessageRole.ASSISTANT){const turnToolMsgs=collectToolMessages(toolMessages,i+1),isLastTurn=i+1+turnToolMsgs.length>=toolMessages.length;sections.push(...deriveSingleTurnSections(msg,turnToolMsgs,isLastTurn?streamingToolCalls:[],isLastTurn&&isStreaming)),i+=1+turnToolMsgs.length}else i++}return sections}function collectToolMessages(messages,startIndex){ -const result=[];for(let i=startIndex;i<messages.length&&messages[i].role===MessageRole.TOOL;i++)result.push(messages[i]);return result}function parseToolResultWithImages(toolResult,extras){return toolResult.split(NEWLINE_SEPARATOR).map(line=>{const match=line.match(ATTACHMENT_SAVED_REGEX);if(!match||!extras)return{text:line};const attachmentName=match[1],image2=extras.find(e=>e.type===AttachmentType.IMAGE&&e.name===attachmentName);return{text:line,image:image2}})}function parseToolCalls(toolCallsJson){ -if(!toolCallsJson)return[];try{const parsed=JSON.parse(toolCallsJson);return Array.isArray(parsed)?parsed:[]}catch{return[]}}function hasAgenticContent(message,toolMessages=[]){return message.toolCalls&&parseToolCalls(message.toolCalls).length>0?!0:toolMessages.length>0}var dexie_min$1={exports:{}},dexie_min=dexie_min$1.exports,hasRequiredDexie_min;function requireDexie_min(){return hasRequiredDexie_min||(hasRequiredDexie_min=1,function(module,exports){(function(e,t){module.exports=t()})(dexie_min, -function(){var s2=function(e2,t2){return(s2=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e3,t3){e3.__proto__=t3}||function(e3,t3){for(var n2 in t3)Object.prototype.hasOwnProperty.call(t3,n2)&&(e3[n2]=t3[n2])})(e2,t2)},_=function(){return(_=Object.assign||function(e2){for(var t2,n2=1,r3=arguments.length;n2<r3;n2++)for(var i2 in t2=arguments[n2])Object.prototype.hasOwnProperty.call(t2,i2)&&(e2[i2]=t2[i2]);return e2}).apply(this,arguments)};function i(e2,t2,n2){for(var r3,i2=0,o2=t2. -length;i2<o2;i2++)!r3&&i2 in t2||((r3=r3||Array.prototype.slice.call(t2,0,i2))[i2]=t2[i2]);return e2.concat(r3||Array.prototype.slice.call(t2))}var f=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:commonjsGlobal,x=Object.keys,k=Array.isArray;function a(t2,n2){return typeof n2!="object"||x(n2).forEach(function(e2){t2[e2]=n2[e2]}),t2}typeof Promise>"u"||f.Promise||(f.Promise=Promise);var c2=Object.getPrototypeOf,n={}.hasOwnProperty;function m(e2,t2){return n.call(e2, -t2)}function r2(t2,n2){typeof n2=="function"&&(n2=n2(c2(t2))),(typeof Reflect>"u"?x:Reflect.ownKeys)(n2).forEach(function(e2){l(t2,e2,n2[e2])})}var u=Object.defineProperty;function l(e2,t2,n2,r3){u(e2,t2,a(n2&&m(n2,"get")&&typeof n2.get=="function"?{get:n2.get,set:n2.set,configurable:!0}:{value:n2,configurable:!0,writable:!0},r3))}function o(t2){return{from:function(e2){return t2.prototype=Object.create(e2.prototype),l(t2.prototype,"constructor",t2),{extend:r2.bind(null,t2.prototype)}}}}var h2=Object. -getOwnPropertyDescriptor,d2=[].slice;function b(e2,t2,n2){return d2.call(e2,t2,n2)}function p2(e2,t2){return t2(e2)}function y(e2){if(!e2)throw new Error("Assertion Failed")}function v(e2){f.setImmediate?setImmediate(e2):setTimeout(e2,0)}function O(e2,t2){if(typeof t2=="string"&&m(e2,t2))return e2[t2];if(!t2)return e2;if(typeof t2!="string"){for(var n2=[],r3=0,i2=t2.length;r3<i2;++r3){var o2=O(e2,t2[r3]);n2.push(o2)}return n2}var a2=t2.indexOf(".");if(a2!==-1){var u2=e2[t2.substr(0,a2)];return u2== -null?void 0:O(u2,t2.substr(a2+1))}}function P(e2,t2,n2){if(e2&&t2!==void 0&&!("isFrozen"in Object&&Object.isFrozen(e2)))if(typeof t2!="string"&&"length"in t2){y(typeof n2!="string"&&"length"in n2);for(var r3=0,i2=t2.length;r3<i2;++r3)P(e2,t2[r3],n2[r3])}else{var o2,a2,u2=t2.indexOf(".");u2!==-1?(o2=t2.substr(0,u2),(a2=t2.substr(u2+1))===""?n2===void 0?k(e2)&&!isNaN(parseInt(o2))?e2.splice(o2,1):delete e2[o2]:e2[o2]=n2:P(u2=!(u2=e2[o2])||!m(e2,o2)?e2[o2]={}:u2,a2,n2)):n2===void 0?k(e2)&&!isNaN(parseInt( -t2))?e2.splice(t2,1):delete e2[t2]:e2[t2]=n2}}function g(e2){var t2,n2={};for(t2 in e2)m(e2,t2)&&(n2[t2]=e2[t2]);return n2}var t=[].concat;function w(e2){return t.apply([],e2)}var e="BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey".split(",").concat(w([8,16,32,64].map(function(t2){return["Int","Uint","Float"].map(function(e2){return e2+t2+ -"Array"})}))).filter(function(e2){return f[e2]}),K=new Set(e.map(function(e2){return f[e2]})),E=null;function S2(e2){return E=new WeakMap,e2=function e3(t2){if(!t2||typeof t2!="object")return t2;var n2=E.get(t2);if(n2)return n2;if(k(t2)){n2=[],E.set(t2,n2);for(var r3=0,i2=t2.length;r3<i2;++r3)n2.push(e3(t2[r3]))}else if(K.has(t2.constructor))n2=t2;else{var o2,a2=c2(t2);for(o2 in n2=a2===Object.prototype?{}:Object.create(a2),E.set(t2,n2),t2)m(t2,o2)&&(n2[o2]=e3(t2[o2]))}return n2}(e2),E=null,e2}var j={}. -toString;function A(e2){return j.call(e2).slice(8,-1)}var C=typeof Symbol<"u"?Symbol.iterator:"@@iterator",T2=typeof C=="symbol"?function(e2){var t2;return e2!=null&&(t2=e2[C])&&t2.apply(e2)}:function(){return null};function q2(e2,t2){return t2=e2.indexOf(t2),0<=t2&&e2.splice(t2,1),0<=t2}var D2={};function I(e2){var t2,n2,r3,i2;if(arguments.length===1){if(k(e2))return e2.slice();if(this===D2&&typeof e2=="string")return[e2];if(i2=T2(e2)){for(n2=[];!(r3=i2.next()).done;)n2.push(r3.value);return n2} -if(e2==null)return[e2];if(typeof(t2=e2.length)!="number")return[e2];for(n2=new Array(t2);t2--;)n2[t2]=e2[t2];return n2}for(t2=arguments.length,n2=new Array(t2);t2--;)n2[t2]=arguments[t2];return n2}var B=typeof Symbol<"u"?function(e2){return e2[Symbol.toStringTag]==="AsyncFunction"}:function(){return!1},R=["Unknown","Constraint","Data","TransactionInactive","ReadOnly","Version","NotFound","InvalidState","InvalidAccess","Abort","Timeout","QuotaExceeded","Syntax","DataClone"],F=["Modify","Bulk","Op\ -enFailed","VersionChange","Schema","Upgrade","InvalidTable","MissingAPI","NoSuchDatabase","InvalidArgument","SubTransaction","Unsupported","Internal","DatabaseClosed","PrematureCommit","ForeignAwait"].concat(R),M={VersionChanged:"Database version changed by other database connection",DatabaseClosed:"Database has been closed",Abort:"Transaction aborted",TransactionInactive:"Transaction has already completed or failed",MissingAPI:"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb"}; -function N(e2,t2){this.name=e2,this.message=t2}function L(e2,t2){return e2+". Errors: "+Object.keys(t2).map(function(e3){return t2[e3].toString()}).filter(function(e3,t3,n2){return n2.indexOf(e3)===t3}).join(` +reasoningContent})}message.content?.trim()&§ions.push({type:AgenticSectionType.TEXT,content:message.content});const toolCalls=parseToolCalls(message.toolCalls);for(const tc of toolCalls){const resultMsg=toolMessages.find(m=>m.toolCallId===tc.id),type2=resultMsg?AgenticSectionType.TOOL_CALL:isStreaming?AgenticSectionType.TOOL_CALL_PENDING:AgenticSectionType.TOOL_CALL;sections.push({type:type2,content:resultMsg?.content||"",toolName:tc.function?.name,toolArgs:tc.function?.arguments,toolResult:resultMsg?. +content,toolResultExtras:resultMsg?.extra})}for(const tc of streamingToolCalls)tc.id&&toolCalls.find(t=>t.id===tc.id)||sections.push({type:AgenticSectionType.TOOL_CALL_STREAMING,content:"",toolName:tc.function?.name,toolArgs:tc.function?.arguments});return sections}function deriveAgenticSections(message,toolMessages=[],streamingToolCalls=[],isStreaming=!1){if(!toolMessages.some(m=>m.role===MessageRole.ASSISTANT))return deriveSingleTurnSections(message,toolMessages,streamingToolCalls,isStreaming); +const sections=[],firstTurnToolMsgs=collectToolMessages(toolMessages,0);sections.push(...deriveSingleTurnSections(message,firstTurnToolMsgs));let i=firstTurnToolMsgs.length;for(;i<toolMessages.length;){const msg=toolMessages[i];if(msg.role===MessageRole.ASSISTANT){const turnToolMsgs=collectToolMessages(toolMessages,i+1),isLastTurn=i+1+turnToolMsgs.length>=toolMessages.length;sections.push(...deriveSingleTurnSections(msg,turnToolMsgs,isLastTurn?streamingToolCalls:[],isLastTurn&&isStreaming)),i+=1+ +turnToolMsgs.length}else i++}return sections}function collectToolMessages(messages,startIndex){const result=[];for(let i=startIndex;i<messages.length&&messages[i].role===MessageRole.TOOL;i++)result.push(messages[i]);return result}function parseToolResultWithImages(toolResult,extras){return toolResult.split(NEWLINE_SEPARATOR).map(line=>{const match=line.match(ATTACHMENT_SAVED_REGEX);if(!match||!extras)return{text:line};const attachmentName=match[1],image2=extras.find(e=>e.type===AttachmentType.IMAGE&& +e.name===attachmentName);return{text:line,image:image2}})}function parseToolCalls(toolCallsJson){if(!toolCallsJson)return[];try{const parsed=JSON.parse(toolCallsJson);return Array.isArray(parsed)?parsed:[]}catch{return[]}}function hasAgenticContent(message,toolMessages=[]){return message.toolCalls&&parseToolCalls(message.toolCalls).length>0?!0:toolMessages.length>0}var dexie_min$1={exports:{}},dexie_min=dexie_min$1.exports,hasRequiredDexie_min;function requireDexie_min(){return hasRequiredDexie_min|| +(hasRequiredDexie_min=1,(function(module,exports$1){(function(e,t){module.exports=t()})(dexie_min,function(){var s2=function(e2,t2){return(s2=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e3,t3){e3.__proto__=t3}||function(e3,t3){for(var n2 in t3)Object.prototype.hasOwnProperty.call(t3,n2)&&(e3[n2]=t3[n2])})(e2,t2)},_=function(){return(_=Object.assign||function(e2){for(var t2,n2=1,r3=arguments.length;n2<r3;n2++)for(var i2 in t2=arguments[n2])Object.prototype.hasOwnProperty.call( +t2,i2)&&(e2[i2]=t2[i2]);return e2}).apply(this,arguments)};function i(e2,t2,n2){for(var r3,i2=0,o2=t2.length;i2<o2;i2++)!r3&&i2 in t2||((r3=r3||Array.prototype.slice.call(t2,0,i2))[i2]=t2[i2]);return e2.concat(r3||Array.prototype.slice.call(t2))}var f=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:commonjsGlobal,x=Object.keys,k=Array.isArray;function a(t2,n2){return typeof n2!="object"||x(n2).forEach(function(e2){t2[e2]=n2[e2]}),t2}typeof Promise>"u"||f.Promise||(f. +Promise=Promise);var c2=Object.getPrototypeOf,n={}.hasOwnProperty;function m(e2,t2){return n.call(e2,t2)}function r2(t2,n2){typeof n2=="function"&&(n2=n2(c2(t2))),(typeof Reflect>"u"?x:Reflect.ownKeys)(n2).forEach(function(e2){l(t2,e2,n2[e2])})}var u=Object.defineProperty;function l(e2,t2,n2,r3){u(e2,t2,a(n2&&m(n2,"get")&&typeof n2.get=="function"?{get:n2.get,set:n2.set,configurable:!0}:{value:n2,configurable:!0,writable:!0},r3))}function o(t2){return{from:function(e2){return t2.prototype=Object. +create(e2.prototype),l(t2.prototype,"constructor",t2),{extend:r2.bind(null,t2.prototype)}}}}var h2=Object.getOwnPropertyDescriptor,d2=[].slice;function b(e2,t2,n2){return d2.call(e2,t2,n2)}function p2(e2,t2){return t2(e2)}function y(e2){if(!e2)throw new Error("Assertion Failed")}function v(e2){f.setImmediate?setImmediate(e2):setTimeout(e2,0)}function O(e2,t2){if(typeof t2=="string"&&m(e2,t2))return e2[t2];if(!t2)return e2;if(typeof t2!="string"){for(var n2=[],r3=0,i2=t2.length;r3<i2;++r3){var o2=O( +e2,t2[r3]);n2.push(o2)}return n2}var a2=t2.indexOf(".");if(a2!==-1){var u2=e2[t2.substr(0,a2)];return u2==null?void 0:O(u2,t2.substr(a2+1))}}function P(e2,t2,n2){if(e2&&t2!==void 0&&!("isFrozen"in Object&&Object.isFrozen(e2)))if(typeof t2!="string"&&"length"in t2){y(typeof n2!="string"&&"length"in n2);for(var r3=0,i2=t2.length;r3<i2;++r3)P(e2,t2[r3],n2[r3])}else{var o2,a2,u2=t2.indexOf(".");u2!==-1?(o2=t2.substr(0,u2),(a2=t2.substr(u2+1))===""?n2===void 0?k(e2)&&!isNaN(parseInt(o2))?e2.splice(o2, +1):delete e2[o2]:e2[o2]=n2:P(u2=!(u2=e2[o2])||!m(e2,o2)?e2[o2]={}:u2,a2,n2)):n2===void 0?k(e2)&&!isNaN(parseInt(t2))?e2.splice(t2,1):delete e2[t2]:e2[t2]=n2}}function g(e2){var t2,n2={};for(t2 in e2)m(e2,t2)&&(n2[t2]=e2[t2]);return n2}var t=[].concat;function w(e2){return t.apply([],e2)}var e="BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKe\ +y".split(",").concat(w([8,16,32,64].map(function(t2){return["Int","Uint","Float"].map(function(e2){return e2+t2+"Array"})}))).filter(function(e2){return f[e2]}),K=new Set(e.map(function(e2){return f[e2]})),E=null;function S2(e2){return E=new WeakMap,e2=(function e3(t2){if(!t2||typeof t2!="object")return t2;var n2=E.get(t2);if(n2)return n2;if(k(t2)){n2=[],E.set(t2,n2);for(var r3=0,i2=t2.length;r3<i2;++r3)n2.push(e3(t2[r3]))}else if(K.has(t2.constructor))n2=t2;else{var o2,a2=c2(t2);for(o2 in n2=a2=== +Object.prototype?{}:Object.create(a2),E.set(t2,n2),t2)m(t2,o2)&&(n2[o2]=e3(t2[o2]))}return n2})(e2),E=null,e2}var j={}.toString;function A(e2){return j.call(e2).slice(8,-1)}var C=typeof Symbol<"u"?Symbol.iterator:"@@iterator",T2=typeof C=="symbol"?function(e2){var t2;return e2!=null&&(t2=e2[C])&&t2.apply(e2)}:function(){return null};function q2(e2,t2){return t2=e2.indexOf(t2),0<=t2&&e2.splice(t2,1),0<=t2}var D2={};function I(e2){var t2,n2,r3,i2;if(arguments.length===1){if(k(e2))return e2.slice(); +if(this===D2&&typeof e2=="string")return[e2];if(i2=T2(e2)){for(n2=[];!(r3=i2.next()).done;)n2.push(r3.value);return n2}if(e2==null)return[e2];if(typeof(t2=e2.length)!="number")return[e2];for(n2=new Array(t2);t2--;)n2[t2]=e2[t2];return n2}for(t2=arguments.length,n2=new Array(t2);t2--;)n2[t2]=arguments[t2];return n2}var B=typeof Symbol<"u"?function(e2){return e2[Symbol.toStringTag]==="AsyncFunction"}:function(){return!1},R=["Unknown","Constraint","Data","TransactionInactive","ReadOnly","Version","\ +NotFound","InvalidState","InvalidAccess","Abort","Timeout","QuotaExceeded","Syntax","DataClone"],F=["Modify","Bulk","OpenFailed","VersionChange","Schema","Upgrade","InvalidTable","MissingAPI","NoSuchDatabase","InvalidArgument","SubTransaction","Unsupported","Internal","DatabaseClosed","PrematureCommit","ForeignAwait"].concat(R),M={VersionChanged:"Database version changed by other database connection",DatabaseClosed:"Database has been closed",Abort:"Transaction aborted",TransactionInactive:"Trans\ +action has already completed or failed",MissingAPI:"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb"};function N(e2,t2){this.name=e2,this.message=t2}function L(e2,t2){return e2+". Errors: "+Object.keys(t2).map(function(e3){return t2[e3].toString()}).filter(function(e3,t3,n2){return n2.indexOf(e3)===t3}).join(` `)}function U(e2,t2,n2,r3){this.failures=t2,this.failedKeys=r3,this.successCount=n2,this.message=L(e2,t2)}function V(e2,t2){this.name="BulkError",this.failures=Object.keys(t2).map(function(e3){return t2[e3]}),this.failuresByPos=t2,this.message=L(e2,this.failures)}o(N).from(Error).extend({toString:function(){return this.name+": "+this.message}}),o(U).from(N),o(V).from(N);var z=F.reduce(function(e2,t2){return e2[t2]=t2+"Error",e2},{}),W=N,Y=F.reduce(function(e2,n2){var r3=n2+"Error";function t2(e3,t3){ this.name=r3,e3?typeof e3=="string"?(this.message="".concat(e3).concat(t3?` `+t3:""),this.inner=t3||null):typeof e3=="object"&&(this.message="".concat(e3.name," ").concat(e3.message),this.inner=e3):(this.message=M[n2]||r3,this.inner=null)}return o(t2).from(W),e2[n2]=t2,e2},{});Y.Syntax=SyntaxError,Y.Type=TypeError,Y.Range=RangeError;var $=R.reduce(function(e2,t2){return e2[t2+"Error"]=Y[t2],e2},{}),Q=F.reduce(function(e2,t2){return["Syntax","Type","Range"].indexOf(t2)===-1&&(e2[t2+"Error"]=Y[t2]),e2},{});function G(){}function X2(e2){return e2}function H(t2,n2){return t2== null||t2===X2?n2:function(e2){return n2(t2(e2))}}function J(e2,t2){return function(){e2.apply(this,arguments),t2.apply(this,arguments)}}function Z(i2,o2){return i2===G?o2:function(){var e2=i2.apply(this,arguments);e2!==void 0&&(arguments[0]=e2);var t2=this.onsuccess,n2=this.onerror;this.onsuccess=null,this.onerror=null;var r3=o2.apply(this,arguments);return t2&&(this.onsuccess=this.onsuccess?J(t2,this.onsuccess):t2),n2&&(this.onerror=this.onerror?J(n2,this.onerror):n2),r3!==void 0?r3:e2}}function ee(n2,r3){ return n2===G?r3:function(){n2.apply(this,arguments);var e2=this.onsuccess,t2=this.onerror;this.onsuccess=this.onerror=null,r3.apply(this,arguments),e2&&(this.onsuccess=this.onsuccess?J(e2,this.onsuccess):e2),t2&&(this.onerror=this.onerror?J(t2,this.onerror):t2)}}function te(i2,o2){return i2===G?o2:function(e2){var t2=i2.apply(this,arguments);a(e2,t2);var n2=this.onsuccess,r3=this.onerror;return this.onsuccess=null,this.onerror=null,e2=o2.apply(this,arguments),n2&&(this.onsuccess=this.onsuccess? J(n2,this.onsuccess):n2),r3&&(this.onerror=this.onerror?J(r3,this.onerror):r3),t2===void 0?e2===void 0?void 0:e2:a(t2,e2)}}function ne(e2,t2){return e2===G?t2:function(){return t2.apply(this,arguments)!==!1&&e2.apply(this,arguments)}}function re2(i2,o2){return i2===G?o2:function(){var e2=i2.apply(this,arguments);if(e2&&typeof e2.then=="function"){for(var t2=this,n2=arguments.length,r3=new Array(n2);n2--;)r3[n2]=arguments[n2];return e2.then(function(){return o2.apply(t2,r3)})}return o2.apply(this, -arguments)}}Q.ModifyError=U,Q.DexieError=N,Q.BulkError=V;var ie=typeof location<"u"&&/^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href);function oe(e2){ie=e2}var ae={},ue=100,e=typeof Promise>"u"?[]:function(){var e2=Promise.resolve();if(typeof crypto>"u"||!crypto.subtle)return[e2,c2(e2),e2];var t2=crypto.subtle.digest("SHA-512",new Uint8Array([0]));return[t2,c2(t2),e2]}(),R=e[0],F=e[1],e=e[2],F=F&&F.then,se=R&&R.constructor,ce=!!e,le=function(e2,t2){be.push([e2,t2]),he&&(queueMicrotask( +arguments)}}Q.ModifyError=U,Q.DexieError=N,Q.BulkError=V;var ie=typeof location<"u"&&/^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href);function oe(e2){ie=e2}var ae={},ue=100,e=typeof Promise>"u"?[]:(function(){var e2=Promise.resolve();if(typeof crypto>"u"||!crypto.subtle)return[e2,c2(e2),e2];var t2=crypto.subtle.digest("SHA-512",new Uint8Array([0]));return[t2,c2(t2),e2]})(),R=e[0],F=e[1],e=e[2],F=F&&F.then,se=R&&R.constructor,ce=!!e,le=function(e2,t2){be.push([e2,t2]),he&&(queueMicrotask( Se),he=!1)},fe=!0,he=!0,de=[],pe=[],ye=X2,ve={id:"global",global:!0,ref:0,unhandleds:[],onunhandled:G,pgp:!1,env:{},finalize:G},me=ve,be=[],ge=0,we=[];function _e(e2){if(typeof this!="object")throw new TypeError("Promises must be constructed via new");this._listeners=[],this._lib=!1;var t2=this._PSD=me;if(typeof e2!="function"){if(e2!==ae)throw new TypeError("Not a function");return this._state=arguments[1],this._value=arguments[2],void(this._state===!1&&Oe(this,this._value))}this._state=null,this. -_value=null,++t2.ref,function t3(r3,e3){try{e3(function(n2){if(r3._state===null){if(n2===r3)throw new TypeError("A promise cannot be resolved with itself.");var e4=r3._lib&&je();n2&&typeof n2.then=="function"?t3(r3,function(e5,t4){n2 instanceof _e?n2._then(e5,t4):n2.then(e5,t4)}):(r3._state=!0,r3._value=n2,Pe(r3)),e4&&Ae()}},Oe.bind(null,r3))}catch(e4){Oe(r3,e4)}}(this,e2)}var xe={get:function(){var u2=me,t2=Fe;function e2(n2,r3){var i2=this,o2=!u2.global&&(u2!==me||t2!==Fe),a2=o2&&!Ue(),e3=new _e( +_value=null,++t2.ref,(function t3(r3,e3){try{e3(function(n2){if(r3._state===null){if(n2===r3)throw new TypeError("A promise cannot be resolved with itself.");var e4=r3._lib&&je();n2&&typeof n2.then=="function"?t3(r3,function(e5,t4){n2 instanceof _e?n2._then(e5,t4):n2.then(e5,t4)}):(r3._state=!0,r3._value=n2,Pe(r3)),e4&&Ae()}},Oe.bind(null,r3))}catch(e4){Oe(r3,e4)}})(this,e2)}var xe={get:function(){var u2=me,t2=Fe;function e2(n2,r3){var i2=this,o2=!u2.global&&(u2!==me||t2!==Fe),a2=o2&&!Ue(),e3=new _e( function(e4,t3){Ke(i2,new ke(Qe(n2,u2,o2,a2),Qe(r3,u2,o2,a2),e4,t3,u2))});return this._consoleTask&&(e3._consoleTask=this._consoleTask),e3}return e2.prototype=ae,e2},set:function(e2){l(this,"then",e2&&e2.prototype===ae?xe:{get:function(){return e2},set:xe.set})}};function ke(e2,t2,n2,r3,i2){this.onFulfilled=typeof e2=="function"?e2:null,this.onRejected=typeof t2=="function"?t2:null,this.resolve=n2,this.reject=r3,this.psd=i2}function Oe(e2,t2){var n2,r3;pe.push(t2),e2._state===null&&(n2=e2._lib&& je(),t2=ye(t2),e2._state=!1,e2._value=t2,r3=e2,de.some(function(e3){return e3._value===r3._value})||de.push(r3),Pe(e2),n2&&Ae())}function Pe(e2){var t2=e2._listeners;e2._listeners=[];for(var n2=0,r3=t2.length;n2<r3;++n2)Ke(e2,t2[n2]);var i2=e2._PSD;--i2.ref||i2.finalize(),ge===0&&(++ge,le(function(){--ge==0&&Ce()},[]))}function Ke(e2,t2){if(e2._state!==null){var n2=e2._state?t2.onFulfilled:t2.onRejected;if(n2===null)return(e2._state?t2.resolve:t2.reject)(e2._value);++t2.psd.ref,++ge,le(Ee,[n2,e2, -t2])}else e2._listeners.push(t2)}function Ee(e2,t2,n2){try{var r3,i2=t2._value;!t2._state&&pe.length&&(pe=[]),r3=ie&&t2._consoleTask?t2._consoleTask.run(function(){return e2(i2)}):e2(i2),t2._state||pe.indexOf(i2)!==-1||function(e3){for(var t3=de.length;t3;)if(de[--t3]._value===e3._value)return de.splice(t3,1)}(t2),n2.resolve(r3)}catch(e3){n2.reject(e3)}finally{--ge==0&&Ce(),--n2.psd.ref||n2.psd.finalize()}}function Se(){$e(ve,function(){je()&&Ae()})}function je(){var e2=fe;return he=fe=!1,e2}function Ae(){ +t2])}else e2._listeners.push(t2)}function Ee(e2,t2,n2){try{var r3,i2=t2._value;!t2._state&&pe.length&&(pe=[]),r3=ie&&t2._consoleTask?t2._consoleTask.run(function(){return e2(i2)}):e2(i2),t2._state||pe.indexOf(i2)!==-1||(function(e3){for(var t3=de.length;t3;)if(de[--t3]._value===e3._value)return de.splice(t3,1)})(t2),n2.resolve(r3)}catch(e3){n2.reject(e3)}finally{--ge==0&&Ce(),--n2.psd.ref||n2.psd.finalize()}}function Se(){$e(ve,function(){je()&&Ae()})}function je(){var e2=fe;return he=fe=!1,e2}function Ae(){ var e2,t2,n2;do for(;0<be.length;)for(e2=be,be=[],n2=e2.length,t2=0;t2<n2;++t2){var r3=e2[t2];r3[0].apply(null,r3[1])}while(0<be.length);he=fe=!0}function Ce(){var e2=de;de=[],e2.forEach(function(e3){e3._PSD.onunhandled.call(null,e3._value,e3)});for(var t2=we.slice(0),n2=t2.length;n2;)t2[--n2]()}function Te(e2){return new _e(ae,!1,e2)}function qe(n2,r3){var i2=me;return function(){var e2=je(),t2=me;try{return We(i2,!0),n2.apply(this,arguments)}catch(e3){r3&&r3(e3)}finally{We(t2,!1),e2&&Ae()}}}r2( _e.prototype,{then:xe,_then:function(e2,t2){Ke(this,new ke(null,null,e2,t2,me))},catch:function(e2){if(arguments.length===1)return this.then(null,e2);var t2=e2,n2=arguments[1];return typeof t2=="function"?this.then(null,function(e3){return(e3 instanceof t2?n2:Te)(e3)}):this.then(null,function(e3){return(e3&&e3.name===t2?n2:Te)(e3)})},finally:function(t2){return this.then(function(e2){return _e.resolve(t2()).then(function(){return e2})},function(e2){return _e.resolve(t2()).then(function(){return Te( e2)})})},timeout:function(r3,i2){var o2=this;return r3<1/0?new _e(function(e2,t2){var n2=setTimeout(function(){return t2(new Y.Timeout(i2))},r3);o2.then(e2,t2).finally(clearTimeout.bind(null,n2))}):this}}),typeof Symbol<"u"&&Symbol.toStringTag&&l(_e.prototype,Symbol.toStringTag,"Dexie.Promise"),ve.env=Ye(),r2(_e,{all:function(){var o2=I.apply(null,arguments).map(Ve);return new _e(function(n2,r3){o2.length===0&&n2([]);var i2=o2.length;o2.forEach(function(e2,t2){return _e.resolve(e2).then(function(e3){ @@ -3546,17 +3629,17 @@ allSettled,any:_e.any,resolve:_e.resolve,reject:_e.reject}:{},t2&&a(o2,t2),++i2. var e2=Be[Be.length-1];Be.pop(),We(e2,!1)}function We(e2,t2){var n2,r3=me;(t2?!De.echoes||Re++&&e2===me:!Re||--Re&&e2===me)||queueMicrotask(t2?(function(e3){++Fe,De.echoes&&--De.echoes!=0||(De.echoes=De.awaits=De.id=0),Be.push(me),We(e3,!0)}).bind(null,e2):ze),e2!==me&&(me=e2,r3===ve&&(ve.env=Ye()),ce&&(n2=ve.env.Promise,t2=e2.env,(r3.global||e2.global)&&(Object.defineProperty(f,"Promise",t2.PromiseProp),n2.all=t2.all,n2.race=t2.race,n2.resolve=t2.resolve,n2.reject=t2.reject,t2.allSettled&&(n2.allSettled= t2.allSettled),t2.any&&(n2.any=t2.any))))}function Ye(){var e2=f.Promise;return ce?{Promise:e2,PromiseProp:Object.getOwnPropertyDescriptor(f,"Promise"),all:e2.all,race:e2.race,allSettled:e2.allSettled,any:e2.any,resolve:e2.resolve,reject:e2.reject}:{}}function $e(e2,t2,n2,r3,i2){var o2=me;try{return We(e2,!0),t2(n2,r3,i2)}finally{We(o2,!1)}}function Qe(t2,n2,r3,i2){return typeof t2!="function"?t2:function(){var e2=me;r3&&Le(),We(n2,!0);try{return t2.apply(this,arguments)}finally{We(e2,!1),i2&&queueMicrotask( Ue)}}}function Ge(e2){Promise===se&&De.echoes===0?Re===0?e2():enqueueNativeMicroTask(e2):setTimeout(e2,0)}(""+F).indexOf("[native code]")===-1&&(Le=Ue=G);var Xe=_e.reject,He="￿",Je="Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.",Ze="String expected.",et=[],tt="__dbnames",nt="readonly",rt="readwrite";function it(e2,t2){return e2?t2?function(){return e2.apply(this,arguments)&&t2.apply(this,arguments)}:e2:t2}var ot={type:3,lower:-1/0,lowerOpen:!1, -upper:[[]],upperOpen:!1};function at(t2){return typeof t2!="string"||/\./.test(t2)?function(e2){return e2}:function(e2){return e2[t2]===void 0&&t2 in e2&&delete(e2=S2(e2))[t2],e2}}function ut(){throw Y.Type()}function st(e2,t2){try{var n2=ct(e2),r3=ct(t2);if(n2!==r3)return n2==="Array"?1:r3==="Array"?-1:n2==="binary"?1:r3==="binary"?-1:n2==="string"?1:r3==="string"?-1:n2==="Date"?1:r3!=="Date"?NaN:-1;switch(n2){case"number":case"Date":case"string":return t2<e2?1:e2<t2?-1:0;case"binary":return function(e3,t3){ -for(var n3=e3.length,r4=t3.length,i2=n3<r4?n3:r4,o2=0;o2<i2;++o2)if(e3[o2]!==t3[o2])return e3[o2]<t3[o2]?-1:1;return n3===r4?0:n3<r4?-1:1}(lt(e2),lt(t2));case"Array":return function(e3,t3){for(var n3=e3.length,r4=t3.length,i2=n3<r4?n3:r4,o2=0;o2<i2;++o2){var a2=st(e3[o2],t3[o2]);if(a2!==0)return a2}return n3===r4?0:n3<r4?-1:1}(e2,t2)}}catch{}return NaN}function ct(e2){var t2=typeof e2;return t2!="object"?t2:ArrayBuffer.isView(e2)?"binary":(e2=A(e2),e2==="ArrayBuffer"?"binary":e2)}function lt(e2){ +upper:[[]],upperOpen:!1};function at(t2){return typeof t2!="string"||/\./.test(t2)?function(e2){return e2}:function(e2){return e2[t2]===void 0&&t2 in e2&&delete(e2=S2(e2))[t2],e2}}function ut(){throw Y.Type()}function st(e2,t2){try{var n2=ct(e2),r3=ct(t2);if(n2!==r3)return n2==="Array"?1:r3==="Array"?-1:n2==="binary"?1:r3==="binary"?-1:n2==="string"?1:r3==="string"?-1:n2==="Date"?1:r3!=="Date"?NaN:-1;switch(n2){case"number":case"Date":case"string":return t2<e2?1:e2<t2?-1:0;case"binary":return(function(e3,t3){ +for(var n3=e3.length,r4=t3.length,i2=n3<r4?n3:r4,o2=0;o2<i2;++o2)if(e3[o2]!==t3[o2])return e3[o2]<t3[o2]?-1:1;return n3===r4?0:n3<r4?-1:1})(lt(e2),lt(t2));case"Array":return(function(e3,t3){for(var n3=e3.length,r4=t3.length,i2=n3<r4?n3:r4,o2=0;o2<i2;++o2){var a2=st(e3[o2],t3[o2]);if(a2!==0)return a2}return n3===r4?0:n3<r4?-1:1})(e2,t2)}}catch{}return NaN}function ct(e2){var t2=typeof e2;return t2!="object"?t2:ArrayBuffer.isView(e2)?"binary":(e2=A(e2),e2==="ArrayBuffer"?"binary":e2)}function lt(e2){ return e2 instanceof Uint8Array?e2:ArrayBuffer.isView(e2)?new Uint8Array(e2.buffer,e2.byteOffset,e2.byteLength):new Uint8Array(e2)}var ft=(ht.prototype._trans=function(e2,r3,t2){var n2=this._tx||me.trans,i2=this.name,o2=ie&&typeof console<"u"&&console.createTask&&console.createTask("Dexie: ".concat(e2==="readonly"?"read":"write"," ").concat(this.name));function a2(e3,t3,n3){if(!n3.schema[i2])throw new Y.NotFound("Table "+i2+" not part of transaction");return r3(n3.idbtrans,n3)}var u2=je();try{var s3=n2&& -n2.db._novip===this.db._novip?n2===me.trans?n2._promise(e2,a2,t2):Ne(function(){return n2._promise(e2,a2,t2)},{trans:n2,transless:me.transless||me}):function t3(n3,r4,i3,o3){if(n3.idbdb&&(n3._state.openComplete||me.letThrough||n3._vip)){var a3=n3._createTransaction(r4,i3,n3._dbSchema);try{a3.create(),n3._state.PR1398_maxLoop=3}catch(e3){return e3.name===z.InvalidState&&n3.isOpen()&&0<--n3._state.PR1398_maxLoop?(console.warn("Dexie: Need to reopen db"),n3.close({disableAutoOpen:!1}),n3.open().then( +n2.db._novip===this.db._novip?n2===me.trans?n2._promise(e2,a2,t2):Ne(function(){return n2._promise(e2,a2,t2)},{trans:n2,transless:me.transless||me}):(function t3(n3,r4,i3,o3){if(n3.idbdb&&(n3._state.openComplete||me.letThrough||n3._vip)){var a3=n3._createTransaction(r4,i3,n3._dbSchema);try{a3.create(),n3._state.PR1398_maxLoop=3}catch(e3){return e3.name===z.InvalidState&&n3.isOpen()&&0<--n3._state.PR1398_maxLoop?(console.warn("Dexie: Need to reopen db"),n3.close({disableAutoOpen:!1}),n3.open().then( function(){return t3(n3,r4,i3,o3)})):Xe(e3)}return a3._promise(r4,function(e3,t4){return Ne(function(){return me.trans=a3,o3(e3,t4,a3)})}).then(function(e3){if(r4==="readwrite")try{a3.idbtrans.commit()}catch{}return r4==="readonly"?e3:a3._completion.then(function(){return e3})})}if(n3._state.openComplete)return Xe(new Y.DatabaseClosed(n3._state.dbOpenError));if(!n3._state.isBeingOpened){if(!n3._state.autoOpen)return Xe(new Y.DatabaseClosed);n3.open().catch(G)}return n3._state.dbReadyPromise.then( -function(){return t3(n3,r4,i3,o3)})}(this.db,e2,[this.name],a2);return o2&&(s3._consoleTask=o2,s3=s3.catch(function(e3){return console.trace(e3),Xe(e3)})),s3}finally{u2&&Ae()}},ht.prototype.get=function(t2,e2){var n2=this;return t2&&t2.constructor===Object?this.where(t2).first(e2):t2==null?Xe(new Y.Type("Invalid argument to Table.get()")):this._trans("readonly",function(e3){return n2.core.get({trans:e3,key:t2}).then(function(e4){return n2.hook.reading.fire(e4)})}).then(e2)},ht.prototype.where=function(o2){ +function(){return t3(n3,r4,i3,o3)})})(this.db,e2,[this.name],a2);return o2&&(s3._consoleTask=o2,s3=s3.catch(function(e3){return console.trace(e3),Xe(e3)})),s3}finally{u2&&Ae()}},ht.prototype.get=function(t2,e2){var n2=this;return t2&&t2.constructor===Object?this.where(t2).first(e2):t2==null?Xe(new Y.Type("Invalid argument to Table.get()")):this._trans("readonly",function(e3){return n2.core.get({trans:e3,key:t2}).then(function(e4){return n2.hook.reading.fire(e4)})}).then(e2)},ht.prototype.where=function(o2){ if(typeof o2=="string")return new this.db.WhereClause(this,o2);if(k(o2))return new this.db.WhereClause(this,"[".concat(o2.join("+"),"]"));var n2=x(o2);if(n2.length===1)return this.where(n2[0]).equals(o2[n2[0]]);var e2=this.schema.indexes.concat(this.schema.primKey).filter(function(t3){if(t3.compound&&n2.every(function(e4){return 0<=t3.keyPath.indexOf(e4)})){for(var e3=0;e3<n2.length;++e3)if(n2.indexOf(t3.keyPath[e3])===-1)return!1;return!0}return!1}).sort(function(e3,t3){return e3.keyPath.length- t3.keyPath.length})[0];if(e2&&this.db._maxKey!==He){var t2=e2.keyPath.slice(0,n2.length);return this.where(t2).equals(t2.map(function(e3){return o2[e3]}))}!e2&&ie&&console.warn("The query ".concat(JSON.stringify(o2)," on ").concat(this.name," would benefit from a ")+"compound index [".concat(n2.join("+"),"]"));var a2=this.schema.idxByName;function u2(e3,t3){return st(e3,t3)===0}var r3=n2.reduce(function(e3,t3){var n3=e3[0],r4=e3[1],e3=a2[t3],i2=o2[t3];return[n3||e3,n3||!e3?it(r4,e3&&e3.multi?function(e4){ return e4=O(e4,t3),k(e4)&&e4.some(function(e5){return u2(i2,e5)})}:function(e4){return u2(i2,O(e4,t3))}):r4]},[null,null]),t2=r3[0],r3=r3[1];return t2?this.where(t2.name).equals(o2[t2.keyPath]).filter(r3):e2?this.filter(r3):this.where(n2).equals("")},ht.prototype.filter=function(e2){return this.toCollection().and(e2)},ht.prototype.count=function(e2){return this.toCollection().count(e2)},ht.prototype.offset=function(e2){return this.toCollection().offset(e2)},ht.prototype.limit=function(e2){return this. toCollection().limit(e2)},ht.prototype.each=function(e2){return this.toCollection().each(e2)},ht.prototype.toArray=function(e2){return this.toCollection().toArray(e2)},ht.prototype.toCollection=function(){return new this.db.Collection(new this.db.WhereClause(this))},ht.prototype.orderBy=function(e2){return new this.db.Collection(new this.db.WhereClause(this,k(e2)?"[".concat(e2.join("+"),"]"):e2))},ht.prototype.reverse=function(){return this.toCollection().reverse()},ht.prototype.mapToClass=function(r3){ -var e2,t2=this.db,n2=this.name;function i2(){return e2!==null&&e2.apply(this,arguments)||this}(this.schema.mappedClass=r3).prototype instanceof ut&&(function(e3,t3){if(typeof t3!="function"&&t3!==null)throw new TypeError("Class extends value "+String(t3)+" is not a constructor or null");function n3(){this.constructor=e3}s2(e3,t3),e3.prototype=t3===null?Object.create(t3):(n3.prototype=t3.prototype,new n3)}(i2,e2=r3),Object.defineProperty(i2.prototype,"db",{get:function(){return t2},enumerable:!1, +var e2,t2=this.db,n2=this.name;function i2(){return e2!==null&&e2.apply(this,arguments)||this}(this.schema.mappedClass=r3).prototype instanceof ut&&((function(e3,t3){if(typeof t3!="function"&&t3!==null)throw new TypeError("Class extends value "+String(t3)+" is not a constructor or null");function n3(){this.constructor=e3}s2(e3,t3),e3.prototype=t3===null?Object.create(t3):(n3.prototype=t3.prototype,new n3)})(i2,e2=r3),Object.defineProperty(i2.prototype,"db",{get:function(){return t2},enumerable:!1, configurable:!0}),i2.prototype.table=function(){return n2},r3=i2);for(var o2=new Set,a2=r3.prototype;a2;a2=c2(a2))Object.getOwnPropertyNames(a2).forEach(function(e3){return o2.add(e3)});function u2(e3){if(!e3)return e3;var t3,n3=Object.create(r3.prototype);for(t3 in e3)if(!o2.has(t3))try{n3[t3]=e3[t3]}catch{}return n3}return this.schema.readHook&&this.hook.reading.unsubscribe(this.schema.readHook),this.schema.readHook=u2,this.hook("reading",u2),r3},ht.prototype.defineClass=function(){return this. mapToClass(function(e2){a(this,e2)})},ht.prototype.add=function(t2,n2){var r3=this,e2=this.schema.primKey,i2=e2.auto,o2=e2.keyPath,a2=t2;return o2&&i2&&(a2=at(o2)(t2)),this._trans("readwrite",function(e3){return r3.core.mutate({trans:e3,type:"add",keys:n2!=null?[n2]:null,values:[a2]})}).then(function(e3){return e3.numFailures?_e.reject(e3.failures[0]):e3.lastResult}).then(function(e3){if(o2)try{P(t2,o2,e3)}catch{}return e3})},ht.prototype.update=function(e2,t2){return typeof e2!="object"||k(e2)? this.where(":id").equals(e2).modify(t2):(e2=O(e2,this.schema.primKey.keyPath),e2===void 0?Xe(new Y.InvalidArgument("Given object does not contain its primary key")):this.where(":id").equals(e2).modify(t2))},ht.prototype.put=function(t2,n2){var r3=this,e2=this.schema.primKey,i2=e2.auto,o2=e2.keyPath,a2=t2;return o2&&i2&&(a2=at(o2)(t2)),this._trans("readwrite",function(e3){return r3.core.mutate({trans:e3,type:"put",values:[a2],keys:n2!=null?[n2]:null})}).then(function(e3){return e3.numFailures?_e. @@ -3590,8 +3673,8 @@ changeSpec:typeof w2!="function"&&w2,isAdditionalChunk:0<s4}).then(function(e4){ ifying one or more objects",s3,c3,t2);return l2.length})})})},Pt.prototype.delete=function(){var i2=this._ctx,n2=i2.range;return yt(i2)&&(i2.isPrimKey||n2.type===3)?this._write(function(e2){var t2=i2.table.core.schema.primaryKey,r3=n2;return i2.table.core.count({trans:e2,query:{index:t2,range:r3}}).then(function(n3){return i2.table.core.mutate({trans:e2,type:"deleteRange",range:r3}).then(function(e3){var t3=e3.failures;if(e3.lastResult,e3.results,e3=e3.numFailures,e3)throw new U("Could not delet\ e some values",Object.keys(t3).map(function(e4){return t3[e4]}),n3-e3);return n3-e3})})}):this.modify(Kt)},Pt);function Pt(){}var Kt=function(e2,t2){return t2.value=null};function Et(e2,t2){return e2<t2?-1:e2===t2?0:1}function St(e2,t2){return t2<e2?-1:e2===t2?0:1}function jt(e2,t2,n2){return e2=e2 instanceof Dt?new e2.Collection(e2):e2,e2._ctx.error=new(n2||TypeError)(t2),e2}function At(e2){return new e2.Collection(e2,function(){return qt("")}).limit(0)}function Ct(e2,s3,n2,r3){var i2,c3,l2,f2, h3,d3,p3,y2=n2.length;if(!n2.every(function(e3){return typeof e3=="string"}))return jt(e2,Ze);function t2(e3){i2=e3==="next"?function(e4){return e4.toUpperCase()}:function(e4){return e4.toLowerCase()},c3=e3==="next"?function(e4){return e4.toLowerCase()}:function(e4){return e4.toUpperCase()},l2=e3==="next"?Et:St;var t3=n2.map(function(e4){return{lower:c3(e4),upper:i2(e4)}}).sort(function(e4,t4){return l2(e4.lower,t4.lower)});f2=t3.map(function(e4){return e4.upper}),h3=t3.map(function(e4){return e4. -lower}),p3=(d3=e3)==="next"?"":r3}t2("next"),e2=new e2.Collection(e2,function(){return Tt(f2[0],h3[y2-1]+r3)}),e2._ondirectionchange=function(e3){t2(e3)};var v2=0;return e2._addAlgorithm(function(e3,t3,n3){var r4=e3.key;if(typeof r4!="string")return!1;var i3=c3(r4);if(s3(i3,h3,v2))return!0;for(var o2=null,a2=v2;a2<y2;++a2){var u2=function(e4,t4,n4,r5,i4,o3){for(var a3=Math.min(e4.length,r5.length),u3=-1,s4=0;s4<a3;++s4){var c4=t4[s4];if(c4!==r5[s4])return i4(e4[s4],n4[s4])<0?e4.substr(0,s4)+n4[s4]+ -n4.substr(s4+1):i4(e4[s4],r5[s4])<0?e4.substr(0,s4)+r5[s4]+n4.substr(s4+1):0<=u3?e4.substr(0,u3)+t4[u3]+n4.substr(u3+1):null;i4(e4[s4],c4)<0&&(u3=s4)}return a3<r5.length&&o3==="next"?e4+n4.substr(e4.length):a3<e4.length&&o3==="prev"?e4.substr(0,n4.length):u3<0?null:e4.substr(0,u3)+r5[u3]+n4.substr(u3+1)}(r4,i3,f2[a2],h3[a2],l2,d3);u2===null&&o2===null?v2=a2+1:(o2===null||0<l2(o2,u2))&&(o2=u2)}return t3(o2!==null?function(){e3.continue(o2+p3)}:n3),!1}),e2}function Tt(e2,t2,n2,r3){return{type:2,lower:e2, +lower}),p3=(d3=e3)==="next"?"":r3}t2("next"),e2=new e2.Collection(e2,function(){return Tt(f2[0],h3[y2-1]+r3)}),e2._ondirectionchange=function(e3){t2(e3)};var v2=0;return e2._addAlgorithm(function(e3,t3,n3){var r4=e3.key;if(typeof r4!="string")return!1;var i3=c3(r4);if(s3(i3,h3,v2))return!0;for(var o2=null,a2=v2;a2<y2;++a2){var u2=(function(e4,t4,n4,r5,i4,o3){for(var a3=Math.min(e4.length,r5.length),u3=-1,s4=0;s4<a3;++s4){var c4=t4[s4];if(c4!==r5[s4])return i4(e4[s4],n4[s4])<0?e4.substr(0,s4)+n4[s4]+ +n4.substr(s4+1):i4(e4[s4],r5[s4])<0?e4.substr(0,s4)+r5[s4]+n4.substr(s4+1):0<=u3?e4.substr(0,u3)+t4[u3]+n4.substr(u3+1):null;i4(e4[s4],c4)<0&&(u3=s4)}return a3<r5.length&&o3==="next"?e4+n4.substr(e4.length):a3<e4.length&&o3==="prev"?e4.substr(0,n4.length):u3<0?null:e4.substr(0,u3)+r5[u3]+n4.substr(u3+1)})(r4,i3,f2[a2],h3[a2],l2,d3);u2===null&&o2===null?v2=a2+1:(o2===null||0<l2(o2,u2))&&(o2=u2)}return t3(o2!==null?function(){e3.continue(o2+p3)}:n3),!1}),e2}function Tt(e2,t2,n2,r3){return{type:2,lower:e2, upper:t2,lowerOpen:n2,upperOpen:r3}}function qt(e2){return{type:1,lower:e2,upper:e2}}var Dt=(Object.defineProperty(It.prototype,"Collection",{get:function(){return this._ctx.table.db.Collection},enumerable:!1,configurable:!0}),It.prototype.between=function(e2,t2,n2,r3){n2=n2!==!1,r3=r3===!0;try{return 0<this._cmp(e2,t2)||this._cmp(e2,t2)===0&&(n2||r3)&&(!n2||!r3)?At(this):new this.Collection(this,function(){return Tt(e2,t2,!n2,!r3)})}catch{return jt(this,Je)}},It.prototype.equals=function(e2){return e2== null?jt(this,Je):new this.Collection(this,function(){return qt(e2)})},It.prototype.above=function(e2){return e2==null?jt(this,Je):new this.Collection(this,function(){return Tt(e2,void 0,!0)})},It.prototype.aboveOrEqual=function(e2){return e2==null?jt(this,Je):new this.Collection(this,function(){return Tt(e2,void 0,!1)})},It.prototype.below=function(e2){return e2==null?jt(this,Je):new this.Collection(this,function(){return Tt(void 0,e2,!1,!0)})},It.prototype.belowOrEqual=function(e2){return e2==null? jt(this,Je):new this.Collection(this,function(){return Tt(void 0,e2)})},It.prototype.startsWith=function(e2){return typeof e2!="string"?jt(this,Ze):this.between(e2,e2+He,!0,!0)},It.prototype.startsWithIgnoreCase=function(e2){return e2===""?this.startsWith(e2):Ct(this,function(e3,t2){return e3.indexOf(t2[0])===0},[e2],He)},It.prototype.equalsIgnoreCase=function(e2){return Ct(this,function(e3,t2){return e3===t2[0]},[e2],"")},It.prototype.anyOfIgnoreCase=function(){var e2=I.apply(D2,arguments);return e2. @@ -3605,31 +3688,31 @@ return Rt(e2),t2(e2.target.error),!1})}function Rt(e2){e2.stopPropagation&&e2.st shift();try{$e(e2[1],e2[0])}catch{}}return this},Ut.prototype._locked=function(){return this._reculock&&me.lockOwnerFor!==this},Ut.prototype.create=function(t2){var n2=this;if(!this.mode)return this;var e2=this.db.idbdb,r3=this.db._state.dbOpenError;if(y(!this.idbtrans),!t2&&!e2)switch(r3&&r3.name){case"DatabaseClosedError":throw new Y.DatabaseClosed(r3);case"MissingAPIError":throw new Y.MissingAPI(r3.message,r3);default:throw new Y.OpenFailed(r3)}if(!this.active)throw new Y.TransactionInactive; return y(this._completion._state===null),(t2=this.idbtrans=t2||(this.db.core||e2).transaction(this.storeNames,this.mode,{durability:this.chromeTransactionDurability})).onerror=qe(function(e3){Rt(e3),n2._reject(t2.error)}),t2.onabort=qe(function(e3){Rt(e3),n2.active&&n2._reject(new Y.Abort(t2.error)),n2.active=!1,n2.on("abort").fire(e3)}),t2.oncomplete=qe(function(){n2.active=!1,n2._resolve(),"mutatedParts"in t2&&Nt.storagemutated.fire(t2.mutatedParts)}),this},Ut.prototype._promise=function(n2,r3,i2){ var o2=this;if(n2==="readwrite"&&this.mode!=="readwrite")return Xe(new Y.ReadOnly("Transaction is readonly"));if(!this.active)return Xe(new Y.TransactionInactive);if(this._locked())return new _e(function(e3,t2){o2._blockedFuncs.push([function(){o2._promise(n2,r3,i2).then(e3,t2)},me])});if(i2)return Ne(function(){var e3=new _e(function(e4,t2){o2._lock();var n3=r3(e4,t2,o2);n3&&n3.then&&n3.then(e4,t2)});return e3.finally(function(){return o2._unlock()}),e3._lib=!0,e3});var e2=new _e(function(e3,t2){ -var n3=r3(e3,t2,o2);n3&&n3.then&&n3.then(e3,t2)});return e2._lib=!0,e2},Ut.prototype._root=function(){return this.parent?this.parent._root():this},Ut.prototype.waitFor=function(e2){var t2,r3=this._root(),i2=_e.resolve(e2);r3._waitingFor?r3._waitingFor=r3._waitingFor.then(function(){return i2}):(r3._waitingFor=i2,r3._waitingQueue=[],t2=r3.idbtrans.objectStore(r3.storeNames[0]),function e3(){for(++r3._spinCount;r3._waitingQueue.length;)r3._waitingQueue.shift()();r3._waitingFor&&(t2.get(-1/0).onsuccess= -e3)}());var o2=r3._waitingFor;return new _e(function(t3,n2){i2.then(function(e3){return r3._waitingQueue.push(qe(t3.bind(null,e3)))},function(e3){return r3._waitingQueue.push(qe(n2.bind(null,e3)))}).finally(function(){r3._waitingFor===o2&&(r3._waitingFor=null)})})},Ut.prototype.abort=function(){this.active&&(this.active=!1,this.idbtrans&&this.idbtrans.abort(),this._reject(new Y.Abort))},Ut.prototype.table=function(e2){var t2=this._memoizedTables||(this._memoizedTables={});if(m(t2,e2))return t2[e2]; +var n3=r3(e3,t2,o2);n3&&n3.then&&n3.then(e3,t2)});return e2._lib=!0,e2},Ut.prototype._root=function(){return this.parent?this.parent._root():this},Ut.prototype.waitFor=function(e2){var t2,r3=this._root(),i2=_e.resolve(e2);r3._waitingFor?r3._waitingFor=r3._waitingFor.then(function(){return i2}):(r3._waitingFor=i2,r3._waitingQueue=[],t2=r3.idbtrans.objectStore(r3.storeNames[0]),(function e3(){for(++r3._spinCount;r3._waitingQueue.length;)r3._waitingQueue.shift()();r3._waitingFor&&(t2.get(-1/0).onsuccess= +e3)})());var o2=r3._waitingFor;return new _e(function(t3,n2){i2.then(function(e3){return r3._waitingQueue.push(qe(t3.bind(null,e3)))},function(e3){return r3._waitingQueue.push(qe(n2.bind(null,e3)))}).finally(function(){r3._waitingFor===o2&&(r3._waitingFor=null)})})},Ut.prototype.abort=function(){this.active&&(this.active=!1,this.idbtrans&&this.idbtrans.abort(),this._reject(new Y.Abort))},Ut.prototype.table=function(e2){var t2=this._memoizedTables||(this._memoizedTables={});if(m(t2,e2))return t2[e2]; var n2=this.schema[e2];if(!n2)throw new Y.NotFound("Table "+e2+" not part of transaction");return n2=new this.db.Table(e2,n2,this),n2.core=this.db.core.table(e2),t2[e2]=n2},Ut);function Ut(){}function Vt(e2,t2,n2,r3,i2,o2,a2){return{name:e2,keyPath:t2,unique:n2,multi:r3,auto:i2,compound:o2,src:(n2&&!a2?"&":"")+(r3?"*":"")+(i2?"++":"")+zt(t2)}}function zt(e2){return typeof e2=="string"?e2:e2?"["+[].join.call(e2,"+")+"]":""}function Wt(e2,t2,n2){return{name:e2,primKey:t2,indexes:n2,mappedClass:null, idxByName:(r3=function(e3){return[e3.name,e3]},n2.reduce(function(e3,t3,n3){return n3=r3(t3,n3),n3&&(e3[n3[0]]=n3[1]),e3},{}))};var r3}var Yt=function(e2){try{return e2.only([[]]),Yt=function(){return[[]]},[[]]}catch{return Yt=function(){return He},He}};function $t(t2){return t2==null?function(){}:typeof t2=="string"?(n2=t2).split(".").length===1?function(e2){return e2[n2]}:function(e2){return O(e2,n2)}:function(e2){return O(e2,t2)};var n2}function Qt(e2){return[].slice.call(e2)}var Gt=0;function Xt(e2){ -return e2==null?":id":typeof e2=="string"?e2:"[".concat(e2.join("+"),"]")}function Ht(e2,i2,t2){function _4(e3){if(e3.type===3)return null;if(e3.type===4)throw new Error("Cannot convert never type to IDBKeyRange");var t3=e3.lower,n3=e3.upper,r4=e3.lowerOpen,e3=e3.upperOpen;return t3===void 0?n3===void 0?null:i2.upperBound(n3,!!e3):n3===void 0?i2.lowerBound(t3,!!r4):i2.bound(t3,n3,!!r4,!!e3)}function n2(e3){var h3,w2=e3.name;return{name:w2,schema:e3,mutate:function(e4){var y2=e4.trans,v2=e4.type, +return e2==null?":id":typeof e2=="string"?e2:"[".concat(e2.join("+"),"]")}function Ht(e2,i2,t2){function _9(e3){if(e3.type===3)return null;if(e3.type===4)throw new Error("Cannot convert never type to IDBKeyRange");var t3=e3.lower,n3=e3.upper,r4=e3.lowerOpen,e3=e3.upperOpen;return t3===void 0?n3===void 0?null:i2.upperBound(n3,!!e3):n3===void 0?i2.lowerBound(t3,!!r4):i2.bound(t3,n3,!!r4,!!e3)}function n2(e3){var h3,w2=e3.name;return{name:w2,schema:e3,mutate:function(e4){var y2=e4.trans,v2=e4.type, m2=e4.keys,b2=e4.values,g2=e4.range;return new Promise(function(t3,e5){t3=qe(t3);var n3=y2.objectStore(w2),r4=n3.keyPath==null,i3=v2==="put"||v2==="add";if(!i3&&v2!=="delete"&&v2!=="deleteRange")throw new Error("Invalid operation type: "+v2);var o3,a3=(m2||b2||{length:1}).length;if(m2&&b2&&m2.length!==b2.length)throw new Error("Given keys array must have same length as given values array.");if(a3===0)return t3({numFailures:0,failures:{},results:[],lastResult:void 0});function u3(e6){++l2,Rt(e6)} -var s4=[],c4=[],l2=0;if(v2==="deleteRange"){if(g2.type===4)return t3({numFailures:l2,failures:c4,results:[],lastResult:void 0});g2.type===3?s4.push(o3=n3.clear()):s4.push(o3=n3.delete(_4(g2)))}else{var r4=i3?r4?[b2,m2]:[b2,null]:[m2,null],f2=r4[0],h4=r4[1];if(i3)for(var d3=0;d3<a3;++d3)s4.push(o3=h4&&h4[d3]!==void 0?n3[v2](f2[d3],h4[d3]):n3[v2](f2[d3])),o3.onerror=u3;else for(d3=0;d3<a3;++d3)s4.push(o3=n3[v2](f2[d3])),o3.onerror=u3}function p3(e6){e6=e6.target.result,s4.forEach(function(e7,t4){return e7. +var s4=[],c4=[],l2=0;if(v2==="deleteRange"){if(g2.type===4)return t3({numFailures:l2,failures:c4,results:[],lastResult:void 0});g2.type===3?s4.push(o3=n3.clear()):s4.push(o3=n3.delete(_9(g2)))}else{var r4=i3?r4?[b2,m2]:[b2,null]:[m2,null],f2=r4[0],h4=r4[1];if(i3)for(var d3=0;d3<a3;++d3)s4.push(o3=h4&&h4[d3]!==void 0?n3[v2](f2[d3],h4[d3]):n3[v2](f2[d3])),o3.onerror=u3;else for(d3=0;d3<a3;++d3)s4.push(o3=n3[v2](f2[d3])),o3.onerror=u3}function p3(e6){e6=e6.target.result,s4.forEach(function(e7,t4){return e7. error!=null&&(c4[t4]=e7.error)}),t3({numFailures:l2,failures:c4,results:v2==="delete"?m2:s4.map(function(e7){return e7.result}),lastResult:e6})}o3.onerror=function(e6){u3(e6),p3(e6)},o3.onsuccess=p3})},getMany:function(e4){var f2=e4.trans,h4=e4.keys;return new Promise(function(t3,e5){t3=qe(t3);for(var n3,r4=f2.objectStore(w2),i3=h4.length,o3=new Array(i3),a3=0,u3=0,s4=function(e6){e6=e6.target,o3[e6._pos]=e6.result,++u3===a3&&t3(o3)},c4=Bt(e5),l2=0;l2<i3;++l2)h4[l2]!=null&&((n3=r4.get(h4[l2]))._pos= -l2,n3.onsuccess=s4,n3.onerror=c4,++a3);a3===0&&t3(o3)})},get:function(e4){var r4=e4.trans,i3=e4.key;return new Promise(function(t3,e5){t3=qe(t3);var n3=r4.objectStore(w2).get(i3);n3.onsuccess=function(e6){return t3(e6.target.result)},n3.onerror=Bt(e5)})},query:(h3=s3,function(f2){return new Promise(function(n3,e4){n3=qe(n3);var r4,i3,o3,t3=f2.trans,a3=f2.values,u3=f2.limit,s4=f2.query,c4=u3===1/0?void 0:u3,l2=s4.index,s4=s4.range,t3=t3.objectStore(w2),l2=l2.isPrimaryKey?t3:t3.index(l2.name),s4=_4( +l2,n3.onsuccess=s4,n3.onerror=c4,++a3);a3===0&&t3(o3)})},get:function(e4){var r4=e4.trans,i3=e4.key;return new Promise(function(t3,e5){t3=qe(t3);var n3=r4.objectStore(w2).get(i3);n3.onsuccess=function(e6){return t3(e6.target.result)},n3.onerror=Bt(e5)})},query:(h3=s3,function(f2){return new Promise(function(n3,e4){n3=qe(n3);var r4,i3,o3,t3=f2.trans,a3=f2.values,u3=f2.limit,s4=f2.query,c4=u3===1/0?void 0:u3,l2=s4.index,s4=s4.range,t3=t3.objectStore(w2),l2=l2.isPrimaryKey?t3:t3.index(l2.name),s4=_9( s4);if(u3===0)return n3({result:[]});h3?((c4=a3?l2.getAll(s4,c4):l2.getAllKeys(s4,c4)).onsuccess=function(e5){return n3({result:e5.target.result})},c4.onerror=Bt(e4)):(r4=0,i3=!a3&&"openKeyCursor"in l2?l2.openKeyCursor(s4):l2.openCursor(s4),o3=[],i3.onsuccess=function(e5){var t4=i3.result;return t4?(o3.push(a3?t4.value:t4.primaryKey),++r4===u3?n3({result:o3}):void t4.continue()):n3({result:o3})},i3.onerror=Bt(e4))})}),openCursor:function(e4){var c4=e4.trans,o3=e4.values,a3=e4.query,u3=e4.reverse, -l2=e4.unique;return new Promise(function(t3,n3){t3=qe(t3);var e5=a3.index,r4=a3.range,i3=c4.objectStore(w2),i3=e5.isPrimaryKey?i3:i3.index(e5.name),e5=u3?l2?"prevunique":"prev":l2?"nextunique":"next",s4=!o3&&"openKeyCursor"in i3?i3.openKeyCursor(_4(r4),e5):i3.openCursor(_4(r4),e5);s4.onerror=Bt(n3),s4.onsuccess=qe(function(e6){var r5,i4,o4,a4,u4=s4.result;u4?(u4.___id=++Gt,u4.done=!1,r5=u4.continue.bind(u4),i4=(i4=u4.continuePrimaryKey)&&i4.bind(u4),o4=u4.advance.bind(u4),a4=function(){throw new Error( +l2=e4.unique;return new Promise(function(t3,n3){t3=qe(t3);var e5=a3.index,r4=a3.range,i3=c4.objectStore(w2),i3=e5.isPrimaryKey?i3:i3.index(e5.name),e5=u3?l2?"prevunique":"prev":l2?"nextunique":"next",s4=!o3&&"openKeyCursor"in i3?i3.openKeyCursor(_9(r4),e5):i3.openCursor(_9(r4),e5);s4.onerror=Bt(n3),s4.onsuccess=qe(function(e6){var r5,i4,o4,a4,u4=s4.result;u4?(u4.___id=++Gt,u4.done=!1,r5=u4.continue.bind(u4),i4=(i4=u4.continuePrimaryKey)&&i4.bind(u4),o4=u4.advance.bind(u4),a4=function(){throw new Error( "Cursor not stopped")},u4.trans=c4,u4.stop=u4.continue=u4.continuePrimaryKey=u4.advance=function(){throw new Error("Cursor not started")},u4.fail=qe(n3),u4.next=function(){var e7=this,t4=1;return this.start(function(){return t4--?e7.continue():e7.stop()}).then(function(){return e7})},u4.start=function(e7){function t4(){if(s4.result)try{e7()}catch(e8){u4.fail(e8)}else u4.done=!0,u4.start=function(){throw new Error("Cursor behind last entry")},u4.stop()}var n4=new Promise(function(t5,e8){t5=qe(t5), -s4.onerror=Bt(e8),u4.fail=e8,u4.stop=function(e9){u4.stop=u4.continue=u4.continuePrimaryKey=u4.advance=a4,t5(e9)}});return s4.onsuccess=qe(function(e8){s4.onsuccess=t4,t4()}),u4.continue=r5,u4.continuePrimaryKey=i4,u4.advance=o4,t4(),n4},t3(u4)):t3(null)},n3)})},count:function(e4){var t3=e4.query,i3=e4.trans,o3=t3.index,a3=t3.range;return new Promise(function(t4,e5){var n3=i3.objectStore(w2),r4=o3.isPrimaryKey?n3:n3.index(o3.name),n3=_4(a3),r4=n3?r4.count(n3):r4.count();r4.onsuccess=qe(function(e6){ +s4.onerror=Bt(e8),u4.fail=e8,u4.stop=function(e9){u4.stop=u4.continue=u4.continuePrimaryKey=u4.advance=a4,t5(e9)}});return s4.onsuccess=qe(function(e8){s4.onsuccess=t4,t4()}),u4.continue=r5,u4.continuePrimaryKey=i4,u4.advance=o4,t4(),n4},t3(u4)):t3(null)},n3)})},count:function(e4){var t3=e4.query,i3=e4.trans,o3=t3.index,a3=t3.range;return new Promise(function(t4,e5){var n3=i3.objectStore(w2),r4=o3.isPrimaryKey?n3:n3.index(o3.name),n3=_9(a3),r4=n3?r4.count(n3):r4.count();r4.onsuccess=qe(function(e6){ return t4(e6.target.result)}),r4.onerror=Bt(e5)})}}}var r3,o2,a2,u2=(o2=t2,a2=Qt((r3=e2).objectStoreNames),{schema:{name:r3.name,tables:a2.map(function(e3){return o2.objectStore(e3)}).map(function(t3){var e3=t3.keyPath,n3=t3.autoIncrement,r4=k(e3),i3={},n3={name:t3.name,primaryKey:{name:null,isPrimaryKey:!0,outbound:e3==null,compound:r4,keyPath:e3,autoIncrement:n3,unique:!0,extractKey:$t(e3)},indexes:Qt(t3.indexNames).map(function(e4){return t3.index(e4)}).map(function(e4){var t4=e4.name,n4=e4.unique, r5=e4.multiEntry,e4=e4.keyPath,r5={name:t4,compound:k(e4),keyPath:e4,unique:n4,multiEntry:r5,extractKey:$t(e4)};return i3[Xt(e4)]=r5}),getIndexByKeyPath:function(e4){return i3[Xt(e4)]}};return i3[":id"]=n3.primaryKey,e3!=null&&(i3[Xt(e3)]=n3.primaryKey),n3})},hasGetAll:0<a2.length&&"getAll"in o2.objectStore(a2[0])&&!(typeof navigator<"u"&&/Safari/.test(navigator.userAgent)&&!/(Chrome\/|Edge\/)/.test(navigator.userAgent)&&[].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1]<604)}),t2=u2.schema, s3=u2.hasGetAll,u2=t2.tables.map(n2),c3={};return u2.forEach(function(e3){return c3[e3.name]=e3}),{stack:"dbcore",transaction:e2.transaction.bind(e2),table:function(e3){if(!c3[e3])throw new Error("Table '".concat(e3,"' not found"));return c3[e3]},MIN_KEY:-1/0,MAX_KEY:Yt(i2),schema:t2}}function Jt(e2,t2,n2,r3){var i2=n2.IDBKeyRange;return n2.indexedDB,{dbcore:(r3=Ht(t2,i2,r3),e2.dbcore.reduce(function(e3,t3){return t3=t3.create,_(_({},e3),t3(e3))},r3))}}function Zt(n2,e2){var t2=e2.db,e2=Jt(n2._middlewares, -t2,n2._deps,e2);n2.core=e2.dbcore,n2.tables.forEach(function(e3){var t3=e3.name;n2.core.schema.tables.some(function(e4){return e4.name===t3})&&(e3.core=n2.core.table(t3),n2[t3]instanceof n2.Table&&(n2[t3].core=e3.core))})}function en(i2,e2,t2,o2){t2.forEach(function(n2){var r3=o2[n2];e2.forEach(function(e3){var t3=function e4(t4,n3){return h2(t4,n3)||(t4=c2(t4))&&e4(t4,n3)}(e3,n2);(!t3||"value"in t3&&t3.value===void 0)&&(e3===i2.Transaction.prototype||e3 instanceof i2.Transaction?l(e3,n2,{get:function(){ +t2,n2._deps,e2);n2.core=e2.dbcore,n2.tables.forEach(function(e3){var t3=e3.name;n2.core.schema.tables.some(function(e4){return e4.name===t3})&&(e3.core=n2.core.table(t3),n2[t3]instanceof n2.Table&&(n2[t3].core=e3.core))})}function en(i2,e2,t2,o2){t2.forEach(function(n2){var r3=o2[n2];e2.forEach(function(e3){var t3=(function e4(t4,n3){return h2(t4,n3)||(t4=c2(t4))&&e4(t4,n3)})(e3,n2);(!t3||"value"in t3&&t3.value===void 0)&&(e3===i2.Transaction.prototype||e3 instanceof i2.Transaction?l(e3,n2,{get:function(){ return this.table(n2)},set:function(e4){u(this,n2,{value:e4,writable:!0,configurable:!0,enumerable:!0})}}):e3[n2]=new i2.Table(n2,r3))})})}function tn(n2,e2){e2.forEach(function(e3){for(var t2 in e3)e3[t2]instanceof n2.Table&&delete e3[t2]})}function nn(e2,t2){return e2._cfg.version-t2._cfg.version}function rn(n2,r3,i2,e2){var o2=n2._dbSchema;i2.objectStoreNames.contains("$meta")&&!o2.$meta&&(o2.$meta=Wt("$meta",hn("")[0],[]),n2._storeNames.push("$meta"));var a2=n2._createTransaction("readwrite", n2._storeNames,o2);a2.create(i2),a2._completion.catch(e2);var u2=a2._reject.bind(a2),s3=me.transless||me;Ne(function(){return me.trans=a2,me.transless=s3,r3!==0?(Zt(n2,i2),t2=r3,((e3=a2).storeNames.includes("$meta")?e3.table("$meta").get("version").then(function(e4){return e4??t2}):_e.resolve(t2)).then(function(e4){return c3=e4,l2=a2,f2=i2,t3=[],e4=(s4=n2)._versions,h3=s4._dbSchema=ln(0,s4.idbdb,f2),(e4=e4.filter(function(e5){return e5._cfg.version>=c3})).length!==0?(e4.forEach(function(u3){t3.push( function(){var t4=h3,e5=u3._cfg.dbschema;fn(s4,t4,f2),fn(s4,e5,f2),h3=s4._dbSchema=e5;var n3=an(t4,e5);n3.add.forEach(function(e6){un(f2,e6[0],e6[1].primKey,e6[1].indexes)}),n3.change.forEach(function(e6){if(e6.recreate)throw new Y.Upgrade("Not yet support for changing primary key");var t5=f2.objectStore(e6.name);e6.add.forEach(function(e7){return cn2(t5,e7)}),e6.change.forEach(function(e7){t5.deleteIndex(e7.name),cn2(t5,e7)}),e6.del.forEach(function(e7){return t5.deleteIndex(e7)})});var r4=u3._cfg. contentUpgrade;if(r4&&u3._cfg.version>c3){Zt(s4,f2),l2._memoizedTables={};var i3=g(e5);n3.del.forEach(function(e6){i3[e6]=t4[e6]}),tn(s4,[s4.Transaction.prototype]),en(s4,[s4.Transaction.prototype],x(i3),i3),l2.schema=i3;var o3,a3=B(r4);return a3&&Le(),n3=_e.follow(function(){var e6;(o3=r4(l2))&&a3&&(e6=Ue.bind(null,null),o3.then(e6,e6))}),o3&&typeof o3.then=="function"?_e.resolve(o3):n3.then(function(){return o3})}}),t3.push(function(e5){var t4,n3,r4=u3._cfg.dbschema;t4=r4,n3=e5,[].slice.call(n3. db.objectStoreNames).forEach(function(e6){return t4[e6]==null&&n3.db.deleteObjectStore(e6)}),tn(s4,[s4.Transaction.prototype]),en(s4,[s4.Transaction.prototype],s4._storeNames,s4._dbSchema),l2.schema=s4._dbSchema}),t3.push(function(e5){s4.idbdb.objectStoreNames.contains("$meta")&&(Math.ceil(s4.idbdb.version/10)===u3._cfg.version?(s4.idbdb.deleteObjectStore("$meta"),delete s4._dbSchema.$meta,s4._storeNames=s4._storeNames.filter(function(e6){return e6!=="$meta"})):e5.objectStore("$meta").put(u3._cfg. -version,"version"))})}),function e5(){return t3.length?_e.resolve(t3.shift()(l2.idbtrans)).then(e5):_e.resolve()}().then(function(){sn(h3,f2)})):_e.resolve();var s4,c3,l2,f2,t3,h3}).catch(u2)):(x(o2).forEach(function(e4){un(i2,e4,o2[e4].primKey,o2[e4].indexes)}),Zt(n2,i2),void _e.follow(function(){return n2.on.populate.fire(a2)}).catch(u2));var e3,t2})}function on2(e2,r3){sn(e2._dbSchema,r3),r3.db.version%10!=0||r3.objectStoreNames.contains("$meta")||r3.db.createObjectStore("$meta").add(Math.ceil( -r3.db.version/10-1),"version");var t2=ln(0,e2.idbdb,r3);fn(e2,e2._dbSchema,r3);for(var n2=0,i2=an(t2,e2._dbSchema).change;n2<i2.length;n2++){var o2=function(t3){if(t3.change.length||t3.recreate)return console.warn("Unable to patch indexes of table ".concat(t3.name," because it has changes on the type of index or primary key.")),{value:void 0};var n3=r3.objectStore(t3.name);t3.add.forEach(function(e3){ie&&console.debug("Dexie upgrade patch: Creating missing index ".concat(t3.name,".").concat(e3.src)), -cn2(n3,e3)})}(i2[n2]);if(typeof o2=="object")return o2.value}}function an(e2,t2){var n2,r3={del:[],add:[],change:[]};for(n2 in e2)t2[n2]||r3.del.push(n2);for(n2 in t2){var i2=e2[n2],o2=t2[n2];if(i2){var a2={name:n2,def:o2,recreate:!1,del:[],add:[],change:[]};if(""+(i2.primKey.keyPath||"")!=""+(o2.primKey.keyPath||"")||i2.primKey.auto!==o2.primKey.auto)a2.recreate=!0,r3.change.push(a2);else{var u2=i2.idxByName,s3=o2.idxByName,c3=void 0;for(c3 in u2)s3[c3]||a2.del.push(c3);for(c3 in s3){var l2=u2[c3], +version,"version"))})}),(function e5(){return t3.length?_e.resolve(t3.shift()(l2.idbtrans)).then(e5):_e.resolve()})().then(function(){sn(h3,f2)})):_e.resolve();var s4,c3,l2,f2,t3,h3}).catch(u2)):(x(o2).forEach(function(e4){un(i2,e4,o2[e4].primKey,o2[e4].indexes)}),Zt(n2,i2),void _e.follow(function(){return n2.on.populate.fire(a2)}).catch(u2));var e3,t2})}function on2(e2,r3){sn(e2._dbSchema,r3),r3.db.version%10!=0||r3.objectStoreNames.contains("$meta")||r3.db.createObjectStore("$meta").add(Math.ceil( +r3.db.version/10-1),"version");var t2=ln(0,e2.idbdb,r3);fn(e2,e2._dbSchema,r3);for(var n2=0,i2=an(t2,e2._dbSchema).change;n2<i2.length;n2++){var o2=(function(t3){if(t3.change.length||t3.recreate)return console.warn("Unable to patch indexes of table ".concat(t3.name," because it has changes on the type of index or primary key.")),{value:void 0};var n3=r3.objectStore(t3.name);t3.add.forEach(function(e3){ie&&console.debug("Dexie upgrade patch: Creating missing index ".concat(t3.name,".").concat(e3. +src)),cn2(n3,e3)})})(i2[n2]);if(typeof o2=="object")return o2.value}}function an(e2,t2){var n2,r3={del:[],add:[],change:[]};for(n2 in e2)t2[n2]||r3.del.push(n2);for(n2 in t2){var i2=e2[n2],o2=t2[n2];if(i2){var a2={name:n2,def:o2,recreate:!1,del:[],add:[],change:[]};if(""+(i2.primKey.keyPath||"")!=""+(o2.primKey.keyPath||"")||i2.primKey.auto!==o2.primKey.auto)a2.recreate=!0,r3.change.push(a2);else{var u2=i2.idxByName,s3=o2.idxByName,c3=void 0;for(c3 in u2)s3[c3]||a2.del.push(c3);for(c3 in s3){var l2=u2[c3], f2=s3[c3];l2?l2.src!==f2.src&&a2.change.push(f2):a2.add.push(f2)}(0<a2.del.length||0<a2.add.length||0<a2.change.length)&&r3.change.push(a2)}}else r3.add.push([n2,o2])}return r3}function un(e2,t2,n2,r3){var i2=e2.db.createObjectStore(t2,n2.keyPath?{keyPath:n2.keyPath,autoIncrement:n2.auto}:{autoIncrement:n2.auto});return r3.forEach(function(e3){return cn2(i2,e3)}),i2}function sn(t2,n2){x(t2).forEach(function(e2){n2.db.objectStoreNames.contains(e2)||(ie&&console.debug("Dexie: Creating missing tabl\ e",e2),un(n2,e2,t2[e2].primKey,t2[e2].indexes))})}function cn2(e2,t2){e2.createIndex(t2.name,t2.keyPath,{unique:t2.unique,multiEntry:t2.multi})}function ln(e2,t2,u2){var s3={};return b(t2.objectStoreNames,0).forEach(function(e3){for(var t3=u2.objectStore(e3),n2=Vt(zt(a2=t3.keyPath),a2||"",!0,!1,!!t3.autoIncrement,a2&&typeof a2!="string",!0),r3=[],i2=0;i2<t3.indexNames.length;++i2){var o2=t3.index(t3.indexNames[i2]),a2=o2.keyPath,o2=Vt(o2.name,a2,!!o2.unique,!!o2.multiEntry,!1,a2&&typeof a2!="str\ ing",!1);r3.push(o2)}s3[e3]=Wt(e3,n2,r3)}),s3}function fn(e2,t2,n2){for(var r3=n2.db.objectStoreNames,i2=0;i2<r3.length;++i2){var o2=r3[i2],a2=n2.objectStore(o2);e2._hasGetAll="getAll"in a2;for(var u2=0;u2<a2.indexNames.length;++u2){var s3=a2.indexNames[u2],c3=a2.index(s3).keyPath,l2=typeof c3=="string"?c3:"["+b(c3).join("+")+"]";!t2[o2]||(c3=t2[o2].idxByName[l2])&&(c3.name=s3,delete t2[o2].idxByName[l2],t2[o2].idxByName[s3]=c3)}}typeof navigator<"u"&&/Safari/.test(navigator.userAgent)&&!/(Chrome\/|Edge\/)/. @@ -3637,10 +3720,10 @@ test(navigator.userAgent)&&f.WorkerGlobalScope&&f instanceof f.WorkerGlobalScope null){var t2=hn(r3[e2]),n2=t2.shift();if(n2.unique=!0,n2.multi)throw new Y.Schema("Primary key cannot be multi-valued");t2.forEach(function(e3){if(e3.auto)throw new Y.Schema("Only primary key can be marked as autoIncrement (++)");if(!e3.keyPath)throw new Y.Schema("Index must have a name and cannot be an empty string")}),i2[e2]=Wt(e2,n2,t2)}})},pn.prototype.stores=function(e2){var t2=this.db;this._cfg.storesSource=this._cfg.storesSource?a(this._cfg.storesSource,e2):e2;var e2=t2._versions,n2={},r3={}; return e2.forEach(function(e3){a(n2,e3._cfg.storesSource),r3=e3._cfg.dbschema={},e3._parseStoresSpec(n2,r3)}),t2._dbSchema=r3,tn(t2,[t2._allTables,t2,t2.Transaction.prototype]),en(t2,[t2._allTables,t2,t2.Transaction.prototype,this._cfg.tables],x(r3),r3),t2._storeNames=x(r3),this},pn.prototype.upgrade=function(e2){return this._cfg.contentUpgrade=re2(this._cfg.contentUpgrade||G,e2),this},pn);function pn(){}function yn(e2,t2){var n2=e2._dbNamesDB;return n2||(n2=e2._dbNamesDB=new er(tt,{addons:[],indexedDB:e2, IDBKeyRange:t2})).version(1).stores({dbnames:"name"}),n2.table("dbnames")}function vn(e2){return e2&&typeof e2.databases=="function"}function mn(e2){return Ne(function(){return me.letThrough=!0,e2()})}function bn(e2){return!("from"in e2)}var gn=function(e2,t2){if(!this){var n2=new gn;return e2&&"d"in e2&&a(n2,e2),n2}a(this,arguments.length?{d:1,from:e2,to:1<arguments.length?t2:e2}:{d:0})};function wn(e2,t2,n2){var r3=st(t2,n2);if(!isNaN(r3)){if(0<r3)throw RangeError();if(bn(e2))return a(e2,{from:t2, -to:n2,d:1});var i2=e2.l,r3=e2.r;if(st(n2,e2.from)<0)return i2?wn(i2,t2,n2):e2.l={from:t2,to:n2,d:1,l:null,r:null},On(e2);if(0<st(t2,e2.to))return r3?wn(r3,t2,n2):e2.r={from:t2,to:n2,d:1,l:null,r:null},On(e2);st(t2,e2.from)<0&&(e2.from=t2,e2.l=null,e2.d=r3?r3.d+1:1),0<st(n2,e2.to)&&(e2.to=n2,e2.r=null,e2.d=e2.l?e2.l.d+1:1),n2=!e2.r,i2&&!e2.l&&_n(e2,i2),r3&&n2&&_n(e2,r3)}}function _n(e2,t2){bn(t2)||function e3(t3,n2){var r3=n2.from,i2=n2.to,o2=n2.l,n2=n2.r;wn(t3,r3,i2),o2&&e3(t3,o2),n2&&e3(t3,n2)}( +to:n2,d:1});var i2=e2.l,r3=e2.r;if(st(n2,e2.from)<0)return i2?wn(i2,t2,n2):e2.l={from:t2,to:n2,d:1,l:null,r:null},On(e2);if(0<st(t2,e2.to))return r3?wn(r3,t2,n2):e2.r={from:t2,to:n2,d:1,l:null,r:null},On(e2);st(t2,e2.from)<0&&(e2.from=t2,e2.l=null,e2.d=r3?r3.d+1:1),0<st(n2,e2.to)&&(e2.to=n2,e2.r=null,e2.d=e2.l?e2.l.d+1:1),n2=!e2.r,i2&&!e2.l&&_n(e2,i2),r3&&n2&&_n(e2,r3)}}function _n(e2,t2){bn(t2)||(function e3(t3,n2){var r3=n2.from,i2=n2.to,o2=n2.l,n2=n2.r;wn(t3,r3,i2),o2&&e3(t3,o2),n2&&e3(t3,n2)})( e2,t2)}function xn(e2,t2){var n2=kn(t2),r3=n2.next();if(r3.done)return!1;for(var i2=r3.value,o2=kn(e2),a2=o2.next(i2.from),u2=a2.value;!r3.done&&!a2.done;){if(st(u2.from,i2.to)<=0&&0<=st(u2.to,i2.from))return!0;st(i2.from,u2.from)<0?i2=(r3=n2.next(u2.from)).value:u2=(a2=o2.next(i2.from)).value}return!1}function kn(e2){var n2=bn(e2)?null:{s:0,n:e2};return{next:function(e3){for(var t2=0<arguments.length;n2;)switch(n2.s){case 0:if(n2.s=1,t2)for(;n2.n.l&&st(e3,n2.n.from)<0;)n2={up:n2,n:n2.n.l,s:1};else for(;n2.n.l;)n2={up:n2,n:n2.n.l,s:1};case 1:if(n2.s=2,!t2||st(e3,n2.n.to)<=0)return{value:n2.n,done:!1};case 2:if(n2.n.r){n2.s=3,n2={up:n2,n:n2.n.r,s:0};continue}case 3:n2=n2.up}return{done:!0}}}}function On(e2){var t2,n2,r3=(((t2=e2.r)===null||t2===void 0?void 0:t2.d)||0)-(((n2=e2.l)===null||n2===void 0?void 0:n2.d)||0),i2=1<r3?"r":r3<-1?"l":"";i2&&(t2=i2=="r"?"l":"r",n2=_({},e2),r3=e2[i2],e2.from=r3.from,e2.to=r3.to,e2[i2]=r3[i2],n2[i2]=r3[t2],(e2[t2]=n2).d=Pn(n2)),e2.d=Pn(e2)}function Pn(e2){ -var t2=e2.r,e2=e2.l;return(t2?e2?Math.max(t2.d,e2.d):t2.d:e2?e2.d:0)+1}function Kn(t2,n2){return x(n2).forEach(function(e2){t2[e2]?_n(t2[e2],n2[e2]):t2[e2]=function e3(t3){var n3,r3,i2={};for(n3 in t3)m(t3,n3)&&(r3=t3[n3],i2[n3]=!r3||typeof r3!="object"||K.has(r3.constructor)?r3:e3(r3));return i2}(n2[e2])}),t2}function En(t2,n2){return t2.all||n2.all||Object.keys(t2).some(function(e2){return n2[e2]&&xn(n2[e2],t2[e2])})}r2(gn.prototype,((F={add:function(e2){return _n(this,e2),this},addKey:function(e2){ +var t2=e2.r,e2=e2.l;return(t2?e2?Math.max(t2.d,e2.d):t2.d:e2?e2.d:0)+1}function Kn(t2,n2){return x(n2).forEach(function(e2){t2[e2]?_n(t2[e2],n2[e2]):t2[e2]=(function e3(t3){var n3,r3,i2={};for(n3 in t3)m(t3,n3)&&(r3=t3[n3],i2[n3]=!r3||typeof r3!="object"||K.has(r3.constructor)?r3:e3(r3));return i2})(n2[e2])}),t2}function En(t2,n2){return t2.all||n2.all||Object.keys(t2).some(function(e2){return n2[e2]&&xn(n2[e2],t2[e2])})}r2(gn.prototype,((F={add:function(e2){return _n(this,e2),this},addKey:function(e2){ return wn(this,e2,e2),this},addKeys:function(e2){var t2=this;return e2.forEach(function(e3){return wn(t2,e3,e3)}),this},hasKey:function(e2){var t2=kn(this).next(e2).value;return t2&&st(t2.from,e2)<=0&&0<=st(t2.to,e2)}})[C]=function(){return kn(this)},F));var Sn={},jn={},An=!1;function Cn(e2){Kn(jn,e2),An||(An=!0,setTimeout(function(){An=!1,Tn(jn,!(jn={}))},0))}function Tn(e2,t2){t2===void 0&&(t2=!1);var n2=new Set;if(e2.all)for(var r3=0,i2=Object.values(Sn);r3<i2.length;r3++)qn(a2=i2[r3],e2,n2,t2);else for(var o2 in e2){var a2,u2=/^idb\:\/\/(.*)\/(.*)\//.exec(o2);u2&&(o2=u2[1],u2=u2[2],(a2=Sn["idb://".concat(o2,"/").concat(u2)])&&qn(a2,e2,n2,t2))}n2.forEach(function(e3){return e3()})}function qn(e2,t2,n2,r3){for(var i2=[],o2=0,a2=Object.entries(e2.queries.query);o2<a2.length;o2++){for(var u2=a2[o2],s3=u2[0],c3=[],l2=0,f2=u2[1];l2<f2.length;l2++){var h3=f2[l2];En(t2,h3.obsSet)?h3.subscribers.forEach(function(e3){return n2.add(e3)}):r3&&c3.push(h3)}r3&&i2.push([s3,c3])}if(r3)for(var d3=0,p3=i2;d3< p3.length;d3++){var y2=p3[d3],s3=y2[0],c3=y2[1];e2.queries.query[s3]=c3}}function Dn(f2){var h3=f2._state,r3=f2._deps.indexedDB;if(h3.isBeingOpened||f2.idbdb)return h3.dbReadyPromise.then(function(){return h3.dbOpenError?Xe(h3.dbOpenError):f2});h3.isBeingOpened=!0,h3.dbOpenError=null,h3.openComplete=!1;var t2=h3.openCanceller,d3=Math.round(10*f2.verno),p3=!1;function e2(){if(h3.openCanceller!==t2)throw new Y.DatabaseClosed("db.open() was cancelled")}function y2(){return new _e(function(s3,n3){if(e2(), @@ -3657,9 +3740,9 @@ lower,t3.lowerOpen?f2.MAX_KEY:f2.MIN_KEY,n3),lowerOpen:!0,upper:Bn(t3.upper,t3.u o2(e4)}):a2.openCursor(t3);function o2(n4){return Object.create(n4,{continue:{value:function(e4){e4!=null?n4.continue(Bn(e4,t3.reverse?f2.MAX_KEY:f2.MIN_KEY,r4)):t3.unique?n4.continue(n4.key.slice(0,i3).concat(t3.reverse?f2.MIN_KEY:f2.MAX_KEY,r4)):n4.continue()}},continuePrimaryKey:{value:function(e4,t4){n4.continuePrimaryKey(Bn(e4,f2.MAX_KEY,r4),t4)}},primaryKey:{get:function(){return n4.primaryKey}},key:{get:function(){var e4=n4.key;return i3===1?e4[0]:e4.slice(0,i3)}},value:{get:function(){return n4. value}}})}}})}})}};function Fn(i2,o2,a2,u2){return a2=a2||{},u2=u2||"",x(i2).forEach(function(e2){var t2,n2,r3;m(o2,e2)?(t2=i2[e2],n2=o2[e2],typeof t2=="object"&&typeof n2=="object"&&t2&&n2?(r3=A(t2))!==A(n2)?a2[u2+e2]=o2[e2]:r3==="Object"?Fn(t2,n2,a2,u2+e2+"."):t2!==n2&&(a2[u2+e2]=o2[e2]):t2!==n2&&(a2[u2+e2]=o2[e2])):a2[u2+e2]=void 0}),x(o2).forEach(function(e2){m(i2,e2)||(a2[u2+e2]=o2[e2])}),a2}function Mn(e2,t2){return t2.type==="delete"?t2.keys:t2.keys||t2.values.map(e2.extractKey)}var Nn={stack:"\ dbcore",name:"HooksMiddleware",level:2,create:function(e2){return _(_({},e2),{table:function(r3){var y2=e2.table(r3),v2=y2.schema.primaryKey;return _(_({},y2),{mutate:function(e3){var t2=me.trans,n2=t2.table(r3).hook,h3=n2.deleting,d3=n2.creating,p3=n2.updating;switch(e3.type){case"add":if(d3.fire===G)break;return t2._promise("readwrite",function(){return a2(e3)},!0);case"put":if(d3.fire===G&&p3.fire===G)break;return t2._promise("readwrite",function(){return a2(e3)},!0);case"delete":if(h3.fire=== -G)break;return t2._promise("readwrite",function(){return a2(e3)},!0);case"deleteRange":if(h3.fire===G)break;return t2._promise("readwrite",function(){return function n3(r4,i2,o2){return y2.query({trans:r4,values:!1,query:{index:v2,range:i2},limit:o2}).then(function(e4){var t3=e4.result;return a2({type:"delete",keys:t3,trans:r4}).then(function(e5){return 0<e5.numFailures?Promise.reject(e5.failures[0]):t3.length<o2?{failures:[],numFailures:0,lastResult:void 0}:n3(r4,_(_({},i2),{lower:t3[t3.length- -1],lowerOpen:!0}),o2)})})}(e3.trans,e3.range,1e4)},!0)}return y2.mutate(e3);function a2(c3){var e4,t3,n3,l2=me.trans,f2=c3.keys||Mn(v2,c3);if(!f2)throw new Error("Keys missing");return(c3=c3.type==="add"||c3.type==="put"?_(_({},c3),{keys:f2}):_({},c3)).type!=="delete"&&(c3.values=i([],c3.values)),c3.keys&&(c3.keys=i([],c3.keys)),e4=y2,n3=f2,((t3=c3).type==="add"?Promise.resolve([]):e4.getMany({trans:t3.trans,keys:n3,cache:"immutable"})).then(function(u2){var s3=f2.map(function(e5,t4){var n4,r4,i2, -o2=u2[t4],a3={onerror:null,onsuccess:null};return c3.type==="delete"?h3.fire.call(a3,e5,o2,l2):c3.type==="add"||o2===void 0?(n4=d3.fire.call(a3,e5,c3.values[t4],l2),e5==null&&n4!=null&&(c3.keys[t4]=e5=n4,v2.outbound||P(c3.values[t4],v2.keyPath,e5))):(n4=Fn(o2,c3.values[t4]),(r4=p3.fire.call(a3,n4,e5,o2,l2))&&(i2=c3.values[t4],Object.keys(r4).forEach(function(e6){m(i2,e6)?i2[e6]=r4[e6]:P(i2,e6,r4[e6])}))),a3});return y2.mutate(c3).then(function(e5){for(var t4=e5.failures,n4=e5.results,r4=e5.numFailures, +G)break;return t2._promise("readwrite",function(){return a2(e3)},!0);case"deleteRange":if(h3.fire===G)break;return t2._promise("readwrite",function(){return(function n3(r4,i2,o2){return y2.query({trans:r4,values:!1,query:{index:v2,range:i2},limit:o2}).then(function(e4){var t3=e4.result;return a2({type:"delete",keys:t3,trans:r4}).then(function(e5){return 0<e5.numFailures?Promise.reject(e5.failures[0]):t3.length<o2?{failures:[],numFailures:0,lastResult:void 0}:n3(r4,_(_({},i2),{lower:t3[t3.length- +1],lowerOpen:!0}),o2)})})})(e3.trans,e3.range,1e4)},!0)}return y2.mutate(e3);function a2(c3){var e4,t3,n3,l2=me.trans,f2=c3.keys||Mn(v2,c3);if(!f2)throw new Error("Keys missing");return(c3=c3.type==="add"||c3.type==="put"?_(_({},c3),{keys:f2}):_({},c3)).type!=="delete"&&(c3.values=i([],c3.values)),c3.keys&&(c3.keys=i([],c3.keys)),e4=y2,n3=f2,((t3=c3).type==="add"?Promise.resolve([]):e4.getMany({trans:t3.trans,keys:n3,cache:"immutable"})).then(function(u2){var s3=f2.map(function(e5,t4){var n4,r4, +i2,o2=u2[t4],a3={onerror:null,onsuccess:null};return c3.type==="delete"?h3.fire.call(a3,e5,o2,l2):c3.type==="add"||o2===void 0?(n4=d3.fire.call(a3,e5,c3.values[t4],l2),e5==null&&n4!=null&&(c3.keys[t4]=e5=n4,v2.outbound||P(c3.values[t4],v2.keyPath,e5))):(n4=Fn(o2,c3.values[t4]),(r4=p3.fire.call(a3,n4,e5,o2,l2))&&(i2=c3.values[t4],Object.keys(r4).forEach(function(e6){m(i2,e6)?i2[e6]=r4[e6]:P(i2,e6,r4[e6])}))),a3});return y2.mutate(c3).then(function(e5){for(var t4=e5.failures,n4=e5.results,r4=e5.numFailures, e5=e5.lastResult,i2=0;i2<f2.length;++i2){var o2=(n4||f2)[i2],a3=s3[i2];o2==null?a3.onerror&&a3.onerror(t4[i2]):a3.onsuccess&&a3.onsuccess(c3.type==="put"&&u2[i2]?c3.values[i2]:o2)}return{failures:t4,results:n4,numFailures:r4,lastResult:e5}}).catch(function(t4){return s3.forEach(function(e5){return e5.onerror&&e5.onerror(t4)}),Promise.reject(t4)})})}}})}})}};function Ln(e2,t2,n2){try{if(!t2||t2.keys.length<e2.length)return null;for(var r3=[],i2=0,o2=0;i2<t2.keys.length&&o2<e2.length;++i2)st(t2.keys[i2], e2[o2])===0&&(r3.push(n2?S2(t2.values[i2]):t2.values[i2]),++o2);return r3.length===e2.length?r3:null}catch{return null}}var Un={stack:"dbcore",level:-1,create:function(t2){return{table:function(e2){var n2=t2.table(e2);return _(_({},n2),{getMany:function(t3){if(!t3.cache)return n2.getMany(t3);var e3=Ln(t3.keys,t3.trans._cache,t3.cache==="clone");return e3?_e.resolve(e3):n2.getMany(t3).then(function(e4){return t3.trans._cache={keys:t3.keys,values:t3.cache==="clone"?S2(e4):e4},e4})},mutate:function(e3){ return e3.type!=="add"&&(e3.trans._cache=null),n2.mutate(e3)}})}}}};function Vn(e2,t2){return e2.trans.mode==="readonly"&&!!e2.subscr&&!e2.trans.explicit&&e2.trans.db._options.cache!=="disabled"&&!t2.schema.primaryKey.outbound}function zn(e2,t2){switch(e2){case"query":return t2.values&&!t2.unique;case"get":case"getMany":case"count":case"openCursor":return!1}}var Wn={stack:"dbcore",level:0,name:"Observability",create:function(b2){var g2=b2.schema.name,w2=new gn(b2.MIN_KEY,b2.MAX_KEY);return _(_({}, @@ -3673,138 +3756,137 @@ get:function(){return a2.addKey(n3.primaryKey),n3.key}},primaryKey:{get:function keys=t2.keys.filter(function(e3,t3){return!(t3 in n2.failures)})),"values"in t2&&k(t2.values)&&(t2.values=t2.values.filter(function(e3,t3){return!(t3 in n2.failures)})),t2)}function $n(e2,t2){return n2=e2,((r3=t2).lower===void 0||(r3.lowerOpen?0<st(n2,r3.lower):0<=st(n2,r3.lower)))&&(e2=e2,(t2=t2).upper===void 0||(t2.upperOpen?st(e2,t2.upper)<0:st(e2,t2.upper)<=0));var n2,r3}function Qn(e2,d3,t2,n2,r3,i2){if(!t2||t2.length===0)return e2;var o2=d3.query.index,p3=o2.multiEntry,y2=d3.query.range,v2=n2. schema.primaryKey.extractKey,m2=o2.extractKey,a2=(o2.lowLevelIndex||o2).extractKey,t2=t2.reduce(function(e3,t3){var n3=e3,r4=[];if(t3.type==="add"||t3.type==="put")for(var i3=new gn,o3=t3.values.length-1;0<=o3;--o3){var a3,u2=t3.values[o3],s3=v2(u2);i3.hasKey(s3)||(a3=m2(u2),(p3&&k(a3)?a3.some(function(e4){return $n(e4,y2)}):$n(a3,y2))&&(i3.addKey(s3),r4.push(u2)))}switch(t3.type){case"add":var c3=new gn().addKeys(d3.values?e3.map(function(e4){return v2(e4)}):e3),n3=e3.concat(d3.values?r4.filter( function(e4){return e4=v2(e4),!c3.hasKey(e4)&&(c3.addKey(e4),!0)}):r4.map(function(e4){return v2(e4)}).filter(function(e4){return!c3.hasKey(e4)&&(c3.addKey(e4),!0)}));break;case"put":var l2=new gn().addKeys(t3.values.map(function(e4){return v2(e4)}));n3=e3.filter(function(e4){return!l2.hasKey(d3.values?v2(e4):e4)}).concat(d3.values?r4:r4.map(function(e4){return v2(e4)}));break;case"delete":var f2=new gn().addKeys(t3.keys);n3=e3.filter(function(e4){return!f2.hasKey(d3.values?v2(e4):e4)});break;case"\ -deleteRange":var h3=t3.range;n3=e3.filter(function(e4){return!$n(v2(e4),h3)})}return n3},e2);return t2===e2?e2:(t2.sort(function(e3,t3){return st(a2(e3),a2(t3))||st(v2(e3),v2(t3))}),d3.limit&&d3.limit<1/0&&(t2.length>d3.limit?t2.length=d3.limit:e2.length===d3.limit&&t2.length<d3.limit&&(r3.dirty=!0)),i2?Object.freeze(t2):t2)}function Gn(e2,t2){return st(e2.lower,t2.lower)===0&&st(e2.upper,t2.upper)===0&&!!e2.lowerOpen==!!t2.lowerOpen&&!!e2.upperOpen==!!t2.upperOpen}function Xn(e2,t2){return function(e3,t3,n2,r3){ -if(e3===void 0)return t3!==void 0?-1:0;if(t3===void 0)return 1;if((t3=st(e3,t3))===0){if(n2&&r3)return 0;if(n2)return 1;if(r3)return-1}return t3}(e2.lower,t2.lower,e2.lowerOpen,t2.lowerOpen)<=0&&0<=function(e3,t3,n2,r3){if(e3===void 0)return t3!==void 0?1:0;if(t3===void 0)return-1;if((t3=st(e3,t3))===0){if(n2&&r3)return 0;if(n2)return-1;if(r3)return 1}return t3}(e2.upper,t2.upper,e2.upperOpen,t2.upperOpen)}function Hn(n2,r3,i2,e2){n2.subscribers.add(i2),e2.addEventListener("abort",function(){var e3, -t2;n2.subscribers.delete(i2),n2.subscribers.size===0&&(e3=n2,t2=r3,setTimeout(function(){e3.subscribers.size===0&&q2(t2,e3)},3e3))})}var Jn={stack:"dbcore",level:0,name:"Cache",create:function(k2){var O2=k2.schema.name;return _(_({},k2),{transaction:function(g2,w2,e2){var _4,t2,x2=k2.transaction(g2,w2,e2);return w2==="readwrite"&&(t2=(_4=new AbortController).signal,e2=function(b2){return function(){if(_4.abort(),w2==="readwrite"){for(var t3=new Set,e3=0,n2=g2;e3<n2.length;e3++){var r3=n2[e3],i2=Sn["\ -idb://".concat(O2,"/").concat(r3)];if(i2){var o2=k2.table(r3),a2=i2.optimisticOps.filter(function(e4){return e4.trans===x2});if(x2._explicit&&b2&&x2.mutatedParts)for(var u2=0,s3=Object.values(i2.queries.query);u2<s3.length;u2++)for(var c3=0,l2=(d3=s3[u2]).slice();c3<l2.length;c3++)En((p3=l2[c3]).obsSet,x2.mutatedParts)&&(q2(d3,p3),p3.subscribers.forEach(function(e4){return t3.add(e4)}));else if(0<a2.length){i2.optimisticOps=i2.optimisticOps.filter(function(e4){return e4.trans!==x2});for(var f2=0, +deleteRange":var h3=t3.range;n3=e3.filter(function(e4){return!$n(v2(e4),h3)})}return n3},e2);return t2===e2?e2:(t2.sort(function(e3,t3){return st(a2(e3),a2(t3))||st(v2(e3),v2(t3))}),d3.limit&&d3.limit<1/0&&(t2.length>d3.limit?t2.length=d3.limit:e2.length===d3.limit&&t2.length<d3.limit&&(r3.dirty=!0)),i2?Object.freeze(t2):t2)}function Gn(e2,t2){return st(e2.lower,t2.lower)===0&&st(e2.upper,t2.upper)===0&&!!e2.lowerOpen==!!t2.lowerOpen&&!!e2.upperOpen==!!t2.upperOpen}function Xn(e2,t2){return(function(e3,t3,n2,r3){ +if(e3===void 0)return t3!==void 0?-1:0;if(t3===void 0)return 1;if((t3=st(e3,t3))===0){if(n2&&r3)return 0;if(n2)return 1;if(r3)return-1}return t3})(e2.lower,t2.lower,e2.lowerOpen,t2.lowerOpen)<=0&&0<=(function(e3,t3,n2,r3){if(e3===void 0)return t3!==void 0?1:0;if(t3===void 0)return-1;if((t3=st(e3,t3))===0){if(n2&&r3)return 0;if(n2)return-1;if(r3)return 1}return t3})(e2.upper,t2.upper,e2.upperOpen,t2.upperOpen)}function Hn(n2,r3,i2,e2){n2.subscribers.add(i2),e2.addEventListener("abort",function(){ +var e3,t2;n2.subscribers.delete(i2),n2.subscribers.size===0&&(e3=n2,t2=r3,setTimeout(function(){e3.subscribers.size===0&&q2(t2,e3)},3e3))})}var Jn={stack:"dbcore",level:0,name:"Cache",create:function(k2){var O2=k2.schema.name;return _(_({},k2),{transaction:function(g2,w2,e2){var _9,t2,x2=k2.transaction(g2,w2,e2);return w2==="readwrite"&&(t2=(_9=new AbortController).signal,e2=function(b2){return function(){if(_9.abort(),w2==="readwrite"){for(var t3=new Set,e3=0,n2=g2;e3<n2.length;e3++){var r3=n2[e3], +i2=Sn["idb://".concat(O2,"/").concat(r3)];if(i2){var o2=k2.table(r3),a2=i2.optimisticOps.filter(function(e4){return e4.trans===x2});if(x2._explicit&&b2&&x2.mutatedParts)for(var u2=0,s3=Object.values(i2.queries.query);u2<s3.length;u2++)for(var c3=0,l2=(d3=s3[u2]).slice();c3<l2.length;c3++)En((p3=l2[c3]).obsSet,x2.mutatedParts)&&(q2(d3,p3),p3.subscribers.forEach(function(e4){return t3.add(e4)}));else if(0<a2.length){i2.optimisticOps=i2.optimisticOps.filter(function(e4){return e4.trans!==x2});for(var f2=0, h3=Object.values(i2.queries.query);f2<h3.length;f2++)for(var d3,p3,y2,v2=0,m2=(d3=h3[f2]).slice();v2<m2.length;v2++)(p3=m2[v2]).res!=null&&x2.mutatedParts&&(b2&&!p3.dirty?(y2=Object.isFrozen(p3.res),y2=Qn(p3.res,p3.req,a2,o2,p3,y2),p3.dirty?(q2(d3,p3),p3.subscribers.forEach(function(e4){return t3.add(e4)})):y2!==p3.res&&(p3.res=y2,p3.promise=_e.resolve({result:y2}))):(p3.dirty&&q2(d3,p3),p3.subscribers.forEach(function(e4){return t3.add(e4)})))}}}t3.forEach(function(e4){return e4()})}}},x2.addEventListener( "abort",e2(!1),{signal:t2}),x2.addEventListener("error",e2(!1),{signal:t2}),x2.addEventListener("complete",e2(!0),{signal:t2})),x2},table:function(c3){var l2=k2.table(c3),i2=l2.schema.primaryKey;return _(_({},l2),{mutate:function(t2){var e2=me.trans;if(i2.outbound||e2.db._options.cache==="disabled"||e2.explicit||e2.idbtrans.mode!=="readwrite")return l2.mutate(t2);var n2=Sn["idb://".concat(O2,"/").concat(c3)];return n2?(e2=l2.mutate(t2),t2.type!=="add"&&t2.type!=="put"||!(50<=t2.values.length||Mn( i2,t2).some(function(e3){return e3==null}))?(n2.optimisticOps.push(t2),t2.mutatedParts&&Cn(t2.mutatedParts),e2.then(function(e3){0<e3.numFailures&&(q2(n2.optimisticOps,t2),(e3=Yn(0,t2,e3))&&n2.optimisticOps.push(e3),t2.mutatedParts&&Cn(t2.mutatedParts))}),e2.catch(function(){q2(n2.optimisticOps,t2),t2.mutatedParts&&Cn(t2.mutatedParts)})):e2.then(function(r3){var e3=Yn(0,_(_({},t2),{values:t2.values.map(function(e4,t3){var n3;return r3.failures[t3]?e4:(e4=(n3=i2.keyPath)!==null&&n3!==void 0&&n3.includes( -".")?S2(e4):_({},e4),P(e4,i2.keyPath,r3.results[t3]),e4)})}),r3);n2.optimisticOps.push(e3),queueMicrotask(function(){return t2.mutatedParts&&Cn(t2.mutatedParts)})}),e2):l2.mutate(t2)},query:function(t2){if(!Vn(me,l2)||!zn("query",t2))return l2.query(t2);var i3=((o2=me.trans)===null||o2===void 0?void 0:o2.db._options.cache)==="immutable",e2=me,n2=e2.requery,r3=e2.signal,o2=function(e3,t3,n3,r4){var i4=Sn["idb://".concat(e3,"/").concat(t3)];if(!i4)return[];if(!(t3=i4.queries[n3]))return[null,!1,i4, +".")?S2(e4):_({},e4),P(e4,i2.keyPath,r3.results[t3]),e4)})}),r3);n2.optimisticOps.push(e3),queueMicrotask(function(){return t2.mutatedParts&&Cn(t2.mutatedParts)})}),e2):l2.mutate(t2)},query:function(t2){if(!Vn(me,l2)||!zn("query",t2))return l2.query(t2);var i3=((o2=me.trans)===null||o2===void 0?void 0:o2.db._options.cache)==="immutable",e2=me,n2=e2.requery,r3=e2.signal,o2=(function(e3,t3,n3,r4){var i4=Sn["idb://".concat(e3,"/").concat(t3)];if(!i4)return[];if(!(t3=i4.queries[n3]))return[null,!1,i4, null];var o3=t3[(r4.query?r4.query.index.name:null)||""];if(!o3)return[null,!1,i4,null];switch(n3){case"query":var a3=o3.find(function(e4){return e4.req.limit===r4.limit&&e4.req.values===r4.values&&Gn(e4.req.query.range,r4.query.range)});return a3?[a3,!0,i4,o3]:[o3.find(function(e4){return("limit"in e4.req?e4.req.limit:1/0)>=r4.limit&&(!r4.values||e4.req.values)&&Xn(e4.req.query.range,r4.query.range)}),!1,i4,o3];case"count":return a3=o3.find(function(e4){return Gn(e4.req.query.range,r4.query.range)}), -[a3,!!a3,i4,o3]}}(O2,c3,"query",t2),a2=o2[0],e2=o2[1],u2=o2[2],s3=o2[3];return a2&&e2?a2.obsSet=t2.obsSet:(e2=l2.query(t2).then(function(e3){var t3=e3.result;if(a2&&(a2.res=t3),i3){for(var n3=0,r4=t3.length;n3<r4;++n3)Object.freeze(t3[n3]);Object.freeze(t3)}else e3.result=S2(t3);return e3}).catch(function(e3){return s3&&a2&&q2(s3,a2),Promise.reject(e3)}),a2={obsSet:t2.obsSet,promise:e2,subscribers:new Set,type:"query",req:t2,dirty:!1},s3?s3.push(a2):(s3=[a2],(u2=u2||(Sn["idb://".concat(O2,"/").concat( -c3)]={queries:{query:{},count:{}},objs:new Map,optimisticOps:[],unsignaledParts:{}})).queries.query[t2.query.index.name||""]=s3)),Hn(a2,s3,n2,r3),a2.promise.then(function(e3){return{result:Qn(e3.result,t2,u2?.optimisticOps,l2,a2,i3)}})}})}})}};function Zn(e2,r3){return new Proxy(e2,{get:function(e3,t2,n2){return t2==="db"?r3:Reflect.get(e3,t2,n2)}})}var er=(tr2.prototype.version=function(t2){if(isNaN(t2)||t2<.1)throw new Y.Type("Given version is not a positive number");if(t2=Math.round(10*t2)/10, -this.idbdb||this._state.isBeingOpened)throw new Y.Schema("Cannot add version when database is open");this.verno=Math.max(this.verno,t2);var e2=this._versions,n2=e2.filter(function(e3){return e3._cfg.version===t2})[0];return n2||(n2=new this.Version(t2),e2.push(n2),e2.sort(nn),n2.stores({}),this._state.autoSchema=!1,n2)},tr2.prototype._whenReady=function(e2){var n2=this;return this.idbdb&&(this._state.openComplete||me.letThrough||this._vip)?e2():new _e(function(e3,t2){if(n2._state.openComplete)return t2( -new Y.DatabaseClosed(n2._state.dbOpenError));if(!n2._state.isBeingOpened){if(!n2._state.autoOpen)return void t2(new Y.DatabaseClosed);n2.open().catch(G)}n2._state.dbReadyPromise.then(e3,t2)}).then(e2)},tr2.prototype.use=function(e2){var t2=e2.stack,n2=e2.create,r3=e2.level,i2=e2.name;return i2&&this.unuse({stack:t2,name:i2}),e2=this._middlewares[t2]||(this._middlewares[t2]=[]),e2.push({stack:t2,create:n2,level:r3??10,name:i2}),e2.sort(function(e3,t3){return e3.level-t3.level}),this},tr2.prototype. -unuse=function(e2){var t2=e2.stack,n2=e2.name,r3=e2.create;return t2&&this._middlewares[t2]&&(this._middlewares[t2]=this._middlewares[t2].filter(function(e3){return r3?e3.create!==r3:!!n2&&e3.name!==n2})),this},tr2.prototype.open=function(){var e2=this;return $e(ve,function(){return Dn(e2)})},tr2.prototype._close=function(){var n2=this._state,e2=et.indexOf(this);if(0<=e2&&et.splice(e2,1),this.idbdb){try{this.idbdb.close()}catch{}this.idbdb=null}n2.isBeingOpened||(n2.dbReadyPromise=new _e(function(e3){ -n2.dbReadyResolve=e3}),n2.openCanceller=new _e(function(e3,t2){n2.cancelOpen=t2}))},tr2.prototype.close=function(e2){var t2=(e2===void 0?{disableAutoOpen:!0}:e2).disableAutoOpen,e2=this._state;t2?(e2.isBeingOpened&&e2.cancelOpen(new Y.DatabaseClosed),this._close(),e2.autoOpen=!1,e2.dbOpenError=new Y.DatabaseClosed):(this._close(),e2.autoOpen=this._options.autoOpen||e2.isBeingOpened,e2.openComplete=!1,e2.dbOpenError=null)},tr2.prototype.delete=function(n2){var i2=this;n2===void 0&&(n2={disableAutoOpen:!0}); -var o2=0<arguments.length&&typeof arguments[0]!="object",a2=this._state;return new _e(function(r3,t2){function e2(){i2.close(n2);var e3=i2._deps.indexedDB.deleteDatabase(i2.name);e3.onsuccess=qe(function(){var e4,t3,n3;e4=i2._deps,t3=i2.name,n3=e4.indexedDB,e4=e4.IDBKeyRange,vn(n3)||t3===tt||yn(n3,e4).delete(t3).catch(G),r3()}),e3.onerror=Bt(t2),e3.onblocked=i2._fireOnBlocked}if(o2)throw new Y.InvalidArgument("Invalid closeOptions argument to db.delete()");a2.isBeingOpened?a2.dbReadyPromise.then( -e2):e2()})},tr2.prototype.backendDB=function(){return this.idbdb},tr2.prototype.isOpen=function(){return this.idbdb!==null},tr2.prototype.hasBeenClosed=function(){var e2=this._state.dbOpenError;return e2&&e2.name==="DatabaseClosed"},tr2.prototype.hasFailed=function(){return this._state.dbOpenError!==null},tr2.prototype.dynamicallyOpened=function(){return this._state.autoSchema},Object.defineProperty(tr2.prototype,"tables",{get:function(){var t2=this;return x(this._allTables).map(function(e2){return t2. -_allTables[e2]})},enumerable:!1,configurable:!0}),tr2.prototype.transaction=function(){var e2=(function(e3,t2,n2){var r3=arguments.length;if(r3<2)throw new Y.InvalidArgument("Too few arguments");for(var i2=new Array(r3-1);--r3;)i2[r3-1]=arguments[r3];return n2=i2.pop(),[e3,w(i2),n2]}).apply(this,arguments);return this._transaction.apply(this,e2)},tr2.prototype._transaction=function(e2,t2,n2){var r3=this,i2=me.trans;i2&&i2.db===this&&e2.indexOf("!")===-1||(i2=null);var o2,a2,u2=e2.indexOf("?")!== --1;e2=e2.replace("!","").replace("?","");try{if(a2=t2.map(function(e3){if(e3=e3 instanceof r3.Table?e3.name:e3,typeof e3!="string")throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed");return e3}),e2=="r"||e2===nt)o2=nt;else{if(e2!="rw"&&e2!=rt)throw new Y.InvalidArgument("Invalid transaction mode: "+e2);o2=rt}if(i2){if(i2.mode===nt&&o2===rt){if(!u2)throw new Y.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transact\ -ion is READONLY");i2=null}i2&&a2.forEach(function(e3){if(i2&&i2.storeNames.indexOf(e3)===-1){if(!u2)throw new Y.SubTransaction("Table "+e3+" not included in parent transaction.");i2=null}}),u2&&i2&&!i2.active&&(i2=null)}}catch(n3){return i2?i2._promise(null,function(e3,t3){t3(n3)}):Xe(n3)}var s3=(function i3(o3,a3,u3,s4,c3){return _e.resolve().then(function(){var e3=me.transless||me,t3=o3._createTransaction(a3,u3,o3._dbSchema,s4);if(t3.explicit=!0,e3={trans:t3,transless:e3},s4)t3.idbtrans=s4.idbtrans;else -try{t3.create(),t3.idbtrans._explicit=!0,o3._state.PR1398_maxLoop=3}catch(e4){return e4.name===z.InvalidState&&o3.isOpen()&&0<--o3._state.PR1398_maxLoop?(console.warn("Dexie: Need to reopen db"),o3.close({disableAutoOpen:!1}),o3.open().then(function(){return i3(o3,a3,u3,null,c3)})):Xe(e4)}var n3,r4=B(c3);return r4&&Le(),e3=_e.follow(function(){var e4;(n3=c3.call(t3,t3))&&(r4?(e4=Ue.bind(null,null),n3.then(e4,e4)):typeof n3.next=="function"&&typeof n3.throw=="function"&&(n3=In(n3)))},e3),(n3&&typeof n3. -then=="function"?_e.resolve(n3).then(function(e4){return t3.active?e4:Xe(new Y.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn"))}):e3.then(function(){return n3})).then(function(e4){return s4&&t3._resolve(),t3._completion.then(function(){return e4})}).catch(function(e4){return t3._reject(e4),Xe(e4)})})}).bind(null,this,o2,a2,i2,n2);return i2?i2._promise(o2,s3,"lock"):me.trans?$e(me.transless,function(){return r3._whenReady(s3)}):this._whenReady(s3)},tr2.prototype.table= -function(e2){if(!m(this._allTables,e2))throw new Y.InvalidTable("Table ".concat(e2," does not exist"));return this._allTables[e2]},tr2);function tr2(e2,t2){var o2=this;this._middlewares={},this.verno=0;var n2=tr2.dependencies;this._options=t2=_({addons:tr2.addons,autoOpen:!0,indexedDB:n2.indexedDB,IDBKeyRange:n2.IDBKeyRange,cache:"cloned"},t2),this._deps={indexedDB:t2.indexedDB,IDBKeyRange:t2.IDBKeyRange},n2=t2.addons,this._dbSchema={},this._versions=[],this._storeNames=[],this._allTables={},this. -idbdb=null,this._novip=this;var a2,r3,u2,i2,s3,c3={dbOpenError:null,isBeingOpened:!1,onReadyBeingFired:null,openComplete:!1,dbReadyResolve:G,dbReadyPromise:null,cancelOpen:G,openCanceller:null,autoSchema:!0,PR1398_maxLoop:3,autoOpen:t2.autoOpen};c3.dbReadyPromise=new _e(function(e3){c3.dbReadyResolve=e3}),c3.openCanceller=new _e(function(e3,t3){c3.cancelOpen=t3}),this._state=c3,this.name=e2,this.on=dt2(this,"populate","blocked","versionchange","close",{ready:[re2,G]}),this.on.ready.subscribe=p2( -this.on.ready.subscribe,function(i3){return function(n3,r4){tr2.vip(function(){var t3,e3=o2._state;e3.openComplete?(e3.dbOpenError||_e.resolve().then(n3),r4&&i3(n3)):e3.onReadyBeingFired?(e3.onReadyBeingFired.push(n3),r4&&i3(n3)):(i3(n3),t3=o2,r4||i3(function e4(){t3.on.ready.unsubscribe(n3),t3.on.ready.unsubscribe(e4)}))})}}),this.Collection=(a2=this,pt(Ot.prototype,function(e3,t3){this.db=a2;var n3=ot,r4=null;if(t3)try{n3=t3()}catch(e4){r4=e4}var i3=e3._ctx,t3=i3.table,e3=t3.hook.reading.fire; -this._ctx={table:t3,index:i3.index,isPrimKey:!i3.index||t3.schema.primKey.keyPath&&i3.index===t3.schema.primKey.name,range:n3,keysOnly:!1,dir:"next",unique:"",algorithm:null,filter:null,replayFilter:null,justLimit:!0,isMatch:null,offset:0,limit:1/0,error:r4,or:i3.or,valueMapper:e3!==X2?e3:null}})),this.Table=(r3=this,pt(ft.prototype,function(e3,t3,n3){this.db=r3,this._tx=n3,this.name=e3,this.schema=t3,this.hook=r3._allTables[e3]?r3._allTables[e3].hook:dt2(null,{creating:[Z,G],reading:[H,X2],updating:[ -te,G],deleting:[ee,G]})})),this.Transaction=(u2=this,pt(Lt.prototype,function(e3,t3,n3,r4,i3){var o3=this;this.db=u2,this.mode=e3,this.storeNames=t3,this.schema=n3,this.chromeTransactionDurability=r4,this.idbtrans=null,this.on=dt2(this,"complete","error","abort"),this.parent=i3||null,this.active=!0,this._reculock=0,this._blockedFuncs=[],this._resolve=null,this._reject=null,this._waitingFor=null,this._waitingQueue=null,this._spinCount=0,this._completion=new _e(function(e4,t4){o3._resolve=e4,o3._reject= -t4}),this._completion.then(function(){o3.active=!1,o3.on.complete.fire()},function(e4){var t4=o3.active;return o3.active=!1,o3.on.error.fire(e4),o3.parent?o3.parent._reject(e4):t4&&o3.idbtrans&&o3.idbtrans.abort(),Xe(e4)})})),this.Version=(i2=this,pt(dn.prototype,function(e3){this.db=i2,this._cfg={version:e3,storesSource:null,dbschema:{},tables:{},contentUpgrade:null}})),this.WhereClause=(s3=this,pt(Dt.prototype,function(e3,t3,n3){if(this.db=s3,this._ctx={table:e3,index:t3===":id"?null:t3,or:n3}, -this._cmp=this._ascending=st,this._descending=function(e4,t4){return st(t4,e4)},this._max=function(e4,t4){return 0<st(e4,t4)?e4:t4},this._min=function(e4,t4){return st(e4,t4)<0?e4:t4},this._IDBKeyRange=s3._deps.IDBKeyRange,!this._IDBKeyRange)throw new Y.MissingAPI})),this.on("versionchange",function(e3){0<e3.newVersion?console.warn("Another connection wants to upgrade database '".concat(o2.name,"'. Closing db now to resume the upgrade.")):console.warn("Another connection wants to delete database\ - '".concat(o2.name,"'. Closing db now to resume the delete request.")),o2.close({disableAutoOpen:!1})}),this.on("blocked",function(e3){!e3.newVersion||e3.newVersion<e3.oldVersion?console.warn("Dexie.delete('".concat(o2.name,"') was blocked")):console.warn("Upgrade '".concat(o2.name,"' blocked by other connection holding version ").concat(e3.oldVersion/10))}),this._maxKey=Yt(t2.IDBKeyRange),this._createTransaction=function(e3,t3,n3,r4){return new o2.Transaction(e3,t3,n3,o2._options.chromeTransactionDurability, -r4)},this._fireOnBlocked=function(t3){o2.on("blocked").fire(t3),et.filter(function(e3){return e3.name===o2.name&&e3!==o2&&!e3._state.vcFired}).map(function(e3){return e3.on("versionchange").fire(t3)})},this.use(Un),this.use(Jn),this.use(Wn),this.use(Rn),this.use(Nn);var l2=new Proxy(this,{get:function(e3,t3,n3){if(t3==="_vip")return!0;if(t3==="table")return function(e4){return Zn(o2.table(e4),l2)};var r4=Reflect.get(e3,t3,n3);return r4 instanceof ft?Zn(r4,l2):t3==="tables"?r4.map(function(e4){return Zn( -e4,l2)}):t3==="_createTransaction"?function(){return Zn(r4.apply(this,arguments),l2)}:r4}});this.vip=l2,n2.forEach(function(e3){return e3(o2)})}var nr,F=typeof Symbol<"u"&&"observable"in Symbol?Symbol.observable:"@@observable",rr=(ir.prototype.subscribe=function(e2,t2,n2){return this._subscribe(e2&&typeof e2!="function"?e2:{next:e2,error:t2,complete:n2})},ir.prototype[F]=function(){return this},ir);function ir(e2){this._subscribe=e2}try{nr={indexedDB:f.indexedDB||f.mozIndexedDB||f.webkitIndexedDB|| -f.msIndexedDB,IDBKeyRange:f.IDBKeyRange||f.webkitIDBKeyRange}}catch{nr={indexedDB:null,IDBKeyRange:null}}function or(h3){var d3,p3=!1,e2=new rr(function(r3){var i2=B(h3),o2,a2=!1,u2={},s3={},e3={get closed(){return a2},unsubscribe:function(){a2||(a2=!0,o2&&o2.abort(),c3&&Nt.storagemutated.unsubscribe(f2))}};r3.start&&r3.start(e3);var c3=!1,l2=function(){return Ge(t2)},f2=function(e4){Kn(u2,e4),En(s3,u2)&&l2()},t2=function(){var t3,n2,e4;!a2&&nr.indexedDB&&(u2={},t3={},o2&&o2.abort(),o2=new AbortController, -e4=function(e5){var t4=je();try{i2&&Le();var n3=Ne(h3,e5);return n3=i2?n3.finally(Ue):n3}finally{t4&&Ae()}}(n2={subscr:t3,signal:o2.signal,requery:l2,querier:h3,trans:null}),Promise.resolve(e4).then(function(e5){p3=!0,d3=e5,a2||n2.signal.aborted||(u2={},function(e6){for(var t4 in e6)if(m(e6,t4))return;return 1}(s3=t3)||c3||(Nt(Ft,f2),c3=!0),Ge(function(){return!a2&&r3.next&&r3.next(e5)}))},function(e5){p3=!1,["DatabaseClosedError","AbortError"].includes(e5?.name)||a2||Ge(function(){a2||r3.error&& -r3.error(e5)})}))};return setTimeout(l2,0),e3});return e2.hasValue=function(){return p3},e2.getValue=function(){return d3},e2}var ar=er;function ur(e2){var t2=cr;try{cr=!0,Nt.storagemutated.fire(e2),Tn(e2,!0)}finally{cr=t2}}r2(ar,_(_({},Q),{delete:function(e2){return new ar(e2,{addons:[]}).delete()},exists:function(e2){return new ar(e2,{addons:[]}).open().then(function(e3){return e3.close(),!0}).catch("NoSuchDatabaseError",function(){return!1})},getDatabaseNames:function(e2){try{return t2=ar.dependencies, -n2=t2.indexedDB,t2=t2.IDBKeyRange,(vn(n2)?Promise.resolve(n2.databases()).then(function(e3){return e3.map(function(e4){return e4.name}).filter(function(e4){return e4!==tt})}):yn(n2,t2).toCollection().primaryKeys()).then(e2)}catch{return Xe(new Y.MissingAPI)}var t2,n2},defineClass:function(){return function(e2){a(this,e2)}},ignoreTransaction:function(e2){return me.trans?$e(me.transless,e2):e2()},vip:mn,async:function(t2){return function(){try{var e2=In(t2.apply(this,arguments));return e2&&typeof e2. -then=="function"?e2:_e.resolve(e2)}catch(e3){return Xe(e3)}}},spawn:function(e2,t2,n2){try{var r3=In(e2.apply(n2,t2||[]));return r3&&typeof r3.then=="function"?r3:_e.resolve(r3)}catch(e3){return Xe(e3)}},currentTransaction:{get:function(){return me.trans||null}},waitFor:function(e2,t2){return t2=_e.resolve(typeof e2=="function"?ar.ignoreTransaction(e2):e2).timeout(t2||6e4),me.trans?me.trans.waitFor(t2):t2},Promise:_e,debug:{get:function(){return ie},set:function(e2){oe(e2)}},derive:o,extend:a,props:r2, -override:p2,Events:dt2,on:Nt,liveQuery:or,extendObservabilitySet:Kn,getByKeyPath:O,setByKeyPath:P,delByKeyPath:function(t2,e2){typeof e2=="string"?P(t2,e2,void 0):"length"in e2&&[].map.call(e2,function(e3){P(t2,e3,void 0)})},shallowClone:g,deepClone:S2,getObjectDiff:Fn,cmp:st,asap:v,minKey:-1/0,addons:[],connections:et,errnames:z,dependencies:nr,cache:Sn,semVer:"4.0.11",version:"4.0.11".split(".").map(function(e2){return parseInt(e2)}).reduce(function(e2,t2,n2){return e2+t2/Math.pow(10,2*n2)})})), -ar.maxKey=Yt(ar.dependencies.IDBKeyRange),typeof dispatchEvent<"u"&&typeof addEventListener<"u"&&(Nt(Ft,function(e2){cr||(e2=new CustomEvent(Mt,{detail:e2}),cr=!0,dispatchEvent(e2),cr=!1)}),addEventListener(Mt,function(e2){e2=e2.detail,cr||ur(e2)}));var sr,cr=!1,lr=function(){};return typeof BroadcastChannel<"u"&&((lr=function(){(sr=new BroadcastChannel(Mt)).onmessage=function(e2){return e2.data&&ur(e2.data)}})(),typeof sr.unref=="function"&&sr.unref(),Nt(Ft,function(e2){cr||sr.postMessage(e2)})), -typeof addEventListener<"u"&&(addEventListener("pagehide",function(e2){if(!er.disableBfCache&&e2.persisted){ie&&console.debug("Dexie: handling persisted pagehide"),sr?.close();for(var t2=0,n2=et;t2<n2.length;t2++)n2[t2].close({disableAutoOpen:!1})}}),addEventListener("pageshow",function(e2){!er.disableBfCache&&e2.persisted&&(ie&&console.debug("Dexie: handling persisted pageshow"),lr(),ur({all:new gn(-1/0,[[]])}))})),_e.rejectionMapper=function(e2,t2){return!e2||e2 instanceof N||e2 instanceof TypeError|| -e2 instanceof SyntaxError||!e2.name||!$[e2.name]?e2:(t2=new $[e2.name](t2||e2.message,e2),"stack"in e2&&l(t2,"stack",{get:function(){return this.inner.stack}}),t2)},oe(ie),_(er,Object.freeze({__proto__:null,Dexie:er,liveQuery:or,Entity:ut,cmp:st,PropModification:xt,replacePrefix:function(e2,t2){return new xt({replacePrefix:[e2,t2]})},add:function(e2){return new xt({add:e2})},remove:function(e2){return new xt({remove:e2})},default:er,RangeSet:gn,mergeRanges:_n,rangesOverlap:xn}),{default:er}),er})}( -dexie_min$1)),dexie_min$1.exports}var dexie_minExports=requireDexie_min();const _Dexie=getDefaultExportFromCjs(dexie_minExports),DexieSymbol=Symbol.for("Dexie"),Dexie=globalThis[DexieSymbol]||(globalThis[DexieSymbol]=_Dexie);if(_Dexie.semVer!==Dexie.semVer)throw new Error(`Two different versions of Dexie loaded in the same app: ${_Dexie.semVer} and ${Dexie.semVer}`);const{liveQuery,mergeRanges,rangesOverlap,RangeSet,cmp,Entity,PropModification,replacePrefix,add,remove}=Dexie;class LlamacppDatabase extends Dexie{conversations;messages;constructor(){ -super("LlamacppWebui"),this.version(1).stores({conversations:"id, lastModified, currNode, name",messages:"id, convId, type, role, timestamp, parent, children"})}}const db=new LlamacppDatabase;class DatabaseService{static async createConversation(name){const conversation={id:uuid$1(),name,lastModified:Date.now(),currNode:""};return await db.conversations.add(conversation),conversation}static async createMessageBranch(message,parentId){return await db.transaction("rw",[db.conversations,db.messages], -async()=>{if(parentId!==null&&!await db.messages.get(parentId))throw new Error(`Parent message ${parentId} not found`);const newMessage={...message,id:uuid$1(),parent:parentId,toolCalls:message.toolCalls??"",children:[]};if(await db.messages.add(newMessage),parentId!==null){const parentMessage=await db.messages.get(parentId);parentMessage&&await db.messages.update(parentId,{children:[...parentMessage.children,newMessage.id]})}return await this.updateConversation(message.convId,{currNode:newMessage. -id}),newMessage})}static async createRootMessage(convId){const rootMessage={id:uuid$1(),convId,type:"root",timestamp:Date.now(),role:MessageRole.SYSTEM,content:"",parent:null,toolCalls:"",children:[]};return await db.messages.add(rootMessage),rootMessage.id}static async createSystemMessage(convId,systemPrompt,parentId){const trimmedPrompt=systemPrompt.trim();if(!trimmedPrompt)throw new Error("Cannot create system message with empty content");const systemMessage={id:uuid$1(),convId,type:MessageRole. -SYSTEM,timestamp:Date.now(),role:MessageRole.SYSTEM,content:trimmedPrompt,parent:parentId,children:[]};await db.messages.add(systemMessage);const parentMessage=await db.messages.get(parentId);return parentMessage&&await db.messages.update(parentId,{children:[...parentMessage.children,systemMessage.id]}),systemMessage}static async deleteConversation(id2,options){await db.transaction("rw",[db.conversations,db.messages],async()=>{if(options?.deleteWithForks){const idsToDelete=[],queue=[id2];for(;queue. -length>0;){const parentId=queue.pop(),children=await db.conversations.filter(c2=>c2.forkedFromConversationId===parentId).toArray();for(const child2 of children)idsToDelete.push(child2.id),queue.push(child2.id)}for(const forkId of idsToDelete)await db.conversations.delete(forkId),await db.messages.where("convId").equals(forkId).delete()}else{const newParent=(await db.conversations.get(id2))?.forkedFromConversationId,directChildren=await db.conversations.filter(c2=>c2.forkedFromConversationId===id2). -toArray();for(const child2 of directChildren)await db.conversations.update(child2.id,{forkedFromConversationId:newParent??void 0})}await db.conversations.delete(id2),await db.messages.where("convId").equals(id2).delete()})}static async deleteMessage(messageId){await db.transaction("rw",db.messages,async()=>{const message=await db.messages.get(messageId);if(message){if(message.parent){const parent=await db.messages.get(message.parent);parent&&(parent.children=parent.children.filter(childId=>childId!== -messageId),await db.messages.put(parent))}await db.messages.delete(messageId)}})}static async deleteMessageCascading(conversationId,messageId){return await db.transaction("rw",db.messages,async()=>{const allMessages=await db.messages.where("convId").equals(conversationId).toArray(),descendants=findDescendantMessages(allMessages,messageId),allToDelete=[messageId,...descendants],message=await db.messages.get(messageId);if(message&&message.parent){const parent=await db.messages.get(message.parent); -parent&&(parent.children=parent.children.filter(childId=>childId!==messageId),await db.messages.put(parent))}return await db.messages.bulkDelete(allToDelete),allToDelete})}static async getAllConversations(){return await db.conversations.orderBy("lastModified").reverse().toArray()}static async getConversation(id2){return await db.conversations.get(id2)}static async getConversationMessages(convId){return await db.messages.where("convId").equals(convId).sortBy("timestamp")}static async updateConversation(id2,updates){ -await db.conversations.update(id2,{...updates,lastModified:Date.now()})}static async updateCurrentNode(convId,nodeId){await this.updateConversation(convId,{currNode:nodeId})}static async updateMessage(id2,updates){await db.messages.update(id2,updates)}static async importConversations(data){let importedCount=0,skippedCount=0;return await db.transaction("rw",[db.conversations,db.messages],async()=>{for(const item of data){const{conv,messages}=item;if(await db.conversations.get(conv.id)){console.warn( -`Conversation "${conv.name}" already exists, skipping...`),skippedCount++;continue}await db.conversations.add(conv);for(const msg of messages)await db.messages.put(msg);importedCount++}return{imported:importedCount,skipped:skippedCount}})}static async forkConversation(sourceConvId,atMessageId,options){return await db.transaction("rw",[db.conversations,db.messages],async()=>{const sourceConv=await db.conversations.get(sourceConvId);if(!sourceConv)throw new Error(`Source conversation ${sourceConvId}\ - not found`);const allMessages=await db.messages.where("convId").equals(sourceConvId).toArray(),pathMessages=filterByLeafNodeId(allMessages,atMessageId,!0);if(pathMessages.length===0)throw new Error(`Could not resolve message path to ${atMessageId}`);const idMap=new Map;for(const msg of pathMessages)idMap.set(msg.id,uuid$1());const newConvId=uuid$1(),clonedMessages=pathMessages.map(msg=>{const newId=idMap.get(msg.id),newParent=msg.parent?idMap.get(msg.parent)??null:null,newChildren=msg.children. -filter(childId=>idMap.has(childId)).map(childId=>idMap.get(childId));return{...msg,id:newId,convId:newConvId,parent:newParent,children:newChildren,extra:options.includeAttachments?msg.extra:void 0}}),lastClonedMessage=clonedMessages[clonedMessages.length-1],newConv={id:newConvId,name:options.name,lastModified:Date.now(),currNode:lastClonedMessage.id,forkedFromConversationId:sourceConvId,mcpServerOverrides:sourceConv.mcpServerOverrides?sourceConv.mcpServerOverrides.map(o=>({serverId:o.serverId,enabled:o. -enabled})):void 0};await db.conversations.add(newConv);for(const msg of clonedMessages)await db.messages.add(msg);return newConv})}}const MIGRATION_DONE_KEY="llama-webui-migration-v2-done";function isMigrationNeeded(){try{return!localStorage.getItem(MIGRATION_DONE_KEY)}catch{return!1}}function markMigrationDone(){try{localStorage.setItem(MIGRATION_DONE_KEY,String(Date.now()))}catch{}}function hasLegacyMarkers(message){return message.content?LEGACY_AGENTIC_REGEX.HAS_LEGACY_MARKERS.test(message.content): -!1}function extractLegacyReasoning(content2){let reasoning="",cleanContent=content2;const re2=new RegExp(LEGACY_AGENTIC_REGEX.REASONING_EXTRACT.source,"g");let match;for(;(match=re2.exec(content2))!==null;)reasoning+=match[1];return cleanContent=cleanContent.replace(new RegExp(LEGACY_AGENTIC_REGEX.REASONING_BLOCK.source,"g"),"").replace(LEGACY_AGENTIC_REGEX.REASONING_OPEN,""),{reasoning,cleanContent}}function parseLegacyToolCalls(content2){const turns=[],regex=new RegExp(LEGACY_AGENTIC_REGEX.COMPLETED_TOOL_CALL. -source,"g");let lastIndex=0,currentTurn={textBefore:"",toolCalls:[]},match;for(;(match=regex.exec(content2))!==null;){const textBefore=content2.slice(lastIndex,match.index).trim();textBefore&¤tTurn.toolCalls.length>0?(turns.push(currentTurn),currentTurn={textBefore,toolCalls:[]}):textBefore&¤tTurn.toolCalls.length===0&&(currentTurn.textBefore=textBefore),currentTurn.toolCalls.push({name:match[1],args:match[2],result:match[3].replace(/^\n+|\n+$/g,"")}),lastIndex=match.index+match[0].length} -const remainingText=content2.slice(lastIndex).trim();if(currentTurn.toolCalls.length>0&&turns.push(currentTurn),remainingText){const cleanRemaining=remainingText.replace(LEGACY_AGENTIC_REGEX.AGENTIC_TOOL_CALL_OPEN,"").trim();cleanRemaining&&turns.push({textBefore:cleanRemaining,toolCalls:[]})}return turns.length===0&&turns.push({textBefore:content2.trim(),toolCalls:[]}),turns}async function migrateConversation(convId){const allMessages=await DatabaseService.getConversationMessages(convId);let migratedCount=0; -for(const message of allMessages){if(message.role!==MessageRole.ASSISTANT)continue;if(!hasLegacyMarkers(message)){if(message.content?.includes(LEGACY_REASONING_TAGS.START)){const{reasoning:reasoning2,cleanContent:cleanContent2}=extractLegacyReasoning(message.content);await DatabaseService.updateMessage(message.id,{content:cleanContent2.trim(),reasoningContent:reasoning2||void 0}),migratedCount++}continue}const{reasoning,cleanContent}=extractLegacyReasoning(message.content),turns=parseLegacyToolCalls( -cleanContent);let existingToolCalls=[];if(message.toolCalls)try{existingToolCalls=JSON.parse(message.toolCalls)}catch{}const firstTurn=turns[0];if(!firstTurn)continue;const firstTurnToolCalls=firstTurn.toolCalls.map((tc,i)=>({id:(existingToolCalls.find(e=>e.function?.name===tc.name)||existingToolCalls[i])?.id||`legacy_tool_${i}`,type:"function",function:{name:tc.name,arguments:tc.args}}));await DatabaseService.updateMessage(message.id,{content:firstTurn.textBefore,reasoningContent:reasoning||void 0, -toolCalls:firstTurnToolCalls.length>0?JSON.stringify(firstTurnToolCalls):""});let currentParentId=message.id,toolCallIdCounter=existingToolCalls.length;for(let i=0;i<firstTurn.toolCalls.length;i++){const tc=firstTurn.toolCalls[i],toolCallId=firstTurnToolCalls[i]?.id||`legacy_tool_${i}`;currentParentId=(await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.TOOL,content:tc.result,toolCallId,timestamp:message.timestamp+i+1,toolCalls:"",children:[]},currentParentId)). -id}for(let turnIdx=1;turnIdx<turns.length;turnIdx++){const turn=turns[turnIdx],turnToolCalls=turn.toolCalls.map((tc,i)=>{const idx=toolCallIdCounter+i;return{id:existingToolCalls[idx]?.id||`legacy_tool_${idx}`,type:"function",function:{name:tc.name,arguments:tc.args}}});toolCallIdCounter+=turn.toolCalls.length,currentParentId=(await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.ASSISTANT,content:turn.textBefore,timestamp:message.timestamp+turnIdx*100,toolCalls:turnToolCalls. -length>0?JSON.stringify(turnToolCalls):"",children:[],model:message.model},currentParentId)).id;for(let i=0;i<turn.toolCalls.length;i++){const tc=turn.toolCalls[i],toolCallId=turnToolCalls[i]?.id||`legacy_tool_${toolCallIdCounter+i}`;currentParentId=(await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.TOOL,content:tc.result,toolCallId,timestamp:message.timestamp+turnIdx*100+i+1,toolCalls:"",children:[]},currentParentId)).id}}if(message.children.length>0&¤tParentId!== -message.id){for(const childId of message.children){const child2=allMessages.find(m=>m.id===childId);if(child2&&child2.role!==MessageRole.TOOL){await DatabaseService.updateMessage(childId,{parent:currentParentId});const newParent=await DatabaseService.getConversationMessages(convId).then(msgs=>msgs.find(m=>m.id===currentParentId));newParent&&!newParent.children.includes(childId)&&await DatabaseService.updateMessage(currentParentId,{children:[...newParent.children,childId]})}}await DatabaseService. -updateMessage(message.id,{children:[]})}migratedCount++}return migratedCount}async function runLegacyMigration(){if(isMigrationNeeded()){console.log("[Migration] Starting legacy message format migration...");try{const conversations2=await DatabaseService.getAllConversations();let totalMigrated=0;for(const conv of conversations2){const count=await migrateConversation(conv.id);totalMigrated+=count}totalMigrated>0?console.log(`[Migration] Migrated ${totalMigrated} messages across ${conversations2.length}\ - conversations`):console.log("[Migration] No legacy messages found, marking as done"),markMigrationDone()}catch(error2){console.error("[Migration] Failed to migrate legacy messages:",error2),markMigrationDone()}}}class TTLCache{cache=new Map;ttlMs;maxEntries;onEvict;constructor(options={}){this.ttlMs=options.ttlMs??DEFAULT_CACHE_TTL_MS,this.maxEntries=options.maxEntries??DEFAULT_CACHE_MAX_ENTRIES,this.onEvict=options.onEvict}get(key2){const entry=this.cache.get(key2);return entry?Date.now()>entry. -expiresAt?(this.delete(key2),null):(entry.lastAccessed=Date.now(),entry.value):null}set(key2,value,customTtlMs){this.cache.size>=this.maxEntries&&!this.cache.has(key2)&&this.evictOldest();const ttl=customTtlMs??this.ttlMs,now2=Date.now();this.cache.set(key2,{value,expiresAt:now2+ttl,lastAccessed:now2})}has(key2){const entry=this.cache.get(key2);return entry?Date.now()>entry.expiresAt?(this.delete(key2),!1):!0:!1}delete(key2){const entry=this.cache.get(key2);return entry&&this.onEvict&&this.onEvict( -key2,entry.value),this.cache.delete(key2)}clear(){if(this.onEvict)for(const[key2,entry]of this.cache)this.onEvict(key2,entry.value);this.cache.clear()}get size(){return this.cache.size}prune(){const now2=Date.now();let pruned=0;for(const[key2,entry]of this.cache)now2>entry.expiresAt&&(this.delete(key2),pruned++);return pruned}keys(){const now2=Date.now(),validKeys=[];for(const[key2,entry]of this.cache)now2<=entry.expiresAt&&validKeys.push(key2);return validKeys}evictOldest(){let oldestKey=null,oldestTime=1/0; -for(const[key2,entry]of this.cache)entry.lastAccessed<oldestTime&&(oldestTime=entry.lastAccessed,oldestKey=key2);oldestKey!==null&&this.delete(oldestKey)}touch(key2){const entry=this.cache.get(key2);if(!entry)return!1;const now2=Date.now();return now2>entry.expiresAt?(this.delete(key2),!1):(entry.expiresAt=now2+this.ttlMs,entry.lastAccessed=now2,!0)}}function getRequestUrl(input){return typeof input=="string"?input:input instanceof URL?input.href:input.url}function getRequestMethod(input,init2,baseInit){ -return init2?.method?init2.method:typeof Request<"u"&&input instanceof Request?input.method:baseInit?.method??"GET"}function getRequestBody(input,init2){if(init2?.body!==void 0)return init2.body;if(typeof Request<"u"&&input instanceof Request)return input.body}function summarizeRequestBody(body2){return body2==null?{kind:"empty"}:typeof body2=="string"?{kind:"string",size:body2.length}:body2 instanceof Blob?{kind:"blob",size:body2.size}:body2 instanceof URLSearchParams?{kind:"urlsearchparams",size:body2. -toString().length}:body2 instanceof FormData?{kind:"formdata"}:body2 instanceof ArrayBuffer?{kind:"arraybuffer",size:body2.byteLength}:ArrayBuffer.isView(body2)?{kind:body2.constructor.name,size:body2.byteLength}:{kind:typeof body2}}function formatDiagnosticErrorMessage(error2){const message=error2 instanceof Error?error2.message:String(error2);return message.includes("Failed to fetch")?`${message} (check CORS?)`:message}function extractJsonRpcMethods(body2){if(typeof body2=="string")try{const parsed=JSON. -parse(body2),methods=(Array.isArray(parsed)?parsed:[parsed]).map(message=>typeof message?.method=="string"?message.method:void 0).filter(method=>!!method);return methods.length>0?methods:void 0}catch{return}}function throwIfAborted(signal){if(signal?.aborted)throw new DOMException("Operation was aborted","AbortError")}function isAbortError(error2){return error2 instanceof DOMException&&error2.name==="AbortError"||error2 instanceof Error&&error2.name==="AbortError"}function uuid$1(){return globalThis. -crypto?.randomUUID?.()??Math.random().toString(36).substring(2)}function ActionIconCopyToClipboard($$anchor,$$props){push$1($$props,!0);let ariaLabel=prop($$props,"ariaLabel",3,"Copy to clipboard"),canCopy=prop($$props,"canCopy",3,!0);{let $0=user_derived(()=>canCopy()?"pointer":"not-allowed");Copy($$anchor,{get class(){return`h-3 w-3 flex-shrink-0 cursor-${get$4($0)??""}`},get"aria-label"(){return ariaLabel()},onclick:()=>canCopy()&©ToClipboard($$props.text)})}pop()}function ActionIconRemove($$anchor,$$props){ -push$1($$props,!0);let className=prop($$props,"class",3,""),iconSize=prop($$props,"iconSize",3,3);Button($$anchor,{type:"button",variant:"ghost",size:"icon-sm",get class(){return`bg-white/20 p-0 hover:bg-white/30 ${className()??""}`},onclick:e=>{e.stopPropagation(),$$props.onRemove?.($$props.id)},"aria-label":"Remove file",children:($$anchor2,$$slotProps)=>{X($$anchor2,{get class(){return`h-${iconSize()??""} w-${iconSize()??""}`}})},$$slots:{default:!0}}),pop()}var root_6$z=from_html("<p> </p>"), -root_2$15=from_html("<!> <!>",1);function BadgeChatStatistic($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,"");function handleClick(){copyToClipboard(String($$props.value))}var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_2=root_2$15(),node_2=first_child( -fragment_2);component(node_2,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{BadgeInfo($$anchor6,{get class(){return className()},onclick:handleClick,icon:$$anchor7=>{var fragment_4=comment$2(),node_3=first_child(fragment_4);component(node_3,()=>$$props.icon,($$anchor8,Icon_1)=>{Icon_1($$anchor8,{class:"h-3 w-3"})}),append($$anchor7,fragment_4)},children:($$anchor7,$$slotProps3)=>{next$1();var text2=text$8();template_effect(()=>set_text( -text2,$$props.value)),append($$anchor7,text2)},$$slots:{icon:!0,default:!0}})},$$slots:{default:!0}})});var node_4=sibling(node_2,2);component(node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_6$z(),text_1=child(p2,!0);reset(p2),template_effect(()=>set_text(text_1,$$props.tooltipLabel)),append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)}, -alternate=$$anchor2=>{BadgeInfo($$anchor2,{get class(){return className()},onclick:handleClick,icon:$$anchor3=>{var fragment_7=comment$2(),node_5=first_child(fragment_7);component(node_5,()=>$$props.icon,($$anchor4,Icon_2)=>{Icon_2($$anchor4,{class:"h-3 w-3"})}),append($$anchor3,fragment_7)},children:($$anchor3,$$slotProps)=>{next$1();var text_2=text$8();template_effect(()=>set_text(text_2,$$props.value)),append($$anchor3,text_2)},$$slots:{icon:!0,default:!0}})};if_block(node2,$$render=>{$$props. -tooltipLabel?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root$1w=from_html("<button><!> <!></button>");function BadgeInfo($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,"");var button=root$1w();button.__click=function(...$$args){$$props.onclick?.apply(this,$$args)};var node2=child(button);{var consequent=$$anchor2=>{var fragment=comment$2(),node_1=first_child(fragment);snippet(node_1,()=>$$props.icon),append($$anchor2,fragment)};if_block( -node2,$$render=>{$$props.icon&&$$render(consequent)})}var node_2=sibling(node2,2);snippet(node_2,()=>$$props.children),reset(button),template_effect($0=>set_class(button,1,$0),[()=>clsx(cn$1("inline-flex cursor-pointer items-center gap-1 rounded-sm bg-muted-foreground/15 px-1.5 py-0.75",className()))]),append($$anchor,button),pop()}delegate(["click"]);var root_1$$=from_html("<span><!> </span>");function BadgeModality($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,"");const displayableModalities=user_derived( -()=>$$props.modalities.filter(m=>m===ModelModality.VISION||m===ModelModality.AUDIO));var fragment=comment$2(),node2=first_child(fragment);each(node2,17,()=>get$4(displayableModalities),index$2,($$anchor2,modality)=>{const IconComponent=user_derived(()=>MODALITY_ICONS[get$4(modality)]),label=user_derived(()=>MODALITY_LABELS[get$4(modality)]);var span=root_1$$(),node_1=child(span);{var consequent=$$anchor3=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);component(node_2,()=>get$4(IconComponent), -($$anchor4,IconComponent_1)=>{IconComponent_1($$anchor4,{class:"h-3 w-3"})}),append($$anchor3,fragment_1)};if_block(node_1,$$render=>{get$4(IconComponent)&&$$render(consequent)})}var text2=sibling(node_1);reset(span),template_effect($0=>{set_class(span,1,$0),set_text(text2,` ${get$4(label)??""}`)},[()=>clsx(cn$1("inline-flex items-center gap-1 rounded-md bg-muted px-2 py-1 text-xs font-medium",className()))]),append($$anchor2,span)}),append($$anchor,fragment),pop()}var root_12$a=from_html('<div \ -class="mt-2 -mr-2 flex justify-end px-4"><!></div>'),root_2$14=from_html("<!> <!>",1),root_14$9=from_html('<div class="flex flex-wrap items-start justify-end gap-3"></div>'),root_1$_=from_html("<div><!></div>"),root$1v=from_html("<!> <!> <!> <!>",1);function ChatAttachmentsList($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),style2=prop($$props,"style",3,""),attachments=prop($$props,"attachments",19,()=>[]),readonly2=prop($$props,"readonly",3,!1),uploadedFiles=prop( -$$props,"uploadedFiles",27,()=>proxy([])),imageClass=prop($$props,"imageClass",3,""),imageHeight=prop($$props,"imageHeight",3,"h-24"),imageWidth=prop($$props,"imageWidth",3,"w-auto"),limitToSingleRow=prop($$props,"limitToSingleRow",3,!1),displayItems=user_derived(()=>getAttachmentDisplayItems({uploadedFiles:uploadedFiles(),attachments:attachments()})),carouselRef=state$1(void 0),isScrollable=state$1(!1),previewDialogOpen=state$1(!1),previewItem=state$1(null),mcpResourcePreviewOpen=state$1(!1),mcpResourcePreviewExtra=state$1( -null),showViewAll=user_derived(()=>limitToSingleRow()&&get$4(displayItems).length>0&&get$4(isScrollable)),viewAllDialogOpen=state$1(!1);function openPreview(item,event2){event2?.stopPropagation(),event2?.preventDefault(),set$1(previewItem,{uploadedFile:item.uploadedFile,attachment:item.attachment,preview:item.preview,name:item.name,size:item.size,textContent:item.textContent},!0),set$1(previewDialogOpen,!0)}function openMcpResourcePreview(extra){set$1(mcpResourcePreviewExtra,extra,!0),set$1(mcpResourcePreviewOpen, -!0)}function toMcpResourceAttachment(extra,id2){return{id:id2,resource:{uri:extra.uri,name:extra.name,title:extra.name,serverName:extra.serverName}}}user_effect(()=>{get$4(carouselRef)&&get$4(displayItems).length&&get$4(carouselRef).resetScroll()});var fragment=root$1v(),node2=first_child(fragment);{var consequent_10=$$anchor2=>{var div=root_1$_(),node_1=child(div);{var consequent_5=$$anchor3=>{var fragment_1=root_2$14(),node_2=first_child(fragment_1);bind_this(HorizontalScrollCarousel(node_2,{onScrollableChange:scrollable=>set$1( -isScrollable,scrollable,!0),children:($$anchor4,$$slotProps)=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);each(node_3,17,()=>get$4(displayItems),item=>item.id,($$anchor5,item)=>{var fragment_3=comment$2(),node_4=first_child(fragment_3);{var consequent_1=$$anchor6=>{const mcpPrompt=user_derived(()=>get$4(item).attachment?.type===AttachmentType.MCP_PROMPT?get$4(item).attachment:get$4(item).uploadedFile?.mcpPrompt?{type:AttachmentType.MCP_PROMPT,name:get$4(item).name,serverName:get$4( -item).uploadedFile.mcpPrompt.serverName,promptName:get$4(item).uploadedFile.mcpPrompt.promptName,content:get$4(item).textContent??"",arguments:get$4(item).uploadedFile.mcpPrompt.arguments}:null);var fragment_4=comment$2(),node_5=first_child(fragment_4);{var consequent=$$anchor7=>{{let $0=user_derived(()=>limitToSingleRow()?"first:ml-4 last:mr-4":""),$1=user_derived(()=>$$props.onFileRemove?()=>$$props.onFileRemove(get$4(item).id):void 0);ChatAttachmentMcpPrompt($$anchor7,{get class(){return`max-\ -w-[300px] min-w-[200px] flex-shrink-0 ${get$4($0)??""}`},get prompt(){return get$4(mcpPrompt)},get readonly(){return readonly2()},get isLoading(){return get$4(item).isLoading},get loadError(){return get$4(item).loadError},get onRemove(){return get$4($1)}})}};if_block(node_5,$$render=>{get$4(mcpPrompt)&&$$render(consequent)})}append($$anchor6,fragment_4)},alternate_2=$$anchor6=>{var fragment_6=comment$2(),node_6=first_child(fragment_6);{var consequent_2=$$anchor7=>{const mcpResource=user_derived( -()=>get$4(item).attachment);{let $0=user_derived(()=>limitToSingleRow()?"first:ml-4 last:mr-4":""),$1=user_derived(()=>toMcpResourceAttachment(get$4(mcpResource),get$4(item).id));ChatAttachmentMcpResource($$anchor7,{get class(){return`flex-shrink-0 ${get$4($0)??""}`},get attachment(){return get$4($1)},onClick:()=>openMcpResourcePreview(get$4(mcpResource))})}},alternate_1=$$anchor7=>{var fragment_8=comment$2(),node_7=first_child(fragment_8);{var consequent_3=$$anchor8=>{{let $0=user_derived(()=>limitToSingleRow()? -"first:ml-4 last:mr-4":"");ChatAttachmentThumbnailImage($$anchor8,{get class(){return`flex-shrink-0 cursor-pointer ${get$4($0)??""}`},get id(){return get$4(item).id},get name(){return get$4(item).name},get preview(){return get$4(item).preview},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get height(){return imageHeight()},get width(){return imageWidth()},get imageClass(){return imageClass()},onClick:event2=>openPreview(get$4(item),event2)})}},alternate=$$anchor8=>{ -{let $0=user_derived(()=>limitToSingleRow()?"first:ml-4 last:mr-4":"");ChatAttachmentThumbnailFile($$anchor8,{get class(){return`flex-shrink-0 cursor-pointer ${get$4($0)??""}`},get id(){return get$4(item).id},get name(){return get$4(item).name},get size(){return get$4(item).size},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get textContent(){return get$4(item).textContent},get attachment(){return get$4(item).attachment},get uploadedFile(){return get$4(item).uploadedFile}, -onClick:event2=>openPreview(get$4(item),event2)})}};if_block(node_7,$$render=>{get$4(item).isImage&&get$4(item).preview?$$render(consequent_3):$$render(alternate,!1)},!0)}append($$anchor7,fragment_8)};if_block(node_6,$$render=>{get$4(item).isMcpResource&&get$4(item).attachment?.type===AttachmentType.MCP_RESOURCE?$$render(consequent_2):$$render(alternate_1,!1)},!0)}append($$anchor6,fragment_6)};if_block(node_4,$$render=>{get$4(item).isMcpPrompt?$$render(consequent_1):$$render(alternate_2,!1)})}append( -$$anchor5,fragment_3)}),append($$anchor4,fragment_2)},$$slots:{default:!0}}),$$value=>set$1(carouselRef,$$value,!0),()=>get$4(carouselRef));var node_8=sibling(node_2,2);{var consequent_4=$$anchor4=>{var div_1=root_12$a(),node_9=child(div_1);Button(node_9,{type:"button",variant:"ghost",size:"sm",class:"h-6 text-xs text-muted-foreground hover:text-foreground",onclick:()=>set$1(viewAllDialogOpen,!0),children:($$anchor5,$$slotProps)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,`V\ -iew all (${get$4(displayItems).length??""})`)),append($$anchor5,text2)},$$slots:{default:!0}}),reset(div_1),append($$anchor4,div_1)};if_block(node_8,$$render=>{get$4(showViewAll)&&$$render(consequent_4)})}append($$anchor3,fragment_1)},alternate_6=$$anchor3=>{var div_2=root_14$9();each(div_2,21,()=>get$4(displayItems),item=>item.id,($$anchor4,item)=>{var fragment_12=comment$2(),node_10=first_child(fragment_12);{var consequent_7=$$anchor5=>{const mcpPrompt=user_derived(()=>get$4(item).attachment?. -type===AttachmentType.MCP_PROMPT?get$4(item).attachment:get$4(item).uploadedFile?.mcpPrompt?{type:AttachmentType.MCP_PROMPT,name:get$4(item).name,serverName:get$4(item).uploadedFile.mcpPrompt.serverName,promptName:get$4(item).uploadedFile.mcpPrompt.promptName,content:get$4(item).textContent??"",arguments:get$4(item).uploadedFile.mcpPrompt.arguments}:null);var fragment_13=comment$2(),node_11=first_child(fragment_13);{var consequent_6=$$anchor6=>{{let $0=user_derived(()=>$$props.onFileRemove?()=>$$props. -onFileRemove(get$4(item).id):void 0);ChatAttachmentMcpPrompt($$anchor6,{class:"max-w-[300px] min-w-[200px]",get prompt(){return get$4(mcpPrompt)},get readonly(){return readonly2()},get isLoading(){return get$4(item).isLoading},get loadError(){return get$4(item).loadError},get onRemove(){return get$4($0)}})}};if_block(node_11,$$render=>{get$4(mcpPrompt)&&$$render(consequent_6)})}append($$anchor5,fragment_13)},alternate_5=$$anchor5=>{var fragment_15=comment$2(),node_12=first_child(fragment_15);{var consequent_8=$$anchor6=>{ -const mcpResource=user_derived(()=>get$4(item).attachment);{let $0=user_derived(()=>toMcpResourceAttachment(get$4(mcpResource),get$4(item).id));ChatAttachmentMcpResource($$anchor6,{get attachment(){return get$4($0)},onClick:()=>openMcpResourcePreview(get$4(mcpResource))})}},alternate_4=$$anchor6=>{var fragment_17=comment$2(),node_13=first_child(fragment_17);{var consequent_9=$$anchor7=>{ChatAttachmentThumbnailImage($$anchor7,{class:"cursor-pointer",get id(){return get$4(item).id},get name(){return get$4( -item).name},get preview(){return get$4(item).preview},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get height(){return imageHeight()},get width(){return imageWidth()},get imageClass(){return imageClass()},onClick:event2=>openPreview(get$4(item),event2)})},alternate_3=$$anchor7=>{ChatAttachmentThumbnailFile($$anchor7,{class:"cursor-pointer",get id(){return get$4(item).id},get name(){return get$4(item).name},get size(){return get$4(item).size},get readonly(){return readonly2()}, -get onRemove(){return $$props.onFileRemove},get textContent(){return get$4(item).textContent},get attachment(){return get$4(item).attachment},get uploadedFile(){return get$4(item).uploadedFile},onClick:event2=>openPreview(get$4(item),event2)})};if_block(node_13,$$render=>{get$4(item).isImage&&get$4(item).preview?$$render(consequent_9):$$render(alternate_3,!1)},!0)}append($$anchor6,fragment_17)};if_block(node_12,$$render=>{get$4(item).isMcpResource&&get$4(item).attachment?.type===AttachmentType.MCP_RESOURCE? -$$render(consequent_8):$$render(alternate_4,!1)},!0)}append($$anchor5,fragment_15)};if_block(node_10,$$render=>{get$4(item).isMcpPrompt?$$render(consequent_7):$$render(alternate_5,!1)})}append($$anchor4,fragment_12)}),reset(div_2),append($$anchor3,div_2)};if_block(node_1,$$render=>{limitToSingleRow()?$$render(consequent_5):$$render(alternate_6,!1)})}reset(div),template_effect(()=>{set_class(div,1,clsx(className())),set_style(div,style2())}),append($$anchor2,div)};if_block(node2,$$render=>{get$4( -displayItems).length>0&&$$render(consequent_10)})}var node_14=sibling(node2,2);{var consequent_11=$$anchor2=>{DialogChatAttachmentPreview($$anchor2,{get uploadedFile(){return get$4(previewItem).uploadedFile},get attachment(){return get$4(previewItem).attachment},get preview(){return get$4(previewItem).preview},get name(){return get$4(previewItem).name},get size(){return get$4(previewItem).size},get textContent(){return get$4(previewItem).textContent},get activeModelId(){return $$props.activeModelId}, -get open(){return get$4(previewDialogOpen)},set open($$value){set$1(previewDialogOpen,$$value,!0)}})};if_block(node_14,$$render=>{get$4(previewItem)&&$$render(consequent_11)})}var node_15=sibling(node_14,2);DialogChatAttachmentsViewAll(node_15,{get uploadedFiles(){return uploadedFiles()},get attachments(){return attachments()},get readonly(){return readonly2()},get onFileRemove(){return $$props.onFileRemove},imageHeight:"h-64",get imageClass(){return imageClass()},get activeModelId(){return $$props. -activeModelId},get open(){return get$4(viewAllDialogOpen)},set open($$value){set$1(viewAllDialogOpen,$$value,!0)}});var node_16=sibling(node_15,2);{var consequent_12=$$anchor2=>{DialogMcpResourcePreview($$anchor2,{get extra(){return get$4(mcpResourcePreviewExtra)},get open(){return get$4(mcpResourcePreviewOpen)},set open($$value){set$1(mcpResourcePreviewOpen,$$value,!0)}})};if_block(node_16,$$render=>{get$4(mcpResourcePreviewExtra)&&$$render(consequent_12)})}append($$anchor,fragment),pop()}var root_1$Z=from_html( -'<div class="absolute top-10 right-2 flex items-center justify-center opacity-0 transition-opacity group-hover:opacity-100"><!></div>'),root$1u=from_html("<div><!> <!></div>");function ChatAttachmentMcpPrompt($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),readonly2=prop($$props,"readonly",3,!1),isLoading2=prop($$props,"isLoading",3,!1);var div=root$1u(),node2=child(div);ChatMessageMcpPromptContent(node2,{get prompt(){return $$props.prompt},get variant(){return McpPromptVariant. -ATTACHMENT},get isLoading(){return isLoading2()},get loadError(){return $$props.loadError}});var node_1=sibling(node2,2);{var consequent=$$anchor2=>{var div_1=root_1$Z(),node_2=child(div_1);ActionIconRemove(node_2,{get id(){return $$props.prompt.name},onRemove:()=>$$props.onRemove?.()}),reset(div_1),append($$anchor2,div_1)};if_block(node_1,$$render=>{!readonly2()&&$$props.onRemove&&$$render(consequent)})}reset(div),template_effect(()=>set_class(div,1,`group relative ${className()??""}`)),append( -$$anchor,div),pop()}const NEVER=Object.freeze({status:"aborted"});function $constructor(name,initializer2,params){function init2(inst,def){if(inst._zod||Object.defineProperty(inst,"_zod",{value:{def,constr:_,traits:new Set},enumerable:!1}),inst._zod.traits.has(name))return;inst._zod.traits.add(name),initializer2(inst,def);const proto=_.prototype,keys2=Object.keys(proto);for(let i=0;i<keys2.length;i++){const k=keys2[i];k in inst||(inst[k]=proto[k].bind(inst))}}const Parent=params?.Parent??Object; -class Definition extends Parent{}Object.defineProperty(Definition,"name",{value:name});function _(def){var _a2;const inst=params?.Parent?new Definition:this;init2(inst,def),(_a2=inst._zod).deferred??(_a2.deferred=[]);for(const fn of inst._zod.deferred)fn();return inst}return Object.defineProperty(_,"init",{value:init2}),Object.defineProperty(_,Symbol.hasInstance,{value:inst=>params?.Parent&&inst instanceof params.Parent?!0:inst?._zod?.traits?.has(name)}),Object.defineProperty(_,"name",{value:name}), -_}class $ZodAsyncError extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class $ZodEncodeError extends Error{constructor(name){super(`Encountered unidirectional transform during encode: ${name}`),this.name="ZodEncodeError"}}const globalConfig={};function config(newConfig){return globalConfig}function getEnumValues(entries){const numericValues=Object.values(entries).filter(v=>typeof v=="number");return Object.entries(entries).filter(([k, -_])=>numericValues.indexOf(+k)===-1).map(([_,v])=>v)}function jsonStringifyReplacer(_,value){return typeof value=="bigint"?value.toString():value}function cached(getter){return{get value(){{const value=getter();return Object.defineProperty(this,"value",{value}),value}}}}function nullish(input){return input==null}function cleanRegex(source2){const start2=source2.startsWith("^")?1:0,end=source2.endsWith("$")?source2.length-1:source2.length;return source2.slice(start2,end)}function floatSafeRemainder(val,step){ -const valDecCount=(val.toString().split(".")[1]||"").length,stepString=step.toString();let stepDecCount=(stepString.split(".")[1]||"").length;if(stepDecCount===0&&/\d?e-\d?/.test(stepString)){const match=stepString.match(/\d?e-(\d?)/);match?.[1]&&(stepDecCount=Number.parseInt(match[1]))}const decCount=valDecCount>stepDecCount?valDecCount:stepDecCount,valInt=Number.parseInt(val.toFixed(decCount).replace(".","")),stepInt=Number.parseInt(step.toFixed(decCount).replace(".",""));return valInt%stepInt/ -10**decCount}const EVALUATING=Symbol("evaluating");function defineLazy(object2,key2,getter){let value;Object.defineProperty(object2,key2,{get(){if(value!==EVALUATING)return value===void 0&&(value=EVALUATING,value=getter()),value},set(v){Object.defineProperty(object2,key2,{value:v})},configurable:!0})}function assignProp(target2,prop2,value){Object.defineProperty(target2,prop2,{value,writable:!0,enumerable:!0,configurable:!0})}function mergeDefs(...defs){const mergedDescriptors={};for(const def of defs){ -const descriptors=Object.getOwnPropertyDescriptors(def);Object.assign(mergedDescriptors,descriptors)}return Object.defineProperties({},mergedDescriptors)}function esc(str){return JSON.stringify(str)}function slugify(input){return input.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}const captureStackTrace="captureStackTrace"in Error?Error.captureStackTrace:(..._args)=>{};function isObject$1(data){return typeof data=="object"&&data!==null&&!Array.isArray( -data)}const allowsEval=cached(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{const F=Function;return new F(""),!0}catch{return!1}});function isPlainObject$2(o){if(isObject$1(o)===!1)return!1;const ctor=o.constructor;if(ctor===void 0||typeof ctor!="function")return!0;const prot=ctor.prototype;return!(isObject$1(prot)===!1||Object.prototype.hasOwnProperty.call(prot,"isPrototypeOf")===!1)}function shallowClone(o){return isPlainObject$2(o)?{...o}:Array.isArray( -o)?[...o]:o}const propertyKeyTypes=new Set(["string","number","symbol"]);function escapeRegex(str){return str.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function clone(inst,def,params){const cl=new inst._zod.constr(def??inst._zod.def);return(!def||params?.parent)&&(cl._zod.parent=inst),cl}function normalizeParams(_params){const params=_params;if(!params)return{};if(typeof params=="string")return{error:()=>params};if(params?.message!==void 0){if(params?.error!==void 0)throw new Error("Cannot specify b\ -oth `message` and `error` params");params.error=params.message}return delete params.message,typeof params.error=="string"?{...params,error:()=>params.error}:params}function optionalKeys(shape){return Object.keys(shape).filter(k=>shape[k]._zod.optin==="optional"&&shape[k]._zod.optout==="optional")}const NUMBER_FORMAT_RANGES={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number. -MAX_VALUE,Number.MAX_VALUE]};function pick(schema,mask){const currDef=schema._zod.def,def=mergeDefs(schema._zod.def,{get shape(){const newShape={};for(const key2 in mask){if(!(key2 in currDef.shape))throw new Error(`Unrecognized key: "${key2}"`);mask[key2]&&(newShape[key2]=currDef.shape[key2])}return assignProp(this,"shape",newShape),newShape},checks:[]});return clone(schema,def)}function omit(schema,mask){const currDef=schema._zod.def,def=mergeDefs(schema._zod.def,{get shape(){const newShape={...schema. -_zod.def.shape};for(const key2 in mask){if(!(key2 in currDef.shape))throw new Error(`Unrecognized key: "${key2}"`);mask[key2]&&delete newShape[key2]}return assignProp(this,"shape",newShape),newShape},checks:[]});return clone(schema,def)}function extend$2(schema,shape){if(!isPlainObject$2(shape))throw new Error("Invalid input to extend: expected a plain object");const checks2=schema._zod.def.checks;if(checks2&&checks2.length>0)throw new Error("Object schemas containing refinements cannot be exten\ -ded. Use `.safeExtend()` instead.");const def=mergeDefs(schema._zod.def,{get shape(){const _shape={...schema._zod.def.shape,...shape};return assignProp(this,"shape",_shape),_shape},checks:[]});return clone(schema,def)}function safeExtend(schema,shape){if(!isPlainObject$2(shape))throw new Error("Invalid input to safeExtend: expected a plain object");const def={...schema._zod.def,get shape(){const _shape={...schema._zod.def.shape,...shape};return assignProp(this,"shape",_shape),_shape},checks:schema. -_zod.def.checks};return clone(schema,def)}function merge$1(a,b){const def=mergeDefs(a._zod.def,{get shape(){const _shape={...a._zod.def.shape,...b._zod.def.shape};return assignProp(this,"shape",_shape),_shape},get catchall(){return b._zod.def.catchall},checks:[]});return clone(a,def)}function partial(Class,schema,mask){const def=mergeDefs(schema._zod.def,{get shape(){const oldShape=schema._zod.def.shape,shape={...oldShape};if(mask)for(const key2 in mask){if(!(key2 in oldShape))throw new Error(`U\ -nrecognized key: "${key2}"`);mask[key2]&&(shape[key2]=Class?new Class({type:"optional",innerType:oldShape[key2]}):oldShape[key2])}else for(const key2 in oldShape)shape[key2]=Class?new Class({type:"optional",innerType:oldShape[key2]}):oldShape[key2];return assignProp(this,"shape",shape),shape},checks:[]});return clone(schema,def)}function required$4(Class,schema,mask){const def=mergeDefs(schema._zod.def,{get shape(){const oldShape=schema._zod.def.shape,shape={...oldShape};if(mask)for(const key2 in mask){ -if(!(key2 in shape))throw new Error(`Unrecognized key: "${key2}"`);mask[key2]&&(shape[key2]=new Class({type:"nonoptional",innerType:oldShape[key2]}))}else for(const key2 in oldShape)shape[key2]=new Class({type:"nonoptional",innerType:oldShape[key2]});return assignProp(this,"shape",shape),shape},checks:[]});return clone(schema,def)}function aborted(x,startIndex=0){if(x.aborted===!0)return!0;for(let i=startIndex;i<x.issues.length;i++)if(x.issues[i]?.continue!==!0)return!0;return!1}function prefixIssues(path2,issues){ -return issues.map(iss=>{var _a2;return(_a2=iss).path??(_a2.path=[]),iss.path.unshift(path2),iss})}function unwrapMessage(message){return typeof message=="string"?message:message?.message}function finalizeIssue(iss,ctx,config2){const full={...iss,path:iss.path??[]};if(!iss.message){const message=unwrapMessage(iss.inst?._zod.def?.error?.(iss))??unwrapMessage(ctx?.error?.(iss))??unwrapMessage(config2.customError?.(iss))??unwrapMessage(config2.localeError?.(iss))??"Invalid input";full.message=message} -return delete full.inst,delete full.continue,ctx?.reportInput||delete full.input,full}function getLengthableOrigin(input){return Array.isArray(input)?"array":typeof input=="string"?"string":"unknown"}function issue(...args){const[iss,input,inst]=args;return typeof iss=="string"?{message:iss,code:"custom",input,inst}:{...iss}}const initializer$1=(inst,def)=>{inst.name="$ZodError",Object.defineProperty(inst,"_zod",{value:inst._zod,enumerable:!1}),Object.defineProperty(inst,"issues",{value:def,enumerable:!1}), -inst.message=JSON.stringify(def,jsonStringifyReplacer,2),Object.defineProperty(inst,"toString",{value:()=>inst.message,enumerable:!1})},$ZodError=$constructor("$ZodError",initializer$1),$ZodRealError=$constructor("$ZodError",initializer$1,{Parent:Error});function flattenError$1(error2,mapper=issue2=>issue2.message){const fieldErrors={},formErrors=[];for(const sub2 of error2.issues)sub2.path.length>0?(fieldErrors[sub2.path[0]]=fieldErrors[sub2.path[0]]||[],fieldErrors[sub2.path[0]].push(mapper(sub2))): -formErrors.push(mapper(sub2));return{formErrors,fieldErrors}}function formatError(error2,mapper=issue2=>issue2.message){const fieldErrors={_errors:[]},processError=error3=>{for(const issue2 of error3.issues)if(issue2.code==="invalid_union"&&issue2.errors.length)issue2.errors.map(issues=>processError({issues}));else if(issue2.code==="invalid_key")processError({issues:issue2.issues});else if(issue2.code==="invalid_element")processError({issues:issue2.issues});else if(issue2.path.length===0)fieldErrors. -_errors.push(mapper(issue2));else{let curr=fieldErrors,i=0;for(;i<issue2.path.length;){const el=issue2.path[i];i===issue2.path.length-1?(curr[el]=curr[el]||{_errors:[]},curr[el]._errors.push(mapper(issue2))):curr[el]=curr[el]||{_errors:[]},curr=curr[el],i++}}};return processError(error2),fieldErrors}const _parse=_Err=>(schema,value,_ctx,_params)=>{const ctx=_ctx?Object.assign(_ctx,{async:!1}):{async:!1},result=schema._zod.run({value,issues:[]},ctx);if(result instanceof Promise)throw new $ZodAsyncError; -if(result.issues.length){const e=new(_params?.Err??_Err)(result.issues.map(iss=>finalizeIssue(iss,ctx,config())));throw captureStackTrace(e,_params?.callee),e}return result.value},_parseAsync=_Err=>async(schema,value,_ctx,params)=>{const ctx=_ctx?Object.assign(_ctx,{async:!0}):{async:!0};let result=schema._zod.run({value,issues:[]},ctx);if(result instanceof Promise&&(result=await result),result.issues.length){const e=new(params?.Err??_Err)(result.issues.map(iss=>finalizeIssue(iss,ctx,config()))); -throw captureStackTrace(e,params?.callee),e}return result.value},_safeParse=_Err=>(schema,value,_ctx)=>{const ctx=_ctx?{..._ctx,async:!1}:{async:!1},result=schema._zod.run({value,issues:[]},ctx);if(result instanceof Promise)throw new $ZodAsyncError;return result.issues.length?{success:!1,error:new(_Err??$ZodError)(result.issues.map(iss=>finalizeIssue(iss,ctx,config())))}:{success:!0,data:result.value}},safeParse$2=_safeParse($ZodRealError),_safeParseAsync=_Err=>async(schema,value,_ctx)=>{const ctx=_ctx? -Object.assign(_ctx,{async:!0}):{async:!0};let result=schema._zod.run({value,issues:[]},ctx);return result instanceof Promise&&(result=await result),result.issues.length?{success:!1,error:new _Err(result.issues.map(iss=>finalizeIssue(iss,ctx,config())))}:{success:!0,data:result.value}},safeParseAsync$1=_safeParseAsync($ZodRealError),_encode=_Err=>(schema,value,_ctx)=>{const ctx=_ctx?Object.assign(_ctx,{direction:"backward"}):{direction:"backward"};return _parse(_Err)(schema,value,ctx)},_decode=_Err=>(schema,value,_ctx)=>_parse( -_Err)(schema,value,_ctx),_encodeAsync=_Err=>async(schema,value,_ctx)=>{const ctx=_ctx?Object.assign(_ctx,{direction:"backward"}):{direction:"backward"};return _parseAsync(_Err)(schema,value,ctx)},_decodeAsync=_Err=>async(schema,value,_ctx)=>_parseAsync(_Err)(schema,value,_ctx),_safeEncode=_Err=>(schema,value,_ctx)=>{const ctx=_ctx?Object.assign(_ctx,{direction:"backward"}):{direction:"backward"};return _safeParse(_Err)(schema,value,ctx)},_safeDecode=_Err=>(schema,value,_ctx)=>_safeParse(_Err)(schema, -value,_ctx),_safeEncodeAsync=_Err=>async(schema,value,_ctx)=>{const ctx=_ctx?Object.assign(_ctx,{direction:"backward"}):{direction:"backward"};return _safeParseAsync(_Err)(schema,value,ctx)},_safeDecodeAsync=_Err=>async(schema,value,_ctx)=>_safeParseAsync(_Err)(schema,value,_ctx),cuid=/^[cC][^\s-]{8,}$/,cuid2=/^[0-9a-z]+$/,ulid=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,xid=/^[0-9a-vA-V]{20}$/,ksuid=/^[A-Za-z0-9]{27}$/,nanoid=/^[a-zA-Z0-9_-]{21}$/,duration$1=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/, +[a3,!!a3,i4,o3]}})(O2,c3,"query",t2),a2=o2[0],e2=o2[1],u2=o2[2],s3=o2[3];return a2&&e2?a2.obsSet=t2.obsSet:(e2=l2.query(t2).then(function(e3){var t3=e3.result;if(a2&&(a2.res=t3),i3){for(var n3=0,r4=t3.length;n3<r4;++n3)Object.freeze(t3[n3]);Object.freeze(t3)}else e3.result=S2(t3);return e3}).catch(function(e3){return s3&&a2&&q2(s3,a2),Promise.reject(e3)}),a2={obsSet:t2.obsSet,promise:e2,subscribers:new Set,type:"query",req:t2,dirty:!1},s3?s3.push(a2):(s3=[a2],(u2=u2||(Sn["idb://".concat(O2,"/"). +concat(c3)]={queries:{query:{},count:{}},objs:new Map,optimisticOps:[],unsignaledParts:{}})).queries.query[t2.query.index.name||""]=s3)),Hn(a2,s3,n2,r3),a2.promise.then(function(e3){return{result:Qn(e3.result,t2,u2?.optimisticOps,l2,a2,i3)}})}})}})}};function Zn(e2,r3){return new Proxy(e2,{get:function(e3,t2,n2){return t2==="db"?r3:Reflect.get(e3,t2,n2)}})}var er=(tr2.prototype.version=function(t2){if(isNaN(t2)||t2<.1)throw new Y.Type("Given version is not a positive number");if(t2=Math.round(10* +t2)/10,this.idbdb||this._state.isBeingOpened)throw new Y.Schema("Cannot add version when database is open");this.verno=Math.max(this.verno,t2);var e2=this._versions,n2=e2.filter(function(e3){return e3._cfg.version===t2})[0];return n2||(n2=new this.Version(t2),e2.push(n2),e2.sort(nn),n2.stores({}),this._state.autoSchema=!1,n2)},tr2.prototype._whenReady=function(e2){var n2=this;return this.idbdb&&(this._state.openComplete||me.letThrough||this._vip)?e2():new _e(function(e3,t2){if(n2._state.openComplete) +return t2(new Y.DatabaseClosed(n2._state.dbOpenError));if(!n2._state.isBeingOpened){if(!n2._state.autoOpen)return void t2(new Y.DatabaseClosed);n2.open().catch(G)}n2._state.dbReadyPromise.then(e3,t2)}).then(e2)},tr2.prototype.use=function(e2){var t2=e2.stack,n2=e2.create,r3=e2.level,i2=e2.name;return i2&&this.unuse({stack:t2,name:i2}),e2=this._middlewares[t2]||(this._middlewares[t2]=[]),e2.push({stack:t2,create:n2,level:r3??10,name:i2}),e2.sort(function(e3,t3){return e3.level-t3.level}),this},tr2. +prototype.unuse=function(e2){var t2=e2.stack,n2=e2.name,r3=e2.create;return t2&&this._middlewares[t2]&&(this._middlewares[t2]=this._middlewares[t2].filter(function(e3){return r3?e3.create!==r3:!!n2&&e3.name!==n2})),this},tr2.prototype.open=function(){var e2=this;return $e(ve,function(){return Dn(e2)})},tr2.prototype._close=function(){var n2=this._state,e2=et.indexOf(this);if(0<=e2&&et.splice(e2,1),this.idbdb){try{this.idbdb.close()}catch{}this.idbdb=null}n2.isBeingOpened||(n2.dbReadyPromise=new _e( +function(e3){n2.dbReadyResolve=e3}),n2.openCanceller=new _e(function(e3,t2){n2.cancelOpen=t2}))},tr2.prototype.close=function(e2){var t2=(e2===void 0?{disableAutoOpen:!0}:e2).disableAutoOpen,e2=this._state;t2?(e2.isBeingOpened&&e2.cancelOpen(new Y.DatabaseClosed),this._close(),e2.autoOpen=!1,e2.dbOpenError=new Y.DatabaseClosed):(this._close(),e2.autoOpen=this._options.autoOpen||e2.isBeingOpened,e2.openComplete=!1,e2.dbOpenError=null)},tr2.prototype.delete=function(n2){var i2=this;n2===void 0&&(n2= +{disableAutoOpen:!0});var o2=0<arguments.length&&typeof arguments[0]!="object",a2=this._state;return new _e(function(r3,t2){function e2(){i2.close(n2);var e3=i2._deps.indexedDB.deleteDatabase(i2.name);e3.onsuccess=qe(function(){var e4,t3,n3;e4=i2._deps,t3=i2.name,n3=e4.indexedDB,e4=e4.IDBKeyRange,vn(n3)||t3===tt||yn(n3,e4).delete(t3).catch(G),r3()}),e3.onerror=Bt(t2),e3.onblocked=i2._fireOnBlocked}if(o2)throw new Y.InvalidArgument("Invalid closeOptions argument to db.delete()");a2.isBeingOpened? +a2.dbReadyPromise.then(e2):e2()})},tr2.prototype.backendDB=function(){return this.idbdb},tr2.prototype.isOpen=function(){return this.idbdb!==null},tr2.prototype.hasBeenClosed=function(){var e2=this._state.dbOpenError;return e2&&e2.name==="DatabaseClosed"},tr2.prototype.hasFailed=function(){return this._state.dbOpenError!==null},tr2.prototype.dynamicallyOpened=function(){return this._state.autoSchema},Object.defineProperty(tr2.prototype,"tables",{get:function(){var t2=this;return x(this._allTables). +map(function(e2){return t2._allTables[e2]})},enumerable:!1,configurable:!0}),tr2.prototype.transaction=function(){var e2=(function(e3,t2,n2){var r3=arguments.length;if(r3<2)throw new Y.InvalidArgument("Too few arguments");for(var i2=new Array(r3-1);--r3;)i2[r3-1]=arguments[r3];return n2=i2.pop(),[e3,w(i2),n2]}).apply(this,arguments);return this._transaction.apply(this,e2)},tr2.prototype._transaction=function(e2,t2,n2){var r3=this,i2=me.trans;i2&&i2.db===this&&e2.indexOf("!")===-1||(i2=null);var o2, +a2,u2=e2.indexOf("?")!==-1;e2=e2.replace("!","").replace("?","");try{if(a2=t2.map(function(e3){if(e3=e3 instanceof r3.Table?e3.name:e3,typeof e3!="string")throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed");return e3}),e2=="r"||e2===nt)o2=nt;else{if(e2!="rw"&&e2!=rt)throw new Y.InvalidArgument("Invalid transaction mode: "+e2);o2=rt}if(i2){if(i2.mode===nt&&o2===rt){if(!u2)throw new Y.SubTransaction("Cannot enter a sub-transaction with READWRITE m\ +ode when parent transaction is READONLY");i2=null}i2&&a2.forEach(function(e3){if(i2&&i2.storeNames.indexOf(e3)===-1){if(!u2)throw new Y.SubTransaction("Table "+e3+" not included in parent transaction.");i2=null}}),u2&&i2&&!i2.active&&(i2=null)}}catch(n3){return i2?i2._promise(null,function(e3,t3){t3(n3)}):Xe(n3)}var s3=(function i3(o3,a3,u3,s4,c3){return _e.resolve().then(function(){var e3=me.transless||me,t3=o3._createTransaction(a3,u3,o3._dbSchema,s4);if(t3.explicit=!0,e3={trans:t3,transless:e3}, +s4)t3.idbtrans=s4.idbtrans;else try{t3.create(),t3.idbtrans._explicit=!0,o3._state.PR1398_maxLoop=3}catch(e4){return e4.name===z.InvalidState&&o3.isOpen()&&0<--o3._state.PR1398_maxLoop?(console.warn("Dexie: Need to reopen db"),o3.close({disableAutoOpen:!1}),o3.open().then(function(){return i3(o3,a3,u3,null,c3)})):Xe(e4)}var n3,r4=B(c3);return r4&&Le(),e3=_e.follow(function(){var e4;(n3=c3.call(t3,t3))&&(r4?(e4=Ue.bind(null,null),n3.then(e4,e4)):typeof n3.next=="function"&&typeof n3.throw=="funct\ +ion"&&(n3=In(n3)))},e3),(n3&&typeof n3.then=="function"?_e.resolve(n3).then(function(e4){return t3.active?e4:Xe(new Y.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn"))}):e3.then(function(){return n3})).then(function(e4){return s4&&t3._resolve(),t3._completion.then(function(){return e4})}).catch(function(e4){return t3._reject(e4),Xe(e4)})})}).bind(null,this,o2,a2,i2,n2);return i2?i2._promise(o2,s3,"lock"):me.trans?$e(me.transless,function(){return r3._whenReady(s3)}): +this._whenReady(s3)},tr2.prototype.table=function(e2){if(!m(this._allTables,e2))throw new Y.InvalidTable("Table ".concat(e2," does not exist"));return this._allTables[e2]},tr2);function tr2(e2,t2){var o2=this;this._middlewares={},this.verno=0;var n2=tr2.dependencies;this._options=t2=_({addons:tr2.addons,autoOpen:!0,indexedDB:n2.indexedDB,IDBKeyRange:n2.IDBKeyRange,cache:"cloned"},t2),this._deps={indexedDB:t2.indexedDB,IDBKeyRange:t2.IDBKeyRange},n2=t2.addons,this._dbSchema={},this._versions=[],this. +_storeNames=[],this._allTables={},this.idbdb=null,this._novip=this;var a2,r3,u2,i2,s3,c3={dbOpenError:null,isBeingOpened:!1,onReadyBeingFired:null,openComplete:!1,dbReadyResolve:G,dbReadyPromise:null,cancelOpen:G,openCanceller:null,autoSchema:!0,PR1398_maxLoop:3,autoOpen:t2.autoOpen};c3.dbReadyPromise=new _e(function(e3){c3.dbReadyResolve=e3}),c3.openCanceller=new _e(function(e3,t3){c3.cancelOpen=t3}),this._state=c3,this.name=e2,this.on=dt2(this,"populate","blocked","versionchange","close",{ready:[ +re2,G]}),this.on.ready.subscribe=p2(this.on.ready.subscribe,function(i3){return function(n3,r4){tr2.vip(function(){var t3,e3=o2._state;e3.openComplete?(e3.dbOpenError||_e.resolve().then(n3),r4&&i3(n3)):e3.onReadyBeingFired?(e3.onReadyBeingFired.push(n3),r4&&i3(n3)):(i3(n3),t3=o2,r4||i3(function e4(){t3.on.ready.unsubscribe(n3),t3.on.ready.unsubscribe(e4)}))})}}),this.Collection=(a2=this,pt(Ot.prototype,function(e3,t3){this.db=a2;var n3=ot,r4=null;if(t3)try{n3=t3()}catch(e4){r4=e4}var i3=e3._ctx, +t3=i3.table,e3=t3.hook.reading.fire;this._ctx={table:t3,index:i3.index,isPrimKey:!i3.index||t3.schema.primKey.keyPath&&i3.index===t3.schema.primKey.name,range:n3,keysOnly:!1,dir:"next",unique:"",algorithm:null,filter:null,replayFilter:null,justLimit:!0,isMatch:null,offset:0,limit:1/0,error:r4,or:i3.or,valueMapper:e3!==X2?e3:null}})),this.Table=(r3=this,pt(ft.prototype,function(e3,t3,n3){this.db=r3,this._tx=n3,this.name=e3,this.schema=t3,this.hook=r3._allTables[e3]?r3._allTables[e3].hook:dt2(null, +{creating:[Z,G],reading:[H,X2],updating:[te,G],deleting:[ee,G]})})),this.Transaction=(u2=this,pt(Lt.prototype,function(e3,t3,n3,r4,i3){var o3=this;this.db=u2,this.mode=e3,this.storeNames=t3,this.schema=n3,this.chromeTransactionDurability=r4,this.idbtrans=null,this.on=dt2(this,"complete","error","abort"),this.parent=i3||null,this.active=!0,this._reculock=0,this._blockedFuncs=[],this._resolve=null,this._reject=null,this._waitingFor=null,this._waitingQueue=null,this._spinCount=0,this._completion=new _e( +function(e4,t4){o3._resolve=e4,o3._reject=t4}),this._completion.then(function(){o3.active=!1,o3.on.complete.fire()},function(e4){var t4=o3.active;return o3.active=!1,o3.on.error.fire(e4),o3.parent?o3.parent._reject(e4):t4&&o3.idbtrans&&o3.idbtrans.abort(),Xe(e4)})})),this.Version=(i2=this,pt(dn.prototype,function(e3){this.db=i2,this._cfg={version:e3,storesSource:null,dbschema:{},tables:{},contentUpgrade:null}})),this.WhereClause=(s3=this,pt(Dt.prototype,function(e3,t3,n3){if(this.db=s3,this._ctx= +{table:e3,index:t3===":id"?null:t3,or:n3},this._cmp=this._ascending=st,this._descending=function(e4,t4){return st(t4,e4)},this._max=function(e4,t4){return 0<st(e4,t4)?e4:t4},this._min=function(e4,t4){return st(e4,t4)<0?e4:t4},this._IDBKeyRange=s3._deps.IDBKeyRange,!this._IDBKeyRange)throw new Y.MissingAPI})),this.on("versionchange",function(e3){0<e3.newVersion?console.warn("Another connection wants to upgrade database '".concat(o2.name,"'. Closing db now to resume the upgrade.")):console.warn("A\ +nother connection wants to delete database '".concat(o2.name,"'. Closing db now to resume the delete request.")),o2.close({disableAutoOpen:!1})}),this.on("blocked",function(e3){!e3.newVersion||e3.newVersion<e3.oldVersion?console.warn("Dexie.delete('".concat(o2.name,"') was blocked")):console.warn("Upgrade '".concat(o2.name,"' blocked by other connection holding version ").concat(e3.oldVersion/10))}),this._maxKey=Yt(t2.IDBKeyRange),this._createTransaction=function(e3,t3,n3,r4){return new o2.Transaction( +e3,t3,n3,o2._options.chromeTransactionDurability,r4)},this._fireOnBlocked=function(t3){o2.on("blocked").fire(t3),et.filter(function(e3){return e3.name===o2.name&&e3!==o2&&!e3._state.vcFired}).map(function(e3){return e3.on("versionchange").fire(t3)})},this.use(Un),this.use(Jn),this.use(Wn),this.use(Rn),this.use(Nn);var l2=new Proxy(this,{get:function(e3,t3,n3){if(t3==="_vip")return!0;if(t3==="table")return function(e4){return Zn(o2.table(e4),l2)};var r4=Reflect.get(e3,t3,n3);return r4 instanceof ft? +Zn(r4,l2):t3==="tables"?r4.map(function(e4){return Zn(e4,l2)}):t3==="_createTransaction"?function(){return Zn(r4.apply(this,arguments),l2)}:r4}});this.vip=l2,n2.forEach(function(e3){return e3(o2)})}var nr,F=typeof Symbol<"u"&&"observable"in Symbol?Symbol.observable:"@@observable",rr=(ir.prototype.subscribe=function(e2,t2,n2){return this._subscribe(e2&&typeof e2!="function"?e2:{next:e2,error:t2,complete:n2})},ir.prototype[F]=function(){return this},ir);function ir(e2){this._subscribe=e2}try{nr={indexedDB:f. +indexedDB||f.mozIndexedDB||f.webkitIndexedDB||f.msIndexedDB,IDBKeyRange:f.IDBKeyRange||f.webkitIDBKeyRange}}catch{nr={indexedDB:null,IDBKeyRange:null}}function or(h3){var d3,p3=!1,e2=new rr(function(r3){var i2=B(h3),o2,a2=!1,u2={},s3={},e3={get closed(){return a2},unsubscribe:function(){a2||(a2=!0,o2&&o2.abort(),c3&&Nt.storagemutated.unsubscribe(f2))}};r3.start&&r3.start(e3);var c3=!1,l2=function(){return Ge(t2)},f2=function(e4){Kn(u2,e4),En(s3,u2)&&l2()},t2=function(){var t3,n2,e4;!a2&&nr.indexedDB&& +(u2={},t3={},o2&&o2.abort(),o2=new AbortController,e4=(function(e5){var t4=je();try{i2&&Le();var n3=Ne(h3,e5);return n3=i2?n3.finally(Ue):n3}finally{t4&&Ae()}})(n2={subscr:t3,signal:o2.signal,requery:l2,querier:h3,trans:null}),Promise.resolve(e4).then(function(e5){p3=!0,d3=e5,a2||n2.signal.aborted||(u2={},(function(e6){for(var t4 in e6)if(m(e6,t4))return;return 1})(s3=t3)||c3||(Nt(Ft,f2),c3=!0),Ge(function(){return!a2&&r3.next&&r3.next(e5)}))},function(e5){p3=!1,["DatabaseClosedError","AbortErro\ +r"].includes(e5?.name)||a2||Ge(function(){a2||r3.error&&r3.error(e5)})}))};return setTimeout(l2,0),e3});return e2.hasValue=function(){return p3},e2.getValue=function(){return d3},e2}var ar=er;function ur(e2){var t2=cr;try{cr=!0,Nt.storagemutated.fire(e2),Tn(e2,!0)}finally{cr=t2}}r2(ar,_(_({},Q),{delete:function(e2){return new ar(e2,{addons:[]}).delete()},exists:function(e2){return new ar(e2,{addons:[]}).open().then(function(e3){return e3.close(),!0}).catch("NoSuchDatabaseError",function(){return!1})}, +getDatabaseNames:function(e2){try{return t2=ar.dependencies,n2=t2.indexedDB,t2=t2.IDBKeyRange,(vn(n2)?Promise.resolve(n2.databases()).then(function(e3){return e3.map(function(e4){return e4.name}).filter(function(e4){return e4!==tt})}):yn(n2,t2).toCollection().primaryKeys()).then(e2)}catch{return Xe(new Y.MissingAPI)}var t2,n2},defineClass:function(){return function(e2){a(this,e2)}},ignoreTransaction:function(e2){return me.trans?$e(me.transless,e2):e2()},vip:mn,async:function(t2){return function(){ +try{var e2=In(t2.apply(this,arguments));return e2&&typeof e2.then=="function"?e2:_e.resolve(e2)}catch(e3){return Xe(e3)}}},spawn:function(e2,t2,n2){try{var r3=In(e2.apply(n2,t2||[]));return r3&&typeof r3.then=="function"?r3:_e.resolve(r3)}catch(e3){return Xe(e3)}},currentTransaction:{get:function(){return me.trans||null}},waitFor:function(e2,t2){return t2=_e.resolve(typeof e2=="function"?ar.ignoreTransaction(e2):e2).timeout(t2||6e4),me.trans?me.trans.waitFor(t2):t2},Promise:_e,debug:{get:function(){ +return ie},set:function(e2){oe(e2)}},derive:o,extend:a,props:r2,override:p2,Events:dt2,on:Nt,liveQuery:or,extendObservabilitySet:Kn,getByKeyPath:O,setByKeyPath:P,delByKeyPath:function(t2,e2){typeof e2=="string"?P(t2,e2,void 0):"length"in e2&&[].map.call(e2,function(e3){P(t2,e3,void 0)})},shallowClone:g,deepClone:S2,getObjectDiff:Fn,cmp:st,asap:v,minKey:-1/0,addons:[],connections:et,errnames:z,dependencies:nr,cache:Sn,semVer:"4.0.11",version:"4.0.11".split(".").map(function(e2){return parseInt(e2)}). +reduce(function(e2,t2,n2){return e2+t2/Math.pow(10,2*n2)})})),ar.maxKey=Yt(ar.dependencies.IDBKeyRange),typeof dispatchEvent<"u"&&typeof addEventListener<"u"&&(Nt(Ft,function(e2){cr||(e2=new CustomEvent(Mt,{detail:e2}),cr=!0,dispatchEvent(e2),cr=!1)}),addEventListener(Mt,function(e2){e2=e2.detail,cr||ur(e2)}));var sr,cr=!1,lr=function(){};return typeof BroadcastChannel<"u"&&((lr=function(){(sr=new BroadcastChannel(Mt)).onmessage=function(e2){return e2.data&&ur(e2.data)}})(),typeof sr.unref=="fun\ +ction"&&sr.unref(),Nt(Ft,function(e2){cr||sr.postMessage(e2)})),typeof addEventListener<"u"&&(addEventListener("pagehide",function(e2){if(!er.disableBfCache&&e2.persisted){ie&&console.debug("Dexie: handling persisted pagehide"),sr?.close();for(var t2=0,n2=et;t2<n2.length;t2++)n2[t2].close({disableAutoOpen:!1})}}),addEventListener("pageshow",function(e2){!er.disableBfCache&&e2.persisted&&(ie&&console.debug("Dexie: handling persisted pageshow"),lr(),ur({all:new gn(-1/0,[[]])}))})),_e.rejectionMapper= +function(e2,t2){return!e2||e2 instanceof N||e2 instanceof TypeError||e2 instanceof SyntaxError||!e2.name||!$[e2.name]?e2:(t2=new $[e2.name](t2||e2.message,e2),"stack"in e2&&l(t2,"stack",{get:function(){return this.inner.stack}}),t2)},oe(ie),_(er,Object.freeze({__proto__:null,Dexie:er,liveQuery:or,Entity:ut,cmp:st,PropModification:xt,replacePrefix:function(e2,t2){return new xt({replacePrefix:[e2,t2]})},add:function(e2){return new xt({add:e2})},remove:function(e2){return new xt({remove:e2})},default:er, +RangeSet:gn,mergeRanges:_n,rangesOverlap:xn}),{default:er}),er})})(dexie_min$1)),dexie_min$1.exports}var dexie_minExports=requireDexie_min();const _Dexie=getDefaultExportFromCjs(dexie_minExports),DexieSymbol=Symbol.for("Dexie"),Dexie=globalThis[DexieSymbol]||(globalThis[DexieSymbol]=_Dexie);if(_Dexie.semVer!==Dexie.semVer)throw new Error(`Two different versions of Dexie loaded in the same app: ${_Dexie.semVer} and ${Dexie.semVer}`);const{liveQuery,mergeRanges,rangesOverlap,RangeSet,cmp,Entity,PropModification, +replacePrefix,add,remove}=Dexie;class LlamacppDatabase extends Dexie{conversations;messages;constructor(){super("LlamacppWebui"),this.version(1).stores({conversations:"id, lastModified, currNode, name",messages:"id, convId, type, role, timestamp, parent, children"})}}const db=new LlamacppDatabase;class DatabaseService{static async createConversation(name){const conversation={id:uuid$1(),name,lastModified:Date.now(),currNode:""};return await db.conversations.add(conversation),conversation}static async createMessageBranch(message,parentId){ +return await db.transaction("rw",[db.conversations,db.messages],async()=>{if(parentId!==null&&!await db.messages.get(parentId))throw new Error(`Parent message ${parentId} not found`);const newMessage={...message,id:uuid$1(),parent:parentId,toolCalls:message.toolCalls??"",children:[]};if(await db.messages.add(newMessage),parentId!==null){const parentMessage=await db.messages.get(parentId);parentMessage&&await db.messages.update(parentId,{children:[...parentMessage.children,newMessage.id]})}return await this. +updateConversation(message.convId,{currNode:newMessage.id}),newMessage})}static async createRootMessage(convId){const rootMessage={id:uuid$1(),convId,type:"root",timestamp:Date.now(),role:MessageRole.SYSTEM,content:"",parent:null,toolCalls:"",children:[]};return await db.messages.add(rootMessage),rootMessage.id}static async createSystemMessage(convId,systemPrompt,parentId){const trimmedPrompt=systemPrompt.trim();if(!trimmedPrompt)throw new Error("Cannot create system message with empty content"); +const systemMessage={id:uuid$1(),convId,type:MessageRole.SYSTEM,timestamp:Date.now(),role:MessageRole.SYSTEM,content:trimmedPrompt,parent:parentId,children:[]};await db.messages.add(systemMessage);const parentMessage=await db.messages.get(parentId);return parentMessage&&await db.messages.update(parentId,{children:[...parentMessage.children,systemMessage.id]}),systemMessage}static async deleteConversation(id2,options){await db.transaction("rw",[db.conversations,db.messages],async()=>{if(options?. +deleteWithForks){const idsToDelete=[],queue=[id2];for(;queue.length>0;){const parentId=queue.pop(),children=await db.conversations.filter(c2=>c2.forkedFromConversationId===parentId).toArray();for(const child2 of children)idsToDelete.push(child2.id),queue.push(child2.id)}for(const forkId of idsToDelete)await db.conversations.delete(forkId),await db.messages.where("convId").equals(forkId).delete()}else{const newParent=(await db.conversations.get(id2))?.forkedFromConversationId,directChildren=await db. +conversations.filter(c2=>c2.forkedFromConversationId===id2).toArray();for(const child2 of directChildren)await db.conversations.update(child2.id,{forkedFromConversationId:newParent??void 0})}await db.conversations.delete(id2),await db.messages.where("convId").equals(id2).delete()})}static async deleteMessage(messageId){await db.transaction("rw",db.messages,async()=>{const message=await db.messages.get(messageId);if(message){if(message.parent){const parent=await db.messages.get(message.parent);parent&& +(parent.children=parent.children.filter(childId=>childId!==messageId),await db.messages.put(parent))}await db.messages.delete(messageId)}})}static async deleteMessageCascading(conversationId,messageId){return await db.transaction("rw",db.messages,async()=>{const allMessages=await db.messages.where("convId").equals(conversationId).toArray(),descendants=findDescendantMessages(allMessages,messageId),allToDelete=[messageId,...descendants],message=await db.messages.get(messageId);if(message&&message. +parent){const parent=await db.messages.get(message.parent);parent&&(parent.children=parent.children.filter(childId=>childId!==messageId),await db.messages.put(parent))}return await db.messages.bulkDelete(allToDelete),allToDelete})}static async getAllConversations(){return await db.conversations.orderBy("lastModified").reverse().toArray()}static async getConversation(id2){return await db.conversations.get(id2)}static async getConversationMessages(convId){return await db.messages.where("convId").equals( +convId).sortBy("timestamp")}static async updateConversation(id2,updates){await db.conversations.update(id2,{...updates,lastModified:Date.now()})}static async updateCurrentNode(convId,nodeId){await this.updateConversation(convId,{currNode:nodeId})}static async updateMessage(id2,updates){await db.messages.update(id2,updates)}static async importConversations(data){let importedCount=0,skippedCount=0;return await db.transaction("rw",[db.conversations,db.messages],async()=>{for(const item of data){const{ +conv,messages}=item;if(await db.conversations.get(conv.id)){console.warn(`Conversation "${conv.name}" already exists, skipping...`),skippedCount++;continue}await db.conversations.add(conv);for(const msg of messages)await db.messages.put(msg);importedCount++}return{imported:importedCount,skipped:skippedCount}})}static async forkConversation(sourceConvId,atMessageId,options){return await db.transaction("rw",[db.conversations,db.messages],async()=>{const sourceConv=await db.conversations.get(sourceConvId); +if(!sourceConv)throw new Error(`Source conversation ${sourceConvId} not found`);const allMessages=await db.messages.where("convId").equals(sourceConvId).toArray(),pathMessages=filterByLeafNodeId(allMessages,atMessageId,!0);if(pathMessages.length===0)throw new Error(`Could not resolve message path to ${atMessageId}`);const idMap=new Map;for(const msg of pathMessages)idMap.set(msg.id,uuid$1());const newConvId=uuid$1(),clonedMessages=pathMessages.map(msg=>{const newId=idMap.get(msg.id),newParent=msg. +parent?idMap.get(msg.parent)??null:null,newChildren=msg.children.filter(childId=>idMap.has(childId)).map(childId=>idMap.get(childId));return{...msg,id:newId,convId:newConvId,parent:newParent,children:newChildren,extra:options.includeAttachments?msg.extra:void 0}}),lastClonedMessage=clonedMessages[clonedMessages.length-1],newConv={id:newConvId,name:options.name,lastModified:Date.now(),currNode:lastClonedMessage.id,forkedFromConversationId:sourceConvId,mcpServerOverrides:sourceConv.mcpServerOverrides? +sourceConv.mcpServerOverrides.map(o=>({serverId:o.serverId,enabled:o.enabled})):void 0};await db.conversations.add(newConv);for(const msg of clonedMessages)await db.messages.add(msg);return newConv})}}const MIGRATION_DONE_KEY="llama-webui-migration-v2-done";function isMigrationNeeded(){try{return!localStorage.getItem(MIGRATION_DONE_KEY)}catch{return!1}}function markMigrationDone(){try{localStorage.setItem(MIGRATION_DONE_KEY,String(Date.now()))}catch{}}function hasLegacyMarkers(message){return message. +content?LEGACY_AGENTIC_REGEX.HAS_LEGACY_MARKERS.test(message.content):!1}function extractLegacyReasoning(content2){let reasoning="",cleanContent=content2;const re2=new RegExp(LEGACY_AGENTIC_REGEX.REASONING_EXTRACT.source,"g");let match;for(;(match=re2.exec(content2))!==null;)reasoning+=match[1];return cleanContent=cleanContent.replace(new RegExp(LEGACY_AGENTIC_REGEX.REASONING_BLOCK.source,"g"),"").replace(LEGACY_AGENTIC_REGEX.REASONING_OPEN,""),{reasoning,cleanContent}}function parseLegacyToolCalls(content2){ +const turns=[],regex=new RegExp(LEGACY_AGENTIC_REGEX.COMPLETED_TOOL_CALL.source,"g");let lastIndex=0,currentTurn={textBefore:"",toolCalls:[]},match;for(;(match=regex.exec(content2))!==null;){const textBefore=content2.slice(lastIndex,match.index).trim();textBefore&¤tTurn.toolCalls.length>0?(turns.push(currentTurn),currentTurn={textBefore,toolCalls:[]}):textBefore&¤tTurn.toolCalls.length===0&&(currentTurn.textBefore=textBefore),currentTurn.toolCalls.push({name:match[1],args:match[2],result:match[3]. +replace(/^\n+|\n+$/g,"")}),lastIndex=match.index+match[0].length}const remainingText=content2.slice(lastIndex).trim();if(currentTurn.toolCalls.length>0&&turns.push(currentTurn),remainingText){const cleanRemaining=remainingText.replace(LEGACY_AGENTIC_REGEX.AGENTIC_TOOL_CALL_OPEN,"").trim();cleanRemaining&&turns.push({textBefore:cleanRemaining,toolCalls:[]})}return turns.length===0&&turns.push({textBefore:content2.trim(),toolCalls:[]}),turns}async function migrateConversation(convId){const allMessages=await DatabaseService. +getConversationMessages(convId);let migratedCount=0;for(const message of allMessages){if(message.role!==MessageRole.ASSISTANT)continue;if(!hasLegacyMarkers(message)){if(message.content?.includes(LEGACY_REASONING_TAGS.START)){const{reasoning:reasoning2,cleanContent:cleanContent2}=extractLegacyReasoning(message.content);await DatabaseService.updateMessage(message.id,{content:cleanContent2.trim(),reasoningContent:reasoning2||void 0}),migratedCount++}continue}const{reasoning,cleanContent}=extractLegacyReasoning( +message.content),turns=parseLegacyToolCalls(cleanContent);let existingToolCalls=[];if(message.toolCalls)try{existingToolCalls=JSON.parse(message.toolCalls)}catch{}const firstTurn=turns[0];if(!firstTurn)continue;const firstTurnToolCalls=firstTurn.toolCalls.map((tc,i)=>({id:(existingToolCalls.find(e=>e.function?.name===tc.name)||existingToolCalls[i])?.id||`legacy_tool_${i}`,type:"function",function:{name:tc.name,arguments:tc.args}}));await DatabaseService.updateMessage(message.id,{content:firstTurn. +textBefore,reasoningContent:reasoning||void 0,toolCalls:firstTurnToolCalls.length>0?JSON.stringify(firstTurnToolCalls):""});let currentParentId=message.id,toolCallIdCounter=existingToolCalls.length;for(let i=0;i<firstTurn.toolCalls.length;i++){const tc=firstTurn.toolCalls[i],toolCallId=firstTurnToolCalls[i]?.id||`legacy_tool_${i}`;currentParentId=(await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.TOOL,content:tc.result,toolCallId,timestamp:message.timestamp+ +i+1,toolCalls:"",children:[]},currentParentId)).id}for(let turnIdx=1;turnIdx<turns.length;turnIdx++){const turn=turns[turnIdx],turnToolCalls=turn.toolCalls.map((tc,i)=>{const idx=toolCallIdCounter+i;return{id:existingToolCalls[idx]?.id||`legacy_tool_${idx}`,type:"function",function:{name:tc.name,arguments:tc.args}}});toolCallIdCounter+=turn.toolCalls.length,currentParentId=(await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.ASSISTANT,content:turn.textBefore, +timestamp:message.timestamp+turnIdx*100,toolCalls:turnToolCalls.length>0?JSON.stringify(turnToolCalls):"",children:[],model:message.model},currentParentId)).id;for(let i=0;i<turn.toolCalls.length;i++){const tc=turn.toolCalls[i],toolCallId=turnToolCalls[i]?.id||`legacy_tool_${toolCallIdCounter+i}`;currentParentId=(await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.TOOL,content:tc.result,toolCallId,timestamp:message.timestamp+turnIdx*100+i+1,toolCalls:"",children:[]}, +currentParentId)).id}}if(message.children.length>0&¤tParentId!==message.id){for(const childId of message.children){const child2=allMessages.find(m=>m.id===childId);if(child2&&child2.role!==MessageRole.TOOL){await DatabaseService.updateMessage(childId,{parent:currentParentId});const newParent=await DatabaseService.getConversationMessages(convId).then(msgs=>msgs.find(m=>m.id===currentParentId));newParent&&!newParent.children.includes(childId)&&await DatabaseService.updateMessage(currentParentId, +{children:[...newParent.children,childId]})}}await DatabaseService.updateMessage(message.id,{children:[]})}migratedCount++}return migratedCount}async function runLegacyMigration(){if(isMigrationNeeded()){console.log("[Migration] Starting legacy message format migration...");try{const conversations2=await DatabaseService.getAllConversations();let totalMigrated=0;for(const conv of conversations2){const count=await migrateConversation(conv.id);totalMigrated+=count}totalMigrated>0?console.log(`[Migr\ +ation] Migrated ${totalMigrated} messages across ${conversations2.length} conversations`):console.log("[Migration] No legacy messages found, marking as done"),markMigrationDone()}catch(error2){console.error("[Migration] Failed to migrate legacy messages:",error2),markMigrationDone()}}}class TTLCache{cache=new Map;ttlMs;maxEntries;onEvict;constructor(options={}){this.ttlMs=options.ttlMs??DEFAULT_CACHE_TTL_MS,this.maxEntries=options.maxEntries??DEFAULT_CACHE_MAX_ENTRIES,this.onEvict=options.onEvict}get(key2){ +const entry=this.cache.get(key2);return entry?Date.now()>entry.expiresAt?(this.delete(key2),null):(entry.lastAccessed=Date.now(),entry.value):null}set(key2,value,customTtlMs){this.cache.size>=this.maxEntries&&!this.cache.has(key2)&&this.evictOldest();const ttl=customTtlMs??this.ttlMs,now2=Date.now();this.cache.set(key2,{value,expiresAt:now2+ttl,lastAccessed:now2})}has(key2){const entry=this.cache.get(key2);return entry?Date.now()>entry.expiresAt?(this.delete(key2),!1):!0:!1}delete(key2){const entry=this. +cache.get(key2);return entry&&this.onEvict&&this.onEvict(key2,entry.value),this.cache.delete(key2)}clear(){if(this.onEvict)for(const[key2,entry]of this.cache)this.onEvict(key2,entry.value);this.cache.clear()}get size(){return this.cache.size}prune(){const now2=Date.now();let pruned=0;for(const[key2,entry]of this.cache)now2>entry.expiresAt&&(this.delete(key2),pruned++);return pruned}keys(){const now2=Date.now(),validKeys=[];for(const[key2,entry]of this.cache)now2<=entry.expiresAt&&validKeys.push( +key2);return validKeys}evictOldest(){let oldestKey=null,oldestTime=1/0;for(const[key2,entry]of this.cache)entry.lastAccessed<oldestTime&&(oldestTime=entry.lastAccessed,oldestKey=key2);oldestKey!==null&&this.delete(oldestKey)}touch(key2){const entry=this.cache.get(key2);if(!entry)return!1;const now2=Date.now();return now2>entry.expiresAt?(this.delete(key2),!1):(entry.expiresAt=now2+this.ttlMs,entry.lastAccessed=now2,!0)}}function getRequestUrl(input){return typeof input=="string"?input:input instanceof +URL?input.href:input.url}function getRequestMethod(input,init2,baseInit){return init2?.method?init2.method:typeof Request<"u"&&input instanceof Request?input.method:baseInit?.method??"GET"}function getRequestBody(input,init2){if(init2?.body!==void 0)return init2.body;if(typeof Request<"u"&&input instanceof Request)return input.body}function summarizeRequestBody(body2){return body2==null?{kind:"empty"}:typeof body2=="string"?{kind:"string",size:body2.length}:body2 instanceof Blob?{kind:"blob",size:body2. +size}:body2 instanceof URLSearchParams?{kind:"urlsearchparams",size:body2.toString().length}:body2 instanceof FormData?{kind:"formdata"}:body2 instanceof ArrayBuffer?{kind:"arraybuffer",size:body2.byteLength}:ArrayBuffer.isView(body2)?{kind:body2.constructor.name,size:body2.byteLength}:{kind:typeof body2}}function formatDiagnosticErrorMessage(error2){const message=error2 instanceof Error?error2.message:String(error2);return message.includes("Failed to fetch")?`${message} (check CORS?)`:message}function extractJsonRpcMethods(body2){ +if(typeof body2=="string")try{const parsed=JSON.parse(body2),methods=(Array.isArray(parsed)?parsed:[parsed]).map(message=>typeof message?.method=="string"?message.method:void 0).filter(method=>!!method);return methods.length>0?methods:void 0}catch{return}}function throwIfAborted(signal){if(signal?.aborted)throw new DOMException("Operation was aborted","AbortError")}function isAbortError(error2){return error2 instanceof DOMException&&error2.name==="AbortError"||error2 instanceof Error&&error2.name=== +"AbortError"}function uuid$1(){return globalThis.crypto?.randomUUID?.()??Math.random().toString(36).substring(2)}function remToPx(rem){const val=parseFloat(rem),fontSize=parseFloat(getComputedStyle(document.documentElement).fontSize);return val*fontSize}function ActionIconCopyToClipboard($$anchor,$$props){push$1($$props,!0);let ariaLabel=prop($$props,"ariaLabel",3,"Copy to clipboard"),canCopy=prop($$props,"canCopy",3,!0);{let $0=user_derived(()=>canCopy()?"pointer":"not-allowed");Copy($$anchor,{ +get class(){return`h-3 w-3 flex-shrink-0 cursor-${get$3($0)??""}`},get"aria-label"(){return ariaLabel()},onclick:()=>canCopy()&©ToClipboard($$props.text)})}pop()}function ActionIconRemove($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),iconSize=prop($$props,"iconSize",3,3);Button($$anchor,{type:"button",variant:"ghost",size:"icon-sm",get class(){return`bg-white/20 p-0 hover:bg-white/30 ${className()??""}`},onclick:e=>{e.stopPropagation(),$$props.onRemove?.($$props. +id)},"aria-label":"Remove file",children:($$anchor2,$$slotProps)=>{X($$anchor2,{get class(){return`h-${iconSize()??""} w-${iconSize()??""}`}})},$$slots:{default:!0}}),pop()}var root_6$y=from_html("<p> </p>"),root_2$1e=from_html("<!> <!>",1);function BadgeChatStatistic($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,"");function handleClick(){copyToClipboard(String($$props.value))}var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(), +node_1=first_child(fragment_1);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_2=root_2$1e(),node_2=first_child(fragment_2);component(node_2,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{BadgeInfo($$anchor6,{get class(){return className()},onclick:handleClick,icon:$$anchor7=>{var fragment_4=comment$2(),node_3=first_child(fragment_4);component(node_3,()=>$$props. +icon,($$anchor8,Icon_1)=>{Icon_1($$anchor8,{class:"h-3 w-3"})}),append($$anchor7,fragment_4)},children:($$anchor7,$$slotProps3)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,$$props.value)),append($$anchor7,text2)},$$slots:{icon:!0,default:!0}})},$$slots:{default:!0}})});var node_4=sibling(node_2,2);component(node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_6$y(),text_1=child(p2,!0);reset(p2),template_effect( +()=>set_text(text_1,$$props.tooltipLabel)),append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)},alternate=$$anchor2=>{BadgeInfo($$anchor2,{get class(){return className()},onclick:handleClick,icon:$$anchor3=>{var fragment_7=comment$2(),node_5=first_child(fragment_7);component(node_5,()=>$$props.icon,($$anchor4,Icon_2)=>{Icon_2($$anchor4,{class:"h-3 w-3"})}),append($$anchor3,fragment_7)},children:($$anchor3,$$slotProps)=>{ +next$1();var text_2=text$8();template_effect(()=>set_text(text_2,$$props.value)),append($$anchor3,text_2)},$$slots:{icon:!0,default:!0}})};if_block(node2,$$render=>{$$props.tooltipLabel?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root$1E=from_html("<button><!> <!></button>");function BadgeInfo($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,"");var button=root$1E(),node2=child(button);{var consequent=$$anchor2=>{var fragment=comment$2(), +node_1=first_child(fragment);snippet(node_1,()=>$$props.icon),append($$anchor2,fragment)};if_block(node2,$$render=>{$$props.icon&&$$render(consequent)})}var node_2=sibling(node2,2);snippet(node_2,()=>$$props.children),reset(button),template_effect($0=>set_class(button,1,$0),[()=>clsx(cn$1("inline-flex cursor-pointer items-center gap-1 rounded-sm bg-muted-foreground/15 px-1.5 py-0.75",className()))]),delegated("click",button,function(...$$args){$$props.onclick?.apply(this,$$args)}),append($$anchor, +button),pop()}delegate(["click"]);var root_1$$=from_html("<span><!> </span>");function BadgeModality($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,"");const displayableModalities=user_derived(()=>$$props.modalities.filter(m=>m===ModelModality.VISION||m===ModelModality.AUDIO));var fragment=comment$2(),node2=first_child(fragment);each(node2,17,()=>get$3(displayableModalities),index$2,($$anchor2,modality)=>{const IconComponent=user_derived(()=>MODALITY_ICONS[get$3(modality)]), +label=user_derived(()=>MODALITY_LABELS[get$3(modality)]);var span=root_1$$(),node_1=child(span);{var consequent=$$anchor3=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);component(node_2,()=>get$3(IconComponent),($$anchor4,IconComponent_1)=>{IconComponent_1($$anchor4,{class:"h-3 w-3"})}),append($$anchor3,fragment_1)};if_block(node_1,$$render=>{get$3(IconComponent)&&$$render(consequent)})}var text2=sibling(node_1);reset(span),template_effect($0=>{set_class(span,1,$0),set_text(text2,` ${get$3( +label)??""}`)},[()=>clsx(cn$1("inline-flex items-center gap-1 rounded-md bg-muted px-2 py-1 text-xs font-medium",className()))]),append($$anchor2,span)}),append($$anchor,fragment),pop()}var root_10$h=from_html('<div class="mt-2 -mr-2 flex justify-end px-4"><!></div>'),root_2$1d=from_html("<!> <!>",1),root_12$e=from_html('<div class="flex flex-wrap items-start justify-end gap-3"></div>'),root_1$_=from_html("<div><!></div>"),root$1D=from_html("<!> <!> <!> <!>",1);function ChatAttachmentsList($$anchor,$$props){ +push$1($$props,!0);let className=prop($$props,"class",3,""),style2=prop($$props,"style",3,""),attachments=prop($$props,"attachments",19,()=>[]),readonly2=prop($$props,"readonly",3,!1),uploadedFiles=prop($$props,"uploadedFiles",27,()=>proxy([])),imageClass=prop($$props,"imageClass",3,""),imageHeight=prop($$props,"imageHeight",3,"h-24"),imageWidth=prop($$props,"imageWidth",3,"w-auto"),limitToSingleRow=prop($$props,"limitToSingleRow",3,!1),displayItems=user_derived(()=>getAttachmentDisplayItems({uploadedFiles:uploadedFiles(), +attachments:attachments()})),carouselRef=state$1(void 0),isScrollable=state$1(!1),previewDialogOpen=state$1(!1),previewItem=state$1(null),mcpResourcePreviewOpen=state$1(!1),mcpResourcePreviewExtra=state$1(null),showViewAll=user_derived(()=>limitToSingleRow()&&get$3(displayItems).length>0&&get$3(isScrollable)),viewAllDialogOpen=state$1(!1);function openPreview(item,event2){event2?.stopPropagation(),event2?.preventDefault(),set$1(previewItem,{uploadedFile:item.uploadedFile,attachment:item.attachment, +preview:item.preview,name:item.name,size:item.size,textContent:item.textContent},!0),set$1(previewDialogOpen,!0)}function openMcpResourcePreview(extra){set$1(mcpResourcePreviewExtra,extra,!0),set$1(mcpResourcePreviewOpen,!0)}function toMcpResourceAttachment(extra,id2){return{id:id2,resource:{uri:extra.uri,name:extra.name,title:extra.name,serverName:extra.serverName}}}user_effect(()=>{get$3(carouselRef)&&get$3(displayItems).length&&get$3(carouselRef).resetScroll()});var fragment=root$1D(),node2=first_child( +fragment);{var consequent_10=$$anchor2=>{var div=root_1$_(),node_1=child(div);{var consequent_5=$$anchor3=>{var fragment_1=root_2$1d(),node_2=first_child(fragment_1);bind_this(HorizontalScrollCarousel(node_2,{onScrollableChange:scrollable=>set$1(isScrollable,scrollable,!0),children:($$anchor4,$$slotProps)=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);each(node_3,17,()=>get$3(displayItems),item=>item.id,($$anchor5,item)=>{var fragment_3=comment$2(),node_4=first_child(fragment_3);{var consequent_1=$$anchor6=>{ +const mcpPrompt=user_derived(()=>get$3(item).attachment?.type===AttachmentType.MCP_PROMPT?get$3(item).attachment:get$3(item).uploadedFile?.mcpPrompt?{type:AttachmentType.MCP_PROMPT,name:get$3(item).name,serverName:get$3(item).uploadedFile.mcpPrompt.serverName,promptName:get$3(item).uploadedFile.mcpPrompt.promptName,content:get$3(item).textContent??"",arguments:get$3(item).uploadedFile.mcpPrompt.arguments}:null);var fragment_4=comment$2(),node_5=first_child(fragment_4);{var consequent=$$anchor7=>{ +{let $0=user_derived(()=>limitToSingleRow()?"first:ml-4 last:mr-4":""),$1=user_derived(()=>$$props.onFileRemove?()=>$$props.onFileRemove(get$3(item).id):void 0);ChatAttachmentMcpPrompt($$anchor7,{get class(){return`max-w-[300px] min-w-[200px] flex-shrink-0 ${get$3($0)??""}`},get prompt(){return get$3(mcpPrompt)},get readonly(){return readonly2()},get isLoading(){return get$3(item).isLoading},get loadError(){return get$3(item).loadError},get onRemove(){return get$3($1)}})}};if_block(node_5,$$render=>{ +get$3(mcpPrompt)&&$$render(consequent)})}append($$anchor6,fragment_4)},consequent_2=$$anchor6=>{const mcpResource=user_derived(()=>get$3(item).attachment);{let $0=user_derived(()=>limitToSingleRow()?"first:ml-4 last:mr-4":""),$1=user_derived(()=>toMcpResourceAttachment(get$3(mcpResource),get$3(item).id));ChatAttachmentMcpResource($$anchor6,{get class(){return`flex-shrink-0 ${get$3($0)??""}`},get attachment(){return get$3($1)},onClick:()=>openMcpResourcePreview(get$3(mcpResource))})}},consequent_3=$$anchor6=>{ +{let $0=user_derived(()=>limitToSingleRow()?"first:ml-4 last:mr-4":"");ChatAttachmentThumbnailImage($$anchor6,{get class(){return`flex-shrink-0 cursor-pointer ${get$3($0)??""}`},get id(){return get$3(item).id},get name(){return get$3(item).name},get preview(){return get$3(item).preview},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get height(){return imageHeight()},get width(){return imageWidth()},get imageClass(){return imageClass()},onClick:event2=>openPreview( +get$3(item),event2)})}},alternate=$$anchor6=>{{let $0=user_derived(()=>limitToSingleRow()?"first:ml-4 last:mr-4":"");ChatAttachmentThumbnailFile($$anchor6,{get class(){return`flex-shrink-0 cursor-pointer ${get$3($0)??""}`},get id(){return get$3(item).id},get name(){return get$3(item).name},get size(){return get$3(item).size},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get textContent(){return get$3(item).textContent},get attachment(){return get$3(item).attachment}, +get uploadedFile(){return get$3(item).uploadedFile},onClick:event2=>openPreview(get$3(item),event2)})}};if_block(node_4,$$render=>{get$3(item).isMcpPrompt?$$render(consequent_1):get$3(item).isMcpResource&&get$3(item).attachment?.type===AttachmentType.MCP_RESOURCE?$$render(consequent_2,1):get$3(item).isImage&&get$3(item).preview?$$render(consequent_3,2):$$render(alternate,-1)})}append($$anchor5,fragment_3)}),append($$anchor4,fragment_2)},$$slots:{default:!0}}),$$value=>set$1(carouselRef,$$value,!0), +()=>get$3(carouselRef));var node_6=sibling(node_2,2);{var consequent_4=$$anchor4=>{var div_1=root_10$h(),node_7=child(div_1);Button(node_7,{type:"button",variant:"ghost",size:"sm",class:"h-6 text-xs text-muted-foreground hover:text-foreground",onclick:()=>set$1(viewAllDialogOpen,!0),children:($$anchor5,$$slotProps)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,`View all (${get$3(displayItems).length??""})`)),append($$anchor5,text2)},$$slots:{default:!0}}),reset(div_1),append($$anchor4, +div_1)};if_block(node_6,$$render=>{get$3(showViewAll)&&$$render(consequent_4)})}append($$anchor3,fragment_1)},alternate_2=$$anchor3=>{var div_2=root_12$e();each(div_2,21,()=>get$3(displayItems),item=>item.id,($$anchor4,item)=>{var fragment_10=comment$2(),node_8=first_child(fragment_10);{var consequent_7=$$anchor5=>{const mcpPrompt=user_derived(()=>get$3(item).attachment?.type===AttachmentType.MCP_PROMPT?get$3(item).attachment:get$3(item).uploadedFile?.mcpPrompt?{type:AttachmentType.MCP_PROMPT,name:get$3( +item).name,serverName:get$3(item).uploadedFile.mcpPrompt.serverName,promptName:get$3(item).uploadedFile.mcpPrompt.promptName,content:get$3(item).textContent??"",arguments:get$3(item).uploadedFile.mcpPrompt.arguments}:null);var fragment_11=comment$2(),node_9=first_child(fragment_11);{var consequent_6=$$anchor6=>{{let $0=user_derived(()=>$$props.onFileRemove?()=>$$props.onFileRemove(get$3(item).id):void 0);ChatAttachmentMcpPrompt($$anchor6,{class:"max-w-[300px] min-w-[200px]",get prompt(){return get$3( +mcpPrompt)},get readonly(){return readonly2()},get isLoading(){return get$3(item).isLoading},get loadError(){return get$3(item).loadError},get onRemove(){return get$3($0)}})}};if_block(node_9,$$render=>{get$3(mcpPrompt)&&$$render(consequent_6)})}append($$anchor5,fragment_11)},consequent_8=$$anchor5=>{const mcpResource=user_derived(()=>get$3(item).attachment);{let $0=user_derived(()=>toMcpResourceAttachment(get$3(mcpResource),get$3(item).id));ChatAttachmentMcpResource($$anchor5,{get attachment(){ +return get$3($0)},onClick:()=>openMcpResourcePreview(get$3(mcpResource))})}},consequent_9=$$anchor5=>{ChatAttachmentThumbnailImage($$anchor5,{class:"cursor-pointer",get id(){return get$3(item).id},get name(){return get$3(item).name},get preview(){return get$3(item).preview},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get height(){return imageHeight()},get width(){return imageWidth()},get imageClass(){return imageClass()},onClick:event2=>openPreview(get$3(item), +event2)})},alternate_1=$$anchor5=>{ChatAttachmentThumbnailFile($$anchor5,{class:"cursor-pointer",get id(){return get$3(item).id},get name(){return get$3(item).name},get size(){return get$3(item).size},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get textContent(){return get$3(item).textContent},get attachment(){return get$3(item).attachment},get uploadedFile(){return get$3(item).uploadedFile},onClick:event2=>openPreview(get$3(item),event2)})};if_block(node_8,$$render=>{ +get$3(item).isMcpPrompt?$$render(consequent_7):get$3(item).isMcpResource&&get$3(item).attachment?.type===AttachmentType.MCP_RESOURCE?$$render(consequent_8,1):get$3(item).isImage&&get$3(item).preview?$$render(consequent_9,2):$$render(alternate_1,-1)})}append($$anchor4,fragment_10)}),reset(div_2),append($$anchor3,div_2)};if_block(node_1,$$render=>{limitToSingleRow()?$$render(consequent_5):$$render(alternate_2,-1)})}reset(div),template_effect(()=>{set_class(div,1,clsx(className())),set_style(div,style2())}), +append($$anchor2,div)};if_block(node2,$$render=>{get$3(displayItems).length>0&&$$render(consequent_10)})}var node_10=sibling(node2,2);{var consequent_11=$$anchor2=>{DialogChatAttachmentPreview($$anchor2,{get uploadedFile(){return get$3(previewItem).uploadedFile},get attachment(){return get$3(previewItem).attachment},get preview(){return get$3(previewItem).preview},get name(){return get$3(previewItem).name},get size(){return get$3(previewItem).size},get textContent(){return get$3(previewItem).textContent}, +get activeModelId(){return $$props.activeModelId},get open(){return get$3(previewDialogOpen)},set open($$value){set$1(previewDialogOpen,$$value,!0)}})};if_block(node_10,$$render=>{get$3(previewItem)&&$$render(consequent_11)})}var node_11=sibling(node_10,2);DialogChatAttachmentsViewAll(node_11,{get uploadedFiles(){return uploadedFiles()},get attachments(){return attachments()},get readonly(){return readonly2()},get onFileRemove(){return $$props.onFileRemove},imageHeight:"h-64",get imageClass(){return imageClass()}, +get activeModelId(){return $$props.activeModelId},get open(){return get$3(viewAllDialogOpen)},set open($$value){set$1(viewAllDialogOpen,$$value,!0)}});var node_12=sibling(node_11,2);{var consequent_12=$$anchor2=>{DialogMcpResourcePreview($$anchor2,{get extra(){return get$3(mcpResourcePreviewExtra)},get open(){return get$3(mcpResourcePreviewOpen)},set open($$value){set$1(mcpResourcePreviewOpen,$$value,!0)}})};if_block(node_12,$$render=>{get$3(mcpResourcePreviewExtra)&&$$render(consequent_12)})}append( +$$anchor,fragment),pop()}var root_1$Z=from_html('<div class="absolute top-10 right-2 flex items-center justify-center opacity-0 transition-opacity group-hover:opacity-100"><!></div>'),root$1C=from_html("<div><!> <!></div>");function ChatAttachmentMcpPrompt($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),readonly2=prop($$props,"readonly",3,!1),isLoading2=prop($$props,"isLoading",3,!1);var div=root$1C(),node2=child(div);ChatMessageMcpPromptContent(node2,{get prompt(){ +return $$props.prompt},get variant(){return McpPromptVariant.ATTACHMENT},get isLoading(){return isLoading2()},get loadError(){return $$props.loadError}});var node_1=sibling(node2,2);{var consequent=$$anchor2=>{var div_1=root_1$Z(),node_2=child(div_1);ActionIconRemove(node_2,{get id(){return $$props.prompt.name},onRemove:()=>$$props.onRemove?.()}),reset(div_1),append($$anchor2,div_1)};if_block(node_1,$$render=>{!readonly2()&&$$props.onRemove&&$$render(consequent)})}reset(div),template_effect(()=>set_class( +div,1,`group relative ${className()??""}`)),append($$anchor,div),pop()}const NEVER=Object.freeze({status:"aborted"});function $constructor(name,initializer2,params){function init2(inst,def){if(inst._zod||Object.defineProperty(inst,"_zod",{value:{def,constr:_,traits:new Set},enumerable:!1}),inst._zod.traits.has(name))return;inst._zod.traits.add(name),initializer2(inst,def);const proto=_.prototype,keys2=Object.keys(proto);for(let i=0;i<keys2.length;i++){const k=keys2[i];k in inst||(inst[k]=proto[k]. +bind(inst))}}const Parent=params?.Parent??Object;class Definition extends Parent{}Object.defineProperty(Definition,"name",{value:name});function _(def){var _a2;const inst=params?.Parent?new Definition:this;init2(inst,def),(_a2=inst._zod).deferred??(_a2.deferred=[]);for(const fn of inst._zod.deferred)fn();return inst}return Object.defineProperty(_,"init",{value:init2}),Object.defineProperty(_,Symbol.hasInstance,{value:inst=>params?.Parent&&inst instanceof params.Parent?!0:inst?._zod?.traits?.has( +name)}),Object.defineProperty(_,"name",{value:name}),_}class $ZodAsyncError extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}class $ZodEncodeError extends Error{constructor(name){super(`Encountered unidirectional transform during encode: ${name}`),this.name="ZodEncodeError"}}const globalConfig={};function config(newConfig){return globalConfig}function getEnumValues(entries){const numericValues=Object.values(entries).filter(v=>typeof v== +"number");return Object.entries(entries).filter(([k,_])=>numericValues.indexOf(+k)===-1).map(([_,v])=>v)}function jsonStringifyReplacer(_,value){return typeof value=="bigint"?value.toString():value}function cached(getter){return{get value(){{const value=getter();return Object.defineProperty(this,"value",{value}),value}}}}function nullish(input){return input==null}function cleanRegex(source2){const start2=source2.startsWith("^")?1:0,end=source2.endsWith("$")?source2.length-1:source2.length;return source2. +slice(start2,end)}function floatSafeRemainder(val,step){const valDecCount=(val.toString().split(".")[1]||"").length,stepString=step.toString();let stepDecCount=(stepString.split(".")[1]||"").length;if(stepDecCount===0&&/\d?e-\d?/.test(stepString)){const match=stepString.match(/\d?e-(\d?)/);match?.[1]&&(stepDecCount=Number.parseInt(match[1]))}const decCount=valDecCount>stepDecCount?valDecCount:stepDecCount,valInt=Number.parseInt(val.toFixed(decCount).replace(".","")),stepInt=Number.parseInt(step. +toFixed(decCount).replace(".",""));return valInt%stepInt/10**decCount}const EVALUATING=Symbol("evaluating");function defineLazy(object2,key2,getter){let value;Object.defineProperty(object2,key2,{get(){if(value!==EVALUATING)return value===void 0&&(value=EVALUATING,value=getter()),value},set(v){Object.defineProperty(object2,key2,{value:v})},configurable:!0})}function assignProp(target2,prop2,value){Object.defineProperty(target2,prop2,{value,writable:!0,enumerable:!0,configurable:!0})}function mergeDefs(...defs){ +const mergedDescriptors={};for(const def of defs){const descriptors=Object.getOwnPropertyDescriptors(def);Object.assign(mergedDescriptors,descriptors)}return Object.defineProperties({},mergedDescriptors)}function esc(str){return JSON.stringify(str)}function slugify(input){return input.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}const captureStackTrace="captureStackTrace"in Error?Error.captureStackTrace:(..._args)=>{};function isObject$1(data){return typeof data== +"object"&&data!==null&&!Array.isArray(data)}const allowsEval=cached(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{const F=Function;return new F(""),!0}catch{return!1}});function isPlainObject$2(o){if(isObject$1(o)===!1)return!1;const ctor=o.constructor;if(ctor===void 0||typeof ctor!="function")return!0;const prot=ctor.prototype;return!(isObject$1(prot)===!1||Object.prototype.hasOwnProperty.call(prot,"isPrototypeOf")===!1)}function shallowClone(o){return isPlainObject$2( +o)?{...o}:Array.isArray(o)?[...o]:o}const propertyKeyTypes=new Set(["string","number","symbol"]);function escapeRegex(str){return str.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function clone(inst,def,params){const cl=new inst._zod.constr(def??inst._zod.def);return(!def||params?.parent)&&(cl._zod.parent=inst),cl}function normalizeParams(_params){const params=_params;if(!params)return{};if(typeof params=="string")return{error:()=>params};if(params?.message!==void 0){if(params?.error!==void 0)throw new Error( +"Cannot specify both `message` and `error` params");params.error=params.message}return delete params.message,typeof params.error=="string"?{...params,error:()=>params.error}:params}function optionalKeys(shape){return Object.keys(shape).filter(k=>shape[k]._zod.optin==="optional"&&shape[k]._zod.optout==="optional")}const NUMBER_FORMAT_RANGES={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22], +float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function pick(schema,mask){const currDef=schema._zod.def,def=mergeDefs(schema._zod.def,{get shape(){const newShape={};for(const key2 in mask){if(!(key2 in currDef.shape))throw new Error(`Unrecognized key: "${key2}"`);mask[key2]&&(newShape[key2]=currDef.shape[key2])}return assignProp(this,"shape",newShape),newShape},checks:[]});return clone(schema,def)}function omit(schema,mask){const currDef=schema._zod.def,def=mergeDefs(schema._zod.def,{get shape(){ +const newShape={...schema._zod.def.shape};for(const key2 in mask){if(!(key2 in currDef.shape))throw new Error(`Unrecognized key: "${key2}"`);mask[key2]&&delete newShape[key2]}return assignProp(this,"shape",newShape),newShape},checks:[]});return clone(schema,def)}function extend$2(schema,shape){if(!isPlainObject$2(shape))throw new Error("Invalid input to extend: expected a plain object");const checks2=schema._zod.def.checks;if(checks2&&checks2.length>0)throw new Error("Object schemas containing r\ +efinements cannot be extended. Use `.safeExtend()` instead.");const def=mergeDefs(schema._zod.def,{get shape(){const _shape={...schema._zod.def.shape,...shape};return assignProp(this,"shape",_shape),_shape},checks:[]});return clone(schema,def)}function safeExtend(schema,shape){if(!isPlainObject$2(shape))throw new Error("Invalid input to safeExtend: expected a plain object");const def={...schema._zod.def,get shape(){const _shape={...schema._zod.def.shape,...shape};return assignProp(this,"shape",_shape), +_shape},checks:schema._zod.def.checks};return clone(schema,def)}function merge$1(a,b){const def=mergeDefs(a._zod.def,{get shape(){const _shape={...a._zod.def.shape,...b._zod.def.shape};return assignProp(this,"shape",_shape),_shape},get catchall(){return b._zod.def.catchall},checks:[]});return clone(a,def)}function partial(Class,schema,mask){const def=mergeDefs(schema._zod.def,{get shape(){const oldShape=schema._zod.def.shape,shape={...oldShape};if(mask)for(const key2 in mask){if(!(key2 in oldShape)) +throw new Error(`Unrecognized key: "${key2}"`);mask[key2]&&(shape[key2]=Class?new Class({type:"optional",innerType:oldShape[key2]}):oldShape[key2])}else for(const key2 in oldShape)shape[key2]=Class?new Class({type:"optional",innerType:oldShape[key2]}):oldShape[key2];return assignProp(this,"shape",shape),shape},checks:[]});return clone(schema,def)}function required$4(Class,schema,mask){const def=mergeDefs(schema._zod.def,{get shape(){const oldShape=schema._zod.def.shape,shape={...oldShape};if(mask) +for(const key2 in mask){if(!(key2 in shape))throw new Error(`Unrecognized key: "${key2}"`);mask[key2]&&(shape[key2]=new Class({type:"nonoptional",innerType:oldShape[key2]}))}else for(const key2 in oldShape)shape[key2]=new Class({type:"nonoptional",innerType:oldShape[key2]});return assignProp(this,"shape",shape),shape},checks:[]});return clone(schema,def)}function aborted(x,startIndex=0){if(x.aborted===!0)return!0;for(let i=startIndex;i<x.issues.length;i++)if(x.issues[i]?.continue!==!0)return!0;return!1} +function prefixIssues(path2,issues){return issues.map(iss=>{var _a2;return(_a2=iss).path??(_a2.path=[]),iss.path.unshift(path2),iss})}function unwrapMessage(message){return typeof message=="string"?message:message?.message}function finalizeIssue(iss,ctx,config2){const full={...iss,path:iss.path??[]};if(!iss.message){const message=unwrapMessage(iss.inst?._zod.def?.error?.(iss))??unwrapMessage(ctx?.error?.(iss))??unwrapMessage(config2.customError?.(iss))??unwrapMessage(config2.localeError?.(iss))?? +"Invalid input";full.message=message}return delete full.inst,delete full.continue,ctx?.reportInput||delete full.input,full}function getLengthableOrigin(input){return Array.isArray(input)?"array":typeof input=="string"?"string":"unknown"}function issue(...args){const[iss,input,inst]=args;return typeof iss=="string"?{message:iss,code:"custom",input,inst}:{...iss}}const initializer$1=(inst,def)=>{inst.name="$ZodError",Object.defineProperty(inst,"_zod",{value:inst._zod,enumerable:!1}),Object.defineProperty( +inst,"issues",{value:def,enumerable:!1}),inst.message=JSON.stringify(def,jsonStringifyReplacer,2),Object.defineProperty(inst,"toString",{value:()=>inst.message,enumerable:!1})},$ZodError=$constructor("$ZodError",initializer$1),$ZodRealError=$constructor("$ZodError",initializer$1,{Parent:Error});function flattenError$1(error2,mapper=issue2=>issue2.message){const fieldErrors={},formErrors=[];for(const sub2 of error2.issues)sub2.path.length>0?(fieldErrors[sub2.path[0]]=fieldErrors[sub2.path[0]]||[], +fieldErrors[sub2.path[0]].push(mapper(sub2))):formErrors.push(mapper(sub2));return{formErrors,fieldErrors}}function formatError(error2,mapper=issue2=>issue2.message){const fieldErrors={_errors:[]},processError=error3=>{for(const issue2 of error3.issues)if(issue2.code==="invalid_union"&&issue2.errors.length)issue2.errors.map(issues=>processError({issues}));else if(issue2.code==="invalid_key")processError({issues:issue2.issues});else if(issue2.code==="invalid_element")processError({issues:issue2.issues});else if(issue2. +path.length===0)fieldErrors._errors.push(mapper(issue2));else{let curr=fieldErrors,i=0;for(;i<issue2.path.length;){const el=issue2.path[i];i===issue2.path.length-1?(curr[el]=curr[el]||{_errors:[]},curr[el]._errors.push(mapper(issue2))):curr[el]=curr[el]||{_errors:[]},curr=curr[el],i++}}};return processError(error2),fieldErrors}const _parse=_Err=>(schema,value,_ctx,_params)=>{const ctx=_ctx?Object.assign(_ctx,{async:!1}):{async:!1},result=schema._zod.run({value,issues:[]},ctx);if(result instanceof +Promise)throw new $ZodAsyncError;if(result.issues.length){const e=new(_params?.Err??_Err)(result.issues.map(iss=>finalizeIssue(iss,ctx,config())));throw captureStackTrace(e,_params?.callee),e}return result.value},_parseAsync=_Err=>async(schema,value,_ctx,params)=>{const ctx=_ctx?Object.assign(_ctx,{async:!0}):{async:!0};let result=schema._zod.run({value,issues:[]},ctx);if(result instanceof Promise&&(result=await result),result.issues.length){const e=new(params?.Err??_Err)(result.issues.map(iss=>finalizeIssue( +iss,ctx,config())));throw captureStackTrace(e,params?.callee),e}return result.value},_safeParse=_Err=>(schema,value,_ctx)=>{const ctx=_ctx?{..._ctx,async:!1}:{async:!1},result=schema._zod.run({value,issues:[]},ctx);if(result instanceof Promise)throw new $ZodAsyncError;return result.issues.length?{success:!1,error:new(_Err??$ZodError)(result.issues.map(iss=>finalizeIssue(iss,ctx,config())))}:{success:!0,data:result.value}},safeParse$2=_safeParse($ZodRealError),_safeParseAsync=_Err=>async(schema,value,_ctx)=>{ +const ctx=_ctx?Object.assign(_ctx,{async:!0}):{async:!0};let result=schema._zod.run({value,issues:[]},ctx);return result instanceof Promise&&(result=await result),result.issues.length?{success:!1,error:new _Err(result.issues.map(iss=>finalizeIssue(iss,ctx,config())))}:{success:!0,data:result.value}},safeParseAsync$1=_safeParseAsync($ZodRealError),_encode=_Err=>(schema,value,_ctx)=>{const ctx=_ctx?Object.assign(_ctx,{direction:"backward"}):{direction:"backward"};return _parse(_Err)(schema,value,ctx)}, +_decode=_Err=>(schema,value,_ctx)=>_parse(_Err)(schema,value,_ctx),_encodeAsync=_Err=>async(schema,value,_ctx)=>{const ctx=_ctx?Object.assign(_ctx,{direction:"backward"}):{direction:"backward"};return _parseAsync(_Err)(schema,value,ctx)},_decodeAsync=_Err=>async(schema,value,_ctx)=>_parseAsync(_Err)(schema,value,_ctx),_safeEncode=_Err=>(schema,value,_ctx)=>{const ctx=_ctx?Object.assign(_ctx,{direction:"backward"}):{direction:"backward"};return _safeParse(_Err)(schema,value,ctx)},_safeDecode=_Err=>(schema,value,_ctx)=>_safeParse( +_Err)(schema,value,_ctx),_safeEncodeAsync=_Err=>async(schema,value,_ctx)=>{const ctx=_ctx?Object.assign(_ctx,{direction:"backward"}):{direction:"backward"};return _safeParseAsync(_Err)(schema,value,ctx)},_safeDecodeAsync=_Err=>async(schema,value,_ctx)=>_safeParseAsync(_Err)(schema,value,_ctx),cuid=/^[cC][^\s-]{8,}$/,cuid2=/^[0-9a-z]+$/,ulid=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,xid=/^[0-9a-vA-V]{20}$/,ksuid=/^[A-Za-z0-9]{27}$/,nanoid=/^[a-zA-Z0-9_-]{21}$/,duration$1=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/, guid=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,uuid=version2=>version2?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version2}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,email=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,_emoji$1="\ ^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function emoji(){return new RegExp(_emoji$1,"u")}const ipv4=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv6=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/, cidrv4=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,cidrv6=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,base64url=/^[A-Za-z0-9_-]*$/,e164=/^\+(?:[0-9]){6,14}[0-9]$/,dateSource="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]\ @@ -3905,7 +3987,7 @@ return r2.then(r3=>handleRefineResult(r3,payload,input,inst));handleRefineResult set(schema,meta),meta&&typeof meta=="object"&&"id"in meta){if(this._idmap.has(meta.id))throw new Error(`ID ${meta.id} already exists in the registry`);this._idmap.set(meta.id,schema)}return this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(schema){const meta=this._map.get(schema);return meta&&typeof meta=="object"&&"id"in meta&&this._idmap.delete(meta.id),this._map.delete(schema),this}get(schema){const p2=schema._zod.parent;if(p2){const pm={...this.get(p2)??{}};delete pm. id;const f={...pm,...this._map.get(schema)};return Object.keys(f).length?f:void 0}return this._map.get(schema)}has(schema){return this._map.has(schema)}}function registry(){return new $ZodRegistry}(_a=globalThis).__zod_globalRegistry??(_a.__zod_globalRegistry=registry());const globalRegistry=globalThis.__zod_globalRegistry;function _string(Class,params){return new Class({type:"string",...normalizeParams(params)})}function _email(Class,params){return new Class({type:"string",format:"email",check:"\ string_format",abort:!1,...normalizeParams(params)})}function _guid(Class,params){return new Class({type:"string",format:"guid",check:"string_format",abort:!1,...normalizeParams(params)})}function _uuid(Class,params){return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,...normalizeParams(params)})}function _uuidv4(Class,params){return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...normalizeParams(params)})}function _uuidv6(Class,params){ -return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...normalizeParams(params)})}function _uuidv7(Class,params){return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...normalizeParams(params)})}function _url$1(Class,params){return new Class({type:"string",format:"url",check:"string_format",abort:!1,...normalizeParams(params)})}function _emoji(Class,params){return new Class({type:"string",format:"emoji",check:"string_forma\ +return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...normalizeParams(params)})}function _uuidv7(Class,params){return new Class({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...normalizeParams(params)})}function _url$2(Class,params){return new Class({type:"string",format:"url",check:"string_format",abort:!1,...normalizeParams(params)})}function _emoji(Class,params){return new Class({type:"string",format:"emoji",check:"string_forma\ t",abort:!1,...normalizeParams(params)})}function _nanoid(Class,params){return new Class({type:"string",format:"nanoid",check:"string_format",abort:!1,...normalizeParams(params)})}function _cuid(Class,params){return new Class({type:"string",format:"cuid",check:"string_format",abort:!1,...normalizeParams(params)})}function _cuid2(Class,params){return new Class({type:"string",format:"cuid2",check:"string_format",abort:!1,...normalizeParams(params)})}function _ulid(Class,params){return new Class({type:"\ string",format:"ulid",check:"string_format",abort:!1,...normalizeParams(params)})}function _xid(Class,params){return new Class({type:"string",format:"xid",check:"string_format",abort:!1,...normalizeParams(params)})}function _ksuid(Class,params){return new Class({type:"string",format:"ksuid",check:"string_format",abort:!1,...normalizeParams(params)})}function _ipv4(Class,params){return new Class({type:"string",format:"ipv4",check:"string_format",abort:!1,...normalizeParams(params)})}function _ipv6(Class,params){ return new Class({type:"string",format:"ipv6",check:"string_format",abort:!1,...normalizeParams(params)})}function _cidrv4(Class,params){return new Class({type:"string",format:"cidrv4",check:"string_format",abort:!1,...normalizeParams(params)})}function _cidrv6(Class,params){return new Class({type:"string",format:"cidrv6",check:"string_format",abort:!1,...normalizeParams(params)})}function _base64(Class,params){return new Class({type:"string",format:"base64",check:"string_format",abort:!1,...normalizeParams( @@ -3955,17 +4037,17 @@ isArray(def2.values)&&def2.values.length>0)return def2.values[0]}}const def=sche params)}const initializer=(inst,issues)=>{$ZodError.init(inst,issues),inst.name="ZodError",Object.defineProperties(inst,{format:{value:mapper=>formatError(inst,mapper)},flatten:{value:mapper=>flattenError$1(inst,mapper)},addIssue:{value:issue2=>{inst.issues.push(issue2),inst.message=JSON.stringify(inst.issues,jsonStringifyReplacer,2)}},addIssues:{value:issues2=>{inst.issues.push(...issues2),inst.message=JSON.stringify(inst.issues,jsonStringifyReplacer,2)}},isEmpty:{get(){return inst.issues.length=== 0}}})},ZodRealError=$constructor("ZodError",initializer,{Parent:Error}),parse$3=_parse(ZodRealError),parseAsync=_parseAsync(ZodRealError),safeParse=_safeParse(ZodRealError),safeParseAsync=_safeParseAsync(ZodRealError),encode=_encode(ZodRealError),decode$1=_decode(ZodRealError),encodeAsync=_encodeAsync(ZodRealError),decodeAsync=_decodeAsync(ZodRealError),safeEncode=_safeEncode(ZodRealError),safeDecode=_safeDecode(ZodRealError),safeEncodeAsync=_safeEncodeAsync(ZodRealError),safeDecodeAsync=_safeDecodeAsync( ZodRealError),ZodType=$constructor("ZodType",(inst,def)=>($ZodType.init(inst,def),Object.assign(inst["~standard"],{jsonSchema:{input:createStandardJSONSchemaMethod(inst,"input"),output:createStandardJSONSchemaMethod(inst,"output")}}),inst.toJSONSchema=createToJSONSchemaMethod(inst,{}),inst.def=def,inst.type=def.type,Object.defineProperty(inst,"_def",{value:def}),inst.check=(...checks2)=>inst.clone(mergeDefs(def,{checks:[...def.checks??[],...checks2.map(ch=>typeof ch=="function"?{_zod:{check:ch,def:{ -check:"custom"},onattach:[]}}:ch)]})),inst.clone=(def2,params)=>clone(inst,def2,params),inst.brand=()=>inst,inst.register=(reg,meta)=>(reg.add(inst,meta),inst),inst.parse=(data,params)=>parse$3(inst,data,params,{callee:inst.parse}),inst.safeParse=(data,params)=>safeParse(inst,data,params),inst.parseAsync=async(data,params)=>parseAsync(inst,data,params,{callee:inst.parseAsync}),inst.safeParseAsync=async(data,params)=>safeParseAsync(inst,data,params),inst.spa=inst.safeParseAsync,inst.encode=(data,params)=>encode( +check:"custom"},onattach:[]}}:ch)]})),inst.clone=(def2,params)=>clone(inst,def2,params),inst.brand=()=>inst,inst.register=((reg,meta)=>(reg.add(inst,meta),inst)),inst.parse=(data,params)=>parse$3(inst,data,params,{callee:inst.parse}),inst.safeParse=(data,params)=>safeParse(inst,data,params),inst.parseAsync=async(data,params)=>parseAsync(inst,data,params,{callee:inst.parseAsync}),inst.safeParseAsync=async(data,params)=>safeParseAsync(inst,data,params),inst.spa=inst.safeParseAsync,inst.encode=(data,params)=>encode( inst,data,params),inst.decode=(data,params)=>decode$1(inst,data,params),inst.encodeAsync=async(data,params)=>encodeAsync(inst,data,params),inst.decodeAsync=async(data,params)=>decodeAsync(inst,data,params),inst.safeEncode=(data,params)=>safeEncode(inst,data,params),inst.safeDecode=(data,params)=>safeDecode(inst,data,params),inst.safeEncodeAsync=async(data,params)=>safeEncodeAsync(inst,data,params),inst.safeDecodeAsync=async(data,params)=>safeDecodeAsync(inst,data,params),inst.refine=(check,params)=>inst. check(refine(check,params)),inst.superRefine=refinement=>inst.check(superRefine(refinement)),inst.overwrite=fn=>inst.check(_overwrite(fn)),inst.optional=()=>optional(inst),inst.nullable=()=>nullable(inst),inst.nullish=()=>optional(nullable(inst)),inst.nonoptional=params=>nonoptional(inst,params),inst.array=()=>array(inst),inst.or=arg=>union([inst,arg]),inst.and=arg=>intersection(inst,arg),inst.transform=tx=>pipe(inst,transform$1(tx)),inst.default=def2=>_default(inst,def2),inst.prefault=def2=>prefault( inst,def2),inst.catch=params=>_catch(inst,params),inst.pipe=target2=>pipe(inst,target2),inst.readonly=()=>readonly(inst),inst.describe=description2=>{const cl=inst.clone();return globalRegistry.add(cl,{description:description2}),cl},Object.defineProperty(inst,"description",{get(){return globalRegistry.get(inst)?.description},configurable:!0}),inst.meta=(...args)=>{if(args.length===0)return globalRegistry.get(inst);const cl=inst.clone();return globalRegistry.add(cl,args[0]),cl},inst.isOptional=()=>inst. safeParse(void 0).success,inst.isNullable=()=>inst.safeParse(null).success,inst)),_ZodString=$constructor("_ZodString",(inst,def)=>{$ZodString.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json2,params)=>stringProcessor(inst,ctx,json2);const bag=inst._zod.bag;inst.format=bag.format??null,inst.minLength=bag.minimum??null,inst.maxLength=bag.maximum??null,inst.regex=(...args)=>inst.check(_regex(...args)),inst.includes=(...args)=>inst.check(_includes(...args)),inst.startsWith= (...args)=>inst.check(_startsWith(...args)),inst.endsWith=(...args)=>inst.check(_endsWith(...args)),inst.min=(...args)=>inst.check(_minLength(...args)),inst.max=(...args)=>inst.check(_maxLength(...args)),inst.length=(...args)=>inst.check(_length(...args)),inst.nonempty=(...args)=>inst.check(_minLength(1,...args)),inst.lowercase=params=>inst.check(_lowercase(params)),inst.uppercase=params=>inst.check(_uppercase(params)),inst.trim=()=>inst.check(_trim()),inst.normalize=(...args)=>inst.check(_normalize( -...args)),inst.toLowerCase=()=>inst.check(_toLowerCase()),inst.toUpperCase=()=>inst.check(_toUpperCase()),inst.slugify=()=>inst.check(_slugify())}),ZodString=$constructor("ZodString",(inst,def)=>{$ZodString.init(inst,def),_ZodString.init(inst,def),inst.email=params=>inst.check(_email(ZodEmail,params)),inst.url=params=>inst.check(_url$1(ZodURL,params)),inst.jwt=params=>inst.check(_jwt(ZodJWT,params)),inst.emoji=params=>inst.check(_emoji(ZodEmoji,params)),inst.guid=params=>inst.check(_guid(ZodGUID, +...args)),inst.toLowerCase=()=>inst.check(_toLowerCase()),inst.toUpperCase=()=>inst.check(_toUpperCase()),inst.slugify=()=>inst.check(_slugify())}),ZodString=$constructor("ZodString",(inst,def)=>{$ZodString.init(inst,def),_ZodString.init(inst,def),inst.email=params=>inst.check(_email(ZodEmail,params)),inst.url=params=>inst.check(_url$2(ZodURL,params)),inst.jwt=params=>inst.check(_jwt(ZodJWT,params)),inst.emoji=params=>inst.check(_emoji(ZodEmoji,params)),inst.guid=params=>inst.check(_guid(ZodGUID, params)),inst.uuid=params=>inst.check(_uuid(ZodUUID,params)),inst.uuidv4=params=>inst.check(_uuidv4(ZodUUID,params)),inst.uuidv6=params=>inst.check(_uuidv6(ZodUUID,params)),inst.uuidv7=params=>inst.check(_uuidv7(ZodUUID,params)),inst.nanoid=params=>inst.check(_nanoid(ZodNanoID,params)),inst.guid=params=>inst.check(_guid(ZodGUID,params)),inst.cuid=params=>inst.check(_cuid(ZodCUID,params)),inst.cuid2=params=>inst.check(_cuid2(ZodCUID2,params)),inst.ulid=params=>inst.check(_ulid(ZodULID,params)),inst. base64=params=>inst.check(_base64(ZodBase64,params)),inst.base64url=params=>inst.check(_base64url(ZodBase64URL,params)),inst.xid=params=>inst.check(_xid(ZodXID,params)),inst.ksuid=params=>inst.check(_ksuid(ZodKSUID,params)),inst.ipv4=params=>inst.check(_ipv4(ZodIPv4,params)),inst.ipv6=params=>inst.check(_ipv6(ZodIPv6,params)),inst.cidrv4=params=>inst.check(_cidrv4(ZodCIDRv4,params)),inst.cidrv6=params=>inst.check(_cidrv6(ZodCIDRv6,params)),inst.e164=params=>inst.check(_e164(ZodE164,params)),inst. datetime=params=>inst.check(datetime(params)),inst.date=params=>inst.check(date(params)),inst.time=params=>inst.check(time(params)),inst.duration=params=>inst.check(duration(params))});function string$2(params){return _string(ZodString,params)}const ZodStringFormat=$constructor("ZodStringFormat",(inst,def)=>{$ZodStringFormat.init(inst,def),_ZodString.init(inst,def)}),ZodEmail=$constructor("ZodEmail",(inst,def)=>{$ZodEmail.init(inst,def),ZodStringFormat.init(inst,def)}),ZodGUID=$constructor("ZodG\ -UID",(inst,def)=>{$ZodGUID.init(inst,def),ZodStringFormat.init(inst,def)}),ZodUUID=$constructor("ZodUUID",(inst,def)=>{$ZodUUID.init(inst,def),ZodStringFormat.init(inst,def)}),ZodURL=$constructor("ZodURL",(inst,def)=>{$ZodURL.init(inst,def),ZodStringFormat.init(inst,def)});function url(params){return _url$1(ZodURL,params)}const ZodEmoji=$constructor("ZodEmoji",(inst,def)=>{$ZodEmoji.init(inst,def),ZodStringFormat.init(inst,def)}),ZodNanoID=$constructor("ZodNanoID",(inst,def)=>{$ZodNanoID.init(inst, +UID",(inst,def)=>{$ZodGUID.init(inst,def),ZodStringFormat.init(inst,def)}),ZodUUID=$constructor("ZodUUID",(inst,def)=>{$ZodUUID.init(inst,def),ZodStringFormat.init(inst,def)}),ZodURL=$constructor("ZodURL",(inst,def)=>{$ZodURL.init(inst,def),ZodStringFormat.init(inst,def)});function url(params){return _url$2(ZodURL,params)}const ZodEmoji=$constructor("ZodEmoji",(inst,def)=>{$ZodEmoji.init(inst,def),ZodStringFormat.init(inst,def)}),ZodNanoID=$constructor("ZodNanoID",(inst,def)=>{$ZodNanoID.init(inst, def),ZodStringFormat.init(inst,def)}),ZodCUID=$constructor("ZodCUID",(inst,def)=>{$ZodCUID.init(inst,def),ZodStringFormat.init(inst,def)}),ZodCUID2=$constructor("ZodCUID2",(inst,def)=>{$ZodCUID2.init(inst,def),ZodStringFormat.init(inst,def)}),ZodULID=$constructor("ZodULID",(inst,def)=>{$ZodULID.init(inst,def),ZodStringFormat.init(inst,def)}),ZodXID=$constructor("ZodXID",(inst,def)=>{$ZodXID.init(inst,def),ZodStringFormat.init(inst,def)}),ZodKSUID=$constructor("ZodKSUID",(inst,def)=>{$ZodKSUID.init( inst,def),ZodStringFormat.init(inst,def)}),ZodIPv4=$constructor("ZodIPv4",(inst,def)=>{$ZodIPv4.init(inst,def),ZodStringFormat.init(inst,def)}),ZodIPv6=$constructor("ZodIPv6",(inst,def)=>{$ZodIPv6.init(inst,def),ZodStringFormat.init(inst,def)}),ZodCIDRv4=$constructor("ZodCIDRv4",(inst,def)=>{$ZodCIDRv4.init(inst,def),ZodStringFormat.init(inst,def)}),ZodCIDRv6=$constructor("ZodCIDRv6",(inst,def)=>{$ZodCIDRv6.init(inst,def),ZodStringFormat.init(inst,def)}),ZodBase64=$constructor("ZodBase64",(inst,def)=>{ $ZodBase64.init(inst,def),ZodStringFormat.init(inst,def)}),ZodBase64URL=$constructor("ZodBase64URL",(inst,def)=>{$ZodBase64URL.init(inst,def),ZodStringFormat.init(inst,def)}),ZodE164=$constructor("ZodE164",(inst,def)=>{$ZodE164.init(inst,def),ZodStringFormat.init(inst,def)}),ZodJWT=$constructor("ZodJWT",(inst,def)=>{$ZodJWT.init(inst,def),ZodStringFormat.init(inst,def)}),ZodNumber=$constructor("ZodNumber",(inst,def)=>{$ZodNumber.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json2,params)=>numberProcessor( @@ -4086,41 +4168,41 @@ if(!request)throw new Error("No request provided");return await taskStore.create sessionId);if(task){const notification=TaskStatusNotificationSchema.parse({method:"notifications/tasks/status",params:task});await this.notification(notification),isTerminal(task.status)&&this._cleanupTaskProgressHandler(taskId)}},getTaskResult:taskId=>taskStore.getTaskResult(taskId,sessionId),updateTaskStatus:async(taskId,status,statusMessage)=>{const task=await taskStore.getTask(taskId,sessionId);if(!task)throw new McpError(ErrorCode.InvalidParams,`Task "${taskId}" not found - it may have been\ cleaned up`);if(isTerminal(task.status))throw new McpError(ErrorCode.InvalidParams,`Cannot update task "${taskId}" from terminal status "${task.status}" to "${status}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await taskStore.updateTaskStatus(taskId,status,statusMessage,sessionId);const updatedTask=await taskStore.getTask(taskId,sessionId);if(updatedTask){const notification=TaskStatusNotificationSchema.parse({method:"notifications/tasks/status",params:updatedTask}); await this.notification(notification),isTerminal(updatedTask.status)&&this._cleanupTaskProgressHandler(taskId)}},listTasks:cursor=>taskStore.listTasks(cursor,sessionId)}}}function isPlainObject$1(value){return value!==null&&typeof value=="object"&&!Array.isArray(value)}function mergeCapabilities(base2,additional){const result={...base2};for(const key2 in additional){const k=key2,addValue=additional[k];if(addValue===void 0)continue;const baseValue=result[k];isPlainObject$1(baseValue)&&isPlainObject$1( -addValue)?result[k]={...baseValue,...addValue}:result[k]=addValue}return result}var ajv$1={exports:{}},core$4={},validate$1={},boolSchema$1={},errors$1={},codegen$1={},code$6={},hasRequiredCode$3;function requireCode$3(){return hasRequiredCode$3||(hasRequiredCode$3=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.regexpCode=exports.getEsmExportName=exports.getProperty=exports.safeStringify=exports.stringify=exports.strConcat=exports.addCodeArg=exports.str=exports. -_=exports.nil=exports._Code=exports.Name=exports.IDENTIFIER=exports._CodeOrName=void 0;class _CodeOrName{}exports._CodeOrName=_CodeOrName,exports.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class Name extends _CodeOrName{constructor(s2){if(super(),!exports.IDENTIFIER.test(s2))throw new Error("CodeGen: name must be a valid identifier");this.str=s2}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}exports.Name=Name;class _Code extends _CodeOrName{constructor(code2){super(),this. -_items=typeof code2=="string"?[code2]:code2}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const item=this._items[0];return item===""||item==='""'}get str(){var _a2;return(_a2=this._str)!==null&&_a2!==void 0?_a2:this._str=this._items.reduce((s2,c2)=>`${s2}${c2}`,"")}get names(){var _a2;return(_a2=this._names)!==null&&_a2!==void 0?_a2:this._names=this._items.reduce((names2,c2)=>(c2 instanceof Name&&(names2[c2.str]=(names2[c2.str]||0)+1),names2),{})}}exports._Code=_Code,exports. -nil=new _Code("");function _(strs,...args){const code2=[strs[0]];let i=0;for(;i<args.length;)addCodeArg(code2,args[i]),code2.push(strs[++i]);return new _Code(code2)}exports._=_;const plus=new _Code("+");function str(strs,...args){const expr=[safeStringify(strs[0])];let i=0;for(;i<args.length;)expr.push(plus),addCodeArg(expr,args[i]),expr.push(plus,safeStringify(strs[++i]));return optimize(expr),new _Code(expr)}exports.str=str;function addCodeArg(code2,arg){arg instanceof _Code?code2.push(...arg. -_items):arg instanceof Name?code2.push(arg):code2.push(interpolate(arg))}exports.addCodeArg=addCodeArg;function optimize(expr){let i=1;for(;i<expr.length-1;){if(expr[i]===plus){const res=mergeExprItems(expr[i-1],expr[i+1]);if(res!==void 0){expr.splice(i-1,3,res);continue}expr[i++]="+"}i++}}function mergeExprItems(a,b){if(b==='""')return a;if(a==='""')return b;if(typeof a=="string")return b instanceof Name||a[a.length-1]!=='"'?void 0:typeof b!="string"?`${a.slice(0,-1)}${b}"`:b[0]==='"'?a.slice(0, --1)+b.slice(1):void 0;if(typeof b=="string"&&b[0]==='"'&&!(a instanceof Name))return`"${a}${b.slice(1)}`}function strConcat(c1,c2){return c2.emptyStr()?c1:c1.emptyStr()?c2:str`${c1}${c2}`}exports.strConcat=strConcat;function interpolate(x){return typeof x=="number"||typeof x=="boolean"||x===null?x:safeStringify(Array.isArray(x)?x.join(","):x)}function stringify2(x){return new _Code(safeStringify(x))}exports.stringify=stringify2;function safeStringify(x){return JSON.stringify(x).replace(/\u2028/g, -"\\u2028").replace(/\u2029/g,"\\u2029")}exports.safeStringify=safeStringify;function getProperty(key2){return typeof key2=="string"&&exports.IDENTIFIER.test(key2)?new _Code(`.${key2}`):_`[${key2}]`}exports.getProperty=getProperty;function getEsmExportName(key2){if(typeof key2=="string"&&exports.IDENTIFIER.test(key2))return new _Code(`${key2}`);throw new Error(`CodeGen: invalid export name: ${key2}, use explicit $id name mapping`)}exports.getEsmExportName=getEsmExportName;function regexpCode(rx){ -return new _Code(rx.toString())}exports.regexpCode=regexpCode}(code$6)),code$6}var scope$1={},hasRequiredScope$1;function requireScope$1(){return hasRequiredScope$1||(hasRequiredScope$1=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.ValueScope=exports.ValueScopeName=exports.Scope=exports.varKinds=exports.UsedValueState=void 0;const code_1=requireCode$3();class ValueError extends Error{constructor(name){super(`CodeGen: "code" for ${name} not defined`),this.value= -name.value}}var UsedValueState;(function(UsedValueState2){UsedValueState2[UsedValueState2.Started=0]="Started",UsedValueState2[UsedValueState2.Completed=1]="Completed"})(UsedValueState||(exports.UsedValueState=UsedValueState={})),exports.varKinds={const:new code_1.Name("const"),let:new code_1.Name("let"),var:new code_1.Name("var")};class Scope{constructor({prefixes,parent}={}){this._names={},this._prefixes=prefixes,this._parent=parent}toName(nameOrPrefix){return nameOrPrefix instanceof code_1.Name? -nameOrPrefix:this.name(nameOrPrefix)}name(prefix){return new code_1.Name(this._newName(prefix))}_newName(prefix){const ng=this._names[prefix]||this._nameGroup(prefix);return`${prefix}${ng.index++}`}_nameGroup(prefix){var _a2,_b;if(!((_b=(_a2=this._parent)===null||_a2===void 0?void 0:_a2._prefixes)===null||_b===void 0)&&_b.has(prefix)||this._prefixes&&!this._prefixes.has(prefix))throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`);return this._names[prefix]={prefix,index:0}}} -exports.Scope=Scope;class ValueScopeName extends code_1.Name{constructor(prefix,nameStr){super(nameStr),this.prefix=prefix}setValue(value,{property,itemIndex}){this.value=value,this.scopePath=(0,code_1._)`.${new code_1.Name(property)}[${itemIndex}]`}}exports.ValueScopeName=ValueScopeName;const line=(0,code_1._)`\n`;class ValueScope extends Scope{constructor(opts){super(opts),this._values={},this._scope=opts.scope,this.opts={...opts,_n:opts.lines?line:code_1.nil}}get(){return this._scope}name(prefix){ -return new ValueScopeName(prefix,this._newName(prefix))}value(nameOrPrefix,value){var _a2;if(value.ref===void 0)throw new Error("CodeGen: ref must be passed in value");const name=this.toName(nameOrPrefix),{prefix}=name,valueKey=(_a2=value.key)!==null&&_a2!==void 0?_a2:value.ref;let vs=this._values[prefix];if(vs){const _name=vs.get(valueKey);if(_name)return _name}else vs=this._values[prefix]=new Map;vs.set(valueKey,name);const s2=this._scope[prefix]||(this._scope[prefix]=[]),itemIndex=s2.length;return s2[itemIndex]= -value.ref,name.setValue(value,{property:prefix,itemIndex}),name}getValue(prefix,keyOrRef){const vs=this._values[prefix];if(vs)return vs.get(keyOrRef)}scopeRefs(scopeName,values=this._values){return this._reduceValues(values,name=>{if(name.scopePath===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return(0,code_1._)`${scopeName}${name.scopePath}`})}scopeCode(values=this._values,usedValues,getCode){return this._reduceValues(values,name=>{if(name.value===void 0)throw new Error(`Code\ -Gen: name "${name}" has no value`);return name.value.code},usedValues,getCode)}_reduceValues(values,valueCode,usedValues={},getCode){let code2=code_1.nil;for(const prefix in values){const vs=values[prefix];if(!vs)continue;const nameSet=usedValues[prefix]=usedValues[prefix]||new Map;vs.forEach(name=>{if(nameSet.has(name))return;nameSet.set(name,UsedValueState.Started);let c2=valueCode(name);if(c2){const def=this.opts.es5?exports.varKinds.var:exports.varKinds.const;code2=(0,code_1._)`${code2}${def} ${name} = ${c2};${this. -opts._n}`}else if(c2=getCode?.(name))code2=(0,code_1._)`${code2}${c2}${this.opts._n}`;else throw new ValueError(name);nameSet.set(name,UsedValueState.Completed)})}return code2}}exports.ValueScope=ValueScope}(scope$1)),scope$1}var hasRequiredCodegen$1;function requireCodegen$1(){return hasRequiredCodegen$1||(hasRequiredCodegen$1=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.or=exports.and=exports.not=exports.CodeGen=exports.operators=exports.varKinds=exports.ValueScopeName= -exports.ValueScope=exports.Scope=exports.Name=exports.regexpCode=exports.stringify=exports.getProperty=exports.nil=exports.strConcat=exports.str=exports._=void 0;const code_1=requireCode$3(),scope_1=requireScope$1();var code_2=requireCode$3();Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return code_2._}}),Object.defineProperty(exports,"str",{enumerable:!0,get:function(){return code_2.str}}),Object.defineProperty(exports,"strConcat",{enumerable:!0,get:function(){return code_2.strConcat}}), -Object.defineProperty(exports,"nil",{enumerable:!0,get:function(){return code_2.nil}}),Object.defineProperty(exports,"getProperty",{enumerable:!0,get:function(){return code_2.getProperty}}),Object.defineProperty(exports,"stringify",{enumerable:!0,get:function(){return code_2.stringify}}),Object.defineProperty(exports,"regexpCode",{enumerable:!0,get:function(){return code_2.regexpCode}}),Object.defineProperty(exports,"Name",{enumerable:!0,get:function(){return code_2.Name}});var scope_2=requireScope$1(); -Object.defineProperty(exports,"Scope",{enumerable:!0,get:function(){return scope_2.Scope}}),Object.defineProperty(exports,"ValueScope",{enumerable:!0,get:function(){return scope_2.ValueScope}}),Object.defineProperty(exports,"ValueScopeName",{enumerable:!0,get:function(){return scope_2.ValueScopeName}}),Object.defineProperty(exports,"varKinds",{enumerable:!0,get:function(){return scope_2.varKinds}}),exports.operators={GT:new code_1._Code(">"),GTE:new code_1._Code(">="),LT:new code_1._Code("<"),LTE:new code_1. -_Code("<="),EQ:new code_1._Code("==="),NEQ:new code_1._Code("!=="),NOT:new code_1._Code("!"),OR:new code_1._Code("||"),AND:new code_1._Code("&&"),ADD:new code_1._Code("+")};class Node2{optimizeNodes(){return this}optimizeNames(_names,_constants){return this}}class Def extends Node2{constructor(varKind,name,rhs){super(),this.varKind=varKind,this.name=name,this.rhs=rhs}render({es5,_n}){const varKind=es5?scope_1.varKinds.var:this.varKind,rhs=this.rhs===void 0?"":` = ${this.rhs}`;return`${varKind} ${this. -name}${rhs};`+_n}optimizeNames(names2,constants2){if(names2[this.name.str])return this.rhs&&(this.rhs=optimizeExpr(this.rhs,names2,constants2)),this}get names(){return this.rhs instanceof code_1._CodeOrName?this.rhs.names:{}}}class Assign extends Node2{constructor(lhs,rhs,sideEffects){super(),this.lhs=lhs,this.rhs=rhs,this.sideEffects=sideEffects}render({_n}){return`${this.lhs} = ${this.rhs};`+_n}optimizeNames(names2,constants2){if(!(this.lhs instanceof code_1.Name&&!names2[this.lhs.str]&&!this. -sideEffects))return this.rhs=optimizeExpr(this.rhs,names2,constants2),this}get names(){const names2=this.lhs instanceof code_1.Name?{}:{...this.lhs.names};return addExprNames(names2,this.rhs)}}class AssignOp extends Assign{constructor(lhs,op2,rhs,sideEffects){super(lhs,rhs,sideEffects),this.op=op2}render({_n}){return`${this.lhs} ${this.op}= ${this.rhs};`+_n}}class Label2 extends Node2{constructor(label){super(),this.label=label,this.names={}}render({_n}){return`${this.label}:`+_n}}class Break extends Node2{constructor(label){ -super(),this.label=label,this.names={}}render({_n}){return`break${this.label?` ${this.label}`:""};`+_n}}class Throw extends Node2{constructor(error2){super(),this.error=error2}render({_n}){return`throw ${this.error};`+_n}get names(){return this.error.names}}class AnyCode extends Node2{constructor(code2){super(),this.code=code2}render({_n}){return`${this.code};`+_n}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(names2,constants2){return this.code=optimizeExpr(this.code,names2,constants2), -this}get names(){return this.code instanceof code_1._CodeOrName?this.code.names:{}}}class ParentNode extends Node2{constructor(nodes2=[]){super(),this.nodes=nodes2}render(opts){return this.nodes.reduce((code2,n)=>code2+n.render(opts),"")}optimizeNodes(){const{nodes:nodes2}=this;let i=nodes2.length;for(;i--;){const n=nodes2[i].optimizeNodes();Array.isArray(n)?nodes2.splice(i,1,...n):n?nodes2[i]=n:nodes2.splice(i,1)}return nodes2.length>0?this:void 0}optimizeNames(names2,constants2){const{nodes:nodes2}=this; -let i=nodes2.length;for(;i--;){const n=nodes2[i];n.optimizeNames(names2,constants2)||(subtractNames(names2,n.names),nodes2.splice(i,1))}return nodes2.length>0?this:void 0}get names(){return this.nodes.reduce((names2,n)=>addNames(names2,n.names),{})}}class BlockNode extends ParentNode{render(opts){return"{"+opts._n+super.render(opts)+"}"+opts._n}}class Root2 extends ParentNode{}class Else extends BlockNode{}Else.kind="else";class If extends BlockNode{constructor(condition,nodes2){super(nodes2),this. -condition=condition}render(opts){let code2=`if(${this.condition})`+super.render(opts);return this.else&&(code2+="else "+this.else.render(opts)),code2}optimizeNodes(){super.optimizeNodes();const cond=this.condition;if(cond===!0)return this.nodes;let e=this.else;if(e){const ns=e.optimizeNodes();e=this.else=Array.isArray(ns)?new Else(ns):ns}if(e)return cond===!1?e instanceof If?e:e.nodes:this.nodes.length?this:new If(not2(cond),e instanceof If?[e]:e.nodes);if(!(cond===!1||!this.nodes.length))return this}optimizeNames(names2,constants2){ -var _a2;if(this.else=(_a2=this.else)===null||_a2===void 0?void 0:_a2.optimizeNames(names2,constants2),!!(super.optimizeNames(names2,constants2)||this.else))return this.condition=optimizeExpr(this.condition,names2,constants2),this}get names(){const names2=super.names;return addExprNames(names2,this.condition),this.else&&addNames(names2,this.else.names),names2}}If.kind="if";class For extends BlockNode{}For.kind="for";class ForLoop extends For{constructor(iteration){super(),this.iteration=iteration}render(opts){ -return`for(${this.iteration})`+super.render(opts)}optimizeNames(names2,constants2){if(super.optimizeNames(names2,constants2))return this.iteration=optimizeExpr(this.iteration,names2,constants2),this}get names(){return addNames(super.names,this.iteration.names)}}class ForRange extends For{constructor(varKind,name,from,to){super(),this.varKind=varKind,this.name=name,this.from=from,this.to=to}render(opts){const varKind=opts.es5?scope_1.varKinds.var:this.varKind,{name,from,to}=this;return`for(${varKind}\ - ${name}=${from}; ${name}<${to}; ${name}++)`+super.render(opts)}get names(){const names2=addExprNames(super.names,this.from);return addExprNames(names2,this.to)}}class ForIter extends For{constructor(loop2,varKind,name,iterable){super(),this.loop=loop2,this.varKind=varKind,this.name=name,this.iterable=iterable}render(opts){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(opts)}optimizeNames(names2,constants2){if(super.optimizeNames(names2,constants2))return this. -iterable=optimizeExpr(this.iterable,names2,constants2),this}get names(){return addNames(super.names,this.iterable.names)}}class Func extends BlockNode{constructor(name,args,async){super(),this.name=name,this.args=args,this.async=async}render(opts){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(opts)}}Func.kind="func";class Return extends ParentNode{render(opts){return"return "+super.render(opts)}}Return.kind="return";class Try extends BlockNode{render(opts){let code2="\ -try"+super.render(opts);return this.catch&&(code2+=this.catch.render(opts)),this.finally&&(code2+=this.finally.render(opts)),code2}optimizeNodes(){var _a2,_b;return super.optimizeNodes(),(_a2=this.catch)===null||_a2===void 0||_a2.optimizeNodes(),(_b=this.finally)===null||_b===void 0||_b.optimizeNodes(),this}optimizeNames(names2,constants2){var _a2,_b;return super.optimizeNames(names2,constants2),(_a2=this.catch)===null||_a2===void 0||_a2.optimizeNames(names2,constants2),(_b=this.finally)===null|| -_b===void 0||_b.optimizeNames(names2,constants2),this}get names(){const names2=super.names;return this.catch&&addNames(names2,this.catch.names),this.finally&&addNames(names2,this.finally.names),names2}}class Catch extends BlockNode{constructor(error2){super(),this.error=error2}render(opts){return`catch(${this.error})`+super.render(opts)}}Catch.kind="catch";class Finally extends BlockNode{render(opts){return"finally"+super.render(opts)}}Finally.kind="finally";class CodeGen{constructor(extScope,opts={}){ -this._values={},this._blockStarts=[],this._constants={},this.opts={...opts,_n:opts.lines?` +addValue)?result[k]={...baseValue,...addValue}:result[k]=addValue}return result}var ajv$1={exports:{}},core$4={},validate$1={},boolSchema$1={},errors$1={},codegen$1={},code$6={},hasRequiredCode$3;function requireCode$3(){return hasRequiredCode$3||(hasRequiredCode$3=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.regexpCode=exports$1.getEsmExportName=exports$1.getProperty=exports$1.safeStringify=exports$1.stringify=exports$1.strConcat=exports$1.addCodeArg= +exports$1.str=exports$1._=exports$1.nil=exports$1._Code=exports$1.Name=exports$1.IDENTIFIER=exports$1._CodeOrName=void 0;class _CodeOrName{}exports$1._CodeOrName=_CodeOrName,exports$1.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class Name extends _CodeOrName{constructor(s2){if(super(),!exports$1.IDENTIFIER.test(s2))throw new Error("CodeGen: name must be a valid identifier");this.str=s2}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}exports$1.Name=Name;class _Code extends _CodeOrName{constructor(code2){ +super(),this._items=typeof code2=="string"?[code2]:code2}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const item=this._items[0];return item===""||item==='""'}get str(){var _a2;return(_a2=this._str)!==null&&_a2!==void 0?_a2:this._str=this._items.reduce((s2,c2)=>`${s2}${c2}`,"")}get names(){var _a2;return(_a2=this._names)!==null&&_a2!==void 0?_a2:this._names=this._items.reduce((names2,c2)=>(c2 instanceof Name&&(names2[c2.str]=(names2[c2.str]||0)+1),names2),{})}}exports$1. +_Code=_Code,exports$1.nil=new _Code("");function _(strs,...args){const code2=[strs[0]];let i=0;for(;i<args.length;)addCodeArg(code2,args[i]),code2.push(strs[++i]);return new _Code(code2)}exports$1._=_;const plus=new _Code("+");function str(strs,...args){const expr=[safeStringify(strs[0])];let i=0;for(;i<args.length;)expr.push(plus),addCodeArg(expr,args[i]),expr.push(plus,safeStringify(strs[++i]));return optimize(expr),new _Code(expr)}exports$1.str=str;function addCodeArg(code2,arg){arg instanceof +_Code?code2.push(...arg._items):arg instanceof Name?code2.push(arg):code2.push(interpolate(arg))}exports$1.addCodeArg=addCodeArg;function optimize(expr){let i=1;for(;i<expr.length-1;){if(expr[i]===plus){const res=mergeExprItems(expr[i-1],expr[i+1]);if(res!==void 0){expr.splice(i-1,3,res);continue}expr[i++]="+"}i++}}function mergeExprItems(a,b){if(b==='""')return a;if(a==='""')return b;if(typeof a=="string")return b instanceof Name||a[a.length-1]!=='"'?void 0:typeof b!="string"?`${a.slice(0,-1)}${b}\ +"`:b[0]==='"'?a.slice(0,-1)+b.slice(1):void 0;if(typeof b=="string"&&b[0]==='"'&&!(a instanceof Name))return`"${a}${b.slice(1)}`}function strConcat(c1,c2){return c2.emptyStr()?c1:c1.emptyStr()?c2:str`${c1}${c2}`}exports$1.strConcat=strConcat;function interpolate(x){return typeof x=="number"||typeof x=="boolean"||x===null?x:safeStringify(Array.isArray(x)?x.join(","):x)}function stringify2(x){return new _Code(safeStringify(x))}exports$1.stringify=stringify2;function safeStringify(x){return JSON.stringify( +x).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}exports$1.safeStringify=safeStringify;function getProperty(key2){return typeof key2=="string"&&exports$1.IDENTIFIER.test(key2)?new _Code(`.${key2}`):_`[${key2}]`}exports$1.getProperty=getProperty;function getEsmExportName(key2){if(typeof key2=="string"&&exports$1.IDENTIFIER.test(key2))return new _Code(`${key2}`);throw new Error(`CodeGen: invalid export name: ${key2}, use explicit $id name mapping`)}exports$1.getEsmExportName=getEsmExportName; +function regexpCode(rx){return new _Code(rx.toString())}exports$1.regexpCode=regexpCode})(code$6)),code$6}var scope$1={},hasRequiredScope$1;function requireScope$1(){return hasRequiredScope$1||(hasRequiredScope$1=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.ValueScope=exports$1.ValueScopeName=exports$1.Scope=exports$1.varKinds=exports$1.UsedValueState=void 0;const code_1=requireCode$3();class ValueError extends Error{constructor(name){super(`CodeGen: \ +"code" for ${name} not defined`),this.value=name.value}}var UsedValueState;(function(UsedValueState2){UsedValueState2[UsedValueState2.Started=0]="Started",UsedValueState2[UsedValueState2.Completed=1]="Completed"})(UsedValueState||(exports$1.UsedValueState=UsedValueState={})),exports$1.varKinds={const:new code_1.Name("const"),let:new code_1.Name("let"),var:new code_1.Name("var")};class Scope{constructor({prefixes,parent}={}){this._names={},this._prefixes=prefixes,this._parent=parent}toName(nameOrPrefix){ +return nameOrPrefix instanceof code_1.Name?nameOrPrefix:this.name(nameOrPrefix)}name(prefix){return new code_1.Name(this._newName(prefix))}_newName(prefix){const ng=this._names[prefix]||this._nameGroup(prefix);return`${prefix}${ng.index++}`}_nameGroup(prefix){var _a2,_b;if(!((_b=(_a2=this._parent)===null||_a2===void 0?void 0:_a2._prefixes)===null||_b===void 0)&&_b.has(prefix)||this._prefixes&&!this._prefixes.has(prefix))throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`); +return this._names[prefix]={prefix,index:0}}}exports$1.Scope=Scope;class ValueScopeName extends code_1.Name{constructor(prefix,nameStr){super(nameStr),this.prefix=prefix}setValue(value,{property,itemIndex}){this.value=value,this.scopePath=(0,code_1._)`.${new code_1.Name(property)}[${itemIndex}]`}}exports$1.ValueScopeName=ValueScopeName;const line=(0,code_1._)`\n`;class ValueScope extends Scope{constructor(opts){super(opts),this._values={},this._scope=opts.scope,this.opts={...opts,_n:opts.lines?line: +code_1.nil}}get(){return this._scope}name(prefix){return new ValueScopeName(prefix,this._newName(prefix))}value(nameOrPrefix,value){var _a2;if(value.ref===void 0)throw new Error("CodeGen: ref must be passed in value");const name=this.toName(nameOrPrefix),{prefix}=name,valueKey=(_a2=value.key)!==null&&_a2!==void 0?_a2:value.ref;let vs=this._values[prefix];if(vs){const _name=vs.get(valueKey);if(_name)return _name}else vs=this._values[prefix]=new Map;vs.set(valueKey,name);const s2=this._scope[prefix]|| +(this._scope[prefix]=[]),itemIndex=s2.length;return s2[itemIndex]=value.ref,name.setValue(value,{property:prefix,itemIndex}),name}getValue(prefix,keyOrRef){const vs=this._values[prefix];if(vs)return vs.get(keyOrRef)}scopeRefs(scopeName,values=this._values){return this._reduceValues(values,name=>{if(name.scopePath===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return(0,code_1._)`${scopeName}${name.scopePath}`})}scopeCode(values=this._values,usedValues,getCode){return this._reduceValues( +values,name=>{if(name.value===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return name.value.code},usedValues,getCode)}_reduceValues(values,valueCode,usedValues={},getCode){let code2=code_1.nil;for(const prefix in values){const vs=values[prefix];if(!vs)continue;const nameSet=usedValues[prefix]=usedValues[prefix]||new Map;vs.forEach(name=>{if(nameSet.has(name))return;nameSet.set(name,UsedValueState.Started);let c2=valueCode(name);if(c2){const def=this.opts.es5?exports$1.varKinds. +var:exports$1.varKinds.const;code2=(0,code_1._)`${code2}${def} ${name} = ${c2};${this.opts._n}`}else if(c2=getCode?.(name))code2=(0,code_1._)`${code2}${c2}${this.opts._n}`;else throw new ValueError(name);nameSet.set(name,UsedValueState.Completed)})}return code2}}exports$1.ValueScope=ValueScope})(scope$1)),scope$1}var hasRequiredCodegen$1;function requireCodegen$1(){return hasRequiredCodegen$1||(hasRequiredCodegen$1=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1. +or=exports$1.and=exports$1.not=exports$1.CodeGen=exports$1.operators=exports$1.varKinds=exports$1.ValueScopeName=exports$1.ValueScope=exports$1.Scope=exports$1.Name=exports$1.regexpCode=exports$1.stringify=exports$1.getProperty=exports$1.nil=exports$1.strConcat=exports$1.str=exports$1._=void 0;const code_1=requireCode$3(),scope_1=requireScope$1();var code_2=requireCode$3();Object.defineProperty(exports$1,"_",{enumerable:!0,get:function(){return code_2._}}),Object.defineProperty(exports$1,"str",{ +enumerable:!0,get:function(){return code_2.str}}),Object.defineProperty(exports$1,"strConcat",{enumerable:!0,get:function(){return code_2.strConcat}}),Object.defineProperty(exports$1,"nil",{enumerable:!0,get:function(){return code_2.nil}}),Object.defineProperty(exports$1,"getProperty",{enumerable:!0,get:function(){return code_2.getProperty}}),Object.defineProperty(exports$1,"stringify",{enumerable:!0,get:function(){return code_2.stringify}}),Object.defineProperty(exports$1,"regexpCode",{enumerable:!0, +get:function(){return code_2.regexpCode}}),Object.defineProperty(exports$1,"Name",{enumerable:!0,get:function(){return code_2.Name}});var scope_2=requireScope$1();Object.defineProperty(exports$1,"Scope",{enumerable:!0,get:function(){return scope_2.Scope}}),Object.defineProperty(exports$1,"ValueScope",{enumerable:!0,get:function(){return scope_2.ValueScope}}),Object.defineProperty(exports$1,"ValueScopeName",{enumerable:!0,get:function(){return scope_2.ValueScopeName}}),Object.defineProperty(exports$1, +"varKinds",{enumerable:!0,get:function(){return scope_2.varKinds}}),exports$1.operators={GT:new code_1._Code(">"),GTE:new code_1._Code(">="),LT:new code_1._Code("<"),LTE:new code_1._Code("<="),EQ:new code_1._Code("==="),NEQ:new code_1._Code("!=="),NOT:new code_1._Code("!"),OR:new code_1._Code("||"),AND:new code_1._Code("&&"),ADD:new code_1._Code("+")};class Node2{optimizeNodes(){return this}optimizeNames(_names,_constants){return this}}class Def extends Node2{constructor(varKind,name,rhs){super(), +this.varKind=varKind,this.name=name,this.rhs=rhs}render({es5,_n}){const varKind=es5?scope_1.varKinds.var:this.varKind,rhs=this.rhs===void 0?"":` = ${this.rhs}`;return`${varKind} ${this.name}${rhs};`+_n}optimizeNames(names2,constants2){if(names2[this.name.str])return this.rhs&&(this.rhs=optimizeExpr(this.rhs,names2,constants2)),this}get names(){return this.rhs instanceof code_1._CodeOrName?this.rhs.names:{}}}class Assign extends Node2{constructor(lhs,rhs,sideEffects){super(),this.lhs=lhs,this.rhs= +rhs,this.sideEffects=sideEffects}render({_n}){return`${this.lhs} = ${this.rhs};`+_n}optimizeNames(names2,constants2){if(!(this.lhs instanceof code_1.Name&&!names2[this.lhs.str]&&!this.sideEffects))return this.rhs=optimizeExpr(this.rhs,names2,constants2),this}get names(){const names2=this.lhs instanceof code_1.Name?{}:{...this.lhs.names};return addExprNames(names2,this.rhs)}}class AssignOp extends Assign{constructor(lhs,op2,rhs,sideEffects){super(lhs,rhs,sideEffects),this.op=op2}render({_n}){return`${this. +lhs} ${this.op}= ${this.rhs};`+_n}}class Label2 extends Node2{constructor(label){super(),this.label=label,this.names={}}render({_n}){return`${this.label}:`+_n}}class Break extends Node2{constructor(label){super(),this.label=label,this.names={}}render({_n}){return`break${this.label?` ${this.label}`:""};`+_n}}class Throw extends Node2{constructor(error2){super(),this.error=error2}render({_n}){return`throw ${this.error};`+_n}get names(){return this.error.names}}class AnyCode extends Node2{constructor(code2){ +super(),this.code=code2}render({_n}){return`${this.code};`+_n}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(names2,constants2){return this.code=optimizeExpr(this.code,names2,constants2),this}get names(){return this.code instanceof code_1._CodeOrName?this.code.names:{}}}class ParentNode extends Node2{constructor(nodes2=[]){super(),this.nodes=nodes2}render(opts){return this.nodes.reduce((code2,n)=>code2+n.render(opts),"")}optimizeNodes(){const{nodes:nodes2}=this;let i=nodes2.length; +for(;i--;){const n=nodes2[i].optimizeNodes();Array.isArray(n)?nodes2.splice(i,1,...n):n?nodes2[i]=n:nodes2.splice(i,1)}return nodes2.length>0?this:void 0}optimizeNames(names2,constants2){const{nodes:nodes2}=this;let i=nodes2.length;for(;i--;){const n=nodes2[i];n.optimizeNames(names2,constants2)||(subtractNames(names2,n.names),nodes2.splice(i,1))}return nodes2.length>0?this:void 0}get names(){return this.nodes.reduce((names2,n)=>addNames(names2,n.names),{})}}class BlockNode extends ParentNode{render(opts){ +return"{"+opts._n+super.render(opts)+"}"+opts._n}}class Root2 extends ParentNode{}class Else extends BlockNode{}Else.kind="else";class If extends BlockNode{constructor(condition,nodes2){super(nodes2),this.condition=condition}render(opts){let code2=`if(${this.condition})`+super.render(opts);return this.else&&(code2+="else "+this.else.render(opts)),code2}optimizeNodes(){super.optimizeNodes();const cond=this.condition;if(cond===!0)return this.nodes;let e=this.else;if(e){const ns=e.optimizeNodes();e= +this.else=Array.isArray(ns)?new Else(ns):ns}if(e)return cond===!1?e instanceof If?e:e.nodes:this.nodes.length?this:new If(not2(cond),e instanceof If?[e]:e.nodes);if(!(cond===!1||!this.nodes.length))return this}optimizeNames(names2,constants2){var _a2;if(this.else=(_a2=this.else)===null||_a2===void 0?void 0:_a2.optimizeNames(names2,constants2),!!(super.optimizeNames(names2,constants2)||this.else))return this.condition=optimizeExpr(this.condition,names2,constants2),this}get names(){const names2=super. +names;return addExprNames(names2,this.condition),this.else&&addNames(names2,this.else.names),names2}}If.kind="if";class For extends BlockNode{}For.kind="for";class ForLoop extends For{constructor(iteration){super(),this.iteration=iteration}render(opts){return`for(${this.iteration})`+super.render(opts)}optimizeNames(names2,constants2){if(super.optimizeNames(names2,constants2))return this.iteration=optimizeExpr(this.iteration,names2,constants2),this}get names(){return addNames(super.names,this.iteration. +names)}}class ForRange extends For{constructor(varKind,name,from,to){super(),this.varKind=varKind,this.name=name,this.from=from,this.to=to}render(opts){const varKind=opts.es5?scope_1.varKinds.var:this.varKind,{name,from,to}=this;return`for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)`+super.render(opts)}get names(){const names2=addExprNames(super.names,this.from);return addExprNames(names2,this.to)}}class ForIter extends For{constructor(loop2,varKind,name,iterable){super(),this.loop=loop2, +this.varKind=varKind,this.name=name,this.iterable=iterable}render(opts){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(opts)}optimizeNames(names2,constants2){if(super.optimizeNames(names2,constants2))return this.iterable=optimizeExpr(this.iterable,names2,constants2),this}get names(){return addNames(super.names,this.iterable.names)}}class Func extends BlockNode{constructor(name,args,async){super(),this.name=name,this.args=args,this.async=async}render(opts){return`${this. +async?"async ":""}function ${this.name}(${this.args})`+super.render(opts)}}Func.kind="func";class Return extends ParentNode{render(opts){return"return "+super.render(opts)}}Return.kind="return";class Try extends BlockNode{render(opts){let code2="try"+super.render(opts);return this.catch&&(code2+=this.catch.render(opts)),this.finally&&(code2+=this.finally.render(opts)),code2}optimizeNodes(){var _a2,_b;return super.optimizeNodes(),(_a2=this.catch)===null||_a2===void 0||_a2.optimizeNodes(),(_b=this. +finally)===null||_b===void 0||_b.optimizeNodes(),this}optimizeNames(names2,constants2){var _a2,_b;return super.optimizeNames(names2,constants2),(_a2=this.catch)===null||_a2===void 0||_a2.optimizeNames(names2,constants2),(_b=this.finally)===null||_b===void 0||_b.optimizeNames(names2,constants2),this}get names(){const names2=super.names;return this.catch&&addNames(names2,this.catch.names),this.finally&&addNames(names2,this.finally.names),names2}}class Catch extends BlockNode{constructor(error2){super(), +this.error=error2}render(opts){return`catch(${this.error})`+super.render(opts)}}Catch.kind="catch";class Finally extends BlockNode{render(opts){return"finally"+super.render(opts)}}Finally.kind="finally";class CodeGen{constructor(extScope,opts={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...opts,_n:opts.lines?` `:""},this._extScope=extScope,this._scope=new scope_1.Scope({parent:extScope}),this._nodes=[new Root2]}toString(){return this._root.render(this.opts)}name(prefix){return this._scope.name(prefix)}scopeName(prefix){return this._extScope.name(prefix)}scopeValue(prefixOrName,value){const name=this._extScope.value(prefixOrName,value);return(this._values[name.prefix]||(this._values[name.prefix]=new Set)).add(name),name}getScopeValue(prefix,keyOrRef){return this._extScope.getValue(prefix,keyOrRef)}scopeRefs(scopeName){ return this._extScope.scopeRefs(scopeName,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(varKind,nameOrPrefix,rhs,constant){const name=this._scope.toName(nameOrPrefix);return rhs!==void 0&&constant&&(this._constants[name.str]=rhs),this._leafNode(new Def(varKind,name,rhs)),name}const(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.const,nameOrPrefix,rhs,_constant)}let(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.let,nameOrPrefix,rhs,_constant)}var(nameOrPrefix,rhs,_constant){ -return this._def(scope_1.varKinds.var,nameOrPrefix,rhs,_constant)}assign(lhs,rhs,sideEffects){return this._leafNode(new Assign(lhs,rhs,sideEffects))}add(lhs,rhs){return this._leafNode(new AssignOp(lhs,exports.operators.ADD,rhs))}code(c2){return typeof c2=="function"?c2():c2!==code_1.nil&&this._leafNode(new AnyCode(c2)),this}object(...keyValues){const code2=["{"];for(const[key2,value]of keyValues)code2.length>1&&code2.push(","),code2.push(key2),(key2!==value||this.opts.es5)&&(code2.push(":"),(0,code_1. +return this._def(scope_1.varKinds.var,nameOrPrefix,rhs,_constant)}assign(lhs,rhs,sideEffects){return this._leafNode(new Assign(lhs,rhs,sideEffects))}add(lhs,rhs){return this._leafNode(new AssignOp(lhs,exports$1.operators.ADD,rhs))}code(c2){return typeof c2=="function"?c2():c2!==code_1.nil&&this._leafNode(new AnyCode(c2)),this}object(...keyValues){const code2=["{"];for(const[key2,value]of keyValues)code2.length>1&&code2.push(","),code2.push(key2),(key2!==value||this.opts.es5)&&(code2.push(":"),(0,code_1. addCodeArg)(code2,value));return code2.push("}"),new code_1._Code(code2)}if(condition,thenBody,elseBody){if(this._blockNode(new If(condition)),thenBody&&elseBody)this.code(thenBody).else().code(elseBody).endIf();else if(thenBody)this.code(thenBody).endIf();else if(elseBody)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(condition){return this._elseNode(new If(condition))}else(){return this._elseNode(new Else)}endIf(){return this._endBlockNode(If,Else)}_for(node2,forBody){ return this._blockNode(node2),forBody&&this.code(forBody).endFor(),this}for(iteration,forBody){return this._for(new ForLoop(iteration),forBody)}forRange(nameOrPrefix,from,to,forBody,varKind=this.opts.es5?scope_1.varKinds.var:scope_1.varKinds.let){const name=this._scope.toName(nameOrPrefix);return this._for(new ForRange(varKind,name,from,to),()=>forBody(name))}forOf(nameOrPrefix,iterable,forBody,varKind=scope_1.varKinds.const){const name=this._scope.toName(nameOrPrefix);if(this.opts.es5){const arr=iterable instanceof code_1.Name?iterable:this.var("_arr",iterable);return this.forRange("_i",0,(0,code_1._)`${arr}.length`,i=>{this.var(name,(0,code_1._)`${arr}[${i}]`),forBody(name)})}return this._for(new ForIter("of",varKind,name,iterable),()=>forBody(name))}forIn(nameOrPrefix,obj,forBody,varKind=this.opts.es5?scope_1.varKinds.var:scope_1.varKinds.const){if(this.opts.ownProperties)return this.forOf(nameOrPrefix,(0,code_1._)`Object.keys(${obj})`,forBody);const name=this._scope.toName(nameOrPrefix);return this._for( @@ -4128,43 +4210,44 @@ new ForIter("in",varKind,name,obj),()=>forBody(name))}endFor(){return this._endB catch" and "finally"');const node2=new Try;if(this._blockNode(node2),this.code(tryBody),catchCode){const error2=this.name("e");this._currNode=node2.catch=new Catch(error2),catchCode(error2)}return finallyCode&&(this._currNode=node2.finally=new Finally,this.code(finallyCode)),this._endBlockNode(Catch,Finally)}throw(error2){return this._leafNode(new Throw(error2))}block(body2,nodeCount){return this._blockStarts.push(this._nodes.length),body2&&this.code(body2).endBlock(nodeCount),this}endBlock(nodeCount){ const len=this._blockStarts.pop();if(len===void 0)throw new Error("CodeGen: not in self-balancing block");const toClose=this._nodes.length-len;if(toClose<0||nodeCount!==void 0&&toClose!==nodeCount)throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);return this._nodes.length=len,this}func(name,args=code_1.nil,async,funcBody){return this._blockNode(new Func(name,args,async)),funcBody&&this.code(funcBody).endFunc(),this}endFunc(){return this._endBlockNode(Func)}optimize(n=1){ for(;n-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(node2){return this._currNode.nodes.push(node2),this}_blockNode(node2){this._currNode.nodes.push(node2),this._nodes.push(node2)}_endBlockNode(N1,N2){const n=this._currNode;if(n instanceof N1||N2&&n instanceof N2)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${N2?`${N1.kind}/${N2.kind}`:N1.kind}"`)}_elseNode(node2){const n=this._currNode;if(!(n instanceof If))throw new Error( -'CodeGen: "else" without "if"');return this._currNode=n.else=node2,this}get _root(){return this._nodes[0]}get _currNode(){const ns=this._nodes;return ns[ns.length-1]}set _currNode(node2){const ns=this._nodes;ns[ns.length-1]=node2}}exports.CodeGen=CodeGen;function addNames(names2,from){for(const n in from)names2[n]=(names2[n]||0)+(from[n]||0);return names2}function addExprNames(names2,from){return from instanceof code_1._CodeOrName?addNames(names2,from.names):names2}function optimizeExpr(expr,names2,constants2){ +'CodeGen: "else" without "if"');return this._currNode=n.else=node2,this}get _root(){return this._nodes[0]}get _currNode(){const ns=this._nodes;return ns[ns.length-1]}set _currNode(node2){const ns=this._nodes;ns[ns.length-1]=node2}}exports$1.CodeGen=CodeGen;function addNames(names2,from){for(const n in from)names2[n]=(names2[n]||0)+(from[n]||0);return names2}function addExprNames(names2,from){return from instanceof code_1._CodeOrName?addNames(names2,from.names):names2}function optimizeExpr(expr,names2,constants2){ if(expr instanceof code_1.Name)return replaceName(expr);if(!canOptimize(expr))return expr;return new code_1._Code(expr._items.reduce((items2,c2)=>(c2 instanceof code_1.Name&&(c2=replaceName(c2)),c2 instanceof code_1._Code?items2.push(...c2._items):items2.push(c2),items2),[]));function replaceName(n){const c2=constants2[n.str];return c2===void 0||names2[n.str]!==1?n:(delete names2[n.str],c2)}function canOptimize(e){return e instanceof code_1._Code&&e._items.some(c2=>c2 instanceof code_1.Name&&names2[c2. -str]===1&&constants2[c2.str]!==void 0)}}function subtractNames(names2,from){for(const n in from)names2[n]=(names2[n]||0)-(from[n]||0)}function not2(x){return typeof x=="boolean"||typeof x=="number"||x===null?!x:(0,code_1._)`!${par(x)}`}exports.not=not2;const andCode=mappend(exports.operators.AND);function and(...args){return args.reduce(andCode)}exports.and=and;const orCode=mappend(exports.operators.OR);function or(...args){return args.reduce(orCode)}exports.or=or;function mappend(op2){return(x,y)=>x=== -code_1.nil?y:y===code_1.nil?x:(0,code_1._)`${par(x)} ${op2} ${par(y)}`}function par(x){return x instanceof code_1.Name?x:(0,code_1._)`(${x})`}}(codegen$1)),codegen$1}var util$1={},hasRequiredUtil$1;function requireUtil$1(){if(hasRequiredUtil$1)return util$1;hasRequiredUtil$1=1,Object.defineProperty(util$1,"__esModule",{value:!0}),util$1.checkStrictMode=util$1.getErrorPath=util$1.Type=util$1.useFunc=util$1.setEvaluated=util$1.evaluatedPropsToName=util$1.mergeEvaluated=util$1.eachItem=util$1.unescapeJsonPointer= -util$1.escapeJsonPointer=util$1.escapeFragment=util$1.unescapeFragment=util$1.schemaRefOrVal=util$1.schemaHasRulesButRef=util$1.schemaHasRules=util$1.checkUnknownRules=util$1.alwaysValidSchema=util$1.toHash=void 0;const codegen_1=requireCodegen$1(),code_1=requireCode$3();function toHash(arr){const hash2={};for(const item of arr)hash2[item]=!0;return hash2}util$1.toHash=toHash;function alwaysValidSchema(it,schema){return typeof schema=="boolean"?schema:Object.keys(schema).length===0?!0:(checkUnknownRules( -it,schema),!schemaHasRules(schema,it.self.RULES.all))}util$1.alwaysValidSchema=alwaysValidSchema;function checkUnknownRules(it,schema=it.schema){const{opts,self:self2}=it;if(!opts.strictSchema||typeof schema=="boolean")return;const rules2=self2.RULES.keywords;for(const key2 in schema)rules2[key2]||checkStrictMode(it,`unknown keyword: "${key2}"`)}util$1.checkUnknownRules=checkUnknownRules;function schemaHasRules(schema,rules2){if(typeof schema=="boolean")return!schema;for(const key2 in schema)if(rules2[key2]) -return!0;return!1}util$1.schemaHasRules=schemaHasRules;function schemaHasRulesButRef(schema,RULES){if(typeof schema=="boolean")return!schema;for(const key2 in schema)if(key2!=="$ref"&&RULES.all[key2])return!0;return!1}util$1.schemaHasRulesButRef=schemaHasRulesButRef;function schemaRefOrVal({topSchemaRef,schemaPath},schema,keyword2,$data){if(!$data){if(typeof schema=="number"||typeof schema=="boolean")return schema;if(typeof schema=="string")return(0,codegen_1._)`${schema}`}return(0,codegen_1._)`${topSchemaRef}${schemaPath}${(0,codegen_1. -getProperty)(keyword2)}`}util$1.schemaRefOrVal=schemaRefOrVal;function unescapeFragment(str){return unescapeJsonPointer(decodeURIComponent(str))}util$1.unescapeFragment=unescapeFragment;function escapeFragment(str){return encodeURIComponent(escapeJsonPointer(str))}util$1.escapeFragment=escapeFragment;function escapeJsonPointer(str){return typeof str=="number"?`${str}`:str.replace(/~/g,"~0").replace(/\//g,"~1")}util$1.escapeJsonPointer=escapeJsonPointer;function unescapeJsonPointer(str){return str. -replace(/~1/g,"/").replace(/~0/g,"~")}util$1.unescapeJsonPointer=unescapeJsonPointer;function eachItem(xs,f){if(Array.isArray(xs))for(const x of xs)f(x);else f(xs)}util$1.eachItem=eachItem;function makeMergeEvaluated({mergeNames,mergeToName,mergeValues:mergeValues2,resultToName}){return(gen,from,to,toName)=>{const res=to===void 0?from:to instanceof codegen_1.Name?(from instanceof codegen_1.Name?mergeNames(gen,from,to):mergeToName(gen,from,to),to):from instanceof codegen_1.Name?(mergeToName(gen,to, -from),from):mergeValues2(from,to);return toName===codegen_1.Name&&!(res instanceof codegen_1.Name)?resultToName(gen,res):res}}util$1.mergeEvaluated={props:makeMergeEvaluated({mergeNames:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true && ${from} !== undefined`,()=>{gen.if((0,codegen_1._)`${from} === true`,()=>gen.assign(to,!0),()=>gen.assign(to,(0,codegen_1._)`${to} || {}`).code((0,codegen_1._)`Object.assign(${to}, ${from})`))}),mergeToName:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true`, -()=>{from===!0?gen.assign(to,!0):(gen.assign(to,(0,codegen_1._)`${to} || {}`),setEvaluated(gen,to,from))}),mergeValues:(from,to)=>from===!0?!0:{...from,...to},resultToName:evaluatedPropsToName}),items:makeMergeEvaluated({mergeNames:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true && ${from} !== undefined`,()=>gen.assign(to,(0,codegen_1._)`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),mergeToName:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true`,()=>gen.assign(to,from===!0? -!0:(0,codegen_1._)`${to} > ${from} ? ${to} : ${from}`)),mergeValues:(from,to)=>from===!0?!0:Math.max(from,to),resultToName:(gen,items2)=>gen.var("items",items2)})};function evaluatedPropsToName(gen,ps){if(ps===!0)return gen.var("props",!0);const props=gen.var("props",(0,codegen_1._)`{}`);return ps!==void 0&&setEvaluated(gen,props,ps),props}util$1.evaluatedPropsToName=evaluatedPropsToName;function setEvaluated(gen,props,ps){Object.keys(ps).forEach(p2=>gen.assign((0,codegen_1._)`${props}${(0,codegen_1. -getProperty)(p2)}`,!0))}util$1.setEvaluated=setEvaluated;const snippets={};function useFunc(gen,f){return gen.scopeValue("func",{ref:f,code:snippets[f.code]||(snippets[f.code]=new code_1._Code(f.code))})}util$1.useFunc=useFunc;var Type;(function(Type2){Type2[Type2.Num=0]="Num",Type2[Type2.Str=1]="Str"})(Type||(util$1.Type=Type={}));function getErrorPath(dataProp,dataPropType,jsPropertySyntax){if(dataProp instanceof codegen_1.Name){const isNumber2=dataPropType===Type.Num;return jsPropertySyntax?isNumber2? -(0,codegen_1._)`"[" + ${dataProp} + "]"`:(0,codegen_1._)`"['" + ${dataProp} + "']"`:isNumber2?(0,codegen_1._)`"/" + ${dataProp}`:(0,codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return jsPropertySyntax?(0,codegen_1.getProperty)(dataProp).toString():"/"+escapeJsonPointer(dataProp)}util$1.getErrorPath=getErrorPath;function checkStrictMode(it,msg,mode=it.opts.strictSchema){if(mode){if(msg=`strict mode: ${msg}`,mode===!0)throw new Error(msg);it.self.logger.warn(msg)}}return util$1. -checkStrictMode=checkStrictMode,util$1}var names$1={},hasRequiredNames$1;function requireNames$1(){if(hasRequiredNames$1)return names$1;hasRequiredNames$1=1,Object.defineProperty(names$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),names2={data:new codegen_1.Name("data"),valCxt:new codegen_1.Name("valCxt"),instancePath:new codegen_1.Name("instancePath"),parentData:new codegen_1.Name("parentData"),parentDataProperty:new codegen_1.Name("parentDataProperty"),rootData:new codegen_1.Name( -"rootData"),dynamicAnchors:new codegen_1.Name("dynamicAnchors"),vErrors:new codegen_1.Name("vErrors"),errors:new codegen_1.Name("errors"),this:new codegen_1.Name("this"),self:new codegen_1.Name("self"),scope:new codegen_1.Name("scope"),json:new codegen_1.Name("json"),jsonPos:new codegen_1.Name("jsonPos"),jsonLen:new codegen_1.Name("jsonLen"),jsonPart:new codegen_1.Name("jsonPart")};return names$1.default=names2,names$1}var hasRequiredErrors$1;function requireErrors$1(){return hasRequiredErrors$1|| -(hasRequiredErrors$1=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.extendErrors=exports.resetErrorsCount=exports.reportExtraError=exports.reportError=exports.keyword$DataError=exports.keywordError=void 0;const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),names_1=requireNames$1();exports.keywordError={message:({keyword:keyword2})=>(0,codegen_1.str)`must pass "${keyword2}" keyword validation`},exports.keyword$DataError={message:({keyword:keyword2,schemaType})=>schemaType? -(0,codegen_1.str)`"${keyword2}" keyword must be ${schemaType} ($data)`:(0,codegen_1.str)`"${keyword2}" keyword is invalid ($data)`};function reportError(cxt,error2=exports.keywordError,errorPaths,overrideAllErrors){const{it}=cxt,{gen,compositeRule,allErrors}=it,errObj=errorObjectCode(cxt,error2,errorPaths);overrideAllErrors??(compositeRule||allErrors)?addError(gen,errObj):returnErrors(it,(0,codegen_1._)`[${errObj}]`)}exports.reportError=reportError;function reportExtraError(cxt,error2=exports.keywordError,errorPaths){ -const{it}=cxt,{gen,compositeRule,allErrors}=it,errObj=errorObjectCode(cxt,error2,errorPaths);addError(gen,errObj),compositeRule||allErrors||returnErrors(it,names_1.default.vErrors)}exports.reportExtraError=reportExtraError;function resetErrorsCount(gen,errsCount){gen.assign(names_1.default.errors,errsCount),gen.if((0,codegen_1._)`${names_1.default.vErrors} !== null`,()=>gen.if(errsCount,()=>gen.assign((0,codegen_1._)`${names_1.default.vErrors}.length`,errsCount),()=>gen.assign(names_1.default.vErrors, -null)))}exports.resetErrorsCount=resetErrorsCount;function extendErrors({gen,keyword:keyword2,schemaValue,data,errsCount,it}){if(errsCount===void 0)throw new Error("ajv implementation error");const err=gen.name("err");gen.forRange("i",errsCount,names_1.default.errors,i=>{gen.const(err,(0,codegen_1._)`${names_1.default.vErrors}[${i}]`),gen.if((0,codegen_1._)`${err}.instancePath === undefined`,()=>gen.assign((0,codegen_1._)`${err}.instancePath`,(0,codegen_1.strConcat)(names_1.default.instancePath, -it.errorPath))),gen.assign((0,codegen_1._)`${err}.schemaPath`,(0,codegen_1.str)`${it.errSchemaPath}/${keyword2}`),it.opts.verbose&&(gen.assign((0,codegen_1._)`${err}.schema`,schemaValue),gen.assign((0,codegen_1._)`${err}.data`,data))})}exports.extendErrors=extendErrors;function addError(gen,errObj){const err=gen.const("err",errObj);gen.if((0,codegen_1._)`${names_1.default.vErrors} === null`,()=>gen.assign(names_1.default.vErrors,(0,codegen_1._)`[${err}]`),(0,codegen_1._)`${names_1.default.vErrors}.push(${err})`), -gen.code((0,codegen_1._)`${names_1.default.errors}++`)}function returnErrors(it,errs){const{gen,validateName,schemaEnv}=it;schemaEnv.$async?gen.throw((0,codegen_1._)`new ${it.ValidationError}(${errs})`):(gen.assign((0,codegen_1._)`${validateName}.errors`,errs),gen.return(!1))}const E={keyword:new codegen_1.Name("keyword"),schemaPath:new codegen_1.Name("schemaPath"),params:new codegen_1.Name("params"),propertyName:new codegen_1.Name("propertyName"),message:new codegen_1.Name("message"),schema:new codegen_1. -Name("schema"),parentSchema:new codegen_1.Name("parentSchema")};function errorObjectCode(cxt,error2,errorPaths){const{createErrors}=cxt.it;return createErrors===!1?(0,codegen_1._)`{}`:errorObject(cxt,error2,errorPaths)}function errorObject(cxt,error2,errorPaths={}){const{gen,it}=cxt,keyValues=[errorInstancePath(it,errorPaths),errorSchemaPath(cxt,errorPaths)];return extraErrorProps(cxt,error2,keyValues),gen.object(...keyValues)}function errorInstancePath({errorPath},{instancePath}){const instPath=instancePath? -(0,codegen_1.str)`${errorPath}${(0,util_1.getErrorPath)(instancePath,util_1.Type.Str)}`:errorPath;return[names_1.default.instancePath,(0,codegen_1.strConcat)(names_1.default.instancePath,instPath)]}function errorSchemaPath({keyword:keyword2,it:{errSchemaPath}},{schemaPath,parentSchema}){let schPath=parentSchema?errSchemaPath:(0,codegen_1.str)`${errSchemaPath}/${keyword2}`;return schemaPath&&(schPath=(0,codegen_1.str)`${schPath}${(0,util_1.getErrorPath)(schemaPath,util_1.Type.Str)}`),[E.schemaPath, -schPath]}function extraErrorProps(cxt,{params,message},keyValues){const{keyword:keyword2,data,schemaValue,it}=cxt,{opts,propertyName,topSchemaRef,schemaPath}=it;keyValues.push([E.keyword,keyword2],[E.params,typeof params=="function"?params(cxt):params||(0,codegen_1._)`{}`]),opts.messages&&keyValues.push([E.message,typeof message=="function"?message(cxt):message]),opts.verbose&&keyValues.push([E.schema,schemaValue],[E.parentSchema,(0,codegen_1._)`${topSchemaRef}${schemaPath}`],[names_1.default.data, -data]),propertyName&&keyValues.push([E.propertyName,propertyName])}}(errors$1)),errors$1}var hasRequiredBoolSchema$1;function requireBoolSchema$1(){if(hasRequiredBoolSchema$1)return boolSchema$1;hasRequiredBoolSchema$1=1,Object.defineProperty(boolSchema$1,"__esModule",{value:!0}),boolSchema$1.boolOrEmptySchema=boolSchema$1.topBoolOrEmptySchema=void 0;const errors_1=requireErrors$1(),codegen_1=requireCodegen$1(),names_1=requireNames$1(),boolError={message:"boolean schema is false"};function topBoolOrEmptySchema(it){ -const{gen,schema,validateName}=it;schema===!1?falseSchemaError(it,!1):typeof schema=="object"&&schema.$async===!0?gen.return(names_1.default.data):(gen.assign((0,codegen_1._)`${validateName}.errors`,null),gen.return(!0))}boolSchema$1.topBoolOrEmptySchema=topBoolOrEmptySchema;function boolOrEmptySchema(it,valid2){const{gen,schema}=it;schema===!1?(gen.var(valid2,!1),falseSchemaError(it)):gen.var(valid2,!0)}boolSchema$1.boolOrEmptySchema=boolOrEmptySchema;function falseSchemaError(it,overrideAllErrors){ -const{gen,data}=it,cxt={gen,keyword:"false schema",data,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it};(0,errors_1.reportError)(cxt,boolError,void 0,overrideAllErrors)}return boolSchema$1}var dataType$1={},rules$1={},hasRequiredRules$1;function requireRules$1(){if(hasRequiredRules$1)return rules$1;hasRequiredRules$1=1,Object.defineProperty(rules$1,"__esModule",{value:!0}),rules$1.getRules=rules$1.isJSONType=void 0;const _jsonTypes=["string","number","integer","boolean","null","object","arr\ -ay"],jsonTypes=new Set(_jsonTypes);function isJSONType(x){return typeof x=="string"&&jsonTypes.has(x)}rules$1.isJSONType=isJSONType;function getRules(){const groups={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...groups,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},groups.number,groups.string,groups.array,groups.object],post:{rules:[]},all:{},keywords:{}}}return rules$1.getRules=getRules,rules$1}var applicability$1={}, -hasRequiredApplicability$1;function requireApplicability$1(){if(hasRequiredApplicability$1)return applicability$1;hasRequiredApplicability$1=1,Object.defineProperty(applicability$1,"__esModule",{value:!0}),applicability$1.shouldUseRule=applicability$1.shouldUseGroup=applicability$1.schemaHasRulesForType=void 0;function schemaHasRulesForType({schema,self:self2},type2){const group=self2.RULES.types[type2];return group&&group!==!0&&shouldUseGroup(schema,group)}applicability$1.schemaHasRulesForType= -schemaHasRulesForType;function shouldUseGroup(schema,group){return group.rules.some(rule=>shouldUseRule(schema,rule))}applicability$1.shouldUseGroup=shouldUseGroup;function shouldUseRule(schema,rule){var _a2;return schema[rule.keyword]!==void 0||((_a2=rule.definition.implements)===null||_a2===void 0?void 0:_a2.some(kwd=>schema[kwd]!==void 0))}return applicability$1.shouldUseRule=shouldUseRule,applicability$1}var hasRequiredDataType$1;function requireDataType$1(){if(hasRequiredDataType$1)return dataType$1; -hasRequiredDataType$1=1,Object.defineProperty(dataType$1,"__esModule",{value:!0}),dataType$1.reportTypeError=dataType$1.checkDataTypes=dataType$1.checkDataType=dataType$1.coerceAndCheckDataType=dataType$1.getJSONTypes=dataType$1.getSchemaTypes=dataType$1.DataType=void 0;const rules_1=requireRules$1(),applicability_1=requireApplicability$1(),errors_1=requireErrors$1(),codegen_1=requireCodegen$1(),util_1=requireUtil$1();var DataType;(function(DataType2){DataType2[DataType2.Correct=0]="Correct",DataType2[DataType2. -Wrong=1]="Wrong"})(DataType||(dataType$1.DataType=DataType={}));function getSchemaTypes(schema){const types2=getJSONTypes(schema.type);if(types2.includes("null")){if(schema.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!types2.length&&schema.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');schema.nullable===!0&&types2.push("null")}return types2}dataType$1.getSchemaTypes=getSchemaTypes;function getJSONTypes(ts){const types2=Array.isArray( -ts)?ts:ts?[ts]:[];if(types2.every(rules_1.isJSONType))return types2;throw new Error("type must be JSONType or JSONType[]: "+types2.join(","))}dataType$1.getJSONTypes=getJSONTypes;function coerceAndCheckDataType(it,types2){const{gen,data,opts}=it,coerceTo=coerceToTypes(types2,opts.coerceTypes),checkTypes=types2.length>0&&!(coerceTo.length===0&&types2.length===1&&(0,applicability_1.schemaHasRulesForType)(it,types2[0]));if(checkTypes){const wrongType=checkDataTypes(types2,data,opts.strictNumbers,DataType. -Wrong);gen.if(wrongType,()=>{coerceTo.length?coerceData(it,types2,coerceTo):reportTypeError(it)})}return checkTypes}dataType$1.coerceAndCheckDataType=coerceAndCheckDataType;const COERCIBLE=new Set(["string","number","integer","boolean","null"]);function coerceToTypes(types2,coerceTypes){return coerceTypes?types2.filter(t=>COERCIBLE.has(t)||coerceTypes==="array"&&t==="array"):[]}function coerceData(it,types2,coerceTo){const{gen,data,opts}=it,dataType2=gen.let("dataType",(0,codegen_1._)`typeof ${data}`), -coerced=gen.let("coerced",(0,codegen_1._)`undefined`);opts.coerceTypes==="array"&&gen.if((0,codegen_1._)`${dataType2} == 'object' && Array.isArray(${data}) && ${data}.length == 1`,()=>gen.assign(data,(0,codegen_1._)`${data}[0]`).assign(dataType2,(0,codegen_1._)`typeof ${data}`).if(checkDataTypes(types2,data,opts.strictNumbers),()=>gen.assign(coerced,data))),gen.if((0,codegen_1._)`${coerced} !== undefined`);for(const t of coerceTo)(COERCIBLE.has(t)||t==="array"&&opts.coerceTypes==="array")&&coerceSpecificType( -t);gen.else(),reportTypeError(it),gen.endIf(),gen.if((0,codegen_1._)`${coerced} !== undefined`,()=>{gen.assign(data,coerced),assignParentData(it,coerced)});function coerceSpecificType(t){switch(t){case"string":gen.elseIf((0,codegen_1._)`${dataType2} == "number" || ${dataType2} == "boolean"`).assign(coerced,(0,codegen_1._)`"" + ${data}`).elseIf((0,codegen_1._)`${data} === null`).assign(coerced,(0,codegen_1._)`""`);return;case"number":gen.elseIf((0,codegen_1._)`${dataType2} == "boolean" || ${data} === null +str]===1&&constants2[c2.str]!==void 0)}}function subtractNames(names2,from){for(const n in from)names2[n]=(names2[n]||0)-(from[n]||0)}function not2(x){return typeof x=="boolean"||typeof x=="number"||x===null?!x:(0,code_1._)`!${par(x)}`}exports$1.not=not2;const andCode=mappend(exports$1.operators.AND);function and(...args){return args.reduce(andCode)}exports$1.and=and;const orCode=mappend(exports$1.operators.OR);function or(...args){return args.reduce(orCode)}exports$1.or=or;function mappend(op2){ +return(x,y)=>x===code_1.nil?y:y===code_1.nil?x:(0,code_1._)`${par(x)} ${op2} ${par(y)}`}function par(x){return x instanceof code_1.Name?x:(0,code_1._)`(${x})`}})(codegen$1)),codegen$1}var util$1={},hasRequiredUtil$1;function requireUtil$1(){if(hasRequiredUtil$1)return util$1;hasRequiredUtil$1=1,Object.defineProperty(util$1,"__esModule",{value:!0}),util$1.checkStrictMode=util$1.getErrorPath=util$1.Type=util$1.useFunc=util$1.setEvaluated=util$1.evaluatedPropsToName=util$1.mergeEvaluated=util$1.eachItem= +util$1.unescapeJsonPointer=util$1.escapeJsonPointer=util$1.escapeFragment=util$1.unescapeFragment=util$1.schemaRefOrVal=util$1.schemaHasRulesButRef=util$1.schemaHasRules=util$1.checkUnknownRules=util$1.alwaysValidSchema=util$1.toHash=void 0;const codegen_1=requireCodegen$1(),code_1=requireCode$3();function toHash(arr){const hash2={};for(const item of arr)hash2[item]=!0;return hash2}util$1.toHash=toHash;function alwaysValidSchema(it,schema){return typeof schema=="boolean"?schema:Object.keys(schema). +length===0?!0:(checkUnknownRules(it,schema),!schemaHasRules(schema,it.self.RULES.all))}util$1.alwaysValidSchema=alwaysValidSchema;function checkUnknownRules(it,schema=it.schema){const{opts,self:self2}=it;if(!opts.strictSchema||typeof schema=="boolean")return;const rules2=self2.RULES.keywords;for(const key2 in schema)rules2[key2]||checkStrictMode(it,`unknown keyword: "${key2}"`)}util$1.checkUnknownRules=checkUnknownRules;function schemaHasRules(schema,rules2){if(typeof schema=="boolean")return!schema; +for(const key2 in schema)if(rules2[key2])return!0;return!1}util$1.schemaHasRules=schemaHasRules;function schemaHasRulesButRef(schema,RULES){if(typeof schema=="boolean")return!schema;for(const key2 in schema)if(key2!=="$ref"&&RULES.all[key2])return!0;return!1}util$1.schemaHasRulesButRef=schemaHasRulesButRef;function schemaRefOrVal({topSchemaRef,schemaPath},schema,keyword2,$data){if(!$data){if(typeof schema=="number"||typeof schema=="boolean")return schema;if(typeof schema=="string")return(0,codegen_1. +_)`${schema}`}return(0,codegen_1._)`${topSchemaRef}${schemaPath}${(0,codegen_1.getProperty)(keyword2)}`}util$1.schemaRefOrVal=schemaRefOrVal;function unescapeFragment(str){return unescapeJsonPointer(decodeURIComponent(str))}util$1.unescapeFragment=unescapeFragment;function escapeFragment(str){return encodeURIComponent(escapeJsonPointer(str))}util$1.escapeFragment=escapeFragment;function escapeJsonPointer(str){return typeof str=="number"?`${str}`:str.replace(/~/g,"~0").replace(/\//g,"~1")}util$1. +escapeJsonPointer=escapeJsonPointer;function unescapeJsonPointer(str){return str.replace(/~1/g,"/").replace(/~0/g,"~")}util$1.unescapeJsonPointer=unescapeJsonPointer;function eachItem(xs,f){if(Array.isArray(xs))for(const x of xs)f(x);else f(xs)}util$1.eachItem=eachItem;function makeMergeEvaluated({mergeNames,mergeToName,mergeValues:mergeValues2,resultToName}){return(gen,from,to,toName)=>{const res=to===void 0?from:to instanceof codegen_1.Name?(from instanceof codegen_1.Name?mergeNames(gen,from,to): +mergeToName(gen,from,to),to):from instanceof codegen_1.Name?(mergeToName(gen,to,from),from):mergeValues2(from,to);return toName===codegen_1.Name&&!(res instanceof codegen_1.Name)?resultToName(gen,res):res}}util$1.mergeEvaluated={props:makeMergeEvaluated({mergeNames:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true && ${from} !== undefined`,()=>{gen.if((0,codegen_1._)`${from} === true`,()=>gen.assign(to,!0),()=>gen.assign(to,(0,codegen_1._)`${to} || {}`).code((0,codegen_1._)`Object.assign(${to}, ${from})`))}), +mergeToName:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true`,()=>{from===!0?gen.assign(to,!0):(gen.assign(to,(0,codegen_1._)`${to} || {}`),setEvaluated(gen,to,from))}),mergeValues:(from,to)=>from===!0?!0:{...from,...to},resultToName:evaluatedPropsToName}),items:makeMergeEvaluated({mergeNames:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true && ${from} !== undefined`,()=>gen.assign(to,(0,codegen_1._)`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)),mergeToName:(gen,from,to)=>gen. +if((0,codegen_1._)`${to} !== true`,()=>gen.assign(to,from===!0?!0:(0,codegen_1._)`${to} > ${from} ? ${to} : ${from}`)),mergeValues:(from,to)=>from===!0?!0:Math.max(from,to),resultToName:(gen,items2)=>gen.var("items",items2)})};function evaluatedPropsToName(gen,ps){if(ps===!0)return gen.var("props",!0);const props=gen.var("props",(0,codegen_1._)`{}`);return ps!==void 0&&setEvaluated(gen,props,ps),props}util$1.evaluatedPropsToName=evaluatedPropsToName;function setEvaluated(gen,props,ps){Object.keys( +ps).forEach(p2=>gen.assign((0,codegen_1._)`${props}${(0,codegen_1.getProperty)(p2)}`,!0))}util$1.setEvaluated=setEvaluated;const snippets={};function useFunc(gen,f){return gen.scopeValue("func",{ref:f,code:snippets[f.code]||(snippets[f.code]=new code_1._Code(f.code))})}util$1.useFunc=useFunc;var Type;(function(Type2){Type2[Type2.Num=0]="Num",Type2[Type2.Str=1]="Str"})(Type||(util$1.Type=Type={}));function getErrorPath(dataProp,dataPropType,jsPropertySyntax){if(dataProp instanceof codegen_1.Name){ +const isNumber2=dataPropType===Type.Num;return jsPropertySyntax?isNumber2?(0,codegen_1._)`"[" + ${dataProp} + "]"`:(0,codegen_1._)`"['" + ${dataProp} + "']"`:isNumber2?(0,codegen_1._)`"/" + ${dataProp}`:(0,codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return jsPropertySyntax?(0,codegen_1.getProperty)(dataProp).toString():"/"+escapeJsonPointer(dataProp)}util$1.getErrorPath=getErrorPath;function checkStrictMode(it,msg,mode=it.opts.strictSchema){if(mode){if(msg=`strict m\ +ode: ${msg}`,mode===!0)throw new Error(msg);it.self.logger.warn(msg)}}return util$1.checkStrictMode=checkStrictMode,util$1}var names$1={},hasRequiredNames$1;function requireNames$1(){if(hasRequiredNames$1)return names$1;hasRequiredNames$1=1,Object.defineProperty(names$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),names2={data:new codegen_1.Name("data"),valCxt:new codegen_1.Name("valCxt"),instancePath:new codegen_1.Name("instancePath"),parentData:new codegen_1.Name("parentData"),parentDataProperty:new codegen_1. +Name("parentDataProperty"),rootData:new codegen_1.Name("rootData"),dynamicAnchors:new codegen_1.Name("dynamicAnchors"),vErrors:new codegen_1.Name("vErrors"),errors:new codegen_1.Name("errors"),this:new codegen_1.Name("this"),self:new codegen_1.Name("self"),scope:new codegen_1.Name("scope"),json:new codegen_1.Name("json"),jsonPos:new codegen_1.Name("jsonPos"),jsonLen:new codegen_1.Name("jsonLen"),jsonPart:new codegen_1.Name("jsonPart")};return names$1.default=names2,names$1}var hasRequiredErrors$1; +function requireErrors$1(){return hasRequiredErrors$1||(hasRequiredErrors$1=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.extendErrors=exports$1.resetErrorsCount=exports$1.reportExtraError=exports$1.reportError=exports$1.keyword$DataError=exports$1.keywordError=void 0;const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),names_1=requireNames$1();exports$1.keywordError={message:({keyword:keyword2})=>(0,codegen_1.str)`must pass "${keyword2}" keyword validation`}, +exports$1.keyword$DataError={message:({keyword:keyword2,schemaType})=>schemaType?(0,codegen_1.str)`"${keyword2}" keyword must be ${schemaType} ($data)`:(0,codegen_1.str)`"${keyword2}" keyword is invalid ($data)`};function reportError(cxt,error2=exports$1.keywordError,errorPaths,overrideAllErrors){const{it}=cxt,{gen,compositeRule,allErrors}=it,errObj=errorObjectCode(cxt,error2,errorPaths);overrideAllErrors??(compositeRule||allErrors)?addError(gen,errObj):returnErrors(it,(0,codegen_1._)`[${errObj}]`)} +exports$1.reportError=reportError;function reportExtraError(cxt,error2=exports$1.keywordError,errorPaths){const{it}=cxt,{gen,compositeRule,allErrors}=it,errObj=errorObjectCode(cxt,error2,errorPaths);addError(gen,errObj),compositeRule||allErrors||returnErrors(it,names_1.default.vErrors)}exports$1.reportExtraError=reportExtraError;function resetErrorsCount(gen,errsCount){gen.assign(names_1.default.errors,errsCount),gen.if((0,codegen_1._)`${names_1.default.vErrors} !== null`,()=>gen.if(errsCount,()=>gen. +assign((0,codegen_1._)`${names_1.default.vErrors}.length`,errsCount),()=>gen.assign(names_1.default.vErrors,null)))}exports$1.resetErrorsCount=resetErrorsCount;function extendErrors({gen,keyword:keyword2,schemaValue,data,errsCount,it}){if(errsCount===void 0)throw new Error("ajv implementation error");const err=gen.name("err");gen.forRange("i",errsCount,names_1.default.errors,i=>{gen.const(err,(0,codegen_1._)`${names_1.default.vErrors}[${i}]`),gen.if((0,codegen_1._)`${err}.instancePath === undefined`, +()=>gen.assign((0,codegen_1._)`${err}.instancePath`,(0,codegen_1.strConcat)(names_1.default.instancePath,it.errorPath))),gen.assign((0,codegen_1._)`${err}.schemaPath`,(0,codegen_1.str)`${it.errSchemaPath}/${keyword2}`),it.opts.verbose&&(gen.assign((0,codegen_1._)`${err}.schema`,schemaValue),gen.assign((0,codegen_1._)`${err}.data`,data))})}exports$1.extendErrors=extendErrors;function addError(gen,errObj){const err=gen.const("err",errObj);gen.if((0,codegen_1._)`${names_1.default.vErrors} === null`, +()=>gen.assign(names_1.default.vErrors,(0,codegen_1._)`[${err}]`),(0,codegen_1._)`${names_1.default.vErrors}.push(${err})`),gen.code((0,codegen_1._)`${names_1.default.errors}++`)}function returnErrors(it,errs){const{gen,validateName,schemaEnv}=it;schemaEnv.$async?gen.throw((0,codegen_1._)`new ${it.ValidationError}(${errs})`):(gen.assign((0,codegen_1._)`${validateName}.errors`,errs),gen.return(!1))}const E={keyword:new codegen_1.Name("keyword"),schemaPath:new codegen_1.Name("schemaPath"),params:new codegen_1. +Name("params"),propertyName:new codegen_1.Name("propertyName"),message:new codegen_1.Name("message"),schema:new codegen_1.Name("schema"),parentSchema:new codegen_1.Name("parentSchema")};function errorObjectCode(cxt,error2,errorPaths){const{createErrors}=cxt.it;return createErrors===!1?(0,codegen_1._)`{}`:errorObject(cxt,error2,errorPaths)}function errorObject(cxt,error2,errorPaths={}){const{gen,it}=cxt,keyValues=[errorInstancePath(it,errorPaths),errorSchemaPath(cxt,errorPaths)];return extraErrorProps( +cxt,error2,keyValues),gen.object(...keyValues)}function errorInstancePath({errorPath},{instancePath}){const instPath=instancePath?(0,codegen_1.str)`${errorPath}${(0,util_1.getErrorPath)(instancePath,util_1.Type.Str)}`:errorPath;return[names_1.default.instancePath,(0,codegen_1.strConcat)(names_1.default.instancePath,instPath)]}function errorSchemaPath({keyword:keyword2,it:{errSchemaPath}},{schemaPath,parentSchema}){let schPath=parentSchema?errSchemaPath:(0,codegen_1.str)`${errSchemaPath}/${keyword2}`; +return schemaPath&&(schPath=(0,codegen_1.str)`${schPath}${(0,util_1.getErrorPath)(schemaPath,util_1.Type.Str)}`),[E.schemaPath,schPath]}function extraErrorProps(cxt,{params,message},keyValues){const{keyword:keyword2,data,schemaValue,it}=cxt,{opts,propertyName,topSchemaRef,schemaPath}=it;keyValues.push([E.keyword,keyword2],[E.params,typeof params=="function"?params(cxt):params||(0,codegen_1._)`{}`]),opts.messages&&keyValues.push([E.message,typeof message=="function"?message(cxt):message]),opts.verbose&& +keyValues.push([E.schema,schemaValue],[E.parentSchema,(0,codegen_1._)`${topSchemaRef}${schemaPath}`],[names_1.default.data,data]),propertyName&&keyValues.push([E.propertyName,propertyName])}})(errors$1)),errors$1}var hasRequiredBoolSchema$1;function requireBoolSchema$1(){if(hasRequiredBoolSchema$1)return boolSchema$1;hasRequiredBoolSchema$1=1,Object.defineProperty(boolSchema$1,"__esModule",{value:!0}),boolSchema$1.boolOrEmptySchema=boolSchema$1.topBoolOrEmptySchema=void 0;const errors_1=requireErrors$1(), +codegen_1=requireCodegen$1(),names_1=requireNames$1(),boolError={message:"boolean schema is false"};function topBoolOrEmptySchema(it){const{gen,schema,validateName}=it;schema===!1?falseSchemaError(it,!1):typeof schema=="object"&&schema.$async===!0?gen.return(names_1.default.data):(gen.assign((0,codegen_1._)`${validateName}.errors`,null),gen.return(!0))}boolSchema$1.topBoolOrEmptySchema=topBoolOrEmptySchema;function boolOrEmptySchema(it,valid2){const{gen,schema}=it;schema===!1?(gen.var(valid2,!1), +falseSchemaError(it)):gen.var(valid2,!0)}boolSchema$1.boolOrEmptySchema=boolOrEmptySchema;function falseSchemaError(it,overrideAllErrors){const{gen,data}=it,cxt={gen,keyword:"false schema",data,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it};(0,errors_1.reportError)(cxt,boolError,void 0,overrideAllErrors)}return boolSchema$1}var dataType$1={},rules$1={},hasRequiredRules$1;function requireRules$1(){if(hasRequiredRules$1)return rules$1;hasRequiredRules$1=1,Object.defineProperty(rules$1,"__esM\ +odule",{value:!0}),rules$1.getRules=rules$1.isJSONType=void 0;const _jsonTypes=["string","number","integer","boolean","null","object","array"],jsonTypes=new Set(_jsonTypes);function isJSONType(x){return typeof x=="string"&&jsonTypes.has(x)}rules$1.isJSONType=isJSONType;function getRules(){const groups={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...groups,integer:!0,boolean:!0,null:!0},rules:[{rules:[]}, +groups.number,groups.string,groups.array,groups.object],post:{rules:[]},all:{},keywords:{}}}return rules$1.getRules=getRules,rules$1}var applicability$1={},hasRequiredApplicability$1;function requireApplicability$1(){if(hasRequiredApplicability$1)return applicability$1;hasRequiredApplicability$1=1,Object.defineProperty(applicability$1,"__esModule",{value:!0}),applicability$1.shouldUseRule=applicability$1.shouldUseGroup=applicability$1.schemaHasRulesForType=void 0;function schemaHasRulesForType({ +schema,self:self2},type2){const group=self2.RULES.types[type2];return group&&group!==!0&&shouldUseGroup(schema,group)}applicability$1.schemaHasRulesForType=schemaHasRulesForType;function shouldUseGroup(schema,group){return group.rules.some(rule=>shouldUseRule(schema,rule))}applicability$1.shouldUseGroup=shouldUseGroup;function shouldUseRule(schema,rule){var _a2;return schema[rule.keyword]!==void 0||((_a2=rule.definition.implements)===null||_a2===void 0?void 0:_a2.some(kwd=>schema[kwd]!==void 0))} +return applicability$1.shouldUseRule=shouldUseRule,applicability$1}var hasRequiredDataType$1;function requireDataType$1(){if(hasRequiredDataType$1)return dataType$1;hasRequiredDataType$1=1,Object.defineProperty(dataType$1,"__esModule",{value:!0}),dataType$1.reportTypeError=dataType$1.checkDataTypes=dataType$1.checkDataType=dataType$1.coerceAndCheckDataType=dataType$1.getJSONTypes=dataType$1.getSchemaTypes=dataType$1.DataType=void 0;const rules_1=requireRules$1(),applicability_1=requireApplicability$1(), +errors_1=requireErrors$1(),codegen_1=requireCodegen$1(),util_1=requireUtil$1();var DataType;(function(DataType2){DataType2[DataType2.Correct=0]="Correct",DataType2[DataType2.Wrong=1]="Wrong"})(DataType||(dataType$1.DataType=DataType={}));function getSchemaTypes(schema){const types2=getJSONTypes(schema.type);if(types2.includes("null")){if(schema.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!types2.length&&schema.nullable!==void 0)throw new Error('"nullable" cann\ +ot be used without "type"');schema.nullable===!0&&types2.push("null")}return types2}dataType$1.getSchemaTypes=getSchemaTypes;function getJSONTypes(ts){const types2=Array.isArray(ts)?ts:ts?[ts]:[];if(types2.every(rules_1.isJSONType))return types2;throw new Error("type must be JSONType or JSONType[]: "+types2.join(","))}dataType$1.getJSONTypes=getJSONTypes;function coerceAndCheckDataType(it,types2){const{gen,data,opts}=it,coerceTo=coerceToTypes(types2,opts.coerceTypes),checkTypes=types2.length>0&& +!(coerceTo.length===0&&types2.length===1&&(0,applicability_1.schemaHasRulesForType)(it,types2[0]));if(checkTypes){const wrongType=checkDataTypes(types2,data,opts.strictNumbers,DataType.Wrong);gen.if(wrongType,()=>{coerceTo.length?coerceData(it,types2,coerceTo):reportTypeError(it)})}return checkTypes}dataType$1.coerceAndCheckDataType=coerceAndCheckDataType;const COERCIBLE=new Set(["string","number","integer","boolean","null"]);function coerceToTypes(types2,coerceTypes){return coerceTypes?types2.filter( +t=>COERCIBLE.has(t)||coerceTypes==="array"&&t==="array"):[]}function coerceData(it,types2,coerceTo){const{gen,data,opts}=it,dataType2=gen.let("dataType",(0,codegen_1._)`typeof ${data}`),coerced=gen.let("coerced",(0,codegen_1._)`undefined`);opts.coerceTypes==="array"&&gen.if((0,codegen_1._)`${dataType2} == 'object' && Array.isArray(${data}) && ${data}.length == 1`,()=>gen.assign(data,(0,codegen_1._)`${data}[0]`).assign(dataType2,(0,codegen_1._)`typeof ${data}`).if(checkDataTypes(types2,data,opts. +strictNumbers),()=>gen.assign(coerced,data))),gen.if((0,codegen_1._)`${coerced} !== undefined`);for(const t of coerceTo)(COERCIBLE.has(t)||t==="array"&&opts.coerceTypes==="array")&&coerceSpecificType(t);gen.else(),reportTypeError(it),gen.endIf(),gen.if((0,codegen_1._)`${coerced} !== undefined`,()=>{gen.assign(data,coerced),assignParentData(it,coerced)});function coerceSpecificType(t){switch(t){case"string":gen.elseIf((0,codegen_1._)`${dataType2} == "number" || ${dataType2} == "boolean"`).assign( +coerced,(0,codegen_1._)`"" + ${data}`).elseIf((0,codegen_1._)`${data} === null`).assign(coerced,(0,codegen_1._)`""`);return;case"number":gen.elseIf((0,codegen_1._)`${dataType2} == "boolean" || ${data} === null || (${dataType2} == "string" && ${data} && ${data} == +${data})`).assign(coerced,(0,codegen_1._)`+${data}`);return;case"integer":gen.elseIf((0,codegen_1._)`${dataType2} === "boolean" || ${data} === null || (${dataType2} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`).assign(coerced,(0,codegen_1._)`+${data}`);return;case"boolean":gen.elseIf((0,codegen_1._)`${data} === "false" || ${data} === 0 || ${data} === null`).assign(coerced,!1).elseIf((0,codegen_1._)`${data} === "true" || ${data} === 1`).assign(coerced,!0);return;case"null":gen.elseIf((0,codegen_1._)`${data} === "" || ${data} === 0 || ${data} === false`),gen.assign(coerced,null);return;case"array":gen.elseIf( (0,codegen_1._)`${dataType2} === "string" || ${dataType2} === "number" @@ -4288,75 +4371,76 @@ parsed.userinfo=matches2[3],parsed.host=matches2[4],parsed.port=parseInt(matches path?parsed.reference="same-document":parsed.scheme===void 0?parsed.reference="relative":parsed.fragment===void 0?parsed.reference="absolute":parsed.reference="uri",options.reference&&options.reference!=="suffix"&&options.reference!==parsed.reference&&(parsed.error=parsed.error||"URI is not a "+options.reference+" reference.");const schemeHandler=getSchemeHandler(options.scheme||parsed.scheme);if(!options.unicodeSupport&&(!schemeHandler||!schemeHandler.unicodeSupport)&&parsed.host&&(options.domainHost|| schemeHandler&&schemeHandler.domainHost)&&isIP===!1&&nonSimpleDomain(parsed.host))try{parsed.host=URL.domainToASCII(parsed.host.toLowerCase())}catch(e){parsed.error=parsed.error||"Host's domain name can not be converted to ASCII: "+e}(!schemeHandler||schemeHandler&&!schemeHandler.skipNormalize)&&(uri2.indexOf("%")!==-1&&(parsed.scheme!==void 0&&(parsed.scheme=unescape(parsed.scheme)),parsed.host!==void 0&&(parsed.host=unescape(parsed.host))),parsed.path&&(parsed.path=escape(unescape(parsed.path))), parsed.fragment&&(parsed.fragment=encodeURI(decodeURIComponent(parsed.fragment)))),schemeHandler&&schemeHandler.parse&&schemeHandler.parse(parsed,options)}else parsed.error=parsed.error||"URI can not be parsed.";return parsed}const fastUri$1={SCHEMES,normalize:normalize2,resolve:resolve2,resolveComponent,equal:equal2,serialize:serialize2,parse:parse2};return fastUri.exports=fastUri$1,fastUri.exports.default=fastUri$1,fastUri.exports.fastUri=fastUri$1,fastUri.exports}var hasRequiredUri$1;function requireUri$1(){ -if(hasRequiredUri$1)return uri$1;hasRequiredUri$1=1,Object.defineProperty(uri$1,"__esModule",{value:!0});const uri2=requireFastUri();return uri2.code='require("ajv/dist/runtime/uri").default',uri$1.default=uri2,uri$1}var hasRequiredCore$3;function requireCore$3(){return hasRequiredCore$3||(hasRequiredCore$3=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.CodeGen=exports.Name=exports.nil=exports.stringify=exports.str=exports._=exports.KeywordCxt=void 0;var validate_1=requireValidate$1(); -Object.defineProperty(exports,"KeywordCxt",{enumerable:!0,get:function(){return validate_1.KeywordCxt}});var codegen_1=requireCodegen$1();Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return codegen_1._}}),Object.defineProperty(exports,"str",{enumerable:!0,get:function(){return codegen_1.str}}),Object.defineProperty(exports,"stringify",{enumerable:!0,get:function(){return codegen_1.stringify}}),Object.defineProperty(exports,"nil",{enumerable:!0,get:function(){return codegen_1.nil}}), -Object.defineProperty(exports,"Name",{enumerable:!0,get:function(){return codegen_1.Name}}),Object.defineProperty(exports,"CodeGen",{enumerable:!0,get:function(){return codegen_1.CodeGen}});const validation_error_1=requireValidation_error$1(),ref_error_1=requireRef_error$1(),rules_1=requireRules$1(),compile_1=requireCompile$1(),codegen_2=requireCodegen$1(),resolve_1=requireResolve$1(),dataType_1=requireDataType$1(),util_1=requireUtil$1(),$dataRefSchema=require$$9$1,uri_1=requireUri$1(),defaultRegExp=(str,flags2)=>new RegExp( -str,flags2);defaultRegExp.code="new RegExp";const META_IGNORE_OPTIONS=["removeAdditional","useDefaults","coerceTypes"],EXT_SCOPE_NAMES=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),removedOptions={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated \ -ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `f\ -ormats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},deprecatedOptions={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},MAX_EXPRESSION=200;function requiredOptions(o){var _a2,_b,_c,_d,_e,_f,_g,_h,_j,_k,_l,_m,_o,_p,_q,_r,_s,_t,_u,_v,_w,_x,_y,_z,_02;const s2=o.strict,_optz=(_a2=o.code)===null||_a2===void 0?void 0:_a2.optimize, -optimize=_optz===!0||_optz===void 0?1:_optz||0,regExp=(_c=(_b=o.code)===null||_b===void 0?void 0:_b.regExp)!==null&&_c!==void 0?_c:defaultRegExp,uriResolver=(_d=o.uriResolver)!==null&&_d!==void 0?_d:uri_1.default;return{strictSchema:(_f=(_e=o.strictSchema)!==null&&_e!==void 0?_e:s2)!==null&&_f!==void 0?_f:!0,strictNumbers:(_h=(_g=o.strictNumbers)!==null&&_g!==void 0?_g:s2)!==null&&_h!==void 0?_h:!0,strictTypes:(_k=(_j=o.strictTypes)!==null&&_j!==void 0?_j:s2)!==null&&_k!==void 0?_k:"log",strictTuples:(_m= -(_l=o.strictTuples)!==null&&_l!==void 0?_l:s2)!==null&&_m!==void 0?_m:"log",strictRequired:(_p=(_o=o.strictRequired)!==null&&_o!==void 0?_o:s2)!==null&&_p!==void 0?_p:!1,code:o.code?{...o.code,optimize,regExp}:{optimize,regExp},loopRequired:(_q=o.loopRequired)!==null&&_q!==void 0?_q:MAX_EXPRESSION,loopEnum:(_r=o.loopEnum)!==null&&_r!==void 0?_r:MAX_EXPRESSION,meta:(_s=o.meta)!==null&&_s!==void 0?_s:!0,messages:(_t=o.messages)!==null&&_t!==void 0?_t:!0,inlineRefs:(_u=o.inlineRefs)!==null&&_u!==void 0? -_u:!0,schemaId:(_v=o.schemaId)!==null&&_v!==void 0?_v:"$id",addUsedSchema:(_w=o.addUsedSchema)!==null&&_w!==void 0?_w:!0,validateSchema:(_x=o.validateSchema)!==null&&_x!==void 0?_x:!0,validateFormats:(_y=o.validateFormats)!==null&&_y!==void 0?_y:!0,unicodeRegExp:(_z=o.unicodeRegExp)!==null&&_z!==void 0?_z:!0,int32range:(_02=o.int32range)!==null&&_02!==void 0?_02:!0,uriResolver}}class Ajv2{constructor(opts={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={}, -this._cache=new Map,opts=this.opts={...opts,...requiredOptions(opts)};const{es5,lines}=this.opts.code;this.scope=new codegen_2.ValueScope({scope:{},prefixes:EXT_SCOPE_NAMES,es5,lines}),this.logger=getLogger(opts.logger);const formatOpt=opts.validateFormats;opts.validateFormats=!1,this.RULES=(0,rules_1.getRules)(),checkOptions.call(this,removedOptions,opts,"NOT SUPPORTED"),checkOptions.call(this,deprecatedOptions,opts,"DEPRECATED","warn"),this._metaOpts=getMetaSchemaOptions.call(this),opts.formats&& -addInitialFormats.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),opts.keywords&&addInitialKeywords.call(this,opts.keywords),typeof opts.meta=="object"&&this.addMetaSchema(opts.meta),addInitialSchemas.call(this),opts.validateFormats=formatOpt}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data,meta,schemaId}=this.opts;let _dataRefSchema=$dataRefSchema;schemaId==="id"&&(_dataRefSchema={...$dataRefSchema},_dataRefSchema.id=_dataRefSchema.$id,delete _dataRefSchema. -$id),meta&&$data&&this.addMetaSchema(_dataRefSchema,_dataRefSchema[schemaId],!1)}defaultMeta(){const{meta,schemaId}=this.opts;return this.opts.defaultMeta=typeof meta=="object"?meta[schemaId]||meta:void 0}validate(schemaKeyRef,data){let v;if(typeof schemaKeyRef=="string"){if(v=this.getSchema(schemaKeyRef),!v)throw new Error(`no schema with key or ref "${schemaKeyRef}"`)}else v=this.compile(schemaKeyRef);const valid2=v(data);return"$async"in v||(this.errors=v.errors),valid2}compile(schema,_meta){ -const sch=this._addSchema(schema,_meta);return sch.validate||this._compileSchemaEnv(sch)}compileAsync(schema,meta){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema}=this.opts;return runCompileAsync.call(this,schema,meta);async function runCompileAsync(_schema,_meta){await loadMetaSchema.call(this,_schema.$schema);const sch=this._addSchema(_schema,_meta);return sch.validate||_compileAsync.call(this,sch)}async function loadMetaSchema($ref){ -$ref&&!this.getSchema($ref)&&await runCompileAsync.call(this,{$ref},!0)}async function _compileAsync(sch){try{return this._compileSchemaEnv(sch)}catch(e){if(!(e instanceof ref_error_1.default))throw e;return checkLoaded.call(this,e),await loadMissingSchema.call(this,e.missingSchema),_compileAsync.call(this,sch)}}function checkLoaded({missingSchema:ref2,missingRef}){if(this.refs[ref2])throw new Error(`AnySchema ${ref2} is loaded but ${missingRef} cannot be resolved`)}async function loadMissingSchema(ref2){ -const _schema=await _loadSchema.call(this,ref2);this.refs[ref2]||await loadMetaSchema.call(this,_schema.$schema),this.refs[ref2]||this.addSchema(_schema,ref2,meta)}async function _loadSchema(ref2){const p2=this._loading[ref2];if(p2)return p2;try{return await(this._loading[ref2]=loadSchema(ref2))}finally{delete this._loading[ref2]}}}addSchema(schema,key2,_meta,_validateSchema=this.opts.validateSchema){if(Array.isArray(schema)){for(const sch of schema)this.addSchema(sch,void 0,_meta,_validateSchema); -return this}let id2;if(typeof schema=="object"){const{schemaId}=this.opts;if(id2=schema[schemaId],id2!==void 0&&typeof id2!="string")throw new Error(`schema ${schemaId} must be string`)}return key2=(0,resolve_1.normalizeId)(key2||id2),this._checkUnique(key2),this.schemas[key2]=this._addSchema(schema,_meta,key2,_validateSchema,!0),this}addMetaSchema(schema,key2,_validateSchema=this.opts.validateSchema){return this.addSchema(schema,key2,!0,_validateSchema),this}validateSchema(schema,throwOrLogError){ -if(typeof schema=="boolean")return!0;let $schema2;if($schema2=schema.$schema,$schema2!==void 0&&typeof $schema2!="string")throw new Error("$schema must be a string");if($schema2=$schema2||this.opts.defaultMeta||this.defaultMeta(),!$schema2)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const valid2=this.validate($schema2,schema);if(!valid2&&throwOrLogError){const message="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(message);else -throw new Error(message)}return valid2}getSchema(keyRef){let sch;for(;typeof(sch=getSchEnv.call(this,keyRef))=="string";)keyRef=sch;if(sch===void 0){const{schemaId}=this.opts,root2=new compile_1.SchemaEnv({schema:{},schemaId});if(sch=compile_1.resolveSchema.call(this,root2,keyRef),!sch)return;this.refs[keyRef]=sch}return sch.validate||this._compileSchemaEnv(sch)}removeSchema(schemaKeyRef){if(schemaKeyRef instanceof RegExp)return this._removeAllSchemas(this.schemas,schemaKeyRef),this._removeAllSchemas( -this.refs,schemaKeyRef),this;switch(typeof schemaKeyRef){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const sch=getSchEnv.call(this,schemaKeyRef);return typeof sch=="object"&&this._cache.delete(sch.schema),delete this.schemas[schemaKeyRef],delete this.refs[schemaKeyRef],this}case"object":{const cacheKey=schemaKeyRef;this._cache.delete(cacheKey);let id2=schemaKeyRef[this.opts.schemaId];return id2&&(id2=(0,resolve_1. -normalizeId)(id2),delete this.schemas[id2],delete this.refs[id2]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(definitions2){for(const def of definitions2)this.addKeyword(def);return this}addKeyword(kwdOrDef,def){let keyword2;if(typeof kwdOrDef=="string")keyword2=kwdOrDef,typeof def=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),def.keyword=keyword2);else if(typeof kwdOrDef=="object"&&def===void 0){if(def=kwdOrDef,keyword2= -def.keyword,Array.isArray(keyword2)&&!keyword2.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(checkKeyword.call(this,keyword2,def),!def)return(0,util_1.eachItem)(keyword2,kwd=>addRule.call(this,kwd)),this;keywordMetaschema.call(this,def);const definition2={...def,type:(0,dataType_1.getJSONTypes)(def.type),schemaType:(0,dataType_1.getJSONTypes)(def.schemaType)};return(0,util_1.eachItem)(keyword2,definition2. -type.length===0?k=>addRule.call(this,k,definition2):k=>definition2.type.forEach(t=>addRule.call(this,k,definition2,t))),this}getKeyword(keyword2){const rule=this.RULES.all[keyword2];return typeof rule=="object"?rule.definition:!!rule}removeKeyword(keyword2){const{RULES}=this;delete RULES.keywords[keyword2],delete RULES.all[keyword2];for(const group of RULES.rules){const i=group.rules.findIndex(rule=>rule.keyword===keyword2);i>=0&&group.rules.splice(i,1)}return this}addFormat(name,format2){return typeof format2== -"string"&&(format2=new RegExp(format2)),this.formats[name]=format2,this}errorsText(errors2=this.errors,{separator=", ",dataVar="data"}={}){return!errors2||errors2.length===0?"No errors":errors2.map(e=>`${dataVar}${e.instancePath} ${e.message}`).reduce((text2,msg)=>text2+separator+msg)}$dataMetaSchema(metaSchema,keywordsJsonPointers){const rules2=this.RULES.all;metaSchema=JSON.parse(JSON.stringify(metaSchema));for(const jsonPointer of keywordsJsonPointers){const segments=jsonPointer.split("/").slice( -1);let keywords2=metaSchema;for(const seg of segments)keywords2=keywords2[seg];for(const key2 in rules2){const rule=rules2[key2];if(typeof rule!="object")continue;const{$data}=rule.definition,schema=keywords2[key2];$data&&schema&&(keywords2[key2]=schemaOrData(schema))}}return metaSchema}_removeAllSchemas(schemas,regex){for(const keyRef in schemas){const sch=schemas[keyRef];(!regex||regex.test(keyRef))&&(typeof sch=="string"?delete schemas[keyRef]:sch&&!sch.meta&&(this._cache.delete(sch.schema),delete schemas[keyRef]))}}_addSchema(schema,meta,baseId,validateSchema=this. -opts.validateSchema,addSchema=this.opts.addUsedSchema){let id2;const{schemaId}=this.opts;if(typeof schema=="object")id2=schema[schemaId];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof schema!="boolean")throw new Error("schema must be object or boolean")}let sch=this._cache.get(schema);if(sch!==void 0)return sch;baseId=(0,resolve_1.normalizeId)(id2||baseId);const localRefs=resolve_1.getSchemaRefs.call(this,schema,baseId);return sch=new compile_1.SchemaEnv({schema,schemaId, -meta,baseId,localRefs}),this._cache.set(sch.schema,sch),addSchema&&!baseId.startsWith("#")&&(baseId&&this._checkUnique(baseId),this.refs[baseId]=sch),validateSchema&&this.validateSchema(schema,!0),sch}_checkUnique(id2){if(this.schemas[id2]||this.refs[id2])throw new Error(`schema with key or id "${id2}" already exists`)}_compileSchemaEnv(sch){if(sch.meta?this._compileMetaSchema(sch):compile_1.compileSchema.call(this,sch),!sch.validate)throw new Error("ajv implementation error");return sch.validate}_compileMetaSchema(sch){ -const currentOpts=this.opts;this.opts=this._metaOpts;try{compile_1.compileSchema.call(this,sch)}finally{this.opts=currentOpts}}}Ajv2.ValidationError=validation_error_1.default,Ajv2.MissingRefError=ref_error_1.default,exports.default=Ajv2;function checkOptions(checkOpts,options,msg,log="error"){for(const key2 in checkOpts){const opt=key2;opt in options&&this.logger[log](`${msg}: option ${key2}. ${checkOpts[opt]}`)}}function getSchEnv(keyRef){return keyRef=(0,resolve_1.normalizeId)(keyRef),this.schemas[keyRef]|| -this.refs[keyRef]}function addInitialSchemas(){const optsSchemas=this.opts.schemas;if(optsSchemas)if(Array.isArray(optsSchemas))this.addSchema(optsSchemas);else for(const key2 in optsSchemas)this.addSchema(optsSchemas[key2],key2)}function addInitialFormats(){for(const name in this.opts.formats){const format2=this.opts.formats[name];format2&&this.addFormat(name,format2)}}function addInitialKeywords(defs){if(Array.isArray(defs)){this.addVocabulary(defs);return}this.logger.warn("keywords option as \ -map is deprecated, pass array");for(const keyword2 in defs){const def=defs[keyword2];def.keyword||(def.keyword=keyword2),this.addKeyword(def)}}function getMetaSchemaOptions(){const metaOpts={...this.opts};for(const opt of META_IGNORE_OPTIONS)delete metaOpts[opt];return metaOpts}const noLogs={log(){},warn(){},error(){}};function getLogger(logger){if(logger===!1)return noLogs;if(logger===void 0)return console;if(logger.log&&logger.warn&&logger.error)return logger;throw new Error("logger must imple\ -ment log, warn and error methods")}const KEYWORD_NAME=/^[a-z_$][a-z0-9_$:-]*$/i;function checkKeyword(keyword2,def){const{RULES}=this;if((0,util_1.eachItem)(keyword2,kwd=>{if(RULES.keywords[kwd])throw new Error(`Keyword ${kwd} is already defined`);if(!KEYWORD_NAME.test(kwd))throw new Error(`Keyword ${kwd} has invalid name`)}),!!def&&def.$data&&!("code"in def||"validate"in def))throw new Error('$data keyword must have "code" or "validate" function')}function addRule(keyword2,definition2,dataType2){ -var _a2;const post=definition2?.post;if(dataType2&&post)throw new Error('keyword with "post" flag cannot have "type"');const{RULES}=this;let ruleGroup=post?RULES.post:RULES.rules.find(({type:t})=>t===dataType2);if(ruleGroup||(ruleGroup={type:dataType2,rules:[]},RULES.rules.push(ruleGroup)),RULES.keywords[keyword2]=!0,!definition2)return;const rule={keyword:keyword2,definition:{...definition2,type:(0,dataType_1.getJSONTypes)(definition2.type),schemaType:(0,dataType_1.getJSONTypes)(definition2.schemaType)}}; -definition2.before?addBeforeRule.call(this,ruleGroup,rule,definition2.before):ruleGroup.rules.push(rule),RULES.all[keyword2]=rule,(_a2=definition2.implements)===null||_a2===void 0||_a2.forEach(kwd=>this.addKeyword(kwd))}function addBeforeRule(ruleGroup,rule,before){const i=ruleGroup.rules.findIndex(_rule=>_rule.keyword===before);i>=0?ruleGroup.rules.splice(i,0,rule):(ruleGroup.rules.push(rule),this.logger.warn(`rule ${before} is not defined`))}function keywordMetaschema(def){let{metaSchema}=def; -metaSchema!==void 0&&(def.$data&&this.opts.$data&&(metaSchema=schemaOrData(metaSchema)),def.validateSchema=this.compile(metaSchema,!0))}const $dataRef={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function schemaOrData(schema){return{anyOf:[schema,$dataRef]}}}(core$4)),core$4}var draft7$1={},core$3={},id$1={},hasRequiredId$1;function requireId$1(){if(hasRequiredId$1)return id$1;hasRequiredId$1=1,Object.defineProperty(id$1,"__esModule",{value:!0});const def={ -keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};return id$1.default=def,id$1}var ref$1={},hasRequiredRef$1;function requireRef$1(){if(hasRequiredRef$1)return ref$1;hasRequiredRef$1=1,Object.defineProperty(ref$1,"__esModule",{value:!0}),ref$1.callRef=ref$1.getValidate=void 0;const ref_error_1=requireRef_error$1(),code_1=requireCode$2(),codegen_1=requireCodegen$1(),names_1=requireNames$1(),compile_1=requireCompile$1(),util_1=requireUtil$1(),def={keyword:"\ -$ref",schemaType:"string",code(cxt){const{gen,schema:$ref,it}=cxt,{baseId,schemaEnv:env2,validateName,opts,self:self2}=it,{root:root2}=env2;if(($ref==="#"||$ref==="#/")&&baseId===root2.baseId)return callRootRef();const schOrEnv=compile_1.resolveRef.call(self2,root2,baseId,$ref);if(schOrEnv===void 0)throw new ref_error_1.default(it.opts.uriResolver,baseId,$ref);if(schOrEnv instanceof compile_1.SchemaEnv)return callValidate(schOrEnv);return inlineRefSchema(schOrEnv);function callRootRef(){if(env2=== -root2)return callRef(cxt,validateName,env2,env2.$async);const rootName=gen.scopeValue("root",{ref:root2});return callRef(cxt,(0,codegen_1._)`${rootName}.validate`,root2,root2.$async)}function callValidate(sch){const v=getValidate(cxt,sch);callRef(cxt,v,sch,sch.$async)}function inlineRefSchema(sch){const schName=gen.scopeValue("schema",opts.code.source===!0?{ref:sch,code:(0,codegen_1.stringify)(sch)}:{ref:sch}),valid2=gen.name("valid"),schCxt=cxt.subschema({schema:sch,dataTypes:[],schemaPath:codegen_1. -nil,topSchemaRef:schName,errSchemaPath:$ref},valid2);cxt.mergeEvaluated(schCxt),cxt.ok(valid2)}}};function getValidate(cxt,sch){const{gen}=cxt;return sch.validate?gen.scopeValue("validate",{ref:sch.validate}):(0,codegen_1._)`${gen.scopeValue("wrapper",{ref:sch})}.validate`}ref$1.getValidate=getValidate;function callRef(cxt,v,sch,$async){const{gen,it}=cxt,{allErrors,schemaEnv:env2,opts}=it,passCxt=opts.passContext?names_1.default.this:codegen_1.nil;$async?callAsyncRef():callSyncRef();function callAsyncRef(){ -if(!env2.$async)throw new Error("async schema referenced by sync schema");const valid2=gen.let("valid");gen.try(()=>{gen.code((0,codegen_1._)`await ${(0,code_1.callValidateCode)(cxt,v,passCxt)}`),addEvaluatedFrom(v),allErrors||gen.assign(valid2,!0)},e=>{gen.if((0,codegen_1._)`!(${e} instanceof ${it.ValidationError})`,()=>gen.throw(e)),addErrorsFrom(e),allErrors||gen.assign(valid2,!1)}),cxt.ok(valid2)}function callSyncRef(){cxt.result((0,code_1.callValidateCode)(cxt,v,passCxt),()=>addEvaluatedFrom( -v),()=>addErrorsFrom(v))}function addErrorsFrom(source2){const errs=(0,codegen_1._)`${source2}.errors`;gen.assign(names_1.default.vErrors,(0,codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`),gen.assign(names_1.default.errors,(0,codegen_1._)`${names_1.default.vErrors}.length`)}function addEvaluatedFrom(source2){var _a2;if(!it.opts.unevaluated)return;const schEvaluated=(_a2=sch?.validate)===null||_a2===void 0?void 0:_a2.evaluated;if(it.props!== -!0)if(schEvaluated&&!schEvaluated.dynamicProps)schEvaluated.props!==void 0&&(it.props=util_1.mergeEvaluated.props(gen,schEvaluated.props,it.props));else{const props=gen.var("props",(0,codegen_1._)`${source2}.evaluated.props`);it.props=util_1.mergeEvaluated.props(gen,props,it.props,codegen_1.Name)}if(it.items!==!0)if(schEvaluated&&!schEvaluated.dynamicItems)schEvaluated.items!==void 0&&(it.items=util_1.mergeEvaluated.items(gen,schEvaluated.items,it.items));else{const items2=gen.var("items",(0,codegen_1. -_)`${source2}.evaluated.items`);it.items=util_1.mergeEvaluated.items(gen,items2,it.items,codegen_1.Name)}}}return ref$1.callRef=callRef,ref$1.default=def,ref$1}var hasRequiredCore$2;function requireCore$2(){if(hasRequiredCore$2)return core$3;hasRequiredCore$2=1,Object.defineProperty(core$3,"__esModule",{value:!0});const id_1=requireId$1(),ref_1=requireRef$1(),core2=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",id_1.default,ref_1.default];return core$3.default=core2,core$3} -var validation$1={},limitNumber$1={},hasRequiredLimitNumber$1;function requireLimitNumber$1(){if(hasRequiredLimitNumber$1)return limitNumber$1;hasRequiredLimitNumber$1=1,Object.defineProperty(limitNumber$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),ops=codegen_1.operators,KWDs={maximum:{okStr:"<=",ok:ops.LTE,fail:ops.GT},minimum:{okStr:">=",ok:ops.GTE,fail:ops.LT},exclusiveMaximum:{okStr:"<",ok:ops.LT,fail:ops.GTE},exclusiveMinimum:{okStr:">",ok:ops.GT,fail:ops.LTE}},error2={message:({ -keyword:keyword2,schemaCode})=>(0,codegen_1.str)`must be ${KWDs[keyword2].okStr} ${schemaCode}`,params:({keyword:keyword2,schemaCode})=>(0,codegen_1._)`{comparison: ${KWDs[keyword2].okStr}, limit: ${schemaCode}}`},def={keyword:Object.keys(KWDs),type:"number",schemaType:"number",$data:!0,error:error2,code(cxt){const{keyword:keyword2,data,schemaCode}=cxt;cxt.fail$data((0,codegen_1._)`${data} ${KWDs[keyword2].fail} ${schemaCode} || isNaN(${data})`)}};return limitNumber$1.default=def,limitNumber$1}var multipleOf$1={}, -hasRequiredMultipleOf$1;function requireMultipleOf$1(){if(hasRequiredMultipleOf$1)return multipleOf$1;hasRequiredMultipleOf$1=1,Object.defineProperty(multipleOf$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),def={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode})=>(0,codegen_1.str)`must be multiple of ${schemaCode}`,params:({schemaCode})=>(0,codegen_1._)`{multipleOf: ${schemaCode}}`},code(cxt){const{gen,data,schemaCode,it}=cxt,prec=it.opts. -multipleOfPrecision,res=gen.let("res"),invalid2=prec?(0,codegen_1._)`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`:(0,codegen_1._)`${res} !== parseInt(${res})`;cxt.fail$data((0,codegen_1._)`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid2}))`)}};return multipleOf$1.default=def,multipleOf$1}var limitLength$1={},ucs2length$1={},hasRequiredUcs2length$1;function requireUcs2length$1(){if(hasRequiredUcs2length$1)return ucs2length$1;hasRequiredUcs2length$1=1,Object.defineProperty( -ucs2length$1,"__esModule",{value:!0});function ucs2length2(str){const len=str.length;let length=0,pos=0,value;for(;pos<len;)length++,value=str.charCodeAt(pos++),value>=55296&&value<=56319&&pos<len&&(value=str.charCodeAt(pos),(value&64512)===56320&&pos++);return length}return ucs2length$1.default=ucs2length2,ucs2length2.code='require("ajv/dist/runtime/ucs2length").default',ucs2length$1}var hasRequiredLimitLength$1;function requireLimitLength$1(){if(hasRequiredLimitLength$1)return limitLength$1;hasRequiredLimitLength$1= -1,Object.defineProperty(limitLength$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),ucs2length_1=requireUcs2length$1(),def={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2==="maxLength"?"more":"fewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} characters`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2, -data,schemaCode,it}=cxt,op2=keyword2==="maxLength"?codegen_1.operators.GT:codegen_1.operators.LT,len=it.opts.unicode===!1?(0,codegen_1._)`${data}.length`:(0,codegen_1._)`${(0,util_1.useFunc)(cxt.gen,ucs2length_1.default)}(${data})`;cxt.fail$data((0,codegen_1._)`${len} ${op2} ${schemaCode}`)}};return limitLength$1.default=def,limitLength$1}var pattern$1={},hasRequiredPattern$1;function requirePattern$1(){if(hasRequiredPattern$1)return pattern$1;hasRequiredPattern$1=1,Object.defineProperty(pattern$1, -"__esModule",{value:!0});const code_1=requireCode$2(),codegen_1=requireCodegen$1(),def={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode})=>(0,codegen_1.str)`must match pattern "${schemaCode}"`,params:({schemaCode})=>(0,codegen_1._)`{pattern: ${schemaCode}}`},code(cxt){const{data,$data,schema,schemaCode,it}=cxt,u=it.opts.unicodeRegExp?"u":"",regExp=$data?(0,codegen_1._)`(new RegExp(${schemaCode}, ${u}))`:(0,code_1.usePattern)(cxt,schema);cxt.fail$data((0,codegen_1. -_)`!${regExp}.test(${data})`)}};return pattern$1.default=def,pattern$1}var limitProperties$1={},hasRequiredLimitProperties$1;function requireLimitProperties$1(){if(hasRequiredLimitProperties$1)return limitProperties$1;hasRequiredLimitProperties$1=1,Object.defineProperty(limitProperties$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),def={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2=== -"maxProperties"?"more":"fewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} properties`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2,data,schemaCode}=cxt,op2=keyword2==="maxProperties"?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`Object.keys(${data}).length ${op2} ${schemaCode}`)}};return limitProperties$1.default=def,limitProperties$1}var required$2={},hasRequiredRequired$1;function requireRequired$1(){ -if(hasRequiredRequired$1)return required$2;hasRequiredRequired$1=1,Object.defineProperty(required$2,"__esModule",{value:!0});const code_1=requireCode$2(),codegen_1=requireCodegen$1(),util_1=requireUtil$1(),def={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty}})=>(0,codegen_1.str)`must have required property '${missingProperty}'`,params:({params:{missingProperty}})=>(0,codegen_1._)`{missingProperty: ${missingProperty}}`},code(cxt){const{gen,schema, -schemaCode,data,$data,it}=cxt,{opts}=it;if(!$data&&schema.length===0)return;const useLoop=schema.length>=opts.loopRequired;if(it.allErrors?allErrorsMode():exitOnErrorMode(),opts.strictRequired){const props=cxt.parentSchema.properties,{definedProperties}=cxt.it;for(const requiredKey of schema)if(props?.[requiredKey]===void 0&&!definedProperties.has(requiredKey)){const schemaPath=it.schemaEnv.baseId+it.errSchemaPath,msg=`required property "${requiredKey}" is not defined at "${schemaPath}" (strictR\ -equired)`;(0,util_1.checkStrictMode)(it,msg,it.opts.strictRequired)}}function allErrorsMode(){if(useLoop||$data)cxt.block$data(codegen_1.nil,loopAllRequired);else for(const prop2 of schema)(0,code_1.checkReportMissingProp)(cxt,prop2)}function exitOnErrorMode(){const missing=gen.let("missing");if(useLoop||$data){const valid2=gen.let("valid",!0);cxt.block$data(valid2,()=>loopUntilMissing(missing,valid2)),cxt.ok(valid2)}else gen.if((0,code_1.checkMissingProp)(cxt,schema,missing)),(0,code_1.reportMissingProp)( -cxt,missing),gen.else()}function loopAllRequired(){gen.forOf("prop",schemaCode,prop2=>{cxt.setParams({missingProperty:prop2}),gen.if((0,code_1.noPropertyInData)(gen,data,prop2,opts.ownProperties),()=>cxt.error())})}function loopUntilMissing(missing,valid2){cxt.setParams({missingProperty:missing}),gen.forOf(missing,schemaCode,()=>{gen.assign(valid2,(0,code_1.propertyInData)(gen,data,missing,opts.ownProperties)),gen.if((0,codegen_1.not)(valid2),()=>{cxt.error(),gen.break()})},codegen_1.nil)}}};return required$2. -default=def,required$2}var limitItems$1={},hasRequiredLimitItems$1;function requireLimitItems$1(){if(hasRequiredLimitItems$1)return limitItems$1;hasRequiredLimitItems$1=1,Object.defineProperty(limitItems$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),def={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2==="maxItems"?"more":"fewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`}, -params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2,data,schemaCode}=cxt,op2=keyword2==="maxItems"?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`${data}.length ${op2} ${schemaCode}`)}};return limitItems$1.default=def,limitItems$1}var uniqueItems$1={},equal$1={},hasRequiredEqual$1;function requireEqual$1(){if(hasRequiredEqual$1)return equal$1;hasRequiredEqual$1=1,Object.defineProperty(equal$1,"__esModule",{value:!0});const equal2=requireFastDeepEqual(); -return equal2.code='require("ajv/dist/runtime/equal").default',equal$1.default=equal2,equal$1}var hasRequiredUniqueItems$1;function requireUniqueItems$1(){if(hasRequiredUniqueItems$1)return uniqueItems$1;hasRequiredUniqueItems$1=1,Object.defineProperty(uniqueItems$1,"__esModule",{value:!0});const dataType_1=requireDataType$1(),codegen_1=requireCodegen$1(),util_1=requireUtil$1(),equal_1=requireEqual$1(),def={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{ -i,j}})=>(0,codegen_1.str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,params:({params:{i,j}})=>(0,codegen_1._)`{i: ${i}, j: ${j}}`},code(cxt){const{gen,data,$data,schema,parentSchema,schemaCode,it}=cxt;if(!$data&&!schema)return;const valid2=gen.let("valid"),itemTypes=parentSchema.items?(0,dataType_1.getSchemaTypes)(parentSchema.items):[];cxt.block$data(valid2,validateUniqueItems,(0,codegen_1._)`${schemaCode} === false`),cxt.ok(valid2);function validateUniqueItems(){const i=gen. -let("i",(0,codegen_1._)`${data}.length`),j=gen.let("j");cxt.setParams({i,j}),gen.assign(valid2,!0),gen.if((0,codegen_1._)`${i} > 1`,()=>(canOptimize()?loopN:loopN2)(i,j))}function canOptimize(){return itemTypes.length>0&&!itemTypes.some(t=>t==="object"||t==="array")}function loopN(i,j){const item=gen.name("item"),wrongType=(0,dataType_1.checkDataTypes)(itemTypes,item,it.opts.strictNumbers,dataType_1.DataType.Wrong),indices=gen.const("indices",(0,codegen_1._)`{}`);gen.for((0,codegen_1._)`;${i}--;`, -()=>{gen.let(item,(0,codegen_1._)`${data}[${i}]`),gen.if(wrongType,(0,codegen_1._)`continue`),itemTypes.length>1&&gen.if((0,codegen_1._)`typeof ${item} == "string"`,(0,codegen_1._)`${item} += "_"`),gen.if((0,codegen_1._)`typeof ${indices}[${item}] == "number"`,()=>{gen.assign(j,(0,codegen_1._)`${indices}[${item}]`),cxt.error(),gen.assign(valid2,!1).break()}).code((0,codegen_1._)`${indices}[${item}] = ${i}`)})}function loopN2(i,j){const eql=(0,util_1.useFunc)(gen,equal_1.default),outer=gen.name("\ -outer");gen.label(outer).for((0,codegen_1._)`;${i}--;`,()=>gen.for((0,codegen_1._)`${j} = ${i}; ${j}--;`,()=>gen.if((0,codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`,()=>{cxt.error(),gen.assign(valid2,!1).break(outer)})))}}};return uniqueItems$1.default=def,uniqueItems$1}var _const$1={},hasRequired_const$1;function require_const$1(){if(hasRequired_const$1)return _const$1;hasRequired_const$1=1,Object.defineProperty(_const$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),util_1=requireUtil$1(), -equal_1=requireEqual$1(),def={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode})=>(0,codegen_1._)`{allowedValue: ${schemaCode}}`},code(cxt){const{gen,data,$data,schemaCode,schema}=cxt;$data||schema&&typeof schema=="object"?cxt.fail$data((0,codegen_1._)`!${(0,util_1.useFunc)(gen,equal_1.default)}(${data}, ${schemaCode})`):cxt.fail((0,codegen_1._)`${schema} !== ${data}`)}};return _const$1.default=def,_const$1}var _enum$1={},hasRequired_enum$1;function require_enum$1(){ -if(hasRequired_enum$1)return _enum$1;hasRequired_enum$1=1,Object.defineProperty(_enum$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),equal_1=requireEqual$1(),def={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode})=>(0,codegen_1._)`{allowedValues: ${schemaCode}}`},code(cxt){const{gen,data,$data,schema,schemaCode,it}=cxt;if(!$data&&schema.length===0)throw new Error("enum must have non-em\ -pty array");const useLoop=schema.length>=it.opts.loopEnum;let eql;const getEql=()=>eql??(eql=(0,util_1.useFunc)(gen,equal_1.default));let valid2;if(useLoop||$data)valid2=gen.let("valid"),cxt.block$data(valid2,loopEnum);else{if(!Array.isArray(schema))throw new Error("ajv implementation error");const vSchema=gen.const("vSchema",schemaCode);valid2=(0,codegen_1.or)(...schema.map((_x,i)=>equalCode(vSchema,i)))}cxt.pass(valid2);function loopEnum(){gen.assign(valid2,!1),gen.forOf("v",schemaCode,v=>gen. -if((0,codegen_1._)`${getEql()}(${data}, ${v})`,()=>gen.assign(valid2,!0).break()))}function equalCode(vSchema,i){const sch=schema[i];return typeof sch=="object"&&sch!==null?(0,codegen_1._)`${getEql()}(${data}, ${vSchema}[${i}])`:(0,codegen_1._)`${data} === ${sch}`}}};return _enum$1.default=def,_enum$1}var hasRequiredValidation$1;function requireValidation$1(){if(hasRequiredValidation$1)return validation$1;hasRequiredValidation$1=1,Object.defineProperty(validation$1,"__esModule",{value:!0});const limitNumber_1=requireLimitNumber$1(), -multipleOf_1=requireMultipleOf$1(),limitLength_1=requireLimitLength$1(),pattern_1=requirePattern$1(),limitProperties_1=requireLimitProperties$1(),required_1=requireRequired$1(),limitItems_1=requireLimitItems$1(),uniqueItems_1=requireUniqueItems$1(),const_1=require_const$1(),enum_1=require_enum$1(),validation2=[limitNumber_1.default,multipleOf_1.default,limitLength_1.default,pattern_1.default,limitProperties_1.default,required_1.default,limitItems_1.default,uniqueItems_1.default,{keyword:"type",schemaType:[ -"string","array"]},{keyword:"nullable",schemaType:"boolean"},const_1.default,enum_1.default];return validation$1.default=validation2,validation$1}var applicator$1={},additionalItems$1={},hasRequiredAdditionalItems$1;function requireAdditionalItems$1(){if(hasRequiredAdditionalItems$1)return additionalItems$1;hasRequiredAdditionalItems$1=1,Object.defineProperty(additionalItems$1,"__esModule",{value:!0}),additionalItems$1.validateAdditionalItems=void 0;const codegen_1=requireCodegen$1(),util_1=requireUtil$1(), -def={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len}})=>(0,codegen_1.str)`must NOT have more than ${len} items`,params:({params:{len}})=>(0,codegen_1._)`{limit: ${len}}`},code(cxt){const{parentSchema,it}=cxt,{items:items2}=parentSchema;if(!Array.isArray(items2)){(0,util_1.checkStrictMode)(it,'"additionalItems" is ignored when "items" is not an array of schemas');return}validateAdditionalItems(cxt,items2)}};function validateAdditionalItems(cxt,items2){ +if(hasRequiredUri$1)return uri$1;hasRequiredUri$1=1,Object.defineProperty(uri$1,"__esModule",{value:!0});const uri2=requireFastUri();return uri2.code='require("ajv/dist/runtime/uri").default',uri$1.default=uri2,uri$1}var hasRequiredCore$3;function requireCore$3(){return hasRequiredCore$3||(hasRequiredCore$3=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.CodeGen=exports$1.Name=exports$1.nil=exports$1.stringify=exports$1.str=exports$1._=exports$1.KeywordCxt= +void 0;var validate_1=requireValidate$1();Object.defineProperty(exports$1,"KeywordCxt",{enumerable:!0,get:function(){return validate_1.KeywordCxt}});var codegen_1=requireCodegen$1();Object.defineProperty(exports$1,"_",{enumerable:!0,get:function(){return codegen_1._}}),Object.defineProperty(exports$1,"str",{enumerable:!0,get:function(){return codegen_1.str}}),Object.defineProperty(exports$1,"stringify",{enumerable:!0,get:function(){return codegen_1.stringify}}),Object.defineProperty(exports$1,"n\ +il",{enumerable:!0,get:function(){return codegen_1.nil}}),Object.defineProperty(exports$1,"Name",{enumerable:!0,get:function(){return codegen_1.Name}}),Object.defineProperty(exports$1,"CodeGen",{enumerable:!0,get:function(){return codegen_1.CodeGen}});const validation_error_1=requireValidation_error$1(),ref_error_1=requireRef_error$1(),rules_1=requireRules$1(),compile_1=requireCompile$1(),codegen_2=requireCodegen$1(),resolve_1=requireResolve$1(),dataType_1=requireDataType$1(),util_1=requireUtil$1(), +$dataRefSchema=require$$9$1,uri_1=requireUri$1(),defaultRegExp=(str,flags2)=>new RegExp(str,flags2);defaultRegExp.code="new RegExp";const META_IGNORE_OPTIONS=["removeAdditional","useDefaults","coerceTypes"],EXT_SCOPE_NAMES=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),removedOptions={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.', +jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always v\ +alidated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},deprecatedOptions={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},MAX_EXPRESSION=200;function requiredOptions(o){var _a2,_b,_c,_d,_e,_f,_g,_h,_j,_k,_l,_m,_o,_p,_q,_r,_s,_t,_u,_v,_w, +_x,_y,_z,_02;const s2=o.strict,_optz=(_a2=o.code)===null||_a2===void 0?void 0:_a2.optimize,optimize=_optz===!0||_optz===void 0?1:_optz||0,regExp=(_c=(_b=o.code)===null||_b===void 0?void 0:_b.regExp)!==null&&_c!==void 0?_c:defaultRegExp,uriResolver=(_d=o.uriResolver)!==null&&_d!==void 0?_d:uri_1.default;return{strictSchema:(_f=(_e=o.strictSchema)!==null&&_e!==void 0?_e:s2)!==null&&_f!==void 0?_f:!0,strictNumbers:(_h=(_g=o.strictNumbers)!==null&&_g!==void 0?_g:s2)!==null&&_h!==void 0?_h:!0,strictTypes:(_k= +(_j=o.strictTypes)!==null&&_j!==void 0?_j:s2)!==null&&_k!==void 0?_k:"log",strictTuples:(_m=(_l=o.strictTuples)!==null&&_l!==void 0?_l:s2)!==null&&_m!==void 0?_m:"log",strictRequired:(_p=(_o=o.strictRequired)!==null&&_o!==void 0?_o:s2)!==null&&_p!==void 0?_p:!1,code:o.code?{...o.code,optimize,regExp}:{optimize,regExp},loopRequired:(_q=o.loopRequired)!==null&&_q!==void 0?_q:MAX_EXPRESSION,loopEnum:(_r=o.loopEnum)!==null&&_r!==void 0?_r:MAX_EXPRESSION,meta:(_s=o.meta)!==null&&_s!==void 0?_s:!0,messages:(_t= +o.messages)!==null&&_t!==void 0?_t:!0,inlineRefs:(_u=o.inlineRefs)!==null&&_u!==void 0?_u:!0,schemaId:(_v=o.schemaId)!==null&&_v!==void 0?_v:"$id",addUsedSchema:(_w=o.addUsedSchema)!==null&&_w!==void 0?_w:!0,validateSchema:(_x=o.validateSchema)!==null&&_x!==void 0?_x:!0,validateFormats:(_y=o.validateFormats)!==null&&_y!==void 0?_y:!0,unicodeRegExp:(_z=o.unicodeRegExp)!==null&&_z!==void 0?_z:!0,int32range:(_02=o.int32range)!==null&&_02!==void 0?_02:!0,uriResolver}}class Ajv2{constructor(opts={}){ +this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,opts=this.opts={...opts,...requiredOptions(opts)};const{es5,lines}=this.opts.code;this.scope=new codegen_2.ValueScope({scope:{},prefixes:EXT_SCOPE_NAMES,es5,lines}),this.logger=getLogger(opts.logger);const formatOpt=opts.validateFormats;opts.validateFormats=!1,this.RULES=(0,rules_1.getRules)(),checkOptions.call(this,removedOptions,opts,"NOT SUPPORTED"),checkOptions.call(this,deprecatedOptions, +opts,"DEPRECATED","warn"),this._metaOpts=getMetaSchemaOptions.call(this),opts.formats&&addInitialFormats.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),opts.keywords&&addInitialKeywords.call(this,opts.keywords),typeof opts.meta=="object"&&this.addMetaSchema(opts.meta),addInitialSchemas.call(this),opts.validateFormats=formatOpt}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data,meta,schemaId}=this.opts;let _dataRefSchema=$dataRefSchema;schemaId==="id"&& +(_dataRefSchema={...$dataRefSchema},_dataRefSchema.id=_dataRefSchema.$id,delete _dataRefSchema.$id),meta&&$data&&this.addMetaSchema(_dataRefSchema,_dataRefSchema[schemaId],!1)}defaultMeta(){const{meta,schemaId}=this.opts;return this.opts.defaultMeta=typeof meta=="object"?meta[schemaId]||meta:void 0}validate(schemaKeyRef,data){let v;if(typeof schemaKeyRef=="string"){if(v=this.getSchema(schemaKeyRef),!v)throw new Error(`no schema with key or ref "${schemaKeyRef}"`)}else v=this.compile(schemaKeyRef); +const valid2=v(data);return"$async"in v||(this.errors=v.errors),valid2}compile(schema,_meta){const sch=this._addSchema(schema,_meta);return sch.validate||this._compileSchemaEnv(sch)}compileAsync(schema,meta){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema}=this.opts;return runCompileAsync.call(this,schema,meta);async function runCompileAsync(_schema,_meta){await loadMetaSchema.call(this,_schema.$schema);const sch=this._addSchema( +_schema,_meta);return sch.validate||_compileAsync.call(this,sch)}async function loadMetaSchema($ref){$ref&&!this.getSchema($ref)&&await runCompileAsync.call(this,{$ref},!0)}async function _compileAsync(sch){try{return this._compileSchemaEnv(sch)}catch(e){if(!(e instanceof ref_error_1.default))throw e;return checkLoaded.call(this,e),await loadMissingSchema.call(this,e.missingSchema),_compileAsync.call(this,sch)}}function checkLoaded({missingSchema:ref2,missingRef}){if(this.refs[ref2])throw new Error( +`AnySchema ${ref2} is loaded but ${missingRef} cannot be resolved`)}async function loadMissingSchema(ref2){const _schema=await _loadSchema.call(this,ref2);this.refs[ref2]||await loadMetaSchema.call(this,_schema.$schema),this.refs[ref2]||this.addSchema(_schema,ref2,meta)}async function _loadSchema(ref2){const p2=this._loading[ref2];if(p2)return p2;try{return await(this._loading[ref2]=loadSchema(ref2))}finally{delete this._loading[ref2]}}}addSchema(schema,key2,_meta,_validateSchema=this.opts.validateSchema){ +if(Array.isArray(schema)){for(const sch of schema)this.addSchema(sch,void 0,_meta,_validateSchema);return this}let id2;if(typeof schema=="object"){const{schemaId}=this.opts;if(id2=schema[schemaId],id2!==void 0&&typeof id2!="string")throw new Error(`schema ${schemaId} must be string`)}return key2=(0,resolve_1.normalizeId)(key2||id2),this._checkUnique(key2),this.schemas[key2]=this._addSchema(schema,_meta,key2,_validateSchema,!0),this}addMetaSchema(schema,key2,_validateSchema=this.opts.validateSchema){ +return this.addSchema(schema,key2,!0,_validateSchema),this}validateSchema(schema,throwOrLogError){if(typeof schema=="boolean")return!0;let $schema2;if($schema2=schema.$schema,$schema2!==void 0&&typeof $schema2!="string")throw new Error("$schema must be a string");if($schema2=$schema2||this.opts.defaultMeta||this.defaultMeta(),!$schema2)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const valid2=this.validate($schema2,schema);if(!valid2&&throwOrLogError){const message="s\ +chema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(message);else throw new Error(message)}return valid2}getSchema(keyRef){let sch;for(;typeof(sch=getSchEnv.call(this,keyRef))=="string";)keyRef=sch;if(sch===void 0){const{schemaId}=this.opts,root2=new compile_1.SchemaEnv({schema:{},schemaId});if(sch=compile_1.resolveSchema.call(this,root2,keyRef),!sch)return;this.refs[keyRef]=sch}return sch.validate||this._compileSchemaEnv(sch)}removeSchema(schemaKeyRef){if(schemaKeyRef instanceof +RegExp)return this._removeAllSchemas(this.schemas,schemaKeyRef),this._removeAllSchemas(this.refs,schemaKeyRef),this;switch(typeof schemaKeyRef){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const sch=getSchEnv.call(this,schemaKeyRef);return typeof sch=="object"&&this._cache.delete(sch.schema),delete this.schemas[schemaKeyRef],delete this.refs[schemaKeyRef],this}case"object":{const cacheKey=schemaKeyRef;this._cache. +delete(cacheKey);let id2=schemaKeyRef[this.opts.schemaId];return id2&&(id2=(0,resolve_1.normalizeId)(id2),delete this.schemas[id2],delete this.refs[id2]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(definitions2){for(const def of definitions2)this.addKeyword(def);return this}addKeyword(kwdOrDef,def){let keyword2;if(typeof kwdOrDef=="string")keyword2=kwdOrDef,typeof def=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),def. +keyword=keyword2);else if(typeof kwdOrDef=="object"&&def===void 0){if(def=kwdOrDef,keyword2=def.keyword,Array.isArray(keyword2)&&!keyword2.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(checkKeyword.call(this,keyword2,def),!def)return(0,util_1.eachItem)(keyword2,kwd=>addRule.call(this,kwd)),this;keywordMetaschema.call(this,def);const definition2={...def,type:(0,dataType_1.getJSONTypes)(def.type),schemaType:(0,dataType_1. +getJSONTypes)(def.schemaType)};return(0,util_1.eachItem)(keyword2,definition2.type.length===0?k=>addRule.call(this,k,definition2):k=>definition2.type.forEach(t=>addRule.call(this,k,definition2,t))),this}getKeyword(keyword2){const rule=this.RULES.all[keyword2];return typeof rule=="object"?rule.definition:!!rule}removeKeyword(keyword2){const{RULES}=this;delete RULES.keywords[keyword2],delete RULES.all[keyword2];for(const group of RULES.rules){const i=group.rules.findIndex(rule=>rule.keyword===keyword2); +i>=0&&group.rules.splice(i,1)}return this}addFormat(name,format2){return typeof format2=="string"&&(format2=new RegExp(format2)),this.formats[name]=format2,this}errorsText(errors2=this.errors,{separator=", ",dataVar="data"}={}){return!errors2||errors2.length===0?"No errors":errors2.map(e=>`${dataVar}${e.instancePath} ${e.message}`).reduce((text2,msg)=>text2+separator+msg)}$dataMetaSchema(metaSchema,keywordsJsonPointers){const rules2=this.RULES.all;metaSchema=JSON.parse(JSON.stringify(metaSchema)); +for(const jsonPointer of keywordsJsonPointers){const segments=jsonPointer.split("/").slice(1);let keywords2=metaSchema;for(const seg of segments)keywords2=keywords2[seg];for(const key2 in rules2){const rule=rules2[key2];if(typeof rule!="object")continue;const{$data}=rule.definition,schema=keywords2[key2];$data&&schema&&(keywords2[key2]=schemaOrData(schema))}}return metaSchema}_removeAllSchemas(schemas,regex){for(const keyRef in schemas){const sch=schemas[keyRef];(!regex||regex.test(keyRef))&&(typeof sch== +"string"?delete schemas[keyRef]:sch&&!sch.meta&&(this._cache.delete(sch.schema),delete schemas[keyRef]))}}_addSchema(schema,meta,baseId,validateSchema=this.opts.validateSchema,addSchema=this.opts.addUsedSchema){let id2;const{schemaId}=this.opts;if(typeof schema=="object")id2=schema[schemaId];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof schema!="boolean")throw new Error("schema must be object or boolean")}let sch=this._cache.get(schema);if(sch!==void 0)return sch;baseId= +(0,resolve_1.normalizeId)(id2||baseId);const localRefs=resolve_1.getSchemaRefs.call(this,schema,baseId);return sch=new compile_1.SchemaEnv({schema,schemaId,meta,baseId,localRefs}),this._cache.set(sch.schema,sch),addSchema&&!baseId.startsWith("#")&&(baseId&&this._checkUnique(baseId),this.refs[baseId]=sch),validateSchema&&this.validateSchema(schema,!0),sch}_checkUnique(id2){if(this.schemas[id2]||this.refs[id2])throw new Error(`schema with key or id "${id2}" already exists`)}_compileSchemaEnv(sch){ +if(sch.meta?this._compileMetaSchema(sch):compile_1.compileSchema.call(this,sch),!sch.validate)throw new Error("ajv implementation error");return sch.validate}_compileMetaSchema(sch){const currentOpts=this.opts;this.opts=this._metaOpts;try{compile_1.compileSchema.call(this,sch)}finally{this.opts=currentOpts}}}Ajv2.ValidationError=validation_error_1.default,Ajv2.MissingRefError=ref_error_1.default,exports$1.default=Ajv2;function checkOptions(checkOpts,options,msg,log="error"){for(const key2 in checkOpts){ +const opt=key2;opt in options&&this.logger[log](`${msg}: option ${key2}. ${checkOpts[opt]}`)}}function getSchEnv(keyRef){return keyRef=(0,resolve_1.normalizeId)(keyRef),this.schemas[keyRef]||this.refs[keyRef]}function addInitialSchemas(){const optsSchemas=this.opts.schemas;if(optsSchemas)if(Array.isArray(optsSchemas))this.addSchema(optsSchemas);else for(const key2 in optsSchemas)this.addSchema(optsSchemas[key2],key2)}function addInitialFormats(){for(const name in this.opts.formats){const format2=this. +opts.formats[name];format2&&this.addFormat(name,format2)}}function addInitialKeywords(defs){if(Array.isArray(defs)){this.addVocabulary(defs);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const keyword2 in defs){const def=defs[keyword2];def.keyword||(def.keyword=keyword2),this.addKeyword(def)}}function getMetaSchemaOptions(){const metaOpts={...this.opts};for(const opt of META_IGNORE_OPTIONS)delete metaOpts[opt];return metaOpts}const noLogs={log(){},warn(){},error(){}}; +function getLogger(logger){if(logger===!1)return noLogs;if(logger===void 0)return console;if(logger.log&&logger.warn&&logger.error)return logger;throw new Error("logger must implement log, warn and error methods")}const KEYWORD_NAME=/^[a-z_$][a-z0-9_$:-]*$/i;function checkKeyword(keyword2,def){const{RULES}=this;if((0,util_1.eachItem)(keyword2,kwd=>{if(RULES.keywords[kwd])throw new Error(`Keyword ${kwd} is already defined`);if(!KEYWORD_NAME.test(kwd))throw new Error(`Keyword ${kwd} has invalid na\ +me`)}),!!def&&def.$data&&!("code"in def||"validate"in def))throw new Error('$data keyword must have "code" or "validate" function')}function addRule(keyword2,definition2,dataType2){var _a2;const post=definition2?.post;if(dataType2&&post)throw new Error('keyword with "post" flag cannot have "type"');const{RULES}=this;let ruleGroup=post?RULES.post:RULES.rules.find(({type:t})=>t===dataType2);if(ruleGroup||(ruleGroup={type:dataType2,rules:[]},RULES.rules.push(ruleGroup)),RULES.keywords[keyword2]=!0, +!definition2)return;const rule={keyword:keyword2,definition:{...definition2,type:(0,dataType_1.getJSONTypes)(definition2.type),schemaType:(0,dataType_1.getJSONTypes)(definition2.schemaType)}};definition2.before?addBeforeRule.call(this,ruleGroup,rule,definition2.before):ruleGroup.rules.push(rule),RULES.all[keyword2]=rule,(_a2=definition2.implements)===null||_a2===void 0||_a2.forEach(kwd=>this.addKeyword(kwd))}function addBeforeRule(ruleGroup,rule,before){const i=ruleGroup.rules.findIndex(_rule=>_rule. +keyword===before);i>=0?ruleGroup.rules.splice(i,0,rule):(ruleGroup.rules.push(rule),this.logger.warn(`rule ${before} is not defined`))}function keywordMetaschema(def){let{metaSchema}=def;metaSchema!==void 0&&(def.$data&&this.opts.$data&&(metaSchema=schemaOrData(metaSchema)),def.validateSchema=this.compile(metaSchema,!0))}const $dataRef={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function schemaOrData(schema){return{anyOf:[schema,$dataRef]}}})(core$4)), +core$4}var draft7$1={},core$3={},id$1={},hasRequiredId$1;function requireId$1(){if(hasRequiredId$1)return id$1;hasRequiredId$1=1,Object.defineProperty(id$1,"__esModule",{value:!0});const def={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};return id$1.default=def,id$1}var ref$1={},hasRequiredRef$1;function requireRef$1(){if(hasRequiredRef$1)return ref$1;hasRequiredRef$1=1,Object.defineProperty(ref$1,"__esModule",{value:!0}),ref$1.callRef=ref$1.getValidate= +void 0;const ref_error_1=requireRef_error$1(),code_1=requireCode$2(),codegen_1=requireCodegen$1(),names_1=requireNames$1(),compile_1=requireCompile$1(),util_1=requireUtil$1(),def={keyword:"$ref",schemaType:"string",code(cxt){const{gen,schema:$ref,it}=cxt,{baseId,schemaEnv:env2,validateName,opts,self:self2}=it,{root:root2}=env2;if(($ref==="#"||$ref==="#/")&&baseId===root2.baseId)return callRootRef();const schOrEnv=compile_1.resolveRef.call(self2,root2,baseId,$ref);if(schOrEnv===void 0)throw new ref_error_1. +default(it.opts.uriResolver,baseId,$ref);if(schOrEnv instanceof compile_1.SchemaEnv)return callValidate(schOrEnv);return inlineRefSchema(schOrEnv);function callRootRef(){if(env2===root2)return callRef(cxt,validateName,env2,env2.$async);const rootName=gen.scopeValue("root",{ref:root2});return callRef(cxt,(0,codegen_1._)`${rootName}.validate`,root2,root2.$async)}function callValidate(sch){const v=getValidate(cxt,sch);callRef(cxt,v,sch,sch.$async)}function inlineRefSchema(sch){const schName=gen.scopeValue( +"schema",opts.code.source===!0?{ref:sch,code:(0,codegen_1.stringify)(sch)}:{ref:sch}),valid2=gen.name("valid"),schCxt=cxt.subschema({schema:sch,dataTypes:[],schemaPath:codegen_1.nil,topSchemaRef:schName,errSchemaPath:$ref},valid2);cxt.mergeEvaluated(schCxt),cxt.ok(valid2)}}};function getValidate(cxt,sch){const{gen}=cxt;return sch.validate?gen.scopeValue("validate",{ref:sch.validate}):(0,codegen_1._)`${gen.scopeValue("wrapper",{ref:sch})}.validate`}ref$1.getValidate=getValidate;function callRef(cxt,v,sch,$async){ +const{gen,it}=cxt,{allErrors,schemaEnv:env2,opts}=it,passCxt=opts.passContext?names_1.default.this:codegen_1.nil;$async?callAsyncRef():callSyncRef();function callAsyncRef(){if(!env2.$async)throw new Error("async schema referenced by sync schema");const valid2=gen.let("valid");gen.try(()=>{gen.code((0,codegen_1._)`await ${(0,code_1.callValidateCode)(cxt,v,passCxt)}`),addEvaluatedFrom(v),allErrors||gen.assign(valid2,!0)},e=>{gen.if((0,codegen_1._)`!(${e} instanceof ${it.ValidationError})`,()=>gen. +throw(e)),addErrorsFrom(e),allErrors||gen.assign(valid2,!1)}),cxt.ok(valid2)}function callSyncRef(){cxt.result((0,code_1.callValidateCode)(cxt,v,passCxt),()=>addEvaluatedFrom(v),()=>addErrorsFrom(v))}function addErrorsFrom(source2){const errs=(0,codegen_1._)`${source2}.errors`;gen.assign(names_1.default.vErrors,(0,codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`),gen.assign(names_1.default.errors,(0,codegen_1._)`${names_1.default.vErrors}.length`)} +function addEvaluatedFrom(source2){var _a2;if(!it.opts.unevaluated)return;const schEvaluated=(_a2=sch?.validate)===null||_a2===void 0?void 0:_a2.evaluated;if(it.props!==!0)if(schEvaluated&&!schEvaluated.dynamicProps)schEvaluated.props!==void 0&&(it.props=util_1.mergeEvaluated.props(gen,schEvaluated.props,it.props));else{const props=gen.var("props",(0,codegen_1._)`${source2}.evaluated.props`);it.props=util_1.mergeEvaluated.props(gen,props,it.props,codegen_1.Name)}if(it.items!==!0)if(schEvaluated&& +!schEvaluated.dynamicItems)schEvaluated.items!==void 0&&(it.items=util_1.mergeEvaluated.items(gen,schEvaluated.items,it.items));else{const items2=gen.var("items",(0,codegen_1._)`${source2}.evaluated.items`);it.items=util_1.mergeEvaluated.items(gen,items2,it.items,codegen_1.Name)}}}return ref$1.callRef=callRef,ref$1.default=def,ref$1}var hasRequiredCore$2;function requireCore$2(){if(hasRequiredCore$2)return core$3;hasRequiredCore$2=1,Object.defineProperty(core$3,"__esModule",{value:!0});const id_1=requireId$1(), +ref_1=requireRef$1(),core2=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",id_1.default,ref_1.default];return core$3.default=core2,core$3}var validation$1={},limitNumber$1={},hasRequiredLimitNumber$1;function requireLimitNumber$1(){if(hasRequiredLimitNumber$1)return limitNumber$1;hasRequiredLimitNumber$1=1,Object.defineProperty(limitNumber$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),ops=codegen_1.operators,KWDs={maximum:{okStr:"<=",ok:ops.LTE,fail:ops. +GT},minimum:{okStr:">=",ok:ops.GTE,fail:ops.LT},exclusiveMaximum:{okStr:"<",ok:ops.LT,fail:ops.GTE},exclusiveMinimum:{okStr:">",ok:ops.GT,fail:ops.LTE}},error2={message:({keyword:keyword2,schemaCode})=>(0,codegen_1.str)`must be ${KWDs[keyword2].okStr} ${schemaCode}`,params:({keyword:keyword2,schemaCode})=>(0,codegen_1._)`{comparison: ${KWDs[keyword2].okStr}, limit: ${schemaCode}}`},def={keyword:Object.keys(KWDs),type:"number",schemaType:"number",$data:!0,error:error2,code(cxt){const{keyword:keyword2, +data,schemaCode}=cxt;cxt.fail$data((0,codegen_1._)`${data} ${KWDs[keyword2].fail} ${schemaCode} || isNaN(${data})`)}};return limitNumber$1.default=def,limitNumber$1}var multipleOf$1={},hasRequiredMultipleOf$1;function requireMultipleOf$1(){if(hasRequiredMultipleOf$1)return multipleOf$1;hasRequiredMultipleOf$1=1,Object.defineProperty(multipleOf$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),def={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode})=>(0,codegen_1. +str)`must be multiple of ${schemaCode}`,params:({schemaCode})=>(0,codegen_1._)`{multipleOf: ${schemaCode}}`},code(cxt){const{gen,data,schemaCode,it}=cxt,prec=it.opts.multipleOfPrecision,res=gen.let("res"),invalid2=prec?(0,codegen_1._)`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`:(0,codegen_1._)`${res} !== parseInt(${res})`;cxt.fail$data((0,codegen_1._)`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid2}))`)}};return multipleOf$1.default=def,multipleOf$1}var limitLength$1={}, +ucs2length$1={},hasRequiredUcs2length$1;function requireUcs2length$1(){if(hasRequiredUcs2length$1)return ucs2length$1;hasRequiredUcs2length$1=1,Object.defineProperty(ucs2length$1,"__esModule",{value:!0});function ucs2length2(str){const len=str.length;let length=0,pos=0,value;for(;pos<len;)length++,value=str.charCodeAt(pos++),value>=55296&&value<=56319&&pos<len&&(value=str.charCodeAt(pos),(value&64512)===56320&&pos++);return length}return ucs2length$1.default=ucs2length2,ucs2length2.code='require\ +("ajv/dist/runtime/ucs2length").default',ucs2length$1}var hasRequiredLimitLength$1;function requireLimitLength$1(){if(hasRequiredLimitLength$1)return limitLength$1;hasRequiredLimitLength$1=1,Object.defineProperty(limitLength$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),ucs2length_1=requireUcs2length$1(),def={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2==="maxL\ +ength"?"more":"fewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} characters`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2,data,schemaCode,it}=cxt,op2=keyword2==="maxLength"?codegen_1.operators.GT:codegen_1.operators.LT,len=it.opts.unicode===!1?(0,codegen_1._)`${data}.length`:(0,codegen_1._)`${(0,util_1.useFunc)(cxt.gen,ucs2length_1.default)}(${data})`;cxt.fail$data((0,codegen_1._)`${len} ${op2} ${schemaCode}`)}};return limitLength$1. +default=def,limitLength$1}var pattern$1={},hasRequiredPattern$1;function requirePattern$1(){if(hasRequiredPattern$1)return pattern$1;hasRequiredPattern$1=1,Object.defineProperty(pattern$1,"__esModule",{value:!0});const code_1=requireCode$2(),util_1=requireUtil$1(),codegen_1=requireCodegen$1(),def={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode})=>(0,codegen_1.str)`must match pattern "${schemaCode}"`,params:({schemaCode})=>(0,codegen_1._)`{pattern: ${schemaCode}}`}, +code(cxt){const{gen,data,$data,schema,schemaCode,it}=cxt,u=it.opts.unicodeRegExp?"u":"";if($data){const{regExp}=it.opts.code,regExpCode=regExp.code==="new RegExp"?(0,codegen_1._)`new RegExp`:(0,util_1.useFunc)(gen,regExp),valid2=gen.let("valid");gen.try(()=>gen.assign(valid2,(0,codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`),()=>gen.assign(valid2,!1)),cxt.fail$data((0,codegen_1._)`!${valid2}`)}else{const regExp=(0,code_1.usePattern)(cxt,schema);cxt.fail$data((0,codegen_1._)`!${regExp}.test(${data})`)}}}; +return pattern$1.default=def,pattern$1}var limitProperties$1={},hasRequiredLimitProperties$1;function requireLimitProperties$1(){if(hasRequiredLimitProperties$1)return limitProperties$1;hasRequiredLimitProperties$1=1,Object.defineProperty(limitProperties$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),def={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2==="maxProperties"?"more":"f\ +ewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} properties`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2,data,schemaCode}=cxt,op2=keyword2==="maxProperties"?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`Object.keys(${data}).length ${op2} ${schemaCode}`)}};return limitProperties$1.default=def,limitProperties$1}var required$2={},hasRequiredRequired$1;function requireRequired$1(){if(hasRequiredRequired$1) +return required$2;hasRequiredRequired$1=1,Object.defineProperty(required$2,"__esModule",{value:!0});const code_1=requireCode$2(),codegen_1=requireCodegen$1(),util_1=requireUtil$1(),def={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty}})=>(0,codegen_1.str)`must have required property '${missingProperty}'`,params:({params:{missingProperty}})=>(0,codegen_1._)`{missingProperty: ${missingProperty}}`},code(cxt){const{gen,schema,schemaCode,data,$data, +it}=cxt,{opts}=it;if(!$data&&schema.length===0)return;const useLoop=schema.length>=opts.loopRequired;if(it.allErrors?allErrorsMode():exitOnErrorMode(),opts.strictRequired){const props=cxt.parentSchema.properties,{definedProperties}=cxt.it;for(const requiredKey of schema)if(props?.[requiredKey]===void 0&&!definedProperties.has(requiredKey)){const schemaPath=it.schemaEnv.baseId+it.errSchemaPath,msg=`required property "${requiredKey}" is not defined at "${schemaPath}" (strictRequired)`;(0,util_1.checkStrictMode)( +it,msg,it.opts.strictRequired)}}function allErrorsMode(){if(useLoop||$data)cxt.block$data(codegen_1.nil,loopAllRequired);else for(const prop2 of schema)(0,code_1.checkReportMissingProp)(cxt,prop2)}function exitOnErrorMode(){const missing=gen.let("missing");if(useLoop||$data){const valid2=gen.let("valid",!0);cxt.block$data(valid2,()=>loopUntilMissing(missing,valid2)),cxt.ok(valid2)}else gen.if((0,code_1.checkMissingProp)(cxt,schema,missing)),(0,code_1.reportMissingProp)(cxt,missing),gen.else()}function loopAllRequired(){ +gen.forOf("prop",schemaCode,prop2=>{cxt.setParams({missingProperty:prop2}),gen.if((0,code_1.noPropertyInData)(gen,data,prop2,opts.ownProperties),()=>cxt.error())})}function loopUntilMissing(missing,valid2){cxt.setParams({missingProperty:missing}),gen.forOf(missing,schemaCode,()=>{gen.assign(valid2,(0,code_1.propertyInData)(gen,data,missing,opts.ownProperties)),gen.if((0,codegen_1.not)(valid2),()=>{cxt.error(),gen.break()})},codegen_1.nil)}}};return required$2.default=def,required$2}var limitItems$1={}, +hasRequiredLimitItems$1;function requireLimitItems$1(){if(hasRequiredLimitItems$1)return limitItems$1;hasRequiredLimitItems$1=1,Object.defineProperty(limitItems$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),def={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2==="maxItems"?"more":"fewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`},params:({schemaCode})=>(0,codegen_1. +_)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2,data,schemaCode}=cxt,op2=keyword2==="maxItems"?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`${data}.length ${op2} ${schemaCode}`)}};return limitItems$1.default=def,limitItems$1}var uniqueItems$1={},equal$1={},hasRequiredEqual$1;function requireEqual$1(){if(hasRequiredEqual$1)return equal$1;hasRequiredEqual$1=1,Object.defineProperty(equal$1,"__esModule",{value:!0});const equal2=requireFastDeepEqual();return equal2. +code='require("ajv/dist/runtime/equal").default',equal$1.default=equal2,equal$1}var hasRequiredUniqueItems$1;function requireUniqueItems$1(){if(hasRequiredUniqueItems$1)return uniqueItems$1;hasRequiredUniqueItems$1=1,Object.defineProperty(uniqueItems$1,"__esModule",{value:!0});const dataType_1=requireDataType$1(),codegen_1=requireCodegen$1(),util_1=requireUtil$1(),equal_1=requireEqual$1(),def={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i,j}})=>(0,codegen_1. +str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,params:({params:{i,j}})=>(0,codegen_1._)`{i: ${i}, j: ${j}}`},code(cxt){const{gen,data,$data,schema,parentSchema,schemaCode,it}=cxt;if(!$data&&!schema)return;const valid2=gen.let("valid"),itemTypes=parentSchema.items?(0,dataType_1.getSchemaTypes)(parentSchema.items):[];cxt.block$data(valid2,validateUniqueItems,(0,codegen_1._)`${schemaCode} === false`),cxt.ok(valid2);function validateUniqueItems(){const i=gen.let("i",(0,codegen_1. +_)`${data}.length`),j=gen.let("j");cxt.setParams({i,j}),gen.assign(valid2,!0),gen.if((0,codegen_1._)`${i} > 1`,()=>(canOptimize()?loopN:loopN2)(i,j))}function canOptimize(){return itemTypes.length>0&&!itemTypes.some(t=>t==="object"||t==="array")}function loopN(i,j){const item=gen.name("item"),wrongType=(0,dataType_1.checkDataTypes)(itemTypes,item,it.opts.strictNumbers,dataType_1.DataType.Wrong),indices=gen.const("indices",(0,codegen_1._)`{}`);gen.for((0,codegen_1._)`;${i}--;`,()=>{gen.let(item,(0,codegen_1. +_)`${data}[${i}]`),gen.if(wrongType,(0,codegen_1._)`continue`),itemTypes.length>1&&gen.if((0,codegen_1._)`typeof ${item} == "string"`,(0,codegen_1._)`${item} += "_"`),gen.if((0,codegen_1._)`typeof ${indices}[${item}] == "number"`,()=>{gen.assign(j,(0,codegen_1._)`${indices}[${item}]`),cxt.error(),gen.assign(valid2,!1).break()}).code((0,codegen_1._)`${indices}[${item}] = ${i}`)})}function loopN2(i,j){const eql=(0,util_1.useFunc)(gen,equal_1.default),outer=gen.name("outer");gen.label(outer).for((0,codegen_1. +_)`;${i}--;`,()=>gen.for((0,codegen_1._)`${j} = ${i}; ${j}--;`,()=>gen.if((0,codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`,()=>{cxt.error(),gen.assign(valid2,!1).break(outer)})))}}};return uniqueItems$1.default=def,uniqueItems$1}var _const$1={},hasRequired_const$1;function require_const$1(){if(hasRequired_const$1)return _const$1;hasRequired_const$1=1,Object.defineProperty(_const$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),equal_1=requireEqual$1(),def={ +keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode})=>(0,codegen_1._)`{allowedValue: ${schemaCode}}`},code(cxt){const{gen,data,$data,schemaCode,schema}=cxt;$data||schema&&typeof schema=="object"?cxt.fail$data((0,codegen_1._)`!${(0,util_1.useFunc)(gen,equal_1.default)}(${data}, ${schemaCode})`):cxt.fail((0,codegen_1._)`${schema} !== ${data}`)}};return _const$1.default=def,_const$1}var _enum$1={},hasRequired_enum$1;function require_enum$1(){if(hasRequired_enum$1) +return _enum$1;hasRequired_enum$1=1,Object.defineProperty(_enum$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),equal_1=requireEqual$1(),def={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode})=>(0,codegen_1._)`{allowedValues: ${schemaCode}}`},code(cxt){const{gen,data,$data,schema,schemaCode,it}=cxt;if(!$data&&schema.length===0)throw new Error("enum must have non-empty array");const useLoop=schema. +length>=it.opts.loopEnum;let eql;const getEql=()=>eql??(eql=(0,util_1.useFunc)(gen,equal_1.default));let valid2;if(useLoop||$data)valid2=gen.let("valid"),cxt.block$data(valid2,loopEnum);else{if(!Array.isArray(schema))throw new Error("ajv implementation error");const vSchema=gen.const("vSchema",schemaCode);valid2=(0,codegen_1.or)(...schema.map((_x,i)=>equalCode(vSchema,i)))}cxt.pass(valid2);function loopEnum(){gen.assign(valid2,!1),gen.forOf("v",schemaCode,v=>gen.if((0,codegen_1._)`${getEql()}(${data}, ${v})`, +()=>gen.assign(valid2,!0).break()))}function equalCode(vSchema,i){const sch=schema[i];return typeof sch=="object"&&sch!==null?(0,codegen_1._)`${getEql()}(${data}, ${vSchema}[${i}])`:(0,codegen_1._)`${data} === ${sch}`}}};return _enum$1.default=def,_enum$1}var hasRequiredValidation$1;function requireValidation$1(){if(hasRequiredValidation$1)return validation$1;hasRequiredValidation$1=1,Object.defineProperty(validation$1,"__esModule",{value:!0});const limitNumber_1=requireLimitNumber$1(),multipleOf_1=requireMultipleOf$1(), +limitLength_1=requireLimitLength$1(),pattern_1=requirePattern$1(),limitProperties_1=requireLimitProperties$1(),required_1=requireRequired$1(),limitItems_1=requireLimitItems$1(),uniqueItems_1=requireUniqueItems$1(),const_1=require_const$1(),enum_1=require_enum$1(),validation2=[limitNumber_1.default,multipleOf_1.default,limitLength_1.default,pattern_1.default,limitProperties_1.default,required_1.default,limitItems_1.default,uniqueItems_1.default,{keyword:"type",schemaType:["string","array"]},{keyword:"\ +nullable",schemaType:"boolean"},const_1.default,enum_1.default];return validation$1.default=validation2,validation$1}var applicator$1={},additionalItems$1={},hasRequiredAdditionalItems$1;function requireAdditionalItems$1(){if(hasRequiredAdditionalItems$1)return additionalItems$1;hasRequiredAdditionalItems$1=1,Object.defineProperty(additionalItems$1,"__esModule",{value:!0}),additionalItems$1.validateAdditionalItems=void 0;const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),def={keyword:"add\ +itionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len}})=>(0,codegen_1.str)`must NOT have more than ${len} items`,params:({params:{len}})=>(0,codegen_1._)`{limit: ${len}}`},code(cxt){const{parentSchema,it}=cxt,{items:items2}=parentSchema;if(!Array.isArray(items2)){(0,util_1.checkStrictMode)(it,'"additionalItems" is ignored when "items" is not an array of schemas');return}validateAdditionalItems(cxt,items2)}};function validateAdditionalItems(cxt,items2){ const{gen,schema,data,keyword:keyword2,it}=cxt;it.items=!0;const len=gen.const("len",(0,codegen_1._)`${data}.length`);if(schema===!1)cxt.setParams({len:items2.length}),cxt.pass((0,codegen_1._)`${len} <= ${items2.length}`);else if(typeof schema=="object"&&!(0,util_1.alwaysValidSchema)(it,schema)){const valid2=gen.var("valid",(0,codegen_1._)`${len} <= ${items2.length}`);gen.if((0,codegen_1.not)(valid2),()=>validateItems(valid2)),cxt.ok(valid2)}function validateItems(valid2){gen.forRange("i",items2. length,len,i=>{cxt.subschema({keyword:keyword2,dataProp:i,dataPropType:util_1.Type.Num},valid2),it.allErrors||gen.if((0,codegen_1.not)(valid2),()=>gen.break())})}}return additionalItems$1.validateAdditionalItems=validateAdditionalItems,additionalItems$1.default=def,additionalItems$1}var prefixItems$1={},items$1={},hasRequiredItems$1;function requireItems$1(){if(hasRequiredItems$1)return items$1;hasRequiredItems$1=1,Object.defineProperty(items$1,"__esModule",{value:!0}),items$1.validateTuple=void 0; const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),code_1=requireCode$2(),def={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(cxt){const{schema,it}=cxt;if(Array.isArray(schema))return validateTuple(cxt,"additionalItems",schema);it.items=!0,!(0,util_1.alwaysValidSchema)(it,schema)&&cxt.ok((0,code_1.validateArray)(cxt))}};function validateTuple(cxt,extraItems,schArr=cxt.schema){const{gen,parentSchema,data,keyword:keyword2,it}=cxt;checkStrictTuple( @@ -4369,19 +4453,19 @@ void 0?(0,codegen_1.str)`must contain at least ${min2} valid item(s)`:(0,codegen 1;const len=gen.const("len",(0,codegen_1._)`${data}.length`);if(cxt.setParams({min:min2,max:max2}),max2===void 0&&min2===0){(0,util_1.checkStrictMode)(it,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(max2!==void 0&&min2>max2){(0,util_1.checkStrictMode)(it,'"minContains" > "maxContains" is always invalid'),cxt.fail();return}if((0,util_1.alwaysValidSchema)(it,schema)){let cond=(0,codegen_1._)`${len} >= ${min2}`;max2!==void 0&&(cond=(0,codegen_1._)`${cond} && ${len} <= ${max2}`), cxt.pass(cond);return}it.items=!0;const valid2=gen.name("valid");max2===void 0&&min2===1?validateItems(valid2,()=>gen.if(valid2,()=>gen.break())):min2===0?(gen.let(valid2,!0),max2!==void 0&&gen.if((0,codegen_1._)`${data}.length > 0`,validateItemsWithCount)):(gen.let(valid2,!1),validateItemsWithCount()),cxt.result(valid2,()=>cxt.reset());function validateItemsWithCount(){const schValid=gen.name("_valid"),count=gen.let("count",0);validateItems(schValid,()=>gen.if(schValid,()=>checkLimits(count)))} function validateItems(_valid,block2){gen.forRange("i",0,len,i=>{cxt.subschema({keyword:"contains",dataProp:i,dataPropType:util_1.Type.Num,compositeRule:!0},_valid),block2()})}function checkLimits(count){gen.code((0,codegen_1._)`${count}++`),max2===void 0?gen.if((0,codegen_1._)`${count} >= ${min2}`,()=>gen.assign(valid2,!0).break()):(gen.if((0,codegen_1._)`${count} > ${max2}`,()=>gen.assign(valid2,!1).break()),min2===1?gen.assign(valid2,!0):gen.if((0,codegen_1._)`${count} >= ${min2}`,()=>gen.assign( -valid2,!0)))}}};return contains$2.default=def,contains$2}var dependencies$1={},hasRequiredDependencies$1;function requireDependencies$1(){return hasRequiredDependencies$1||(hasRequiredDependencies$1=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.validateSchemaDeps=exports.validatePropertyDeps=exports.error=void 0;const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),code_1=requireCode$2();exports.error={message:({params:{property,depsCount,deps}})=>{const property_ies=depsCount=== -1?"property":"properties";return(0,codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`},params:({params:{property,depsCount,deps,missingProperty}})=>(0,codegen_1._)`{property: ${property}, +valid2,!0)))}}};return contains$2.default=def,contains$2}var dependencies$1={},hasRequiredDependencies$1;function requireDependencies$1(){return hasRequiredDependencies$1||(hasRequiredDependencies$1=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.validateSchemaDeps=exports$1.validatePropertyDeps=exports$1.error=void 0;const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),code_1=requireCode$2();exports$1.error={message:({params:{property,depsCount,deps}})=>{ +const property_ies=depsCount===1?"property":"properties";return(0,codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`},params:({params:{property,depsCount,deps,missingProperty}})=>(0,codegen_1._)`{property: ${property}, missingProperty: ${missingProperty}, depsCount: ${depsCount}, - deps: ${deps}}`};const def={keyword:"dependencies",type:"object",schemaType:"object",error:exports.error,code(cxt){const[propDeps,schDeps]=splitDependencies(cxt);validatePropertyDeps(cxt,propDeps),validateSchemaDeps(cxt,schDeps)}};function splitDependencies({schema}){const propertyDeps={},schemaDeps={};for(const key2 in schema){if(key2==="__proto__")continue;const deps=Array.isArray(schema[key2])?propertyDeps:schemaDeps;deps[key2]=schema[key2]}return[propertyDeps,schemaDeps]}function validatePropertyDeps(cxt,propertyDeps=cxt. + deps: ${deps}}`};const def={keyword:"dependencies",type:"object",schemaType:"object",error:exports$1.error,code(cxt){const[propDeps,schDeps]=splitDependencies(cxt);validatePropertyDeps(cxt,propDeps),validateSchemaDeps(cxt,schDeps)}};function splitDependencies({schema}){const propertyDeps={},schemaDeps={};for(const key2 in schema){if(key2==="__proto__")continue;const deps=Array.isArray(schema[key2])?propertyDeps:schemaDeps;deps[key2]=schema[key2]}return[propertyDeps,schemaDeps]}function validatePropertyDeps(cxt,propertyDeps=cxt. schema){const{gen,data,it}=cxt;if(Object.keys(propertyDeps).length===0)return;const missing=gen.let("missing");for(const prop2 in propertyDeps){const deps=propertyDeps[prop2];if(deps.length===0)continue;const hasProperty=(0,code_1.propertyInData)(gen,data,prop2,it.opts.ownProperties);cxt.setParams({property:prop2,depsCount:deps.length,deps:deps.join(", ")}),it.allErrors?gen.if(hasProperty,()=>{for(const depProp of deps)(0,code_1.checkReportMissingProp)(cxt,depProp)}):(gen.if((0,codegen_1._)`${hasProperty} && (${(0,code_1. -checkMissingProp)(cxt,deps,missing)})`),(0,code_1.reportMissingProp)(cxt,missing),gen.else())}}exports.validatePropertyDeps=validatePropertyDeps;function validateSchemaDeps(cxt,schemaDeps=cxt.schema){const{gen,data,keyword:keyword2,it}=cxt,valid2=gen.name("valid");for(const prop2 in schemaDeps)(0,util_1.alwaysValidSchema)(it,schemaDeps[prop2])||(gen.if((0,code_1.propertyInData)(gen,data,prop2,it.opts.ownProperties),()=>{const schCxt=cxt.subschema({keyword:keyword2,schemaProp:prop2},valid2);cxt.mergeValidEvaluated( -schCxt,valid2)},()=>gen.var(valid2,!0)),cxt.ok(valid2))}exports.validateSchemaDeps=validateSchemaDeps,exports.default=def}(dependencies$1)),dependencies$1}var propertyNames$1={},hasRequiredPropertyNames$1;function requirePropertyNames$1(){if(hasRequiredPropertyNames$1)return propertyNames$1;hasRequiredPropertyNames$1=1,Object.defineProperty(propertyNames$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),def={keyword:"propertyNames",type:"object",schemaType:["ob\ -ject","boolean"],error:{message:"property name must be valid",params:({params})=>(0,codegen_1._)`{propertyName: ${params.propertyName}}`},code(cxt){const{gen,schema,data,it}=cxt;if((0,util_1.alwaysValidSchema)(it,schema))return;const valid2=gen.name("valid");gen.forIn("key",data,key2=>{cxt.setParams({propertyName:key2}),cxt.subschema({keyword:"propertyNames",data:key2,dataTypes:["string"],propertyName:key2,compositeRule:!0},valid2),gen.if((0,codegen_1.not)(valid2),()=>{cxt.error(!0),it.allErrors|| -gen.break()})}),cxt.ok(valid2)}};return propertyNames$1.default=def,propertyNames$1}var additionalProperties$2={},hasRequiredAdditionalProperties$1;function requireAdditionalProperties$1(){if(hasRequiredAdditionalProperties$1)return additionalProperties$2;hasRequiredAdditionalProperties$1=1,Object.defineProperty(additionalProperties$2,"__esModule",{value:!0});const code_1=requireCode$2(),codegen_1=requireCodegen$1(),names_1=requireNames$1(),util_1=requireUtil$1(),def={keyword:"additionalProperti\ -es",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params})=>(0,codegen_1._)`{additionalProperty: ${params.additionalProperty}}`},code(cxt){const{gen,schema,parentSchema,data,errsCount,it}=cxt;if(!errsCount)throw new Error("ajv implementation error");const{allErrors,opts}=it;if(it.props=!0,opts.removeAdditional!=="all"&&(0,util_1.alwaysValidSchema)(it,schema))return;const props=(0,code_1.allSchemaProperties)( -parentSchema.properties),patProps=(0,code_1.allSchemaProperties)(parentSchema.patternProperties);checkAdditionalProperties(),cxt.ok((0,codegen_1._)`${errsCount} === ${names_1.default.errors}`);function checkAdditionalProperties(){gen.forIn("key",data,key2=>{!props.length&&!patProps.length?additionalPropertyCode(key2):gen.if(isAdditional(key2),()=>additionalPropertyCode(key2))})}function isAdditional(key2){let definedProp;if(props.length>8){const propsSchema=(0,util_1.schemaRefOrVal)(it,parentSchema. -properties,"properties");definedProp=(0,code_1.isOwnProperty)(gen,propsSchema,key2)}else props.length?definedProp=(0,codegen_1.or)(...props.map(p2=>(0,codegen_1._)`${key2} === ${p2}`)):definedProp=codegen_1.nil;return patProps.length&&(definedProp=(0,codegen_1.or)(definedProp,...patProps.map(p2=>(0,codegen_1._)`${(0,code_1.usePattern)(cxt,p2)}.test(${key2})`))),(0,codegen_1.not)(definedProp)}function deleteAdditional(key2){gen.code((0,codegen_1._)`delete ${data}[${key2}]`)}function additionalPropertyCode(key2){ +checkMissingProp)(cxt,deps,missing)})`),(0,code_1.reportMissingProp)(cxt,missing),gen.else())}}exports$1.validatePropertyDeps=validatePropertyDeps;function validateSchemaDeps(cxt,schemaDeps=cxt.schema){const{gen,data,keyword:keyword2,it}=cxt,valid2=gen.name("valid");for(const prop2 in schemaDeps)(0,util_1.alwaysValidSchema)(it,schemaDeps[prop2])||(gen.if((0,code_1.propertyInData)(gen,data,prop2,it.opts.ownProperties),()=>{const schCxt=cxt.subschema({keyword:keyword2,schemaProp:prop2},valid2);cxt. +mergeValidEvaluated(schCxt,valid2)},()=>gen.var(valid2,!0)),cxt.ok(valid2))}exports$1.validateSchemaDeps=validateSchemaDeps,exports$1.default=def})(dependencies$1)),dependencies$1}var propertyNames$1={},hasRequiredPropertyNames$1;function requirePropertyNames$1(){if(hasRequiredPropertyNames$1)return propertyNames$1;hasRequiredPropertyNames$1=1,Object.defineProperty(propertyNames$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),util_1=requireUtil$1(),def={keyword:"propertyNames",type:"\ +object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params})=>(0,codegen_1._)`{propertyName: ${params.propertyName}}`},code(cxt){const{gen,schema,data,it}=cxt;if((0,util_1.alwaysValidSchema)(it,schema))return;const valid2=gen.name("valid");gen.forIn("key",data,key2=>{cxt.setParams({propertyName:key2}),cxt.subschema({keyword:"propertyNames",data:key2,dataTypes:["string"],propertyName:key2,compositeRule:!0},valid2),gen.if((0,codegen_1.not)(valid2),()=>{cxt. +error(!0),it.allErrors||gen.break()})}),cxt.ok(valid2)}};return propertyNames$1.default=def,propertyNames$1}var additionalProperties$2={},hasRequiredAdditionalProperties$1;function requireAdditionalProperties$1(){if(hasRequiredAdditionalProperties$1)return additionalProperties$2;hasRequiredAdditionalProperties$1=1,Object.defineProperty(additionalProperties$2,"__esModule",{value:!0});const code_1=requireCode$2(),codegen_1=requireCodegen$1(),names_1=requireNames$1(),util_1=requireUtil$1(),def={keyword:"\ +additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params})=>(0,codegen_1._)`{additionalProperty: ${params.additionalProperty}}`},code(cxt){const{gen,schema,parentSchema,data,errsCount,it}=cxt;if(!errsCount)throw new Error("ajv implementation error");const{allErrors,opts}=it;if(it.props=!0,opts.removeAdditional!=="all"&&(0,util_1.alwaysValidSchema)(it,schema))return;const props=(0,code_1. +allSchemaProperties)(parentSchema.properties),patProps=(0,code_1.allSchemaProperties)(parentSchema.patternProperties);checkAdditionalProperties(),cxt.ok((0,codegen_1._)`${errsCount} === ${names_1.default.errors}`);function checkAdditionalProperties(){gen.forIn("key",data,key2=>{!props.length&&!patProps.length?additionalPropertyCode(key2):gen.if(isAdditional(key2),()=>additionalPropertyCode(key2))})}function isAdditional(key2){let definedProp;if(props.length>8){const propsSchema=(0,util_1.schemaRefOrVal)( +it,parentSchema.properties,"properties");definedProp=(0,code_1.isOwnProperty)(gen,propsSchema,key2)}else props.length?definedProp=(0,codegen_1.or)(...props.map(p2=>(0,codegen_1._)`${key2} === ${p2}`)):definedProp=codegen_1.nil;return patProps.length&&(definedProp=(0,codegen_1.or)(definedProp,...patProps.map(p2=>(0,codegen_1._)`${(0,code_1.usePattern)(cxt,p2)}.test(${key2})`))),(0,codegen_1.not)(definedProp)}function deleteAdditional(key2){gen.code((0,codegen_1._)`delete ${data}[${key2}]`)}function additionalPropertyCode(key2){ if(opts.removeAdditional==="all"||opts.removeAdditional&&schema===!1){deleteAdditional(key2);return}if(schema===!1){cxt.setParams({additionalProperty:key2}),cxt.error(),allErrors||gen.break();return}if(typeof schema=="object"&&!(0,util_1.alwaysValidSchema)(it,schema)){const valid2=gen.name("valid");opts.removeAdditional==="failing"?(applyAdditionalSchema(key2,valid2,!1),gen.if((0,codegen_1.not)(valid2),()=>{cxt.reset(),deleteAdditional(key2)})):(applyAdditionalSchema(key2,valid2),allErrors||gen. if((0,codegen_1.not)(valid2),()=>gen.break()))}}function applyAdditionalSchema(key2,valid2,errors2){const subschema2={keyword:"additionalProperties",dataProp:key2,dataPropType:util_1.Type.Str};errors2===!1&&Object.assign(subschema2,{compositeRule:!0,createErrors:!1,allErrors:!1}),cxt.subschema(subschema2,valid2)}}};return additionalProperties$2.default=def,additionalProperties$2}var properties$5={},hasRequiredProperties$1;function requireProperties$1(){if(hasRequiredProperties$1)return properties$5; hasRequiredProperties$1=1,Object.defineProperty(properties$5,"__esModule",{value:!0});const validate_1=requireValidate$1(),code_1=requireCode$2(),util_1=requireUtil$1(),additionalProperties_1=requireAdditionalProperties$1(),def={keyword:"properties",type:"object",schemaType:"object",code(cxt){const{gen,schema,parentSchema,data,it}=cxt;it.opts.removeAdditional==="all"&&parentSchema.additionalProperties===void 0&&additionalProperties_1.default.code(new validate_1.KeywordCxt(it,additionalProperties_1. @@ -4411,7 +4495,7 @@ return(0,codegen_1._)`${format2} && ${format2} !== true && ${fType} === ${ruleTy "object"&&!(formatDef instanceof RegExp)&&formatDef.async){if(!schemaEnv.$async)throw new Error("async format in sync schema");return(0,codegen_1._)`await ${fmtRef}(${data})`}return typeof format2=="function"?(0,codegen_1._)`${fmtRef}(${data})`:(0,codegen_1._)`${fmtRef}.test(${data})`}}}};return format$2.default=def,format$2}var hasRequiredFormat$2;function requireFormat$2(){if(hasRequiredFormat$2)return format$3;hasRequiredFormat$2=1,Object.defineProperty(format$3,"__esModule",{value:!0});const format2=[ requireFormat$3().default];return format$3.default=format2,format$3}var metadata$1={},hasRequiredMetadata$1;function requireMetadata$1(){return hasRequiredMetadata$1||(hasRequiredMetadata$1=1,Object.defineProperty(metadata$1,"__esModule",{value:!0}),metadata$1.contentVocabulary=metadata$1.metadataVocabulary=void 0,metadata$1.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],metadata$1.contentVocabulary=["contentMediaType","contentEncoding","conte\ ntSchema"]),metadata$1}var hasRequiredDraft7$1;function requireDraft7$1(){if(hasRequiredDraft7$1)return draft7$1;hasRequiredDraft7$1=1,Object.defineProperty(draft7$1,"__esModule",{value:!0});const core_1=requireCore$2(),validation_1=requireValidation$1(),applicator_1=requireApplicator$1(),format_1=requireFormat$2(),metadata_1=requireMetadata$1(),draft7Vocabularies=[core_1.default,validation_1.default,(0,applicator_1.default)(),format_1.default,metadata_1.metadataVocabulary,metadata_1.contentVocabulary]; -return draft7$1.default=draft7Vocabularies,draft7$1}var discriminator$1={},types$2={},hasRequiredTypes$1;function requireTypes$1(){if(hasRequiredTypes$1)return types$2;hasRequiredTypes$1=1,Object.defineProperty(types$2,"__esModule",{value:!0}),types$2.DiscrError=void 0;var DiscrError;return function(DiscrError2){DiscrError2.Tag="tag",DiscrError2.Mapping="mapping"}(DiscrError||(types$2.DiscrError=DiscrError={})),types$2}var hasRequiredDiscriminator$1;function requireDiscriminator$1(){if(hasRequiredDiscriminator$1) +return draft7$1.default=draft7Vocabularies,draft7$1}var discriminator$1={},types$2={},hasRequiredTypes$1;function requireTypes$1(){if(hasRequiredTypes$1)return types$2;hasRequiredTypes$1=1,Object.defineProperty(types$2,"__esModule",{value:!0}),types$2.DiscrError=void 0;var DiscrError;return(function(DiscrError2){DiscrError2.Tag="tag",DiscrError2.Mapping="mapping"})(DiscrError||(types$2.DiscrError=DiscrError={})),types$2}var hasRequiredDiscriminator$1;function requireDiscriminator$1(){if(hasRequiredDiscriminator$1) return discriminator$1;hasRequiredDiscriminator$1=1,Object.defineProperty(discriminator$1,"__esModule",{value:!0});const codegen_1=requireCodegen$1(),types_1=requireTypes$1(),compile_1=requireCompile$1(),ref_error_1=requireRef_error$1(),util_1=requireUtil$1(),def={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError,tagName}})=>discrError===types_1.DiscrError.Tag?`tag "${tagName}" must be string`:`value of tag "${tagName}" must be in oneOf`,params:({params:{ discrError,tag,tagName}})=>(0,codegen_1._)`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`},code(cxt){const{gen,data,schema,parentSchema,it}=cxt,{oneOf:oneOf2}=parentSchema;if(!it.opts.discriminator)throw new Error("discriminator: requires discriminator option");const tagName=schema.propertyName;if(typeof tagName!="string")throw new Error("discriminator: requires propertyName");if(schema.mapping)throw new Error("discriminator: mapping is not supported");if(!oneOf2)throw new Error("dis\ criminator: requires oneOf keyword");const valid2=gen.let("valid",!1),tag=gen.const("tag",(0,codegen_1._)`${data}${(0,codegen_1.getProperty)(tagName)}`);gen.if((0,codegen_1._)`typeof ${tag} == "string"`,()=>validateMapping(),()=>cxt.error(!1,{discrError:types_1.DiscrError.Tag,tag,tagName})),cxt.ok(valid2);function validateMapping(){const mapping=getMapping();gen.if(!1);for(const tagValue in mapping)gen.elseIf((0,codegen_1._)`${tag} === ${tagValue}`),gen.assign(valid2,applyTagSchema(mapping[tagValue])); @@ -4423,58 +4507,58 @@ oneOfMapping)throw new Error(`discriminator: "${tagName}" values must be unique type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDe\ fault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"}, default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/\ -schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},require$$3$1={$schema:$schema$1,$id:$id$2,title:title$1,definitions:definitions$1,type:type$2,properties:properties$4,default:!0};var hasRequiredAjv$1;function requireAjv$1(){return hasRequiredAjv$1||(hasRequiredAjv$1=1,function(module,exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.MissingRefError=exports.ValidationError=exports.CodeGen=exports.Name=exports.nil= -exports.stringify=exports.str=exports._=exports.KeywordCxt=exports.Ajv=void 0;const core_1=requireCore$3(),draft7_1=requireDraft7$1(),discriminator_1=requireDiscriminator$1(),draft7MetaSchema=require$$3$1,META_SUPPORT_DATA=["/properties"],META_SCHEMA_ID="http://json-schema.org/draft-07/schema";class Ajv2 extends core_1.default{_addVocabularies(){super._addVocabularies(),draft7_1.default.forEach(v=>this.addVocabulary(v)),this.opts.discriminator&&this.addKeyword(discriminator_1.default)}_addDefaultMetaSchema(){ -if(super._addDefaultMetaSchema(),!this.opts.meta)return;const metaSchema=this.opts.$data?this.$dataMetaSchema(draft7MetaSchema,META_SUPPORT_DATA):draft7MetaSchema;this.addMetaSchema(metaSchema,META_SCHEMA_ID,!1),this.refs["http://json-schema.org/schema"]=META_SCHEMA_ID}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(META_SCHEMA_ID)?META_SCHEMA_ID:void 0)}}exports.Ajv=Ajv2,module.exports=exports=Ajv2,module.exports.Ajv=Ajv2,Object.defineProperty(exports,"__esModule", -{value:!0}),exports.default=Ajv2;var validate_1=requireValidate$1();Object.defineProperty(exports,"KeywordCxt",{enumerable:!0,get:function(){return validate_1.KeywordCxt}});var codegen_1=requireCodegen$1();Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return codegen_1._}}),Object.defineProperty(exports,"str",{enumerable:!0,get:function(){return codegen_1.str}}),Object.defineProperty(exports,"stringify",{enumerable:!0,get:function(){return codegen_1.stringify}}),Object.defineProperty( -exports,"nil",{enumerable:!0,get:function(){return codegen_1.nil}}),Object.defineProperty(exports,"Name",{enumerable:!0,get:function(){return codegen_1.Name}}),Object.defineProperty(exports,"CodeGen",{enumerable:!0,get:function(){return codegen_1.CodeGen}});var validation_error_1=requireValidation_error$1();Object.defineProperty(exports,"ValidationError",{enumerable:!0,get:function(){return validation_error_1.default}});var ref_error_1=requireRef_error$1();Object.defineProperty(exports,"MissingR\ -efError",{enumerable:!0,get:function(){return ref_error_1.default}})}(ajv$1,ajv$1.exports)),ajv$1.exports}var ajvExports=requireAjv$1();const Ajv=getDefaultExportFromCjs(ajvExports);var dist={exports:{}},formats={},hasRequiredFormats;function requireFormats(){return hasRequiredFormats||(hasRequiredFormats=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatNames=exports.fastFormats=exports.fullFormats=void 0;function fmtDef(validate2,compare){return{validate:validate2, -compare}}exports.fullFormats={date:fmtDef(date2,compareDate),time:fmtDef(getTime(!0),compareTime),"date-time":fmtDef(getDateTime(!0),compareDateTime),"iso-time":fmtDef(getTime(),compareIsoTime),"iso-date-time":fmtDef(getDateTime(),compareIsoDateTime),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:uri2,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i, +schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},require$$3$1={$schema:$schema$1,$id:$id$2,title:title$1,definitions:definitions$1,type:type$2,properties:properties$4,default:!0};var hasRequiredAjv$1;function requireAjv$1(){return hasRequiredAjv$1||(hasRequiredAjv$1=1,(function(module,exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.MissingRefError=exports$1.ValidationError=exports$1.CodeGen=exports$1.Name= +exports$1.nil=exports$1.stringify=exports$1.str=exports$1._=exports$1.KeywordCxt=exports$1.Ajv=void 0;const core_1=requireCore$3(),draft7_1=requireDraft7$1(),discriminator_1=requireDiscriminator$1(),draft7MetaSchema=require$$3$1,META_SUPPORT_DATA=["/properties"],META_SCHEMA_ID="http://json-schema.org/draft-07/schema";class Ajv2 extends core_1.default{_addVocabularies(){super._addVocabularies(),draft7_1.default.forEach(v=>this.addVocabulary(v)),this.opts.discriminator&&this.addKeyword(discriminator_1. +default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const metaSchema=this.opts.$data?this.$dataMetaSchema(draft7MetaSchema,META_SUPPORT_DATA):draft7MetaSchema;this.addMetaSchema(metaSchema,META_SCHEMA_ID,!1),this.refs["http://json-schema.org/schema"]=META_SCHEMA_ID}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(META_SCHEMA_ID)?META_SCHEMA_ID:void 0)}}exports$1.Ajv=Ajv2,module.exports=exports$1=Ajv2,module.exports.Ajv=Ajv2,Object. +defineProperty(exports$1,"__esModule",{value:!0}),exports$1.default=Ajv2;var validate_1=requireValidate$1();Object.defineProperty(exports$1,"KeywordCxt",{enumerable:!0,get:function(){return validate_1.KeywordCxt}});var codegen_1=requireCodegen$1();Object.defineProperty(exports$1,"_",{enumerable:!0,get:function(){return codegen_1._}}),Object.defineProperty(exports$1,"str",{enumerable:!0,get:function(){return codegen_1.str}}),Object.defineProperty(exports$1,"stringify",{enumerable:!0,get:function(){ +return codegen_1.stringify}}),Object.defineProperty(exports$1,"nil",{enumerable:!0,get:function(){return codegen_1.nil}}),Object.defineProperty(exports$1,"Name",{enumerable:!0,get:function(){return codegen_1.Name}}),Object.defineProperty(exports$1,"CodeGen",{enumerable:!0,get:function(){return codegen_1.CodeGen}});var validation_error_1=requireValidation_error$1();Object.defineProperty(exports$1,"ValidationError",{enumerable:!0,get:function(){return validation_error_1.default}});var ref_error_1=requireRef_error$1(); +Object.defineProperty(exports$1,"MissingRefError",{enumerable:!0,get:function(){return ref_error_1.default}})})(ajv$1,ajv$1.exports)),ajv$1.exports}var ajvExports=requireAjv$1();const Ajv=getDefaultExportFromCjs(ajvExports);var dist={exports:{}},formats={},hasRequiredFormats;function requireFormats(){return hasRequiredFormats||(hasRequiredFormats=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.formatNames=exports$1.fastFormats=exports$1.fullFormats=void 0; +function fmtDef(validate2,compare){return{validate:validate2,compare}}exports$1.fullFormats={date:fmtDef(date2,compareDate),time:fmtDef(getTime(!0),compareTime),"date-time":fmtDef(getDateTime(!0),compareDateTime),"iso-time":fmtDef(getTime(),compareIsoTime),"iso-date-time":fmtDef(getDateTime(),compareIsoDateTime),duration:/^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/,uri:uri2,"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i, "uri-template":/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,url:/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu, email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/,ipv6:/^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i, -regex,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte,int32:{type:"number",validate:validateInt32},int64:{type:"number",validate:validateInt64},float:{type:"number",validate:validateNumber},double:{type:"number",validate:validateNumber},password:!0,binary:!0},exports. -fastFormats={...exports.fullFormats,date:fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,compareDate),time:fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,compareTime),"date-time":fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,compareDateTime),"iso-time":fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,compareIsoTime),"iso-date-time":fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, -compareIsoDateTime),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},exports.formatNames=Object.keys(exports.fullFormats);function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}const DATE2=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,DAYS=[0,31,28,31,30,31,30,31,31,30,31,30,31];function date2(str){ +regex,uuid:/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,"json-pointer":/^(?:\/(?:[^~/]|~0|~1)*)*$/,"json-pointer-uri-fragment":/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,"relative-json-pointer":/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,byte,int32:{type:"number",validate:validateInt32},int64:{type:"number",validate:validateInt64},float:{type:"number",validate:validateNumber},double:{type:"number",validate:validateNumber},password:!0,binary:!0},exports$1. +fastFormats={...exports$1.fullFormats,date:fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d$/,compareDate),time:fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,compareTime),"date-time":fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,compareDateTime),"iso-time":fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,compareIsoTime),"iso-date-time":fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, +compareIsoDateTime),uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i},exports$1.formatNames=Object.keys(exports$1.fullFormats);function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}const DATE2=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,DAYS=[0,31,28,31,30,31,30,31,31,30,31,30,31];function date2(str){ const matches2=DATE2.exec(str);if(!matches2)return!1;const year=+matches2[1],month=+matches2[2],day=+matches2[3];return month>=1&&month<=12&&day>=1&&day<=(month===2&&isLeapYear(year)?29:DAYS[month])}function compareDate(d1,d2){if(d1&&d2)return d1>d2?1:d1<d2?-1:0}const TIME=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i;function getTime(strictTimeZone){return function(str){const matches2=TIME.exec(str);if(!matches2)return!1;const hr=+matches2[1],min2=+matches2[2],sec=+matches2[3], tz=matches2[4],tzSign=matches2[5]==="-"?-1:1,tzH=+(matches2[6]||0),tzM=+(matches2[7]||0);if(tzH>23||tzM>59||strictTimeZone&&!tz)return!1;if(hr<=23&&min2<=59&&sec<60)return!0;const utcMin=min2-tzM*tzSign,utcHr=hr-tzH*tzSign-(utcMin<0?1:0);return(utcHr===23||utcHr===-1)&&(utcMin===59||utcMin===-1)&&sec<61}}function compareTime(s1,s2){if(!(s1&&s2))return;const t1=new Date("2020-01-01T"+s1).valueOf(),t2=new Date("2020-01-01T"+s2).valueOf();if(t1&&t2)return t1-t2}function compareIsoTime(t1,t2){if(!(t1&& t2))return;const a1=TIME.exec(t1),a2=TIME.exec(t2);if(a1&&a2)return t1=a1[1]+a1[2]+a1[3],t2=a2[1]+a2[2]+a2[3],t1>t2?1:t1<t2?-1:0}const DATE_TIME_SEPARATOR=/t|\s/i;function getDateTime(strictTimeZone){const time2=getTime(strictTimeZone);return function(str){const dateTime=str.split(DATE_TIME_SEPARATOR);return dateTime.length===2&&date2(dateTime[0])&&time2(dateTime[1])}}function compareDateTime(dt1,dt2){if(!(dt1&&dt2))return;const d1=new Date(dt1).valueOf(),d2=new Date(dt2).valueOf();if(d1&&d2)return d1- d2}function compareIsoDateTime(dt1,dt2){if(!(dt1&&dt2))return;const[d1,t1]=dt1.split(DATE_TIME_SEPARATOR),[d2,t2]=dt2.split(DATE_TIME_SEPARATOR),res=compareDate(d1,d2);if(res!==void 0)return res||compareTime(t1,t2)}const NOT_URI_FRAGMENT=/\/|:/,URI=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i; function uri2(str){return NOT_URI_FRAGMENT.test(str)&&URI.test(str)}const BYTE=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;function byte(str){return BYTE.lastIndex=0,BYTE.test(str)}const MIN_INT32=-2147483648,MAX_INT32=2**31-1;function validateInt32(value){return Number.isInteger(value)&&value<=MAX_INT32&&value>=MIN_INT32}function validateInt64(value){return Number.isInteger(value)}function validateNumber(){return!0}const Z_ANCHOR=/[^\\]\\Z/;function regex(str){if(Z_ANCHOR. -test(str))return!1;try{return new RegExp(str),!0}catch{return!1}}}(formats)),formats}var limit={},ajv={exports:{}},core$2={},validate={},boolSchema={},errors={},codegen={},code$4={},hasRequiredCode$1;function requireCode$1(){return hasRequiredCode$1||(hasRequiredCode$1=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.regexpCode=exports.getEsmExportName=exports.getProperty=exports.safeStringify=exports.stringify=exports.strConcat=exports.addCodeArg=exports.str=exports. -_=exports.nil=exports._Code=exports.Name=exports.IDENTIFIER=exports._CodeOrName=void 0;class _CodeOrName{}exports._CodeOrName=_CodeOrName,exports.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class Name extends _CodeOrName{constructor(s2){if(super(),!exports.IDENTIFIER.test(s2))throw new Error("CodeGen: name must be a valid identifier");this.str=s2}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}exports.Name=Name;class _Code extends _CodeOrName{constructor(code2){super(),this. -_items=typeof code2=="string"?[code2]:code2}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const item=this._items[0];return item===""||item==='""'}get str(){var _a2;return(_a2=this._str)!==null&&_a2!==void 0?_a2:this._str=this._items.reduce((s2,c2)=>`${s2}${c2}`,"")}get names(){var _a2;return(_a2=this._names)!==null&&_a2!==void 0?_a2:this._names=this._items.reduce((names2,c2)=>(c2 instanceof Name&&(names2[c2.str]=(names2[c2.str]||0)+1),names2),{})}}exports._Code=_Code,exports. -nil=new _Code("");function _(strs,...args){const code2=[strs[0]];let i=0;for(;i<args.length;)addCodeArg(code2,args[i]),code2.push(strs[++i]);return new _Code(code2)}exports._=_;const plus=new _Code("+");function str(strs,...args){const expr=[safeStringify(strs[0])];let i=0;for(;i<args.length;)expr.push(plus),addCodeArg(expr,args[i]),expr.push(plus,safeStringify(strs[++i]));return optimize(expr),new _Code(expr)}exports.str=str;function addCodeArg(code2,arg){arg instanceof _Code?code2.push(...arg. -_items):arg instanceof Name?code2.push(arg):code2.push(interpolate(arg))}exports.addCodeArg=addCodeArg;function optimize(expr){let i=1;for(;i<expr.length-1;){if(expr[i]===plus){const res=mergeExprItems(expr[i-1],expr[i+1]);if(res!==void 0){expr.splice(i-1,3,res);continue}expr[i++]="+"}i++}}function mergeExprItems(a,b){if(b==='""')return a;if(a==='""')return b;if(typeof a=="string")return b instanceof Name||a[a.length-1]!=='"'?void 0:typeof b!="string"?`${a.slice(0,-1)}${b}"`:b[0]==='"'?a.slice(0, --1)+b.slice(1):void 0;if(typeof b=="string"&&b[0]==='"'&&!(a instanceof Name))return`"${a}${b.slice(1)}`}function strConcat(c1,c2){return c2.emptyStr()?c1:c1.emptyStr()?c2:str`${c1}${c2}`}exports.strConcat=strConcat;function interpolate(x){return typeof x=="number"||typeof x=="boolean"||x===null?x:safeStringify(Array.isArray(x)?x.join(","):x)}function stringify2(x){return new _Code(safeStringify(x))}exports.stringify=stringify2;function safeStringify(x){return JSON.stringify(x).replace(/\u2028/g, -"\\u2028").replace(/\u2029/g,"\\u2029")}exports.safeStringify=safeStringify;function getProperty(key2){return typeof key2=="string"&&exports.IDENTIFIER.test(key2)?new _Code(`.${key2}`):_`[${key2}]`}exports.getProperty=getProperty;function getEsmExportName(key2){if(typeof key2=="string"&&exports.IDENTIFIER.test(key2))return new _Code(`${key2}`);throw new Error(`CodeGen: invalid export name: ${key2}, use explicit $id name mapping`)}exports.getEsmExportName=getEsmExportName;function regexpCode(rx){ -return new _Code(rx.toString())}exports.regexpCode=regexpCode}(code$4)),code$4}var scope={},hasRequiredScope;function requireScope(){return hasRequiredScope||(hasRequiredScope=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.ValueScope=exports.ValueScopeName=exports.Scope=exports.varKinds=exports.UsedValueState=void 0;const code_1=requireCode$1();class ValueError extends Error{constructor(name){super(`CodeGen: "code" for ${name} not defined`),this.value=name.value}} -var UsedValueState;(function(UsedValueState2){UsedValueState2[UsedValueState2.Started=0]="Started",UsedValueState2[UsedValueState2.Completed=1]="Completed"})(UsedValueState||(exports.UsedValueState=UsedValueState={})),exports.varKinds={const:new code_1.Name("const"),let:new code_1.Name("let"),var:new code_1.Name("var")};class Scope{constructor({prefixes,parent}={}){this._names={},this._prefixes=prefixes,this._parent=parent}toName(nameOrPrefix){return nameOrPrefix instanceof code_1.Name?nameOrPrefix: -this.name(nameOrPrefix)}name(prefix){return new code_1.Name(this._newName(prefix))}_newName(prefix){const ng=this._names[prefix]||this._nameGroup(prefix);return`${prefix}${ng.index++}`}_nameGroup(prefix){var _a2,_b;if(!((_b=(_a2=this._parent)===null||_a2===void 0?void 0:_a2._prefixes)===null||_b===void 0)&&_b.has(prefix)||this._prefixes&&!this._prefixes.has(prefix))throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`);return this._names[prefix]={prefix,index:0}}}exports.Scope= -Scope;class ValueScopeName extends code_1.Name{constructor(prefix,nameStr){super(nameStr),this.prefix=prefix}setValue(value,{property,itemIndex}){this.value=value,this.scopePath=(0,code_1._)`.${new code_1.Name(property)}[${itemIndex}]`}}exports.ValueScopeName=ValueScopeName;const line=(0,code_1._)`\n`;class ValueScope extends Scope{constructor(opts){super(opts),this._values={},this._scope=opts.scope,this.opts={...opts,_n:opts.lines?line:code_1.nil}}get(){return this._scope}name(prefix){return new ValueScopeName( -prefix,this._newName(prefix))}value(nameOrPrefix,value){var _a2;if(value.ref===void 0)throw new Error("CodeGen: ref must be passed in value");const name=this.toName(nameOrPrefix),{prefix}=name,valueKey=(_a2=value.key)!==null&&_a2!==void 0?_a2:value.ref;let vs=this._values[prefix];if(vs){const _name=vs.get(valueKey);if(_name)return _name}else vs=this._values[prefix]=new Map;vs.set(valueKey,name);const s2=this._scope[prefix]||(this._scope[prefix]=[]),itemIndex=s2.length;return s2[itemIndex]=value. -ref,name.setValue(value,{property:prefix,itemIndex}),name}getValue(prefix,keyOrRef){const vs=this._values[prefix];if(vs)return vs.get(keyOrRef)}scopeRefs(scopeName,values=this._values){return this._reduceValues(values,name=>{if(name.scopePath===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return(0,code_1._)`${scopeName}${name.scopePath}`})}scopeCode(values=this._values,usedValues,getCode){return this._reduceValues(values,name=>{if(name.value===void 0)throw new Error(`CodeGen: n\ -ame "${name}" has no value`);return name.value.code},usedValues,getCode)}_reduceValues(values,valueCode,usedValues={},getCode){let code2=code_1.nil;for(const prefix in values){const vs=values[prefix];if(!vs)continue;const nameSet=usedValues[prefix]=usedValues[prefix]||new Map;vs.forEach(name=>{if(nameSet.has(name))return;nameSet.set(name,UsedValueState.Started);let c2=valueCode(name);if(c2){const def=this.opts.es5?exports.varKinds.var:exports.varKinds.const;code2=(0,code_1._)`${code2}${def} ${name} = ${c2};${this. -opts._n}`}else if(c2=getCode?.(name))code2=(0,code_1._)`${code2}${c2}${this.opts._n}`;else throw new ValueError(name);nameSet.set(name,UsedValueState.Completed)})}return code2}}exports.ValueScope=ValueScope}(scope)),scope}var hasRequiredCodegen;function requireCodegen(){return hasRequiredCodegen||(hasRequiredCodegen=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.or=exports.and=exports.not=exports.CodeGen=exports.operators=exports.varKinds=exports.ValueScopeName= -exports.ValueScope=exports.Scope=exports.Name=exports.regexpCode=exports.stringify=exports.getProperty=exports.nil=exports.strConcat=exports.str=exports._=void 0;const code_1=requireCode$1(),scope_1=requireScope();var code_2=requireCode$1();Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return code_2._}}),Object.defineProperty(exports,"str",{enumerable:!0,get:function(){return code_2.str}}),Object.defineProperty(exports,"strConcat",{enumerable:!0,get:function(){return code_2.strConcat}}), -Object.defineProperty(exports,"nil",{enumerable:!0,get:function(){return code_2.nil}}),Object.defineProperty(exports,"getProperty",{enumerable:!0,get:function(){return code_2.getProperty}}),Object.defineProperty(exports,"stringify",{enumerable:!0,get:function(){return code_2.stringify}}),Object.defineProperty(exports,"regexpCode",{enumerable:!0,get:function(){return code_2.regexpCode}}),Object.defineProperty(exports,"Name",{enumerable:!0,get:function(){return code_2.Name}});var scope_2=requireScope(); -Object.defineProperty(exports,"Scope",{enumerable:!0,get:function(){return scope_2.Scope}}),Object.defineProperty(exports,"ValueScope",{enumerable:!0,get:function(){return scope_2.ValueScope}}),Object.defineProperty(exports,"ValueScopeName",{enumerable:!0,get:function(){return scope_2.ValueScopeName}}),Object.defineProperty(exports,"varKinds",{enumerable:!0,get:function(){return scope_2.varKinds}}),exports.operators={GT:new code_1._Code(">"),GTE:new code_1._Code(">="),LT:new code_1._Code("<"),LTE:new code_1. -_Code("<="),EQ:new code_1._Code("==="),NEQ:new code_1._Code("!=="),NOT:new code_1._Code("!"),OR:new code_1._Code("||"),AND:new code_1._Code("&&"),ADD:new code_1._Code("+")};class Node2{optimizeNodes(){return this}optimizeNames(_names,_constants){return this}}class Def extends Node2{constructor(varKind,name,rhs){super(),this.varKind=varKind,this.name=name,this.rhs=rhs}render({es5,_n}){const varKind=es5?scope_1.varKinds.var:this.varKind,rhs=this.rhs===void 0?"":` = ${this.rhs}`;return`${varKind} ${this. -name}${rhs};`+_n}optimizeNames(names2,constants2){if(names2[this.name.str])return this.rhs&&(this.rhs=optimizeExpr(this.rhs,names2,constants2)),this}get names(){return this.rhs instanceof code_1._CodeOrName?this.rhs.names:{}}}class Assign extends Node2{constructor(lhs,rhs,sideEffects){super(),this.lhs=lhs,this.rhs=rhs,this.sideEffects=sideEffects}render({_n}){return`${this.lhs} = ${this.rhs};`+_n}optimizeNames(names2,constants2){if(!(this.lhs instanceof code_1.Name&&!names2[this.lhs.str]&&!this. -sideEffects))return this.rhs=optimizeExpr(this.rhs,names2,constants2),this}get names(){const names2=this.lhs instanceof code_1.Name?{}:{...this.lhs.names};return addExprNames(names2,this.rhs)}}class AssignOp extends Assign{constructor(lhs,op2,rhs,sideEffects){super(lhs,rhs,sideEffects),this.op=op2}render({_n}){return`${this.lhs} ${this.op}= ${this.rhs};`+_n}}class Label2 extends Node2{constructor(label){super(),this.label=label,this.names={}}render({_n}){return`${this.label}:`+_n}}class Break extends Node2{constructor(label){ -super(),this.label=label,this.names={}}render({_n}){return`break${this.label?` ${this.label}`:""};`+_n}}class Throw extends Node2{constructor(error2){super(),this.error=error2}render({_n}){return`throw ${this.error};`+_n}get names(){return this.error.names}}class AnyCode extends Node2{constructor(code2){super(),this.code=code2}render({_n}){return`${this.code};`+_n}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(names2,constants2){return this.code=optimizeExpr(this.code,names2,constants2), -this}get names(){return this.code instanceof code_1._CodeOrName?this.code.names:{}}}class ParentNode extends Node2{constructor(nodes2=[]){super(),this.nodes=nodes2}render(opts){return this.nodes.reduce((code2,n)=>code2+n.render(opts),"")}optimizeNodes(){const{nodes:nodes2}=this;let i=nodes2.length;for(;i--;){const n=nodes2[i].optimizeNodes();Array.isArray(n)?nodes2.splice(i,1,...n):n?nodes2[i]=n:nodes2.splice(i,1)}return nodes2.length>0?this:void 0}optimizeNames(names2,constants2){const{nodes:nodes2}=this; -let i=nodes2.length;for(;i--;){const n=nodes2[i];n.optimizeNames(names2,constants2)||(subtractNames(names2,n.names),nodes2.splice(i,1))}return nodes2.length>0?this:void 0}get names(){return this.nodes.reduce((names2,n)=>addNames(names2,n.names),{})}}class BlockNode extends ParentNode{render(opts){return"{"+opts._n+super.render(opts)+"}"+opts._n}}class Root2 extends ParentNode{}class Else extends BlockNode{}Else.kind="else";class If extends BlockNode{constructor(condition,nodes2){super(nodes2),this. -condition=condition}render(opts){let code2=`if(${this.condition})`+super.render(opts);return this.else&&(code2+="else "+this.else.render(opts)),code2}optimizeNodes(){super.optimizeNodes();const cond=this.condition;if(cond===!0)return this.nodes;let e=this.else;if(e){const ns=e.optimizeNodes();e=this.else=Array.isArray(ns)?new Else(ns):ns}if(e)return cond===!1?e instanceof If?e:e.nodes:this.nodes.length?this:new If(not2(cond),e instanceof If?[e]:e.nodes);if(!(cond===!1||!this.nodes.length))return this}optimizeNames(names2,constants2){ -var _a2;if(this.else=(_a2=this.else)===null||_a2===void 0?void 0:_a2.optimizeNames(names2,constants2),!!(super.optimizeNames(names2,constants2)||this.else))return this.condition=optimizeExpr(this.condition,names2,constants2),this}get names(){const names2=super.names;return addExprNames(names2,this.condition),this.else&&addNames(names2,this.else.names),names2}}If.kind="if";class For extends BlockNode{}For.kind="for";class ForLoop extends For{constructor(iteration){super(),this.iteration=iteration}render(opts){ -return`for(${this.iteration})`+super.render(opts)}optimizeNames(names2,constants2){if(super.optimizeNames(names2,constants2))return this.iteration=optimizeExpr(this.iteration,names2,constants2),this}get names(){return addNames(super.names,this.iteration.names)}}class ForRange extends For{constructor(varKind,name,from,to){super(),this.varKind=varKind,this.name=name,this.from=from,this.to=to}render(opts){const varKind=opts.es5?scope_1.varKinds.var:this.varKind,{name,from,to}=this;return`for(${varKind}\ - ${name}=${from}; ${name}<${to}; ${name}++)`+super.render(opts)}get names(){const names2=addExprNames(super.names,this.from);return addExprNames(names2,this.to)}}class ForIter extends For{constructor(loop2,varKind,name,iterable){super(),this.loop=loop2,this.varKind=varKind,this.name=name,this.iterable=iterable}render(opts){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(opts)}optimizeNames(names2,constants2){if(super.optimizeNames(names2,constants2))return this. -iterable=optimizeExpr(this.iterable,names2,constants2),this}get names(){return addNames(super.names,this.iterable.names)}}class Func extends BlockNode{constructor(name,args,async){super(),this.name=name,this.args=args,this.async=async}render(opts){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(opts)}}Func.kind="func";class Return extends ParentNode{render(opts){return"return "+super.render(opts)}}Return.kind="return";class Try extends BlockNode{render(opts){let code2="\ -try"+super.render(opts);return this.catch&&(code2+=this.catch.render(opts)),this.finally&&(code2+=this.finally.render(opts)),code2}optimizeNodes(){var _a2,_b;return super.optimizeNodes(),(_a2=this.catch)===null||_a2===void 0||_a2.optimizeNodes(),(_b=this.finally)===null||_b===void 0||_b.optimizeNodes(),this}optimizeNames(names2,constants2){var _a2,_b;return super.optimizeNames(names2,constants2),(_a2=this.catch)===null||_a2===void 0||_a2.optimizeNames(names2,constants2),(_b=this.finally)===null|| -_b===void 0||_b.optimizeNames(names2,constants2),this}get names(){const names2=super.names;return this.catch&&addNames(names2,this.catch.names),this.finally&&addNames(names2,this.finally.names),names2}}class Catch extends BlockNode{constructor(error2){super(),this.error=error2}render(opts){return`catch(${this.error})`+super.render(opts)}}Catch.kind="catch";class Finally extends BlockNode{render(opts){return"finally"+super.render(opts)}}Finally.kind="finally";class CodeGen{constructor(extScope,opts={}){ -this._values={},this._blockStarts=[],this._constants={},this.opts={...opts,_n:opts.lines?` +test(str))return!1;try{return new RegExp(str),!0}catch{return!1}}})(formats)),formats}var limit={},ajv={exports:{}},core$2={},validate={},boolSchema={},errors={},codegen={},code$4={},hasRequiredCode$1;function requireCode$1(){return hasRequiredCode$1||(hasRequiredCode$1=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.regexpCode=exports$1.getEsmExportName=exports$1.getProperty=exports$1.safeStringify=exports$1.stringify=exports$1.strConcat=exports$1.addCodeArg= +exports$1.str=exports$1._=exports$1.nil=exports$1._Code=exports$1.Name=exports$1.IDENTIFIER=exports$1._CodeOrName=void 0;class _CodeOrName{}exports$1._CodeOrName=_CodeOrName,exports$1.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class Name extends _CodeOrName{constructor(s2){if(super(),!exports$1.IDENTIFIER.test(s2))throw new Error("CodeGen: name must be a valid identifier");this.str=s2}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}exports$1.Name=Name;class _Code extends _CodeOrName{constructor(code2){ +super(),this._items=typeof code2=="string"?[code2]:code2}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const item=this._items[0];return item===""||item==='""'}get str(){var _a2;return(_a2=this._str)!==null&&_a2!==void 0?_a2:this._str=this._items.reduce((s2,c2)=>`${s2}${c2}`,"")}get names(){var _a2;return(_a2=this._names)!==null&&_a2!==void 0?_a2:this._names=this._items.reduce((names2,c2)=>(c2 instanceof Name&&(names2[c2.str]=(names2[c2.str]||0)+1),names2),{})}}exports$1. +_Code=_Code,exports$1.nil=new _Code("");function _(strs,...args){const code2=[strs[0]];let i=0;for(;i<args.length;)addCodeArg(code2,args[i]),code2.push(strs[++i]);return new _Code(code2)}exports$1._=_;const plus=new _Code("+");function str(strs,...args){const expr=[safeStringify(strs[0])];let i=0;for(;i<args.length;)expr.push(plus),addCodeArg(expr,args[i]),expr.push(plus,safeStringify(strs[++i]));return optimize(expr),new _Code(expr)}exports$1.str=str;function addCodeArg(code2,arg){arg instanceof +_Code?code2.push(...arg._items):arg instanceof Name?code2.push(arg):code2.push(interpolate(arg))}exports$1.addCodeArg=addCodeArg;function optimize(expr){let i=1;for(;i<expr.length-1;){if(expr[i]===plus){const res=mergeExprItems(expr[i-1],expr[i+1]);if(res!==void 0){expr.splice(i-1,3,res);continue}expr[i++]="+"}i++}}function mergeExprItems(a,b){if(b==='""')return a;if(a==='""')return b;if(typeof a=="string")return b instanceof Name||a[a.length-1]!=='"'?void 0:typeof b!="string"?`${a.slice(0,-1)}${b}\ +"`:b[0]==='"'?a.slice(0,-1)+b.slice(1):void 0;if(typeof b=="string"&&b[0]==='"'&&!(a instanceof Name))return`"${a}${b.slice(1)}`}function strConcat(c1,c2){return c2.emptyStr()?c1:c1.emptyStr()?c2:str`${c1}${c2}`}exports$1.strConcat=strConcat;function interpolate(x){return typeof x=="number"||typeof x=="boolean"||x===null?x:safeStringify(Array.isArray(x)?x.join(","):x)}function stringify2(x){return new _Code(safeStringify(x))}exports$1.stringify=stringify2;function safeStringify(x){return JSON.stringify( +x).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}exports$1.safeStringify=safeStringify;function getProperty(key2){return typeof key2=="string"&&exports$1.IDENTIFIER.test(key2)?new _Code(`.${key2}`):_`[${key2}]`}exports$1.getProperty=getProperty;function getEsmExportName(key2){if(typeof key2=="string"&&exports$1.IDENTIFIER.test(key2))return new _Code(`${key2}`);throw new Error(`CodeGen: invalid export name: ${key2}, use explicit $id name mapping`)}exports$1.getEsmExportName=getEsmExportName; +function regexpCode(rx){return new _Code(rx.toString())}exports$1.regexpCode=regexpCode})(code$4)),code$4}var scope={},hasRequiredScope;function requireScope(){return hasRequiredScope||(hasRequiredScope=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.ValueScope=exports$1.ValueScopeName=exports$1.Scope=exports$1.varKinds=exports$1.UsedValueState=void 0;const code_1=requireCode$1();class ValueError extends Error{constructor(name){super(`CodeGen: "code" for\ + ${name} not defined`),this.value=name.value}}var UsedValueState;(function(UsedValueState2){UsedValueState2[UsedValueState2.Started=0]="Started",UsedValueState2[UsedValueState2.Completed=1]="Completed"})(UsedValueState||(exports$1.UsedValueState=UsedValueState={})),exports$1.varKinds={const:new code_1.Name("const"),let:new code_1.Name("let"),var:new code_1.Name("var")};class Scope{constructor({prefixes,parent}={}){this._names={},this._prefixes=prefixes,this._parent=parent}toName(nameOrPrefix){return nameOrPrefix instanceof +code_1.Name?nameOrPrefix:this.name(nameOrPrefix)}name(prefix){return new code_1.Name(this._newName(prefix))}_newName(prefix){const ng=this._names[prefix]||this._nameGroup(prefix);return`${prefix}${ng.index++}`}_nameGroup(prefix){var _a2,_b;if(!((_b=(_a2=this._parent)===null||_a2===void 0?void 0:_a2._prefixes)===null||_b===void 0)&&_b.has(prefix)||this._prefixes&&!this._prefixes.has(prefix))throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`);return this._names[prefix]={prefix, +index:0}}}exports$1.Scope=Scope;class ValueScopeName extends code_1.Name{constructor(prefix,nameStr){super(nameStr),this.prefix=prefix}setValue(value,{property,itemIndex}){this.value=value,this.scopePath=(0,code_1._)`.${new code_1.Name(property)}[${itemIndex}]`}}exports$1.ValueScopeName=ValueScopeName;const line=(0,code_1._)`\n`;class ValueScope extends Scope{constructor(opts){super(opts),this._values={},this._scope=opts.scope,this.opts={...opts,_n:opts.lines?line:code_1.nil}}get(){return this._scope}name(prefix){ +return new ValueScopeName(prefix,this._newName(prefix))}value(nameOrPrefix,value){var _a2;if(value.ref===void 0)throw new Error("CodeGen: ref must be passed in value");const name=this.toName(nameOrPrefix),{prefix}=name,valueKey=(_a2=value.key)!==null&&_a2!==void 0?_a2:value.ref;let vs=this._values[prefix];if(vs){const _name=vs.get(valueKey);if(_name)return _name}else vs=this._values[prefix]=new Map;vs.set(valueKey,name);const s2=this._scope[prefix]||(this._scope[prefix]=[]),itemIndex=s2.length;return s2[itemIndex]= +value.ref,name.setValue(value,{property:prefix,itemIndex}),name}getValue(prefix,keyOrRef){const vs=this._values[prefix];if(vs)return vs.get(keyOrRef)}scopeRefs(scopeName,values=this._values){return this._reduceValues(values,name=>{if(name.scopePath===void 0)throw new Error(`CodeGen: name "${name}" has no value`);return(0,code_1._)`${scopeName}${name.scopePath}`})}scopeCode(values=this._values,usedValues,getCode){return this._reduceValues(values,name=>{if(name.value===void 0)throw new Error(`Code\ +Gen: name "${name}" has no value`);return name.value.code},usedValues,getCode)}_reduceValues(values,valueCode,usedValues={},getCode){let code2=code_1.nil;for(const prefix in values){const vs=values[prefix];if(!vs)continue;const nameSet=usedValues[prefix]=usedValues[prefix]||new Map;vs.forEach(name=>{if(nameSet.has(name))return;nameSet.set(name,UsedValueState.Started);let c2=valueCode(name);if(c2){const def=this.opts.es5?exports$1.varKinds.var:exports$1.varKinds.const;code2=(0,code_1._)`${code2}${def} ${name} = ${c2};${this. +opts._n}`}else if(c2=getCode?.(name))code2=(0,code_1._)`${code2}${c2}${this.opts._n}`;else throw new ValueError(name);nameSet.set(name,UsedValueState.Completed)})}return code2}}exports$1.ValueScope=ValueScope})(scope)),scope}var hasRequiredCodegen;function requireCodegen(){return hasRequiredCodegen||(hasRequiredCodegen=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.or=exports$1.and=exports$1.not=exports$1.CodeGen=exports$1.operators=exports$1.varKinds=exports$1. +ValueScopeName=exports$1.ValueScope=exports$1.Scope=exports$1.Name=exports$1.regexpCode=exports$1.stringify=exports$1.getProperty=exports$1.nil=exports$1.strConcat=exports$1.str=exports$1._=void 0;const code_1=requireCode$1(),scope_1=requireScope();var code_2=requireCode$1();Object.defineProperty(exports$1,"_",{enumerable:!0,get:function(){return code_2._}}),Object.defineProperty(exports$1,"str",{enumerable:!0,get:function(){return code_2.str}}),Object.defineProperty(exports$1,"strConcat",{enumerable:!0, +get:function(){return code_2.strConcat}}),Object.defineProperty(exports$1,"nil",{enumerable:!0,get:function(){return code_2.nil}}),Object.defineProperty(exports$1,"getProperty",{enumerable:!0,get:function(){return code_2.getProperty}}),Object.defineProperty(exports$1,"stringify",{enumerable:!0,get:function(){return code_2.stringify}}),Object.defineProperty(exports$1,"regexpCode",{enumerable:!0,get:function(){return code_2.regexpCode}}),Object.defineProperty(exports$1,"Name",{enumerable:!0,get:function(){ +return code_2.Name}});var scope_2=requireScope();Object.defineProperty(exports$1,"Scope",{enumerable:!0,get:function(){return scope_2.Scope}}),Object.defineProperty(exports$1,"ValueScope",{enumerable:!0,get:function(){return scope_2.ValueScope}}),Object.defineProperty(exports$1,"ValueScopeName",{enumerable:!0,get:function(){return scope_2.ValueScopeName}}),Object.defineProperty(exports$1,"varKinds",{enumerable:!0,get:function(){return scope_2.varKinds}}),exports$1.operators={GT:new code_1._Code( +">"),GTE:new code_1._Code(">="),LT:new code_1._Code("<"),LTE:new code_1._Code("<="),EQ:new code_1._Code("==="),NEQ:new code_1._Code("!=="),NOT:new code_1._Code("!"),OR:new code_1._Code("||"),AND:new code_1._Code("&&"),ADD:new code_1._Code("+")};class Node2{optimizeNodes(){return this}optimizeNames(_names,_constants){return this}}class Def extends Node2{constructor(varKind,name,rhs){super(),this.varKind=varKind,this.name=name,this.rhs=rhs}render({es5,_n}){const varKind=es5?scope_1.varKinds.var:this. +varKind,rhs=this.rhs===void 0?"":` = ${this.rhs}`;return`${varKind} ${this.name}${rhs};`+_n}optimizeNames(names2,constants2){if(names2[this.name.str])return this.rhs&&(this.rhs=optimizeExpr(this.rhs,names2,constants2)),this}get names(){return this.rhs instanceof code_1._CodeOrName?this.rhs.names:{}}}class Assign extends Node2{constructor(lhs,rhs,sideEffects){super(),this.lhs=lhs,this.rhs=rhs,this.sideEffects=sideEffects}render({_n}){return`${this.lhs} = ${this.rhs};`+_n}optimizeNames(names2,constants2){ +if(!(this.lhs instanceof code_1.Name&&!names2[this.lhs.str]&&!this.sideEffects))return this.rhs=optimizeExpr(this.rhs,names2,constants2),this}get names(){const names2=this.lhs instanceof code_1.Name?{}:{...this.lhs.names};return addExprNames(names2,this.rhs)}}class AssignOp extends Assign{constructor(lhs,op2,rhs,sideEffects){super(lhs,rhs,sideEffects),this.op=op2}render({_n}){return`${this.lhs} ${this.op}= ${this.rhs};`+_n}}class Label2 extends Node2{constructor(label){super(),this.label=label,this. +names={}}render({_n}){return`${this.label}:`+_n}}class Break extends Node2{constructor(label){super(),this.label=label,this.names={}}render({_n}){return`break${this.label?` ${this.label}`:""};`+_n}}class Throw extends Node2{constructor(error2){super(),this.error=error2}render({_n}){return`throw ${this.error};`+_n}get names(){return this.error.names}}class AnyCode extends Node2{constructor(code2){super(),this.code=code2}render({_n}){return`${this.code};`+_n}optimizeNodes(){return`${this.code}`?this: +void 0}optimizeNames(names2,constants2){return this.code=optimizeExpr(this.code,names2,constants2),this}get names(){return this.code instanceof code_1._CodeOrName?this.code.names:{}}}class ParentNode extends Node2{constructor(nodes2=[]){super(),this.nodes=nodes2}render(opts){return this.nodes.reduce((code2,n)=>code2+n.render(opts),"")}optimizeNodes(){const{nodes:nodes2}=this;let i=nodes2.length;for(;i--;){const n=nodes2[i].optimizeNodes();Array.isArray(n)?nodes2.splice(i,1,...n):n?nodes2[i]=n:nodes2. +splice(i,1)}return nodes2.length>0?this:void 0}optimizeNames(names2,constants2){const{nodes:nodes2}=this;let i=nodes2.length;for(;i--;){const n=nodes2[i];n.optimizeNames(names2,constants2)||(subtractNames(names2,n.names),nodes2.splice(i,1))}return nodes2.length>0?this:void 0}get names(){return this.nodes.reduce((names2,n)=>addNames(names2,n.names),{})}}class BlockNode extends ParentNode{render(opts){return"{"+opts._n+super.render(opts)+"}"+opts._n}}class Root2 extends ParentNode{}class Else extends BlockNode{} +Else.kind="else";class If extends BlockNode{constructor(condition,nodes2){super(nodes2),this.condition=condition}render(opts){let code2=`if(${this.condition})`+super.render(opts);return this.else&&(code2+="else "+this.else.render(opts)),code2}optimizeNodes(){super.optimizeNodes();const cond=this.condition;if(cond===!0)return this.nodes;let e=this.else;if(e){const ns=e.optimizeNodes();e=this.else=Array.isArray(ns)?new Else(ns):ns}if(e)return cond===!1?e instanceof If?e:e.nodes:this.nodes.length?this: +new If(not2(cond),e instanceof If?[e]:e.nodes);if(!(cond===!1||!this.nodes.length))return this}optimizeNames(names2,constants2){var _a2;if(this.else=(_a2=this.else)===null||_a2===void 0?void 0:_a2.optimizeNames(names2,constants2),!!(super.optimizeNames(names2,constants2)||this.else))return this.condition=optimizeExpr(this.condition,names2,constants2),this}get names(){const names2=super.names;return addExprNames(names2,this.condition),this.else&&addNames(names2,this.else.names),names2}}If.kind="i\ +f";class For extends BlockNode{}For.kind="for";class ForLoop extends For{constructor(iteration){super(),this.iteration=iteration}render(opts){return`for(${this.iteration})`+super.render(opts)}optimizeNames(names2,constants2){if(super.optimizeNames(names2,constants2))return this.iteration=optimizeExpr(this.iteration,names2,constants2),this}get names(){return addNames(super.names,this.iteration.names)}}class ForRange extends For{constructor(varKind,name,from,to){super(),this.varKind=varKind,this.name= +name,this.from=from,this.to=to}render(opts){const varKind=opts.es5?scope_1.varKinds.var:this.varKind,{name,from,to}=this;return`for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)`+super.render(opts)}get names(){const names2=addExprNames(super.names,this.from);return addExprNames(names2,this.to)}}class ForIter extends For{constructor(loop2,varKind,name,iterable){super(),this.loop=loop2,this.varKind=varKind,this.name=name,this.iterable=iterable}render(opts){return`for(${this.varKind} ${this. +name} ${this.loop} ${this.iterable})`+super.render(opts)}optimizeNames(names2,constants2){if(super.optimizeNames(names2,constants2))return this.iterable=optimizeExpr(this.iterable,names2,constants2),this}get names(){return addNames(super.names,this.iterable.names)}}class Func extends BlockNode{constructor(name,args,async){super(),this.name=name,this.args=args,this.async=async}render(opts){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(opts)}}Func.kind="func";class Return extends ParentNode{render(opts){ +return"return "+super.render(opts)}}Return.kind="return";class Try extends BlockNode{render(opts){let code2="try"+super.render(opts);return this.catch&&(code2+=this.catch.render(opts)),this.finally&&(code2+=this.finally.render(opts)),code2}optimizeNodes(){var _a2,_b;return super.optimizeNodes(),(_a2=this.catch)===null||_a2===void 0||_a2.optimizeNodes(),(_b=this.finally)===null||_b===void 0||_b.optimizeNodes(),this}optimizeNames(names2,constants2){var _a2,_b;return super.optimizeNames(names2,constants2), +(_a2=this.catch)===null||_a2===void 0||_a2.optimizeNames(names2,constants2),(_b=this.finally)===null||_b===void 0||_b.optimizeNames(names2,constants2),this}get names(){const names2=super.names;return this.catch&&addNames(names2,this.catch.names),this.finally&&addNames(names2,this.finally.names),names2}}class Catch extends BlockNode{constructor(error2){super(),this.error=error2}render(opts){return`catch(${this.error})`+super.render(opts)}}Catch.kind="catch";class Finally extends BlockNode{render(opts){ +return"finally"+super.render(opts)}}Finally.kind="finally";class CodeGen{constructor(extScope,opts={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...opts,_n:opts.lines?` `:""},this._extScope=extScope,this._scope=new scope_1.Scope({parent:extScope}),this._nodes=[new Root2]}toString(){return this._root.render(this.opts)}name(prefix){return this._scope.name(prefix)}scopeName(prefix){return this._extScope.name(prefix)}scopeValue(prefixOrName,value){const name=this._extScope.value(prefixOrName,value);return(this._values[name.prefix]||(this._values[name.prefix]=new Set)).add(name),name}getScopeValue(prefix,keyOrRef){return this._extScope.getValue(prefix,keyOrRef)}scopeRefs(scopeName){ return this._extScope.scopeRefs(scopeName,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(varKind,nameOrPrefix,rhs,constant){const name=this._scope.toName(nameOrPrefix);return rhs!==void 0&&constant&&(this._constants[name.str]=rhs),this._leafNode(new Def(varKind,name,rhs)),name}const(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.const,nameOrPrefix,rhs,_constant)}let(nameOrPrefix,rhs,_constant){return this._def(scope_1.varKinds.let,nameOrPrefix,rhs,_constant)}var(nameOrPrefix,rhs,_constant){ -return this._def(scope_1.varKinds.var,nameOrPrefix,rhs,_constant)}assign(lhs,rhs,sideEffects){return this._leafNode(new Assign(lhs,rhs,sideEffects))}add(lhs,rhs){return this._leafNode(new AssignOp(lhs,exports.operators.ADD,rhs))}code(c2){return typeof c2=="function"?c2():c2!==code_1.nil&&this._leafNode(new AnyCode(c2)),this}object(...keyValues){const code2=["{"];for(const[key2,value]of keyValues)code2.length>1&&code2.push(","),code2.push(key2),(key2!==value||this.opts.es5)&&(code2.push(":"),(0,code_1. +return this._def(scope_1.varKinds.var,nameOrPrefix,rhs,_constant)}assign(lhs,rhs,sideEffects){return this._leafNode(new Assign(lhs,rhs,sideEffects))}add(lhs,rhs){return this._leafNode(new AssignOp(lhs,exports$1.operators.ADD,rhs))}code(c2){return typeof c2=="function"?c2():c2!==code_1.nil&&this._leafNode(new AnyCode(c2)),this}object(...keyValues){const code2=["{"];for(const[key2,value]of keyValues)code2.length>1&&code2.push(","),code2.push(key2),(key2!==value||this.opts.es5)&&(code2.push(":"),(0,code_1. addCodeArg)(code2,value));return code2.push("}"),new code_1._Code(code2)}if(condition,thenBody,elseBody){if(this._blockNode(new If(condition)),thenBody&&elseBody)this.code(thenBody).else().code(elseBody).endIf();else if(thenBody)this.code(thenBody).endIf();else if(elseBody)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(condition){return this._elseNode(new If(condition))}else(){return this._elseNode(new Else)}endIf(){return this._endBlockNode(If,Else)}_for(node2,forBody){ return this._blockNode(node2),forBody&&this.code(forBody).endFor(),this}for(iteration,forBody){return this._for(new ForLoop(iteration),forBody)}forRange(nameOrPrefix,from,to,forBody,varKind=this.opts.es5?scope_1.varKinds.var:scope_1.varKinds.let){const name=this._scope.toName(nameOrPrefix);return this._for(new ForRange(varKind,name,from,to),()=>forBody(name))}forOf(nameOrPrefix,iterable,forBody,varKind=scope_1.varKinds.const){const name=this._scope.toName(nameOrPrefix);if(this.opts.es5){const arr=iterable instanceof code_1.Name?iterable:this.var("_arr",iterable);return this.forRange("_i",0,(0,code_1._)`${arr}.length`,i=>{this.var(name,(0,code_1._)`${arr}[${i}]`),forBody(name)})}return this._for(new ForIter("of",varKind,name,iterable),()=>forBody(name))}forIn(nameOrPrefix,obj,forBody,varKind=this.opts.es5?scope_1.varKinds.var:scope_1.varKinds.const){if(this.opts.ownProperties)return this.forOf(nameOrPrefix,(0,code_1._)`Object.keys(${obj})`,forBody);const name=this._scope.toName(nameOrPrefix);return this._for( @@ -4482,13 +4566,13 @@ new ForIter("in",varKind,name,obj),()=>forBody(name))}endFor(){return this._endB catch" and "finally"');const node2=new Try;if(this._blockNode(node2),this.code(tryBody),catchCode){const error2=this.name("e");this._currNode=node2.catch=new Catch(error2),catchCode(error2)}return finallyCode&&(this._currNode=node2.finally=new Finally,this.code(finallyCode)),this._endBlockNode(Catch,Finally)}throw(error2){return this._leafNode(new Throw(error2))}block(body2,nodeCount){return this._blockStarts.push(this._nodes.length),body2&&this.code(body2).endBlock(nodeCount),this}endBlock(nodeCount){ const len=this._blockStarts.pop();if(len===void 0)throw new Error("CodeGen: not in self-balancing block");const toClose=this._nodes.length-len;if(toClose<0||nodeCount!==void 0&&toClose!==nodeCount)throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`);return this._nodes.length=len,this}func(name,args=code_1.nil,async,funcBody){return this._blockNode(new Func(name,args,async)),funcBody&&this.code(funcBody).endFunc(),this}endFunc(){return this._endBlockNode(Func)}optimize(n=1){ for(;n-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(node2){return this._currNode.nodes.push(node2),this}_blockNode(node2){this._currNode.nodes.push(node2),this._nodes.push(node2)}_endBlockNode(N1,N2){const n=this._currNode;if(n instanceof N1||N2&&n instanceof N2)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${N2?`${N1.kind}/${N2.kind}`:N1.kind}"`)}_elseNode(node2){const n=this._currNode;if(!(n instanceof If))throw new Error( -'CodeGen: "else" without "if"');return this._currNode=n.else=node2,this}get _root(){return this._nodes[0]}get _currNode(){const ns=this._nodes;return ns[ns.length-1]}set _currNode(node2){const ns=this._nodes;ns[ns.length-1]=node2}}exports.CodeGen=CodeGen;function addNames(names2,from){for(const n in from)names2[n]=(names2[n]||0)+(from[n]||0);return names2}function addExprNames(names2,from){return from instanceof code_1._CodeOrName?addNames(names2,from.names):names2}function optimizeExpr(expr,names2,constants2){ +'CodeGen: "else" without "if"');return this._currNode=n.else=node2,this}get _root(){return this._nodes[0]}get _currNode(){const ns=this._nodes;return ns[ns.length-1]}set _currNode(node2){const ns=this._nodes;ns[ns.length-1]=node2}}exports$1.CodeGen=CodeGen;function addNames(names2,from){for(const n in from)names2[n]=(names2[n]||0)+(from[n]||0);return names2}function addExprNames(names2,from){return from instanceof code_1._CodeOrName?addNames(names2,from.names):names2}function optimizeExpr(expr,names2,constants2){ if(expr instanceof code_1.Name)return replaceName(expr);if(!canOptimize(expr))return expr;return new code_1._Code(expr._items.reduce((items2,c2)=>(c2 instanceof code_1.Name&&(c2=replaceName(c2)),c2 instanceof code_1._Code?items2.push(...c2._items):items2.push(c2),items2),[]));function replaceName(n){const c2=constants2[n.str];return c2===void 0||names2[n.str]!==1?n:(delete names2[n.str],c2)}function canOptimize(e){return e instanceof code_1._Code&&e._items.some(c2=>c2 instanceof code_1.Name&&names2[c2. -str]===1&&constants2[c2.str]!==void 0)}}function subtractNames(names2,from){for(const n in from)names2[n]=(names2[n]||0)-(from[n]||0)}function not2(x){return typeof x=="boolean"||typeof x=="number"||x===null?!x:(0,code_1._)`!${par(x)}`}exports.not=not2;const andCode=mappend(exports.operators.AND);function and(...args){return args.reduce(andCode)}exports.and=and;const orCode=mappend(exports.operators.OR);function or(...args){return args.reduce(orCode)}exports.or=or;function mappend(op2){return(x,y)=>x=== -code_1.nil?y:y===code_1.nil?x:(0,code_1._)`${par(x)} ${op2} ${par(y)}`}function par(x){return x instanceof code_1.Name?x:(0,code_1._)`(${x})`}}(codegen)),codegen}var util={},hasRequiredUtil;function requireUtil(){if(hasRequiredUtil)return util;hasRequiredUtil=1,Object.defineProperty(util,"__esModule",{value:!0}),util.checkStrictMode=util.getErrorPath=util.Type=util.useFunc=util.setEvaluated=util.evaluatedPropsToName=util.mergeEvaluated=util.eachItem=util.unescapeJsonPointer=util.escapeJsonPointer= -util.escapeFragment=util.unescapeFragment=util.schemaRefOrVal=util.schemaHasRulesButRef=util.schemaHasRules=util.checkUnknownRules=util.alwaysValidSchema=util.toHash=void 0;const codegen_1=requireCodegen(),code_1=requireCode$1();function toHash(arr){const hash2={};for(const item of arr)hash2[item]=!0;return hash2}util.toHash=toHash;function alwaysValidSchema(it,schema){return typeof schema=="boolean"?schema:Object.keys(schema).length===0?!0:(checkUnknownRules(it,schema),!schemaHasRules(schema,it. -self.RULES.all))}util.alwaysValidSchema=alwaysValidSchema;function checkUnknownRules(it,schema=it.schema){const{opts,self:self2}=it;if(!opts.strictSchema||typeof schema=="boolean")return;const rules2=self2.RULES.keywords;for(const key2 in schema)rules2[key2]||checkStrictMode(it,`unknown keyword: "${key2}"`)}util.checkUnknownRules=checkUnknownRules;function schemaHasRules(schema,rules2){if(typeof schema=="boolean")return!schema;for(const key2 in schema)if(rules2[key2])return!0;return!1}util.schemaHasRules= -schemaHasRules;function schemaHasRulesButRef(schema,RULES){if(typeof schema=="boolean")return!schema;for(const key2 in schema)if(key2!=="$ref"&&RULES.all[key2])return!0;return!1}util.schemaHasRulesButRef=schemaHasRulesButRef;function schemaRefOrVal({topSchemaRef,schemaPath},schema,keyword2,$data){if(!$data){if(typeof schema=="number"||typeof schema=="boolean")return schema;if(typeof schema=="string")return(0,codegen_1._)`${schema}`}return(0,codegen_1._)`${topSchemaRef}${schemaPath}${(0,codegen_1. +str]===1&&constants2[c2.str]!==void 0)}}function subtractNames(names2,from){for(const n in from)names2[n]=(names2[n]||0)-(from[n]||0)}function not2(x){return typeof x=="boolean"||typeof x=="number"||x===null?!x:(0,code_1._)`!${par(x)}`}exports$1.not=not2;const andCode=mappend(exports$1.operators.AND);function and(...args){return args.reduce(andCode)}exports$1.and=and;const orCode=mappend(exports$1.operators.OR);function or(...args){return args.reduce(orCode)}exports$1.or=or;function mappend(op2){ +return(x,y)=>x===code_1.nil?y:y===code_1.nil?x:(0,code_1._)`${par(x)} ${op2} ${par(y)}`}function par(x){return x instanceof code_1.Name?x:(0,code_1._)`(${x})`}})(codegen)),codegen}var util={},hasRequiredUtil;function requireUtil(){if(hasRequiredUtil)return util;hasRequiredUtil=1,Object.defineProperty(util,"__esModule",{value:!0}),util.checkStrictMode=util.getErrorPath=util.Type=util.useFunc=util.setEvaluated=util.evaluatedPropsToName=util.mergeEvaluated=util.eachItem=util.unescapeJsonPointer=util. +escapeJsonPointer=util.escapeFragment=util.unescapeFragment=util.schemaRefOrVal=util.schemaHasRulesButRef=util.schemaHasRules=util.checkUnknownRules=util.alwaysValidSchema=util.toHash=void 0;const codegen_1=requireCodegen(),code_1=requireCode$1();function toHash(arr){const hash2={};for(const item of arr)hash2[item]=!0;return hash2}util.toHash=toHash;function alwaysValidSchema(it,schema){return typeof schema=="boolean"?schema:Object.keys(schema).length===0?!0:(checkUnknownRules(it,schema),!schemaHasRules( +schema,it.self.RULES.all))}util.alwaysValidSchema=alwaysValidSchema;function checkUnknownRules(it,schema=it.schema){const{opts,self:self2}=it;if(!opts.strictSchema||typeof schema=="boolean")return;const rules2=self2.RULES.keywords;for(const key2 in schema)rules2[key2]||checkStrictMode(it,`unknown keyword: "${key2}"`)}util.checkUnknownRules=checkUnknownRules;function schemaHasRules(schema,rules2){if(typeof schema=="boolean")return!schema;for(const key2 in schema)if(rules2[key2])return!0;return!1} +util.schemaHasRules=schemaHasRules;function schemaHasRulesButRef(schema,RULES){if(typeof schema=="boolean")return!schema;for(const key2 in schema)if(key2!=="$ref"&&RULES.all[key2])return!0;return!1}util.schemaHasRulesButRef=schemaHasRulesButRef;function schemaRefOrVal({topSchemaRef,schemaPath},schema,keyword2,$data){if(!$data){if(typeof schema=="number"||typeof schema=="boolean")return schema;if(typeof schema=="string")return(0,codegen_1._)`${schema}`}return(0,codegen_1._)`${topSchemaRef}${schemaPath}${(0,codegen_1. getProperty)(keyword2)}`}util.schemaRefOrVal=schemaRefOrVal;function unescapeFragment(str){return unescapeJsonPointer(decodeURIComponent(str))}util.unescapeFragment=unescapeFragment;function escapeFragment(str){return encodeURIComponent(escapeJsonPointer(str))}util.escapeFragment=escapeFragment;function escapeJsonPointer(str){return typeof str=="number"?`${str}`:str.replace(/~/g,"~0").replace(/\//g,"~1")}util.escapeJsonPointer=escapeJsonPointer;function unescapeJsonPointer(str){return str.replace( /~1/g,"/").replace(/~0/g,"~")}util.unescapeJsonPointer=unescapeJsonPointer;function eachItem(xs,f){if(Array.isArray(xs))for(const x of xs)f(x);else f(xs)}util.eachItem=eachItem;function makeMergeEvaluated({mergeNames,mergeToName,mergeValues:mergeValues2,resultToName}){return(gen,from,to,toName)=>{const res=to===void 0?from:to instanceof codegen_1.Name?(from instanceof codegen_1.Name?mergeNames(gen,from,to):mergeToName(gen,from,to),to):from instanceof codegen_1.Name?(mergeToName(gen,to,from),from): mergeValues2(from,to);return toName===codegen_1.Name&&!(res instanceof codegen_1.Name)?resultToName(gen,res):res}}util.mergeEvaluated={props:makeMergeEvaluated({mergeNames:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true && ${from} !== undefined`,()=>{gen.if((0,codegen_1._)`${from} === true`,()=>gen.assign(to,!0),()=>gen.assign(to,(0,codegen_1._)`${to} || {}`).code((0,codegen_1._)`Object.assign(${to}, ${from})`))}),mergeToName:(gen,from,to)=>gen.if((0,codegen_1._)`${to} !== true`,()=>{from=== @@ -4497,28 +4581,28 @@ _)`${to} > ${from} ? ${to} : ${from}`)),mergeValues:(from,to)=>from===!0?!0:Math p2)}`,!0))}util.setEvaluated=setEvaluated;const snippets={};function useFunc(gen,f){return gen.scopeValue("func",{ref:f,code:snippets[f.code]||(snippets[f.code]=new code_1._Code(f.code))})}util.useFunc=useFunc;var Type;(function(Type2){Type2[Type2.Num=0]="Num",Type2[Type2.Str=1]="Str"})(Type||(util.Type=Type={}));function getErrorPath(dataProp,dataPropType,jsPropertySyntax){if(dataProp instanceof codegen_1.Name){const isNumber2=dataPropType===Type.Num;return jsPropertySyntax?isNumber2?(0,codegen_1. _)`"[" + ${dataProp} + "]"`:(0,codegen_1._)`"['" + ${dataProp} + "']"`:isNumber2?(0,codegen_1._)`"/" + ${dataProp}`:(0,codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return jsPropertySyntax?(0,codegen_1.getProperty)(dataProp).toString():"/"+escapeJsonPointer(dataProp)}util.getErrorPath=getErrorPath;function checkStrictMode(it,msg,mode=it.opts.strictSchema){if(mode){if(msg=`strict mode: ${msg}`,mode===!0)throw new Error(msg);it.self.logger.warn(msg)}}return util.checkStrictMode= checkStrictMode,util}var names={},hasRequiredNames;function requireNames(){if(hasRequiredNames)return names;hasRequiredNames=1,Object.defineProperty(names,"__esModule",{value:!0});const codegen_1=requireCodegen(),names$12={data:new codegen_1.Name("data"),valCxt:new codegen_1.Name("valCxt"),instancePath:new codegen_1.Name("instancePath"),parentData:new codegen_1.Name("parentData"),parentDataProperty:new codegen_1.Name("parentDataProperty"),rootData:new codegen_1.Name("rootData"),dynamicAnchors:new codegen_1. -Name("dynamicAnchors"),vErrors:new codegen_1.Name("vErrors"),errors:new codegen_1.Name("errors"),this:new codegen_1.Name("this"),self:new codegen_1.Name("self"),scope:new codegen_1.Name("scope"),json:new codegen_1.Name("json"),jsonPos:new codegen_1.Name("jsonPos"),jsonLen:new codegen_1.Name("jsonLen"),jsonPart:new codegen_1.Name("jsonPart")};return names.default=names$12,names}var hasRequiredErrors;function requireErrors(){return hasRequiredErrors||(hasRequiredErrors=1,function(exports){Object.defineProperty( -exports,"__esModule",{value:!0}),exports.extendErrors=exports.resetErrorsCount=exports.reportExtraError=exports.reportError=exports.keyword$DataError=exports.keywordError=void 0;const codegen_1=requireCodegen(),util_1=requireUtil(),names_1=requireNames();exports.keywordError={message:({keyword:keyword2})=>(0,codegen_1.str)`must pass "${keyword2}" keyword validation`},exports.keyword$DataError={message:({keyword:keyword2,schemaType})=>schemaType?(0,codegen_1.str)`"${keyword2}" keyword must be ${schemaType} ($data)`: -(0,codegen_1.str)`"${keyword2}" keyword is invalid ($data)`};function reportError(cxt,error2=exports.keywordError,errorPaths,overrideAllErrors){const{it}=cxt,{gen,compositeRule,allErrors}=it,errObj=errorObjectCode(cxt,error2,errorPaths);overrideAllErrors??(compositeRule||allErrors)?addError(gen,errObj):returnErrors(it,(0,codegen_1._)`[${errObj}]`)}exports.reportError=reportError;function reportExtraError(cxt,error2=exports.keywordError,errorPaths){const{it}=cxt,{gen,compositeRule,allErrors}=it,errObj=errorObjectCode( -cxt,error2,errorPaths);addError(gen,errObj),compositeRule||allErrors||returnErrors(it,names_1.default.vErrors)}exports.reportExtraError=reportExtraError;function resetErrorsCount(gen,errsCount){gen.assign(names_1.default.errors,errsCount),gen.if((0,codegen_1._)`${names_1.default.vErrors} !== null`,()=>gen.if(errsCount,()=>gen.assign((0,codegen_1._)`${names_1.default.vErrors}.length`,errsCount),()=>gen.assign(names_1.default.vErrors,null)))}exports.resetErrorsCount=resetErrorsCount;function extendErrors({ -gen,keyword:keyword2,schemaValue,data,errsCount,it}){if(errsCount===void 0)throw new Error("ajv implementation error");const err=gen.name("err");gen.forRange("i",errsCount,names_1.default.errors,i=>{gen.const(err,(0,codegen_1._)`${names_1.default.vErrors}[${i}]`),gen.if((0,codegen_1._)`${err}.instancePath === undefined`,()=>gen.assign((0,codegen_1._)`${err}.instancePath`,(0,codegen_1.strConcat)(names_1.default.instancePath,it.errorPath))),gen.assign((0,codegen_1._)`${err}.schemaPath`,(0,codegen_1. -str)`${it.errSchemaPath}/${keyword2}`),it.opts.verbose&&(gen.assign((0,codegen_1._)`${err}.schema`,schemaValue),gen.assign((0,codegen_1._)`${err}.data`,data))})}exports.extendErrors=extendErrors;function addError(gen,errObj){const err=gen.const("err",errObj);gen.if((0,codegen_1._)`${names_1.default.vErrors} === null`,()=>gen.assign(names_1.default.vErrors,(0,codegen_1._)`[${err}]`),(0,codegen_1._)`${names_1.default.vErrors}.push(${err})`),gen.code((0,codegen_1._)`${names_1.default.errors}++`)}function returnErrors(it,errs){ -const{gen,validateName,schemaEnv}=it;schemaEnv.$async?gen.throw((0,codegen_1._)`new ${it.ValidationError}(${errs})`):(gen.assign((0,codegen_1._)`${validateName}.errors`,errs),gen.return(!1))}const E={keyword:new codegen_1.Name("keyword"),schemaPath:new codegen_1.Name("schemaPath"),params:new codegen_1.Name("params"),propertyName:new codegen_1.Name("propertyName"),message:new codegen_1.Name("message"),schema:new codegen_1.Name("schema"),parentSchema:new codegen_1.Name("parentSchema")};function errorObjectCode(cxt,error2,errorPaths){ -const{createErrors}=cxt.it;return createErrors===!1?(0,codegen_1._)`{}`:errorObject(cxt,error2,errorPaths)}function errorObject(cxt,error2,errorPaths={}){const{gen,it}=cxt,keyValues=[errorInstancePath(it,errorPaths),errorSchemaPath(cxt,errorPaths)];return extraErrorProps(cxt,error2,keyValues),gen.object(...keyValues)}function errorInstancePath({errorPath},{instancePath}){const instPath=instancePath?(0,codegen_1.str)`${errorPath}${(0,util_1.getErrorPath)(instancePath,util_1.Type.Str)}`:errorPath; -return[names_1.default.instancePath,(0,codegen_1.strConcat)(names_1.default.instancePath,instPath)]}function errorSchemaPath({keyword:keyword2,it:{errSchemaPath}},{schemaPath,parentSchema}){let schPath=parentSchema?errSchemaPath:(0,codegen_1.str)`${errSchemaPath}/${keyword2}`;return schemaPath&&(schPath=(0,codegen_1.str)`${schPath}${(0,util_1.getErrorPath)(schemaPath,util_1.Type.Str)}`),[E.schemaPath,schPath]}function extraErrorProps(cxt,{params,message},keyValues){const{keyword:keyword2,data,schemaValue, -it}=cxt,{opts,propertyName,topSchemaRef,schemaPath}=it;keyValues.push([E.keyword,keyword2],[E.params,typeof params=="function"?params(cxt):params||(0,codegen_1._)`{}`]),opts.messages&&keyValues.push([E.message,typeof message=="function"?message(cxt):message]),opts.verbose&&keyValues.push([E.schema,schemaValue],[E.parentSchema,(0,codegen_1._)`${topSchemaRef}${schemaPath}`],[names_1.default.data,data]),propertyName&&keyValues.push([E.propertyName,propertyName])}}(errors)),errors}var hasRequiredBoolSchema; -function requireBoolSchema(){if(hasRequiredBoolSchema)return boolSchema;hasRequiredBoolSchema=1,Object.defineProperty(boolSchema,"__esModule",{value:!0}),boolSchema.boolOrEmptySchema=boolSchema.topBoolOrEmptySchema=void 0;const errors_1=requireErrors(),codegen_1=requireCodegen(),names_1=requireNames(),boolError={message:"boolean schema is false"};function topBoolOrEmptySchema(it){const{gen,schema,validateName}=it;schema===!1?falseSchemaError(it,!1):typeof schema=="object"&&schema.$async===!0?gen. -return(names_1.default.data):(gen.assign((0,codegen_1._)`${validateName}.errors`,null),gen.return(!0))}boolSchema.topBoolOrEmptySchema=topBoolOrEmptySchema;function boolOrEmptySchema(it,valid2){const{gen,schema}=it;schema===!1?(gen.var(valid2,!1),falseSchemaError(it)):gen.var(valid2,!0)}boolSchema.boolOrEmptySchema=boolOrEmptySchema;function falseSchemaError(it,overrideAllErrors){const{gen,data}=it,cxt={gen,keyword:"false schema",data,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it};(0,errors_1. -reportError)(cxt,boolError,void 0,overrideAllErrors)}return boolSchema}var dataType={},rules={},hasRequiredRules;function requireRules(){if(hasRequiredRules)return rules;hasRequiredRules=1,Object.defineProperty(rules,"__esModule",{value:!0}),rules.getRules=rules.isJSONType=void 0;const _jsonTypes=["string","number","integer","boolean","null","object","array"],jsonTypes=new Set(_jsonTypes);function isJSONType(x){return typeof x=="string"&&jsonTypes.has(x)}rules.isJSONType=isJSONType;function getRules(){ -const groups={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...groups,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},groups.number,groups.string,groups.array,groups.object],post:{rules:[]},all:{},keywords:{}}}return rules.getRules=getRules,rules}var applicability={},hasRequiredApplicability;function requireApplicability(){if(hasRequiredApplicability)return applicability;hasRequiredApplicability=1,Object. -defineProperty(applicability,"__esModule",{value:!0}),applicability.shouldUseRule=applicability.shouldUseGroup=applicability.schemaHasRulesForType=void 0;function schemaHasRulesForType({schema,self:self2},type2){const group=self2.RULES.types[type2];return group&&group!==!0&&shouldUseGroup(schema,group)}applicability.schemaHasRulesForType=schemaHasRulesForType;function shouldUseGroup(schema,group){return group.rules.some(rule=>shouldUseRule(schema,rule))}applicability.shouldUseGroup=shouldUseGroup; -function shouldUseRule(schema,rule){var _a2;return schema[rule.keyword]!==void 0||((_a2=rule.definition.implements)===null||_a2===void 0?void 0:_a2.some(kwd=>schema[kwd]!==void 0))}return applicability.shouldUseRule=shouldUseRule,applicability}var hasRequiredDataType;function requireDataType(){if(hasRequiredDataType)return dataType;hasRequiredDataType=1,Object.defineProperty(dataType,"__esModule",{value:!0}),dataType.reportTypeError=dataType.checkDataTypes=dataType.checkDataType=dataType.coerceAndCheckDataType= -dataType.getJSONTypes=dataType.getSchemaTypes=dataType.DataType=void 0;const rules_1=requireRules(),applicability_1=requireApplicability(),errors_1=requireErrors(),codegen_1=requireCodegen(),util_1=requireUtil();var DataType;(function(DataType2){DataType2[DataType2.Correct=0]="Correct",DataType2[DataType2.Wrong=1]="Wrong"})(DataType||(dataType.DataType=DataType={}));function getSchemaTypes(schema){const types2=getJSONTypes(schema.type);if(types2.includes("null")){if(schema.nullable===!1)throw new Error( -"type: null contradicts nullable: false")}else{if(!types2.length&&schema.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');schema.nullable===!0&&types2.push("null")}return types2}dataType.getSchemaTypes=getSchemaTypes;function getJSONTypes(ts){const types2=Array.isArray(ts)?ts:ts?[ts]:[];if(types2.every(rules_1.isJSONType))return types2;throw new Error("type must be JSONType or JSONType[]: "+types2.join(","))}dataType.getJSONTypes=getJSONTypes;function coerceAndCheckDataType(it,types2){ -const{gen,data,opts}=it,coerceTo=coerceToTypes(types2,opts.coerceTypes),checkTypes=types2.length>0&&!(coerceTo.length===0&&types2.length===1&&(0,applicability_1.schemaHasRulesForType)(it,types2[0]));if(checkTypes){const wrongType=checkDataTypes(types2,data,opts.strictNumbers,DataType.Wrong);gen.if(wrongType,()=>{coerceTo.length?coerceData(it,types2,coerceTo):reportTypeError(it)})}return checkTypes}dataType.coerceAndCheckDataType=coerceAndCheckDataType;const COERCIBLE=new Set(["string","number","\ -integer","boolean","null"]);function coerceToTypes(types2,coerceTypes){return coerceTypes?types2.filter(t=>COERCIBLE.has(t)||coerceTypes==="array"&&t==="array"):[]}function coerceData(it,types2,coerceTo){const{gen,data,opts}=it,dataType2=gen.let("dataType",(0,codegen_1._)`typeof ${data}`),coerced=gen.let("coerced",(0,codegen_1._)`undefined`);opts.coerceTypes==="array"&&gen.if((0,codegen_1._)`${dataType2} == 'object' && Array.isArray(${data}) && ${data}.length == 1`,()=>gen.assign(data,(0,codegen_1. -_)`${data}[0]`).assign(dataType2,(0,codegen_1._)`typeof ${data}`).if(checkDataTypes(types2,data,opts.strictNumbers),()=>gen.assign(coerced,data))),gen.if((0,codegen_1._)`${coerced} !== undefined`);for(const t of coerceTo)(COERCIBLE.has(t)||t==="array"&&opts.coerceTypes==="array")&&coerceSpecificType(t);gen.else(),reportTypeError(it),gen.endIf(),gen.if((0,codegen_1._)`${coerced} !== undefined`,()=>{gen.assign(data,coerced),assignParentData(it,coerced)});function coerceSpecificType(t){switch(t){case"\ -string":gen.elseIf((0,codegen_1._)`${dataType2} == "number" || ${dataType2} == "boolean"`).assign(coerced,(0,codegen_1._)`"" + ${data}`).elseIf((0,codegen_1._)`${data} === null`).assign(coerced,(0,codegen_1._)`""`);return;case"number":gen.elseIf((0,codegen_1._)`${dataType2} == "boolean" || ${data} === null +Name("dynamicAnchors"),vErrors:new codegen_1.Name("vErrors"),errors:new codegen_1.Name("errors"),this:new codegen_1.Name("this"),self:new codegen_1.Name("self"),scope:new codegen_1.Name("scope"),json:new codegen_1.Name("json"),jsonPos:new codegen_1.Name("jsonPos"),jsonLen:new codegen_1.Name("jsonLen"),jsonPart:new codegen_1.Name("jsonPart")};return names.default=names$12,names}var hasRequiredErrors;function requireErrors(){return hasRequiredErrors||(hasRequiredErrors=1,(function(exports$1){Object. +defineProperty(exports$1,"__esModule",{value:!0}),exports$1.extendErrors=exports$1.resetErrorsCount=exports$1.reportExtraError=exports$1.reportError=exports$1.keyword$DataError=exports$1.keywordError=void 0;const codegen_1=requireCodegen(),util_1=requireUtil(),names_1=requireNames();exports$1.keywordError={message:({keyword:keyword2})=>(0,codegen_1.str)`must pass "${keyword2}" keyword validation`},exports$1.keyword$DataError={message:({keyword:keyword2,schemaType})=>schemaType?(0,codegen_1.str)`"${keyword2}" keyword must be ${schemaType} ($data)`: +(0,codegen_1.str)`"${keyword2}" keyword is invalid ($data)`};function reportError(cxt,error2=exports$1.keywordError,errorPaths,overrideAllErrors){const{it}=cxt,{gen,compositeRule,allErrors}=it,errObj=errorObjectCode(cxt,error2,errorPaths);overrideAllErrors??(compositeRule||allErrors)?addError(gen,errObj):returnErrors(it,(0,codegen_1._)`[${errObj}]`)}exports$1.reportError=reportError;function reportExtraError(cxt,error2=exports$1.keywordError,errorPaths){const{it}=cxt,{gen,compositeRule,allErrors}=it, +errObj=errorObjectCode(cxt,error2,errorPaths);addError(gen,errObj),compositeRule||allErrors||returnErrors(it,names_1.default.vErrors)}exports$1.reportExtraError=reportExtraError;function resetErrorsCount(gen,errsCount){gen.assign(names_1.default.errors,errsCount),gen.if((0,codegen_1._)`${names_1.default.vErrors} !== null`,()=>gen.if(errsCount,()=>gen.assign((0,codegen_1._)`${names_1.default.vErrors}.length`,errsCount),()=>gen.assign(names_1.default.vErrors,null)))}exports$1.resetErrorsCount=resetErrorsCount; +function extendErrors({gen,keyword:keyword2,schemaValue,data,errsCount,it}){if(errsCount===void 0)throw new Error("ajv implementation error");const err=gen.name("err");gen.forRange("i",errsCount,names_1.default.errors,i=>{gen.const(err,(0,codegen_1._)`${names_1.default.vErrors}[${i}]`),gen.if((0,codegen_1._)`${err}.instancePath === undefined`,()=>gen.assign((0,codegen_1._)`${err}.instancePath`,(0,codegen_1.strConcat)(names_1.default.instancePath,it.errorPath))),gen.assign((0,codegen_1._)`${err}.schemaPath`, +(0,codegen_1.str)`${it.errSchemaPath}/${keyword2}`),it.opts.verbose&&(gen.assign((0,codegen_1._)`${err}.schema`,schemaValue),gen.assign((0,codegen_1._)`${err}.data`,data))})}exports$1.extendErrors=extendErrors;function addError(gen,errObj){const err=gen.const("err",errObj);gen.if((0,codegen_1._)`${names_1.default.vErrors} === null`,()=>gen.assign(names_1.default.vErrors,(0,codegen_1._)`[${err}]`),(0,codegen_1._)`${names_1.default.vErrors}.push(${err})`),gen.code((0,codegen_1._)`${names_1.default. +errors}++`)}function returnErrors(it,errs){const{gen,validateName,schemaEnv}=it;schemaEnv.$async?gen.throw((0,codegen_1._)`new ${it.ValidationError}(${errs})`):(gen.assign((0,codegen_1._)`${validateName}.errors`,errs),gen.return(!1))}const E={keyword:new codegen_1.Name("keyword"),schemaPath:new codegen_1.Name("schemaPath"),params:new codegen_1.Name("params"),propertyName:new codegen_1.Name("propertyName"),message:new codegen_1.Name("message"),schema:new codegen_1.Name("schema"),parentSchema:new codegen_1. +Name("parentSchema")};function errorObjectCode(cxt,error2,errorPaths){const{createErrors}=cxt.it;return createErrors===!1?(0,codegen_1._)`{}`:errorObject(cxt,error2,errorPaths)}function errorObject(cxt,error2,errorPaths={}){const{gen,it}=cxt,keyValues=[errorInstancePath(it,errorPaths),errorSchemaPath(cxt,errorPaths)];return extraErrorProps(cxt,error2,keyValues),gen.object(...keyValues)}function errorInstancePath({errorPath},{instancePath}){const instPath=instancePath?(0,codegen_1.str)`${errorPath}${(0,util_1. +getErrorPath)(instancePath,util_1.Type.Str)}`:errorPath;return[names_1.default.instancePath,(0,codegen_1.strConcat)(names_1.default.instancePath,instPath)]}function errorSchemaPath({keyword:keyword2,it:{errSchemaPath}},{schemaPath,parentSchema}){let schPath=parentSchema?errSchemaPath:(0,codegen_1.str)`${errSchemaPath}/${keyword2}`;return schemaPath&&(schPath=(0,codegen_1.str)`${schPath}${(0,util_1.getErrorPath)(schemaPath,util_1.Type.Str)}`),[E.schemaPath,schPath]}function extraErrorProps(cxt,{params, +message},keyValues){const{keyword:keyword2,data,schemaValue,it}=cxt,{opts,propertyName,topSchemaRef,schemaPath}=it;keyValues.push([E.keyword,keyword2],[E.params,typeof params=="function"?params(cxt):params||(0,codegen_1._)`{}`]),opts.messages&&keyValues.push([E.message,typeof message=="function"?message(cxt):message]),opts.verbose&&keyValues.push([E.schema,schemaValue],[E.parentSchema,(0,codegen_1._)`${topSchemaRef}${schemaPath}`],[names_1.default.data,data]),propertyName&&keyValues.push([E.propertyName, +propertyName])}})(errors)),errors}var hasRequiredBoolSchema;function requireBoolSchema(){if(hasRequiredBoolSchema)return boolSchema;hasRequiredBoolSchema=1,Object.defineProperty(boolSchema,"__esModule",{value:!0}),boolSchema.boolOrEmptySchema=boolSchema.topBoolOrEmptySchema=void 0;const errors_1=requireErrors(),codegen_1=requireCodegen(),names_1=requireNames(),boolError={message:"boolean schema is false"};function topBoolOrEmptySchema(it){const{gen,schema,validateName}=it;schema===!1?falseSchemaError( +it,!1):typeof schema=="object"&&schema.$async===!0?gen.return(names_1.default.data):(gen.assign((0,codegen_1._)`${validateName}.errors`,null),gen.return(!0))}boolSchema.topBoolOrEmptySchema=topBoolOrEmptySchema;function boolOrEmptySchema(it,valid2){const{gen,schema}=it;schema===!1?(gen.var(valid2,!1),falseSchemaError(it)):gen.var(valid2,!0)}boolSchema.boolOrEmptySchema=boolOrEmptySchema;function falseSchemaError(it,overrideAllErrors){const{gen,data}=it,cxt={gen,keyword:"false schema",data,schema:!1, +schemaCode:!1,schemaValue:!1,params:{},it};(0,errors_1.reportError)(cxt,boolError,void 0,overrideAllErrors)}return boolSchema}var dataType={},rules={},hasRequiredRules;function requireRules(){if(hasRequiredRules)return rules;hasRequiredRules=1,Object.defineProperty(rules,"__esModule",{value:!0}),rules.getRules=rules.isJSONType=void 0;const _jsonTypes=["string","number","integer","boolean","null","object","array"],jsonTypes=new Set(_jsonTypes);function isJSONType(x){return typeof x=="string"&&jsonTypes. +has(x)}rules.isJSONType=isJSONType;function getRules(){const groups={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...groups,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},groups.number,groups.string,groups.array,groups.object],post:{rules:[]},all:{},keywords:{}}}return rules.getRules=getRules,rules}var applicability={},hasRequiredApplicability;function requireApplicability(){if(hasRequiredApplicability) +return applicability;hasRequiredApplicability=1,Object.defineProperty(applicability,"__esModule",{value:!0}),applicability.shouldUseRule=applicability.shouldUseGroup=applicability.schemaHasRulesForType=void 0;function schemaHasRulesForType({schema,self:self2},type2){const group=self2.RULES.types[type2];return group&&group!==!0&&shouldUseGroup(schema,group)}applicability.schemaHasRulesForType=schemaHasRulesForType;function shouldUseGroup(schema,group){return group.rules.some(rule=>shouldUseRule(schema, +rule))}applicability.shouldUseGroup=shouldUseGroup;function shouldUseRule(schema,rule){var _a2;return schema[rule.keyword]!==void 0||((_a2=rule.definition.implements)===null||_a2===void 0?void 0:_a2.some(kwd=>schema[kwd]!==void 0))}return applicability.shouldUseRule=shouldUseRule,applicability}var hasRequiredDataType;function requireDataType(){if(hasRequiredDataType)return dataType;hasRequiredDataType=1,Object.defineProperty(dataType,"__esModule",{value:!0}),dataType.reportTypeError=dataType.checkDataTypes= +dataType.checkDataType=dataType.coerceAndCheckDataType=dataType.getJSONTypes=dataType.getSchemaTypes=dataType.DataType=void 0;const rules_1=requireRules(),applicability_1=requireApplicability(),errors_1=requireErrors(),codegen_1=requireCodegen(),util_1=requireUtil();var DataType;(function(DataType2){DataType2[DataType2.Correct=0]="Correct",DataType2[DataType2.Wrong=1]="Wrong"})(DataType||(dataType.DataType=DataType={}));function getSchemaTypes(schema){const types2=getJSONTypes(schema.type);if(types2. +includes("null")){if(schema.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!types2.length&&schema.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');schema.nullable===!0&&types2.push("null")}return types2}dataType.getSchemaTypes=getSchemaTypes;function getJSONTypes(ts){const types2=Array.isArray(ts)?ts:ts?[ts]:[];if(types2.every(rules_1.isJSONType))return types2;throw new Error("type must be JSONType or JSONType[]: "+types2.join(","))}dataType. +getJSONTypes=getJSONTypes;function coerceAndCheckDataType(it,types2){const{gen,data,opts}=it,coerceTo=coerceToTypes(types2,opts.coerceTypes),checkTypes=types2.length>0&&!(coerceTo.length===0&&types2.length===1&&(0,applicability_1.schemaHasRulesForType)(it,types2[0]));if(checkTypes){const wrongType=checkDataTypes(types2,data,opts.strictNumbers,DataType.Wrong);gen.if(wrongType,()=>{coerceTo.length?coerceData(it,types2,coerceTo):reportTypeError(it)})}return checkTypes}dataType.coerceAndCheckDataType= +coerceAndCheckDataType;const COERCIBLE=new Set(["string","number","integer","boolean","null"]);function coerceToTypes(types2,coerceTypes){return coerceTypes?types2.filter(t=>COERCIBLE.has(t)||coerceTypes==="array"&&t==="array"):[]}function coerceData(it,types2,coerceTo){const{gen,data,opts}=it,dataType2=gen.let("dataType",(0,codegen_1._)`typeof ${data}`),coerced=gen.let("coerced",(0,codegen_1._)`undefined`);opts.coerceTypes==="array"&&gen.if((0,codegen_1._)`${dataType2} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, +()=>gen.assign(data,(0,codegen_1._)`${data}[0]`).assign(dataType2,(0,codegen_1._)`typeof ${data}`).if(checkDataTypes(types2,data,opts.strictNumbers),()=>gen.assign(coerced,data))),gen.if((0,codegen_1._)`${coerced} !== undefined`);for(const t of coerceTo)(COERCIBLE.has(t)||t==="array"&&opts.coerceTypes==="array")&&coerceSpecificType(t);gen.else(),reportTypeError(it),gen.endIf(),gen.if((0,codegen_1._)`${coerced} !== undefined`,()=>{gen.assign(data,coerced),assignParentData(it,coerced)});function coerceSpecificType(t){ +switch(t){case"string":gen.elseIf((0,codegen_1._)`${dataType2} == "number" || ${dataType2} == "boolean"`).assign(coerced,(0,codegen_1._)`"" + ${data}`).elseIf((0,codegen_1._)`${data} === null`).assign(coerced,(0,codegen_1._)`""`);return;case"number":gen.elseIf((0,codegen_1._)`${dataType2} == "boolean" || ${data} === null || (${dataType2} == "string" && ${data} && ${data} == +${data})`).assign(coerced,(0,codegen_1._)`+${data}`);return;case"integer":gen.elseIf((0,codegen_1._)`${dataType2} === "boolean" || ${data} === null || (${dataType2} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`).assign(coerced,(0,codegen_1._)`+${data}`);return;case"boolean":gen.elseIf((0,codegen_1._)`${data} === "false" || ${data} === 0 || ${data} === null`).assign(coerced,!1).elseIf((0,codegen_1._)`${data} === "true" || ${data} === 1`).assign(coerced,!0);return;case"null":gen.elseIf((0,codegen_1._)`${data} === "" || ${data} === 0 || ${data} === false`),gen.assign(coerced,null);return;case"array":gen.elseIf( (0,codegen_1._)`${dataType2} === "string" || ${dataType2} === "number" @@ -4610,25 +4694,25 @@ return getJsonPointer.call(this,p2,root2);const id2=(0,resolve_1.normalizeId)(re 1).split("/")){if(typeof schema=="boolean")return;const partSchema=schema[(0,util_1.unescapeFragment)(part)];if(partSchema===void 0)return;schema=partSchema;const schId=typeof schema=="object"&&schema[this.opts.schemaId];!PREVENT_SCOPE_CHANGE.has(part)&&schId&&(baseId=(0,resolve_1.resolveUrl)(this.opts.uriResolver,baseId,schId))}let env2;if(typeof schema!="boolean"&&schema.$ref&&!(0,util_1.schemaHasRulesButRef)(schema,this.RULES)){const $ref=(0,resolve_1.resolveUrl)(this.opts.uriResolver,baseId, schema.$ref);env2=resolveSchema.call(this,root2,$ref)}const{schemaId}=this.opts;if(env2=env2||new SchemaEnv({schema,schemaId,root:root2,baseId}),env2.schema!==env2.root.schema)return env2}return compile}const $id$1="https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",description="Meta-schema for $data reference (JSON AnySchema extension proposal)",type$1="object",required$1=["$data"],properties$3={$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"j\ son-pointer"}]}},additionalProperties$1=!1,require$$9={$id:$id$1,description,type:type$1,required:required$1,properties:properties$3,additionalProperties:additionalProperties$1};var uri={},hasRequiredUri;function requireUri(){if(hasRequiredUri)return uri;hasRequiredUri=1,Object.defineProperty(uri,"__esModule",{value:!0});const uri$12=requireFastUri();return uri$12.code='require("ajv/dist/runtime/uri").default',uri.default=uri$12,uri}var hasRequiredCore$1;function requireCore$1(){return hasRequiredCore$1|| -(hasRequiredCore$1=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.CodeGen=exports.Name=exports.nil=exports.stringify=exports.str=exports._=exports.KeywordCxt=void 0;var validate_1=requireValidate();Object.defineProperty(exports,"KeywordCxt",{enumerable:!0,get:function(){return validate_1.KeywordCxt}});var codegen_1=requireCodegen();Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return codegen_1._}}),Object.defineProperty(exports,"str",{enumerable:!0, -get:function(){return codegen_1.str}}),Object.defineProperty(exports,"stringify",{enumerable:!0,get:function(){return codegen_1.stringify}}),Object.defineProperty(exports,"nil",{enumerable:!0,get:function(){return codegen_1.nil}}),Object.defineProperty(exports,"Name",{enumerable:!0,get:function(){return codegen_1.Name}}),Object.defineProperty(exports,"CodeGen",{enumerable:!0,get:function(){return codegen_1.CodeGen}});const validation_error_1=requireValidation_error(),ref_error_1=requireRef_error(), -rules_1=requireRules(),compile_1=requireCompile(),codegen_2=requireCodegen(),resolve_1=requireResolve(),dataType_1=requireDataType(),util_1=requireUtil(),$dataRefSchema=require$$9,uri_1=requireUri(),defaultRegExp=(str,flags2)=>new RegExp(str,flags2);defaultRegExp.code="new RegExp";const META_IGNORE_OPTIONS=["removeAdditional","useDefaults","coerceTypes"],EXT_SCOPE_NAMES=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","E\ -rror"]),removedOptions={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"\ -It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},deprecatedOptions={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for un\ -icode characters by default.'},MAX_EXPRESSION=200;function requiredOptions(o){var _a2,_b,_c,_d,_e,_f,_g,_h,_j,_k,_l,_m,_o,_p,_q,_r,_s,_t,_u,_v,_w,_x,_y,_z,_02;const s2=o.strict,_optz=(_a2=o.code)===null||_a2===void 0?void 0:_a2.optimize,optimize=_optz===!0||_optz===void 0?1:_optz||0,regExp=(_c=(_b=o.code)===null||_b===void 0?void 0:_b.regExp)!==null&&_c!==void 0?_c:defaultRegExp,uriResolver=(_d=o.uriResolver)!==null&&_d!==void 0?_d:uri_1.default;return{strictSchema:(_f=(_e=o.strictSchema)!==null&& -_e!==void 0?_e:s2)!==null&&_f!==void 0?_f:!0,strictNumbers:(_h=(_g=o.strictNumbers)!==null&&_g!==void 0?_g:s2)!==null&&_h!==void 0?_h:!0,strictTypes:(_k=(_j=o.strictTypes)!==null&&_j!==void 0?_j:s2)!==null&&_k!==void 0?_k:"log",strictTuples:(_m=(_l=o.strictTuples)!==null&&_l!==void 0?_l:s2)!==null&&_m!==void 0?_m:"log",strictRequired:(_p=(_o=o.strictRequired)!==null&&_o!==void 0?_o:s2)!==null&&_p!==void 0?_p:!1,code:o.code?{...o.code,optimize,regExp}:{optimize,regExp},loopRequired:(_q=o.loopRequired)!== -null&&_q!==void 0?_q:MAX_EXPRESSION,loopEnum:(_r=o.loopEnum)!==null&&_r!==void 0?_r:MAX_EXPRESSION,meta:(_s=o.meta)!==null&&_s!==void 0?_s:!0,messages:(_t=o.messages)!==null&&_t!==void 0?_t:!0,inlineRefs:(_u=o.inlineRefs)!==null&&_u!==void 0?_u:!0,schemaId:(_v=o.schemaId)!==null&&_v!==void 0?_v:"$id",addUsedSchema:(_w=o.addUsedSchema)!==null&&_w!==void 0?_w:!0,validateSchema:(_x=o.validateSchema)!==null&&_x!==void 0?_x:!0,validateFormats:(_y=o.validateFormats)!==null&&_y!==void 0?_y:!0,unicodeRegExp:(_z= -o.unicodeRegExp)!==null&&_z!==void 0?_z:!0,int32range:(_02=o.int32range)!==null&&_02!==void 0?_02:!0,uriResolver}}class Ajv2{constructor(opts={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,opts=this.opts={...opts,...requiredOptions(opts)};const{es5,lines}=this.opts.code;this.scope=new codegen_2.ValueScope({scope:{},prefixes:EXT_SCOPE_NAMES,es5,lines}),this.logger=getLogger(opts.logger);const formatOpt=opts.validateFormats;opts.validateFormats= -!1,this.RULES=(0,rules_1.getRules)(),checkOptions.call(this,removedOptions,opts,"NOT SUPPORTED"),checkOptions.call(this,deprecatedOptions,opts,"DEPRECATED","warn"),this._metaOpts=getMetaSchemaOptions.call(this),opts.formats&&addInitialFormats.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),opts.keywords&&addInitialKeywords.call(this,opts.keywords),typeof opts.meta=="object"&&this.addMetaSchema(opts.meta),addInitialSchemas.call(this),opts.validateFormats=formatOpt}_addVocabularies(){ -this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data,meta,schemaId}=this.opts;let _dataRefSchema=$dataRefSchema;schemaId==="id"&&(_dataRefSchema={...$dataRefSchema},_dataRefSchema.id=_dataRefSchema.$id,delete _dataRefSchema.$id),meta&&$data&&this.addMetaSchema(_dataRefSchema,_dataRefSchema[schemaId],!1)}defaultMeta(){const{meta,schemaId}=this.opts;return this.opts.defaultMeta=typeof meta=="object"?meta[schemaId]||meta:void 0}validate(schemaKeyRef,data){let v;if(typeof schemaKeyRef=="str\ -ing"){if(v=this.getSchema(schemaKeyRef),!v)throw new Error(`no schema with key or ref "${schemaKeyRef}"`)}else v=this.compile(schemaKeyRef);const valid2=v(data);return"$async"in v||(this.errors=v.errors),valid2}compile(schema,_meta){const sch=this._addSchema(schema,_meta);return sch.validate||this._compileSchemaEnv(sch)}compileAsync(schema,meta){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema}=this.opts;return runCompileAsync. -call(this,schema,meta);async function runCompileAsync(_schema,_meta){await loadMetaSchema.call(this,_schema.$schema);const sch=this._addSchema(_schema,_meta);return sch.validate||_compileAsync.call(this,sch)}async function loadMetaSchema($ref){$ref&&!this.getSchema($ref)&&await runCompileAsync.call(this,{$ref},!0)}async function _compileAsync(sch){try{return this._compileSchemaEnv(sch)}catch(e){if(!(e instanceof ref_error_1.default))throw e;return checkLoaded.call(this,e),await loadMissingSchema. -call(this,e.missingSchema),_compileAsync.call(this,sch)}}function checkLoaded({missingSchema:ref2,missingRef}){if(this.refs[ref2])throw new Error(`AnySchema ${ref2} is loaded but ${missingRef} cannot be resolved`)}async function loadMissingSchema(ref2){const _schema=await _loadSchema.call(this,ref2);this.refs[ref2]||await loadMetaSchema.call(this,_schema.$schema),this.refs[ref2]||this.addSchema(_schema,ref2,meta)}async function _loadSchema(ref2){const p2=this._loading[ref2];if(p2)return p2;try{return await(this. -_loading[ref2]=loadSchema(ref2))}finally{delete this._loading[ref2]}}}addSchema(schema,key2,_meta,_validateSchema=this.opts.validateSchema){if(Array.isArray(schema)){for(const sch of schema)this.addSchema(sch,void 0,_meta,_validateSchema);return this}let id2;if(typeof schema=="object"){const{schemaId}=this.opts;if(id2=schema[schemaId],id2!==void 0&&typeof id2!="string")throw new Error(`schema ${schemaId} must be string`)}return key2=(0,resolve_1.normalizeId)(key2||id2),this._checkUnique(key2),this. -schemas[key2]=this._addSchema(schema,_meta,key2,_validateSchema,!0),this}addMetaSchema(schema,key2,_validateSchema=this.opts.validateSchema){return this.addSchema(schema,key2,!0,_validateSchema),this}validateSchema(schema,throwOrLogError){if(typeof schema=="boolean")return!0;let $schema2;if($schema2=schema.$schema,$schema2!==void 0&&typeof $schema2!="string")throw new Error("$schema must be a string");if($schema2=$schema2||this.opts.defaultMeta||this.defaultMeta(),!$schema2)return this.logger.warn( -"meta-schema not available"),this.errors=null,!0;const valid2=this.validate($schema2,schema);if(!valid2&&throwOrLogError){const message="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(message);else throw new Error(message)}return valid2}getSchema(keyRef){let sch;for(;typeof(sch=getSchEnv.call(this,keyRef))=="string";)keyRef=sch;if(sch===void 0){const{schemaId}=this.opts,root2=new compile_1.SchemaEnv({schema:{},schemaId});if(sch=compile_1.resolveSchema. -call(this,root2,keyRef),!sch)return;this.refs[keyRef]=sch}return sch.validate||this._compileSchemaEnv(sch)}removeSchema(schemaKeyRef){if(schemaKeyRef instanceof RegExp)return this._removeAllSchemas(this.schemas,schemaKeyRef),this._removeAllSchemas(this.refs,schemaKeyRef),this;switch(typeof schemaKeyRef){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const sch=getSchEnv.call(this,schemaKeyRef);return typeof sch== -"object"&&this._cache.delete(sch.schema),delete this.schemas[schemaKeyRef],delete this.refs[schemaKeyRef],this}case"object":{const cacheKey=schemaKeyRef;this._cache.delete(cacheKey);let id2=schemaKeyRef[this.opts.schemaId];return id2&&(id2=(0,resolve_1.normalizeId)(id2),delete this.schemas[id2],delete this.refs[id2]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(definitions2){for(const def of definitions2)this.addKeyword(def);return this}addKeyword(kwdOrDef,def){ +(hasRequiredCore$1=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.CodeGen=exports$1.Name=exports$1.nil=exports$1.stringify=exports$1.str=exports$1._=exports$1.KeywordCxt=void 0;var validate_1=requireValidate();Object.defineProperty(exports$1,"KeywordCxt",{enumerable:!0,get:function(){return validate_1.KeywordCxt}});var codegen_1=requireCodegen();Object.defineProperty(exports$1,"_",{enumerable:!0,get:function(){return codegen_1._}}),Object.defineProperty( +exports$1,"str",{enumerable:!0,get:function(){return codegen_1.str}}),Object.defineProperty(exports$1,"stringify",{enumerable:!0,get:function(){return codegen_1.stringify}}),Object.defineProperty(exports$1,"nil",{enumerable:!0,get:function(){return codegen_1.nil}}),Object.defineProperty(exports$1,"Name",{enumerable:!0,get:function(){return codegen_1.Name}}),Object.defineProperty(exports$1,"CodeGen",{enumerable:!0,get:function(){return codegen_1.CodeGen}});const validation_error_1=requireValidation_error(), +ref_error_1=requireRef_error(),rules_1=requireRules(),compile_1=requireCompile(),codegen_2=requireCodegen(),resolve_1=requireResolve(),dataType_1=requireDataType(),util_1=requireUtil(),$dataRefSchema=require$$9,uri_1=requireUri(),defaultRegExp=(str,flags2)=>new RegExp(str,flags2);defaultRegExp.code="new RegExp";const META_IGNORE_OPTIONS=["removeAdditional","useDefaults","coerceTypes"],EXT_SCOPE_NAMES=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats", +"validate$data","func","obj","Error"]),removedOptions={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `c\ +ode: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},deprecatedOptions={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'\ +"minLength"/"maxLength" account for unicode characters by default.'},MAX_EXPRESSION=200;function requiredOptions(o){var _a2,_b,_c,_d,_e,_f,_g,_h,_j,_k,_l,_m,_o,_p,_q,_r,_s,_t,_u,_v,_w,_x,_y,_z,_02;const s2=o.strict,_optz=(_a2=o.code)===null||_a2===void 0?void 0:_a2.optimize,optimize=_optz===!0||_optz===void 0?1:_optz||0,regExp=(_c=(_b=o.code)===null||_b===void 0?void 0:_b.regExp)!==null&&_c!==void 0?_c:defaultRegExp,uriResolver=(_d=o.uriResolver)!==null&&_d!==void 0?_d:uri_1.default;return{strictSchema:(_f= +(_e=o.strictSchema)!==null&&_e!==void 0?_e:s2)!==null&&_f!==void 0?_f:!0,strictNumbers:(_h=(_g=o.strictNumbers)!==null&&_g!==void 0?_g:s2)!==null&&_h!==void 0?_h:!0,strictTypes:(_k=(_j=o.strictTypes)!==null&&_j!==void 0?_j:s2)!==null&&_k!==void 0?_k:"log",strictTuples:(_m=(_l=o.strictTuples)!==null&&_l!==void 0?_l:s2)!==null&&_m!==void 0?_m:"log",strictRequired:(_p=(_o=o.strictRequired)!==null&&_o!==void 0?_o:s2)!==null&&_p!==void 0?_p:!1,code:o.code?{...o.code,optimize,regExp}:{optimize,regExp}, +loopRequired:(_q=o.loopRequired)!==null&&_q!==void 0?_q:MAX_EXPRESSION,loopEnum:(_r=o.loopEnum)!==null&&_r!==void 0?_r:MAX_EXPRESSION,meta:(_s=o.meta)!==null&&_s!==void 0?_s:!0,messages:(_t=o.messages)!==null&&_t!==void 0?_t:!0,inlineRefs:(_u=o.inlineRefs)!==null&&_u!==void 0?_u:!0,schemaId:(_v=o.schemaId)!==null&&_v!==void 0?_v:"$id",addUsedSchema:(_w=o.addUsedSchema)!==null&&_w!==void 0?_w:!0,validateSchema:(_x=o.validateSchema)!==null&&_x!==void 0?_x:!0,validateFormats:(_y=o.validateFormats)!== +null&&_y!==void 0?_y:!0,unicodeRegExp:(_z=o.unicodeRegExp)!==null&&_z!==void 0?_z:!0,int32range:(_02=o.int32range)!==null&&_02!==void 0?_02:!0,uriResolver}}class Ajv2{constructor(opts={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,opts=this.opts={...opts,...requiredOptions(opts)};const{es5,lines}=this.opts.code;this.scope=new codegen_2.ValueScope({scope:{},prefixes:EXT_SCOPE_NAMES,es5,lines}),this.logger=getLogger(opts.logger);const formatOpt=opts. +validateFormats;opts.validateFormats=!1,this.RULES=(0,rules_1.getRules)(),checkOptions.call(this,removedOptions,opts,"NOT SUPPORTED"),checkOptions.call(this,deprecatedOptions,opts,"DEPRECATED","warn"),this._metaOpts=getMetaSchemaOptions.call(this),opts.formats&&addInitialFormats.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),opts.keywords&&addInitialKeywords.call(this,opts.keywords),typeof opts.meta=="object"&&this.addMetaSchema(opts.meta),addInitialSchemas.call(this),opts.validateFormats= +formatOpt}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data,meta,schemaId}=this.opts;let _dataRefSchema=$dataRefSchema;schemaId==="id"&&(_dataRefSchema={...$dataRefSchema},_dataRefSchema.id=_dataRefSchema.$id,delete _dataRefSchema.$id),meta&&$data&&this.addMetaSchema(_dataRefSchema,_dataRefSchema[schemaId],!1)}defaultMeta(){const{meta,schemaId}=this.opts;return this.opts.defaultMeta=typeof meta=="object"?meta[schemaId]||meta:void 0}validate(schemaKeyRef,data){let v; +if(typeof schemaKeyRef=="string"){if(v=this.getSchema(schemaKeyRef),!v)throw new Error(`no schema with key or ref "${schemaKeyRef}"`)}else v=this.compile(schemaKeyRef);const valid2=v(data);return"$async"in v||(this.errors=v.errors),valid2}compile(schema,_meta){const sch=this._addSchema(schema,_meta);return sch.validate||this._compileSchemaEnv(sch)}compileAsync(schema,meta){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema}=this. +opts;return runCompileAsync.call(this,schema,meta);async function runCompileAsync(_schema,_meta){await loadMetaSchema.call(this,_schema.$schema);const sch=this._addSchema(_schema,_meta);return sch.validate||_compileAsync.call(this,sch)}async function loadMetaSchema($ref){$ref&&!this.getSchema($ref)&&await runCompileAsync.call(this,{$ref},!0)}async function _compileAsync(sch){try{return this._compileSchemaEnv(sch)}catch(e){if(!(e instanceof ref_error_1.default))throw e;return checkLoaded.call(this, +e),await loadMissingSchema.call(this,e.missingSchema),_compileAsync.call(this,sch)}}function checkLoaded({missingSchema:ref2,missingRef}){if(this.refs[ref2])throw new Error(`AnySchema ${ref2} is loaded but ${missingRef} cannot be resolved`)}async function loadMissingSchema(ref2){const _schema=await _loadSchema.call(this,ref2);this.refs[ref2]||await loadMetaSchema.call(this,_schema.$schema),this.refs[ref2]||this.addSchema(_schema,ref2,meta)}async function _loadSchema(ref2){const p2=this._loading[ref2]; +if(p2)return p2;try{return await(this._loading[ref2]=loadSchema(ref2))}finally{delete this._loading[ref2]}}}addSchema(schema,key2,_meta,_validateSchema=this.opts.validateSchema){if(Array.isArray(schema)){for(const sch of schema)this.addSchema(sch,void 0,_meta,_validateSchema);return this}let id2;if(typeof schema=="object"){const{schemaId}=this.opts;if(id2=schema[schemaId],id2!==void 0&&typeof id2!="string")throw new Error(`schema ${schemaId} must be string`)}return key2=(0,resolve_1.normalizeId)( +key2||id2),this._checkUnique(key2),this.schemas[key2]=this._addSchema(schema,_meta,key2,_validateSchema,!0),this}addMetaSchema(schema,key2,_validateSchema=this.opts.validateSchema){return this.addSchema(schema,key2,!0,_validateSchema),this}validateSchema(schema,throwOrLogError){if(typeof schema=="boolean")return!0;let $schema2;if($schema2=schema.$schema,$schema2!==void 0&&typeof $schema2!="string")throw new Error("$schema must be a string");if($schema2=$schema2||this.opts.defaultMeta||this.defaultMeta(), +!$schema2)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const valid2=this.validate($schema2,schema);if(!valid2&&throwOrLogError){const message="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(message);else throw new Error(message)}return valid2}getSchema(keyRef){let sch;for(;typeof(sch=getSchEnv.call(this,keyRef))=="string";)keyRef=sch;if(sch===void 0){const{schemaId}=this.opts,root2=new compile_1.SchemaEnv({schema:{},schemaId}); +if(sch=compile_1.resolveSchema.call(this,root2,keyRef),!sch)return;this.refs[keyRef]=sch}return sch.validate||this._compileSchemaEnv(sch)}removeSchema(schemaKeyRef){if(schemaKeyRef instanceof RegExp)return this._removeAllSchemas(this.schemas,schemaKeyRef),this._removeAllSchemas(this.refs,schemaKeyRef),this;switch(typeof schemaKeyRef){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const sch=getSchEnv.call(this,schemaKeyRef); +return typeof sch=="object"&&this._cache.delete(sch.schema),delete this.schemas[schemaKeyRef],delete this.refs[schemaKeyRef],this}case"object":{const cacheKey=schemaKeyRef;this._cache.delete(cacheKey);let id2=schemaKeyRef[this.opts.schemaId];return id2&&(id2=(0,resolve_1.normalizeId)(id2),delete this.schemas[id2],delete this.refs[id2]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(definitions2){for(const def of definitions2)this.addKeyword(def);return this}addKeyword(kwdOrDef,def){ let keyword2;if(typeof kwdOrDef=="string")keyword2=kwdOrDef,typeof def=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),def.keyword=keyword2);else if(typeof kwdOrDef=="object"&&def===void 0){if(def=kwdOrDef,keyword2=def.keyword,Array.isArray(keyword2)&&!keyword2.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(checkKeyword.call(this,keyword2,def),!def)return(0,util_1. eachItem)(keyword2,kwd=>addRule.call(this,kwd)),this;keywordMetaschema.call(this,def);const definition2={...def,type:(0,dataType_1.getJSONTypes)(def.type),schemaType:(0,dataType_1.getJSONTypes)(def.schemaType)};return(0,util_1.eachItem)(keyword2,definition2.type.length===0?k=>addRule.call(this,k,definition2):k=>definition2.type.forEach(t=>addRule.call(this,k,definition2,t))),this}getKeyword(keyword2){const rule=this.RULES.all[keyword2];return typeof rule=="object"?rule.definition:!!rule}removeKeyword(keyword2){ const{RULES}=this;delete RULES.keywords[keyword2],delete RULES.all[keyword2];for(const group of RULES.rules){const i=group.rules.findIndex(rule=>rule.keyword===keyword2);i>=0&&group.rules.splice(i,1)}return this}addFormat(name,format2){return typeof format2=="string"&&(format2=new RegExp(format2)),this.formats[name]=format2,this}errorsText(errors2=this.errors,{separator=", ",dataVar="data"}={}){return!errors2||errors2.length===0?"No errors":errors2.map(e=>`${dataVar}${e.instancePath} ${e.message}`). @@ -4636,13 +4720,13 @@ reduce((text2,msg)=>text2+separator+msg)}$dataMetaSchema(metaSchema,keywordsJson schemaOrData(schema))}}return metaSchema}_removeAllSchemas(schemas,regex){for(const keyRef in schemas){const sch=schemas[keyRef];(!regex||regex.test(keyRef))&&(typeof sch=="string"?delete schemas[keyRef]:sch&&!sch.meta&&(this._cache.delete(sch.schema),delete schemas[keyRef]))}}_addSchema(schema,meta,baseId,validateSchema=this.opts.validateSchema,addSchema=this.opts.addUsedSchema){let id2;const{schemaId}=this.opts;if(typeof schema=="object")id2=schema[schemaId];else{if(this.opts.jtd)throw new Error( "schema must be object");if(typeof schema!="boolean")throw new Error("schema must be object or boolean")}let sch=this._cache.get(schema);if(sch!==void 0)return sch;baseId=(0,resolve_1.normalizeId)(id2||baseId);const localRefs=resolve_1.getSchemaRefs.call(this,schema,baseId);return sch=new compile_1.SchemaEnv({schema,schemaId,meta,baseId,localRefs}),this._cache.set(sch.schema,sch),addSchema&&!baseId.startsWith("#")&&(baseId&&this._checkUnique(baseId),this.refs[baseId]=sch),validateSchema&&this.validateSchema( schema,!0),sch}_checkUnique(id2){if(this.schemas[id2]||this.refs[id2])throw new Error(`schema with key or id "${id2}" already exists`)}_compileSchemaEnv(sch){if(sch.meta?this._compileMetaSchema(sch):compile_1.compileSchema.call(this,sch),!sch.validate)throw new Error("ajv implementation error");return sch.validate}_compileMetaSchema(sch){const currentOpts=this.opts;this.opts=this._metaOpts;try{compile_1.compileSchema.call(this,sch)}finally{this.opts=currentOpts}}}Ajv2.ValidationError=validation_error_1. -default,Ajv2.MissingRefError=ref_error_1.default,exports.default=Ajv2;function checkOptions(checkOpts,options,msg,log="error"){for(const key2 in checkOpts){const opt=key2;opt in options&&this.logger[log](`${msg}: option ${key2}. ${checkOpts[opt]}`)}}function getSchEnv(keyRef){return keyRef=(0,resolve_1.normalizeId)(keyRef),this.schemas[keyRef]||this.refs[keyRef]}function addInitialSchemas(){const optsSchemas=this.opts.schemas;if(optsSchemas)if(Array.isArray(optsSchemas))this.addSchema(optsSchemas);else +default,Ajv2.MissingRefError=ref_error_1.default,exports$1.default=Ajv2;function checkOptions(checkOpts,options,msg,log="error"){for(const key2 in checkOpts){const opt=key2;opt in options&&this.logger[log](`${msg}: option ${key2}. ${checkOpts[opt]}`)}}function getSchEnv(keyRef){return keyRef=(0,resolve_1.normalizeId)(keyRef),this.schemas[keyRef]||this.refs[keyRef]}function addInitialSchemas(){const optsSchemas=this.opts.schemas;if(optsSchemas)if(Array.isArray(optsSchemas))this.addSchema(optsSchemas);else for(const key2 in optsSchemas)this.addSchema(optsSchemas[key2],key2)}function addInitialFormats(){for(const name in this.opts.formats){const format2=this.opts.formats[name];format2&&this.addFormat(name,format2)}}function addInitialKeywords(defs){if(Array.isArray(defs)){this.addVocabulary(defs);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const keyword2 in defs){const def=defs[keyword2];def.keyword||(def.keyword=keyword2),this.addKeyword(def)}}function getMetaSchemaOptions(){ const metaOpts={...this.opts};for(const opt of META_IGNORE_OPTIONS)delete metaOpts[opt];return metaOpts}const noLogs={log(){},warn(){},error(){}};function getLogger(logger){if(logger===!1)return noLogs;if(logger===void 0)return console;if(logger.log&&logger.warn&&logger.error)return logger;throw new Error("logger must implement log, warn and error methods")}const KEYWORD_NAME=/^[a-z_$][a-z0-9_$:-]*$/i;function checkKeyword(keyword2,def){const{RULES}=this;if((0,util_1.eachItem)(keyword2,kwd=>{if(RULES. keywords[kwd])throw new Error(`Keyword ${kwd} is already defined`);if(!KEYWORD_NAME.test(kwd))throw new Error(`Keyword ${kwd} has invalid name`)}),!!def&&def.$data&&!("code"in def||"validate"in def))throw new Error('$data keyword must have "code" or "validate" function')}function addRule(keyword2,definition2,dataType2){var _a2;const post=definition2?.post;if(dataType2&&post)throw new Error('keyword with "post" flag cannot have "type"');const{RULES}=this;let ruleGroup=post?RULES.post:RULES.rules. find(({type:t})=>t===dataType2);if(ruleGroup||(ruleGroup={type:dataType2,rules:[]},RULES.rules.push(ruleGroup)),RULES.keywords[keyword2]=!0,!definition2)return;const rule={keyword:keyword2,definition:{...definition2,type:(0,dataType_1.getJSONTypes)(definition2.type),schemaType:(0,dataType_1.getJSONTypes)(definition2.schemaType)}};definition2.before?addBeforeRule.call(this,ruleGroup,rule,definition2.before):ruleGroup.rules.push(rule),RULES.all[keyword2]=rule,(_a2=definition2.implements)===null||_a2=== void 0||_a2.forEach(kwd=>this.addKeyword(kwd))}function addBeforeRule(ruleGroup,rule,before){const i=ruleGroup.rules.findIndex(_rule=>_rule.keyword===before);i>=0?ruleGroup.rules.splice(i,0,rule):(ruleGroup.rules.push(rule),this.logger.warn(`rule ${before} is not defined`))}function keywordMetaschema(def){let{metaSchema}=def;metaSchema!==void 0&&(def.$data&&this.opts.$data&&(metaSchema=schemaOrData(metaSchema)),def.validateSchema=this.compile(metaSchema,!0))}const $dataRef={$ref:"https://raw.git\ -hubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function schemaOrData(schema){return{anyOf:[schema,$dataRef]}}}(core$2)),core$2}var draft7={},core$1={},id={},hasRequiredId;function requireId(){if(hasRequiredId)return id;hasRequiredId=1,Object.defineProperty(id,"__esModule",{value:!0});const def={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};return id.default=def,id}var ref={},hasRequiredRef;function requireRef(){if(hasRequiredRef) +hubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function schemaOrData(schema){return{anyOf:[schema,$dataRef]}}})(core$2)),core$2}var draft7={},core$1={},id={},hasRequiredId;function requireId(){if(hasRequiredId)return id;hasRequiredId=1,Object.defineProperty(id,"__esModule",{value:!0});const def={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};return id.default=def,id}var ref={},hasRequiredRef;function requireRef(){if(hasRequiredRef) return ref;hasRequiredRef=1,Object.defineProperty(ref,"__esModule",{value:!0}),ref.callRef=ref.getValidate=void 0;const ref_error_1=requireRef_error(),code_1=requireCode(),codegen_1=requireCodegen(),names_1=requireNames(),compile_1=requireCompile(),util_1=requireUtil(),def={keyword:"$ref",schemaType:"string",code(cxt){const{gen,schema:$ref,it}=cxt,{baseId,schemaEnv:env2,validateName,opts,self:self2}=it,{root:root2}=env2;if(($ref==="#"||$ref==="#/")&&baseId===root2.baseId)return callRootRef();const schOrEnv=compile_1. resolveRef.call(self2,root2,baseId,$ref);if(schOrEnv===void 0)throw new ref_error_1.default(it.opts.uriResolver,baseId,$ref);if(schOrEnv instanceof compile_1.SchemaEnv)return callValidate(schOrEnv);return inlineRefSchema(schOrEnv);function callRootRef(){if(env2===root2)return callRef(cxt,validateName,env2,env2.$async);const rootName=gen.scopeValue("root",{ref:root2});return callRef(cxt,(0,codegen_1._)`${rootName}.validate`,root2,root2.$async)}function callValidate(sch){const v=getValidate(cxt,sch); callRef(cxt,v,sch,sch.$async)}function inlineRefSchema(sch){const schName=gen.scopeValue("schema",opts.code.source===!0?{ref:sch,code:(0,codegen_1.stringify)(sch)}:{ref:sch}),valid2=gen.name("valid"),schCxt=cxt.subschema({schema:sch,dataTypes:[],schemaPath:codegen_1.nil,topSchemaRef:schName,errSchemaPath:$ref},valid2);cxt.mergeEvaluated(schCxt),cxt.ok(valid2)}}};function getValidate(cxt,sch){const{gen}=cxt;return sch.validate?gen.scopeValue("validate",{ref:sch.validate}):(0,codegen_1._)`${gen.scopeValue( @@ -4657,57 +4741,57 @@ error:{message:({schemaCode})=>(0,codegen_1.str)`must be multiple of ${schemaCod def,multipleOf}var limitLength={},ucs2length={},hasRequiredUcs2length;function requireUcs2length(){if(hasRequiredUcs2length)return ucs2length;hasRequiredUcs2length=1,Object.defineProperty(ucs2length,"__esModule",{value:!0});function ucs2length$12(str){const len=str.length;let length=0,pos=0,value;for(;pos<len;)length++,value=str.charCodeAt(pos++),value>=55296&&value<=56319&&pos<len&&(value=str.charCodeAt(pos),(value&64512)===56320&&pos++);return length}return ucs2length.default=ucs2length$12,ucs2length$12. code='require("ajv/dist/runtime/ucs2length").default',ucs2length}var hasRequiredLimitLength;function requireLimitLength(){if(hasRequiredLimitLength)return limitLength;hasRequiredLimitLength=1,Object.defineProperty(limitLength,"__esModule",{value:!0});const codegen_1=requireCodegen(),util_1=requireUtil(),ucs2length_1=requireUcs2length(),def={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2==="maxLength"? "more":"fewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} characters`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2,data,schemaCode,it}=cxt,op2=keyword2==="maxLength"?codegen_1.operators.GT:codegen_1.operators.LT,len=it.opts.unicode===!1?(0,codegen_1._)`${data}.length`:(0,codegen_1._)`${(0,util_1.useFunc)(cxt.gen,ucs2length_1.default)}(${data})`;cxt.fail$data((0,codegen_1._)`${len} ${op2} ${schemaCode}`)}};return limitLength. -default=def,limitLength}var pattern={},hasRequiredPattern;function requirePattern(){if(hasRequiredPattern)return pattern;hasRequiredPattern=1,Object.defineProperty(pattern,"__esModule",{value:!0});const code_1=requireCode(),codegen_1=requireCodegen(),def={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode})=>(0,codegen_1.str)`must match pattern "${schemaCode}"`,params:({schemaCode})=>(0,codegen_1._)`{pattern: ${schemaCode}}`},code(cxt){const{data,$data,schema, -schemaCode,it}=cxt,u=it.opts.unicodeRegExp?"u":"",regExp=$data?(0,codegen_1._)`(new RegExp(${schemaCode}, ${u}))`:(0,code_1.usePattern)(cxt,schema);cxt.fail$data((0,codegen_1._)`!${regExp}.test(${data})`)}};return pattern.default=def,pattern}var limitProperties={},hasRequiredLimitProperties;function requireLimitProperties(){if(hasRequiredLimitProperties)return limitProperties;hasRequiredLimitProperties=1,Object.defineProperty(limitProperties,"__esModule",{value:!0});const codegen_1=requireCodegen(), -def={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2==="maxProperties"?"more":"fewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} properties`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2,data,schemaCode}=cxt,op2=keyword2==="maxProperties"?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`Object.keys(${data}).length ${op2} ${schemaCode}`)}}; -return limitProperties.default=def,limitProperties}var required={},hasRequiredRequired;function requireRequired(){if(hasRequiredRequired)return required;hasRequiredRequired=1,Object.defineProperty(required,"__esModule",{value:!0});const code_1=requireCode(),codegen_1=requireCodegen(),util_1=requireUtil(),def={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty}})=>(0,codegen_1.str)`must have required property '${missingProperty}'`,params:({params:{ -missingProperty}})=>(0,codegen_1._)`{missingProperty: ${missingProperty}}`},code(cxt){const{gen,schema,schemaCode,data,$data,it}=cxt,{opts}=it;if(!$data&&schema.length===0)return;const useLoop=schema.length>=opts.loopRequired;if(it.allErrors?allErrorsMode():exitOnErrorMode(),opts.strictRequired){const props=cxt.parentSchema.properties,{definedProperties}=cxt.it;for(const requiredKey of schema)if(props?.[requiredKey]===void 0&&!definedProperties.has(requiredKey)){const schemaPath=it.schemaEnv.baseId+ -it.errSchemaPath,msg=`required property "${requiredKey}" is not defined at "${schemaPath}" (strictRequired)`;(0,util_1.checkStrictMode)(it,msg,it.opts.strictRequired)}}function allErrorsMode(){if(useLoop||$data)cxt.block$data(codegen_1.nil,loopAllRequired);else for(const prop2 of schema)(0,code_1.checkReportMissingProp)(cxt,prop2)}function exitOnErrorMode(){const missing=gen.let("missing");if(useLoop||$data){const valid2=gen.let("valid",!0);cxt.block$data(valid2,()=>loopUntilMissing(missing,valid2)), -cxt.ok(valid2)}else gen.if((0,code_1.checkMissingProp)(cxt,schema,missing)),(0,code_1.reportMissingProp)(cxt,missing),gen.else()}function loopAllRequired(){gen.forOf("prop",schemaCode,prop2=>{cxt.setParams({missingProperty:prop2}),gen.if((0,code_1.noPropertyInData)(gen,data,prop2,opts.ownProperties),()=>cxt.error())})}function loopUntilMissing(missing,valid2){cxt.setParams({missingProperty:missing}),gen.forOf(missing,schemaCode,()=>{gen.assign(valid2,(0,code_1.propertyInData)(gen,data,missing,opts. -ownProperties)),gen.if((0,codegen_1.not)(valid2),()=>{cxt.error(),gen.break()})},codegen_1.nil)}}};return required.default=def,required}var limitItems={},hasRequiredLimitItems;function requireLimitItems(){if(hasRequiredLimitItems)return limitItems;hasRequiredLimitItems=1,Object.defineProperty(limitItems,"__esModule",{value:!0});const codegen_1=requireCodegen(),def={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2=== -"maxItems"?"more":"fewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2,data,schemaCode}=cxt,op2=keyword2==="maxItems"?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`${data}.length ${op2} ${schemaCode}`)}};return limitItems.default=def,limitItems}var uniqueItems={},equal={},hasRequiredEqual;function requireEqual(){if(hasRequiredEqual)return equal; -hasRequiredEqual=1,Object.defineProperty(equal,"__esModule",{value:!0});const equal$12=requireFastDeepEqual();return equal$12.code='require("ajv/dist/runtime/equal").default',equal.default=equal$12,equal}var hasRequiredUniqueItems;function requireUniqueItems(){if(hasRequiredUniqueItems)return uniqueItems;hasRequiredUniqueItems=1,Object.defineProperty(uniqueItems,"__esModule",{value:!0});const dataType_1=requireDataType(),codegen_1=requireCodegen(),util_1=requireUtil(),equal_1=requireEqual(),def={ -keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i,j}})=>(0,codegen_1.str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,params:({params:{i,j}})=>(0,codegen_1._)`{i: ${i}, j: ${j}}`},code(cxt){const{gen,data,$data,schema,parentSchema,schemaCode,it}=cxt;if(!$data&&!schema)return;const valid2=gen.let("valid"),itemTypes=parentSchema.items?(0,dataType_1.getSchemaTypes)(parentSchema.items):[];cxt.block$data(valid2,validateUniqueItems,(0,codegen_1. -_)`${schemaCode} === false`),cxt.ok(valid2);function validateUniqueItems(){const i=gen.let("i",(0,codegen_1._)`${data}.length`),j=gen.let("j");cxt.setParams({i,j}),gen.assign(valid2,!0),gen.if((0,codegen_1._)`${i} > 1`,()=>(canOptimize()?loopN:loopN2)(i,j))}function canOptimize(){return itemTypes.length>0&&!itemTypes.some(t=>t==="object"||t==="array")}function loopN(i,j){const item=gen.name("item"),wrongType=(0,dataType_1.checkDataTypes)(itemTypes,item,it.opts.strictNumbers,dataType_1.DataType.Wrong), -indices=gen.const("indices",(0,codegen_1._)`{}`);gen.for((0,codegen_1._)`;${i}--;`,()=>{gen.let(item,(0,codegen_1._)`${data}[${i}]`),gen.if(wrongType,(0,codegen_1._)`continue`),itemTypes.length>1&&gen.if((0,codegen_1._)`typeof ${item} == "string"`,(0,codegen_1._)`${item} += "_"`),gen.if((0,codegen_1._)`typeof ${indices}[${item}] == "number"`,()=>{gen.assign(j,(0,codegen_1._)`${indices}[${item}]`),cxt.error(),gen.assign(valid2,!1).break()}).code((0,codegen_1._)`${indices}[${item}] = ${i}`)})}function loopN2(i,j){ -const eql=(0,util_1.useFunc)(gen,equal_1.default),outer=gen.name("outer");gen.label(outer).for((0,codegen_1._)`;${i}--;`,()=>gen.for((0,codegen_1._)`${j} = ${i}; ${j}--;`,()=>gen.if((0,codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`,()=>{cxt.error(),gen.assign(valid2,!1).break(outer)})))}}};return uniqueItems.default=def,uniqueItems}var _const={},hasRequired_const;function require_const(){if(hasRequired_const)return _const;hasRequired_const=1,Object.defineProperty(_const,"__esModule",{value:!0}); -const codegen_1=requireCodegen(),util_1=requireUtil(),equal_1=requireEqual(),def={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode})=>(0,codegen_1._)`{allowedValue: ${schemaCode}}`},code(cxt){const{gen,data,$data,schemaCode,schema}=cxt;$data||schema&&typeof schema=="object"?cxt.fail$data((0,codegen_1._)`!${(0,util_1.useFunc)(gen,equal_1.default)}(${data}, ${schemaCode})`):cxt.fail((0,codegen_1._)`${schema} !== ${data}`)}};return _const.default=def,_const}var _enum={}, -hasRequired_enum;function require_enum(){if(hasRequired_enum)return _enum;hasRequired_enum=1,Object.defineProperty(_enum,"__esModule",{value:!0});const codegen_1=requireCodegen(),util_1=requireUtil(),equal_1=requireEqual(),def={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode})=>(0,codegen_1._)`{allowedValues: ${schemaCode}}`},code(cxt){const{gen,data,$data,schema,schemaCode,it}=cxt;if(!$data&&schema.length===0)throw new Error( -"enum must have non-empty array");const useLoop=schema.length>=it.opts.loopEnum;let eql;const getEql=()=>eql??(eql=(0,util_1.useFunc)(gen,equal_1.default));let valid2;if(useLoop||$data)valid2=gen.let("valid"),cxt.block$data(valid2,loopEnum);else{if(!Array.isArray(schema))throw new Error("ajv implementation error");const vSchema=gen.const("vSchema",schemaCode);valid2=(0,codegen_1.or)(...schema.map((_x,i)=>equalCode(vSchema,i)))}cxt.pass(valid2);function loopEnum(){gen.assign(valid2,!1),gen.forOf( -"v",schemaCode,v=>gen.if((0,codegen_1._)`${getEql()}(${data}, ${v})`,()=>gen.assign(valid2,!0).break()))}function equalCode(vSchema,i){const sch=schema[i];return typeof sch=="object"&&sch!==null?(0,codegen_1._)`${getEql()}(${data}, ${vSchema}[${i}])`:(0,codegen_1._)`${data} === ${sch}`}}};return _enum.default=def,_enum}var hasRequiredValidation;function requireValidation(){if(hasRequiredValidation)return validation;hasRequiredValidation=1,Object.defineProperty(validation,"__esModule",{value:!0}); -const limitNumber_1=requireLimitNumber(),multipleOf_1=requireMultipleOf(),limitLength_1=requireLimitLength(),pattern_1=requirePattern(),limitProperties_1=requireLimitProperties(),required_1=requireRequired(),limitItems_1=requireLimitItems(),uniqueItems_1=requireUniqueItems(),const_1=require_const(),enum_1=require_enum(),validation$12=[limitNumber_1.default,multipleOf_1.default,limitLength_1.default,pattern_1.default,limitProperties_1.default,required_1.default,limitItems_1.default,uniqueItems_1. -default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},const_1.default,enum_1.default];return validation.default=validation$12,validation}var applicator={},additionalItems={},hasRequiredAdditionalItems;function requireAdditionalItems(){if(hasRequiredAdditionalItems)return additionalItems;hasRequiredAdditionalItems=1,Object.defineProperty(additionalItems,"__esModule",{value:!0}),additionalItems.validateAdditionalItems=void 0;const codegen_1=requireCodegen(), -util_1=requireUtil(),def={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len}})=>(0,codegen_1.str)`must NOT have more than ${len} items`,params:({params:{len}})=>(0,codegen_1._)`{limit: ${len}}`},code(cxt){const{parentSchema,it}=cxt,{items:items2}=parentSchema;if(!Array.isArray(items2)){(0,util_1.checkStrictMode)(it,'"additionalItems" is ignored when "items" is not an array of schemas');return}validateAdditionalItems(cxt,items2)}}; -function validateAdditionalItems(cxt,items2){const{gen,schema,data,keyword:keyword2,it}=cxt;it.items=!0;const len=gen.const("len",(0,codegen_1._)`${data}.length`);if(schema===!1)cxt.setParams({len:items2.length}),cxt.pass((0,codegen_1._)`${len} <= ${items2.length}`);else if(typeof schema=="object"&&!(0,util_1.alwaysValidSchema)(it,schema)){const valid2=gen.var("valid",(0,codegen_1._)`${len} <= ${items2.length}`);gen.if((0,codegen_1.not)(valid2),()=>validateItems(valid2)),cxt.ok(valid2)}function validateItems(valid2){ -gen.forRange("i",items2.length,len,i=>{cxt.subschema({keyword:keyword2,dataProp:i,dataPropType:util_1.Type.Num},valid2),it.allErrors||gen.if((0,codegen_1.not)(valid2),()=>gen.break())})}}return additionalItems.validateAdditionalItems=validateAdditionalItems,additionalItems.default=def,additionalItems}var prefixItems={},items={},hasRequiredItems;function requireItems(){if(hasRequiredItems)return items;hasRequiredItems=1,Object.defineProperty(items,"__esModule",{value:!0}),items.validateTuple=void 0; -const codegen_1=requireCodegen(),util_1=requireUtil(),code_1=requireCode(),def={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(cxt){const{schema,it}=cxt;if(Array.isArray(schema))return validateTuple(cxt,"additionalItems",schema);it.items=!0,!(0,util_1.alwaysValidSchema)(it,schema)&&cxt.ok((0,code_1.validateArray)(cxt))}};function validateTuple(cxt,extraItems,schArr=cxt.schema){const{gen,parentSchema,data,keyword:keyword2,it}=cxt;checkStrictTuple(parentSchema), -it.opts.unevaluated&&schArr.length&&it.items!==!0&&(it.items=util_1.mergeEvaluated.items(gen,schArr.length,it.items));const valid2=gen.name("valid"),len=gen.const("len",(0,codegen_1._)`${data}.length`);schArr.forEach((sch,i)=>{(0,util_1.alwaysValidSchema)(it,sch)||(gen.if((0,codegen_1._)`${len} > ${i}`,()=>cxt.subschema({keyword:keyword2,schemaProp:i,dataProp:i},valid2)),cxt.ok(valid2))});function checkStrictTuple(sch){const{opts,errSchemaPath}=it,l=schArr.length,fullTuple=l===sch.minItems&&(l=== -sch.maxItems||sch[extraItems]===!1);if(opts.strictTuples&&!fullTuple){const msg=`"${keyword2}" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path "${errSchemaPath}"`;(0,util_1.checkStrictMode)(it,msg,opts.strictTuples)}}}return items.validateTuple=validateTuple,items.default=def,items}var hasRequiredPrefixItems;function requirePrefixItems(){if(hasRequiredPrefixItems)return prefixItems;hasRequiredPrefixItems=1,Object.defineProperty(prefixItems,"__esModule", -{value:!0});const items_1=requireItems(),def={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:cxt=>(0,items_1.validateTuple)(cxt,"items")};return prefixItems.default=def,prefixItems}var items2020={},hasRequiredItems2020;function requireItems2020(){if(hasRequiredItems2020)return items2020;hasRequiredItems2020=1,Object.defineProperty(items2020,"__esModule",{value:!0});const codegen_1=requireCodegen(),util_1=requireUtil(),code_1=requireCode(),additionalItems_1=requireAdditionalItems(), -def={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len}})=>(0,codegen_1.str)`must NOT have more than ${len} items`,params:({params:{len}})=>(0,codegen_1._)`{limit: ${len}}`},code(cxt){const{schema,parentSchema,it}=cxt,{prefixItems:prefixItems2}=parentSchema;it.items=!0,!(0,util_1.alwaysValidSchema)(it,schema)&&(prefixItems2?(0,additionalItems_1.validateAdditionalItems)(cxt,prefixItems2):cxt.ok((0,code_1.validateArray)(cxt)))}};return items2020. -default=def,items2020}var contains$1={},hasRequiredContains;function requireContains(){if(hasRequiredContains)return contains$1;hasRequiredContains=1,Object.defineProperty(contains$1,"__esModule",{value:!0});const codegen_1=requireCodegen(),util_1=requireUtil(),def={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:min2,max:max2}})=>max2===void 0?(0,codegen_1.str)`must contain at least ${min2} valid item(s)`:(0,codegen_1. -str)`must contain at least ${min2} and no more than ${max2} valid item(s)`,params:({params:{min:min2,max:max2}})=>max2===void 0?(0,codegen_1._)`{minContains: ${min2}}`:(0,codegen_1._)`{minContains: ${min2}, maxContains: ${max2}}`},code(cxt){const{gen,schema,parentSchema,data,it}=cxt;let min2,max2;const{minContains,maxContains}=parentSchema;it.opts.next?(min2=minContains===void 0?1:minContains,max2=maxContains):min2=1;const len=gen.const("len",(0,codegen_1._)`${data}.length`);if(cxt.setParams({min:min2, -max:max2}),max2===void 0&&min2===0){(0,util_1.checkStrictMode)(it,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(max2!==void 0&&min2>max2){(0,util_1.checkStrictMode)(it,'"minContains" > "maxContains" is always invalid'),cxt.fail();return}if((0,util_1.alwaysValidSchema)(it,schema)){let cond=(0,codegen_1._)`${len} >= ${min2}`;max2!==void 0&&(cond=(0,codegen_1._)`${cond} && ${len} <= ${max2}`),cxt.pass(cond);return}it.items=!0;const valid2=gen.name("valid");max2=== -void 0&&min2===1?validateItems(valid2,()=>gen.if(valid2,()=>gen.break())):min2===0?(gen.let(valid2,!0),max2!==void 0&&gen.if((0,codegen_1._)`${data}.length > 0`,validateItemsWithCount)):(gen.let(valid2,!1),validateItemsWithCount()),cxt.result(valid2,()=>cxt.reset());function validateItemsWithCount(){const schValid=gen.name("_valid"),count=gen.let("count",0);validateItems(schValid,()=>gen.if(schValid,()=>checkLimits(count)))}function validateItems(_valid,block2){gen.forRange("i",0,len,i=>{cxt.subschema( -{keyword:"contains",dataProp:i,dataPropType:util_1.Type.Num,compositeRule:!0},_valid),block2()})}function checkLimits(count){gen.code((0,codegen_1._)`${count}++`),max2===void 0?gen.if((0,codegen_1._)`${count} >= ${min2}`,()=>gen.assign(valid2,!0).break()):(gen.if((0,codegen_1._)`${count} > ${max2}`,()=>gen.assign(valid2,!1).break()),min2===1?gen.assign(valid2,!0):gen.if((0,codegen_1._)`${count} >= ${min2}`,()=>gen.assign(valid2,!0)))}}};return contains$1.default=def,contains$1}var dependencies={}, -hasRequiredDependencies;function requireDependencies(){return hasRequiredDependencies||(hasRequiredDependencies=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.validateSchemaDeps=exports.validatePropertyDeps=exports.error=void 0;const codegen_1=requireCodegen(),util_1=requireUtil(),code_1=requireCode();exports.error={message:({params:{property,depsCount,deps}})=>{const property_ies=depsCount===1?"property":"properties";return(0,codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`}, -params:({params:{property,depsCount,deps,missingProperty}})=>(0,codegen_1._)`{property: ${property}, +default=def,limitLength}var pattern={},hasRequiredPattern;function requirePattern(){if(hasRequiredPattern)return pattern;hasRequiredPattern=1,Object.defineProperty(pattern,"__esModule",{value:!0});const code_1=requireCode(),util_1=requireUtil(),codegen_1=requireCodegen(),def={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode})=>(0,codegen_1.str)`must match pattern "${schemaCode}"`,params:({schemaCode})=>(0,codegen_1._)`{pattern: ${schemaCode}}`},code(cxt){const{ +gen,data,$data,schema,schemaCode,it}=cxt,u=it.opts.unicodeRegExp?"u":"";if($data){const{regExp}=it.opts.code,regExpCode=regExp.code==="new RegExp"?(0,codegen_1._)`new RegExp`:(0,util_1.useFunc)(gen,regExp),valid2=gen.let("valid");gen.try(()=>gen.assign(valid2,(0,codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`),()=>gen.assign(valid2,!1)),cxt.fail$data((0,codegen_1._)`!${valid2}`)}else{const regExp=(0,code_1.usePattern)(cxt,schema);cxt.fail$data((0,codegen_1._)`!${regExp}.test(${data})`)}}}; +return pattern.default=def,pattern}var limitProperties={},hasRequiredLimitProperties;function requireLimitProperties(){if(hasRequiredLimitProperties)return limitProperties;hasRequiredLimitProperties=1,Object.defineProperty(limitProperties,"__esModule",{value:!0});const codegen_1=requireCodegen(),def={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2==="maxProperties"?"more":"fewer";return(0,codegen_1. +str)`must NOT have ${comp} than ${schemaCode} properties`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){const{keyword:keyword2,data,schemaCode}=cxt,op2=keyword2==="maxProperties"?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`Object.keys(${data}).length ${op2} ${schemaCode}`)}};return limitProperties.default=def,limitProperties}var required={},hasRequiredRequired;function requireRequired(){if(hasRequiredRequired)return required;hasRequiredRequired= +1,Object.defineProperty(required,"__esModule",{value:!0});const code_1=requireCode(),codegen_1=requireCodegen(),util_1=requireUtil(),def={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty}})=>(0,codegen_1.str)`must have required property '${missingProperty}'`,params:({params:{missingProperty}})=>(0,codegen_1._)`{missingProperty: ${missingProperty}}`},code(cxt){const{gen,schema,schemaCode,data,$data,it}=cxt,{opts}=it;if(!$data&&schema.length===0) +return;const useLoop=schema.length>=opts.loopRequired;if(it.allErrors?allErrorsMode():exitOnErrorMode(),opts.strictRequired){const props=cxt.parentSchema.properties,{definedProperties}=cxt.it;for(const requiredKey of schema)if(props?.[requiredKey]===void 0&&!definedProperties.has(requiredKey)){const schemaPath=it.schemaEnv.baseId+it.errSchemaPath,msg=`required property "${requiredKey}" is not defined at "${schemaPath}" (strictRequired)`;(0,util_1.checkStrictMode)(it,msg,it.opts.strictRequired)}} +function allErrorsMode(){if(useLoop||$data)cxt.block$data(codegen_1.nil,loopAllRequired);else for(const prop2 of schema)(0,code_1.checkReportMissingProp)(cxt,prop2)}function exitOnErrorMode(){const missing=gen.let("missing");if(useLoop||$data){const valid2=gen.let("valid",!0);cxt.block$data(valid2,()=>loopUntilMissing(missing,valid2)),cxt.ok(valid2)}else gen.if((0,code_1.checkMissingProp)(cxt,schema,missing)),(0,code_1.reportMissingProp)(cxt,missing),gen.else()}function loopAllRequired(){gen.forOf( +"prop",schemaCode,prop2=>{cxt.setParams({missingProperty:prop2}),gen.if((0,code_1.noPropertyInData)(gen,data,prop2,opts.ownProperties),()=>cxt.error())})}function loopUntilMissing(missing,valid2){cxt.setParams({missingProperty:missing}),gen.forOf(missing,schemaCode,()=>{gen.assign(valid2,(0,code_1.propertyInData)(gen,data,missing,opts.ownProperties)),gen.if((0,codegen_1.not)(valid2),()=>{cxt.error(),gen.break()})},codegen_1.nil)}}};return required.default=def,required}var limitItems={},hasRequiredLimitItems; +function requireLimitItems(){if(hasRequiredLimitItems)return limitItems;hasRequiredLimitItems=1,Object.defineProperty(limitItems,"__esModule",{value:!0});const codegen_1=requireCodegen(),def={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:keyword2,schemaCode}){const comp=keyword2==="maxItems"?"more":"fewer";return(0,codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`},params:({schemaCode})=>(0,codegen_1._)`{limit: ${schemaCode}}`},code(cxt){ +const{keyword:keyword2,data,schemaCode}=cxt,op2=keyword2==="maxItems"?codegen_1.operators.GT:codegen_1.operators.LT;cxt.fail$data((0,codegen_1._)`${data}.length ${op2} ${schemaCode}`)}};return limitItems.default=def,limitItems}var uniqueItems={},equal={},hasRequiredEqual;function requireEqual(){if(hasRequiredEqual)return equal;hasRequiredEqual=1,Object.defineProperty(equal,"__esModule",{value:!0});const equal$12=requireFastDeepEqual();return equal$12.code='require("ajv/dist/runtime/equal").defau\ +lt',equal.default=equal$12,equal}var hasRequiredUniqueItems;function requireUniqueItems(){if(hasRequiredUniqueItems)return uniqueItems;hasRequiredUniqueItems=1,Object.defineProperty(uniqueItems,"__esModule",{value:!0});const dataType_1=requireDataType(),codegen_1=requireCodegen(),util_1=requireUtil(),equal_1=requireEqual(),def={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i,j}})=>(0,codegen_1.str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`, +params:({params:{i,j}})=>(0,codegen_1._)`{i: ${i}, j: ${j}}`},code(cxt){const{gen,data,$data,schema,parentSchema,schemaCode,it}=cxt;if(!$data&&!schema)return;const valid2=gen.let("valid"),itemTypes=parentSchema.items?(0,dataType_1.getSchemaTypes)(parentSchema.items):[];cxt.block$data(valid2,validateUniqueItems,(0,codegen_1._)`${schemaCode} === false`),cxt.ok(valid2);function validateUniqueItems(){const i=gen.let("i",(0,codegen_1._)`${data}.length`),j=gen.let("j");cxt.setParams({i,j}),gen.assign( +valid2,!0),gen.if((0,codegen_1._)`${i} > 1`,()=>(canOptimize()?loopN:loopN2)(i,j))}function canOptimize(){return itemTypes.length>0&&!itemTypes.some(t=>t==="object"||t==="array")}function loopN(i,j){const item=gen.name("item"),wrongType=(0,dataType_1.checkDataTypes)(itemTypes,item,it.opts.strictNumbers,dataType_1.DataType.Wrong),indices=gen.const("indices",(0,codegen_1._)`{}`);gen.for((0,codegen_1._)`;${i}--;`,()=>{gen.let(item,(0,codegen_1._)`${data}[${i}]`),gen.if(wrongType,(0,codegen_1._)`continue`), +itemTypes.length>1&&gen.if((0,codegen_1._)`typeof ${item} == "string"`,(0,codegen_1._)`${item} += "_"`),gen.if((0,codegen_1._)`typeof ${indices}[${item}] == "number"`,()=>{gen.assign(j,(0,codegen_1._)`${indices}[${item}]`),cxt.error(),gen.assign(valid2,!1).break()}).code((0,codegen_1._)`${indices}[${item}] = ${i}`)})}function loopN2(i,j){const eql=(0,util_1.useFunc)(gen,equal_1.default),outer=gen.name("outer");gen.label(outer).for((0,codegen_1._)`;${i}--;`,()=>gen.for((0,codegen_1._)`${j} = ${i}; ${j}--;`, +()=>gen.if((0,codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`,()=>{cxt.error(),gen.assign(valid2,!1).break(outer)})))}}};return uniqueItems.default=def,uniqueItems}var _const={},hasRequired_const;function require_const(){if(hasRequired_const)return _const;hasRequired_const=1,Object.defineProperty(_const,"__esModule",{value:!0});const codegen_1=requireCodegen(),util_1=requireUtil(),equal_1=requireEqual(),def={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode})=>(0,codegen_1. +_)`{allowedValue: ${schemaCode}}`},code(cxt){const{gen,data,$data,schemaCode,schema}=cxt;$data||schema&&typeof schema=="object"?cxt.fail$data((0,codegen_1._)`!${(0,util_1.useFunc)(gen,equal_1.default)}(${data}, ${schemaCode})`):cxt.fail((0,codegen_1._)`${schema} !== ${data}`)}};return _const.default=def,_const}var _enum={},hasRequired_enum;function require_enum(){if(hasRequired_enum)return _enum;hasRequired_enum=1,Object.defineProperty(_enum,"__esModule",{value:!0});const codegen_1=requireCodegen(), +util_1=requireUtil(),equal_1=requireEqual(),def={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode})=>(0,codegen_1._)`{allowedValues: ${schemaCode}}`},code(cxt){const{gen,data,$data,schema,schemaCode,it}=cxt;if(!$data&&schema.length===0)throw new Error("enum must have non-empty array");const useLoop=schema.length>=it.opts.loopEnum;let eql;const getEql=()=>eql??(eql=(0,util_1.useFunc)(gen,equal_1.default));let valid2;if(useLoop|| +$data)valid2=gen.let("valid"),cxt.block$data(valid2,loopEnum);else{if(!Array.isArray(schema))throw new Error("ajv implementation error");const vSchema=gen.const("vSchema",schemaCode);valid2=(0,codegen_1.or)(...schema.map((_x,i)=>equalCode(vSchema,i)))}cxt.pass(valid2);function loopEnum(){gen.assign(valid2,!1),gen.forOf("v",schemaCode,v=>gen.if((0,codegen_1._)`${getEql()}(${data}, ${v})`,()=>gen.assign(valid2,!0).break()))}function equalCode(vSchema,i){const sch=schema[i];return typeof sch=="obje\ +ct"&&sch!==null?(0,codegen_1._)`${getEql()}(${data}, ${vSchema}[${i}])`:(0,codegen_1._)`${data} === ${sch}`}}};return _enum.default=def,_enum}var hasRequiredValidation;function requireValidation(){if(hasRequiredValidation)return validation;hasRequiredValidation=1,Object.defineProperty(validation,"__esModule",{value:!0});const limitNumber_1=requireLimitNumber(),multipleOf_1=requireMultipleOf(),limitLength_1=requireLimitLength(),pattern_1=requirePattern(),limitProperties_1=requireLimitProperties(), +required_1=requireRequired(),limitItems_1=requireLimitItems(),uniqueItems_1=requireUniqueItems(),const_1=require_const(),enum_1=require_enum(),validation$12=[limitNumber_1.default,multipleOf_1.default,limitLength_1.default,pattern_1.default,limitProperties_1.default,required_1.default,limitItems_1.default,uniqueItems_1.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},const_1.default,enum_1.default];return validation.default=validation$12,validation} +var applicator={},additionalItems={},hasRequiredAdditionalItems;function requireAdditionalItems(){if(hasRequiredAdditionalItems)return additionalItems;hasRequiredAdditionalItems=1,Object.defineProperty(additionalItems,"__esModule",{value:!0}),additionalItems.validateAdditionalItems=void 0;const codegen_1=requireCodegen(),util_1=requireUtil(),def={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len}})=>(0,codegen_1.str)`must NOT have more than ${len} items`, +params:({params:{len}})=>(0,codegen_1._)`{limit: ${len}}`},code(cxt){const{parentSchema,it}=cxt,{items:items2}=parentSchema;if(!Array.isArray(items2)){(0,util_1.checkStrictMode)(it,'"additionalItems" is ignored when "items" is not an array of schemas');return}validateAdditionalItems(cxt,items2)}};function validateAdditionalItems(cxt,items2){const{gen,schema,data,keyword:keyword2,it}=cxt;it.items=!0;const len=gen.const("len",(0,codegen_1._)`${data}.length`);if(schema===!1)cxt.setParams({len:items2. +length}),cxt.pass((0,codegen_1._)`${len} <= ${items2.length}`);else if(typeof schema=="object"&&!(0,util_1.alwaysValidSchema)(it,schema)){const valid2=gen.var("valid",(0,codegen_1._)`${len} <= ${items2.length}`);gen.if((0,codegen_1.not)(valid2),()=>validateItems(valid2)),cxt.ok(valid2)}function validateItems(valid2){gen.forRange("i",items2.length,len,i=>{cxt.subschema({keyword:keyword2,dataProp:i,dataPropType:util_1.Type.Num},valid2),it.allErrors||gen.if((0,codegen_1.not)(valid2),()=>gen.break())})}} +return additionalItems.validateAdditionalItems=validateAdditionalItems,additionalItems.default=def,additionalItems}var prefixItems={},items={},hasRequiredItems;function requireItems(){if(hasRequiredItems)return items;hasRequiredItems=1,Object.defineProperty(items,"__esModule",{value:!0}),items.validateTuple=void 0;const codegen_1=requireCodegen(),util_1=requireUtil(),code_1=requireCode(),def={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(cxt){const{ +schema,it}=cxt;if(Array.isArray(schema))return validateTuple(cxt,"additionalItems",schema);it.items=!0,!(0,util_1.alwaysValidSchema)(it,schema)&&cxt.ok((0,code_1.validateArray)(cxt))}};function validateTuple(cxt,extraItems,schArr=cxt.schema){const{gen,parentSchema,data,keyword:keyword2,it}=cxt;checkStrictTuple(parentSchema),it.opts.unevaluated&&schArr.length&&it.items!==!0&&(it.items=util_1.mergeEvaluated.items(gen,schArr.length,it.items));const valid2=gen.name("valid"),len=gen.const("len",(0,codegen_1. +_)`${data}.length`);schArr.forEach((sch,i)=>{(0,util_1.alwaysValidSchema)(it,sch)||(gen.if((0,codegen_1._)`${len} > ${i}`,()=>cxt.subschema({keyword:keyword2,schemaProp:i,dataProp:i},valid2)),cxt.ok(valid2))});function checkStrictTuple(sch){const{opts,errSchemaPath}=it,l=schArr.length,fullTuple=l===sch.minItems&&(l===sch.maxItems||sch[extraItems]===!1);if(opts.strictTuples&&!fullTuple){const msg=`"${keyword2}" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different a\ +t path "${errSchemaPath}"`;(0,util_1.checkStrictMode)(it,msg,opts.strictTuples)}}}return items.validateTuple=validateTuple,items.default=def,items}var hasRequiredPrefixItems;function requirePrefixItems(){if(hasRequiredPrefixItems)return prefixItems;hasRequiredPrefixItems=1,Object.defineProperty(prefixItems,"__esModule",{value:!0});const items_1=requireItems(),def={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:cxt=>(0,items_1.validateTuple)(cxt,"items")};return prefixItems. +default=def,prefixItems}var items2020={},hasRequiredItems2020;function requireItems2020(){if(hasRequiredItems2020)return items2020;hasRequiredItems2020=1,Object.defineProperty(items2020,"__esModule",{value:!0});const codegen_1=requireCodegen(),util_1=requireUtil(),code_1=requireCode(),additionalItems_1=requireAdditionalItems(),def={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len}})=>(0,codegen_1.str)`must NOT have more than ${len} items`, +params:({params:{len}})=>(0,codegen_1._)`{limit: ${len}}`},code(cxt){const{schema,parentSchema,it}=cxt,{prefixItems:prefixItems2}=parentSchema;it.items=!0,!(0,util_1.alwaysValidSchema)(it,schema)&&(prefixItems2?(0,additionalItems_1.validateAdditionalItems)(cxt,prefixItems2):cxt.ok((0,code_1.validateArray)(cxt)))}};return items2020.default=def,items2020}var contains$1={},hasRequiredContains;function requireContains(){if(hasRequiredContains)return contains$1;hasRequiredContains=1,Object.defineProperty( +contains$1,"__esModule",{value:!0});const codegen_1=requireCodegen(),util_1=requireUtil(),def={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:min2,max:max2}})=>max2===void 0?(0,codegen_1.str)`must contain at least ${min2} valid item(s)`:(0,codegen_1.str)`must contain at least ${min2} and no more than ${max2} valid item(s)`,params:({params:{min:min2,max:max2}})=>max2===void 0?(0,codegen_1._)`{minContains: ${min2}}`: +(0,codegen_1._)`{minContains: ${min2}, maxContains: ${max2}}`},code(cxt){const{gen,schema,parentSchema,data,it}=cxt;let min2,max2;const{minContains,maxContains}=parentSchema;it.opts.next?(min2=minContains===void 0?1:minContains,max2=maxContains):min2=1;const len=gen.const("len",(0,codegen_1._)`${data}.length`);if(cxt.setParams({min:min2,max:max2}),max2===void 0&&min2===0){(0,util_1.checkStrictMode)(it,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(max2!==void 0&& +min2>max2){(0,util_1.checkStrictMode)(it,'"minContains" > "maxContains" is always invalid'),cxt.fail();return}if((0,util_1.alwaysValidSchema)(it,schema)){let cond=(0,codegen_1._)`${len} >= ${min2}`;max2!==void 0&&(cond=(0,codegen_1._)`${cond} && ${len} <= ${max2}`),cxt.pass(cond);return}it.items=!0;const valid2=gen.name("valid");max2===void 0&&min2===1?validateItems(valid2,()=>gen.if(valid2,()=>gen.break())):min2===0?(gen.let(valid2,!0),max2!==void 0&&gen.if((0,codegen_1._)`${data}.length > 0`,validateItemsWithCount)): +(gen.let(valid2,!1),validateItemsWithCount()),cxt.result(valid2,()=>cxt.reset());function validateItemsWithCount(){const schValid=gen.name("_valid"),count=gen.let("count",0);validateItems(schValid,()=>gen.if(schValid,()=>checkLimits(count)))}function validateItems(_valid,block2){gen.forRange("i",0,len,i=>{cxt.subschema({keyword:"contains",dataProp:i,dataPropType:util_1.Type.Num,compositeRule:!0},_valid),block2()})}function checkLimits(count){gen.code((0,codegen_1._)`${count}++`),max2===void 0?gen. +if((0,codegen_1._)`${count} >= ${min2}`,()=>gen.assign(valid2,!0).break()):(gen.if((0,codegen_1._)`${count} > ${max2}`,()=>gen.assign(valid2,!1).break()),min2===1?gen.assign(valid2,!0):gen.if((0,codegen_1._)`${count} >= ${min2}`,()=>gen.assign(valid2,!0)))}}};return contains$1.default=def,contains$1}var dependencies={},hasRequiredDependencies;function requireDependencies(){return hasRequiredDependencies||(hasRequiredDependencies=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule", +{value:!0}),exports$1.validateSchemaDeps=exports$1.validatePropertyDeps=exports$1.error=void 0;const codegen_1=requireCodegen(),util_1=requireUtil(),code_1=requireCode();exports$1.error={message:({params:{property,depsCount,deps}})=>{const property_ies=depsCount===1?"property":"properties";return(0,codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`},params:({params:{property,depsCount,deps,missingProperty}})=>(0,codegen_1._)`{property: ${property}, missingProperty: ${missingProperty}, depsCount: ${depsCount}, - deps: ${deps}}`};const def={keyword:"dependencies",type:"object",schemaType:"object",error:exports.error,code(cxt){const[propDeps,schDeps]=splitDependencies(cxt);validatePropertyDeps(cxt,propDeps),validateSchemaDeps(cxt,schDeps)}};function splitDependencies({schema}){const propertyDeps={},schemaDeps={};for(const key2 in schema){if(key2==="__proto__")continue;const deps=Array.isArray(schema[key2])?propertyDeps:schemaDeps;deps[key2]=schema[key2]}return[propertyDeps,schemaDeps]}function validatePropertyDeps(cxt,propertyDeps=cxt. + deps: ${deps}}`};const def={keyword:"dependencies",type:"object",schemaType:"object",error:exports$1.error,code(cxt){const[propDeps,schDeps]=splitDependencies(cxt);validatePropertyDeps(cxt,propDeps),validateSchemaDeps(cxt,schDeps)}};function splitDependencies({schema}){const propertyDeps={},schemaDeps={};for(const key2 in schema){if(key2==="__proto__")continue;const deps=Array.isArray(schema[key2])?propertyDeps:schemaDeps;deps[key2]=schema[key2]}return[propertyDeps,schemaDeps]}function validatePropertyDeps(cxt,propertyDeps=cxt. schema){const{gen,data,it}=cxt;if(Object.keys(propertyDeps).length===0)return;const missing=gen.let("missing");for(const prop2 in propertyDeps){const deps=propertyDeps[prop2];if(deps.length===0)continue;const hasProperty=(0,code_1.propertyInData)(gen,data,prop2,it.opts.ownProperties);cxt.setParams({property:prop2,depsCount:deps.length,deps:deps.join(", ")}),it.allErrors?gen.if(hasProperty,()=>{for(const depProp of deps)(0,code_1.checkReportMissingProp)(cxt,depProp)}):(gen.if((0,codegen_1._)`${hasProperty} && (${(0,code_1. -checkMissingProp)(cxt,deps,missing)})`),(0,code_1.reportMissingProp)(cxt,missing),gen.else())}}exports.validatePropertyDeps=validatePropertyDeps;function validateSchemaDeps(cxt,schemaDeps=cxt.schema){const{gen,data,keyword:keyword2,it}=cxt,valid2=gen.name("valid");for(const prop2 in schemaDeps)(0,util_1.alwaysValidSchema)(it,schemaDeps[prop2])||(gen.if((0,code_1.propertyInData)(gen,data,prop2,it.opts.ownProperties),()=>{const schCxt=cxt.subschema({keyword:keyword2,schemaProp:prop2},valid2);cxt.mergeValidEvaluated( -schCxt,valid2)},()=>gen.var(valid2,!0)),cxt.ok(valid2))}exports.validateSchemaDeps=validateSchemaDeps,exports.default=def}(dependencies)),dependencies}var propertyNames={},hasRequiredPropertyNames;function requirePropertyNames(){if(hasRequiredPropertyNames)return propertyNames;hasRequiredPropertyNames=1,Object.defineProperty(propertyNames,"__esModule",{value:!0});const codegen_1=requireCodegen(),util_1=requireUtil(),def={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{ -message:"property name must be valid",params:({params})=>(0,codegen_1._)`{propertyName: ${params.propertyName}}`},code(cxt){const{gen,schema,data,it}=cxt;if((0,util_1.alwaysValidSchema)(it,schema))return;const valid2=gen.name("valid");gen.forIn("key",data,key2=>{cxt.setParams({propertyName:key2}),cxt.subschema({keyword:"propertyNames",data:key2,dataTypes:["string"],propertyName:key2,compositeRule:!0},valid2),gen.if((0,codegen_1.not)(valid2),()=>{cxt.error(!0),it.allErrors||gen.break()})}),cxt.ok( -valid2)}};return propertyNames.default=def,propertyNames}var additionalProperties={},hasRequiredAdditionalProperties;function requireAdditionalProperties(){if(hasRequiredAdditionalProperties)return additionalProperties;hasRequiredAdditionalProperties=1,Object.defineProperty(additionalProperties,"__esModule",{value:!0});const code_1=requireCode(),codegen_1=requireCodegen(),names_1=requireNames(),util_1=requireUtil(),def={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"], -allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params})=>(0,codegen_1._)`{additionalProperty: ${params.additionalProperty}}`},code(cxt){const{gen,schema,parentSchema,data,errsCount,it}=cxt;if(!errsCount)throw new Error("ajv implementation error");const{allErrors,opts}=it;if(it.props=!0,opts.removeAdditional!=="all"&&(0,util_1.alwaysValidSchema)(it,schema))return;const props=(0,code_1.allSchemaProperties)(parentSchema.properties),patProps=(0,code_1. -allSchemaProperties)(parentSchema.patternProperties);checkAdditionalProperties(),cxt.ok((0,codegen_1._)`${errsCount} === ${names_1.default.errors}`);function checkAdditionalProperties(){gen.forIn("key",data,key2=>{!props.length&&!patProps.length?additionalPropertyCode(key2):gen.if(isAdditional(key2),()=>additionalPropertyCode(key2))})}function isAdditional(key2){let definedProp;if(props.length>8){const propsSchema=(0,util_1.schemaRefOrVal)(it,parentSchema.properties,"properties");definedProp=(0,code_1. -isOwnProperty)(gen,propsSchema,key2)}else props.length?definedProp=(0,codegen_1.or)(...props.map(p2=>(0,codegen_1._)`${key2} === ${p2}`)):definedProp=codegen_1.nil;return patProps.length&&(definedProp=(0,codegen_1.or)(definedProp,...patProps.map(p2=>(0,codegen_1._)`${(0,code_1.usePattern)(cxt,p2)}.test(${key2})`))),(0,codegen_1.not)(definedProp)}function deleteAdditional(key2){gen.code((0,codegen_1._)`delete ${data}[${key2}]`)}function additionalPropertyCode(key2){if(opts.removeAdditional==="all"|| -opts.removeAdditional&&schema===!1){deleteAdditional(key2);return}if(schema===!1){cxt.setParams({additionalProperty:key2}),cxt.error(),allErrors||gen.break();return}if(typeof schema=="object"&&!(0,util_1.alwaysValidSchema)(it,schema)){const valid2=gen.name("valid");opts.removeAdditional==="failing"?(applyAdditionalSchema(key2,valid2,!1),gen.if((0,codegen_1.not)(valid2),()=>{cxt.reset(),deleteAdditional(key2)})):(applyAdditionalSchema(key2,valid2),allErrors||gen.if((0,codegen_1.not)(valid2),()=>gen. -break()))}}function applyAdditionalSchema(key2,valid2,errors2){const subschema2={keyword:"additionalProperties",dataProp:key2,dataPropType:util_1.Type.Str};errors2===!1&&Object.assign(subschema2,{compositeRule:!0,createErrors:!1,allErrors:!1}),cxt.subschema(subschema2,valid2)}}};return additionalProperties.default=def,additionalProperties}var properties$2={},hasRequiredProperties;function requireProperties(){if(hasRequiredProperties)return properties$2;hasRequiredProperties=1,Object.defineProperty( -properties$2,"__esModule",{value:!0});const validate_1=requireValidate(),code_1=requireCode(),util_1=requireUtil(),additionalProperties_1=requireAdditionalProperties(),def={keyword:"properties",type:"object",schemaType:"object",code(cxt){const{gen,schema,parentSchema,data,it}=cxt;it.opts.removeAdditional==="all"&&parentSchema.additionalProperties===void 0&&additionalProperties_1.default.code(new validate_1.KeywordCxt(it,additionalProperties_1.default,"additionalProperties"));const allProps=(0,code_1. -allSchemaProperties)(schema);for(const prop2 of allProps)it.definedProperties.add(prop2);it.opts.unevaluated&&allProps.length&&it.props!==!0&&(it.props=util_1.mergeEvaluated.props(gen,(0,util_1.toHash)(allProps),it.props));const properties2=allProps.filter(p2=>!(0,util_1.alwaysValidSchema)(it,schema[p2]));if(properties2.length===0)return;const valid2=gen.name("valid");for(const prop2 of properties2)hasDefault(prop2)?applyPropertySchema(prop2):(gen.if((0,code_1.propertyInData)(gen,data,prop2,it.opts. -ownProperties)),applyPropertySchema(prop2),it.allErrors||gen.else().var(valid2,!0),gen.endIf()),cxt.it.definedProperties.add(prop2),cxt.ok(valid2);function hasDefault(prop2){return it.opts.useDefaults&&!it.compositeRule&&schema[prop2].default!==void 0}function applyPropertySchema(prop2){cxt.subschema({keyword:"properties",schemaProp:prop2,dataProp:prop2},valid2)}}};return properties$2.default=def,properties$2}var patternProperties={},hasRequiredPatternProperties;function requirePatternProperties(){ +checkMissingProp)(cxt,deps,missing)})`),(0,code_1.reportMissingProp)(cxt,missing),gen.else())}}exports$1.validatePropertyDeps=validatePropertyDeps;function validateSchemaDeps(cxt,schemaDeps=cxt.schema){const{gen,data,keyword:keyword2,it}=cxt,valid2=gen.name("valid");for(const prop2 in schemaDeps)(0,util_1.alwaysValidSchema)(it,schemaDeps[prop2])||(gen.if((0,code_1.propertyInData)(gen,data,prop2,it.opts.ownProperties),()=>{const schCxt=cxt.subschema({keyword:keyword2,schemaProp:prop2},valid2);cxt. +mergeValidEvaluated(schCxt,valid2)},()=>gen.var(valid2,!0)),cxt.ok(valid2))}exports$1.validateSchemaDeps=validateSchemaDeps,exports$1.default=def})(dependencies)),dependencies}var propertyNames={},hasRequiredPropertyNames;function requirePropertyNames(){if(hasRequiredPropertyNames)return propertyNames;hasRequiredPropertyNames=1,Object.defineProperty(propertyNames,"__esModule",{value:!0});const codegen_1=requireCodegen(),util_1=requireUtil(),def={keyword:"propertyNames",type:"object",schemaType:[ +"object","boolean"],error:{message:"property name must be valid",params:({params})=>(0,codegen_1._)`{propertyName: ${params.propertyName}}`},code(cxt){const{gen,schema,data,it}=cxt;if((0,util_1.alwaysValidSchema)(it,schema))return;const valid2=gen.name("valid");gen.forIn("key",data,key2=>{cxt.setParams({propertyName:key2}),cxt.subschema({keyword:"propertyNames",data:key2,dataTypes:["string"],propertyName:key2,compositeRule:!0},valid2),gen.if((0,codegen_1.not)(valid2),()=>{cxt.error(!0),it.allErrors|| +gen.break()})}),cxt.ok(valid2)}};return propertyNames.default=def,propertyNames}var additionalProperties={},hasRequiredAdditionalProperties;function requireAdditionalProperties(){if(hasRequiredAdditionalProperties)return additionalProperties;hasRequiredAdditionalProperties=1,Object.defineProperty(additionalProperties,"__esModule",{value:!0});const code_1=requireCode(),codegen_1=requireCodegen(),names_1=requireNames(),util_1=requireUtil(),def={keyword:"additionalProperties",type:["object"],schemaType:[ +"boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params})=>(0,codegen_1._)`{additionalProperty: ${params.additionalProperty}}`},code(cxt){const{gen,schema,parentSchema,data,errsCount,it}=cxt;if(!errsCount)throw new Error("ajv implementation error");const{allErrors,opts}=it;if(it.props=!0,opts.removeAdditional!=="all"&&(0,util_1.alwaysValidSchema)(it,schema))return;const props=(0,code_1.allSchemaProperties)(parentSchema.properties), +patProps=(0,code_1.allSchemaProperties)(parentSchema.patternProperties);checkAdditionalProperties(),cxt.ok((0,codegen_1._)`${errsCount} === ${names_1.default.errors}`);function checkAdditionalProperties(){gen.forIn("key",data,key2=>{!props.length&&!patProps.length?additionalPropertyCode(key2):gen.if(isAdditional(key2),()=>additionalPropertyCode(key2))})}function isAdditional(key2){let definedProp;if(props.length>8){const propsSchema=(0,util_1.schemaRefOrVal)(it,parentSchema.properties,"propertie\ +s");definedProp=(0,code_1.isOwnProperty)(gen,propsSchema,key2)}else props.length?definedProp=(0,codegen_1.or)(...props.map(p2=>(0,codegen_1._)`${key2} === ${p2}`)):definedProp=codegen_1.nil;return patProps.length&&(definedProp=(0,codegen_1.or)(definedProp,...patProps.map(p2=>(0,codegen_1._)`${(0,code_1.usePattern)(cxt,p2)}.test(${key2})`))),(0,codegen_1.not)(definedProp)}function deleteAdditional(key2){gen.code((0,codegen_1._)`delete ${data}[${key2}]`)}function additionalPropertyCode(key2){if(opts. +removeAdditional==="all"||opts.removeAdditional&&schema===!1){deleteAdditional(key2);return}if(schema===!1){cxt.setParams({additionalProperty:key2}),cxt.error(),allErrors||gen.break();return}if(typeof schema=="object"&&!(0,util_1.alwaysValidSchema)(it,schema)){const valid2=gen.name("valid");opts.removeAdditional==="failing"?(applyAdditionalSchema(key2,valid2,!1),gen.if((0,codegen_1.not)(valid2),()=>{cxt.reset(),deleteAdditional(key2)})):(applyAdditionalSchema(key2,valid2),allErrors||gen.if((0,codegen_1. +not)(valid2),()=>gen.break()))}}function applyAdditionalSchema(key2,valid2,errors2){const subschema2={keyword:"additionalProperties",dataProp:key2,dataPropType:util_1.Type.Str};errors2===!1&&Object.assign(subschema2,{compositeRule:!0,createErrors:!1,allErrors:!1}),cxt.subschema(subschema2,valid2)}}};return additionalProperties.default=def,additionalProperties}var properties$2={},hasRequiredProperties;function requireProperties(){if(hasRequiredProperties)return properties$2;hasRequiredProperties= +1,Object.defineProperty(properties$2,"__esModule",{value:!0});const validate_1=requireValidate(),code_1=requireCode(),util_1=requireUtil(),additionalProperties_1=requireAdditionalProperties(),def={keyword:"properties",type:"object",schemaType:"object",code(cxt){const{gen,schema,parentSchema,data,it}=cxt;it.opts.removeAdditional==="all"&&parentSchema.additionalProperties===void 0&&additionalProperties_1.default.code(new validate_1.KeywordCxt(it,additionalProperties_1.default,"additionalProperties")); +const allProps=(0,code_1.allSchemaProperties)(schema);for(const prop2 of allProps)it.definedProperties.add(prop2);it.opts.unevaluated&&allProps.length&&it.props!==!0&&(it.props=util_1.mergeEvaluated.props(gen,(0,util_1.toHash)(allProps),it.props));const properties2=allProps.filter(p2=>!(0,util_1.alwaysValidSchema)(it,schema[p2]));if(properties2.length===0)return;const valid2=gen.name("valid");for(const prop2 of properties2)hasDefault(prop2)?applyPropertySchema(prop2):(gen.if((0,code_1.propertyInData)( +gen,data,prop2,it.opts.ownProperties)),applyPropertySchema(prop2),it.allErrors||gen.else().var(valid2,!0),gen.endIf()),cxt.it.definedProperties.add(prop2),cxt.ok(valid2);function hasDefault(prop2){return it.opts.useDefaults&&!it.compositeRule&&schema[prop2].default!==void 0}function applyPropertySchema(prop2){cxt.subschema({keyword:"properties",schemaProp:prop2,dataProp:prop2},valid2)}}};return properties$2.default=def,properties$2}var patternProperties={},hasRequiredPatternProperties;function requirePatternProperties(){ if(hasRequiredPatternProperties)return patternProperties;hasRequiredPatternProperties=1,Object.defineProperty(patternProperties,"__esModule",{value:!0});const code_1=requireCode(),codegen_1=requireCodegen(),util_1=requireUtil(),util_2=requireUtil(),def={keyword:"patternProperties",type:"object",schemaType:"object",code(cxt){const{gen,schema,data,parentSchema,it}=cxt,{opts}=it,patterns=(0,code_1.allSchemaProperties)(schema),alwaysValidPatterns=patterns.filter(p2=>(0,util_1.alwaysValidSchema)(it,schema[p2])); if(patterns.length===0||alwaysValidPatterns.length===patterns.length&&(!it.opts.unevaluated||it.props===!0))return;const checkProperties=opts.strictSchema&&!opts.allowMatchingProperties&&parentSchema.properties,valid2=gen.name("valid");it.props!==!0&&!(it.props instanceof codegen_1.Name)&&(it.props=(0,util_2.evaluatedPropsToName)(gen,it.props));const{props}=it;validatePatternProperties();function validatePatternProperties(){for(const pat of patterns)checkProperties&&checkMatchingProperties(pat), it.allErrors?validateProperties(pat):(gen.var(valid2,!0),validateProperties(pat),gen.if(valid2))}function checkMatchingProperties(pat){for(const prop2 in checkProperties)new RegExp(pat).test(prop2)&&(0,util_1.checkStrictMode)(it,`property ${prop2} matches pattern ${pat} (use allowMatchingProperties)`)}function validateProperties(pat){gen.forIn("key",data,key2=>{gen.if((0,codegen_1._)`${(0,code_1.usePattern)(cxt,pat)}.test(${key2})`,()=>{const alwaysValid=alwaysValidPatterns.includes(pat);alwaysValid|| @@ -4732,7 +4816,7 @@ RegExp?(0,codegen_1.regexpCode)(fmtDef):opts.code.formats?(0,codegen_1._)`${opts "async format in sync schema");return(0,codegen_1._)`await ${fmtRef}(${data})`}return typeof format2=="function"?(0,codegen_1._)`${fmtRef}(${data})`:(0,codegen_1._)`${fmtRef}.test(${data})`}}}};return format.default=def,format}var hasRequiredFormat;function requireFormat(){if(hasRequiredFormat)return format$1;hasRequiredFormat=1,Object.defineProperty(format$1,"__esModule",{value:!0});const format2=[requireFormat$1().default];return format$1.default=format2,format$1}var metadata={},hasRequiredMetadata; function requireMetadata(){return hasRequiredMetadata||(hasRequiredMetadata=1,Object.defineProperty(metadata,"__esModule",{value:!0}),metadata.contentVocabulary=metadata.metadataVocabulary=void 0,metadata.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],metadata.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]),metadata}var hasRequiredDraft7;function requireDraft7(){if(hasRequiredDraft7)return draft7;hasRequiredDraft7=1,Object. defineProperty(draft7,"__esModule",{value:!0});const core_1=requireCore(),validation_1=requireValidation(),applicator_1=requireApplicator(),format_1=requireFormat(),metadata_1=requireMetadata(),draft7Vocabularies=[core_1.default,validation_1.default,(0,applicator_1.default)(),format_1.default,metadata_1.metadataVocabulary,metadata_1.contentVocabulary];return draft7.default=draft7Vocabularies,draft7}var discriminator={},types$1={},hasRequiredTypes;function requireTypes(){if(hasRequiredTypes)return types$1; -hasRequiredTypes=1,Object.defineProperty(types$1,"__esModule",{value:!0}),types$1.DiscrError=void 0;var DiscrError;return function(DiscrError2){DiscrError2.Tag="tag",DiscrError2.Mapping="mapping"}(DiscrError||(types$1.DiscrError=DiscrError={})),types$1}var hasRequiredDiscriminator;function requireDiscriminator(){if(hasRequiredDiscriminator)return discriminator;hasRequiredDiscriminator=1,Object.defineProperty(discriminator,"__esModule",{value:!0});const codegen_1=requireCodegen(),types_1=requireTypes(), +hasRequiredTypes=1,Object.defineProperty(types$1,"__esModule",{value:!0}),types$1.DiscrError=void 0;var DiscrError;return(function(DiscrError2){DiscrError2.Tag="tag",DiscrError2.Mapping="mapping"})(DiscrError||(types$1.DiscrError=DiscrError={})),types$1}var hasRequiredDiscriminator;function requireDiscriminator(){if(hasRequiredDiscriminator)return discriminator;hasRequiredDiscriminator=1,Object.defineProperty(discriminator,"__esModule",{value:!0});const codegen_1=requireCodegen(),types_1=requireTypes(), compile_1=requireCompile(),ref_error_1=requireRef_error(),util_1=requireUtil(),def={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError,tagName}})=>discrError===types_1.DiscrError.Tag?`tag "${tagName}" must be string`:`value of tag "${tagName}" must be in oneOf`,params:({params:{discrError,tag,tagName}})=>(0,codegen_1._)`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`},code(cxt){const{gen,data,schema,parentSchema,it}=cxt,{oneOf:oneOf2}=parentSchema; if(!it.opts.discriminator)throw new Error("discriminator: requires discriminator option");const tagName=schema.propertyName;if(typeof tagName!="string")throw new Error("discriminator: requires propertyName");if(schema.mapping)throw new Error("discriminator: mapping is not supported");if(!oneOf2)throw new Error("discriminator: requires oneOf keyword");const valid2=gen.let("valid",!1),tag=gen.const("tag",(0,codegen_1._)`${data}${(0,codegen_1.getProperty)(tagName)}`);gen.if((0,codegen_1._)`typeof ${tag} == "string"`, ()=>validateMapping(),()=>cxt.error(!1,{discrError:types_1.DiscrError.Tag,tag,tagName})),cxt.ok(valid2);function validateMapping(){const mapping=getMapping();gen.if(!1);for(const tagValue in mapping)gen.elseIf((0,codegen_1._)`${tag} === ${tagValue}`),gen.assign(valid2,applyTagSchema(mapping[tagValue]));gen.else(),cxt.error(!1,{discrError:types_1.DiscrError.Mapping,tag,tagName}),gen.endIf()}function applyTagSchema(schemaProp){const _valid=gen.name("valid"),schCxt=cxt.subschema({keyword:"oneOf",schemaProp}, @@ -4744,108 +4828,108 @@ properties$1={$id:{type:"string",format:"uri-reference"},$schema:{type:"string", ger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{ $ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0}, type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},require$$3={$schema,$id,title,definitions,type,properties:properties$1,default:!0};var hasRequiredAjv; -function requireAjv(){return hasRequiredAjv||(hasRequiredAjv=1,function(module,exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.MissingRefError=exports.ValidationError=exports.CodeGen=exports.Name=exports.nil=exports.stringify=exports.str=exports._=exports.KeywordCxt=exports.Ajv=void 0;const core_1=requireCore$1(),draft7_1=requireDraft7(),discriminator_1=requireDiscriminator(),draft7MetaSchema=require$$3,META_SUPPORT_DATA=["/properties"],META_SCHEMA_ID="http://json-schema.\ -org/draft-07/schema";class Ajv2 extends core_1.default{_addVocabularies(){super._addVocabularies(),draft7_1.default.forEach(v=>this.addVocabulary(v)),this.opts.discriminator&&this.addKeyword(discriminator_1.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const metaSchema=this.opts.$data?this.$dataMetaSchema(draft7MetaSchema,META_SUPPORT_DATA):draft7MetaSchema;this.addMetaSchema(metaSchema,META_SCHEMA_ID,!1),this.refs["http://json-schema.org/schema"]=META_SCHEMA_ID}defaultMeta(){ -return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(META_SCHEMA_ID)?META_SCHEMA_ID:void 0)}}exports.Ajv=Ajv2,module.exports=exports=Ajv2,module.exports.Ajv=Ajv2,Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=Ajv2;var validate_1=requireValidate();Object.defineProperty(exports,"KeywordCxt",{enumerable:!0,get:function(){return validate_1.KeywordCxt}});var codegen_1=requireCodegen();Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return codegen_1. -_}}),Object.defineProperty(exports,"str",{enumerable:!0,get:function(){return codegen_1.str}}),Object.defineProperty(exports,"stringify",{enumerable:!0,get:function(){return codegen_1.stringify}}),Object.defineProperty(exports,"nil",{enumerable:!0,get:function(){return codegen_1.nil}}),Object.defineProperty(exports,"Name",{enumerable:!0,get:function(){return codegen_1.Name}}),Object.defineProperty(exports,"CodeGen",{enumerable:!0,get:function(){return codegen_1.CodeGen}});var validation_error_1=requireValidation_error(); -Object.defineProperty(exports,"ValidationError",{enumerable:!0,get:function(){return validation_error_1.default}});var ref_error_1=requireRef_error();Object.defineProperty(exports,"MissingRefError",{enumerable:!0,get:function(){return ref_error_1.default}})}(ajv,ajv.exports)),ajv.exports}var hasRequiredLimit;function requireLimit(){return hasRequiredLimit||(hasRequiredLimit=1,function(exports){Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatLimitDefinition=void 0;const ajv_1=requireAjv(), -codegen_1=requireCodegen(),ops=codegen_1.operators,KWDs={formatMaximum:{okStr:"<=",ok:ops.LTE,fail:ops.GT},formatMinimum:{okStr:">=",ok:ops.GTE,fail:ops.LT},formatExclusiveMaximum:{okStr:"<",ok:ops.LT,fail:ops.GTE},formatExclusiveMinimum:{okStr:">",ok:ops.GT,fail:ops.LTE}},error2={message:({keyword:keyword2,schemaCode})=>(0,codegen_1.str)`should be ${KWDs[keyword2].okStr} ${schemaCode}`,params:({keyword:keyword2,schemaCode})=>(0,codegen_1._)`{comparison: ${KWDs[keyword2].okStr}, limit: ${schemaCode}}`}; -exports.formatLimitDefinition={keyword:Object.keys(KWDs),type:"string",schemaType:"string",$data:!0,error:error2,code(cxt){const{gen,data,schemaCode,keyword:keyword2,it}=cxt,{opts,self:self2}=it;if(!opts.validateFormats)return;const fCxt=new ajv_1.KeywordCxt(it,self2.RULES.all.format.definition,"format");fCxt.$data?validate$DataFormat():validateFormat();function validate$DataFormat(){const fmts=gen.scopeValue("formats",{ref:self2.formats,code:opts.code.formats}),fmt=gen.const("fmt",(0,codegen_1. -_)`${fmts}[${fCxt.schemaCode}]`);cxt.fail$data((0,codegen_1.or)((0,codegen_1._)`typeof ${fmt} != "object"`,(0,codegen_1._)`${fmt} instanceof RegExp`,(0,codegen_1._)`typeof ${fmt}.compare != "function"`,compareCode(fmt)))}function validateFormat(){const format2=fCxt.schema,fmtDef=self2.formats[format2];if(!fmtDef||fmtDef===!0)return;if(typeof fmtDef!="object"||fmtDef instanceof RegExp||typeof fmtDef.compare!="function")throw new Error(`"${keyword2}": format "${format2}" does not define "compare" \ -function`);const fmt=gen.scopeValue("formats",{key:format2,ref:fmtDef,code:opts.code.formats?(0,codegen_1._)`${opts.code.formats}${(0,codegen_1.getProperty)(format2)}`:void 0});cxt.fail$data(compareCode(fmt))}function compareCode(fmt){return(0,codegen_1._)`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword2].fail} 0`}},dependencies:["format"]};const formatLimitPlugin=ajv2=>(ajv2.addKeyword(exports.formatLimitDefinition),ajv2);exports.default=formatLimitPlugin}(limit)),limit}var hasRequiredDist; -function requireDist(){return hasRequiredDist||(hasRequiredDist=1,function(module,exports){Object.defineProperty(exports,"__esModule",{value:!0});const formats_1=requireFormats(),limit_1=requireLimit(),codegen_1=requireCodegen(),fullName=new codegen_1.Name("fullFormats"),fastName=new codegen_1.Name("fastFormats"),formatsPlugin=(ajv2,opts={keywords:!0})=>{if(Array.isArray(opts))return addFormats(ajv2,opts,formats_1.fullFormats,fullName),ajv2;const[formats2,exportName]=opts.mode==="fast"?[formats_1. -fastFormats,fastName]:[formats_1.fullFormats,fullName],list2=opts.formats||formats_1.formatNames;return addFormats(ajv2,list2,formats2,exportName),opts.keywords&&(0,limit_1.default)(ajv2),ajv2};formatsPlugin.get=(name,mode="full")=>{const f=(mode==="fast"?formats_1.fastFormats:formats_1.fullFormats)[name];if(!f)throw new Error(`Unknown format "${name}"`);return f};function addFormats(ajv2,list2,fs,exportName){var _a2,_b;(_a2=(_b=ajv2.opts.code).formats)!==null&&_a2!==void 0||(_b.formats=(0,codegen_1. -_)`require("ajv-formats/dist/formats").${exportName}`);for(const f of list2)ajv2.addFormat(f,fs[f])}module.exports=exports=formatsPlugin,Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=formatsPlugin}(dist,dist.exports)),dist.exports}var distExports=requireDist();const _addFormats=getDefaultExportFromCjs(distExports);function createDefaultAjvInstance(){const ajv2=new Ajv({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return _addFormats(ajv2),ajv2}class AjvJsonSchemaValidator{constructor(ajv2){ -this._ajv=ajv2??createDefaultAjvInstance()}getValidator(schema){const ajvValidator="$id"in schema&&typeof schema.$id=="string"?this._ajv.getSchema(schema.$id)??this._ajv.compile(schema):this._ajv.compile(schema);return input=>ajvValidator(input)?{valid:!0,data:input,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(ajvValidator.errors)}}}class ExperimentalClientTasks{constructor(_client){this._client=_client}async*callToolStream(params,resultSchema=CallToolResultSchema,options){ -const clientInternal=this._client,optionsWithTask={...options,task:options?.task??(clientInternal.isToolTask(params.name)?{}:void 0)},stream=clientInternal.requestStream({method:"tools/call",params},resultSchema,optionsWithTask),validator=clientInternal.getToolOutputValidator(params.name);for await(const message of stream){if(message.type==="result"&&validator){const result=message.result;if(!result.structuredContent&&!result.isError){yield{type:"error",error:new McpError(ErrorCode.InvalidRequest, -`Tool ${params.name} has an output schema but did not return structured content`)};return}if(result.structuredContent)try{const validationResult=validator(result.structuredContent);if(!validationResult.valid){yield{type:"error",error:new McpError(ErrorCode.InvalidParams,`Structured content does not match the tool's output schema: ${validationResult.errorMessage}`)};return}}catch(error2){if(error2 instanceof McpError){yield{type:"error",error:error2};return}yield{type:"error",error:new McpError(ErrorCode. -InvalidParams,`Failed to validate structured content: ${error2 instanceof Error?error2.message:String(error2)}`)};return}}yield message}}async getTask(taskId,options){return this._client.getTask({taskId},options)}async getTaskResult(taskId,resultSchema,options){return this._client.getTaskResult({taskId},resultSchema,options)}async listTasks(cursor,options){return this._client.listTasks(cursor?{cursor}:void 0,options)}async cancelTask(taskId,options){return this._client.cancelTask({taskId},options)}requestStream(request,resultSchema,options){ -return this._client.requestStream(request,resultSchema,options)}}function assertToolsCallTaskCapability(requests,method,entityName){if(!requests)throw new Error(`${entityName} does not support task creation (required for ${method})`);switch(method){case"tools/call":if(!requests.tools?.call)throw new Error(`${entityName} does not support task creation for tools/call (required for ${method})`);break}}function assertClientRequestTaskCapability(requests,method,entityName){if(!requests)throw new Error( -`${entityName} does not support task creation (required for ${method})`);switch(method){case"sampling/createMessage":if(!requests.sampling?.createMessage)throw new Error(`${entityName} does not support task creation for sampling/createMessage (required for ${method})`);break;case"elicitation/create":if(!requests.elicitation?.create)throw new Error(`${entityName} does not support task creation for elicitation/create (required for ${method})`);break}}function applyElicitationDefaults(schema,data){ -if(!(!schema||data===null||typeof data!="object")){if(schema.type==="object"&&schema.properties&&typeof schema.properties=="object"){const obj=data,props=schema.properties;for(const key2 of Object.keys(props)){const propSchema=props[key2];obj[key2]===void 0&&Object.prototype.hasOwnProperty.call(propSchema,"default")&&(obj[key2]=propSchema.default),obj[key2]!==void 0&&applyElicitationDefaults(propSchema,obj[key2])}}if(Array.isArray(schema.anyOf))for(const sub2 of schema.anyOf)typeof sub2!="boolea\ -n"&&applyElicitationDefaults(sub2,data);if(Array.isArray(schema.oneOf))for(const sub2 of schema.oneOf)typeof sub2!="boolean"&&applyElicitationDefaults(sub2,data)}}function getSupportedElicitationModes(capabilities){if(!capabilities)return{supportsFormMode:!1,supportsUrlMode:!1};const hasFormCapability=capabilities.form!==void 0,hasUrlCapability=capabilities.url!==void 0;return{supportsFormMode:hasFormCapability||!hasFormCapability&&!hasUrlCapability,supportsUrlMode:hasUrlCapability}}class Client extends Protocol{constructor(_clientInfo,options){ -super(options),this._clientInfo=_clientInfo,this._cachedToolOutputValidators=new Map,this._cachedKnownTaskTools=new Set,this._cachedRequiredTaskTools=new Set,this._listChangedDebounceTimers=new Map,this._capabilities=options?.capabilities??{},this._jsonSchemaValidator=options?.jsonSchemaValidator??new AjvJsonSchemaValidator,options?.listChanged&&(this._pendingListChangedConfig=options.listChanged)}_setupListChangedHandlers(config2){config2.tools&&this._serverCapabilities?.tools?.listChanged&&this. -_setupListChangedHandler("tools",ToolListChangedNotificationSchema,config2.tools,async()=>(await this.listTools()).tools),config2.prompts&&this._serverCapabilities?.prompts?.listChanged&&this._setupListChangedHandler("prompts",PromptListChangedNotificationSchema,config2.prompts,async()=>(await this.listPrompts()).prompts),config2.resources&&this._serverCapabilities?.resources?.listChanged&&this._setupListChangedHandler("resources",ResourceListChangedNotificationSchema,config2.resources,async()=>(await this. -listResources()).resources)}get experimental(){return this._experimental||(this._experimental={tasks:new ExperimentalClientTasks(this)}),this._experimental}registerCapabilities(capabilities){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=mergeCapabilities(this._capabilities,capabilities)}setRequestHandler(requestSchema,handler){const methodSchema=getObjectShape(requestSchema)?.method;if(!methodSchema)throw new Error("Schema is m\ -issing a method literal");let methodValue;if(isZ4Schema(methodSchema)){const v4Schema=methodSchema;methodValue=v4Schema._zod?.def?.value??v4Schema.value}else{const v3Schema=methodSchema;methodValue=v3Schema._def?.value??v3Schema.value}if(typeof methodValue!="string")throw new Error("Schema method literal must be a string");const method=methodValue;if(method==="elicitation/create"){const wrappedHandler=async(request,extra)=>{const validatedRequest=safeParse$1(ElicitRequestSchema,request);if(!validatedRequest. -success){const errorMessage=validatedRequest.error instanceof Error?validatedRequest.error.message:String(validatedRequest.error);throw new McpError(ErrorCode.InvalidParams,`Invalid elicitation request: ${errorMessage}`)}const{params}=validatedRequest.data;params.mode=params.mode??"form";const{supportsFormMode,supportsUrlMode}=getSupportedElicitationModes(this._capabilities.elicitation);if(params.mode==="form"&&!supportsFormMode)throw new McpError(ErrorCode.InvalidParams,"Client does not support\ - form-mode elicitation requests");if(params.mode==="url"&&!supportsUrlMode)throw new McpError(ErrorCode.InvalidParams,"Client does not support URL-mode elicitation requests");const result=await Promise.resolve(handler(request,extra));if(params.task){const taskValidationResult=safeParse$1(CreateTaskResultSchema,result);if(!taskValidationResult.success){const errorMessage=taskValidationResult.error instanceof Error?taskValidationResult.error.message:String(taskValidationResult.error);throw new McpError( -ErrorCode.InvalidParams,`Invalid task creation result: ${errorMessage}`)}return taskValidationResult.data}const validationResult=safeParse$1(ElicitResultSchema,result);if(!validationResult.success){const errorMessage=validationResult.error instanceof Error?validationResult.error.message:String(validationResult.error);throw new McpError(ErrorCode.InvalidParams,`Invalid elicitation result: ${errorMessage}`)}const validatedResult=validationResult.data,requestedSchema=params.mode==="form"?params.requestedSchema: -void 0;if(params.mode==="form"&&validatedResult.action==="accept"&&validatedResult.content&&requestedSchema&&this._capabilities.elicitation?.form?.applyDefaults)try{applyElicitationDefaults(requestedSchema,validatedResult.content)}catch{}return validatedResult};return super.setRequestHandler(requestSchema,wrappedHandler)}if(method==="sampling/createMessage"){const wrappedHandler=async(request,extra)=>{const validatedRequest=safeParse$1(CreateMessageRequestSchema,request);if(!validatedRequest.success){ -const errorMessage=validatedRequest.error instanceof Error?validatedRequest.error.message:String(validatedRequest.error);throw new McpError(ErrorCode.InvalidParams,`Invalid sampling request: ${errorMessage}`)}const{params}=validatedRequest.data,result=await Promise.resolve(handler(request,extra));if(params.task){const taskValidationResult=safeParse$1(CreateTaskResultSchema,result);if(!taskValidationResult.success){const errorMessage=taskValidationResult.error instanceof Error?taskValidationResult. -error.message:String(taskValidationResult.error);throw new McpError(ErrorCode.InvalidParams,`Invalid task creation result: ${errorMessage}`)}return taskValidationResult.data}const resultSchema=params.tools||params.toolChoice?CreateMessageResultWithToolsSchema:CreateMessageResultSchema,validationResult=safeParse$1(resultSchema,result);if(!validationResult.success){const errorMessage=validationResult.error instanceof Error?validationResult.error.message:String(validationResult.error);throw new McpError( -ErrorCode.InvalidParams,`Invalid sampling result: ${errorMessage}`)}return validationResult.data};return super.setRequestHandler(requestSchema,wrappedHandler)}return super.setRequestHandler(requestSchema,handler)}assertCapability(capability,method){if(!this._serverCapabilities?.[capability])throw new Error(`Server does not support ${capability} (required for ${method})`)}async connect(transport,options){if(await super.connect(transport),transport.sessionId===void 0)try{const result=await this.request( -{method:"initialize",params:{protocolVersion:LATEST_PROTOCOL_VERSION,capabilities:this._capabilities,clientInfo:this._clientInfo}},InitializeResultSchema,options);if(result===void 0)throw new Error(`Server sent invalid initialize result: ${result}`);if(!SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion))throw new Error(`Server's protocol version is not supported: ${result.protocolVersion}`);this._serverCapabilities=result.capabilities,this._serverVersion=result.serverInfo,transport.setProtocolVersion&& -transport.setProtocolVersion(result.protocolVersion),this._instructions=result.instructions,await this.notification({method:"notifications/initialized"}),this._pendingListChangedConfig&&(this._setupListChangedHandlers(this._pendingListChangedConfig),this._pendingListChangedConfig=void 0)}catch(error2){throw this.close(),error2}}getServerCapabilities(){return this._serverCapabilities}getServerVersion(){return this._serverVersion}getInstructions(){return this._instructions}assertCapabilityForMethod(method){ -switch(method){case"logging/setLevel":if(!this._serverCapabilities?.logging)throw new Error(`Server does not support logging (required for ${method})`);break;case"prompts/get":case"prompts/list":if(!this._serverCapabilities?.prompts)throw new Error(`Server does not support prompts (required for ${method})`);break;case"resources/list":case"resources/templates/list":case"resources/read":case"resources/subscribe":case"resources/unsubscribe":if(!this._serverCapabilities?.resources)throw new Error(`S\ -erver does not support resources (required for ${method})`);if(method==="resources/subscribe"&&!this._serverCapabilities.resources.subscribe)throw new Error(`Server does not support resource subscriptions (required for ${method})`);break;case"tools/call":case"tools/list":if(!this._serverCapabilities?.tools)throw new Error(`Server does not support tools (required for ${method})`);break;case"completion/complete":if(!this._serverCapabilities?.completions)throw new Error(`Server does not support com\ -pletions (required for ${method})`);break}}assertNotificationCapability(method){switch(method){case"notifications/roots/list_changed":if(!this._capabilities.roots?.listChanged)throw new Error(`Client does not support roots list changed notifications (required for ${method})`);break}}assertRequestHandlerCapability(method){if(this._capabilities)switch(method){case"sampling/createMessage":if(!this._capabilities.sampling)throw new Error(`Client does not support sampling capability (required for ${method}\ -)`);break;case"elicitation/create":if(!this._capabilities.elicitation)throw new Error(`Client does not support elicitation capability (required for ${method})`);break;case"roots/list":if(!this._capabilities.roots)throw new Error(`Client does not support roots capability (required for ${method})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Client does not support tasks capability (required for ${method})`);break}}assertTaskCapability(method){ -assertToolsCallTaskCapability(this._serverCapabilities?.tasks?.requests,method,"Server")}assertTaskHandlerCapability(method){this._capabilities&&assertClientRequestTaskCapability(this._capabilities.tasks?.requests,method,"Client")}async ping(options){return this.request({method:"ping"},EmptyResultSchema,options)}async complete(params,options){return this.request({method:"completion/complete",params},CompleteResultSchema,options)}async setLoggingLevel(level,options){return this.request({method:"l\ -ogging/setLevel",params:{level}},EmptyResultSchema,options)}async getPrompt(params,options){return this.request({method:"prompts/get",params},GetPromptResultSchema,options)}async listPrompts(params,options){return this.request({method:"prompts/list",params},ListPromptsResultSchema,options)}async listResources(params,options){return this.request({method:"resources/list",params},ListResourcesResultSchema,options)}async listResourceTemplates(params,options){return this.request({method:"resources/te\ -mplates/list",params},ListResourceTemplatesResultSchema,options)}async readResource(params,options){return this.request({method:"resources/read",params},ReadResourceResultSchema,options)}async subscribeResource(params,options){return this.request({method:"resources/subscribe",params},EmptyResultSchema,options)}async unsubscribeResource(params,options){return this.request({method:"resources/unsubscribe",params},EmptyResultSchema,options)}async callTool(params,resultSchema=CallToolResultSchema,options){ -if(this.isToolTaskRequired(params.name))throw new McpError(ErrorCode.InvalidRequest,`Tool "${params.name}" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`);const result=await this.request({method:"tools/call",params},resultSchema,options),validator=this.getToolOutputValidator(params.name);if(validator){if(!result.structuredContent&&!result.isError)throw new McpError(ErrorCode.InvalidRequest,`Tool ${params.name} has an output schema but did not return struc\ -tured content`);if(result.structuredContent)try{const validationResult=validator(result.structuredContent);if(!validationResult.valid)throw new McpError(ErrorCode.InvalidParams,`Structured content does not match the tool's output schema: ${validationResult.errorMessage}`)}catch(error2){throw error2 instanceof McpError?error2:new McpError(ErrorCode.InvalidParams,`Failed to validate structured content: ${error2 instanceof Error?error2.message:String(error2)}`)}}return result}isToolTask(toolName){return this. -_serverCapabilities?.tasks?.requests?.tools?.call?this._cachedKnownTaskTools.has(toolName):!1}isToolTaskRequired(toolName){return this._cachedRequiredTaskTools.has(toolName)}cacheToolMetadata(tools){this._cachedToolOutputValidators.clear(),this._cachedKnownTaskTools.clear(),this._cachedRequiredTaskTools.clear();for(const tool of tools){if(tool.outputSchema){const toolValidator=this._jsonSchemaValidator.getValidator(tool.outputSchema);this._cachedToolOutputValidators.set(tool.name,toolValidator)} -const taskSupport=tool.execution?.taskSupport;(taskSupport==="required"||taskSupport==="optional")&&this._cachedKnownTaskTools.add(tool.name),taskSupport==="required"&&this._cachedRequiredTaskTools.add(tool.name)}}getToolOutputValidator(toolName){return this._cachedToolOutputValidators.get(toolName)}async listTools(params,options){const result=await this.request({method:"tools/list",params},ListToolsResultSchema,options);return this.cacheToolMetadata(result.tools),result}_setupListChangedHandler(listType,notificationSchema,options,fetcher){ -const parseResult=ListChangedOptionsBaseSchema.safeParse(options);if(!parseResult.success)throw new Error(`Invalid ${listType} listChanged options: ${parseResult.error.message}`);if(typeof options.onChanged!="function")throw new Error(`Invalid ${listType} listChanged options: onChanged must be a function`);const{autoRefresh,debounceMs}=parseResult.data,{onChanged}=options,refresh=async()=>{if(!autoRefresh){onChanged(null,null);return}try{const items2=await fetcher();onChanged(null,items2)}catch(e){ -const error2=e instanceof Error?e:new Error(String(e));onChanged(error2,null)}},handler=()=>{if(debounceMs){const existingTimer=this._listChangedDebounceTimers.get(listType);existingTimer&&clearTimeout(existingTimer);const timer=setTimeout(refresh,debounceMs);this._listChangedDebounceTimers.set(listType,timer)}else refresh()};this.setNotificationHandler(notificationSchema,handler)}async sendRootsListChanged(){return this.notification({method:"notifications/roots/list_changed"})}}function normalizeHeaders(headers){ -return headers?headers instanceof Headers?Object.fromEntries(headers.entries()):Array.isArray(headers)?Object.fromEntries(headers):{...headers}:{}}function createFetchWithInit(baseFetch=fetch,baseInit){return baseInit?async(url2,init2)=>{const mergedInit={...baseInit,...init2,headers:init2?.headers?{...normalizeHeaders(baseInit.headers),...normalizeHeaders(init2.headers)}:baseInit.headers};return baseFetch(url2,mergedInit)}:baseFetch}let crypto$1;crypto$1=globalThis.crypto;async function getRandomValues(size2){ -return(await crypto$1).getRandomValues(new Uint8Array(size2))}async function random(size2){const mask="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",evenDistCutoff=Math.pow(2,8)-Math.pow(2,8)%mask.length;let result="";for(;result.length<size2;){const randomBytes=await getRandomValues(size2-result.length);for(const randomByte of randomBytes)randomByte<evenDistCutoff&&(result+=mask[randomByte%mask.length])}return result}async function generateVerifier(length){return await random( -length)}async function generateChallenge(code_verifier){const buffer=await(await crypto$1).subtle.digest("SHA-256",new TextEncoder().encode(code_verifier));return btoa(String.fromCharCode(...new Uint8Array(buffer))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function pkceChallenge(length){if(length||(length=43),length<43||length>128)throw`Expected a length between 43 and 128. Received ${length}.`;const verifier=await generateVerifier(length),challenge=await generateChallenge(verifier); -return{code_verifier:verifier,code_challenge:challenge}}const SafeUrlSchema=url().superRefine((val,ctx)=>{if(!URL.canParse(val))return ctx.addIssue({code:ZodIssueCode.custom,message:"URL must be parseable",fatal:!0}),NEVER}).refine(url2=>{const u=new URL(url2);return u.protocol!=="javascript:"&&u.protocol!=="data:"&&u.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),OAuthProtectedResourceMetadataSchema=looseObject({resource:string$2().url(),authorization_servers:array( -SafeUrlSchema).optional(),jwks_uri:string$2().url().optional(),scopes_supported:array(string$2()).optional(),bearer_methods_supported:array(string$2()).optional(),resource_signing_alg_values_supported:array(string$2()).optional(),resource_name:string$2().optional(),resource_documentation:string$2().optional(),resource_policy_uri:string$2().url().optional(),resource_tos_uri:string$2().url().optional(),tls_client_certificate_bound_access_tokens:boolean$1().optional(),authorization_details_types_supported:array( -string$2()).optional(),dpop_signing_alg_values_supported:array(string$2()).optional(),dpop_bound_access_tokens_required:boolean$1().optional()}),OAuthMetadataSchema=looseObject({issuer:string$2(),authorization_endpoint:SafeUrlSchema,token_endpoint:SafeUrlSchema,registration_endpoint:SafeUrlSchema.optional(),scopes_supported:array(string$2()).optional(),response_types_supported:array(string$2()),response_modes_supported:array(string$2()).optional(),grant_types_supported:array(string$2()).optional(), -token_endpoint_auth_methods_supported:array(string$2()).optional(),token_endpoint_auth_signing_alg_values_supported:array(string$2()).optional(),service_documentation:SafeUrlSchema.optional(),revocation_endpoint:SafeUrlSchema.optional(),revocation_endpoint_auth_methods_supported:array(string$2()).optional(),revocation_endpoint_auth_signing_alg_values_supported:array(string$2()).optional(),introspection_endpoint:string$2().optional(),introspection_endpoint_auth_methods_supported:array(string$2()). -optional(),introspection_endpoint_auth_signing_alg_values_supported:array(string$2()).optional(),code_challenge_methods_supported:array(string$2()).optional(),client_id_metadata_document_supported:boolean$1().optional()}),OpenIdProviderMetadataSchema=looseObject({issuer:string$2(),authorization_endpoint:SafeUrlSchema,token_endpoint:SafeUrlSchema,userinfo_endpoint:SafeUrlSchema.optional(),jwks_uri:SafeUrlSchema,registration_endpoint:SafeUrlSchema.optional(),scopes_supported:array(string$2()).optional(), -response_types_supported:array(string$2()),response_modes_supported:array(string$2()).optional(),grant_types_supported:array(string$2()).optional(),acr_values_supported:array(string$2()).optional(),subject_types_supported:array(string$2()),id_token_signing_alg_values_supported:array(string$2()),id_token_encryption_alg_values_supported:array(string$2()).optional(),id_token_encryption_enc_values_supported:array(string$2()).optional(),userinfo_signing_alg_values_supported:array(string$2()).optional(), -userinfo_encryption_alg_values_supported:array(string$2()).optional(),userinfo_encryption_enc_values_supported:array(string$2()).optional(),request_object_signing_alg_values_supported:array(string$2()).optional(),request_object_encryption_alg_values_supported:array(string$2()).optional(),request_object_encryption_enc_values_supported:array(string$2()).optional(),token_endpoint_auth_methods_supported:array(string$2()).optional(),token_endpoint_auth_signing_alg_values_supported:array(string$2()).optional(), -display_values_supported:array(string$2()).optional(),claim_types_supported:array(string$2()).optional(),claims_supported:array(string$2()).optional(),service_documentation:string$2().optional(),claims_locales_supported:array(string$2()).optional(),ui_locales_supported:array(string$2()).optional(),claims_parameter_supported:boolean$1().optional(),request_parameter_supported:boolean$1().optional(),request_uri_parameter_supported:boolean$1().optional(),require_request_uri_registration:boolean$1(). -optional(),op_policy_uri:SafeUrlSchema.optional(),op_tos_uri:SafeUrlSchema.optional(),client_id_metadata_document_supported:boolean$1().optional()}),OpenIdProviderDiscoveryMetadataSchema=object({...OpenIdProviderMetadataSchema.shape,...OAuthMetadataSchema.pick({code_challenge_methods_supported:!0}).shape}),OAuthTokensSchema=object({access_token:string$2(),id_token:string$2().optional(),token_type:string$2(),expires_in:number$1().optional(),scope:string$2().optional(),refresh_token:string$2().optional()}). -strip(),OAuthErrorResponseSchema=object({error:string$2(),error_description:string$2().optional(),error_uri:string$2().optional()}),OptionalSafeUrlSchema=SafeUrlSchema.optional().or(literal("").transform(()=>{})),OAuthClientMetadataSchema=object({redirect_uris:array(SafeUrlSchema),token_endpoint_auth_method:string$2().optional(),grant_types:array(string$2()).optional(),response_types:array(string$2()).optional(),client_name:string$2().optional(),client_uri:SafeUrlSchema.optional(),logo_uri:OptionalSafeUrlSchema, -scope:string$2().optional(),contacts:array(string$2()).optional(),tos_uri:OptionalSafeUrlSchema,policy_uri:string$2().optional(),jwks_uri:SafeUrlSchema.optional(),jwks:any().optional(),software_id:string$2().optional(),software_version:string$2().optional(),software_statement:string$2().optional()}).strip(),OAuthClientInformationSchema=object({client_id:string$2(),client_secret:string$2().optional(),client_id_issued_at:number$2().optional(),client_secret_expires_at:number$2().optional()}).strip(), -OAuthClientInformationFullSchema=OAuthClientMetadataSchema.merge(OAuthClientInformationSchema);object({error:string$2(),error_description:string$2().optional()}).strip();object({token:string$2(),token_type_hint:string$2().optional()}).strip();function resourceUrlFromServerUrl(url2){const resourceURL=typeof url2=="string"?new URL(url2):new URL(url2.href);return resourceURL.hash="",resourceURL}function checkResourceAllowed({requestedResource,configuredResource}){const requested=typeof requestedResource== -"string"?new URL(requestedResource):new URL(requestedResource.href),configured=typeof configuredResource=="string"?new URL(configuredResource):new URL(configuredResource.href);if(requested.origin!==configured.origin||requested.pathname.length<configured.pathname.length)return!1;const requestedPath=requested.pathname.endsWith("/")?requested.pathname:requested.pathname+"/",configuredPath=configured.pathname.endsWith("/")?configured.pathname:configured.pathname+"/";return requestedPath.startsWith(configuredPath)} -class OAuthError extends Error{constructor(message,errorUri){super(message),this.errorUri=errorUri,this.name=this.constructor.name}toResponseObject(){const response={error:this.errorCode,error_description:this.message};return this.errorUri&&(response.error_uri=this.errorUri),response}get errorCode(){return this.constructor.errorCode}}class InvalidRequestError extends OAuthError{}InvalidRequestError.errorCode="invalid_request";class InvalidClientError extends OAuthError{}InvalidClientError.errorCode= -"invalid_client";class InvalidGrantError extends OAuthError{}InvalidGrantError.errorCode="invalid_grant";class UnauthorizedClientError extends OAuthError{}UnauthorizedClientError.errorCode="unauthorized_client";class UnsupportedGrantTypeError extends OAuthError{}UnsupportedGrantTypeError.errorCode="unsupported_grant_type";class InvalidScopeError extends OAuthError{}InvalidScopeError.errorCode="invalid_scope";class AccessDeniedError extends OAuthError{}AccessDeniedError.errorCode="access_denied"; -class ServerError extends OAuthError{}ServerError.errorCode="server_error";class TemporarilyUnavailableError extends OAuthError{}TemporarilyUnavailableError.errorCode="temporarily_unavailable";class UnsupportedResponseTypeError extends OAuthError{}UnsupportedResponseTypeError.errorCode="unsupported_response_type";class UnsupportedTokenTypeError extends OAuthError{}UnsupportedTokenTypeError.errorCode="unsupported_token_type";class InvalidTokenError extends OAuthError{}InvalidTokenError.errorCode= -"invalid_token";class MethodNotAllowedError extends OAuthError{}MethodNotAllowedError.errorCode="method_not_allowed";class TooManyRequestsError extends OAuthError{}TooManyRequestsError.errorCode="too_many_requests";class InvalidClientMetadataError extends OAuthError{}InvalidClientMetadataError.errorCode="invalid_client_metadata";class InsufficientScopeError extends OAuthError{}InsufficientScopeError.errorCode="insufficient_scope";class InvalidTargetError extends OAuthError{}InvalidTargetError.errorCode= -"invalid_target";const OAUTH_ERRORS={[InvalidRequestError.errorCode]:InvalidRequestError,[InvalidClientError.errorCode]:InvalidClientError,[InvalidGrantError.errorCode]:InvalidGrantError,[UnauthorizedClientError.errorCode]:UnauthorizedClientError,[UnsupportedGrantTypeError.errorCode]:UnsupportedGrantTypeError,[InvalidScopeError.errorCode]:InvalidScopeError,[AccessDeniedError.errorCode]:AccessDeniedError,[ServerError.errorCode]:ServerError,[TemporarilyUnavailableError.errorCode]:TemporarilyUnavailableError, -[UnsupportedResponseTypeError.errorCode]:UnsupportedResponseTypeError,[UnsupportedTokenTypeError.errorCode]:UnsupportedTokenTypeError,[InvalidTokenError.errorCode]:InvalidTokenError,[MethodNotAllowedError.errorCode]:MethodNotAllowedError,[TooManyRequestsError.errorCode]:TooManyRequestsError,[InvalidClientMetadataError.errorCode]:InvalidClientMetadataError,[InsufficientScopeError.errorCode]:InsufficientScopeError,[InvalidTargetError.errorCode]:InvalidTargetError};class UnauthorizedError extends Error{constructor(message){ -super(message??"Unauthorized")}}function isClientAuthMethod(method){return["client_secret_basic","client_secret_post","none"].includes(method)}const AUTHORIZATION_CODE_RESPONSE_TYPE="code",AUTHORIZATION_CODE_CHALLENGE_METHOD="S256";function selectClientAuthMethod(clientInformation,supportedMethods){const hasClientSecret=clientInformation.client_secret!==void 0;return supportedMethods.length===0?hasClientSecret?"client_secret_post":"none":"token_endpoint_auth_method"in clientInformation&&clientInformation. -token_endpoint_auth_method&&isClientAuthMethod(clientInformation.token_endpoint_auth_method)&&supportedMethods.includes(clientInformation.token_endpoint_auth_method)?clientInformation.token_endpoint_auth_method:hasClientSecret&&supportedMethods.includes("client_secret_basic")?"client_secret_basic":hasClientSecret&&supportedMethods.includes("client_secret_post")?"client_secret_post":supportedMethods.includes("none")?"none":hasClientSecret?"client_secret_post":"none"}function applyClientAuthentication(method,clientInformation,headers,params){ -const{client_id,client_secret}=clientInformation;switch(method){case"client_secret_basic":applyBasicAuth(client_id,client_secret,headers);return;case"client_secret_post":applyPostAuth(client_id,client_secret,params);return;case"none":applyPublicAuth(client_id,params);return;default:throw new Error(`Unsupported client authentication method: ${method}`)}}function applyBasicAuth(clientId,clientSecret,headers){if(!clientSecret)throw new Error("client_secret_basic authentication requires a client_sec\ -ret");const credentials=btoa(`${clientId}:${clientSecret}`);headers.set("Authorization",`Basic ${credentials}`)}function applyPostAuth(clientId,clientSecret,params){params.set("client_id",clientId),clientSecret&¶ms.set("client_secret",clientSecret)}function applyPublicAuth(clientId,params){params.set("client_id",clientId)}async function parseErrorResponse(input){const statusCode=input instanceof Response?input.status:void 0,body2=input instanceof Response?await input.text():input;try{const result=OAuthErrorResponseSchema. -parse(JSON.parse(body2)),{error:error2,error_description,error_uri}=result,errorClass=OAUTH_ERRORS[error2]||ServerError;return new errorClass(error_description||"",error_uri)}catch(error2){const errorMessage=`${statusCode?`HTTP ${statusCode}: `:""}Invalid OAuth error response: ${error2}. Raw body: ${body2}`;return new ServerError(errorMessage)}}async function auth(provider,options){try{return await authInternal(provider,options)}catch(error2){if(error2 instanceof InvalidClientError||error2 instanceof -UnauthorizedClientError)return await provider.invalidateCredentials?.("all"),await authInternal(provider,options);if(error2 instanceof InvalidGrantError)return await provider.invalidateCredentials?.("tokens"),await authInternal(provider,options);throw error2}}async function authInternal(provider,{serverUrl,authorizationCode,scope:scope2,resourceMetadataUrl,fetchFn}){let resourceMetadata,authorizationServerUrl;try{resourceMetadata=await discoverOAuthProtectedResourceMetadata(serverUrl,{resourceMetadataUrl}, -fetchFn),resourceMetadata.authorization_servers&&resourceMetadata.authorization_servers.length>0&&(authorizationServerUrl=resourceMetadata.authorization_servers[0])}catch{}authorizationServerUrl||(authorizationServerUrl=new URL("/",serverUrl));const resource=await selectResourceURL(serverUrl,provider,resourceMetadata),metadata2=await discoverAuthorizationServerMetadata(authorizationServerUrl,{fetchFn});let clientInformation=await Promise.resolve(provider.clientInformation());if(!clientInformation){ -if(authorizationCode!==void 0)throw new Error("Existing OAuth client information is required when exchanging an authorization code");const supportsUrlBasedClientId=metadata2?.client_id_metadata_document_supported===!0,clientMetadataUrl=provider.clientMetadataUrl;if(clientMetadataUrl&&!isHttpsUrl(clientMetadataUrl))throw new InvalidClientMetadataError(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${clientMetadataUrl}`);if(supportsUrlBasedClientId&&clientMetadataUrl)clientInformation= -{client_id:clientMetadataUrl},await provider.saveClientInformation?.(clientInformation);else{if(!provider.saveClientInformation)throw new Error("OAuth client information must be saveable for dynamic registration");const fullInformation=await registerClient(authorizationServerUrl,{metadata:metadata2,clientMetadata:provider.clientMetadata,fetchFn});await provider.saveClientInformation(fullInformation),clientInformation=fullInformation}}const nonInteractiveFlow=!provider.redirectUrl;if(authorizationCode!== -void 0||nonInteractiveFlow){const tokens2=await fetchToken(provider,authorizationServerUrl,{metadata:metadata2,resource,authorizationCode,fetchFn});return await provider.saveTokens(tokens2),"AUTHORIZED"}const tokens=await provider.tokens();if(tokens?.refresh_token)try{const newTokens=await refreshAuthorization(authorizationServerUrl,{metadata:metadata2,clientInformation,refreshToken:tokens.refresh_token,resource,addClientAuthentication:provider.addClientAuthentication,fetchFn});return await provider. -saveTokens(newTokens),"AUTHORIZED"}catch(error2){if(!(!(error2 instanceof OAuthError)||error2 instanceof ServerError))throw error2}const state2=provider.state?await provider.state():void 0,{authorizationUrl,codeVerifier}=await startAuthorization(authorizationServerUrl,{metadata:metadata2,clientInformation,state:state2,redirectUrl:provider.redirectUrl,scope:scope2||resourceMetadata?.scopes_supported?.join(" ")||provider.clientMetadata.scope,resource});return await provider.saveCodeVerifier(codeVerifier), -await provider.redirectToAuthorization(authorizationUrl),"REDIRECT"}function isHttpsUrl(value){if(!value)return!1;try{const url2=new URL(value);return url2.protocol==="https:"&&url2.pathname!=="/"}catch{return!1}}async function selectResourceURL(serverUrl,provider,resourceMetadata){const defaultResource=resourceUrlFromServerUrl(serverUrl);if(provider.validateResourceURL)return await provider.validateResourceURL(defaultResource,resourceMetadata?.resource);if(resourceMetadata){if(!checkResourceAllowed( -{requestedResource:defaultResource,configuredResource:resourceMetadata.resource}))throw new Error(`Protected resource ${resourceMetadata.resource} does not match expected ${defaultResource} (or origin)`);return new URL(resourceMetadata.resource)}}function extractWWWAuthenticateParams(res){const authenticateHeader=res.headers.get("WWW-Authenticate");if(!authenticateHeader)return{};const[type2,scheme2]=authenticateHeader.split(" ");if(type2.toLowerCase()!=="bearer"||!scheme2)return{};const resourceMetadataMatch=extractFieldFromWwwAuth( -res,"resource_metadata")||void 0;let resourceMetadataUrl;if(resourceMetadataMatch)try{resourceMetadataUrl=new URL(resourceMetadataMatch)}catch{}const scope2=extractFieldFromWwwAuth(res,"scope")||void 0,error2=extractFieldFromWwwAuth(res,"error")||void 0;return{resourceMetadataUrl,scope:scope2,error:error2}}function extractFieldFromWwwAuth(response,fieldName){const wwwAuthHeader=response.headers.get("WWW-Authenticate");if(!wwwAuthHeader)return null;const pattern2=new RegExp(`${fieldName}=(?:"([^"\ -]+)"|([^\\s,]+))`),match=wwwAuthHeader.match(pattern2);return match?match[1]||match[2]:null}async function discoverOAuthProtectedResourceMetadata(serverUrl,opts,fetchFn=fetch){const response=await discoverMetadataWithFallback(serverUrl,"oauth-protected-resource",fetchFn,{protocolVersion:opts?.protocolVersion,metadataUrl:opts?.resourceMetadataUrl});if(!response||response.status===404)throw await response?.body?.cancel(),new Error("Resource server does not implement OAuth 2.0 Protected Resource Me\ -tadata.");if(!response.ok)throw await response.body?.cancel(),new Error(`HTTP ${response.status} trying to load well-known OAuth protected resource metadata.`);return OAuthProtectedResourceMetadataSchema.parse(await response.json())}async function fetchWithCorsRetry(url2,headers,fetchFn=fetch){try{return await fetchFn(url2,{headers})}catch(error2){if(error2 instanceof TypeError)return headers?fetchWithCorsRetry(url2,void 0,fetchFn):void 0;throw error2}}function buildWellKnownPath(wellKnownPrefix,pathname="",options={}){ -return pathname.endsWith("/")&&(pathname=pathname.slice(0,-1)),options.prependPathname?`${pathname}/.well-known/${wellKnownPrefix}`:`/.well-known/${wellKnownPrefix}${pathname}`}async function tryMetadataDiscovery(url2,protocolVersion,fetchFn=fetch){return await fetchWithCorsRetry(url2,{"MCP-Protocol-Version":protocolVersion},fetchFn)}function shouldAttemptFallback(response,pathname){return!response||response.status>=400&&response.status<500&&pathname!=="/"}async function discoverMetadataWithFallback(serverUrl,wellKnownType,fetchFn,opts){ -const issuer=new URL(serverUrl),protocolVersion=opts?.protocolVersion??LATEST_PROTOCOL_VERSION;let url2;if(opts?.metadataUrl)url2=new URL(opts.metadataUrl);else{const wellKnownPath=buildWellKnownPath(wellKnownType,issuer.pathname);url2=new URL(wellKnownPath,opts?.metadataServerUrl??issuer),url2.search=issuer.search}let response=await tryMetadataDiscovery(url2,protocolVersion,fetchFn);if(!opts?.metadataUrl&&shouldAttemptFallback(response,issuer.pathname)){const rootUrl=new URL(`/.well-known/${wellKnownType}`, -issuer);response=await tryMetadataDiscovery(rootUrl,protocolVersion,fetchFn)}return response}function buildDiscoveryUrls(authorizationServerUrl){const url2=typeof authorizationServerUrl=="string"?new URL(authorizationServerUrl):authorizationServerUrl,hasPath=url2.pathname!=="/",urlsToTry=[];if(!hasPath)return urlsToTry.push({url:new URL("/.well-known/oauth-authorization-server",url2.origin),type:"oauth"}),urlsToTry.push({url:new URL("/.well-known/openid-configuration",url2.origin),type:"oidc"}), -urlsToTry;let pathname=url2.pathname;return pathname.endsWith("/")&&(pathname=pathname.slice(0,-1)),urlsToTry.push({url:new URL(`/.well-known/oauth-authorization-server${pathname}`,url2.origin),type:"oauth"}),urlsToTry.push({url:new URL(`/.well-known/openid-configuration${pathname}`,url2.origin),type:"oidc"}),urlsToTry.push({url:new URL(`${pathname}/.well-known/openid-configuration`,url2.origin),type:"oidc"}),urlsToTry}async function discoverAuthorizationServerMetadata(authorizationServerUrl,{fetchFn=fetch, -protocolVersion=LATEST_PROTOCOL_VERSION}={}){const headers={"MCP-Protocol-Version":protocolVersion,Accept:"application/json"},urlsToTry=buildDiscoveryUrls(authorizationServerUrl);for(const{url:endpointUrl,type:type2}of urlsToTry){const response=await fetchWithCorsRetry(endpointUrl,headers,fetchFn);if(response){if(!response.ok){if(await response.body?.cancel(),response.status>=400&&response.status<500)continue;throw new Error(`HTTP ${response.status} trying to load ${type2==="oauth"?"OAuth":"Open\ -ID provider"} metadata from ${endpointUrl}`)}return type2==="oauth"?OAuthMetadataSchema.parse(await response.json()):OpenIdProviderDiscoveryMetadataSchema.parse(await response.json())}}}async function startAuthorization(authorizationServerUrl,{metadata:metadata2,clientInformation,redirectUrl,scope:scope2,state:state2,resource}){let authorizationUrl;if(metadata2){if(authorizationUrl=new URL(metadata2.authorization_endpoint),!metadata2.response_types_supported.includes(AUTHORIZATION_CODE_RESPONSE_TYPE)) -throw new Error(`Incompatible auth server: does not support response type ${AUTHORIZATION_CODE_RESPONSE_TYPE}`);if(metadata2.code_challenge_methods_supported&&!metadata2.code_challenge_methods_supported.includes(AUTHORIZATION_CODE_CHALLENGE_METHOD))throw new Error(`Incompatible auth server: does not support code challenge method ${AUTHORIZATION_CODE_CHALLENGE_METHOD}`)}else authorizationUrl=new URL("/authorize",authorizationServerUrl);const challenge=await pkceChallenge(),codeVerifier=challenge. -code_verifier,codeChallenge=challenge.code_challenge;return authorizationUrl.searchParams.set("response_type",AUTHORIZATION_CODE_RESPONSE_TYPE),authorizationUrl.searchParams.set("client_id",clientInformation.client_id),authorizationUrl.searchParams.set("code_challenge",codeChallenge),authorizationUrl.searchParams.set("code_challenge_method",AUTHORIZATION_CODE_CHALLENGE_METHOD),authorizationUrl.searchParams.set("redirect_uri",String(redirectUrl)),state2&&authorizationUrl.searchParams.set("state", -state2),scope2&&authorizationUrl.searchParams.set("scope",scope2),scope2?.includes("offline_access")&&authorizationUrl.searchParams.append("prompt","consent"),resource&&authorizationUrl.searchParams.set("resource",resource.href),{authorizationUrl,codeVerifier}}function prepareAuthorizationCodeRequest(authorizationCode,codeVerifier,redirectUri){return new URLSearchParams({grant_type:"authorization_code",code:authorizationCode,code_verifier:codeVerifier,redirect_uri:String(redirectUri)})}async function executeTokenRequest(authorizationServerUrl,{ -metadata:metadata2,tokenRequestParams,clientInformation,addClientAuthentication,resource,fetchFn}){const tokenUrl=metadata2?.token_endpoint?new URL(metadata2.token_endpoint):new URL("/token",authorizationServerUrl),headers=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});if(resource&&tokenRequestParams.set("resource",resource.href),addClientAuthentication)await addClientAuthentication(headers,tokenRequestParams,tokenUrl,metadata2);else if(clientInformation){ -const supportedMethods=metadata2?.token_endpoint_auth_methods_supported??[],authMethod=selectClientAuthMethod(clientInformation,supportedMethods);applyClientAuthentication(authMethod,clientInformation,headers,tokenRequestParams)}const response=await(fetchFn??fetch)(tokenUrl,{method:"POST",headers,body:tokenRequestParams});if(!response.ok)throw await parseErrorResponse(response);return OAuthTokensSchema.parse(await response.json())}async function refreshAuthorization(authorizationServerUrl,{metadata:metadata2, -clientInformation,refreshToken,resource,addClientAuthentication,fetchFn}){const tokenRequestParams=new URLSearchParams({grant_type:"refresh_token",refresh_token:refreshToken}),tokens=await executeTokenRequest(authorizationServerUrl,{metadata:metadata2,tokenRequestParams,clientInformation,addClientAuthentication,resource,fetchFn});return{refresh_token:refreshToken,...tokens}}async function fetchToken(provider,authorizationServerUrl,{metadata:metadata2,resource,authorizationCode,fetchFn}={}){const scope2=provider. -clientMetadata.scope;let tokenRequestParams;if(provider.prepareTokenRequest&&(tokenRequestParams=await provider.prepareTokenRequest(scope2)),!tokenRequestParams){if(!authorizationCode)throw new Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!provider.redirectUrl)throw new Error("redirectUrl is required for authorization_code flow");const codeVerifier=await provider.codeVerifier();tokenRequestParams=prepareAuthorizationCodeRequest(authorizationCode,codeVerifier, -provider.redirectUrl)}const clientInformation=await provider.clientInformation();return executeTokenRequest(authorizationServerUrl,{metadata:metadata2,tokenRequestParams,clientInformation:clientInformation??void 0,addClientAuthentication:provider.addClientAuthentication,resource,fetchFn})}async function registerClient(authorizationServerUrl,{metadata:metadata2,clientMetadata,fetchFn}){let registrationUrl;if(metadata2){if(!metadata2.registration_endpoint)throw new Error("Incompatible auth server:\ - does not support dynamic client registration");registrationUrl=new URL(metadata2.registration_endpoint)}else registrationUrl=new URL("/register",authorizationServerUrl);const response=await(fetchFn??fetch)(registrationUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(clientMetadata)});if(!response.ok)throw await parseErrorResponse(response);return OAuthClientInformationFullSchema.parse(await response.json())}let ParseError$1=class extends Error{constructor(message,options){ -super(message),this.name="ParseError",this.type=options.type,this.field=options.field,this.value=options.value,this.line=options.line}};function noop(_arg){}function createParser$1(callbacks){if(typeof callbacks=="function")throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");const{onEvent=noop,onError=noop,onRetry=noop,onComment}=callbacks;let incompleteLine="",isFirstChunk=!0,id2,data="",eventType="";function feed(newChunk){const chunk=isFirstChunk? -newChunk.replace(/^\xEF\xBB\xBF/,""):newChunk,[complete,incomplete]=splitLines(`${incompleteLine}${chunk}`);for(const line of complete)parseLine(line);incompleteLine=incomplete,isFirstChunk=!1}function parseLine(line){if(line===""){dispatchEvent2();return}if(line.startsWith(":")){onComment&&onComment(line.slice(line.startsWith(": ")?2:1));return}const fieldSeparatorIndex=line.indexOf(":");if(fieldSeparatorIndex!==-1){const field=line.slice(0,fieldSeparatorIndex),offset2=line[fieldSeparatorIndex+ -1]===" "?2:1,value=line.slice(fieldSeparatorIndex+offset2);processField(field,value,line);return}processField(line,"",line)}function processField(field,value,line){switch(field){case"event":eventType=value;break;case"data":data=`${data}${value} +function requireAjv(){return hasRequiredAjv||(hasRequiredAjv=1,(function(module,exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.MissingRefError=exports$1.ValidationError=exports$1.CodeGen=exports$1.Name=exports$1.nil=exports$1.stringify=exports$1.str=exports$1._=exports$1.KeywordCxt=exports$1.Ajv=void 0;const core_1=requireCore$1(),draft7_1=requireDraft7(),discriminator_1=requireDiscriminator(),draft7MetaSchema=require$$3,META_SUPPORT_DATA=["/properties"],META_SCHEMA_ID="\ +http://json-schema.org/draft-07/schema";class Ajv2 extends core_1.default{_addVocabularies(){super._addVocabularies(),draft7_1.default.forEach(v=>this.addVocabulary(v)),this.opts.discriminator&&this.addKeyword(discriminator_1.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const metaSchema=this.opts.$data?this.$dataMetaSchema(draft7MetaSchema,META_SUPPORT_DATA):draft7MetaSchema;this.addMetaSchema(metaSchema,META_SCHEMA_ID,!1),this.refs["http://json-schema\ +.org/schema"]=META_SCHEMA_ID}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(META_SCHEMA_ID)?META_SCHEMA_ID:void 0)}}exports$1.Ajv=Ajv2,module.exports=exports$1=Ajv2,module.exports.Ajv=Ajv2,Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.default=Ajv2;var validate_1=requireValidate();Object.defineProperty(exports$1,"KeywordCxt",{enumerable:!0,get:function(){return validate_1.KeywordCxt}});var codegen_1=requireCodegen();Object.defineProperty(exports$1, +"_",{enumerable:!0,get:function(){return codegen_1._}}),Object.defineProperty(exports$1,"str",{enumerable:!0,get:function(){return codegen_1.str}}),Object.defineProperty(exports$1,"stringify",{enumerable:!0,get:function(){return codegen_1.stringify}}),Object.defineProperty(exports$1,"nil",{enumerable:!0,get:function(){return codegen_1.nil}}),Object.defineProperty(exports$1,"Name",{enumerable:!0,get:function(){return codegen_1.Name}}),Object.defineProperty(exports$1,"CodeGen",{enumerable:!0,get:function(){ +return codegen_1.CodeGen}});var validation_error_1=requireValidation_error();Object.defineProperty(exports$1,"ValidationError",{enumerable:!0,get:function(){return validation_error_1.default}});var ref_error_1=requireRef_error();Object.defineProperty(exports$1,"MissingRefError",{enumerable:!0,get:function(){return ref_error_1.default}})})(ajv,ajv.exports)),ajv.exports}var hasRequiredLimit;function requireLimit(){return hasRequiredLimit||(hasRequiredLimit=1,(function(exports$1){Object.defineProperty( +exports$1,"__esModule",{value:!0}),exports$1.formatLimitDefinition=void 0;const ajv_1=requireAjv(),codegen_1=requireCodegen(),ops=codegen_1.operators,KWDs={formatMaximum:{okStr:"<=",ok:ops.LTE,fail:ops.GT},formatMinimum:{okStr:">=",ok:ops.GTE,fail:ops.LT},formatExclusiveMaximum:{okStr:"<",ok:ops.LT,fail:ops.GTE},formatExclusiveMinimum:{okStr:">",ok:ops.GT,fail:ops.LTE}},error2={message:({keyword:keyword2,schemaCode})=>(0,codegen_1.str)`should be ${KWDs[keyword2].okStr} ${schemaCode}`,params:({keyword:keyword2, +schemaCode})=>(0,codegen_1._)`{comparison: ${KWDs[keyword2].okStr}, limit: ${schemaCode}}`};exports$1.formatLimitDefinition={keyword:Object.keys(KWDs),type:"string",schemaType:"string",$data:!0,error:error2,code(cxt){const{gen,data,schemaCode,keyword:keyword2,it}=cxt,{opts,self:self2}=it;if(!opts.validateFormats)return;const fCxt=new ajv_1.KeywordCxt(it,self2.RULES.all.format.definition,"format");fCxt.$data?validate$DataFormat():validateFormat();function validate$DataFormat(){const fmts=gen.scopeValue( +"formats",{ref:self2.formats,code:opts.code.formats}),fmt=gen.const("fmt",(0,codegen_1._)`${fmts}[${fCxt.schemaCode}]`);cxt.fail$data((0,codegen_1.or)((0,codegen_1._)`typeof ${fmt} != "object"`,(0,codegen_1._)`${fmt} instanceof RegExp`,(0,codegen_1._)`typeof ${fmt}.compare != "function"`,compareCode(fmt)))}function validateFormat(){const format2=fCxt.schema,fmtDef=self2.formats[format2];if(!fmtDef||fmtDef===!0)return;if(typeof fmtDef!="object"||fmtDef instanceof RegExp||typeof fmtDef.compare!="f\ +unction")throw new Error(`"${keyword2}": format "${format2}" does not define "compare" function`);const fmt=gen.scopeValue("formats",{key:format2,ref:fmtDef,code:opts.code.formats?(0,codegen_1._)`${opts.code.formats}${(0,codegen_1.getProperty)(format2)}`:void 0});cxt.fail$data(compareCode(fmt))}function compareCode(fmt){return(0,codegen_1._)`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword2].fail} 0`}},dependencies:["format"]};const formatLimitPlugin=ajv2=>(ajv2.addKeyword(exports$1.formatLimitDefinition), +ajv2);exports$1.default=formatLimitPlugin})(limit)),limit}var hasRequiredDist;function requireDist(){return hasRequiredDist||(hasRequiredDist=1,(function(module,exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0});const formats_1=requireFormats(),limit_1=requireLimit(),codegen_1=requireCodegen(),fullName=new codegen_1.Name("fullFormats"),fastName=new codegen_1.Name("fastFormats"),formatsPlugin=(ajv2,opts={keywords:!0})=>{if(Array.isArray(opts))return addFormats(ajv2,opts,formats_1. +fullFormats,fullName),ajv2;const[formats2,exportName]=opts.mode==="fast"?[formats_1.fastFormats,fastName]:[formats_1.fullFormats,fullName],list2=opts.formats||formats_1.formatNames;return addFormats(ajv2,list2,formats2,exportName),opts.keywords&&(0,limit_1.default)(ajv2),ajv2};formatsPlugin.get=(name,mode="full")=>{const f=(mode==="fast"?formats_1.fastFormats:formats_1.fullFormats)[name];if(!f)throw new Error(`Unknown format "${name}"`);return f};function addFormats(ajv2,list2,fs,exportName){var _a2, +_b;(_a2=(_b=ajv2.opts.code).formats)!==null&&_a2!==void 0||(_b.formats=(0,codegen_1._)`require("ajv-formats/dist/formats").${exportName}`);for(const f of list2)ajv2.addFormat(f,fs[f])}module.exports=exports$1=formatsPlugin,Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.default=formatsPlugin})(dist,dist.exports)),dist.exports}var distExports=requireDist();const _addFormats=getDefaultExportFromCjs(distExports);function createDefaultAjvInstance(){const ajv2=new Ajv({strict:!1,validateFormats:!0, +validateSchema:!1,allErrors:!0});return _addFormats(ajv2),ajv2}class AjvJsonSchemaValidator{constructor(ajv2){this._ajv=ajv2??createDefaultAjvInstance()}getValidator(schema){const ajvValidator="$id"in schema&&typeof schema.$id=="string"?this._ajv.getSchema(schema.$id)??this._ajv.compile(schema):this._ajv.compile(schema);return input=>ajvValidator(input)?{valid:!0,data:input,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(ajvValidator.errors)}}}class ExperimentalClientTasks{constructor(_client){ +this._client=_client}async*callToolStream(params,resultSchema=CallToolResultSchema,options){const clientInternal=this._client,optionsWithTask={...options,task:options?.task??(clientInternal.isToolTask(params.name)?{}:void 0)},stream=clientInternal.requestStream({method:"tools/call",params},resultSchema,optionsWithTask),validator=clientInternal.getToolOutputValidator(params.name);for await(const message of stream){if(message.type==="result"&&validator){const result=message.result;if(!result.structuredContent&& +!result.isError){yield{type:"error",error:new McpError(ErrorCode.InvalidRequest,`Tool ${params.name} has an output schema but did not return structured content`)};return}if(result.structuredContent)try{const validationResult=validator(result.structuredContent);if(!validationResult.valid){yield{type:"error",error:new McpError(ErrorCode.InvalidParams,`Structured content does not match the tool's output schema: ${validationResult.errorMessage}`)};return}}catch(error2){if(error2 instanceof McpError){ +yield{type:"error",error:error2};return}yield{type:"error",error:new McpError(ErrorCode.InvalidParams,`Failed to validate structured content: ${error2 instanceof Error?error2.message:String(error2)}`)};return}}yield message}}async getTask(taskId,options){return this._client.getTask({taskId},options)}async getTaskResult(taskId,resultSchema,options){return this._client.getTaskResult({taskId},resultSchema,options)}async listTasks(cursor,options){return this._client.listTasks(cursor?{cursor}:void 0, +options)}async cancelTask(taskId,options){return this._client.cancelTask({taskId},options)}requestStream(request,resultSchema,options){return this._client.requestStream(request,resultSchema,options)}}function assertToolsCallTaskCapability(requests,method,entityName){if(!requests)throw new Error(`${entityName} does not support task creation (required for ${method})`);switch(method){case"tools/call":if(!requests.tools?.call)throw new Error(`${entityName} does not support task creation for tools/ca\ +ll (required for ${method})`);break}}function assertClientRequestTaskCapability(requests,method,entityName){if(!requests)throw new Error(`${entityName} does not support task creation (required for ${method})`);switch(method){case"sampling/createMessage":if(!requests.sampling?.createMessage)throw new Error(`${entityName} does not support task creation for sampling/createMessage (required for ${method})`);break;case"elicitation/create":if(!requests.elicitation?.create)throw new Error(`${entityName}\ + does not support task creation for elicitation/create (required for ${method})`);break}}function applyElicitationDefaults(schema,data){if(!(!schema||data===null||typeof data!="object")){if(schema.type==="object"&&schema.properties&&typeof schema.properties=="object"){const obj=data,props=schema.properties;for(const key2 of Object.keys(props)){const propSchema=props[key2];obj[key2]===void 0&&Object.prototype.hasOwnProperty.call(propSchema,"default")&&(obj[key2]=propSchema.default),obj[key2]!==void 0&& +applyElicitationDefaults(propSchema,obj[key2])}}if(Array.isArray(schema.anyOf))for(const sub2 of schema.anyOf)typeof sub2!="boolean"&&applyElicitationDefaults(sub2,data);if(Array.isArray(schema.oneOf))for(const sub2 of schema.oneOf)typeof sub2!="boolean"&&applyElicitationDefaults(sub2,data)}}function getSupportedElicitationModes(capabilities){if(!capabilities)return{supportsFormMode:!1,supportsUrlMode:!1};const hasFormCapability=capabilities.form!==void 0,hasUrlCapability=capabilities.url!==void 0; +return{supportsFormMode:hasFormCapability||!hasFormCapability&&!hasUrlCapability,supportsUrlMode:hasUrlCapability}}class Client extends Protocol{constructor(_clientInfo,options){super(options),this._clientInfo=_clientInfo,this._cachedToolOutputValidators=new Map,this._cachedKnownTaskTools=new Set,this._cachedRequiredTaskTools=new Set,this._listChangedDebounceTimers=new Map,this._capabilities=options?.capabilities??{},this._jsonSchemaValidator=options?.jsonSchemaValidator??new AjvJsonSchemaValidator, +options?.listChanged&&(this._pendingListChangedConfig=options.listChanged)}_setupListChangedHandlers(config2){config2.tools&&this._serverCapabilities?.tools?.listChanged&&this._setupListChangedHandler("tools",ToolListChangedNotificationSchema,config2.tools,async()=>(await this.listTools()).tools),config2.prompts&&this._serverCapabilities?.prompts?.listChanged&&this._setupListChangedHandler("prompts",PromptListChangedNotificationSchema,config2.prompts,async()=>(await this.listPrompts()).prompts), +config2.resources&&this._serverCapabilities?.resources?.listChanged&&this._setupListChangedHandler("resources",ResourceListChangedNotificationSchema,config2.resources,async()=>(await this.listResources()).resources)}get experimental(){return this._experimental||(this._experimental={tasks:new ExperimentalClientTasks(this)}),this._experimental}registerCapabilities(capabilities){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=mergeCapabilities( +this._capabilities,capabilities)}setRequestHandler(requestSchema,handler){const methodSchema=getObjectShape(requestSchema)?.method;if(!methodSchema)throw new Error("Schema is missing a method literal");let methodValue;if(isZ4Schema(methodSchema)){const v4Schema=methodSchema;methodValue=v4Schema._zod?.def?.value??v4Schema.value}else{const v3Schema=methodSchema;methodValue=v3Schema._def?.value??v3Schema.value}if(typeof methodValue!="string")throw new Error("Schema method literal must be a string"); +const method=methodValue;if(method==="elicitation/create"){const wrappedHandler=async(request,extra)=>{const validatedRequest=safeParse$1(ElicitRequestSchema,request);if(!validatedRequest.success){const errorMessage=validatedRequest.error instanceof Error?validatedRequest.error.message:String(validatedRequest.error);throw new McpError(ErrorCode.InvalidParams,`Invalid elicitation request: ${errorMessage}`)}const{params}=validatedRequest.data;params.mode=params.mode??"form";const{supportsFormMode, +supportsUrlMode}=getSupportedElicitationModes(this._capabilities.elicitation);if(params.mode==="form"&&!supportsFormMode)throw new McpError(ErrorCode.InvalidParams,"Client does not support form-mode elicitation requests");if(params.mode==="url"&&!supportsUrlMode)throw new McpError(ErrorCode.InvalidParams,"Client does not support URL-mode elicitation requests");const result=await Promise.resolve(handler(request,extra));if(params.task){const taskValidationResult=safeParse$1(CreateTaskResultSchema, +result);if(!taskValidationResult.success){const errorMessage=taskValidationResult.error instanceof Error?taskValidationResult.error.message:String(taskValidationResult.error);throw new McpError(ErrorCode.InvalidParams,`Invalid task creation result: ${errorMessage}`)}return taskValidationResult.data}const validationResult=safeParse$1(ElicitResultSchema,result);if(!validationResult.success){const errorMessage=validationResult.error instanceof Error?validationResult.error.message:String(validationResult. +error);throw new McpError(ErrorCode.InvalidParams,`Invalid elicitation result: ${errorMessage}`)}const validatedResult=validationResult.data,requestedSchema=params.mode==="form"?params.requestedSchema:void 0;if(params.mode==="form"&&validatedResult.action==="accept"&&validatedResult.content&&requestedSchema&&this._capabilities.elicitation?.form?.applyDefaults)try{applyElicitationDefaults(requestedSchema,validatedResult.content)}catch{}return validatedResult};return super.setRequestHandler(requestSchema, +wrappedHandler)}if(method==="sampling/createMessage"){const wrappedHandler=async(request,extra)=>{const validatedRequest=safeParse$1(CreateMessageRequestSchema,request);if(!validatedRequest.success){const errorMessage=validatedRequest.error instanceof Error?validatedRequest.error.message:String(validatedRequest.error);throw new McpError(ErrorCode.InvalidParams,`Invalid sampling request: ${errorMessage}`)}const{params}=validatedRequest.data,result=await Promise.resolve(handler(request,extra));if(params. +task){const taskValidationResult=safeParse$1(CreateTaskResultSchema,result);if(!taskValidationResult.success){const errorMessage=taskValidationResult.error instanceof Error?taskValidationResult.error.message:String(taskValidationResult.error);throw new McpError(ErrorCode.InvalidParams,`Invalid task creation result: ${errorMessage}`)}return taskValidationResult.data}const resultSchema=params.tools||params.toolChoice?CreateMessageResultWithToolsSchema:CreateMessageResultSchema,validationResult=safeParse$1( +resultSchema,result);if(!validationResult.success){const errorMessage=validationResult.error instanceof Error?validationResult.error.message:String(validationResult.error);throw new McpError(ErrorCode.InvalidParams,`Invalid sampling result: ${errorMessage}`)}return validationResult.data};return super.setRequestHandler(requestSchema,wrappedHandler)}return super.setRequestHandler(requestSchema,handler)}assertCapability(capability,method){if(!this._serverCapabilities?.[capability])throw new Error(`\ +Server does not support ${capability} (required for ${method})`)}async connect(transport,options){if(await super.connect(transport),transport.sessionId===void 0)try{const result=await this.request({method:"initialize",params:{protocolVersion:LATEST_PROTOCOL_VERSION,capabilities:this._capabilities,clientInfo:this._clientInfo}},InitializeResultSchema,options);if(result===void 0)throw new Error(`Server sent invalid initialize result: ${result}`);if(!SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion)) +throw new Error(`Server's protocol version is not supported: ${result.protocolVersion}`);this._serverCapabilities=result.capabilities,this._serverVersion=result.serverInfo,transport.setProtocolVersion&&transport.setProtocolVersion(result.protocolVersion),this._instructions=result.instructions,await this.notification({method:"notifications/initialized"}),this._pendingListChangedConfig&&(this._setupListChangedHandlers(this._pendingListChangedConfig),this._pendingListChangedConfig=void 0)}catch(error2){ +throw this.close(),error2}}getServerCapabilities(){return this._serverCapabilities}getServerVersion(){return this._serverVersion}getInstructions(){return this._instructions}assertCapabilityForMethod(method){switch(method){case"logging/setLevel":if(!this._serverCapabilities?.logging)throw new Error(`Server does not support logging (required for ${method})`);break;case"prompts/get":case"prompts/list":if(!this._serverCapabilities?.prompts)throw new Error(`Server does not support prompts (required f\ +or ${method})`);break;case"resources/list":case"resources/templates/list":case"resources/read":case"resources/subscribe":case"resources/unsubscribe":if(!this._serverCapabilities?.resources)throw new Error(`Server does not support resources (required for ${method})`);if(method==="resources/subscribe"&&!this._serverCapabilities.resources.subscribe)throw new Error(`Server does not support resource subscriptions (required for ${method})`);break;case"tools/call":case"tools/list":if(!this._serverCapabilities?. +tools)throw new Error(`Server does not support tools (required for ${method})`);break;case"completion/complete":if(!this._serverCapabilities?.completions)throw new Error(`Server does not support completions (required for ${method})`);break}}assertNotificationCapability(method){switch(method){case"notifications/roots/list_changed":if(!this._capabilities.roots?.listChanged)throw new Error(`Client does not support roots list changed notifications (required for ${method})`);break}}assertRequestHandlerCapability(method){ +if(this._capabilities)switch(method){case"sampling/createMessage":if(!this._capabilities.sampling)throw new Error(`Client does not support sampling capability (required for ${method})`);break;case"elicitation/create":if(!this._capabilities.elicitation)throw new Error(`Client does not support elicitation capability (required for ${method})`);break;case"roots/list":if(!this._capabilities.roots)throw new Error(`Client does not support roots capability (required for ${method})`);break;case"tasks/get":case"\ +tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Client does not support tasks capability (required for ${method})`);break}}assertTaskCapability(method){assertToolsCallTaskCapability(this._serverCapabilities?.tasks?.requests,method,"Server")}assertTaskHandlerCapability(method){this._capabilities&&assertClientRequestTaskCapability(this._capabilities.tasks?.requests,method,"Client")}async ping(options){return this.request({method:"ping"},EmptyResultSchema, +options)}async complete(params,options){return this.request({method:"completion/complete",params},CompleteResultSchema,options)}async setLoggingLevel(level,options){return this.request({method:"logging/setLevel",params:{level}},EmptyResultSchema,options)}async getPrompt(params,options){return this.request({method:"prompts/get",params},GetPromptResultSchema,options)}async listPrompts(params,options){return this.request({method:"prompts/list",params},ListPromptsResultSchema,options)}async listResources(params,options){ +return this.request({method:"resources/list",params},ListResourcesResultSchema,options)}async listResourceTemplates(params,options){return this.request({method:"resources/templates/list",params},ListResourceTemplatesResultSchema,options)}async readResource(params,options){return this.request({method:"resources/read",params},ReadResourceResultSchema,options)}async subscribeResource(params,options){return this.request({method:"resources/subscribe",params},EmptyResultSchema,options)}async unsubscribeResource(params,options){ +return this.request({method:"resources/unsubscribe",params},EmptyResultSchema,options)}async callTool(params,resultSchema=CallToolResultSchema,options){if(this.isToolTaskRequired(params.name))throw new McpError(ErrorCode.InvalidRequest,`Tool "${params.name}" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`);const result=await this.request({method:"tools/call",params},resultSchema,options),validator=this.getToolOutputValidator(params.name);if(validator){if(!result. +structuredContent&&!result.isError)throw new McpError(ErrorCode.InvalidRequest,`Tool ${params.name} has an output schema but did not return structured content`);if(result.structuredContent)try{const validationResult=validator(result.structuredContent);if(!validationResult.valid)throw new McpError(ErrorCode.InvalidParams,`Structured content does not match the tool's output schema: ${validationResult.errorMessage}`)}catch(error2){throw error2 instanceof McpError?error2:new McpError(ErrorCode.InvalidParams, +`Failed to validate structured content: ${error2 instanceof Error?error2.message:String(error2)}`)}}return result}isToolTask(toolName){return this._serverCapabilities?.tasks?.requests?.tools?.call?this._cachedKnownTaskTools.has(toolName):!1}isToolTaskRequired(toolName){return this._cachedRequiredTaskTools.has(toolName)}cacheToolMetadata(tools){this._cachedToolOutputValidators.clear(),this._cachedKnownTaskTools.clear(),this._cachedRequiredTaskTools.clear();for(const tool of tools){if(tool.outputSchema){ +const toolValidator=this._jsonSchemaValidator.getValidator(tool.outputSchema);this._cachedToolOutputValidators.set(tool.name,toolValidator)}const taskSupport=tool.execution?.taskSupport;(taskSupport==="required"||taskSupport==="optional")&&this._cachedKnownTaskTools.add(tool.name),taskSupport==="required"&&this._cachedRequiredTaskTools.add(tool.name)}}getToolOutputValidator(toolName){return this._cachedToolOutputValidators.get(toolName)}async listTools(params,options){const result=await this.request( +{method:"tools/list",params},ListToolsResultSchema,options);return this.cacheToolMetadata(result.tools),result}_setupListChangedHandler(listType,notificationSchema,options,fetcher){const parseResult=ListChangedOptionsBaseSchema.safeParse(options);if(!parseResult.success)throw new Error(`Invalid ${listType} listChanged options: ${parseResult.error.message}`);if(typeof options.onChanged!="function")throw new Error(`Invalid ${listType} listChanged options: onChanged must be a function`);const{autoRefresh, +debounceMs}=parseResult.data,{onChanged}=options,refresh=async()=>{if(!autoRefresh){onChanged(null,null);return}try{const items2=await fetcher();onChanged(null,items2)}catch(e){const error2=e instanceof Error?e:new Error(String(e));onChanged(error2,null)}},handler=()=>{if(debounceMs){const existingTimer=this._listChangedDebounceTimers.get(listType);existingTimer&&clearTimeout(existingTimer);const timer=setTimeout(refresh,debounceMs);this._listChangedDebounceTimers.set(listType,timer)}else refresh()}; +this.setNotificationHandler(notificationSchema,handler)}async sendRootsListChanged(){return this.notification({method:"notifications/roots/list_changed"})}}function normalizeHeaders(headers){return headers?headers instanceof Headers?Object.fromEntries(headers.entries()):Array.isArray(headers)?Object.fromEntries(headers):{...headers}:{}}function createFetchWithInit(baseFetch=fetch,baseInit){return baseInit?async(url2,init2)=>{const mergedInit={...baseInit,...init2,headers:init2?.headers?{...normalizeHeaders( +baseInit.headers),...normalizeHeaders(init2.headers)}:baseInit.headers};return baseFetch(url2,mergedInit)}:baseFetch}let crypto$1;crypto$1=globalThis.crypto;async function getRandomValues(size2){return(await crypto$1).getRandomValues(new Uint8Array(size2))}async function random(size2){const mask="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~",evenDistCutoff=Math.pow(2,8)-Math.pow(2,8)%mask.length;let result="";for(;result.length<size2;){const randomBytes=await getRandomValues( +size2-result.length);for(const randomByte of randomBytes)randomByte<evenDistCutoff&&(result+=mask[randomByte%mask.length])}return result}async function generateVerifier(length){return await random(length)}async function generateChallenge(code_verifier){const buffer=await(await crypto$1).subtle.digest("SHA-256",new TextEncoder().encode(code_verifier));return btoa(String.fromCharCode(...new Uint8Array(buffer))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}async function pkceChallenge(length){ +if(length||(length=43),length<43||length>128)throw`Expected a length between 43 and 128. Received ${length}.`;const verifier=await generateVerifier(length),challenge=await generateChallenge(verifier);return{code_verifier:verifier,code_challenge:challenge}}const SafeUrlSchema=url().superRefine((val,ctx)=>{if(!URL.canParse(val))return ctx.addIssue({code:ZodIssueCode.custom,message:"URL must be parseable",fatal:!0}),NEVER}).refine(url2=>{const u=new URL(url2);return u.protocol!=="javascript:"&&u.protocol!== +"data:"&&u.protocol!=="vbscript:"},{message:"URL cannot use javascript:, data:, or vbscript: scheme"}),OAuthProtectedResourceMetadataSchema=looseObject({resource:string$2().url(),authorization_servers:array(SafeUrlSchema).optional(),jwks_uri:string$2().url().optional(),scopes_supported:array(string$2()).optional(),bearer_methods_supported:array(string$2()).optional(),resource_signing_alg_values_supported:array(string$2()).optional(),resource_name:string$2().optional(),resource_documentation:string$2(). +optional(),resource_policy_uri:string$2().url().optional(),resource_tos_uri:string$2().url().optional(),tls_client_certificate_bound_access_tokens:boolean$1().optional(),authorization_details_types_supported:array(string$2()).optional(),dpop_signing_alg_values_supported:array(string$2()).optional(),dpop_bound_access_tokens_required:boolean$1().optional()}),OAuthMetadataSchema=looseObject({issuer:string$2(),authorization_endpoint:SafeUrlSchema,token_endpoint:SafeUrlSchema,registration_endpoint:SafeUrlSchema. +optional(),scopes_supported:array(string$2()).optional(),response_types_supported:array(string$2()),response_modes_supported:array(string$2()).optional(),grant_types_supported:array(string$2()).optional(),token_endpoint_auth_methods_supported:array(string$2()).optional(),token_endpoint_auth_signing_alg_values_supported:array(string$2()).optional(),service_documentation:SafeUrlSchema.optional(),revocation_endpoint:SafeUrlSchema.optional(),revocation_endpoint_auth_methods_supported:array(string$2()). +optional(),revocation_endpoint_auth_signing_alg_values_supported:array(string$2()).optional(),introspection_endpoint:string$2().optional(),introspection_endpoint_auth_methods_supported:array(string$2()).optional(),introspection_endpoint_auth_signing_alg_values_supported:array(string$2()).optional(),code_challenge_methods_supported:array(string$2()).optional(),client_id_metadata_document_supported:boolean$1().optional()}),OpenIdProviderMetadataSchema=looseObject({issuer:string$2(),authorization_endpoint:SafeUrlSchema, +token_endpoint:SafeUrlSchema,userinfo_endpoint:SafeUrlSchema.optional(),jwks_uri:SafeUrlSchema,registration_endpoint:SafeUrlSchema.optional(),scopes_supported:array(string$2()).optional(),response_types_supported:array(string$2()),response_modes_supported:array(string$2()).optional(),grant_types_supported:array(string$2()).optional(),acr_values_supported:array(string$2()).optional(),subject_types_supported:array(string$2()),id_token_signing_alg_values_supported:array(string$2()),id_token_encryption_alg_values_supported:array( +string$2()).optional(),id_token_encryption_enc_values_supported:array(string$2()).optional(),userinfo_signing_alg_values_supported:array(string$2()).optional(),userinfo_encryption_alg_values_supported:array(string$2()).optional(),userinfo_encryption_enc_values_supported:array(string$2()).optional(),request_object_signing_alg_values_supported:array(string$2()).optional(),request_object_encryption_alg_values_supported:array(string$2()).optional(),request_object_encryption_enc_values_supported:array( +string$2()).optional(),token_endpoint_auth_methods_supported:array(string$2()).optional(),token_endpoint_auth_signing_alg_values_supported:array(string$2()).optional(),display_values_supported:array(string$2()).optional(),claim_types_supported:array(string$2()).optional(),claims_supported:array(string$2()).optional(),service_documentation:string$2().optional(),claims_locales_supported:array(string$2()).optional(),ui_locales_supported:array(string$2()).optional(),claims_parameter_supported:boolean$1(). +optional(),request_parameter_supported:boolean$1().optional(),request_uri_parameter_supported:boolean$1().optional(),require_request_uri_registration:boolean$1().optional(),op_policy_uri:SafeUrlSchema.optional(),op_tos_uri:SafeUrlSchema.optional(),client_id_metadata_document_supported:boolean$1().optional()}),OpenIdProviderDiscoveryMetadataSchema=object({...OpenIdProviderMetadataSchema.shape,...OAuthMetadataSchema.pick({code_challenge_methods_supported:!0}).shape}),OAuthTokensSchema=object({access_token:string$2(), +id_token:string$2().optional(),token_type:string$2(),expires_in:number$1().optional(),scope:string$2().optional(),refresh_token:string$2().optional()}).strip(),OAuthErrorResponseSchema=object({error:string$2(),error_description:string$2().optional(),error_uri:string$2().optional()}),OptionalSafeUrlSchema=SafeUrlSchema.optional().or(literal("").transform(()=>{})),OAuthClientMetadataSchema=object({redirect_uris:array(SafeUrlSchema),token_endpoint_auth_method:string$2().optional(),grant_types:array( +string$2()).optional(),response_types:array(string$2()).optional(),client_name:string$2().optional(),client_uri:SafeUrlSchema.optional(),logo_uri:OptionalSafeUrlSchema,scope:string$2().optional(),contacts:array(string$2()).optional(),tos_uri:OptionalSafeUrlSchema,policy_uri:string$2().optional(),jwks_uri:SafeUrlSchema.optional(),jwks:any().optional(),software_id:string$2().optional(),software_version:string$2().optional(),software_statement:string$2().optional()}).strip(),OAuthClientInformationSchema=object( +{client_id:string$2(),client_secret:string$2().optional(),client_id_issued_at:number$2().optional(),client_secret_expires_at:number$2().optional()}).strip(),OAuthClientInformationFullSchema=OAuthClientMetadataSchema.merge(OAuthClientInformationSchema);object({error:string$2(),error_description:string$2().optional()}).strip();object({token:string$2(),token_type_hint:string$2().optional()}).strip();function resourceUrlFromServerUrl(url2){const resourceURL=typeof url2=="string"?new URL(url2):new URL( +url2.href);return resourceURL.hash="",resourceURL}function checkResourceAllowed({requestedResource,configuredResource}){const requested=typeof requestedResource=="string"?new URL(requestedResource):new URL(requestedResource.href),configured=typeof configuredResource=="string"?new URL(configuredResource):new URL(configuredResource.href);if(requested.origin!==configured.origin||requested.pathname.length<configured.pathname.length)return!1;const requestedPath=requested.pathname.endsWith("/")?requested. +pathname:requested.pathname+"/",configuredPath=configured.pathname.endsWith("/")?configured.pathname:configured.pathname+"/";return requestedPath.startsWith(configuredPath)}class OAuthError extends Error{constructor(message,errorUri){super(message),this.errorUri=errorUri,this.name=this.constructor.name}toResponseObject(){const response={error:this.errorCode,error_description:this.message};return this.errorUri&&(response.error_uri=this.errorUri),response}get errorCode(){return this.constructor.errorCode}} +class InvalidRequestError extends OAuthError{}InvalidRequestError.errorCode="invalid_request";class InvalidClientError extends OAuthError{}InvalidClientError.errorCode="invalid_client";class InvalidGrantError extends OAuthError{}InvalidGrantError.errorCode="invalid_grant";class UnauthorizedClientError extends OAuthError{}UnauthorizedClientError.errorCode="unauthorized_client";class UnsupportedGrantTypeError extends OAuthError{}UnsupportedGrantTypeError.errorCode="unsupported_grant_type";class InvalidScopeError extends OAuthError{} +InvalidScopeError.errorCode="invalid_scope";class AccessDeniedError extends OAuthError{}AccessDeniedError.errorCode="access_denied";class ServerError extends OAuthError{}ServerError.errorCode="server_error";class TemporarilyUnavailableError extends OAuthError{}TemporarilyUnavailableError.errorCode="temporarily_unavailable";class UnsupportedResponseTypeError extends OAuthError{}UnsupportedResponseTypeError.errorCode="unsupported_response_type";class UnsupportedTokenTypeError extends OAuthError{}UnsupportedTokenTypeError. +errorCode="unsupported_token_type";class InvalidTokenError extends OAuthError{}InvalidTokenError.errorCode="invalid_token";class MethodNotAllowedError extends OAuthError{}MethodNotAllowedError.errorCode="method_not_allowed";class TooManyRequestsError extends OAuthError{}TooManyRequestsError.errorCode="too_many_requests";class InvalidClientMetadataError extends OAuthError{}InvalidClientMetadataError.errorCode="invalid_client_metadata";class InsufficientScopeError extends OAuthError{}InsufficientScopeError. +errorCode="insufficient_scope";class InvalidTargetError extends OAuthError{}InvalidTargetError.errorCode="invalid_target";const OAUTH_ERRORS={[InvalidRequestError.errorCode]:InvalidRequestError,[InvalidClientError.errorCode]:InvalidClientError,[InvalidGrantError.errorCode]:InvalidGrantError,[UnauthorizedClientError.errorCode]:UnauthorizedClientError,[UnsupportedGrantTypeError.errorCode]:UnsupportedGrantTypeError,[InvalidScopeError.errorCode]:InvalidScopeError,[AccessDeniedError.errorCode]:AccessDeniedError, +[ServerError.errorCode]:ServerError,[TemporarilyUnavailableError.errorCode]:TemporarilyUnavailableError,[UnsupportedResponseTypeError.errorCode]:UnsupportedResponseTypeError,[UnsupportedTokenTypeError.errorCode]:UnsupportedTokenTypeError,[InvalidTokenError.errorCode]:InvalidTokenError,[MethodNotAllowedError.errorCode]:MethodNotAllowedError,[TooManyRequestsError.errorCode]:TooManyRequestsError,[InvalidClientMetadataError.errorCode]:InvalidClientMetadataError,[InsufficientScopeError.errorCode]:InsufficientScopeError, +[InvalidTargetError.errorCode]:InvalidTargetError};class UnauthorizedError extends Error{constructor(message){super(message??"Unauthorized")}}function isClientAuthMethod(method){return["client_secret_basic","client_secret_post","none"].includes(method)}const AUTHORIZATION_CODE_RESPONSE_TYPE="code",AUTHORIZATION_CODE_CHALLENGE_METHOD="S256";function selectClientAuthMethod(clientInformation,supportedMethods){const hasClientSecret=clientInformation.client_secret!==void 0;return supportedMethods.length=== +0?hasClientSecret?"client_secret_post":"none":"token_endpoint_auth_method"in clientInformation&&clientInformation.token_endpoint_auth_method&&isClientAuthMethod(clientInformation.token_endpoint_auth_method)&&supportedMethods.includes(clientInformation.token_endpoint_auth_method)?clientInformation.token_endpoint_auth_method:hasClientSecret&&supportedMethods.includes("client_secret_basic")?"client_secret_basic":hasClientSecret&&supportedMethods.includes("client_secret_post")?"client_secret_post":supportedMethods. +includes("none")?"none":hasClientSecret?"client_secret_post":"none"}function applyClientAuthentication(method,clientInformation,headers,params){const{client_id,client_secret}=clientInformation;switch(method){case"client_secret_basic":applyBasicAuth(client_id,client_secret,headers);return;case"client_secret_post":applyPostAuth(client_id,client_secret,params);return;case"none":applyPublicAuth(client_id,params);return;default:throw new Error(`Unsupported client authentication method: ${method}`)}}function applyBasicAuth(clientId,clientSecret,headers){ +if(!clientSecret)throw new Error("client_secret_basic authentication requires a client_secret");const credentials=btoa(`${clientId}:${clientSecret}`);headers.set("Authorization",`Basic ${credentials}`)}function applyPostAuth(clientId,clientSecret,params){params.set("client_id",clientId),clientSecret&¶ms.set("client_secret",clientSecret)}function applyPublicAuth(clientId,params){params.set("client_id",clientId)}async function parseErrorResponse(input){const statusCode=input instanceof Response? +input.status:void 0,body2=input instanceof Response?await input.text():input;try{const result=OAuthErrorResponseSchema.parse(JSON.parse(body2)),{error:error2,error_description,error_uri}=result,errorClass=OAUTH_ERRORS[error2]||ServerError;return new errorClass(error_description||"",error_uri)}catch(error2){const errorMessage=`${statusCode?`HTTP ${statusCode}: `:""}Invalid OAuth error response: ${error2}. Raw body: ${body2}`;return new ServerError(errorMessage)}}async function auth(provider,options){ +try{return await authInternal(provider,options)}catch(error2){if(error2 instanceof InvalidClientError||error2 instanceof UnauthorizedClientError)return await provider.invalidateCredentials?.("all"),await authInternal(provider,options);if(error2 instanceof InvalidGrantError)return await provider.invalidateCredentials?.("tokens"),await authInternal(provider,options);throw error2}}async function authInternal(provider,{serverUrl,authorizationCode,scope:scope2,resourceMetadataUrl,fetchFn}){let resourceMetadata, +authorizationServerUrl;try{resourceMetadata=await discoverOAuthProtectedResourceMetadata(serverUrl,{resourceMetadataUrl},fetchFn),resourceMetadata.authorization_servers&&resourceMetadata.authorization_servers.length>0&&(authorizationServerUrl=resourceMetadata.authorization_servers[0])}catch{}authorizationServerUrl||(authorizationServerUrl=new URL("/",serverUrl));const resource=await selectResourceURL(serverUrl,provider,resourceMetadata),metadata2=await discoverAuthorizationServerMetadata(authorizationServerUrl, +{fetchFn});let clientInformation=await Promise.resolve(provider.clientInformation());if(!clientInformation){if(authorizationCode!==void 0)throw new Error("Existing OAuth client information is required when exchanging an authorization code");const supportsUrlBasedClientId=metadata2?.client_id_metadata_document_supported===!0,clientMetadataUrl=provider.clientMetadataUrl;if(clientMetadataUrl&&!isHttpsUrl(clientMetadataUrl))throw new InvalidClientMetadataError(`clientMetadataUrl must be a valid HTTP\ +S URL with a non-root pathname, got: ${clientMetadataUrl}`);if(supportsUrlBasedClientId&&clientMetadataUrl)clientInformation={client_id:clientMetadataUrl},await provider.saveClientInformation?.(clientInformation);else{if(!provider.saveClientInformation)throw new Error("OAuth client information must be saveable for dynamic registration");const fullInformation=await registerClient(authorizationServerUrl,{metadata:metadata2,clientMetadata:provider.clientMetadata,fetchFn});await provider.saveClientInformation( +fullInformation),clientInformation=fullInformation}}const nonInteractiveFlow=!provider.redirectUrl;if(authorizationCode!==void 0||nonInteractiveFlow){const tokens2=await fetchToken(provider,authorizationServerUrl,{metadata:metadata2,resource,authorizationCode,fetchFn});return await provider.saveTokens(tokens2),"AUTHORIZED"}const tokens=await provider.tokens();if(tokens?.refresh_token)try{const newTokens=await refreshAuthorization(authorizationServerUrl,{metadata:metadata2,clientInformation,refreshToken:tokens. +refresh_token,resource,addClientAuthentication:provider.addClientAuthentication,fetchFn});return await provider.saveTokens(newTokens),"AUTHORIZED"}catch(error2){if(!(!(error2 instanceof OAuthError)||error2 instanceof ServerError))throw error2}const state2=provider.state?await provider.state():void 0,{authorizationUrl,codeVerifier}=await startAuthorization(authorizationServerUrl,{metadata:metadata2,clientInformation,state:state2,redirectUrl:provider.redirectUrl,scope:scope2||resourceMetadata?.scopes_supported?. +join(" ")||provider.clientMetadata.scope,resource});return await provider.saveCodeVerifier(codeVerifier),await provider.redirectToAuthorization(authorizationUrl),"REDIRECT"}function isHttpsUrl(value){if(!value)return!1;try{const url2=new URL(value);return url2.protocol==="https:"&&url2.pathname!=="/"}catch{return!1}}async function selectResourceURL(serverUrl,provider,resourceMetadata){const defaultResource=resourceUrlFromServerUrl(serverUrl);if(provider.validateResourceURL)return await provider. +validateResourceURL(defaultResource,resourceMetadata?.resource);if(resourceMetadata){if(!checkResourceAllowed({requestedResource:defaultResource,configuredResource:resourceMetadata.resource}))throw new Error(`Protected resource ${resourceMetadata.resource} does not match expected ${defaultResource} (or origin)`);return new URL(resourceMetadata.resource)}}function extractWWWAuthenticateParams(res){const authenticateHeader=res.headers.get("WWW-Authenticate");if(!authenticateHeader)return{};const[type2, +scheme2]=authenticateHeader.split(" ");if(type2.toLowerCase()!=="bearer"||!scheme2)return{};const resourceMetadataMatch=extractFieldFromWwwAuth(res,"resource_metadata")||void 0;let resourceMetadataUrl;if(resourceMetadataMatch)try{resourceMetadataUrl=new URL(resourceMetadataMatch)}catch{}const scope2=extractFieldFromWwwAuth(res,"scope")||void 0,error2=extractFieldFromWwwAuth(res,"error")||void 0;return{resourceMetadataUrl,scope:scope2,error:error2}}function extractFieldFromWwwAuth(response,fieldName){ +const wwwAuthHeader=response.headers.get("WWW-Authenticate");if(!wwwAuthHeader)return null;const pattern2=new RegExp(`${fieldName}=(?:"([^"]+)"|([^\\s,]+))`),match=wwwAuthHeader.match(pattern2);return match?match[1]||match[2]:null}async function discoverOAuthProtectedResourceMetadata(serverUrl,opts,fetchFn=fetch){const response=await discoverMetadataWithFallback(serverUrl,"oauth-protected-resource",fetchFn,{protocolVersion:opts?.protocolVersion,metadataUrl:opts?.resourceMetadataUrl});if(!response|| +response.status===404)throw await response?.body?.cancel(),new Error("Resource server does not implement OAuth 2.0 Protected Resource Metadata.");if(!response.ok)throw await response.body?.cancel(),new Error(`HTTP ${response.status} trying to load well-known OAuth protected resource metadata.`);return OAuthProtectedResourceMetadataSchema.parse(await response.json())}async function fetchWithCorsRetry(url2,headers,fetchFn=fetch){try{return await fetchFn(url2,{headers})}catch(error2){if(error2 instanceof +TypeError)return headers?fetchWithCorsRetry(url2,void 0,fetchFn):void 0;throw error2}}function buildWellKnownPath(wellKnownPrefix,pathname="",options={}){return pathname.endsWith("/")&&(pathname=pathname.slice(0,-1)),options.prependPathname?`${pathname}/.well-known/${wellKnownPrefix}`:`/.well-known/${wellKnownPrefix}${pathname}`}async function tryMetadataDiscovery(url2,protocolVersion,fetchFn=fetch){return await fetchWithCorsRetry(url2,{"MCP-Protocol-Version":protocolVersion},fetchFn)}function shouldAttemptFallback(response,pathname){ +return!response||response.status>=400&&response.status<500&&pathname!=="/"}async function discoverMetadataWithFallback(serverUrl,wellKnownType,fetchFn,opts){const issuer=new URL(serverUrl),protocolVersion=opts?.protocolVersion??LATEST_PROTOCOL_VERSION;let url2;if(opts?.metadataUrl)url2=new URL(opts.metadataUrl);else{const wellKnownPath=buildWellKnownPath(wellKnownType,issuer.pathname);url2=new URL(wellKnownPath,opts?.metadataServerUrl??issuer),url2.search=issuer.search}let response=await tryMetadataDiscovery( +url2,protocolVersion,fetchFn);if(!opts?.metadataUrl&&shouldAttemptFallback(response,issuer.pathname)){const rootUrl=new URL(`/.well-known/${wellKnownType}`,issuer);response=await tryMetadataDiscovery(rootUrl,protocolVersion,fetchFn)}return response}function buildDiscoveryUrls(authorizationServerUrl){const url2=typeof authorizationServerUrl=="string"?new URL(authorizationServerUrl):authorizationServerUrl,hasPath=url2.pathname!=="/",urlsToTry=[];if(!hasPath)return urlsToTry.push({url:new URL("/.we\ +ll-known/oauth-authorization-server",url2.origin),type:"oauth"}),urlsToTry.push({url:new URL("/.well-known/openid-configuration",url2.origin),type:"oidc"}),urlsToTry;let pathname=url2.pathname;return pathname.endsWith("/")&&(pathname=pathname.slice(0,-1)),urlsToTry.push({url:new URL(`/.well-known/oauth-authorization-server${pathname}`,url2.origin),type:"oauth"}),urlsToTry.push({url:new URL(`/.well-known/openid-configuration${pathname}`,url2.origin),type:"oidc"}),urlsToTry.push({url:new URL(`${pathname}\ +/.well-known/openid-configuration`,url2.origin),type:"oidc"}),urlsToTry}async function discoverAuthorizationServerMetadata(authorizationServerUrl,{fetchFn=fetch,protocolVersion=LATEST_PROTOCOL_VERSION}={}){const headers={"MCP-Protocol-Version":protocolVersion,Accept:"application/json"},urlsToTry=buildDiscoveryUrls(authorizationServerUrl);for(const{url:endpointUrl,type:type2}of urlsToTry){const response=await fetchWithCorsRetry(endpointUrl,headers,fetchFn);if(response){if(!response.ok){if(await response. +body?.cancel(),response.status>=400&&response.status<500)continue;throw new Error(`HTTP ${response.status} trying to load ${type2==="oauth"?"OAuth":"OpenID provider"} metadata from ${endpointUrl}`)}return type2==="oauth"?OAuthMetadataSchema.parse(await response.json()):OpenIdProviderDiscoveryMetadataSchema.parse(await response.json())}}}async function startAuthorization(authorizationServerUrl,{metadata:metadata2,clientInformation,redirectUrl,scope:scope2,state:state2,resource}){let authorizationUrl; +if(metadata2){if(authorizationUrl=new URL(metadata2.authorization_endpoint),!metadata2.response_types_supported.includes(AUTHORIZATION_CODE_RESPONSE_TYPE))throw new Error(`Incompatible auth server: does not support response type ${AUTHORIZATION_CODE_RESPONSE_TYPE}`);if(metadata2.code_challenge_methods_supported&&!metadata2.code_challenge_methods_supported.includes(AUTHORIZATION_CODE_CHALLENGE_METHOD))throw new Error(`Incompatible auth server: does not support code challenge method ${AUTHORIZATION_CODE_CHALLENGE_METHOD}`)}else +authorizationUrl=new URL("/authorize",authorizationServerUrl);const challenge=await pkceChallenge(),codeVerifier=challenge.code_verifier,codeChallenge=challenge.code_challenge;return authorizationUrl.searchParams.set("response_type",AUTHORIZATION_CODE_RESPONSE_TYPE),authorizationUrl.searchParams.set("client_id",clientInformation.client_id),authorizationUrl.searchParams.set("code_challenge",codeChallenge),authorizationUrl.searchParams.set("code_challenge_method",AUTHORIZATION_CODE_CHALLENGE_METHOD), +authorizationUrl.searchParams.set("redirect_uri",String(redirectUrl)),state2&&authorizationUrl.searchParams.set("state",state2),scope2&&authorizationUrl.searchParams.set("scope",scope2),scope2?.includes("offline_access")&&authorizationUrl.searchParams.append("prompt","consent"),resource&&authorizationUrl.searchParams.set("resource",resource.href),{authorizationUrl,codeVerifier}}function prepareAuthorizationCodeRequest(authorizationCode,codeVerifier,redirectUri){return new URLSearchParams({grant_type:"\ +authorization_code",code:authorizationCode,code_verifier:codeVerifier,redirect_uri:String(redirectUri)})}async function executeTokenRequest(authorizationServerUrl,{metadata:metadata2,tokenRequestParams,clientInformation,addClientAuthentication,resource,fetchFn}){const tokenUrl=metadata2?.token_endpoint?new URL(metadata2.token_endpoint):new URL("/token",authorizationServerUrl),headers=new Headers({"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"});if(resource&&tokenRequestParams. +set("resource",resource.href),addClientAuthentication)await addClientAuthentication(headers,tokenRequestParams,tokenUrl,metadata2);else if(clientInformation){const supportedMethods=metadata2?.token_endpoint_auth_methods_supported??[],authMethod=selectClientAuthMethod(clientInformation,supportedMethods);applyClientAuthentication(authMethod,clientInformation,headers,tokenRequestParams)}const response=await(fetchFn??fetch)(tokenUrl,{method:"POST",headers,body:tokenRequestParams});if(!response.ok)throw await parseErrorResponse( +response);return OAuthTokensSchema.parse(await response.json())}async function refreshAuthorization(authorizationServerUrl,{metadata:metadata2,clientInformation,refreshToken,resource,addClientAuthentication,fetchFn}){const tokenRequestParams=new URLSearchParams({grant_type:"refresh_token",refresh_token:refreshToken}),tokens=await executeTokenRequest(authorizationServerUrl,{metadata:metadata2,tokenRequestParams,clientInformation,addClientAuthentication,resource,fetchFn});return{refresh_token:refreshToken, +...tokens}}async function fetchToken(provider,authorizationServerUrl,{metadata:metadata2,resource,authorizationCode,fetchFn}={}){const scope2=provider.clientMetadata.scope;let tokenRequestParams;if(provider.prepareTokenRequest&&(tokenRequestParams=await provider.prepareTokenRequest(scope2)),!tokenRequestParams){if(!authorizationCode)throw new Error("Either provider.prepareTokenRequest() or authorizationCode is required");if(!provider.redirectUrl)throw new Error("redirectUrl is required for autho\ +rization_code flow");const codeVerifier=await provider.codeVerifier();tokenRequestParams=prepareAuthorizationCodeRequest(authorizationCode,codeVerifier,provider.redirectUrl)}const clientInformation=await provider.clientInformation();return executeTokenRequest(authorizationServerUrl,{metadata:metadata2,tokenRequestParams,clientInformation:clientInformation??void 0,addClientAuthentication:provider.addClientAuthentication,resource,fetchFn})}async function registerClient(authorizationServerUrl,{metadata:metadata2, +clientMetadata,fetchFn}){let registrationUrl;if(metadata2){if(!metadata2.registration_endpoint)throw new Error("Incompatible auth server: does not support dynamic client registration");registrationUrl=new URL(metadata2.registration_endpoint)}else registrationUrl=new URL("/register",authorizationServerUrl);const response=await(fetchFn??fetch)(registrationUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(clientMetadata)});if(!response.ok)throw await parseErrorResponse( +response);return OAuthClientInformationFullSchema.parse(await response.json())}let ParseError$1=class extends Error{constructor(message,options){super(message),this.name="ParseError",this.type=options.type,this.field=options.field,this.value=options.value,this.line=options.line}};function noop(_arg){}function createParser$1(callbacks){if(typeof callbacks=="function")throw new TypeError("`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?");const{onEvent=noop,onError=noop, +onRetry=noop,onComment}=callbacks;let incompleteLine="",isFirstChunk=!0,id2,data="",eventType="";function feed(newChunk){const chunk=isFirstChunk?newChunk.replace(/^\xEF\xBB\xBF/,""):newChunk,[complete,incomplete]=splitLines(`${incompleteLine}${chunk}`);for(const line of complete)parseLine(line);incompleteLine=incomplete,isFirstChunk=!1}function parseLine(line){if(line===""){dispatchEvent2();return}if(line.startsWith(":")){onComment&&onComment(line.slice(line.startsWith(": ")?2:1));return}const fieldSeparatorIndex=line. +indexOf(":");if(fieldSeparatorIndex!==-1){const field=line.slice(0,fieldSeparatorIndex),offset2=line[fieldSeparatorIndex+1]===" "?2:1,value=line.slice(fieldSeparatorIndex+offset2);processField(field,value,line);return}processField(line,"",line)}function processField(field,value,line){switch(field){case"event":eventType=value;break;case"data":data=`${data}${value} `;break;case"id":id2=value.includes("\0")?void 0:value;break;case"retry":/^\d+$/.test(value)?onRetry(parseInt(value,10)):onError(new ParseError$1(`Invalid \`retry\` value: "${value}"`,{type:"invalid-retry",value,line}));break;default:onError(new ParseError$1(`Unknown field "${field.length>20?`${field.slice(0,20)}…`:field}"`,{type:"unknown-field",field,value,line}));break}}function dispatchEvent2(){data.length>0&&onEvent({id:id2,event:eventType||void 0,data:data.endsWith(` `)?data.slice(0,-1):data}),id2=void 0,data="",eventType=""}function reset2(options={}){incompleteLine&&options.consume&&parseLine(incompleteLine),isFirstChunk=!0,id2=void 0,data="",eventType="",incompleteLine=""}return{feed,reset:reset2}}function splitLines(chunk){const lines=[];let incompleteLine="",searchIndex=0;for(;searchIndex<chunk.length;){const crIndex=chunk.indexOf("\r",searchIndex),lfIndex=chunk.indexOf(` `,searchIndex);let lineEnd=-1;if(crIndex!==-1&&lfIndex!==-1?lineEnd=Math.min(crIndex,lfIndex):crIndex!==-1?crIndex===chunk.length-1?lineEnd=-1:lineEnd=crIndex:lfIndex!==-1&&(lineEnd=lfIndex),lineEnd===-1){incompleteLine=chunk.slice(searchIndex);break}else{const line=chunk.slice(searchIndex,lineEnd);lines.push(line),searchIndex=lineEnd+1,chunk[searchIndex-1]==="\r"&&chunk[searchIndex]===` @@ -4870,34 +4954,34 @@ await response.body?.cancel()}catch(error2){throw this.onerror?.(error2),error2} statusText}`);this._sessionId=void 0}catch(error2){throw this.onerror?.(error2),error2}}setProtocolVersion(version2){this._protocolVersion=version2}get protocolVersion(){return this._protocolVersion}async resumeStream(lastEventId,options){await this._startOrAuthSse({resumptionToken:lastEventId,onresumptiontoken:options?.onresumptiontoken})}}class ErrorEvent extends Event{constructor(type2,errorEventInitDict){var _a2,_b;super(type2),this.code=(_a2=errorEventInitDict?.code)!=null?_a2:void 0,this.message= (_b=errorEventInitDict?.message)!=null?_b:void 0}[Symbol.for("nodejs.util.inspect.custom")](_depth,options,inspect){return inspect(inspectableError(this),options)}[Symbol.for("Deno.customInspect")](inspect,options){return inspect(inspectableError(this),options)}}function syntaxError(message){const DomException=globalThis.DOMException;return typeof DomException=="function"?new DomException(message,"SyntaxError"):new SyntaxError(message)}function flattenError(err){return err instanceof Error?"erro\ rs"in err&&Array.isArray(err.errors)?err.errors.map(flattenError).join(", "):"cause"in err&&err.cause instanceof Error?`${err}: ${flattenError(err.cause)}`:err.message:`${err}`}function inspectableError(err){return{type:err.type,message:err.message,code:err.code,defaultPrevented:err.defaultPrevented,cancelable:err.cancelable,timeStamp:err.timeStamp}}var __typeError2=msg=>{throw TypeError(msg)},__accessCheck2=(obj,member,msg)=>member.has(obj)||__typeError2("Cannot "+msg),__privateGet2=(obj,member,getter)=>(__accessCheck2( -obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd2=(obj,member,value)=>member.has(obj)?__typeError2("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet2=(obj,member,value,setter)=>(__accessCheck2(obj,member,"write to private field"),member.set(obj,value),value),__privateMethod2=(obj,member,method)=>(__accessCheck2(obj,member,"access private method"),method),_readyState,_url,_redirectUrl, +obj,member,"read from private field"),getter?getter.call(obj):member.get(obj)),__privateAdd2=(obj,member,value)=>member.has(obj)?__typeError2("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value),__privateSet2=(obj,member,value,setter)=>(__accessCheck2(obj,member,"write to private field"),member.set(obj,value),value),__privateMethod2=(obj,member,method)=>(__accessCheck2(obj,member,"access private method"),method),_readyState,_url$1,_redirectUrl, _withCredentials,_fetch,_reconnectInterval,_reconnectTimer,_lastEventId,_controller,_parser,_onError,_onMessage,_onOpen,_EventSource_instances,connect_fn,_onFetchResponse,_onFetchError,getRequestOptions_fn,_onEvent,_onRetryChange,failConnection_fn,scheduleReconnect_fn,_reconnect;class EventSource extends EventTarget{constructor(url2,eventSourceInitDict){var _a2,_b;super(),__privateAdd2(this,_EventSource_instances),this.CONNECTING=0,this.OPEN=1,this.CLOSED=2,__privateAdd2(this,_readyState),__privateAdd2( -this,_url),__privateAdd2(this,_redirectUrl),__privateAdd2(this,_withCredentials),__privateAdd2(this,_fetch),__privateAdd2(this,_reconnectInterval),__privateAdd2(this,_reconnectTimer),__privateAdd2(this,_lastEventId,null),__privateAdd2(this,_controller),__privateAdd2(this,_parser),__privateAdd2(this,_onError,null),__privateAdd2(this,_onMessage,null),__privateAdd2(this,_onOpen,null),__privateAdd2(this,_onFetchResponse,async response=>{var _a22;__privateGet2(this,_parser).reset();const{body:body2,redirected, -status,headers}=response;if(status===204){__privateMethod2(this,_EventSource_instances,failConnection_fn).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(redirected?__privateSet2(this,_redirectUrl,new URL(response.url)):__privateSet2(this,_redirectUrl,void 0),status!==200){__privateMethod2(this,_EventSource_instances,failConnection_fn).call(this,`Non-200 status code (${status})`,status);return}if(!(headers.get("content-type")||"").startsWith("text/event-stream")){__privateMethod2( -this,_EventSource_instances,failConnection_fn).call(this,'Invalid content type, expected "text/event-stream"',status);return}if(__privateGet2(this,_readyState)===this.CLOSED)return;__privateSet2(this,_readyState,this.OPEN);const openEvent=new Event("open");if((_a22=__privateGet2(this,_onOpen))==null||_a22.call(this,openEvent),this.dispatchEvent(openEvent),typeof body2!="object"||!body2||!("getReader"in body2)){__privateMethod2(this,_EventSource_instances,failConnection_fn).call(this,"Invalid res\ -ponse body, expected a web ReadableStream",status),this.close();return}const decoder=new TextDecoder,reader=body2.getReader();let open2=!0;do{const{done,value}=await reader.read();value&&__privateGet2(this,_parser).feed(decoder.decode(value,{stream:!done})),done&&(open2=!1,__privateGet2(this,_parser).reset(),__privateMethod2(this,_EventSource_instances,scheduleReconnect_fn).call(this))}while(open2)}),__privateAdd2(this,_onFetchError,err=>{__privateSet2(this,_controller,void 0),!(err.name==="Abor\ -tError"||err.type==="aborted")&&__privateMethod2(this,_EventSource_instances,scheduleReconnect_fn).call(this,flattenError(err))}),__privateAdd2(this,_onEvent,event2=>{typeof event2.id=="string"&&__privateSet2(this,_lastEventId,event2.id);const messageEvent=new MessageEvent(event2.event||"message",{data:event2.data,origin:__privateGet2(this,_redirectUrl)?__privateGet2(this,_redirectUrl).origin:__privateGet2(this,_url).origin,lastEventId:event2.id||""});__privateGet2(this,_onMessage)&&(!event2.event|| -event2.event==="message")&&__privateGet2(this,_onMessage).call(this,messageEvent),this.dispatchEvent(messageEvent)}),__privateAdd2(this,_onRetryChange,value=>{__privateSet2(this,_reconnectInterval,value)}),__privateAdd2(this,_reconnect,()=>{__privateSet2(this,_reconnectTimer,void 0),__privateGet2(this,_readyState)===this.CONNECTING&&__privateMethod2(this,_EventSource_instances,connect_fn).call(this)});try{if(url2 instanceof URL)__privateSet2(this,_url,url2);else if(typeof url2=="string")__privateSet2( -this,_url,new URL(url2,getBaseURL()));else throw new Error("Invalid URL")}catch{throw syntaxError("An invalid or illegal string was specified")}__privateSet2(this,_parser,createParser$1({onEvent:__privateGet2(this,_onEvent),onRetry:__privateGet2(this,_onRetryChange)})),__privateSet2(this,_readyState,this.CONNECTING),__privateSet2(this,_reconnectInterval,3e3),__privateSet2(this,_fetch,(_a2=eventSourceInitDict?.fetch)!=null?_a2:globalThis.fetch),__privateSet2(this,_withCredentials,(_b=eventSourceInitDict?. -withCredentials)!=null?_b:!1),__privateMethod2(this,_EventSource_instances,connect_fn).call(this)}get readyState(){return __privateGet2(this,_readyState)}get url(){return __privateGet2(this,_url).href}get withCredentials(){return __privateGet2(this,_withCredentials)}get onerror(){return __privateGet2(this,_onError)}set onerror(value){__privateSet2(this,_onError,value)}get onmessage(){return __privateGet2(this,_onMessage)}set onmessage(value){__privateSet2(this,_onMessage,value)}get onopen(){return __privateGet2( -this,_onOpen)}set onopen(value){__privateSet2(this,_onOpen,value)}addEventListener(type2,listener,options){const listen2=listener;super.addEventListener(type2,listen2,options)}removeEventListener(type2,listener,options){const listen2=listener;super.removeEventListener(type2,listen2,options)}close(){__privateGet2(this,_reconnectTimer)&&clearTimeout(__privateGet2(this,_reconnectTimer)),__privateGet2(this,_readyState)!==this.CLOSED&&(__privateGet2(this,_controller)&&__privateGet2(this,_controller). -abort(),__privateSet2(this,_readyState,this.CLOSED),__privateSet2(this,_controller,void 0))}}_readyState=new WeakMap,_url=new WeakMap,_redirectUrl=new WeakMap,_withCredentials=new WeakMap,_fetch=new WeakMap,_reconnectInterval=new WeakMap,_reconnectTimer=new WeakMap,_lastEventId=new WeakMap,_controller=new WeakMap,_parser=new WeakMap,_onError=new WeakMap,_onMessage=new WeakMap,_onOpen=new WeakMap,_EventSource_instances=new WeakSet,connect_fn=function(){__privateSet2(this,_readyState,this.CONNECTING), -__privateSet2(this,_controller,new AbortController),__privateGet2(this,_fetch)(__privateGet2(this,_url),__privateMethod2(this,_EventSource_instances,getRequestOptions_fn).call(this)).then(__privateGet2(this,_onFetchResponse)).catch(__privateGet2(this,_onFetchError))},_onFetchResponse=new WeakMap,_onFetchError=new WeakMap,getRequestOptions_fn=function(){var _a2;const init2={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...__privateGet2(this,_lastEventId)?{"Last-Event-ID":__privateGet2( -this,_lastEventId)}:void 0},cache:"no-store",signal:(_a2=__privateGet2(this,_controller))==null?void 0:_a2.signal};return"window"in globalThis&&(init2.credentials=this.withCredentials?"include":"same-origin"),init2},_onEvent=new WeakMap,_onRetryChange=new WeakMap,failConnection_fn=function(message,code2){var _a2;__privateGet2(this,_readyState)!==this.CLOSED&&__privateSet2(this,_readyState,this.CLOSED);const errorEvent=new ErrorEvent("error",{code:code2,message});(_a2=__privateGet2(this,_onError))== -null||_a2.call(this,errorEvent),this.dispatchEvent(errorEvent)},scheduleReconnect_fn=function(message,code2){var _a2;if(__privateGet2(this,_readyState)===this.CLOSED)return;__privateSet2(this,_readyState,this.CONNECTING);const errorEvent=new ErrorEvent("error",{code:code2,message});(_a2=__privateGet2(this,_onError))==null||_a2.call(this,errorEvent),this.dispatchEvent(errorEvent),__privateSet2(this,_reconnectTimer,setTimeout(__privateGet2(this,_reconnect),__privateGet2(this,_reconnectInterval)))}, -_reconnect=new WeakMap,EventSource.CONNECTING=0,EventSource.OPEN=1,EventSource.CLOSED=2;function getBaseURL(){const doc="document"in globalThis?globalThis.document:void 0;return doc&&typeof doc=="object"&&"baseURI"in doc&&typeof doc.baseURI=="string"?doc.baseURI:void 0}class SseError extends Error{constructor(code2,message,event2){super(`SSE error: ${message}`),this.code=code2,this.event=event2}}class SSEClientTransport{constructor(url2,opts){this._url=url2,this._resourceMetadataUrl=void 0,this. -_scope=void 0,this._eventSourceInit=opts?.eventSourceInit,this._requestInit=opts?.requestInit,this._authProvider=opts?.authProvider,this._fetch=opts?.fetch,this._fetchWithInit=createFetchWithInit(opts?.fetch,opts?.requestInit)}async _authThenStart(){if(!this._authProvider)throw new UnauthorizedError("No auth provider");let result;try{result=await auth(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})}catch(error2){ -throw this.onerror?.(error2),error2}if(result!=="AUTHORIZED")throw new UnauthorizedError;return await this._startOrAuth()}async _commonHeaders(){const headers={};if(this._authProvider){const tokens=await this._authProvider.tokens();tokens&&(headers.Authorization=`Bearer ${tokens.access_token}`)}this._protocolVersion&&(headers["mcp-protocol-version"]=this._protocolVersion);const extraHeaders=normalizeHeaders(this._requestInit?.headers);return new Headers({...headers,...extraHeaders})}_startOrAuth(){ -const fetchImpl=this?._eventSourceInit?.fetch??this._fetch??fetch;return new Promise((resolve2,reject)=>{this._eventSource=new EventSource(this._url.href,{...this._eventSourceInit,fetch:async(url2,init2)=>{const headers=await this._commonHeaders();headers.set("Accept","text/event-stream");const response=await fetchImpl(url2,{...init2,headers});if(response.status===401&&response.headers.has("www-authenticate")){const{resourceMetadataUrl,scope:scope2}=extractWWWAuthenticateParams(response);this._resourceMetadataUrl= -resourceMetadataUrl,this._scope=scope2}return response}}),this._abortController=new AbortController,this._eventSource.onerror=event2=>{if(event2.code===401&&this._authProvider){this._authThenStart().then(resolve2,reject);return}const error2=new SseError(event2.code,event2.message,event2);reject(error2),this.onerror?.(error2)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",event2=>{const messageEvent=event2;try{if(this._endpoint=new URL(messageEvent.data,this._url), -this._endpoint.origin!==this._url.origin)throw new Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(error2){reject(error2),this.onerror?.(error2),this.close();return}resolve2()}),this._eventSource.onmessage=event2=>{const messageEvent=event2;let message;try{message=JSONRPCMessageSchema.parse(JSON.parse(messageEvent.data))}catch(error2){this.onerror?.(error2);return}this.onmessage?.(message)}})}async start(){if(this._eventSource)throw new Error("SSEClientT\ -ransport already started! If using Client class, note that connect() calls start() automatically.");return await this._startOrAuth()}async finishAuth(authorizationCode){if(!this._authProvider)throw new UnauthorizedError("No auth provider");if(await auth(this._authProvider,{serverUrl:this._url,authorizationCode,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new UnauthorizedError("Failed to authorize")}async close(){this._abortController?. -abort(),this._eventSource?.close(),this.onclose?.()}async send(message){if(!this._endpoint)throw new Error("Not connected");try{const headers=await this._commonHeaders();headers.set("content-type","application/json");const init2={...this._requestInit,method:"POST",headers,body:JSON.stringify(message),signal:this._abortController?.signal},response=await(this._fetch??fetch)(this._endpoint,init2);if(!response.ok){const text2=await response.text().catch(()=>null);if(response.status===401&&this._authProvider){ -const{resourceMetadataUrl,scope:scope2}=extractWWWAuthenticateParams(response);if(this._resourceMetadataUrl=resourceMetadataUrl,this._scope=scope2,await auth(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new UnauthorizedError;return this.send(message)}throw new Error(`Error POSTing to endpoint (HTTP ${response.status}): ${text2}`)}await response.body?.cancel()}catch(error2){throw this.onerror?.( -error2),error2}}setProtocolVersion(version2){this._protocolVersion=version2}}const SUBPROTOCOL="mcp";class WebSocketClientTransport{constructor(url2){this._url=url2}start(){if(this._socket)throw new Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((resolve2,reject)=>{this._socket=new WebSocket(this._url,SUBPROTOCOL),this._socket.onerror=event2=>{const error2="error"in event2?event2.error:new Error(`WebSo\ -cket error: ${JSON.stringify(event2)}`);reject(error2),this.onerror?.(error2)},this._socket.onopen=()=>{resolve2()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=event2=>{let message;try{message=JSONRPCMessageSchema.parse(JSON.parse(event2.data))}catch(error2){this.onerror?.(error2);return}this.onmessage?.(message)}})}async close(){this._socket?.close()}send(message){return new Promise((resolve2,reject)=>{if(!this._socket){reject(new Error("Not connected"));return}this._socket?. -send(JSON.stringify(message)),resolve2()})}}class MCPService{static createLog(phase,message,level=MCPLogLevel.INFO,details){return{timestamp:new Date,phase,message,level,details}}static createDiagnosticRequestDetails(input,init2,baseInit,requestHeaders,extraRedactedHeaders){const body2=getRequestBody(input,init2),details={url:getRequestUrl(input),method:getRequestMethod(input,init2,baseInit).toUpperCase(),credentials:init2?.credentials??baseInit.credentials,mode:init2?.mode??baseInit.mode,headers:sanitizeHeaders( -requestHeaders,extraRedactedHeaders,MCP_PARTIAL_REDACT_HEADERS),body:summarizeRequestBody(body2)},jsonRpcMethods=extractJsonRpcMethods(body2);return jsonRpcMethods&&(details.jsonRpcMethods=jsonRpcMethods),details}static summarizeError(error2){return error2 instanceof Error?{name:error2.name,message:error2.message,cause:error2.cause instanceof Error?{name:error2.cause.name,message:error2.cause.message}:error2.cause,stack:error2.stack?.split(` +this,_url$1),__privateAdd2(this,_redirectUrl),__privateAdd2(this,_withCredentials),__privateAdd2(this,_fetch),__privateAdd2(this,_reconnectInterval),__privateAdd2(this,_reconnectTimer),__privateAdd2(this,_lastEventId,null),__privateAdd2(this,_controller),__privateAdd2(this,_parser),__privateAdd2(this,_onError,null),__privateAdd2(this,_onMessage,null),__privateAdd2(this,_onOpen,null),__privateAdd2(this,_onFetchResponse,async response=>{var _a22;__privateGet2(this,_parser).reset();const{body:body2, +redirected,status,headers}=response;if(status===204){__privateMethod2(this,_EventSource_instances,failConnection_fn).call(this,"Server sent HTTP 204, not reconnecting",204),this.close();return}if(redirected?__privateSet2(this,_redirectUrl,new URL(response.url)):__privateSet2(this,_redirectUrl,void 0),status!==200){__privateMethod2(this,_EventSource_instances,failConnection_fn).call(this,`Non-200 status code (${status})`,status);return}if(!(headers.get("content-type")||"").startsWith("text/event-\ +stream")){__privateMethod2(this,_EventSource_instances,failConnection_fn).call(this,'Invalid content type, expected "text/event-stream"',status);return}if(__privateGet2(this,_readyState)===this.CLOSED)return;__privateSet2(this,_readyState,this.OPEN);const openEvent=new Event("open");if((_a22=__privateGet2(this,_onOpen))==null||_a22.call(this,openEvent),this.dispatchEvent(openEvent),typeof body2!="object"||!body2||!("getReader"in body2)){__privateMethod2(this,_EventSource_instances,failConnection_fn). +call(this,"Invalid response body, expected a web ReadableStream",status),this.close();return}const decoder=new TextDecoder,reader=body2.getReader();let open2=!0;do{const{done,value}=await reader.read();value&&__privateGet2(this,_parser).feed(decoder.decode(value,{stream:!done})),done&&(open2=!1,__privateGet2(this,_parser).reset(),__privateMethod2(this,_EventSource_instances,scheduleReconnect_fn).call(this))}while(open2)}),__privateAdd2(this,_onFetchError,err=>{__privateSet2(this,_controller,void 0), +!(err.name==="AbortError"||err.type==="aborted")&&__privateMethod2(this,_EventSource_instances,scheduleReconnect_fn).call(this,flattenError(err))}),__privateAdd2(this,_onEvent,event2=>{typeof event2.id=="string"&&__privateSet2(this,_lastEventId,event2.id);const messageEvent=new MessageEvent(event2.event||"message",{data:event2.data,origin:__privateGet2(this,_redirectUrl)?__privateGet2(this,_redirectUrl).origin:__privateGet2(this,_url$1).origin,lastEventId:event2.id||""});__privateGet2(this,_onMessage)&& +(!event2.event||event2.event==="message")&&__privateGet2(this,_onMessage).call(this,messageEvent),this.dispatchEvent(messageEvent)}),__privateAdd2(this,_onRetryChange,value=>{__privateSet2(this,_reconnectInterval,value)}),__privateAdd2(this,_reconnect,()=>{__privateSet2(this,_reconnectTimer,void 0),__privateGet2(this,_readyState)===this.CONNECTING&&__privateMethod2(this,_EventSource_instances,connect_fn).call(this)});try{if(url2 instanceof URL)__privateSet2(this,_url$1,url2);else if(typeof url2== +"string")__privateSet2(this,_url$1,new URL(url2,getBaseURL()));else throw new Error("Invalid URL")}catch{throw syntaxError("An invalid or illegal string was specified")}__privateSet2(this,_parser,createParser$1({onEvent:__privateGet2(this,_onEvent),onRetry:__privateGet2(this,_onRetryChange)})),__privateSet2(this,_readyState,this.CONNECTING),__privateSet2(this,_reconnectInterval,3e3),__privateSet2(this,_fetch,(_a2=eventSourceInitDict?.fetch)!=null?_a2:globalThis.fetch),__privateSet2(this,_withCredentials, +(_b=eventSourceInitDict?.withCredentials)!=null?_b:!1),__privateMethod2(this,_EventSource_instances,connect_fn).call(this)}get readyState(){return __privateGet2(this,_readyState)}get url(){return __privateGet2(this,_url$1).href}get withCredentials(){return __privateGet2(this,_withCredentials)}get onerror(){return __privateGet2(this,_onError)}set onerror(value){__privateSet2(this,_onError,value)}get onmessage(){return __privateGet2(this,_onMessage)}set onmessage(value){__privateSet2(this,_onMessage, +value)}get onopen(){return __privateGet2(this,_onOpen)}set onopen(value){__privateSet2(this,_onOpen,value)}addEventListener(type2,listener,options){const listen2=listener;super.addEventListener(type2,listen2,options)}removeEventListener(type2,listener,options){const listen2=listener;super.removeEventListener(type2,listen2,options)}close(){__privateGet2(this,_reconnectTimer)&&clearTimeout(__privateGet2(this,_reconnectTimer)),__privateGet2(this,_readyState)!==this.CLOSED&&(__privateGet2(this,_controller)&& +__privateGet2(this,_controller).abort(),__privateSet2(this,_readyState,this.CLOSED),__privateSet2(this,_controller,void 0))}}_readyState=new WeakMap,_url$1=new WeakMap,_redirectUrl=new WeakMap,_withCredentials=new WeakMap,_fetch=new WeakMap,_reconnectInterval=new WeakMap,_reconnectTimer=new WeakMap,_lastEventId=new WeakMap,_controller=new WeakMap,_parser=new WeakMap,_onError=new WeakMap,_onMessage=new WeakMap,_onOpen=new WeakMap,_EventSource_instances=new WeakSet,connect_fn=function(){__privateSet2( +this,_readyState,this.CONNECTING),__privateSet2(this,_controller,new AbortController),__privateGet2(this,_fetch)(__privateGet2(this,_url$1),__privateMethod2(this,_EventSource_instances,getRequestOptions_fn).call(this)).then(__privateGet2(this,_onFetchResponse)).catch(__privateGet2(this,_onFetchError))},_onFetchResponse=new WeakMap,_onFetchError=new WeakMap,getRequestOptions_fn=function(){var _a2;const init2={mode:"cors",redirect:"follow",headers:{Accept:"text/event-stream",...__privateGet2(this, +_lastEventId)?{"Last-Event-ID":__privateGet2(this,_lastEventId)}:void 0},cache:"no-store",signal:(_a2=__privateGet2(this,_controller))==null?void 0:_a2.signal};return"window"in globalThis&&(init2.credentials=this.withCredentials?"include":"same-origin"),init2},_onEvent=new WeakMap,_onRetryChange=new WeakMap,failConnection_fn=function(message,code2){var _a2;__privateGet2(this,_readyState)!==this.CLOSED&&__privateSet2(this,_readyState,this.CLOSED);const errorEvent=new ErrorEvent("error",{code:code2, +message});(_a2=__privateGet2(this,_onError))==null||_a2.call(this,errorEvent),this.dispatchEvent(errorEvent)},scheduleReconnect_fn=function(message,code2){var _a2;if(__privateGet2(this,_readyState)===this.CLOSED)return;__privateSet2(this,_readyState,this.CONNECTING);const errorEvent=new ErrorEvent("error",{code:code2,message});(_a2=__privateGet2(this,_onError))==null||_a2.call(this,errorEvent),this.dispatchEvent(errorEvent),__privateSet2(this,_reconnectTimer,setTimeout(__privateGet2(this,_reconnect), +__privateGet2(this,_reconnectInterval)))},_reconnect=new WeakMap,EventSource.CONNECTING=0,EventSource.OPEN=1,EventSource.CLOSED=2;function getBaseURL(){const doc="document"in globalThis?globalThis.document:void 0;return doc&&typeof doc=="object"&&"baseURI"in doc&&typeof doc.baseURI=="string"?doc.baseURI:void 0}class SseError extends Error{constructor(code2,message,event2){super(`SSE error: ${message}`),this.code=code2,this.event=event2}}class SSEClientTransport{constructor(url2,opts){this._url=url2, +this._resourceMetadataUrl=void 0,this._scope=void 0,this._eventSourceInit=opts?.eventSourceInit,this._requestInit=opts?.requestInit,this._authProvider=opts?.authProvider,this._fetch=opts?.fetch,this._fetchWithInit=createFetchWithInit(opts?.fetch,opts?.requestInit)}async _authThenStart(){if(!this._authProvider)throw new UnauthorizedError("No auth provider");let result;try{result=await auth(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this. +_fetchWithInit})}catch(error2){throw this.onerror?.(error2),error2}if(result!=="AUTHORIZED")throw new UnauthorizedError;return await this._startOrAuth()}async _commonHeaders(){const headers={};if(this._authProvider){const tokens=await this._authProvider.tokens();tokens&&(headers.Authorization=`Bearer ${tokens.access_token}`)}this._protocolVersion&&(headers["mcp-protocol-version"]=this._protocolVersion);const extraHeaders=normalizeHeaders(this._requestInit?.headers);return new Headers({...headers, +...extraHeaders})}_startOrAuth(){const fetchImpl=this?._eventSourceInit?.fetch??this._fetch??fetch;return new Promise((resolve2,reject)=>{this._eventSource=new EventSource(this._url.href,{...this._eventSourceInit,fetch:async(url2,init2)=>{const headers=await this._commonHeaders();headers.set("Accept","text/event-stream");const response=await fetchImpl(url2,{...init2,headers});if(response.status===401&&response.headers.has("www-authenticate")){const{resourceMetadataUrl,scope:scope2}=extractWWWAuthenticateParams( +response);this._resourceMetadataUrl=resourceMetadataUrl,this._scope=scope2}return response}}),this._abortController=new AbortController,this._eventSource.onerror=event2=>{if(event2.code===401&&this._authProvider){this._authThenStart().then(resolve2,reject);return}const error2=new SseError(event2.code,event2.message,event2);reject(error2),this.onerror?.(error2)},this._eventSource.onopen=()=>{},this._eventSource.addEventListener("endpoint",event2=>{const messageEvent=event2;try{if(this._endpoint=new URL( +messageEvent.data,this._url),this._endpoint.origin!==this._url.origin)throw new Error(`Endpoint origin does not match connection origin: ${this._endpoint.origin}`)}catch(error2){reject(error2),this.onerror?.(error2),this.close();return}resolve2()}),this._eventSource.onmessage=event2=>{const messageEvent=event2;let message;try{message=JSONRPCMessageSchema.parse(JSON.parse(messageEvent.data))}catch(error2){this.onerror?.(error2);return}this.onmessage?.(message)}})}async start(){if(this._eventSource) +throw new Error("SSEClientTransport already started! If using Client class, note that connect() calls start() automatically.");return await this._startOrAuth()}async finishAuth(authorizationCode){if(!this._authProvider)throw new UnauthorizedError("No auth provider");if(await auth(this._authProvider,{serverUrl:this._url,authorizationCode,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new UnauthorizedError("Failed to authorize")}async close(){ +this._abortController?.abort(),this._eventSource?.close(),this.onclose?.()}async send(message){if(!this._endpoint)throw new Error("Not connected");try{const headers=await this._commonHeaders();headers.set("content-type","application/json");const init2={...this._requestInit,method:"POST",headers,body:JSON.stringify(message),signal:this._abortController?.signal},response=await(this._fetch??fetch)(this._endpoint,init2);if(!response.ok){const text2=await response.text().catch(()=>null);if(response.status=== +401&&this._authProvider){const{resourceMetadataUrl,scope:scope2}=extractWWWAuthenticateParams(response);if(this._resourceMetadataUrl=resourceMetadataUrl,this._scope=scope2,await auth(this._authProvider,{serverUrl:this._url,resourceMetadataUrl:this._resourceMetadataUrl,scope:this._scope,fetchFn:this._fetchWithInit})!=="AUTHORIZED")throw new UnauthorizedError;return this.send(message)}throw new Error(`Error POSTing to endpoint (HTTP ${response.status}): ${text2}`)}await response.body?.cancel()}catch(error2){ +throw this.onerror?.(error2),error2}}setProtocolVersion(version2){this._protocolVersion=version2}}const SUBPROTOCOL="mcp";class WebSocketClientTransport{constructor(url2){this._url=url2}start(){if(this._socket)throw new Error("WebSocketClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((resolve2,reject)=>{this._socket=new WebSocket(this._url,SUBPROTOCOL),this._socket.onerror=event2=>{const error2="error"in event2?event2.error: +new Error(`WebSocket error: ${JSON.stringify(event2)}`);reject(error2),this.onerror?.(error2)},this._socket.onopen=()=>{resolve2()},this._socket.onclose=()=>{this.onclose?.()},this._socket.onmessage=event2=>{let message;try{message=JSONRPCMessageSchema.parse(JSON.parse(event2.data))}catch(error2){this.onerror?.(error2);return}this.onmessage?.(message)}})}async close(){this._socket?.close()}send(message){return new Promise((resolve2,reject)=>{if(!this._socket){reject(new Error("Not connected"));return} +this._socket?.send(JSON.stringify(message)),resolve2()})}}class MCPService{static createLog(phase,message,level=MCPLogLevel.INFO,details){return{timestamp:new Date,phase,message,level,details}}static createDiagnosticRequestDetails(input,init2,baseInit,requestHeaders,extraRedactedHeaders){const body2=getRequestBody(input,init2),details={url:getRequestUrl(input),method:getRequestMethod(input,init2,baseInit).toUpperCase(),credentials:init2?.credentials??baseInit.credentials,mode:init2?.mode??baseInit. +mode,headers:sanitizeHeaders(requestHeaders,extraRedactedHeaders,MCP_PARTIAL_REDACT_HEADERS),body:summarizeRequestBody(body2)},jsonRpcMethods=extractJsonRpcMethods(body2);return jsonRpcMethods&&(details.jsonRpcMethods=jsonRpcMethods),details}static summarizeError(error2){return error2 instanceof Error?{name:error2.name,message:error2.message,cause:error2.cause instanceof Error?{name:error2.cause.name,message:error2.cause.message}:error2.cause,stack:error2.stack?.split(` `).slice(0,6).join(` `)}:{value:String(error2)}}static getBrowserContext(targetUrl,useProxy){if(!(typeof window>"u"))return{location:window.location.href,origin:window.location.origin,protocol:window.location.protocol,isSecureContext:window.isSecureContext,targetOrigin:targetUrl.origin,targetProtocol:targetUrl.protocol,sameOrigin:window.location.origin===targetUrl.origin,useProxy}}static getConnectionHints(targetUrl,config2,error2){const hints=[],message=error2 instanceof Error?error2.message:String(error2),headerNames=Object. keys(config2.headers??{});return typeof window<"u"&&(window.location.protocol==="https:"&&targetUrl.protocol==="http:"&&!config2.useProxy&&hints.push("The page is running over HTTPS but the MCP server is HTTP. Browsers often block this as mixed content; enable the proxy or use HTTPS/WSS for the MCP server."),window.location.origin!==targetUrl.origin&&!config2.useProxy&&hints.push("This is a cross-origin browser request. If the server is reachable from curl or Node but not from the browser, missi\ @@ -4927,8 +5011,8 @@ error2))throw error2;return console.warn(`[MCPService][${connection.serverName}] return{resourceTemplates:result.resourceTemplates??[],nextCursor:result.nextCursor}}catch(error2){if(this.isSessionExpiredError(error2))throw error2;return console.warn(`[MCPService][${connection.serverName}] Failed to list resource templates:`,error2),{resourceTemplates:[]}}}static async listAllResourceTemplates(connection){const allTemplates=[];let cursor;do{const result=await this.listResourceTemplates(connection,cursor);allTemplates.push(...result.resourceTemplates),cursor=result.nextCursor}while(cursor); return allTemplates}static async readResource(connection,uri2){try{const result=await connection.client.readResource({uri:uri2});return{contents:result.contents??[],_meta:result._meta}}catch(error2){throw console.error(`[MCPService][${connection.serverName}] Failed to read resource:`,error2),error2}}static async subscribeResource(connection,uri2){try{await connection.client.subscribeResource({uri:uri2}),console.log(`[MCPService][${connection.serverName}] Subscribed to resource: ${uri2}`)}catch(error2){ throw console.error(`[MCPService][${connection.serverName}] Failed to subscribe to resource:`,error2),error2}}static async unsubscribeResource(connection,uri2){try{await connection.client.unsubscribeResource({uri:uri2}),console.log(`[MCPService][${connection.serverName}] Unsubscribed from resource: ${uri2}`)}catch(error2){throw console.error(`[MCPService][${connection.serverName}] Failed to unsubscribe from resource:`,error2),error2}}static supportsResources(connection){return connection.serverCapabilities?. -resources!==void 0}static supportsResourceSubscriptions(connection){return!!connection.serverCapabilities?.resources?.subscribe}}function generateAttachmentId(){return`${MCP_RESOURCE_ATTACHMENT_ID_PREFIX}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}class MCPResourceStore{#_serverResources=state$1(proxy(new SvelteMap));get _serverResources(){return get$4(this.#_serverResources)}set _serverResources(value){set$1(this.#_serverResources,value,!0)}#_cachedResources=state$1(proxy(new SvelteMap));get _cachedResources(){ -return get$4(this.#_cachedResources)}set _cachedResources(value){set$1(this.#_cachedResources,value,!0)}#_subscriptions=state$1(proxy(new SvelteMap));get _subscriptions(){return get$4(this.#_subscriptions)}set _subscriptions(value){set$1(this.#_subscriptions,value,!0)}#_attachments=state$1(proxy([]));get _attachments(){return get$4(this.#_attachments)}set _attachments(value){set$1(this.#_attachments,value,!0)}#_isLoading=state$1(!1);get _isLoading(){return get$4(this.#_isLoading)}set _isLoading(value){ +resources!==void 0}static supportsResourceSubscriptions(connection){return!!connection.serverCapabilities?.resources?.subscribe}}function generateAttachmentId(){return`${MCP_RESOURCE_ATTACHMENT_ID_PREFIX}-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}class MCPResourceStore{#_serverResources=state$1(proxy(new SvelteMap));get _serverResources(){return get$3(this.#_serverResources)}set _serverResources(value){set$1(this.#_serverResources,value,!0)}#_cachedResources=state$1(proxy(new SvelteMap));get _cachedResources(){ +return get$3(this.#_cachedResources)}set _cachedResources(value){set$1(this.#_cachedResources,value,!0)}#_subscriptions=state$1(proxy(new SvelteMap));get _subscriptions(){return get$3(this.#_subscriptions)}set _subscriptions(value){set$1(this.#_subscriptions,value,!0)}#_attachments=state$1(proxy([]));get _attachments(){return get$3(this.#_attachments)}set _attachments(value){set$1(this.#_attachments,value,!0)}#_isLoading=state$1(!1);get _isLoading(){return get$3(this.#_isLoading)}set _isLoading(value){ set$1(this.#_isLoading,value,!0)}get serverResources(){return this._serverResources}get cachedResources(){return this._cachedResources}get subscriptions(){return this._subscriptions}get attachments(){return this._attachments}get isLoading(){return this._isLoading}get totalResourceCount(){let count=0;for(const serverRes of this._serverResources.values())count+=serverRes.resources.length;return count}get totalTemplateCount(){let count=0;for(const serverRes of this._serverResources.values())count+= serverRes.templates.length;return count}get attachmentCount(){return this._attachments.length}get hasAttachments(){return this._attachments.length>0}setServerResources(serverName,resources,templates){this._serverResources.set(serverName,{serverName,resources,templates,lastFetched:new Date,loading:!1,error:void 0}),console.log(`[MCPResources][${serverName}] Set ${resources.length} resources, ${templates.length} templates`)}setServerLoading(serverName,loading){const existing=this._serverResources. get(serverName);existing?this._serverResources.set(serverName,{...existing,loading}):this._serverResources.set(serverName,{serverName,resources:[],templates:[],loading,error:void 0})}setServerError(serverName,error2){const existing=this._serverResources.get(serverName);existing?this._serverResources.set(serverName,{...existing,loading:!1,error:error2}):this._serverResources.set(serverName,{serverName,resources:[],templates:[],loading:!1,error:error2})}getServerResources(serverName){return this._serverResources. @@ -4954,11 +5038,11 @@ hasAttachments,mcpTotalResourceCount=()=>mcpResourceStore.totalResourceCount,mcp document:document2=window2?.document}=options;window2!==void 0&&(this.#document=document2,this.#subscribe=createSubscriber(update2=>{const cleanupFocusIn=on(window2,"focusin",update2),cleanupFocusOut=on(window2,"focusout",update2);return()=>{cleanupFocusIn(),cleanupFocusOut()}}))}get current(){return this.#subscribe?.(),this.#document?getActiveElement$1(this.#document):null}};new ActiveElement$1;function runEffect(flush,effect2){switch(flush){case"post":user_effect(effect2);break;case"pre":user_pre_effect( effect2);break}}function runWatcher(sources,flush,effect2,options={}){const{lazy=!1}=options;let active=!lazy,previousValues=Array.isArray(sources)?[]:void 0;runEffect(flush,()=>{const values=Array.isArray(sources)?sources.map(source2=>source2()):sources();if(!active){active=!0,previousValues=values;return}const cleanup=untrack$1(()=>effect2(values,previousValues));return previousValues=values,cleanup})}function watch(sources,effect2,options){runWatcher(sources,"post",effect2,options)}function watchPre(sources,effect2,options){ runWatcher(sources,"pre",effect2,options)}watch.pre=watchPre;function getStorage(storageType,window2){switch(storageType){case"local":return window2.localStorage;case"session":return window2.sessionStorage}}class PersistedState{#current;#key;#serializer;#storage;#subscribe;#version=state$1(0);constructor(key2,initialValue,options={}){const{storage:storageType="local",serializer:serializer2={serialize:JSON.stringify,deserialize:JSON.parse},syncTabs=!0,window:window2=defaultWindow$1}=options;if(this.#current= -initialValue,this.#key=key2,this.#serializer=serializer2,window2===void 0)return;const storage=getStorage(storageType,window2);this.#storage=storage;const existingValue=storage.getItem(key2);existingValue!==null?this.#current=this.#deserialize(existingValue):this.#serialize(initialValue),syncTabs&&storageType==="local"&&(this.#subscribe=createSubscriber(()=>on(window2,"storage",this.#handleStorageEvent)))}get current(){this.#subscribe?.(),get$4(this.#version);const root2=this.#deserialize(this.#storage?. -getItem(this.#key))??this.#current,proxies=new WeakMap,proxy2=value=>{if(value===null||value?.constructor.name==="Date"||typeof value!="object")return value;let p2=proxies.get(value);return p2||(p2=new Proxy(value,{get:(target2,property)=>(get$4(this.#version),proxy2(Reflect.get(target2,property))),set:(target2,property,value2)=>(set$1(this.#version,get$4(this.#version)+1),Reflect.set(target2,property,value2),this.#serialize(root2),!0)}),proxies.set(value,p2)),p2};return proxy2(root2)}set current(newValue){ -this.#serialize(newValue),set$1(this.#version,get$4(this.#version)+1)}#handleStorageEvent=event2=>{event2.key!==this.#key||event2.newValue===null||(this.#current=this.#deserialize(event2.newValue),set$1(this.#version,get$4(this.#version)+1))};#deserialize(value){try{return this.#serializer.deserialize(value)}catch(error2){console.error(`Error when parsing "${value}" from persisted store "${this.#key}"`,error2);return}}#serialize(value){try{value!=null&&this.#storage?.setItem(this.#key,this.#serializer. +initialValue,this.#key=key2,this.#serializer=serializer2,window2===void 0)return;const storage=getStorage(storageType,window2);this.#storage=storage;const existingValue=storage.getItem(key2);existingValue!==null?this.#current=this.#deserialize(existingValue):this.#serialize(initialValue),syncTabs&&storageType==="local"&&(this.#subscribe=createSubscriber(()=>on(window2,"storage",this.#handleStorageEvent)))}get current(){this.#subscribe?.(),get$3(this.#version);const root2=this.#deserialize(this.#storage?. +getItem(this.#key))??this.#current,proxies=new WeakMap,proxy2=value=>{if(value===null||value?.constructor.name==="Date"||typeof value!="object")return value;let p2=proxies.get(value);return p2||(p2=new Proxy(value,{get:(target2,property)=>(get$3(this.#version),proxy2(Reflect.get(target2,property))),set:(target2,property,value2)=>(set$1(this.#version,get$3(this.#version)+1),Reflect.set(target2,property,value2),this.#serialize(root2),!0)}),proxies.set(value,p2)),p2};return proxy2(root2)}set current(newValue){ +this.#serialize(newValue),set$1(this.#version,get$3(this.#version)+1)}#handleStorageEvent=event2=>{event2.key!==this.#key||event2.newValue===null||(this.#current=this.#deserialize(event2.newValue),set$1(this.#version,get$3(this.#version)+1))};#deserialize(value){try{return this.#serializer.deserialize(value)}catch(error2){console.error(`Error when parsing "${value}" from persisted store "${this.#key}"`,error2);return}}#serialize(value){try{value!=null&&this.#storage?.setItem(this.#key,this.#serializer. serialize(value))}catch(error2){console.error(`Error when writing value from persisted store "${this.#key}" to ${this.#storage}`,error2)}}}function sanitizeClassNames(classNames){return classNames.filter(className=>className.length>0)}const noopStorage={getItem:_key=>null,setItem:(_key,_value)=>{}},isBrowser=typeof document<"u";function isFunction(value){return typeof value=="function"}function isObject(value){return value!==null&&typeof value=="object"}const BoxSymbol=Symbol("box"),isWritableSymbol=Symbol( -"is-writable");function isBox(value){return isObject(value)&&BoxSymbol in value}function isWritableBox(value){return box.isBox(value)&&isWritableSymbol in value}function box(initialValue){let current2=state$1(proxy(initialValue));return{[BoxSymbol]:!0,[isWritableSymbol]:!0,get current(){return get$4(current2)},set current(v){set$1(current2,v,!0)}}}function boxWith(getter,setter){const derived2=user_derived(getter);return setter?{[BoxSymbol]:!0,[isWritableSymbol]:!0,get current(){return get$4(derived2)}, +"is-writable");function isBox(value){return isObject(value)&&BoxSymbol in value}function isWritableBox(value){return box.isBox(value)&&isWritableSymbol in value}function box(initialValue){let current2=state$1(proxy(initialValue));return{[BoxSymbol]:!0,[isWritableSymbol]:!0,get current(){return get$3(current2)},set current(v){set$1(current2,v,!0)}}}function boxWith(getter,setter){const derived2=user_derived(getter);return setter?{[BoxSymbol]:!0,[isWritableSymbol]:!0,get current(){return get$3(derived2)}, set current(v){setter(v)}}:{[BoxSymbol]:!0,get current(){return getter()}}}function boxFrom(value){return box.isBox(value)?value:isFunction(value)?box.with(value):box(value)}function boxFlatten(boxes){return Object.entries(boxes).reduce((acc,[key2,b])=>box.isBox(b)?(box.isWritableBox(b)?Object.defineProperty(acc,key2,{get(){return b.current},set(v){b.current=v}}):Object.defineProperty(acc,key2,{get(){return b.current}}),acc):Object.assign(acc,{[key2]:b}),{})}function toReadonlyBox(b){return box. isWritableBox(b)?{[BoxSymbol]:!0,get current(){return b.current}}:b}box.from=boxFrom;box.with=boxWith;box.flatten=boxFlatten;box.readonly=toReadonlyBox;box.isBox=isBox;box.isWritableBox=isWritableBox;function createParser(matcher,replacer){const regex=RegExp(matcher,"g");return str=>{if(typeof str!="string")throw new TypeError(`expected an argument of type string, but got ${typeof str}`);return str.match(regex)?str.replace(regex,replacer):str}}const camelToKebab=createParser(/[A-Z]/,match=>`-${match. toLowerCase()}`);function styleToCSS(styleObj){if(!styleObj||typeof styleObj!="object"||Array.isArray(styleObj))throw new TypeError(`expected an argument of type object, but got ${typeof styleObj}`);return Object.keys(styleObj).map(property=>`${camelToKebab(property)}: ${styleObj[property]};`).join(` @@ -4966,10 +5050,10 @@ toLowerCase()}`);function styleToCSS(styleObj){if(!styleObj||typeof styleObj!="o `," ")}const srOnlyStyles={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",transform:"translateX(-100%)"};styleToString(srOnlyStyles);const defaultWindow=typeof window<"u"?window:void 0;function getActiveElement(document2){let activeElement=document2.activeElement;for(;activeElement?.shadowRoot;){const node2=activeElement.shadowRoot.activeElement;if(node2===activeElement)break;activeElement=node2} return activeElement}class ActiveElement4{#document;#subscribe;constructor(options={}){const{window:window2=defaultWindow,document:document2=window2?.document}=options;window2!==void 0&&(this.#document=document2,this.#subscribe=createSubscriber(update2=>{const cleanupFocusIn=on(window2,"focusin",update2),cleanupFocusOut=on(window2,"focusout",update2);return()=>{cleanupFocusIn(),cleanupFocusOut()}}))}get current(){return this.#subscribe?.(),this.#document?getActiveElement(this.#document):null}}new ActiveElement4; const modeStorageKey=box("mode-watcher-mode"),themeStorageKey=box("mode-watcher-theme"),modes=["dark","light","system"];function isValidMode(value){return typeof value!="string"?!1:modes.includes(value)}class UserPrefersMode{#defaultValue="system";#storage=isBrowser?localStorage:noopStorage;#initialValue=this.#storage.getItem(modeStorageKey.current);#value=isValidMode(this.#initialValue)?this.#initialValue:this.#defaultValue;#persisted=state$1(proxy(this.#makePersisted()));#makePersisted(value=this.#value){ -return new PersistedState(modeStorageKey.current,value,{serializer:{serialize:v=>v,deserialize:v=>isValidMode(v)?v:this.#defaultValue}})}constructor(){effect_root(()=>watch.pre(()=>modeStorageKey.current,(_,prevStorageKey)=>{const currModeValue=get$4(this.#persisted).current;set$1(this.#persisted,this.#makePersisted(currModeValue),!0),prevStorageKey&&localStorage.removeItem(prevStorageKey)}))}get current(){return get$4(this.#persisted).current}set current(newValue){get$4(this.#persisted).current= +return new PersistedState(modeStorageKey.current,value,{serializer:{serialize:v=>v,deserialize:v=>isValidMode(v)?v:this.#defaultValue}})}constructor(){effect_root(()=>watch.pre(()=>modeStorageKey.current,(_,prevStorageKey)=>{const currModeValue=get$3(this.#persisted).current;set$1(this.#persisted,this.#makePersisted(currModeValue),!0),prevStorageKey&&localStorage.removeItem(prevStorageKey)}))}get current(){return get$3(this.#persisted).current}set current(newValue){get$3(this.#persisted).current= newValue}}class SystemPrefersMode{#defaultValue=void 0;#track=!0;#current=state$1(proxy(this.#defaultValue));#mediaQueryState=typeof window<"u"&&typeof window.matchMedia=="function"?new MediaQuery("prefers-color-scheme: light"):{current:!1};query(){isBrowser&&set$1(this.#current,this.#mediaQueryState.current?"light":"dark",!0)}tracking(active){this.#track=active}constructor(){effect_root(()=>{user_pre_effect(()=>{this.#track&&this.query()})}),this.query=this.query.bind(this),this.tracking=this.tracking. -bind(this)}get current(){return get$4(this.#current)}}const userPrefersMode=new UserPrefersMode,systemPrefersMode=new SystemPrefersMode;class CustomTheme{#storage=isBrowser?localStorage:noopStorage;#initialValue=this.#storage.getItem(themeStorageKey.current);#value=this.#initialValue===null||this.#initialValue===void 0?"":this.#initialValue;#persisted=state$1(proxy(this.#makePersisted()));#makePersisted(value=this.#value){return new PersistedState(themeStorageKey.current,value,{serializer:{serialize:v=>typeof v!= -"string"?"":v,deserialize:v=>v}})}constructor(){effect_root(()=>watch.pre(()=>themeStorageKey.current,(_,prevStorageKey)=>{const currModeValue=get$4(this.#persisted).current;set$1(this.#persisted,this.#makePersisted(currModeValue),!0),prevStorageKey&&localStorage.removeItem(prevStorageKey)}))}get current(){return get$4(this.#persisted).current}set current(newValue){get$4(this.#persisted).current=newValue}}const customTheme=new CustomTheme;let timeoutAction,timeoutEnable,hasLoaded=!1,styleElement=null; +bind(this)}get current(){return get$3(this.#current)}}const userPrefersMode=new UserPrefersMode,systemPrefersMode=new SystemPrefersMode;class CustomTheme{#storage=isBrowser?localStorage:noopStorage;#initialValue=this.#storage.getItem(themeStorageKey.current);#value=this.#initialValue===null||this.#initialValue===void 0?"":this.#initialValue;#persisted=state$1(proxy(this.#makePersisted()));#makePersisted(value=this.#value){return new PersistedState(themeStorageKey.current,value,{serializer:{serialize:v=>typeof v!= +"string"?"":v,deserialize:v=>v}})}constructor(){effect_root(()=>watch.pre(()=>themeStorageKey.current,(_,prevStorageKey)=>{const currModeValue=get$3(this.#persisted).current;set$1(this.#persisted,this.#makePersisted(currModeValue),!0),prevStorageKey&&localStorage.removeItem(prevStorageKey)}))}get current(){return get$3(this.#persisted).current}set current(newValue){get$3(this.#persisted).current=newValue}}const customTheme=new CustomTheme;let timeoutAction,timeoutEnable,hasLoaded=!1,styleElement=null; function getStyleElement(){return styleElement||(styleElement=document.createElement("style"),styleElement.appendChild(document.createTextNode(`* { -webkit-transition: none !important; -moz-transition: none !important; @@ -4980,19 +5064,19 @@ function getStyleElement(){return styleElement||(styleElement=document.createEle requestAnimationFrame<"u"){disable2(),synchronous?executeAction():window.requestAnimationFrame(()=>{executeAction()});return}disable2(),timeoutAction=window.setTimeout(()=>{action2(),timeoutEnable=window.setTimeout(enable,16)},16)}const themeColors=box(void 0),disableTransitions=box(!0),synchronousModeChanges=box(!1),darkClassNames=box([]),lightClassNames=box([]);function createDerivedMode(){const current2=user_derived(()=>{if(!isBrowser)return;const derivedMode2=userPrefersMode.current==="syste\ m"?systemPrefersMode.current:userPrefersMode.current,sanitizedDarkClassNames=sanitizeClassNames(darkClassNames.current),sanitizedLightClassNames=sanitizeClassNames(lightClassNames.current);function update2(){const htmlEl=document.documentElement,themeColorEl=document.querySelector('meta[name="theme-color"]');derivedMode2==="light"?(sanitizedDarkClassNames.length&&htmlEl.classList.remove(...sanitizedDarkClassNames),sanitizedLightClassNames.length&&htmlEl.classList.add(...sanitizedLightClassNames), htmlEl.style.colorScheme="light",themeColorEl&&themeColors.current&&themeColorEl.setAttribute("content",themeColors.current.light)):(sanitizedLightClassNames.length&&htmlEl.classList.remove(...sanitizedLightClassNames),sanitizedDarkClassNames.length&&htmlEl.classList.add(...sanitizedDarkClassNames),htmlEl.style.colorScheme="dark",themeColorEl&&themeColors.current&&themeColorEl.setAttribute("content",themeColors.current.dark))}return disableTransitions.current?withoutTransition(update2,synchronousModeChanges. -current):update2(),derivedMode2});return{get current(){return get$4(current2)}}}function createDerivedTheme(){const current2=user_derived(()=>{if(customTheme.current,!isBrowser)return;function update2(){document.documentElement.setAttribute("data-theme",customTheme.current)}return disableTransitions.current?withoutTransition(update2,untrack$1(()=>synchronousModeChanges.current)):update2(),customTheme.current});return{get current(){return get$4(current2)}}}const derivedMode=createDerivedMode(),derivedTheme=createDerivedTheme(); +current):update2(),derivedMode2});return{get current(){return get$3(current2)}}}function createDerivedTheme(){const current2=user_derived(()=>{if(customTheme.current,!isBrowser)return;function update2(){document.documentElement.setAttribute("data-theme",customTheme.current)}return disableTransitions.current?withoutTransition(update2,untrack$1(()=>synchronousModeChanges.current)):update2(),customTheme.current});return{get current(){return get$3(current2)}}}const derivedMode=createDerivedMode(),derivedTheme=createDerivedTheme(); function setMode(mode){userPrefersMode.current=mode}function setTheme(newTheme){customTheme.current=newTheme}function setInitialMode({defaultMode="system",themeColors:themeColors2,darkClassNames:darkClassNames2=["dark"],lightClassNames:lightClassNames2=[],defaultTheme="",modeStorageKey:modeStorageKey2="mode-watcher-mode",themeStorageKey:themeStorageKey2="mode-watcher-theme"}){const rootEl=document.documentElement,mode=localStorage.getItem(modeStorageKey2)??defaultMode,theme=localStorage.getItem(themeStorageKey2)??defaultTheme,light=mode==="light"||mode==="system"&&window.matchMedia("(prefers-color-sche\ me: light)").matches;if(light?(darkClassNames2.length&&rootEl.classList.remove(...darkClassNames2.filter(Boolean)),lightClassNames2.length&&rootEl.classList.add(...lightClassNames2.filter(Boolean))):(lightClassNames2.length&&rootEl.classList.remove(...lightClassNames2.filter(Boolean)),darkClassNames2.length&&rootEl.classList.add(...darkClassNames2.filter(Boolean))),rootEl.style.colorScheme=light?"light":"dark",themeColors2){const themeMetaEl=document.querySelector('meta[name="theme-color"]');themeMetaEl&& themeMetaEl.setAttribute("content",mode==="light"?themeColors2.light:themeColors2.dark)}theme&&(rootEl.setAttribute("data-theme",theme),localStorage.setItem(themeStorageKey2,theme)),localStorage.setItem(modeStorageKey2,mode)}var root_1$Y=from_html('<meta name="theme-color"/>');function Mode_watcher_lite($$anchor,$$props){push$1($$props,!0);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var meta=root_1$Y();template_effect(()=>set_attribute(meta,"content",$$props. -themeColors.dark)),append($$anchor2,meta)};if_block(node2,$$render=>{$$props.themeColors&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_2$13=from_html('<meta name="theme-color"/>'),root_1$X=from_html("<!> <!>",1);function Mode_watcher_full($$anchor,$$props){push$1($$props,!0);let trueNonce=prop($$props,"trueNonce",3,"");head$1("1funsus",$$anchor2=>{var fragment=root_1$X(),node2=first_child(fragment);{var consequent=$$anchor3=>{var meta=root_2$13();template_effect(()=>set_attribute( +themeColors.dark)),append($$anchor2,meta)};if_block(node2,$$render=>{$$props.themeColors&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_2$1c=from_html('<meta name="theme-color"/>'),root_1$X=from_html("<!> <!>",1);function Mode_watcher_full($$anchor,$$props){push$1($$props,!0);let trueNonce=prop($$props,"trueNonce",3,"");head$1("1funsus",$$anchor2=>{var fragment=root_1$X(),node2=first_child(fragment);{var consequent=$$anchor3=>{var meta=root_2$1c();template_effect(()=>set_attribute( meta,"content",$$props.themeColors.dark)),append($$anchor3,meta)};if_block(node2,$$render=>{$$props.themeColors&&$$render(consequent)})}var node_1=sibling(node2,2);html$6(node_1,()=>`<script${trueNonce()?` nonce=${trueNonce()}`:""}>(`+setInitialMode.toString()+")("+JSON.stringify($$props.initConfig)+");<\/script>"),append($$anchor2,fragment)}),pop()}function Mode_watcher($$anchor,$$props){push$1($$props,!0);let track2=prop($$props,"track",3,!0),defaultMode=prop($$props,"defaultMode",3,"system"), disableTransitionsProp=prop($$props,"disableTransitions",3,!0),darkClassNamesProp=prop($$props,"darkClassNames",19,()=>["dark"]),lightClassNamesProp=prop($$props,"lightClassNames",19,()=>[]),defaultTheme=prop($$props,"defaultTheme",3,""),nonce=prop($$props,"nonce",3,""),themeStorageKeyProp=prop($$props,"themeStorageKey",3,"mode-watcher-theme"),modeStorageKeyProp=prop($$props,"modeStorageKey",3,"mode-watcher-mode"),disableHeadScriptInjection=prop($$props,"disableHeadScriptInjection",3,!1),synchronousModeChangesProp=prop( $$props,"synchronousModeChanges",3,!1);modeStorageKey.current=modeStorageKeyProp(),themeStorageKey.current=themeStorageKeyProp(),darkClassNames.current=darkClassNamesProp(),lightClassNames.current=lightClassNamesProp(),disableTransitions.current=disableTransitionsProp(),themeColors.current=$$props.themeColors,synchronousModeChanges.current=synchronousModeChangesProp(),user_pre_effect(()=>{synchronousModeChanges.current=synchronousModeChangesProp()}),user_pre_effect(()=>{disableTransitions.current= disableTransitionsProp()}),user_pre_effect(()=>{themeColors.current=$$props.themeColors}),user_pre_effect(()=>{darkClassNames.current=darkClassNamesProp()}),user_pre_effect(()=>{lightClassNames.current=lightClassNamesProp()}),user_pre_effect(()=>{modeStorageKey.current=modeStorageKeyProp()}),user_pre_effect(()=>{themeStorageKey.current=themeStorageKeyProp()}),user_pre_effect(()=>{derivedMode.current,modeStorageKey.current,themeStorageKey.current,derivedTheme.current}),onMount$1(()=>{systemPrefersMode. tracking(track2()),systemPrefersMode.query();const localStorageMode=localStorage.getItem(modeStorageKey.current);setMode(isValidMode(localStorageMode)?localStorageMode:defaultMode());const localStorageTheme=localStorage.getItem(themeStorageKey.current);setTheme(localStorageTheme||defaultTheme())});const initConfig={defaultMode:defaultMode(),themeColors:$$props.themeColors,darkClassNames:darkClassNamesProp(),lightClassNames:lightClassNamesProp(),defaultTheme:defaultTheme(),modeStorageKey:modeStorageKeyProp(), -themeStorageKey:themeStorageKeyProp()},trueNonce=user_derived(()=>typeof window>"u"?nonce():"");var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Mode_watcher_lite($$anchor2,{get themeColors(){return themeColors.current}})},alternate=$$anchor2=>{Mode_watcher_full($$anchor2,{get trueNonce(){return get$4(trueNonce)},get initConfig(){return initConfig},get themeColors(){return themeColors.current}})};if_block(node2,$$render=>{disableHeadScriptInjection()?$$render(consequent): -$$render(alternate,!1)})}append($$anchor,fragment),pop()}class MCPStore{#_isInitializing=state$1(!1);get _isInitializing(){return get$4(this.#_isInitializing)}set _isInitializing(value){set$1(this.#_isInitializing,value,!0)}#_error=state$1(null);get _error(){return get$4(this.#_error)}set _error(value){set$1(this.#_error,value,!0)}#_toolCount=state$1(0);get _toolCount(){return get$4(this.#_toolCount)}set _toolCount(value){set$1(this.#_toolCount,value,!0)}#_connectedServers=state$1(proxy([]));get _connectedServers(){ -return get$4(this.#_connectedServers)}set _connectedServers(value){set$1(this.#_connectedServers,value,!0)}#_healthChecks=state$1(proxy({}));get _healthChecks(){return get$4(this.#_healthChecks)}set _healthChecks(value){set$1(this.#_healthChecks,value,!0)}#_proxyAvailable=state$1(!1);get _proxyAvailable(){return get$4(this.#_proxyAvailable)}set _proxyAvailable(value){set$1(this.#_proxyAvailable,value,!0)}connections=new Map;toolsIndex=new Map;serverConfigs=new Map;reconnectingServers=new Set;configSignature=null;initPromise=null;activeFlowCount=0;constructor(){ +themeStorageKey:themeStorageKeyProp()},trueNonce=user_derived(()=>typeof window>"u"?nonce():"");var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{Mode_watcher_lite($$anchor2,{get themeColors(){return themeColors.current}})},alternate=$$anchor2=>{Mode_watcher_full($$anchor2,{get trueNonce(){return get$3(trueNonce)},get initConfig(){return initConfig},get themeColors(){return themeColors.current}})};if_block(node2,$$render=>{disableHeadScriptInjection()?$$render(consequent): +$$render(alternate,-1)})}append($$anchor,fragment),pop()}class MCPStore{#_isInitializing=state$1(!1);get _isInitializing(){return get$3(this.#_isInitializing)}set _isInitializing(value){set$1(this.#_isInitializing,value,!0)}#_error=state$1(null);get _error(){return get$3(this.#_error)}set _error(value){set$1(this.#_error,value,!0)}#_toolCount=state$1(0);get _toolCount(){return get$3(this.#_toolCount)}set _toolCount(value){set$1(this.#_toolCount,value,!0)}#_connectedServers=state$1(proxy([]));get _connectedServers(){ +return get$3(this.#_connectedServers)}set _connectedServers(value){set$1(this.#_connectedServers,value,!0)}#_healthChecks=state$1(proxy({}));get _healthChecks(){return get$3(this.#_healthChecks)}set _healthChecks(value){set$1(this.#_healthChecks,value,!0)}#_proxyAvailable=state$1(!1);get _proxyAvailable(){return get$3(this.#_proxyAvailable)}set _proxyAvailable(value){set$1(this.#_proxyAvailable,value,!0)}connections=new Map;toolsIndex=new Map;serverConfigs=new Map;reconnectingServers=new Set;configSignature=null;initPromise=null;activeFlowCount=0;constructor(){ this.probeProxy()}async probeProxy(){try{const response=await fetch(`${base}${CORS_PROXY_ENDPOINT}`,{method:"HEAD"});this._proxyAvailable=response.status!==404}catch{this._proxyAvailable=!1}}get isProxyAvailable(){return this._proxyAvailable}#generateServerId(id2,index2){return typeof id2=="string"&&id2.trim()?id2.trim():`${MCP_SERVER_ID_PREFIX}-${index2+1}`}#parseServerSettings(rawServers){if(!rawServers)return[];let parsed;if(typeof rawServers=="string"){const trimmed=rawServers.trim();if(!trimmed) return[];try{parsed=JSON.parse(trimmed)}catch(error2){return console.warn("[MCP] Failed to parse mcpServers JSON:",error2),[]}}else parsed=rawServers;return Array.isArray(parsed)?parsed.map((entry,index2)=>{const url2=typeof entry?.url=="string"?entry.url.trim():"",headers=typeof entry?.headers=="string"?entry.headers.trim():void 0;return{id:this.#generateServerId(entry?.id,index2),enabled:!!entry?.enabled,url:url2,name:entry?.name,requestTimeoutSeconds:DEFAULT_MCP_CONFIG.requestTimeoutSeconds,headers:headers|| void 0,useProxy:!!entry?.useProxy}}):[]}#buildServerConfig(entry,connectionTimeoutMs=DEFAULT_MCP_CONFIG.connectionTimeoutMs){if(!entry?.url)return;let headers;if(entry.headers)try{const parsed=JSON.parse(entry.headers);typeof parsed=="object"&&parsed!==null&&!Array.isArray(parsed)&&(headers=parsed)}catch{console.warn("[MCP] Failed to parse custom headers JSON:",entry.headers)}return{url:entry.url,transport:detectMcpTransportFromUrl(entry.url),handshakeTimeoutMs:connectionTimeoutMs,requestTimeoutMs:Math. @@ -5055,54 +5139,54 @@ error(`[MCPStore] Failed to read resource ${uri2}:`,error2),null}}async subscrib connection,uri2),mcpResourceStore.addSubscription(uri2,serverName),!0}catch(error2){return console.error(`[MCPStore] Failed to subscribe to resource ${uri2}:`,error2),!1}}async unsubscribeFromResource(uri2){const serverName=mcpResourceStore.findServerForUri(uri2);if(!serverName)return console.error(`[MCPStore] No server found for resource URI: ${uri2}`),!1;const connection=this.connections.get(serverName);if(!connection)return console.error(`[MCPStore] No connection found for server: ${serverName}`), !1;try{return await MCPService.unsubscribeResource(connection,uri2),mcpResourceStore.removeSubscription(uri2),!0}catch(error2){return console.error(`[MCPStore] Failed to unsubscribe from resource ${uri2}:`,error2),!1}}async attachResource(uri2){const resourceInfo=mcpResourceStore.findResourceByUri(uri2);if(!resourceInfo)return console.error(`[MCPStore] Resource not found: ${uri2}`),null;if(mcpResourceStore.isAttached(uri2))return null;const attachment=mcpResourceStore.addAttachment(resourceInfo); try{const content2=await this.readResource(uri2);content2?mcpResourceStore.updateAttachmentContent(attachment.id,content2):mcpResourceStore.updateAttachmentError(attachment.id,"Failed to read resource")}catch(error2){const message=error2 instanceof Error?error2.message:String(error2);mcpResourceStore.updateAttachmentError(attachment.id,message)}return mcpResourceStore.getAttachment(attachment.id)??null}removeResourceAttachment(attachmentId){mcpResourceStore.removeAttachment(attachmentId)}clearResourceAttachments(){ -mcpResourceStore.clearAttachments()}getResourceContextForChat(){return mcpResourceStore.formatAttachmentsForContext()}consumeResourceAttachmentsAsExtras(){const extras=mcpResourceStore.toMessageExtras();return extras.length>0&&mcpResourceStore.clearAttachments(),extras}}const mcpStore=new MCPStore;var root_2$12=from_html('<button type="button"><!> <span class="max-w-[150px] truncate text-xs"> </span> <!></button>'),root_9$n=from_html('<img alt="" class="h-3 w-3 shrink-0 rounded-sm"/>'),root_8$p=from_html( +mcpResourceStore.clearAttachments()}getResourceContextForChat(){return mcpResourceStore.formatAttachmentsForContext()}consumeResourceAttachmentsAsExtras(){const extras=mcpResourceStore.toMessageExtras();return extras.length>0&&mcpResourceStore.clearAttachments(),extras}}const mcpStore=new MCPStore;var root_2$1b=from_html('<button type="button"><!> <span class="max-w-[150px] truncate text-xs"> </span> <!></button>'),root_8$r=from_html('<img alt="" class="h-3 w-3 shrink-0 rounded-sm"/>'),root_7$u=from_html( '<div class="flex items-center gap-1 text-xs"><!> <span class="truncate"> </span></div>'),root_1$W=from_html("<!> <!>",1);function ChatAttachmentMcpResource($$anchor,$$props){push$1($$props,!0);function getStatusClass(attachment){return attachment.error?"border-red-500/50 bg-red-500/10":(attachment.loading,"border-border/50 bg-muted/30")}const ResourceIcon=user_derived(()=>getResourceIcon($$props.attachment.resource.mimeType,$$props.attachment.resource.uri)),serverName=user_derived(()=>mcpStore. getServerDisplayName($$props.attachment.resource.serverName)),favicon=user_derived(()=>mcpStore.getServerFavicon($$props.attachment.resource.serverName));var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$5,($$anchor2,Tooltip_Root)=>{Tooltip_Root($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$W(),node_1=first_child(fragment_1);component(node_1,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor4,{children:($$anchor5,$$slotProps2)=>{ -var button=root_2$12();button.__click=function(...$$args){$$props.onClick?.apply(this,$$args)};var node_2=child(button);{var consequent=$$anchor6=>{Loader_circle($$anchor6,{class:"h-3 w-3 animate-spin text-muted-foreground"})},alternate_1=$$anchor6=>{var fragment_3=comment$2(),node_3=first_child(fragment_3);{var consequent_1=$$anchor7=>{Circle_alert($$anchor7,{class:"h-3 w-3 text-red-500"})},alternate=$$anchor7=>{var fragment_5=comment$2(),node_4=first_child(fragment_5);component(node_4,()=>get$4( -ResourceIcon),($$anchor8,ResourceIcon_1)=>{ResourceIcon_1($$anchor8,{class:"h-3 w-3 text-muted-foreground"})}),append($$anchor7,fragment_5)};if_block(node_3,$$render=>{$$props.attachment.error?$$render(consequent_1):$$render(alternate,!1)},!0)}append($$anchor6,fragment_3)};if_block(node_2,$$render=>{$$props.attachment.loading?$$render(consequent):$$render(alternate_1,!1)})}var span=sibling(node_2,2),text2=child(span,!0);reset(span);var node_5=sibling(span,2);{var consequent_2=$$anchor6=>{ActionIconRemove( -$$anchor6,{class:"-my-2 -mr-1.5 bg-transparent",iconSize:2,get id(){return $$props.attachment.id},get onRemove(){return $$props.onRemove}})};if_block(node_5,$$render=>{$$props.onRemove&&$$render(consequent_2)})}reset(button),template_effect(($0,$1)=>{set_class(button,1,$0),button.disabled=!$$props.onClick,set_text(text2,$1)},[()=>clsx(cn$1("flex flex-shrink-0 items-center gap-1.5 rounded-md border px-2 py-0.75 text-sm transition-colors",getStatusClass($$props.attachment),$$props.onClick&&"cursor\ --pointer hover:bg-muted/50",$$props.class)),()=>getResourceDisplayName($$props.attachment.resource)]),append($$anchor5,button)},$$slots:{default:!0}})});var node_6=sibling(node_1,2);component(node_6,()=>Tooltip_content,($$anchor4,Tooltip_Content)=>{Tooltip_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var div=root_8$p(),node_7=child(div);{var consequent_3=$$anchor6=>{var img=root_9$n();template_effect(()=>set_attribute(img,"src",get$4(favicon))),event("error",img,e=>{e.currentTarget.style. -display="none"}),replay_events(img),append($$anchor6,img)};if_block(node_7,$$render=>{get$4(favicon)&&$$render(consequent_3)})}var span_1=sibling(node_7,2),text_1=child(span_1,!0);reset(span_1),reset(div),template_effect(()=>set_text(text_1,get$4(serverName))),append($$anchor5,div)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}delegate(["click"]);const alertVariants=tv({base:"relative grid w-full grid-cols-[0_1fr] items-start gap\ --y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current"}},defaultVariants:{variant:"default"}});var root$1t=from_html("<div><!></div>");function Alert($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"re\ -f",15,null),variant=prop($$props,"variant",3,"default"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","variant","children"]);var div=root$1t();attribute_effect(div,$0=>({"data-slot":"alert",class:$0,...restProps,role:"alert"}),[()=>cn$1(alertVariants({variant:variant()}),$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$1s=from_html("<div><\ -!></div>");function Alert_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1s();attribute_effect(div,$0=>({"data-slot":"alert-description",class:$0,...restProps}),[()=>cn$1("col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div), -bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$1r=from_html("<div><!></div>");function Alert_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1r();attribute_effect(div,$0=>({"data-slot":"alert-title",class:$0,...restProps}),[()=>cn$1("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",$$props.class)]);var node2=child( -div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}class AudioRecorder{mediaRecorder=null;audioChunks=[];stream=null;recordingState=!1;async startRecording(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}}),this.initializeRecorder(this.stream),this.audioChunks=[],this.mediaRecorder.start(100),this.recordingState=!0}catch(error2){throw console. -error("Failed to start recording:",error2),new Error("Failed to access microphone. Please check permissions.")}}async stopRecording(){return new Promise((resolve2,reject)=>{if(!this.mediaRecorder||this.mediaRecorder.state==="inactive"){reject(new Error("No active recording to stop"));return}this.mediaRecorder.onstop=()=>{const mimeType=this.mediaRecorder?.mimeType||MimeTypeAudio.WAV,audioBlob=new Blob(this.audioChunks,{type:mimeType});this.cleanup(),resolve2(audioBlob)},this.mediaRecorder.onerror= -event2=>{console.error("Recording error:",event2),this.cleanup(),reject(new Error("Recording failed"))},this.mediaRecorder.stop()})}isRecording(){return this.recordingState}cancelRecording(){this.mediaRecorder&&this.mediaRecorder.state!=="inactive"&&this.mediaRecorder.stop(),this.cleanup()}initializeRecorder(stream){const options={};MediaRecorder.isTypeSupported(MimeTypeAudio.WAV)?options.mimeType=MimeTypeAudio.WAV:MediaRecorder.isTypeSupported(MimeTypeAudio.WEBM_OPUS)?options.mimeType=MimeTypeAudio. -WEBM_OPUS:MediaRecorder.isTypeSupported(MimeTypeAudio.WEBM)?options.mimeType=MimeTypeAudio.WEBM:MediaRecorder.isTypeSupported(MimeTypeAudio.MP4)?options.mimeType=MimeTypeAudio.MP4:console.warn("No preferred audio format supported, using default"),this.mediaRecorder=new MediaRecorder(stream,options),this.mediaRecorder.ondataavailable=event2=>{event2.data.size>0&&this.audioChunks.push(event2.data)},this.mediaRecorder.onstop=()=>{this.recordingState=!1},this.mediaRecorder.onerror=event2=>{console.error( -"MediaRecorder error:",event2),this.recordingState=!1}}cleanup(){if(this.stream){for(const track2 of this.stream.getTracks())track2.stop();this.stream=null}this.mediaRecorder=null,this.audioChunks=[],this.recordingState=!1}}async function convertToWav(audioBlob){try{if(audioBlob.type.includes("wav"))return audioBlob;const arrayBuffer=await audioBlob.arrayBuffer(),audioContext=new(window.AudioContext||window.webkitAudioContext),audioBuffer=await audioContext.decodeAudioData(arrayBuffer),wavBlob=audioBufferToWav( -audioBuffer);return audioContext.close(),wavBlob}catch(error2){return console.error("Failed to convert audio to WAV:",error2),audioBlob}}function audioBufferToWav(buffer){const length=buffer.length,numberOfChannels=buffer.numberOfChannels,sampleRate=buffer.sampleRate,blockAlign=numberOfChannels*2,byteRate=sampleRate*blockAlign,dataSize=length*blockAlign,bufferSize=44+dataSize,arrayBuffer=new ArrayBuffer(bufferSize),view=new DataView(arrayBuffer),writeString=(offset22,string2)=>{for(let i=0;i<string2. -length;i++)view.setUint8(offset22+i,string2.charCodeAt(i))};writeString(0,"RIFF"),view.setUint32(4,bufferSize-8,!0),writeString(8,"WAVE"),writeString(12,"fmt "),view.setUint32(16,16,!0),view.setUint16(20,1,!0),view.setUint16(22,numberOfChannels,!0),view.setUint32(24,sampleRate,!0),view.setUint32(28,byteRate,!0),view.setUint16(32,blockAlign,!0),view.setUint16(34,16,!0),writeString(36,"data"),view.setUint32(40,dataSize,!0);let offset2=44;for(let i=0;i<length;i++)for(let channel=0;channel<numberOfChannels;channel++){ -const sample=Math.max(-1,Math.min(1,buffer.getChannelData(channel)[i]));view.setInt16(offset2,sample*32767,!0),offset2+=2}return new Blob([arrayBuffer],{type:MimeTypeAudio.WAV})}function createAudioFile(audioBlob,filename){const timestamp=new Date().toISOString().replace(/[:.]/g,"-"),extension2=audioBlob.type.includes("wav")?"wav":"mp3",defaultFilename=`recording-${timestamp}.${extension2}`;return new File([audioBlob],defaultFilename,{type:audioBlob.type,lastModified:Date.now()})}function isAudioRecordingSupported(){ -return!!(typeof navigator<"u"&&navigator.mediaDevices&&typeof navigator.mediaDevices.getUserMedia=="function"&&typeof window<"u"&&window.MediaRecorder)}const isNodeJS=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser"),FONT_IDENTITY_MATRIX=[.001,0,0,.001,0,0],LINE_FACTOR=1.35,RenderingIntentFlag={ANY:1,DISPLAY:2,PRINT:4,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,IS_EDITING:128, -OPLIST:256},AnnotationMode={DISABLE:0,ENABLE:1,ENABLE_FORMS:2,ENABLE_STORAGE:3},AnnotationEditorPrefix="pdfjs_internal_editor_",AnnotationEditorType={DISABLE:-1,NONE:0,FREETEXT:3,HIGHLIGHT:9,STAMP:13,INK:15,SIGNATURE:101,COMMENT:102},AnnotationEditorParamsType={RESIZE:1,CREATE:2,FREETEXT_SIZE:11,FREETEXT_COLOR:12,FREETEXT_OPACITY:13,INK_COLOR:21,INK_THICKNESS:22,INK_OPACITY:23,HIGHLIGHT_COLOR:31,HIGHLIGHT_THICKNESS:32,HIGHLIGHT_FREE:33,HIGHLIGHT_SHOW_ALL:34,DRAW_STEP:41},PermissionFlag={PRINT:4, -MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},TextRenderingMode={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},util_ImageKind={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},AnnotationType={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19, -WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26},AnnotationBorderStyleType={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5},VerbosityLevel={ERRORS:0,WARNINGS:1,INFOS:5},OPS={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24, -eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54, -setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84, -paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91,setStrokeTransparent:92,setFillTransparent:93,rawFillPath:94},DrawOPS={moveTo:0,lineTo:1,curveTo:2,closePath:3},PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};let verbosity=VerbosityLevel.WARNINGS;function setVerbosityLevel(level){Number.isInteger(level)&&(verbosity=level)}function getVerbosityLevel(){return verbosity} -function info(msg){verbosity>=VerbosityLevel.INFOS&&console.log(`Info: ${msg}`)}function warn(msg){verbosity>=VerbosityLevel.WARNINGS&&console.log(`Warning: ${msg}`)}function unreachable(msg){throw new Error(msg)}function assert$1(cond,msg){cond||unreachable(msg)}function _isValidProtocol(url2){switch(url2?.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function createValidAbsoluteUrl(url2,baseUrl=null,options=null){if(!url2)return null;if(options&& -typeof url2=="string"&&(options.addDefaultProtocol&&url2.startsWith("www.")&&url2.match(/\./g)?.length>=2&&(url2=`http://${url2}`),options.tryConvertEncoding))try{url2=stringToUTF8String(url2)}catch{}const absoluteUrl=baseUrl?URL.parse(url2,baseUrl):URL.parse(url2);return _isValidProtocol(absoluteUrl)?absoluteUrl:null}function updateUrlHash(url2,hash2,allowRel=!1){const res=URL.parse(url2);return res?(res.hash=hash2,res.href):allowRel&&createValidAbsoluteUrl(url2,"http://example.com")?url2.split( -"#",1)[0]+`${hash2?`#${hash2}`:""}`:""}function shadow(obj,prop2,value,nonSerializable=!1){return Object.defineProperty(obj,prop2,{value,enumerable:!nonSerializable,configurable:!0,writable:!1}),value}const BaseException=function(){function BaseException2(message,name){this.message=message,this.name=name}return BaseException2.prototype=new Error,BaseException2.constructor=BaseException2,BaseException2}();class PasswordException extends BaseException{constructor(msg,code2){super(msg,"PasswordExce\ -ption"),this.code=code2}}class UnknownErrorException extends BaseException{constructor(msg,details){super(msg,"UnknownErrorException"),this.details=details}}class InvalidPDFException extends BaseException{constructor(msg){super(msg,"InvalidPDFException")}}class ResponseException extends BaseException{constructor(msg,status,missing){super(msg,"ResponseException"),this.status=status,this.missing=missing}}class FormatError extends BaseException{constructor(msg){super(msg,"FormatError")}}class AbortException extends BaseException{constructor(msg){ -super(msg,"AbortException")}}function bytesToString(bytes){(typeof bytes!="object"||bytes?.length===void 0)&&unreachable("Invalid argument for bytesToString");const length=bytes.length,MAX_ARGUMENT_COUNT=8192;if(length<MAX_ARGUMENT_COUNT)return String.fromCharCode.apply(null,bytes);const strBuf=[];for(let i=0;i<length;i+=MAX_ARGUMENT_COUNT){const chunkEnd=Math.min(i+MAX_ARGUMENT_COUNT,length),chunk=bytes.subarray(i,chunkEnd);strBuf.push(String.fromCharCode.apply(null,chunk))}return strBuf.join("")} -function stringToBytes(str){typeof str!="string"&&unreachable("Invalid argument for stringToBytes");const length=str.length,bytes=new Uint8Array(length);for(let i=0;i<length;++i)bytes[i]=str.charCodeAt(i)&255;return bytes}function string32(value){return String.fromCharCode(value>>24&255,value>>16&255,value>>8&255,value&255)}function isLittleEndian(){const buffer8=new Uint8Array(4);return buffer8[0]=1,new Uint32Array(buffer8.buffer,0,1)[0]===1}function isEvalSupported(){try{return new Function(""), -!0}catch{return!1}}class util_FeatureTest{static get isLittleEndian(){return shadow(this,"isLittleEndian",isLittleEndian())}static get isEvalSupported(){return shadow(this,"isEvalSupported",isEvalSupported())}static get isOffscreenCanvasSupported(){return shadow(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas<"u")}static get isImageDecoderSupported(){return shadow(this,"isImageDecoderSupported",typeof ImageDecoder<"u")}static get platform(){const{platform:platform2,userAgent}=navigator; -return shadow(this,"platform",{isAndroid:userAgent.includes("Android"),isLinux:platform2.includes("Linux"),isMac:platform2.includes("Mac"),isWindows:platform2.includes("Win"),isFirefox:userAgent.includes("Firefox")})}static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupported",globalThis.CSS?.supports?.("width: round(1.5px, 1px)"))}}const hexNumbers=Array.from(Array(256).keys(),n=>n.toString(16).padStart(2,"0"));class Util{static makeHexColor(r2,g,b){return`#${hexNumbers[r2]}${hexNumbers[g]}${hexNumbers[b]}`}static scaleMinMax(transform2,minMax){ -let temp;transform2[0]?(transform2[0]<0&&(temp=minMax[0],minMax[0]=minMax[2],minMax[2]=temp),minMax[0]*=transform2[0],minMax[2]*=transform2[0],transform2[3]<0&&(temp=minMax[1],minMax[1]=minMax[3],minMax[3]=temp),minMax[1]*=transform2[3],minMax[3]*=transform2[3]):(temp=minMax[0],minMax[0]=minMax[1],minMax[1]=temp,temp=minMax[2],minMax[2]=minMax[3],minMax[3]=temp,transform2[1]<0&&(temp=minMax[1],minMax[1]=minMax[3],minMax[3]=temp),minMax[1]*=transform2[1],minMax[3]*=transform2[1],transform2[2]<0&& -(temp=minMax[0],minMax[0]=minMax[2],minMax[2]=temp),minMax[0]*=transform2[2],minMax[2]*=transform2[2]),minMax[0]+=transform2[4],minMax[1]+=transform2[5],minMax[2]+=transform2[4],minMax[3]+=transform2[5]}static transform(m1,m2){return[m1[0]*m2[0]+m1[2]*m2[1],m1[1]*m2[0]+m1[3]*m2[1],m1[0]*m2[2]+m1[2]*m2[3],m1[1]*m2[2]+m1[3]*m2[3],m1[0]*m2[4]+m1[2]*m2[5]+m1[4],m1[1]*m2[4]+m1[3]*m2[5]+m1[5]]}static applyTransform(p2,m,pos=0){const p0=p2[pos],p1=p2[pos+1];p2[pos]=p0*m[0]+p1*m[2]+m[4],p2[pos+1]=p0*m[1]+ -p1*m[3]+m[5]}static applyTransformToBezier(p2,transform2,pos=0){const m0=transform2[0],m1=transform2[1],m2=transform2[2],m3=transform2[3],m4=transform2[4],m5=transform2[5];for(let i=0;i<6;i+=2){const pI=p2[pos+i],pI1=p2[pos+i+1];p2[pos+i]=pI*m0+pI1*m2+m4,p2[pos+i+1]=pI*m1+pI1*m3+m5}}static applyInverseTransform(p2,m){const p0=p2[0],p1=p2[1],d2=m[0]*m[3]-m[1]*m[2];p2[0]=(p0*m[3]-p1*m[2]+m[2]*m[5]-m[4]*m[3])/d2,p2[1]=(-p0*m[1]+p1*m[0]+m[4]*m[1]-m[5]*m[0])/d2}static axialAlignedBoundingBox(rect,transform2,output){ -const m0=transform2[0],m1=transform2[1],m2=transform2[2],m3=transform2[3],m4=transform2[4],m5=transform2[5],r0=rect[0],r1=rect[1],r2=rect[2],r3=rect[3];let a0=m0*r0+m4,a2=a0,a1=m0*r2+m4,a3=a1,b0=m3*r1+m5,b2=b0,b1=m3*r3+m5,b3=b1;if(m1!==0||m2!==0){const m1r0=m1*r0,m1r2=m1*r2,m2r1=m2*r1,m2r3=m2*r3;a0+=m2r1,a3+=m2r1,a1+=m2r3,a2+=m2r3,b0+=m1r0,b3+=m1r0,b1+=m1r2,b2+=m1r2}output[0]=Math.min(output[0],a0,a1,a2,a3),output[1]=Math.min(output[1],b0,b1,b2,b3),output[2]=Math.max(output[2],a0,a1,a2,a3),output[3]= -Math.max(output[3],b0,b1,b2,b3)}static inverseTransform(m){const d2=m[0]*m[3]-m[1]*m[2];return[m[3]/d2,-m[1]/d2,-m[2]/d2,m[0]/d2,(m[2]*m[5]-m[4]*m[3])/d2,(m[4]*m[1]-m[5]*m[0])/d2]}static singularValueDecompose2dScale(matrix,output){const m0=matrix[0],m1=matrix[1],m2=matrix[2],m3=matrix[3],a=m0**2+m1**2,b=m0*m2+m1*m3,c2=m2**2+m3**2,first=(a+c2)/2,second=Math.sqrt(first**2-(a*c2-b**2));output[0]=Math.sqrt(first+second||1),output[1]=Math.sqrt(first-second||1)}static normalizeRect(rect){const r2=rect. -slice(0);return rect[0]>rect[2]&&(r2[0]=rect[2],r2[2]=rect[0]),rect[1]>rect[3]&&(r2[1]=rect[3],r2[3]=rect[1]),r2}static intersect(rect1,rect2){const xLow=Math.max(Math.min(rect1[0],rect1[2]),Math.min(rect2[0],rect2[2])),xHigh=Math.min(Math.max(rect1[0],rect1[2]),Math.max(rect2[0],rect2[2]));if(xLow>xHigh)return null;const yLow=Math.max(Math.min(rect1[1],rect1[3]),Math.min(rect2[1],rect2[3])),yHigh=Math.min(Math.max(rect1[1],rect1[3]),Math.max(rect2[1],rect2[3]));return yLow>yHigh?null:[xLow,yLow, -xHigh,yHigh]}static pointBoundingBox(x,y,minMax){minMax[0]=Math.min(minMax[0],x),minMax[1]=Math.min(minMax[1],y),minMax[2]=Math.max(minMax[2],x),minMax[3]=Math.max(minMax[3],y)}static rectBoundingBox(x0,y0,x1,y1,minMax){minMax[0]=Math.min(minMax[0],x0,x1),minMax[1]=Math.min(minMax[1],y0,y1),minMax[2]=Math.max(minMax[2],x0,x1),minMax[3]=Math.max(minMax[3],y0,y1)}static#getExtremumOnCurve(x0,x1,x2,x3,y0,y1,y2,y3,t,minMax){if(t<=0||t>=1)return;const mt=1-t,tt=t*t,ttt=tt*t,x=mt*(mt*(mt*x0+3*t*x1)+3* -tt*x2)+ttt*x3,y=mt*(mt*(mt*y0+3*t*y1)+3*tt*y2)+ttt*y3;minMax[0]=Math.min(minMax[0],x),minMax[1]=Math.min(minMax[1],y),minMax[2]=Math.max(minMax[2],x),minMax[3]=Math.max(minMax[3],y)}static#getExtremum(x0,x1,x2,x3,y0,y1,y2,y3,a,b,c2,minMax){if(Math.abs(a)<1e-12){Math.abs(b)>=1e-12&&this.#getExtremumOnCurve(x0,x1,x2,x3,y0,y1,y2,y3,-c2/b,minMax);return}const delta=b**2-4*c2*a;if(delta<0)return;const sqrtDelta=Math.sqrt(delta),a2=2*a;this.#getExtremumOnCurve(x0,x1,x2,x3,y0,y1,y2,y3,(-b+sqrtDelta)/a2, -minMax),this.#getExtremumOnCurve(x0,x1,x2,x3,y0,y1,y2,y3,(-b-sqrtDelta)/a2,minMax)}static bezierBoundingBox(x0,y0,x1,y1,x2,y2,x3,y3,minMax){minMax[0]=Math.min(minMax[0],x0,x3),minMax[1]=Math.min(minMax[1],y0,y3),minMax[2]=Math.max(minMax[2],x0,x3),minMax[3]=Math.max(minMax[3],y0,y3),this.#getExtremum(x0,x1,x2,x3,y0,y1,y2,y3,3*(-x0+3*(x1-x2)+x3),6*(x0-2*x1+x2),3*(x1-x0),minMax),this.#getExtremum(x0,x1,x2,x3,y0,y1,y2,y3,3*(-y0+3*(y1-y2)+y3),6*(y0-2*y1+y2),3*(y1-y0),minMax)}}function stringToUTF8String(str){ -return decodeURIComponent(escape(str))}let NormalizeRegex=null,NormalizationMap=null;function normalizeUnicode(str){return NormalizeRegex||(NormalizeRegex=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu,NormalizationMap= -new Map([["ſt","ſt"]])),str.replaceAll(NormalizeRegex,(_,p1,p2)=>p1?p1.normalize("NFKC"):NormalizationMap.get(p2))}function getUuid(){if(typeof crypto.randomUUID=="function")return crypto.randomUUID();const buf=new Uint8Array(32);return crypto.getRandomValues(buf),bytesToString(buf)}const AnnotationPrefix="pdfjs_internal_id_";function _isValidExplicitDest(validRef,validName,dest){if(!Array.isArray(dest)||dest.length<2)return!1;const[page2,zoom,...args]=dest;if(!validRef(page2)&&!Number.isInteger( -page2)||!validName(zoom))return!1;const argsLen=args.length;let allowNull=!0;switch(zoom.name){case"XYZ":if(argsLen<2||argsLen>3)return!1;break;case"Fit":case"FitB":return argsLen===0;case"FitH":case"FitBH":case"FitV":case"FitBV":if(argsLen>1)return!1;break;case"FitR":if(argsLen!==4)return!1;allowNull=!1;break;default:return!1}for(const arg of args)if(!(typeof arg=="number"||allowNull&&arg===null))return!1;return!0}function MathClamp(v,min2,max2){return Math.min(Math.max(v,min2),max2)}function toBase64Util(arr){ -return Uint8Array.prototype.toBase64?arr.toBase64():btoa(bytesToString(arr))}function fromBase64Util(str){return Uint8Array.fromBase64?Uint8Array.fromBase64(str):stringToBytes(atob(str))}typeof Promise.try!="function"&&(Promise.try=function(fn,...args){return new Promise(resolve2=>{resolve2(fn(...args))})});typeof Math.sumPrecise!="function"&&(Math.sumPrecise=function(numbers){return numbers.reduce((a,b)=>a+b,0)});const SVG_NS="http://www.w3.org/2000/svg";class PixelsPerInch{static CSS=96;static PDF=72;static PDF_TO_CSS_UNITS=this. +var button=root_2$1b(),node_2=child(button);{var consequent=$$anchor6=>{Loader_circle($$anchor6,{class:"h-3 w-3 animate-spin text-muted-foreground"})},consequent_1=$$anchor6=>{Circle_alert($$anchor6,{class:"h-3 w-3 text-red-500"})},alternate=$$anchor6=>{var fragment_4=comment$2(),node_3=first_child(fragment_4);component(node_3,()=>get$3(ResourceIcon),($$anchor7,ResourceIcon_1)=>{ResourceIcon_1($$anchor7,{class:"h-3 w-3 text-muted-foreground"})}),append($$anchor6,fragment_4)};if_block(node_2,$$render=>{ +$$props.attachment.loading?$$render(consequent):$$props.attachment.error?$$render(consequent_1,1):$$render(alternate,-1)})}var span=sibling(node_2,2),text2=child(span,!0);reset(span);var node_4=sibling(span,2);{var consequent_2=$$anchor6=>{ActionIconRemove($$anchor6,{class:"-my-2 -mr-1.5 bg-transparent",iconSize:2,get id(){return $$props.attachment.id},get onRemove(){return $$props.onRemove}})};if_block(node_4,$$render=>{$$props.onRemove&&$$render(consequent_2)})}reset(button),template_effect(($0,$1)=>{ +set_class(button,1,$0),button.disabled=!$$props.onClick,set_text(text2,$1)},[()=>clsx(cn$1("flex flex-shrink-0 items-center gap-1.5 rounded-md border px-2 py-0.75 text-sm transition-colors",getStatusClass($$props.attachment),$$props.onClick&&"cursor-pointer hover:bg-muted/50",$$props.class)),()=>getResourceDisplayName($$props.attachment.resource)]),delegated("click",button,function(...$$args){$$props.onClick?.apply(this,$$args)}),append($$anchor5,button)},$$slots:{default:!0}})});var node_5=sibling( +node_1,2);component(node_5,()=>Tooltip_content,($$anchor4,Tooltip_Content)=>{Tooltip_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var div=root_7$u(),node_6=child(div);{var consequent_3=$$anchor6=>{var img=root_8$r();template_effect(()=>set_attribute(img,"src",get$3(favicon))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor6,img)};if_block(node_6,$$render=>{get$3(favicon)&&$$render(consequent_3)})}var span_1=sibling(node_6,2),text_1=child( +span_1,!0);reset(span_1),reset(div),template_effect(()=>set_text(text_1,get$3(serverName))),append($$anchor5,div)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}delegate(["click"]);const alertVariants=tv({base:"relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-curre\ +nt",variants:{variant:{default:"bg-card text-card-foreground",destructive:"text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current"}},defaultVariants:{variant:"default"}});var root$1B=from_html("<div><!></div>");function Alert($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),variant=prop($$props,"variant",3,"default"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","variant","children"]);var div=root$1B(); +attribute_effect(div,$0=>({"data-slot":"alert",class:$0,...restProps,role:"alert"}),[()=>cn$1(alertVariants({variant:variant()}),$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$1A=from_html("<div><!></div>");function Alert_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy", +"ref","class","children"]);var div=root$1A();attribute_effect(div,$0=>({"data-slot":"alert-description",class:$0,...restProps}),[()=>cn$1("col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$1z=from_html("<div><!></div>");function Alert_title($$anchor,$$props){push$1($$props,!0); +let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1z();attribute_effect(div,$0=>({"data-slot":"alert-title",class:$0,...restProps}),[()=>cn$1("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}class AudioRecorder{mediaRecorder=null;audioChunks=[];stream=null;recordingState=!1;async startRecording(){ +try{this.stream=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}}),this.initializeRecorder(this.stream),this.audioChunks=[],this.mediaRecorder.start(100),this.recordingState=!0}catch(error2){throw console.error("Failed to start recording:",error2),new Error("Failed to access microphone. Please check permissions.")}}async stopRecording(){return new Promise((resolve2,reject)=>{const recorder=this.mediaRecorder,chunks=this.audioChunks,stream=this. +stream;if(!recorder||recorder.state==="inactive"){reject(new Error("No active recording to stop"));return}this.mediaRecorder=null,this.audioChunks=[],this.stream=null,this.recordingState=!1,recorder.onstop=()=>{const audioBlob=new Blob(chunks,{type:recorder.mimeType||MimeTypeAudio.WAV});if(stream)for(const track2 of stream.getTracks())track2.stop();resolve2(audioBlob)},recorder.onerror=event2=>{if(console.error("Recording error:",event2),stream)for(const track2 of stream.getTracks())track2.stop(); +reject(new Error("Recording failed"))},recorder.stop()})}isRecording(){return this.recordingState}cancelRecording(){const recorder=this.mediaRecorder,stream=this.stream;if(this.mediaRecorder=null,this.audioChunks=[],this.stream=null,this.recordingState=!1,recorder&&recorder.state!=="inactive"&&(recorder.onstop=null,recorder.onerror=null,recorder.stop()),stream)for(const track2 of stream.getTracks())track2.stop()}initializeRecorder(stream){const options={};MediaRecorder.isTypeSupported(MimeTypeAudio. +WAV)?options.mimeType=MimeTypeAudio.WAV:MediaRecorder.isTypeSupported(MimeTypeAudio.WEBM_OPUS)?options.mimeType=MimeTypeAudio.WEBM_OPUS:MediaRecorder.isTypeSupported(MimeTypeAudio.WEBM)?options.mimeType=MimeTypeAudio.WEBM:MediaRecorder.isTypeSupported(MimeTypeAudio.MP4)?options.mimeType=MimeTypeAudio.MP4:console.warn("No preferred audio format supported, using default"),this.mediaRecorder=new MediaRecorder(stream,options),this.mediaRecorder.ondataavailable=event2=>{event2.data.size>0&&this.audioChunks. +push(event2.data)},this.mediaRecorder.onstop=()=>{this.recordingState=!1},this.mediaRecorder.onerror=event2=>{console.error("MediaRecorder error:",event2),this.recordingState=!1}}}async function convertToWav(audioBlob){try{if(audioBlob.type.includes("wav"))return audioBlob;const arrayBuffer=await audioBlob.arrayBuffer(),audioContext=new(window.AudioContext||window.webkitAudioContext);try{const audioBuffer=await audioContext.decodeAudioData(arrayBuffer);return audioBufferToWav(audioBuffer)}finally{ +audioContext.close()}}catch(error2){return console.error("Failed to convert audio to WAV:",error2),audioBlob}}function audioBufferToWav(buffer){const length=buffer.length,numberOfChannels=buffer.numberOfChannels,sampleRate=buffer.sampleRate,blockAlign=numberOfChannels*2,byteRate=sampleRate*blockAlign,dataSize=length*blockAlign,bufferSize=44+dataSize,arrayBuffer=new ArrayBuffer(bufferSize),view=new DataView(arrayBuffer),writeString=(offset2,string2)=>{for(let i=0;i<string2.length;i++)view.setUint8( +offset2+i,string2.charCodeAt(i))};writeString(0,"RIFF"),view.setUint32(4,bufferSize-8,!0),writeString(8,"WAVE"),writeString(12,"fmt "),view.setUint32(16,16,!0),view.setUint16(20,1,!0),view.setUint16(22,numberOfChannels,!0),view.setUint32(24,sampleRate,!0),view.setUint32(28,byteRate,!0),view.setUint16(32,blockAlign,!0),view.setUint16(34,16,!0),writeString(36,"data"),view.setUint32(40,dataSize,!0);const channels=new Array(numberOfChannels);for(let c2=0;c2<numberOfChannels;c2++)channels[c2]=buffer. +getChannelData(c2);const pcm=new Int16Array(arrayBuffer,44,length*numberOfChannels);let p2=0;for(let i=0;i<length;i++)for(let c2=0;c2<numberOfChannels;c2++){let s2=channels[c2][i];s2>1?s2=1:s2<-1&&(s2=-1),pcm[p2++]=s2*32767}return new Blob([arrayBuffer],{type:MimeTypeAudio.WAV})}function createAudioFile(audioBlob,filename){const timestamp=new Date().toISOString().replace(/[:.]/g,"-"),extension2=audioBlob.type.includes("wav")?"wav":"mp3",defaultFilename=`recording-${timestamp}.${extension2}`;return new File( +[audioBlob],defaultFilename,{type:audioBlob.type,lastModified:Date.now()})}function isAudioRecordingSupported(){return!!(typeof navigator<"u"&&navigator.mediaDevices&&typeof navigator.mediaDevices.getUserMedia=="function"&&typeof window<"u"&&window.MediaRecorder)}const isNodeJS=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser"),FONT_IDENTITY_MATRIX=[.001,0,0,.001,0,0],LINE_FACTOR=1.35,RenderingIntentFlag={ +ANY:1,DISPLAY:2,PRINT:4,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,IS_EDITING:128,OPLIST:256},AnnotationMode={DISABLE:0,ENABLE:1,ENABLE_FORMS:2,ENABLE_STORAGE:3},AnnotationEditorPrefix="pdfjs_internal_editor_",AnnotationEditorType={DISABLE:-1,NONE:0,FREETEXT:3,HIGHLIGHT:9,STAMP:13,INK:15,SIGNATURE:101,COMMENT:102},AnnotationEditorParamsType={RESIZE:1,CREATE:2,FREETEXT_SIZE:11,FREETEXT_COLOR:12,FREETEXT_OPACITY:13,INK_COLOR:21,INK_THICKNESS:22,INK_OPACITY:23,HIGHLIGHT_COLOR:31, +HIGHLIGHT_THICKNESS:32,HIGHLIGHT_FREE:33,HIGHLIGHT_SHOW_ALL:34,DRAW_STEP:41},PermissionFlag={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},TextRenderingMode={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},util_ImageKind={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},AnnotationType={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9, +UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26},AnnotationBorderStyleType={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5},VerbosityLevel={ERRORS:0,WARNINGS:1,INFOS:5},OPS={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15, +curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49, +setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76, +endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91,setStrokeTransparent:92,setFillTransparent:93,rawFillPath:94},DrawOPS={moveTo:0,lineTo:1,curveTo:2,closePath:3},PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};let verbosity=VerbosityLevel.WARNINGS;function setVerbosityLevel(level){ +Number.isInteger(level)&&(verbosity=level)}function getVerbosityLevel(){return verbosity}function info(msg){verbosity>=VerbosityLevel.INFOS&&console.log(`Info: ${msg}`)}function warn(msg){verbosity>=VerbosityLevel.WARNINGS&&console.log(`Warning: ${msg}`)}function unreachable(msg){throw new Error(msg)}function assert$1(cond,msg){cond||unreachable(msg)}function _isValidProtocol(url2){switch(url2?.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function createValidAbsoluteUrl(url2,baseUrl=null,options=null){ +if(!url2)return null;if(options&&typeof url2=="string"&&(options.addDefaultProtocol&&url2.startsWith("www.")&&url2.match(/\./g)?.length>=2&&(url2=`http://${url2}`),options.tryConvertEncoding))try{url2=stringToUTF8String(url2)}catch{}const absoluteUrl=baseUrl?URL.parse(url2,baseUrl):URL.parse(url2);return _isValidProtocol(absoluteUrl)?absoluteUrl:null}function updateUrlHash(url2,hash2,allowRel=!1){const res=URL.parse(url2);return res?(res.hash=hash2,res.href):allowRel&&createValidAbsoluteUrl(url2, +"http://example.com")?url2.split("#",1)[0]+`${hash2?`#${hash2}`:""}`:""}function shadow(obj,prop2,value,nonSerializable=!1){return Object.defineProperty(obj,prop2,{value,enumerable:!nonSerializable,configurable:!0,writable:!1}),value}const BaseException=(function(){function BaseException2(message,name){this.message=message,this.name=name}return BaseException2.prototype=new Error,BaseException2.constructor=BaseException2,BaseException2})();class PasswordException extends BaseException{constructor(msg,code2){ +super(msg,"PasswordException"),this.code=code2}}class UnknownErrorException extends BaseException{constructor(msg,details){super(msg,"UnknownErrorException"),this.details=details}}class InvalidPDFException extends BaseException{constructor(msg){super(msg,"InvalidPDFException")}}class ResponseException extends BaseException{constructor(msg,status,missing){super(msg,"ResponseException"),this.status=status,this.missing=missing}}class FormatError extends BaseException{constructor(msg){super(msg,"For\ +matError")}}class AbortException extends BaseException{constructor(msg){super(msg,"AbortException")}}function bytesToString(bytes){(typeof bytes!="object"||bytes?.length===void 0)&&unreachable("Invalid argument for bytesToString");const length=bytes.length,MAX_ARGUMENT_COUNT=8192;if(length<MAX_ARGUMENT_COUNT)return String.fromCharCode.apply(null,bytes);const strBuf=[];for(let i=0;i<length;i+=MAX_ARGUMENT_COUNT){const chunkEnd=Math.min(i+MAX_ARGUMENT_COUNT,length),chunk=bytes.subarray(i,chunkEnd); +strBuf.push(String.fromCharCode.apply(null,chunk))}return strBuf.join("")}function stringToBytes(str){typeof str!="string"&&unreachable("Invalid argument for stringToBytes");const length=str.length,bytes=new Uint8Array(length);for(let i=0;i<length;++i)bytes[i]=str.charCodeAt(i)&255;return bytes}function string32(value){return String.fromCharCode(value>>24&255,value>>16&255,value>>8&255,value&255)}function isLittleEndian(){const buffer8=new Uint8Array(4);return buffer8[0]=1,new Uint32Array(buffer8. +buffer,0,1)[0]===1}function isEvalSupported(){try{return new Function(""),!0}catch{return!1}}class util_FeatureTest{static get isLittleEndian(){return shadow(this,"isLittleEndian",isLittleEndian())}static get isEvalSupported(){return shadow(this,"isEvalSupported",isEvalSupported())}static get isOffscreenCanvasSupported(){return shadow(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas<"u")}static get isImageDecoderSupported(){return shadow(this,"isImageDecoderSupported",typeof ImageDecoder< +"u")}static get platform(){const{platform:platform2,userAgent}=navigator;return shadow(this,"platform",{isAndroid:userAgent.includes("Android"),isLinux:platform2.includes("Linux"),isMac:platform2.includes("Mac"),isWindows:platform2.includes("Win"),isFirefox:userAgent.includes("Firefox")})}static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupported",globalThis.CSS?.supports?.("width: round(1.5px, 1px)"))}}const hexNumbers=Array.from(Array(256).keys(),n=>n.toString(16).padStart(2,"0")); +class Util{static makeHexColor(r2,g,b){return`#${hexNumbers[r2]}${hexNumbers[g]}${hexNumbers[b]}`}static scaleMinMax(transform2,minMax){let temp;transform2[0]?(transform2[0]<0&&(temp=minMax[0],minMax[0]=minMax[2],minMax[2]=temp),minMax[0]*=transform2[0],minMax[2]*=transform2[0],transform2[3]<0&&(temp=minMax[1],minMax[1]=minMax[3],minMax[3]=temp),minMax[1]*=transform2[3],minMax[3]*=transform2[3]):(temp=minMax[0],minMax[0]=minMax[1],minMax[1]=temp,temp=minMax[2],minMax[2]=minMax[3],minMax[3]=temp, +transform2[1]<0&&(temp=minMax[1],minMax[1]=minMax[3],minMax[3]=temp),minMax[1]*=transform2[1],minMax[3]*=transform2[1],transform2[2]<0&&(temp=minMax[0],minMax[0]=minMax[2],minMax[2]=temp),minMax[0]*=transform2[2],minMax[2]*=transform2[2]),minMax[0]+=transform2[4],minMax[1]+=transform2[5],minMax[2]+=transform2[4],minMax[3]+=transform2[5]}static transform(m1,m2){return[m1[0]*m2[0]+m1[2]*m2[1],m1[1]*m2[0]+m1[3]*m2[1],m1[0]*m2[2]+m1[2]*m2[3],m1[1]*m2[2]+m1[3]*m2[3],m1[0]*m2[4]+m1[2]*m2[5]+m1[4],m1[1]* +m2[4]+m1[3]*m2[5]+m1[5]]}static applyTransform(p2,m,pos=0){const p0=p2[pos],p1=p2[pos+1];p2[pos]=p0*m[0]+p1*m[2]+m[4],p2[pos+1]=p0*m[1]+p1*m[3]+m[5]}static applyTransformToBezier(p2,transform2,pos=0){const m0=transform2[0],m1=transform2[1],m2=transform2[2],m3=transform2[3],m4=transform2[4],m5=transform2[5];for(let i=0;i<6;i+=2){const pI=p2[pos+i],pI1=p2[pos+i+1];p2[pos+i]=pI*m0+pI1*m2+m4,p2[pos+i+1]=pI*m1+pI1*m3+m5}}static applyInverseTransform(p2,m){const p0=p2[0],p1=p2[1],d2=m[0]*m[3]-m[1]*m[2]; +p2[0]=(p0*m[3]-p1*m[2]+m[2]*m[5]-m[4]*m[3])/d2,p2[1]=(-p0*m[1]+p1*m[0]+m[4]*m[1]-m[5]*m[0])/d2}static axialAlignedBoundingBox(rect,transform2,output){const m0=transform2[0],m1=transform2[1],m2=transform2[2],m3=transform2[3],m4=transform2[4],m5=transform2[5],r0=rect[0],r1=rect[1],r2=rect[2],r3=rect[3];let a0=m0*r0+m4,a2=a0,a1=m0*r2+m4,a3=a1,b0=m3*r1+m5,b2=b0,b1=m3*r3+m5,b3=b1;if(m1!==0||m2!==0){const m1r0=m1*r0,m1r2=m1*r2,m2r1=m2*r1,m2r3=m2*r3;a0+=m2r1,a3+=m2r1,a1+=m2r3,a2+=m2r3,b0+=m1r0,b3+=m1r0, +b1+=m1r2,b2+=m1r2}output[0]=Math.min(output[0],a0,a1,a2,a3),output[1]=Math.min(output[1],b0,b1,b2,b3),output[2]=Math.max(output[2],a0,a1,a2,a3),output[3]=Math.max(output[3],b0,b1,b2,b3)}static inverseTransform(m){const d2=m[0]*m[3]-m[1]*m[2];return[m[3]/d2,-m[1]/d2,-m[2]/d2,m[0]/d2,(m[2]*m[5]-m[4]*m[3])/d2,(m[4]*m[1]-m[5]*m[0])/d2]}static singularValueDecompose2dScale(matrix,output){const m0=matrix[0],m1=matrix[1],m2=matrix[2],m3=matrix[3],a=m0**2+m1**2,b=m0*m2+m1*m3,c2=m2**2+m3**2,first=(a+c2)/ +2,second=Math.sqrt(first**2-(a*c2-b**2));output[0]=Math.sqrt(first+second||1),output[1]=Math.sqrt(first-second||1)}static normalizeRect(rect){const r2=rect.slice(0);return rect[0]>rect[2]&&(r2[0]=rect[2],r2[2]=rect[0]),rect[1]>rect[3]&&(r2[1]=rect[3],r2[3]=rect[1]),r2}static intersect(rect1,rect2){const xLow=Math.max(Math.min(rect1[0],rect1[2]),Math.min(rect2[0],rect2[2])),xHigh=Math.min(Math.max(rect1[0],rect1[2]),Math.max(rect2[0],rect2[2]));if(xLow>xHigh)return null;const yLow=Math.max(Math.min( +rect1[1],rect1[3]),Math.min(rect2[1],rect2[3])),yHigh=Math.min(Math.max(rect1[1],rect1[3]),Math.max(rect2[1],rect2[3]));return yLow>yHigh?null:[xLow,yLow,xHigh,yHigh]}static pointBoundingBox(x,y,minMax){minMax[0]=Math.min(minMax[0],x),minMax[1]=Math.min(minMax[1],y),minMax[2]=Math.max(minMax[2],x),minMax[3]=Math.max(minMax[3],y)}static rectBoundingBox(x0,y0,x1,y1,minMax){minMax[0]=Math.min(minMax[0],x0,x1),minMax[1]=Math.min(minMax[1],y0,y1),minMax[2]=Math.max(minMax[2],x0,x1),minMax[3]=Math.max( +minMax[3],y0,y1)}static#getExtremumOnCurve(x0,x1,x2,x3,y0,y1,y2,y3,t,minMax){if(t<=0||t>=1)return;const mt=1-t,tt=t*t,ttt=tt*t,x=mt*(mt*(mt*x0+3*t*x1)+3*tt*x2)+ttt*x3,y=mt*(mt*(mt*y0+3*t*y1)+3*tt*y2)+ttt*y3;minMax[0]=Math.min(minMax[0],x),minMax[1]=Math.min(minMax[1],y),minMax[2]=Math.max(minMax[2],x),minMax[3]=Math.max(minMax[3],y)}static#getExtremum(x0,x1,x2,x3,y0,y1,y2,y3,a,b,c2,minMax){if(Math.abs(a)<1e-12){Math.abs(b)>=1e-12&&this.#getExtremumOnCurve(x0,x1,x2,x3,y0,y1,y2,y3,-c2/b,minMax);return} +const delta=b**2-4*c2*a;if(delta<0)return;const sqrtDelta=Math.sqrt(delta),a2=2*a;this.#getExtremumOnCurve(x0,x1,x2,x3,y0,y1,y2,y3,(-b+sqrtDelta)/a2,minMax),this.#getExtremumOnCurve(x0,x1,x2,x3,y0,y1,y2,y3,(-b-sqrtDelta)/a2,minMax)}static bezierBoundingBox(x0,y0,x1,y1,x2,y2,x3,y3,minMax){minMax[0]=Math.min(minMax[0],x0,x3),minMax[1]=Math.min(minMax[1],y0,y3),minMax[2]=Math.max(minMax[2],x0,x3),minMax[3]=Math.max(minMax[3],y0,y3),this.#getExtremum(x0,x1,x2,x3,y0,y1,y2,y3,3*(-x0+3*(x1-x2)+x3),6*(x0- +2*x1+x2),3*(x1-x0),minMax),this.#getExtremum(x0,x1,x2,x3,y0,y1,y2,y3,3*(-y0+3*(y1-y2)+y3),6*(y0-2*y1+y2),3*(y1-y0),minMax)}}function stringToUTF8String(str){return decodeURIComponent(escape(str))}let NormalizeRegex=null,NormalizationMap=null;function normalizeUnicode(str){return NormalizeRegex||(NormalizeRegex=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu, +NormalizationMap=new Map([["ſt","ſt"]])),str.replaceAll(NormalizeRegex,(_,p1,p2)=>p1?p1.normalize("NFKC"):NormalizationMap.get(p2))}function getUuid(){if(typeof crypto.randomUUID=="function")return crypto.randomUUID();const buf=new Uint8Array(32);return crypto.getRandomValues(buf),bytesToString(buf)}const AnnotationPrefix="pdfjs_internal_id_";function _isValidExplicitDest(validRef,validName,dest){if(!Array.isArray(dest)||dest.length<2)return!1;const[page2,zoom,...args]=dest;if(!validRef(page2)&& +!Number.isInteger(page2)||!validName(zoom))return!1;const argsLen=args.length;let allowNull=!0;switch(zoom.name){case"XYZ":if(argsLen<2||argsLen>3)return!1;break;case"Fit":case"FitB":return argsLen===0;case"FitH":case"FitBH":case"FitV":case"FitBV":if(argsLen>1)return!1;break;case"FitR":if(argsLen!==4)return!1;allowNull=!1;break;default:return!1}for(const arg of args)if(!(typeof arg=="number"||allowNull&&arg===null))return!1;return!0}function MathClamp(v,min2,max2){return Math.min(Math.max(v,min2), +max2)}function toBase64Util(arr){return Uint8Array.prototype.toBase64?arr.toBase64():btoa(bytesToString(arr))}function fromBase64Util(str){return Uint8Array.fromBase64?Uint8Array.fromBase64(str):stringToBytes(atob(str))}typeof Promise.try!="function"&&(Promise.try=function(fn,...args){return new Promise(resolve2=>{resolve2(fn(...args))})});typeof Math.sumPrecise!="function"&&(Math.sumPrecise=function(numbers){return numbers.reduce((a,b)=>a+b,0)});const SVG_NS="http://www.w3.org/2000/svg";class PixelsPerInch{static CSS=96;static PDF=72;static PDF_TO_CSS_UNITS=this. CSS/this.PDF}async function fetchData(url2,type2="text"){if(isValidFetchUrl(url2,document.baseURI)){const response=await fetch(url2);if(!response.ok)throw new Error(response.statusText);switch(type2){case"arraybuffer":return response.arrayBuffer();case"blob":return response.blob();case"json":return response.json()}return response.text()}return new Promise((resolve2,reject)=>{const request=new XMLHttpRequest;request.open("GET",url2,!0),request.responseType=type2,request.onreadystatechange=()=>{if(request. readyState===XMLHttpRequest.DONE){if(request.status===200||request.status===0){switch(type2){case"arraybuffer":case"blob":case"json":resolve2(request.response);return}resolve2(request.responseText);return}reject(new Error(request.statusText))}},request.send(null)})}class PageViewport{constructor({viewBox,userUnit,scale:scale2,rotation,offsetX=0,offsetY=0,dontFlip=!1}){this.viewBox=viewBox,this.userUnit=userUnit,this.scale=scale2,this.rotation=rotation,this.offsetX=offsetX,this.offsetY=offsetY,scale2*= userUnit;const centerX=(viewBox[2]+viewBox[0])/2,centerY=(viewBox[3]+viewBox[1])/2;let rotateA,rotateB,rotateC,rotateD;switch(rotation%=360,rotation<0&&(rotation+=360),rotation){case 180:rotateA=-1,rotateB=0,rotateC=0,rotateD=1;break;case 90:rotateA=0,rotateB=1,rotateC=1,rotateD=0;break;case 270:rotateA=0,rotateB=-1,rotateC=-1,rotateD=0;break;case 0:rotateA=1,rotateB=0,rotateC=0,rotateD=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}dontFlip&& @@ -5160,8 +5244,8 @@ this.#translationTimeoutId=null),this._editorUndoBar?.destroy()}combinedSignal(a this,"direction",getComputedStyle(this.#container).direction)}get _highlightColors(){return shadow(this,"_highlightColors",this.#highlightColors?new Map(this.#highlightColors.split(",").map(pair=>(pair=pair.split("=").map(x=>x.trim()),pair[1]=pair[1].toUpperCase(),pair))):null)}get highlightColors(){const{_highlightColors}=this;if(!_highlightColors)return shadow(this,"highlightColors",null);const map2=new Map,hasHCM=!!this.#pageColors;for(const[name,color]of _highlightColors){const isNameForHCM=name. endsWith("_HCM");if(hasHCM&&isNameForHCM){map2.set(name.replace("_HCM",""),color);continue}!hasHCM&&!isNameForHCM&&map2.set(name,color)}return shadow(this,"highlightColors",map2)}get highlightColorNames(){return shadow(this,"highlightColorNames",this.highlightColors?new Map(Array.from(this.highlightColors,e=>e.reverse())):null)}getNonHCMColor(color){if(!this._highlightColors)return color;const colorName=this.highlightColorNames.get(color);return this._highlightColors.get(colorName)||color}getNonHCMColorName(color){ return this.highlightColorNames.get(color)||color}setCurrentDrawingSession(layer){layer?(this.unselectAll(),this.disableUserSelect(!0)):this.disableUserSelect(!1),this.#currentDrawingSession=layer}setMainHighlightColorPicker(colorPicker){this.#mainHighlightColorPicker=colorPicker}editAltText(editor,firstTime=!1){this.#altTextManager?.editAltText(this,editor,firstTime)}hasCommentManager(){return!!this.#commentManager}editComment(editor,position2){this.#commentManager?.open(this,editor,position2)}getSignature(editor){ -this.#signatureManager?.getSignature({uiManager:this,editor})}get signatureManager(){return this.#signatureManager}switchToMode(mode,callback){this._eventBus.on("annotationeditormodechanged",callback,{once:!0,signal:this._signal}),this._eventBus.dispatch("showannotationeditorui",{source:this,mode})}setPreference(name,value){this._eventBus.dispatch("setpreference",{source:this,name,value})}onSetPreference({name,value}){switch(name){case"enableNewAltTextWhenAddingImage":this.#enableNewAltTextWhenAddingImage= -value;break}}onPageChanging({pageNumber}){this.#currentPageIndex=pageNumber-1}focusMainContainer(){this.#container.focus()}findParent(x,y){for(const layer of this.#allLayers.values()){const{x:layerX,y:layerY,width,height}=layer.div.getBoundingClientRect();if(x>=layerX&&x<=layerX+width&&y>=layerY&&y<=layerY+height)return layer}return null}disableUserSelect(value=!1){this.#viewer.classList.toggle("noUserSelect",value)}addShouldRescale(editor){this.#editorsToRescale.add(editor)}removeShouldRescale(editor){ +this.#signatureManager?.getSignature({uiManager:this,editor})}get signatureManager(){return this.#signatureManager}switchToMode(mode,callback){this._eventBus.on("annotationeditormodechanged",callback,{once:!0,signal:this._signal}),this._eventBus.dispatch("showannotationeditorui",{source:this,mode})}setPreference(name,value){this._eventBus.dispatch("setpreference",{source:this,name,value})}onSetPreference({name,value}){name==="enableNewAltTextWhenAddingImage"&&(this.#enableNewAltTextWhenAddingImage= +value)}onPageChanging({pageNumber}){this.#currentPageIndex=pageNumber-1}focusMainContainer(){this.#container.focus()}findParent(x,y){for(const layer of this.#allLayers.values()){const{x:layerX,y:layerY,width,height}=layer.div.getBoundingClientRect();if(x>=layerX&&x<=layerX+width&&y>=layerY&&y<=layerY+height)return layer}return null}disableUserSelect(value=!1){this.#viewer.classList.toggle("noUserSelect",value)}addShouldRescale(editor){this.#editorsToRescale.add(editor)}removeShouldRescale(editor){ this.#editorsToRescale.delete(editor)}onScaleChanging({scale:scale2}){this.commitOrRemove(),this.viewParameters.realScale=scale2*PixelsPerInch.PDF_TO_CSS_UNITS;for(const editor of this.#editorsToRescale)editor.onScaleChanging();this.#currentDrawingSession?.onScaleChanging()}onRotationChanging({pagesRotation}){this.commitOrRemove(),this.viewParameters.rotation=pagesRotation}#getAnchorElementForSelection({anchorNode}){return anchorNode.nodeType===Node.TEXT_NODE?anchorNode.parentElement:anchorNode}#getLayerForTextLayer(textLayer){ const{currentLayer}=this;if(currentLayer.hasTextLayer(textLayer))return currentLayer;for(const layer of this.#allLayers.values())if(layer.hasTextLayer(textLayer))return layer;return null}highlightSelection(methodOfCreation=""){const selection=document.getSelection();if(!selection||selection.isCollapsed)return;const{anchorNode,anchorOffset,focusNode,focusOffset}=selection,text2=selection.toString(),textLayer=this.#getAnchorElementForSelection(selection).closest(".textLayer"),boxes=this.getSelectionBoxes( textLayer);if(!boxes)return;selection.empty();const layer=this.#getLayerForTextLayer(textLayer),isNoneMode=this.#mode===AnnotationEditorType.NONE,callback=()=>{layer?.createAndAddNewEditor({x:0,y:0},!1,{methodOfCreation,boxes,anchorNode,anchorOffset,focusNode,focusOffset,text:text2}),isNoneMode&&this.showAllEditors("highlight",!0,!0)};if(isNoneMode){this.switchToMode(AnnotationEditorType.HIGHLIGHT,callback);return}callback()}#displayHighlightToolbar(){const selection=document.getSelection();if(!selection|| @@ -6095,7 +6179,7 @@ id"in msg&&"convId"in msg&&"timestamp"in msg?ChatService.convertDbMessageToApiCh n_predict:0};model&&(requestBody.model=model);try{await fetch("./v1/chat/completions",{method:"POST",headers:getJsonHeaders(),body:JSON.stringify(requestBody),signal})}catch(error2){isAbortError(error2)||console.warn("[ChatService] Pre-encode request failed:",error2)}}static async handleStreamResponse(response,onChunk,onComplete,onError,onReasoningChunk,onToolCallChunk,onModel,onTimings,conversationId,abortSignal){const reader=response.body?.getReader();if(!reader)throw new Error("No response bo\ dy");const decoder=new TextDecoder;let aggregatedContent="",fullReasoningContent="",aggregatedToolCalls=[],lastTimings,streamFinished=!1,modelEmitted=!1,toolCallIndexOffset=0,hasOpenToolCallBatch=!1;const finalizeOpenToolCallBatch=()=>{hasOpenToolCallBatch&&(toolCallIndexOffset=aggregatedToolCalls.length,hasOpenToolCallBatch=!1)},processToolCallDelta=toolCalls=>{if(!toolCalls||toolCalls.length===0||(aggregatedToolCalls=ChatService.mergeToolCallDeltas(aggregatedToolCalls,toolCalls,toolCallIndexOffset), aggregatedToolCalls.length===0))return;hasOpenToolCallBatch=!0;const serializedToolCalls=JSON.stringify(aggregatedToolCalls);serializedToolCalls&&(abortSignal?.aborted||onToolCallChunk?.(serializedToolCalls))};try{let chunk="";for(;!abortSignal?.aborted;){const{done,value}=await reader.read();if(done||abortSignal?.aborted)break;chunk+=decoder.decode(value,{stream:!0});const lines=chunk.split(` -`);chunk=lines.pop()||"";for(const line of lines){if(abortSignal?.aborted)break;if(line.startsWith(UrlProtocol.DATA)){const data=line.slice(6);if(data==="[DONE]"){streamFinished=!0;continue}try{const parsed=JSON.parse(data),content2=parsed.choices[0]?.delta?.content,reasoningContent=parsed.choices[0]?.delta?.reasoning_content,toolCalls=parsed.choices[0]?.delta?.tool_calls,timings=parsed.timings,promptProgress=parsed.prompt_progress,chunkModel=ChatService.extractModelName(parsed);chunkModel&&!modelEmitted&& +`);chunk=lines.pop()||"";for(const line of lines){if(abortSignal?.aborted)break;if(line.startsWith(UrlProtocol.DATA)){const data=line.slice(6);if(data==="[DONE]"){streamFinished=!0;continue}try{const parsed=JSON.parse(data),choice=parsed.choices?.[0],content2=choice?.delta?.content,reasoningContent=choice?.delta?.reasoning_content,toolCalls=choice?.delta?.tool_calls,timings=parsed.timings,promptProgress=parsed.prompt_progress,chunkModel=ChatService.extractModelName(parsed);chunkModel&&!modelEmitted&& (modelEmitted=!0,onModel?.(chunkModel)),promptProgress&&ChatService.notifyTimings(void 0,promptProgress,onTimings),timings&&(ChatService.notifyTimings(timings,promptProgress,onTimings),lastTimings=timings),content2&&(finalizeOpenToolCallBatch(),aggregatedContent+=content2,abortSignal?.aborted||onChunk?.(content2)),reasoningContent&&(finalizeOpenToolCallBatch(),fullReasoningContent+=reasoningContent,abortSignal?.aborted||onReasoningChunk?.(reasoningContent)),processToolCallDelta(toolCalls)}catch(e){ console.error("Error parsing JSON chunk:",e)}}}if(abortSignal?.aborted)break}if(abortSignal?.aborted)return;if(streamFinished){finalizeOpenToolCallBatch();const finalToolCalls=aggregatedToolCalls.length>0?JSON.stringify(aggregatedToolCalls):void 0;onComplete?.(aggregatedContent,fullReasoningContent||void 0,lastTimings,finalToolCalls)}}catch(error2){const err=error2 instanceof Error?error2:new Error("Stream error");throw onError?.(err),err}finally{reader.releaseLock()}}static async handleNonStreamResponse(response,onComplete,onError,onToolCallChunk,onModel){ try{const responseText=await response.text();if(!responseText.trim())throw new Error("No response received from server. Please try again.");const data=JSON.parse(responseText),responseModel=ChatService.extractModelName(data);responseModel&&onModel?.(responseModel);const content2=data.choices[0]?.message?.content||"",reasoningContent=data.choices[0]?.message?.reasoning_content,toolCalls=data.choices[0]?.message?.tool_calls;let serializedToolCalls;if(toolCalls&&toolCalls.length>0){const mergedToolCalls=ChatService. @@ -6115,10 +6199,10 @@ const result={raw:modelId,orgName:null,modelName:null,params:null,activatedParam 1)):modelStr=modelPath;const dotIdx=modelStr.lastIndexOf(".");if(dotIdx!==MODEL_ID_NOT_FOUND&&!result.quantization){const afterDot=modelStr.slice(dotIdx+1);MODEL_QUANTIZATION_SEGMENT_RE.test(afterDot)&&(result.quantization=afterDot,modelStr=modelStr.slice(0,dotIdx))}const segments=modelStr.split(MODEL_ID_SEGMENT_SEPARATOR);if(!result.quantization&&segments.length>1){const last=segments[segments.length-1],secondLast=segments.length>2?segments[segments.length-2]:null;MODEL_QUANTIZATION_SEGMENT_RE. test(last)&&(secondLast&&MODEL_CUSTOM_QUANTIZATION_PREFIX_RE.test(secondLast)?(result.quantization=`${secondLast}-${last}`,segments.splice(segments.length-2,2)):(result.quantization=last,segments.pop()))}let paramsIdx=MODEL_ID_NOT_FOUND,activatedParamsIdx=MODEL_ID_NOT_FOUND;for(let i=0;i<segments.length;i++){const seg=segments[i];paramsIdx===MODEL_ID_NOT_FOUND&&MODEL_PARAMS_RE.test(seg)?(paramsIdx=i,result.params=seg.toUpperCase()):paramsIdx!==MODEL_ID_NOT_FOUND&&MODEL_ACTIVATED_PARAMS_RE.test(seg)&& (activatedParamsIdx=i,result.activatedParams=seg.toUpperCase())}const pivotIdx=paramsIdx!==MODEL_ID_NOT_FOUND?paramsIdx:segments.length;return result.modelName=segments.slice(0,pivotIdx).join(MODEL_ID_SEGMENT_SEPARATOR)||null,paramsIdx!==MODEL_ID_NOT_FOUND&&(result.tags=segments.slice(paramsIdx+1).filter((_,relIdx)=>{const absIdx=paramsIdx+1+relIdx;return absIdx===activatedParamsIdx?!1:!MODEL_IGNORED_SEGMENTS.has(segments[absIdx].toUpperCase())})),result}}class ModelsStore{#models=state$1(proxy( -[]));get models(){return get$4(this.#models)}set models(value){set$1(this.#models,value,!0)}#routerModels=state$1(proxy([]));get routerModels(){return get$4(this.#routerModels)}set routerModels(value){set$1(this.#routerModels,value,!0)}#loading=state$1(!1);get loading(){return get$4(this.#loading)}set loading(value){set$1(this.#loading,value,!0)}#updating=state$1(!1);get updating(){return get$4(this.#updating)}set updating(value){set$1(this.#updating,value,!0)}#error=state$1(null);get error(){return get$4( -this.#error)}set error(value){set$1(this.#error,value,!0)}#selectedModelId=state$1(null);get selectedModelId(){return get$4(this.#selectedModelId)}set selectedModelId(value){set$1(this.#selectedModelId,value,!0)}#selectedModelName=state$1(null);get selectedModelName(){return get$4(this.#selectedModelName)}set selectedModelName(value){set$1(this.#selectedModelName,value,!0)}#modelUsage=state$1(proxy(new Map));get modelUsage(){return get$4(this.#modelUsage)}set modelUsage(value){set$1(this.#modelUsage, -value,!0)}modelLoadingStates=new SvelteMap;#favoriteModelIds=state$1(proxy(this.loadFavoritesFromStorage()));get favoriteModelIds(){return get$4(this.#favoriteModelIds)}set favoriteModelIds(value){set$1(this.#favoriteModelIds,value,!0)}modelPropsCache=new TTLCache({ttlMs:MODEL_PROPS_CACHE_TTL_MS,maxEntries:MODEL_PROPS_CACHE_MAX_ENTRIES});#modelPropsFetching=state$1(proxy(new Set));get modelPropsFetching(){return get$4(this.#modelPropsFetching)}set modelPropsFetching(value){set$1(this.#modelPropsFetching, -value,!0)}#propsCacheVersion=state$1(0);get propsCacheVersion(){return get$4(this.#propsCacheVersion)}set propsCacheVersion(value){set$1(this.#propsCacheVersion,value,!0)}get selectedModel(){return this.selectedModelId?this.models.find(model=>model.id===this.selectedModelId)??null:null}get loadedModelIds(){return this.routerModels.filter(m=>m.status.value===ServerModelStatus.LOADED||m.status.value===ServerModelStatus.SLEEPING).map(m=>m.id)}get loadingModelIds(){return Array.from(this.modelLoadingStates. +[]));get models(){return get$3(this.#models)}set models(value){set$1(this.#models,value,!0)}#routerModels=state$1(proxy([]));get routerModels(){return get$3(this.#routerModels)}set routerModels(value){set$1(this.#routerModels,value,!0)}#loading=state$1(!1);get loading(){return get$3(this.#loading)}set loading(value){set$1(this.#loading,value,!0)}#updating=state$1(!1);get updating(){return get$3(this.#updating)}set updating(value){set$1(this.#updating,value,!0)}#error=state$1(null);get error(){return get$3( +this.#error)}set error(value){set$1(this.#error,value,!0)}#selectedModelId=state$1(null);get selectedModelId(){return get$3(this.#selectedModelId)}set selectedModelId(value){set$1(this.#selectedModelId,value,!0)}#selectedModelName=state$1(null);get selectedModelName(){return get$3(this.#selectedModelName)}set selectedModelName(value){set$1(this.#selectedModelName,value,!0)}#modelUsage=state$1(proxy(new Map));get modelUsage(){return get$3(this.#modelUsage)}set modelUsage(value){set$1(this.#modelUsage, +value,!0)}modelLoadingStates=new SvelteMap;#favoriteModelIds=state$1(proxy(this.loadFavoritesFromStorage()));get favoriteModelIds(){return get$3(this.#favoriteModelIds)}set favoriteModelIds(value){set$1(this.#favoriteModelIds,value,!0)}modelPropsCache=new TTLCache({ttlMs:MODEL_PROPS_CACHE_TTL_MS,maxEntries:MODEL_PROPS_CACHE_MAX_ENTRIES});#modelPropsFetching=state$1(proxy(new Set));get modelPropsFetching(){return get$3(this.#modelPropsFetching)}set modelPropsFetching(value){set$1(this.#modelPropsFetching, +value,!0)}#propsCacheVersion=state$1(0);get propsCacheVersion(){return get$3(this.#propsCacheVersion)}set propsCacheVersion(value){set$1(this.#propsCacheVersion,value,!0)}get selectedModel(){return this.selectedModelId?this.models.find(model=>model.id===this.selectedModelId)??null:null}get loadedModelIds(){return this.routerModels.filter(m=>m.status.value===ServerModelStatus.LOADED||m.status.value===ServerModelStatus.SLEEPING).map(m=>m.id)}get loadingModelIds(){return Array.from(this.modelLoadingStates. entries()).filter(([,loading])=>loading).map(([id2])=>id2)}get singleModelName(){if(serverStore.isRouterMode)return null;const props=serverStore.props;return props?.model_alias?props.model_alias:props?.model_path&&props.model_path.split(/(\\|\/)/).pop()||null}getModelModalities(modelId){const model=this.models.find(m=>m.model===modelId||m.id===modelId);if(model?.modalities)return model.modalities;const props=this.modelPropsCache.get(modelId);return props?.modalities?{vision:props.modalities.vision?? !1,audio:props.modalities.audio??!1}:null}modelSupportsVision(modelId){return this.getModelModalities(modelId)?.vision??!1}modelSupportsAudio(modelId){return this.getModelModalities(modelId)?.audio??!1}getModelModalitiesArray(modelId){const modalities=this.getModelModalities(modelId);if(!modalities)return[];const result=[];return modalities.vision&&result.push(ModelModality.VISION),modalities.audio&&result.push(ModelModality.AUDIO),result}getModelProps(modelId){return this.modelPropsCache.get(modelId)}getModelContextSize(modelId){ const nCtx=this.getModelProps(modelId)?.default_generation_settings?.n_ctx;return typeof nCtx=="number"?nCtx:null}get selectedModelContextSize(){return this.selectedModelName?this.getModelContextSize(this.selectedModelName):null}isModelPropsFetching(modelId){return this.modelPropsFetching.has(modelId)}isModelLoaded(modelId){const model=this.routerModels.find(m=>m.id===modelId);return model?.status.value===ServerModelStatus.LOADED||model?.status.value===ServerModelStatus.SLEEPING||!1}isModelOperationInProgress(modelId){ @@ -6148,1058 +6232,1254 @@ processedAsImages:!1,base64Data})}}catch(error2){console.error(`Failed to proces const results=[];for(const file of files){const base2={id:Date.now().toString()+Math.random().toString(36).substr(2,9),name:file.name,size:file.size,type:file.type,file};try{if(getFileTypeCategory(file.type)===FileTypeCategory.IMAGE){let preview=await readFileAsDataURL(file);if(isSvgMimeType(file.type))try{preview=await svgBase64UrlToPngDataURL(preview)}catch(err){console.error("Failed to convert SVG to PNG:",err)}else if(isWebpMimeType(file.type))try{preview=await webpBase64UrlToPngDataURL(preview)}catch(err){ console.error("Failed to convert WebP to PNG:",err)}results.push({...base2,preview})}else if(getFileTypeCategory(file.type)===FileTypeCategory.PDF){try{const textContent=await convertPDFToText(file);results.push({...base2,textContent})}catch(err){console.warn("Failed to extract text from PDF, adding without content:",err),results.push(base2)}const hasVisionSupport=activeModelId?modelsStore.modelSupportsVision(activeModelId):!1,currentConfig=settingsStore.config;hasVisionSupport&&!currentConfig.pdfAsImage&& toast.info("You can enable parsing PDF as images with vision models.",{duration:8e3,action:{label:"Enable PDF as Images",onClick:()=>{settingsStore.updateConfig("pdfAsImage",!0),toast.success("PDF parsing as images enabled!",{duration:3e3})}}})}else if(getFileTypeCategory(file.type)===FileTypeCategory.AUDIO){const preview=await readFileAsDataURL(file);results.push({...base2,preview})}else try{const textContent=await readFileAsUTF8(file);results.push({...base2,textContent})}catch(err){console.warn( -"Failed to read file as text, adding without content:",err),results.push(base2)}}catch(error2){console.error("Error processing file",file.name,error2),results.push(base2)}}return results}var root_2$11=from_html("<!> Text",1),root_4$x=from_html('<div class="mr-1 h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent"></div>'),root_3$T=from_html("<!> Pages",1),root_1$V=from_html('<div class="flex items-center gap-2"><!> <!></div>'),root_6$y=from_html('<div class="flex items\ --center justify-center"><img class="max-h-full rounded-lg object-contain shadow-lg"/></div>'),root_12$9=from_html('<span class="inline-flex">The selected model does not support vision. Only the extracted <span class="mx-1 cursor-pointer underline">text</span> will be sent to the model.</span>'),root_10$i=from_html("<!> <!> <!>",1),root_13$d=from_html('<div class="flex items-center justify-center p-8"><div class="text-center"><div class="mx-auto mb-4 h-8 w-8 animate-spin rounded-full border-4 bo\ -rder-primary border-t-transparent"></div> <p class="text-muted-foreground">Converting PDF to images...</p></div></div>'),root_15$6=from_html('<div class="flex items-center justify-center p-8"><div class="text-center"><!> <p class="mb-4 text-muted-foreground">Failed to load PDF images</p> <p class="text-sm text-muted-foreground"> </p> <!></div></div>'),root_19$3=from_html('<div class="text-center"><p class="mb-2 text-sm text-muted-foreground"> </p> <img class="mx-auto max-w-full rounded-lg shadow\ --lg"/></div>'),root_18$6=from_html('<div class="max-h-[70vh] space-y-4 overflow-auto"></div>'),root_20$a=from_html('<div class="flex items-center justify-center p-8"><div class="text-center"><!> <p class="mb-4 text-muted-foreground">No PDF pages available</p></div></div>'),root_8$o=from_html("<!> <!>",1),root_25=from_html('<audio controls class="mb-4 w-full">Your browser does not support the audio element.</audio>'),root_27$2=from_html('<audio controls class="mb-4 w-full">Your browser does not s\ -upport the audio element.</audio>'),root_28$4=from_html('<p class="mb-4 text-muted-foreground">Audio preview not available</p>'),root_24$3=from_html('<div class="flex items-center justify-center p-8"><div class="w-full max-w-md text-center"><!> <!> <p class="text-sm text-muted-foreground"> </p></div></div>'),root_29$2=from_html('<div class="flex items-center justify-center p-8"><div class="text-center"><!> <p class="mb-4 text-muted-foreground">Preview not available for this file type</p></div></\ -div>'),root$1q=from_html('<div class="space-y-4"><div class="flex items-center justify-end gap-6"><!></div> <div class="flex-1 overflow-auto"><!></div></div>');function ChatAttachmentPreview($$anchor,$$props){push$1($$props,!0);let hasVisionModality=user_derived(()=>$$props.activeModelId?modelsStore.modelSupportsVision($$props.activeModelId):!1),displayName=user_derived(()=>$$props.uploadedFile?.name||$$props.attachment?.name||$$props.name||"Unknown File"),isAudio=user_derived(()=>isAudioFile($$props. -attachment,$$props.uploadedFile)),isImage2=user_derived(()=>isImageFile($$props.attachment,$$props.uploadedFile)),isPdf=user_derived(()=>isPdfFile$1($$props.attachment,$$props.uploadedFile)),isText=user_derived(()=>isTextFile($$props.attachment,$$props.uploadedFile)),displayPreview=user_derived(()=>$$props.uploadedFile?.preview||(get$4(isImage2)&&$$props.attachment&&"base64Url"in $$props.attachment?$$props.attachment.base64Url:$$props.preview)),displayTextContent=user_derived(()=>$$props.uploadedFile?. -textContent||($$props.attachment&&"content"in $$props.attachment?$$props.attachment.content:$$props.textContent)),language2=user_derived(()=>getLanguageFromFilename(get$4(displayName))),IconComponent=user_derived(()=>()=>get$4(isImage2)?Image$1:get$4(isText)||get$4(isPdf)?File_text:get$4(isAudio)?Music:File$1),pdfViewMode=state$1("pages"),pdfImages=state$1(proxy([])),pdfImagesLoading=state$1(!1),pdfImagesError=state$1(null);async function loadPdfImages(){if(!(!get$4(isPdf)||get$4(pdfImages).length> -0||get$4(pdfImagesLoading))){set$1(pdfImagesLoading,!0),set$1(pdfImagesError,null);try{let file=null;if($$props.uploadedFile?.file)file=$$props.uploadedFile.file;else if(get$4(isPdf)&&$$props.attachment){if("images"in $$props.attachment&&$$props.attachment.images&&Array.isArray($$props.attachment.images)&&$$props.attachment.images.length>0){set$1(pdfImages,$$props.attachment.images,!0);return}if("base64Data"in $$props.attachment&&$$props.attachment.base64Data){const base64Data=$$props.attachment. -base64Data,byteCharacters=atob(base64Data),byteNumbers=new Array(byteCharacters.length);for(let i=0;i<byteCharacters.length;i++)byteNumbers[i]=byteCharacters.charCodeAt(i);const byteArray=new Uint8Array(byteNumbers);file=new File([byteArray],get$4(displayName),{type:"application/pdf"})}}if(file)set$1(pdfImages,await convertPDFToImage(file),!0);else throw new Error("No PDF file available for conversion")}catch(error2){set$1(pdfImagesError,error2 instanceof Error?error2.message:"Failed to load PDF\ - images",!0)}finally{set$1(pdfImagesLoading,!1)}}}function reset$1(){set$1(pdfImages,[],!0),set$1(pdfImagesLoading,!1),set$1(pdfImagesError,null),set$1(pdfViewMode,"pages")}user_effect(()=>{get$4(isPdf)&&get$4(pdfViewMode)==="pages"&&loadPdfImages()});var $$exports={reset:reset$1},div=root$1q(),div_1=child(div),node2=child(div_1);{var consequent_1=$$anchor2=>{var div_2=root_1$V(),node_1=child(div_2);{let $0=user_derived(()=>get$4(pdfViewMode)==="text"?"default":"outline");Button(node_1,{get variant(){ -return get$4($0)},size:"sm",onclick:()=>set$1(pdfViewMode,"text"),get disabled(){return get$4(pdfImagesLoading)},children:($$anchor3,$$slotProps)=>{var fragment=root_2$11(),node_2=first_child(fragment);File_text(node_2,{class:"mr-1 h-4 w-4"}),next$1(),append($$anchor3,fragment)},$$slots:{default:!0}})}var node_3=sibling(node_1,2);{let $0=user_derived(()=>get$4(pdfViewMode)==="pages"?"default":"outline");Button(node_3,{get variant(){return get$4($0)},size:"sm",onclick:()=>{set$1(pdfViewMode,"page\ -s"),loadPdfImages()},get disabled(){return get$4(pdfImagesLoading)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_3$T(),node_4=first_child(fragment_1);{var consequent=$$anchor4=>{var div_3=root_4$x();append($$anchor4,div_3)},alternate=$$anchor4=>{Eye($$anchor4,{class:"mr-1 h-4 w-4"})};if_block(node_4,$$render=>{get$4(pdfImagesLoading)?$$render(consequent):$$render(alternate,!1)})}next$1(),append($$anchor3,fragment_1)},$$slots:{default:!0}})}reset(div_2),append($$anchor2,div_2)};if_block( -node2,$$render=>{get$4(isPdf)&&$$render(consequent_1)})}reset(div_1);var div_4=sibling(div_1,2),node_5=child(div_4);{var consequent_2=$$anchor2=>{var div_5=root_6$y(),img=child(div_5);reset(div_5),template_effect(()=>{set_attribute(img,"src",get$4(displayPreview)),set_attribute(img,"alt",get$4(displayName))}),append($$anchor2,div_5)},alternate_9=$$anchor2=>{var fragment_3=comment$2(),node_6=first_child(fragment_3);{var consequent_7=$$anchor3=>{var fragment_4=root_8$o(),node_7=first_child(fragment_4); -{var consequent_3=$$anchor4=>{var fragment_5=comment$2(),node_8=first_child(fragment_5);component(node_8,()=>Alert,($$anchor5,Alert_Root)=>{Alert_Root($$anchor5,{class:"mb-4",children:($$anchor6,$$slotProps)=>{var fragment_6=root_10$i(),node_9=first_child(fragment_6);Info$1(node_9,{class:"h-4 w-4"});var node_10=sibling(node_9,2);component(node_10,()=>Alert_title,($$anchor7,Alert_Title)=>{Alert_Title($$anchor7,{children:($$anchor8,$$slotProps2)=>{next$1();var text2=text$8("Preview only");append($$anchor8, -text2)},$$slots:{default:!0}})});var node_11=sibling(node_10,2);component(node_11,()=>Alert_description,($$anchor7,Alert_Description)=>{Alert_Description($$anchor7,{children:($$anchor8,$$slotProps2)=>{var span=root_12$9(),span_1=sibling(child(span));span_1.__click=()=>set$1(pdfViewMode,"text"),next$1(),reset(span),append($$anchor8,span)},$$slots:{default:!0}})}),append($$anchor6,fragment_6)},$$slots:{default:!0}})}),append($$anchor4,fragment_5)};if_block(node_7,$$render=>{!get$4(hasVisionModality)&& -$$props.activeModelId&&$$render(consequent_3)})}var node_12=sibling(node_7,2);{var consequent_4=$$anchor4=>{var div_6=root_13$d();append($$anchor4,div_6)},alternate_3=$$anchor4=>{var fragment_7=comment$2(),node_13=first_child(fragment_7);{var consequent_5=$$anchor5=>{var div_7=root_15$6(),div_8=child(div_7),node_14=child(div_8);File_text(node_14,{class:"mx-auto mb-4 h-16 w-16 text-muted-foreground"});var p2=sibling(node_14,4),text_1=child(p2,!0);reset(p2);var node_15=sibling(p2,2);Button(node_15, -{class:"mt-4",onclick:()=>set$1(pdfViewMode,"text"),children:($$anchor6,$$slotProps)=>{next$1();var text_2=text$8("View as Text");append($$anchor6,text_2)},$$slots:{default:!0}}),reset(div_8),reset(div_7),template_effect(()=>set_text(text_1,get$4(pdfImagesError))),append($$anchor5,div_7)},alternate_2=$$anchor5=>{var fragment_8=comment$2(),node_16=first_child(fragment_8);{var consequent_6=$$anchor6=>{var div_9=root_18$6();each(div_9,22,()=>get$4(pdfImages),image2=>image2,($$anchor7,image2,index2)=>{ -var div_10=root_19$3(),p_1=child(div_10),text_3=child(p_1);reset(p_1);var img_1=sibling(p_1,2);reset(div_10),template_effect(()=>{set_text(text_3,`Page ${get$4(index2)+1}`),set_attribute(img_1,"src",image2),set_attribute(img_1,"alt",`PDF Page ${get$4(index2)+1}`)}),append($$anchor7,div_10)}),reset(div_9),append($$anchor6,div_9)},alternate_1=$$anchor6=>{var div_11=root_20$a(),div_12=child(div_11),node_17=child(div_12);File_text(node_17,{class:"mx-auto mb-4 h-16 w-16 text-muted-foreground"}),next$1( -2),reset(div_12),reset(div_11),append($$anchor6,div_11)};if_block(node_16,$$render=>{get$4(pdfImages).length>0?$$render(consequent_6):$$render(alternate_1,!1)},!0)}append($$anchor5,fragment_8)};if_block(node_13,$$render=>{get$4(pdfImagesError)?$$render(consequent_5):$$render(alternate_2,!1)},!0)}append($$anchor4,fragment_7)};if_block(node_12,$$render=>{get$4(pdfImagesLoading)?$$render(consequent_4):$$render(alternate_3,!1)})}append($$anchor3,fragment_4)},alternate_8=$$anchor3=>{var fragment_9=comment$2(), -node_18=first_child(fragment_9);{var consequent_8=$$anchor4=>{SyntaxHighlightedCode($$anchor4,{get code(){return get$4(displayTextContent)},get language(){return get$4(language2)},maxWidth:"calc(69rem - 2rem)"})},alternate_7=$$anchor4=>{var fragment_11=comment$2(),node_19=first_child(fragment_11);{var consequent_11=$$anchor5=>{var div_13=root_24$3(),div_14=child(div_13),node_20=child(div_14);Music(node_20,{class:"mx-auto mb-4 h-16 w-16 text-muted-foreground"});var node_21=sibling(node_20,2);{var consequent_9=$$anchor6=>{ -var audio=root_25();template_effect(()=>set_attribute(audio,"src",$$props.uploadedFile.preview)),append($$anchor6,audio)},alternate_5=$$anchor6=>{var fragment_12=comment$2(),node_22=first_child(fragment_12);{var consequent_10=$$anchor7=>{var audio_1=root_27$2();template_effect($0=>set_attribute(audio_1,"src",$0),[()=>createBase64DataUrl($$props.attachment.mimeType,$$props.attachment.base64Data)]),append($$anchor7,audio_1)},alternate_4=$$anchor7=>{var p_2=root_28$4();append($$anchor7,p_2)};if_block( -node_22,$$render=>{get$4(isAudio)&&$$props.attachment&&"mimeType"in $$props.attachment&&"base64Data"in $$props.attachment?$$render(consequent_10):$$render(alternate_4,!1)},!0)}append($$anchor6,fragment_12)};if_block(node_21,$$render=>{$$props.uploadedFile?.preview?$$render(consequent_9):$$render(alternate_5,!1)})}var p_3=sibling(node_21,2),text_4=child(p_3,!0);reset(p_3),reset(div_14),reset(div_13),template_effect(()=>set_text(text_4,get$4(displayName))),append($$anchor5,div_13)},alternate_6=$$anchor5=>{ -var div_15=root_29$2(),div_16=child(div_15),node_23=child(div_16);{var consequent_12=$$anchor6=>{var fragment_13=comment$2(),node_24=first_child(fragment_13);component(node_24,()=>get$4(IconComponent),($$anchor7,IconComponent_1)=>{IconComponent_1($$anchor7,{class:"mx-auto mb-4 h-16 w-16 text-muted-foreground"})}),append($$anchor6,fragment_13)};if_block(node_23,$$render=>{get$4(IconComponent)&&$$render(consequent_12)})}next$1(2),reset(div_16),reset(div_15),append($$anchor5,div_15)};if_block(node_19, -$$render=>{get$4(isAudio)?$$render(consequent_11):$$render(alternate_6,!1)},!0)}append($$anchor4,fragment_11)};if_block(node_18,$$render=>{(get$4(isText)||get$4(isPdf)&&get$4(pdfViewMode)==="text")&&get$4(displayTextContent)?$$render(consequent_8):$$render(alternate_7,!1)},!0)}append($$anchor3,fragment_9)};if_block(node_6,$$render=>{get$4(isPdf)&&get$4(pdfViewMode)==="pages"?$$render(consequent_7):$$render(alternate_8,!1)},!0)}append($$anchor2,fragment_3)};if_block(node_5,$$render=>{get$4(isImage2)&& -get$4(displayPreview)?$$render(consequent_2):$$render(alternate_9,!1)})}return reset(div_4),reset(div),append($$anchor,div),pop($$exports)}delegate(["click"]);var root_1$U=from_html("<div><!></div>");function ChatAttachmentMcpResources($$anchor,$$props){push$1($$props,!0);const attachments=user_derived(mcpResourceAttachments),hasAttachments=user_derived(mcpHasResourceAttachments);function handleRemove(attachmentId){mcpStore.removeResourceAttachment(attachmentId)}function handleResourceClick(uri2){ -$$props.onResourceClick?.(uri2)}var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var div=root_1$U(),node_1=child(div);HorizontalScrollCarousel(node_1,{gapSize:"2",children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);each(node_2,19,()=>get$4(attachments),attachment=>attachment.id,($$anchor4,attachment,i)=>{{let $0=user_derived(()=>get$4(i)===0?"ml-3":"");ChatAttachmentMcpResource($$anchor4,{get class(){return get$4($0)},get attachment(){ -return get$4(attachment)},onRemove:handleRemove,onClick:()=>handleResourceClick(get$4(attachment).resource.uri)})}}),append($$anchor3,fragment_1)},$$slots:{default:!0}}),reset(div),template_effect(()=>set_class(div,1,clsx($$props.class))),append($$anchor2,div)};if_block(node2,$$render=>{get$4(hasAttachments)&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_3$S=from_html('<span class="text-xs text-muted-foreground"> </span>'),root_5$u=from_html('<div class="pointer-events-none abs\ -olute right-0 bottom-0 left-0 h-6 bg-gradient-to-t from-muted to-transparent"></div>'),root_4$w=from_html('<div class="relative mt-2 w-full"><div class="overflow-hidden font-mono text-xs leading-relaxed break-words whitespace-pre-wrap text-muted-foreground"> </div> <!></div>'),root_2$10=from_html('<button type="button"><div class="flex items-start gap-3"><div class="flex min-w-0 flex-1 flex-col items-start text-left"><span class="w-full truncate text-sm font-medium text-foreground"> </span> <!> \ -<!></div></div></button>'),root_8$n=from_html('<div class="pointer-events-none absolute right-0 bottom-0 left-0 h-4 bg-gradient-to-t from-muted to-transparent"></div>'),root_7$r=from_html('<div class="relative"><div class="overflow-hidden font-mono text-xs leading-relaxed break-words whitespace-pre-wrap text-muted-foreground" style="max-height: 3rem; line-height: 1.2em;"> </div> <!></div>'),root_6$x=from_html('<button><div class="absolute top-2 right-2 opacity-0 transition-opacity group-hover:op\ -acity-100"><!></div> <div class="pr-8"><span class="mb-3 block truncate text-sm font-medium text-foreground"> </span> <!></div></button>'),root_10$h=from_html('<span class="text-left text-xs text-muted-foreground"> </span>'),root_12$8=from_html('<span class="text-left text-xs text-muted-foreground"> </span>'),root_13$c=from_html('<div class="absolute top-2 right-2 opacity-0 transition-opacity group-hover:opacity-100"><!></div>'),root_9$m=from_html('<button><div class="flex h-8 w-8 items-center j\ -ustify-center rounded bg-primary/10 text-xs font-medium text-primary"> </div> <div class="flex flex-col gap-0.5"><span> </span> <!></div> <!></button>');function ChatAttachmentThumbnailFile($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),readonly2=prop($$props,"readonly",3,!1),isText=user_derived(()=>isTextFile($$props.attachment,$$props.uploadedFile)),fileTypeLabel=user_derived(()=>{if($$props.uploadedFile?.type)return getFileTypeLabel($$props.uploadedFile.type);if($$props. -attachment){if("mimeType"in $$props.attachment&&$$props.attachment.mimeType)return getFileTypeLabel($$props.attachment.mimeType);if($$props.attachment.type)return getFileTypeLabel($$props.attachment.type)}return getFileTypeLabel($$props.name)}),pdfProcessingMode=user_derived(()=>$$props.attachment?.type===AttachmentType.PDF?$$props.attachment.processedAsImages?"Sent as Image":"Sent as Text":null);var fragment=comment$2(),node2=first_child(fragment);{var consequent_6=$$anchor2=>{var fragment_1=comment$2(), -node_1=first_child(fragment_1);{var consequent_3=$$anchor3=>{var button=root_2$10();button.__click=function(...$$args){$$props.onClick?.apply(this,$$args)};var div=child(button),div_1=child(div),span=child(div_1),text2=child(span,!0);reset(span);var node_2=sibling(span,2);{var consequent=$$anchor4=>{var span_1=root_3$S(),text_1=child(span_1,!0);reset(span_1),template_effect($0=>set_text(text_1,$0),[()=>formatFileSize($$props.size)]),append($$anchor4,span_1)};if_block(node_2,$$render=>{$$props.size&& -$$render(consequent)})}var node_3=sibling(node_2,2);{var consequent_2=$$anchor4=>{var div_2=root_4$w(),div_3=child(div_2),text_2=child(div_3,!0);reset(div_3);var node_4=sibling(div_3,2);{var consequent_1=$$anchor5=>{var div_4=root_5$u();append($$anchor5,div_4)};if_block(node_4,$$render=>{$$props.textContent.length>150&&$$render(consequent_1)})}reset(div_2),template_effect($0=>set_text(text_2,$0),[()=>getPreviewText($$props.textContent)]),append($$anchor4,div_2)};if_block(node_3,$$render=>{$$props. -textContent&&$$render(consequent_2)})}reset(div_1),reset(div),reset(button),template_effect(()=>{set_class(button,1,`cursor-pointer rounded-lg border border-border bg-muted p-3 transition-shadow hover:shadow-md ${className()??""} w-full max-w-2xl`),set_attribute(button,"aria-label",`Preview ${$$props.name}`),set_text(text2,$$props.name)}),append($$anchor3,button)},alternate=$$anchor3=>{var button_1=root_6$x();button_1.__click=function(...$$args){$$props.onClick?.apply(this,$$args)};var div_5=child( -button_1),node_5=child(div_5);ActionIconRemove(node_5,{get id(){return $$props.id},get onRemove(){return $$props.onRemove}}),reset(div_5);var div_6=sibling(div_5,2),span_2=child(div_6),text_3=child(span_2,!0);reset(span_2);var node_6=sibling(span_2,2);{var consequent_5=$$anchor4=>{var div_7=root_7$r(),div_8=child(div_7),text_4=child(div_8,!0);reset(div_8);var node_7=sibling(div_8,2);{var consequent_4=$$anchor5=>{var div_9=root_8$n();append($$anchor5,div_9)};if_block(node_7,$$render=>{$$props.textContent. -length>150&&$$render(consequent_4)})}reset(div_7),template_effect($0=>set_text(text_4,$0),[()=>getPreviewText($$props.textContent)]),append($$anchor4,div_7)};if_block(node_6,$$render=>{$$props.textContent&&$$render(consequent_5)})}reset(div_6),reset(button_1),template_effect(()=>{set_class(button_1,1,`group relative rounded-lg border border-border bg-muted p-3 ${className()??""} ${$$props.textContent?"max-h-24 max-w-72":"max-w-36"} cursor-pointer text-left`),set_text(text_3,$$props.name)}),append( -$$anchor3,button_1)};if_block(node_1,$$render=>{readonly2()?$$render(consequent_3):$$render(alternate,!1)})}append($$anchor2,fragment_1)},alternate_2=$$anchor2=>{var button_2=root_9$m();button_2.__click=function(...$$args){$$props.onClick?.apply(this,$$args)};var div_10=child(button_2),text_5=child(div_10,!0);reset(div_10);var div_11=sibling(div_10,2),span_3=child(div_11),text_6=child(span_3,!0);reset(span_3);var node_8=sibling(span_3,2);{var consequent_7=$$anchor3=>{var span_4=root_10$h(),text_7=child( -span_4,!0);reset(span_4),template_effect(()=>set_text(text_7,get$4(pdfProcessingMode))),append($$anchor3,span_4)},alternate_1=$$anchor3=>{var fragment_2=comment$2(),node_9=first_child(fragment_2);{var consequent_8=$$anchor4=>{var span_5=root_12$8(),text_8=child(span_5,!0);reset(span_5),template_effect($0=>set_text(text_8,$0),[()=>formatFileSize($$props.size)]),append($$anchor4,span_5)};if_block(node_9,$$render=>{$$props.size&&$$render(consequent_8)},!0)}append($$anchor3,fragment_2)};if_block(node_8, -$$render=>{get$4(pdfProcessingMode)?$$render(consequent_7):$$render(alternate_1,!1)})}reset(div_11);var node_10=sibling(div_11,2);{var consequent_9=$$anchor3=>{var div_12=root_13$c(),node_11=child(div_12);ActionIconRemove(node_11,{get id(){return $$props.id},get onRemove(){return $$props.onRemove}}),reset(div_12),append($$anchor3,div_12)};if_block(node_10,$$render=>{readonly2()||$$render(consequent_9)})}reset(button_2),template_effect(()=>{set_class(button_2,1,`group flex items-center gap-3 roun\ -ded-lg border border-border bg-muted p-3 ${className()??""} relative`),set_text(text_5,get$4(fileTypeLabel)),set_class(span_3,1,`max-w-24 truncate text-sm font-medium text-foreground ${readonly2()?"":"group-hover:pr-6"} md:max-w-32`),set_text(text_6,$$props.name)}),append($$anchor2,button_2)};if_block(node2,$$render=>{get$4(isText)?$$render(consequent_6):$$render(alternate_2,!1)})}append($$anchor,fragment),pop()}delegate(["click"]);var root_1$T=from_html('<button type="button" class="block h-ful\ -l w-full rounded-lg focus:ring-2 focus:ring-primary focus:ring-offset-2 focus:outline-none"><img/></button>'),root_2$$=from_html("<img/>"),root_3$R=from_html('<div class="absolute top-1 right-1 flex items-center justify-center opacity-0 transition-opacity group-hover:opacity-100"><!></div>'),root$1p=from_html("<div><!> <!></div>");function ChatAttachmentThumbnailImage($$anchor,$$props){let readonly2=prop($$props,"readonly",3,!1),className=prop($$props,"class",3,""),width=prop($$props,"width",3,"\ -w-auto"),height=prop($$props,"height",3,"h-16"),imageClass=prop($$props,"imageClass",3,"");var div=root$1p(),node2=child(div);{var consequent=$$anchor2=>{var button=root_1$T();button.__click=function(...$$args){$$props.onClick?.apply(this,$$args)};var img=child(button);reset(button),template_effect(()=>{set_attribute(button,"aria-label",`Preview ${$$props.name??""}`),set_attribute(img,"src",$$props.preview),set_attribute(img,"alt",$$props.name),set_class(img,1,`${height()??""} ${width()??""} cur\ -sor-pointer object-cover ${imageClass()??""}`)}),append($$anchor2,button)},alternate=$$anchor2=>{var img_1=root_2$$();template_effect(()=>{set_attribute(img_1,"src",$$props.preview),set_attribute(img_1,"alt",$$props.name),set_class(img_1,1,`${height()??""} ${width()??""} cursor-pointer object-cover ${imageClass()??""}`)}),append($$anchor2,img_1)};if_block(node2,$$render=>{$$props.onClick?$$render(consequent):$$render(alternate,!1)})}var node_1=sibling(node2,2);{var consequent_1=$$anchor2=>{var div_1=root_3$R(), -node_2=child(div_1);ActionIconRemove(node_2,{get id(){return $$props.id},get onRemove(){return $$props.onRemove},class:"text-white"}),reset(div_1),append($$anchor2,div_1)};if_block(node_1,$$render=>{readonly2()||$$render(consequent_1)})}reset(div),template_effect(()=>set_class(div,1,`group relative overflow-hidden rounded-lg bg-muted shadow-lg dark:border dark:border-muted ${className()??""}`)),append($$anchor,div)}delegate(["click"]);var root_1$S=from_html('<div><h3 class="mb-3 text-sm font-med\ -ium text-foreground"> </h3> <div class="flex flex-wrap items-start gap-3"></div></div>'),root_3$Q=from_html('<div><h3 class="mb-3 text-sm font-medium text-foreground"> </h3> <div class="flex flex-wrap items-start gap-3"></div></div>'),root$1o=from_html('<div class="space-y-4"><div class="min-h-0 flex-1 space-y-6 overflow-y-auto px-1"><!> <!></div></div> <!>',1);function ChatAttachmentsViewAll($$anchor,$$props){push$1($$props,!0);let uploadedFiles=prop($$props,"uploadedFiles",19,()=>[]),attachments=prop( -$$props,"attachments",19,()=>[]),readonly2=prop($$props,"readonly",3,!1),imageHeight=prop($$props,"imageHeight",3,"h-24"),imageWidth=prop($$props,"imageWidth",3,"w-auto"),imageClass=prop($$props,"imageClass",3,""),previewDialogOpen=state$1(!1),previewItem=state$1(null),displayItems=user_derived(()=>getAttachmentDisplayItems({uploadedFiles:uploadedFiles(),attachments:attachments()})),imageItems=user_derived(()=>get$4(displayItems).filter(item=>item.isImage)),fileItems=user_derived(()=>get$4(displayItems). -filter(item=>!item.isImage));function openPreview(item,event2){event2&&(event2.preventDefault(),event2.stopPropagation()),set$1(previewItem,{uploadedFile:item.uploadedFile,attachment:item.attachment,preview:item.preview,name:item.name,size:item.size,textContent:item.textContent},!0),set$1(previewDialogOpen,!0)}var fragment=root$1o(),div=first_child(fragment),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{var div_2=root_1$S(),h3=child(div_2),text2=child(h3);reset(h3);var div_3=sibling( -h3,2);each(div_3,21,()=>get$4(fileItems),item=>item.id,($$anchor3,item)=>{ChatAttachmentThumbnailFile($$anchor3,{class:"cursor-pointer",get id(){return get$4(item).id},get name(){return get$4(item).name},get size(){return get$4(item).size},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get textContent(){return get$4(item).textContent},get attachment(){return get$4(item).attachment},get uploadedFile(){return get$4(item).uploadedFile},onClick:event2=>openPreview(get$4( -item),event2)})}),reset(div_3),reset(div_2),template_effect(()=>set_text(text2,`Files (${get$4(fileItems).length??""})`)),append($$anchor2,div_2)};if_block(node2,$$render=>{get$4(fileItems).length>0&&$$render(consequent)})}var node_1=sibling(node2,2);{var consequent_2=$$anchor2=>{var div_4=root_3$Q(),h3_1=child(div_4),text_1=child(h3_1);reset(h3_1);var div_5=sibling(h3_1,2);each(div_5,21,()=>get$4(imageItems),item=>item.id,($$anchor3,item)=>{var fragment_2=comment$2(),node_2=first_child(fragment_2); -{var consequent_1=$$anchor4=>{ChatAttachmentThumbnailImage($$anchor4,{class:"cursor-pointer",get id(){return get$4(item).id},get name(){return get$4(item).name},get preview(){return get$4(item).preview},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get height(){return imageHeight()},get width(){return imageWidth()},get imageClass(){return imageClass()},onClick:event2=>openPreview(get$4(item),event2)})};if_block(node_2,$$render=>{get$4(item).preview&&$$render(consequent_1)})} -append($$anchor3,fragment_2)}),reset(div_5),reset(div_4),template_effect(()=>set_text(text_1,`Images (${get$4(imageItems).length??""})`)),append($$anchor2,div_4)};if_block(node_1,$$render=>{get$4(imageItems).length>0&&$$render(consequent_2)})}reset(div_1),reset(div);var node_3=sibling(div,2);{var consequent_3=$$anchor2=>{DialogChatAttachmentPreview($$anchor2,{get uploadedFile(){return get$4(previewItem).uploadedFile},get attachment(){return get$4(previewItem).attachment},get preview(){return get$4( -previewItem).preview},get name(){return get$4(previewItem).name},get size(){return get$4(previewItem).size},get textContent(){return get$4(previewItem).textContent},get activeModelId(){return $$props.activeModelId},get open(){return get$4(previewDialogOpen)},set open($$value){set$1(previewDialogOpen,$$value,!0)}})};if_block(node_3,$$render=>{get$4(previewItem)&&$$render(consequent_3)})}append($$anchor,fragment),pop()}function Dialog_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props, -"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-lg leading-none font-semibold",$$props.class));component(node2,()=>Dialog_title$1,($$anchor2,DialogPrimitive_Title)=>{DialogPrimitive_Title($$anchor2,spread_props({"data-slot":"dialog-title",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment), -pop()}var root$1n=from_html("<div><!></div>");function Dialog_footer($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1n();attribute_effect(div,$0=>({"data-slot":"dialog-footer",class:$0,...restProps}),[()=>cn$1("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div, -$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$1m=from_html("<div><!></div>");function Dialog_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1m();attribute_effect(div,$0=>({"data-slot":"dialog-header",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-2 text-center sm:text-left",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props. -children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}function Dialog_overlay($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=\ -open]:fade-in-0",$$props.class));component(node2,()=>Dialog_overlay$1,($$anchor2,DialogPrimitive_Overlay)=>{DialogPrimitive_Overlay($$anchor2,spread_props({"data-slot":"dialog-overlay",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_4$v=from_html('<!> <span class="sr-only">Close</span>',1),root_2$_=from_html("<!> <!>",1),root_1$R=from_html("<!> <!>",1);function Dialog_content($$anchor,$$props){push$1( -$$props,!0);let ref2=prop($$props,"ref",15,null),showCloseButton=prop($$props,"showCloseButton",3,!0),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","portalProps","children","showCloseButton"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$1,($$anchor2,Dialog_Portal)=>{Dialog_Portal($$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$R(),node_1=first_child(fragment_1);component(node_1, -()=>Dialog_overlay,($$anchor4,Dialog_Overlay)=>{Dialog_Overlay($$anchor4,{})});var node_2=sibling(node_1,2);{let $0=user_derived(()=>cn$1("fixed top-[50%] left-[50%] z-50 grid max-h-[100dvh] w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 overflow-y-auto rounded-lg border border-border/30 bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:\ -fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg md:max-h-[100vh]",$$props.class));component(node_2,()=>Dialog_content$1,($$anchor4,DialogPrimitive_Content)=>{DialogPrimitive_Content($$anchor4,spread_props({"data-slot":"dialog-content",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$_(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children??noop$3);var node_4=sibling(node_3, -2);{var consequent=$$anchor6=>{var fragment_3=comment$2(),node_5=first_child(fragment_3);component(node_5,()=>Dialog_close,($$anchor7,DialogPrimitive_Close)=>{DialogPrimitive_Close($$anchor7,{class:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:($$anchor8,$$slotProps3)=>{ -var fragment_4=root_4$v(),node_6=first_child(fragment_4);X(node_6,{}),next$1(2),append($$anchor8,fragment_4)},$$slots:{default:!0}})}),append($$anchor6,fragment_3)};if_block(node_4,$$render=>{showCloseButton()&&$$render(consequent)})}append($$anchor5,fragment_2)},$$slots:{default:!0}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}function Dialog_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-sm text-muted-foreground",$$props.class));component(node2,()=>Dialog_description$1,($$anchor2,DialogPrimitive_Description)=>{DialogPrimitive_Description($$anchor2,spread_props({"data-slot":"dialog-description",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const Root$4=Dialog, -Portal$1=Portal$2;function DialogChatSettings($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",3,!1),chatSettingsRef=state$1(void 0);function handleClose(){$$props.onOpenChange?.(!1)}function handleSave(){$$props.onOpenChange?.(!1)}user_effect(()=>{open2()&&get$4(chatSettingsRef)&&get$4(chatSettingsRef).reset()});var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get open(){return open2()},onOpenChange:handleClose, -children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Dialog_content,($$anchor4,Dialog_Content)=>{Dialog_Content($$anchor4,{class:`z-999999 flex h-[100dvh] max-h-[100dvh] min-h-[100dvh] max-w-4xl! flex-col gap-0 rounded-none - p-0 md:h-[64vh] md:max-h-[64vh] md:min-h-0 md:rounded-lg`,children:($$anchor5,$$slotProps2)=>{bind_this(ChatSettings($$anchor5,{onSave:handleSave,get initialSection(){return $$props.initialSection}}),$$value=>set$1(chatSettingsRef,$$value,!0),()=>get$4(chatSettingsRef))},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}function Alert_dialog_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-lg font-semibold",$$props.class));component(node2,()=>Dialog_title$1,($$anchor2,AlertDialogPrimitive_Title)=>{AlertDialogPrimitive_Title($$anchor2,spread_props({"data-slot":"alert-dialog-title",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Alert_dialog_action($$anchor,$$props){ -push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1(buttonVariants(),$$props.class));component(node2,()=>Alert_dialog_action$1,($$anchor2,AlertDialogPrimitive_Action)=>{AlertDialogPrimitive_Action($$anchor2,spread_props({"data-slot":"alert-dialog-action",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ -ref2($$value)}}))})}append($$anchor,fragment),pop()}function Alert_dialog_cancel($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1(buttonVariants({variant:"outline"}),$$props.class));component(node2,()=>Alert_dialog_cancel$1,($$anchor2,AlertDialogPrimitive_Cancel)=>{AlertDialogPrimitive_Cancel($$anchor2,spread_props( -{"data-slot":"alert-dialog-cancel",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root$1l=from_html("<div><!></div>");function Alert_dialog_footer($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1l();attribute_effect(div,$0=>({"data-slot":"alert-dialog-footer",class:$0,...restProps}), -[()=>cn$1("mt-6 flex flex-row gap-2 sm:mt-0 sm:justify-end [&>*]:flex-1 sm:[&>*]:flex-none",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$1k=from_html("<div><!></div>");function Alert_dialog_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1k(); -attribute_effect(div,$0=>({"data-slot":"alert-dialog-header",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-2 text-center sm:text-left",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}function Alert_dialog_overlay($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(), -node2=first_child(fragment);{let $0=user_derived(()=>cn$1("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",$$props.class));component(node2,()=>Dialog_overlay$1,($$anchor2,AlertDialogPrimitive_Overlay)=>{AlertDialogPrimitive_Overlay($$anchor2,spread_props({"data-slot":"alert-dialog-overlay",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})} -append($$anchor,fragment),pop()}var root_1$Q=from_html("<!> <!>",1);function Alert_dialog_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","portalProps"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,AlertDialogPrimitive_Portal)=>{AlertDialogPrimitive_Portal($$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$Q(), -node_1=first_child(fragment_1);Alert_dialog_overlay(node_1,{});var node_2=sibling(node_1,2);{let $0=user_derived(()=>cn$1("fixed z-[999999] grid w-full gap-4 border bg-background p-6 shadow-lg duration-200","right-0 bottom-0 left-0 max-h-[100dvh] translate-x-0 translate-y-0 overflow-y-auto rounded-t-lg","data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-bottom-full","data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-\ -from-bottom-full","sm:top-[50%] sm:right-auto sm:bottom-auto sm:left-[50%] sm:max-h-[100vh] sm:max-w-lg sm:translate-x-[-50%] sm:translate-y-[-50%] sm:rounded-lg","sm:data-[state=closed]:slide-out-to-bottom-0 sm:data-[state=closed]:zoom-out-95","sm:data-[state=open]:slide-in-from-bottom-0 sm:data-[state=open]:zoom-in-95",$$props.class));component(node_2,()=>Alert_dialog_content$1,($$anchor4,AlertDialogPrimitive_Content)=>{AlertDialogPrimitive_Content($$anchor4,spread_props({"data-slot":"alert-di\ -alog-content",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}function Alert_dialog_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-sm text-muted-f\ -oreground",$$props.class));component(node2,()=>Dialog_description$1,($$anchor2,AlertDialogPrimitive_Description)=>{AlertDialogPrimitive_Description($$anchor2,spread_props({"data-slot":"alert-dialog-description",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const Root$3=Alert_dialog,Portal=Portal$2;var root_4$u=from_html("<!> ",1),root_3$P=from_html("<!> <!>",1),root_8$m=from_html("<!> <!>",1),root_2$Z=from_html( -"<!> <!> <!>",1);function DialogConfirmation($$anchor,$$props){push$1($$props,!0);let confirmText=prop($$props,"confirmText",3,"Confirm"),cancelText=prop($$props,"cancelText",3,"Cancel"),variant=prop($$props,"variant",3,"default");function handleKeydown(event2){event2.key===KeyboardKey.ENTER&&(event2.preventDefault(),$$props.onConfirm()),$$props.onKeydown?.(event2)}function handleOpenChange(newOpen){newOpen||$$props.onCancel()}var fragment=comment$2(),node2=first_child(fragment);component(node2, -()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return $$props.open},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{onkeydown:handleKeydown,children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$Z(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{ -AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$P(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$u(),node_4=first_child(fragment_4);{var consequent=$$anchor10=>{const IconComponent=user_derived(()=>$$props.icon);var fragment_5=comment$2(),node_5=first_child(fragment_5);{let $0=user_derived( -()=>variant()==="destructive"?"text-destructive":"");component(node_5,()=>get$4(IconComponent),($$anchor11,IconComponent_1)=>{IconComponent_1($$anchor11,{get class(){return`h-5 w-5 ${get$4($0)??""}`}})})}append($$anchor10,fragment_5)};if_block(node_4,$$render=>{$$props.icon&&$$render(consequent)})}var text2=sibling(node_4);template_effect(()=>set_text(text2,` ${$$props.title??""}`)),append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_6=sibling(node_3,2);component(node_6,()=>Alert_dialog_description, -($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,$$props.description)),append($$anchor9,text_1)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_7=sibling(node_2,2);{var consequent_1=$$anchor6=>{var fragment_7=comment$2(),node_8=first_child(fragment_7);snippet(node_8,()=>$$props.children),append($$anchor6,fragment_7)};if_block(node_7, -$$render=>{$$props.children&&$$render(consequent_1)})}var node_9=sibling(node_7,2);component(node_9,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_8=root_8$m(),node_10=first_child(fragment_8);component(node_10,()=>Alert_dialog_cancel,($$anchor8,AlertDialog_Cancel)=>{AlertDialog_Cancel($$anchor8,{get onclick(){return $$props.onCancel},children:($$anchor9,$$slotProps4)=>{next$1();var text_2=text$8();template_effect( -()=>set_text(text_2,cancelText())),append($$anchor9,text_2)},$$slots:{default:!0}})});var node_11=sibling(node_10,2);{let $0=user_derived(()=>variant()==="destructive"?"bg-destructive text-white hover:bg-destructive/80":"");component(node_11,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{AlertDialog_Action($$anchor8,{get onclick(){return $$props.onConfirm},get class(){return get$4($0)},children:($$anchor9,$$slotProps4)=>{next$1();var text_3=text$8();template_effect(()=>set_text(text_3, -confirmText())),append($$anchor9,text_3)},$$slots:{default:!0}})})}append($$anchor7,fragment_8)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_3$O=from_html("<!> <!>",1),root_6$w=from_html("<!> <!>",1),root_2$Y=from_html('<!> <div class="space-y-4 pt-2 pb-6"><div class="space-y-2"><p class="text-sm font-medium text-muted-foreground">Current title:</p> <p class="rounde\ -d-md bg-muted/50 p-3 text-sm font-medium"> </p></div> <div class="space-y-2"><p class="text-sm font-medium text-muted-foreground">New title would be:</p> <p class="rounded-md bg-muted/50 p-3 text-sm font-medium"> </p></div></div> <!>',1);function DialogConversationTitleUpdate($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return open2()}, -set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$Y(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$O(),node_3=first_child( -fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("Update Conversation Title?");append($$anchor9,text2)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8("Do you want to update the convers\ -ation title to match the first message content?");append($$anchor9,text_1)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),div_1=child(div),p2=sibling(child(div_1),2),text_2=child(p2,!0);reset(p2),reset(div_1);var div_2=sibling(div_1,2),p_1=sibling(child(div_2),2),text_3=child(p_1,!0);reset(p_1),reset(div_2),reset(div);var node_5=sibling(div,2);component(node_5,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6, -{children:($$anchor7,$$slotProps3)=>{var fragment_4=root_6$w(),node_6=first_child(fragment_4);Button(node_6,{variant:"outline",get onclick(){return $$props.onCancel},children:($$anchor8,$$slotProps4)=>{next$1();var text_4=text$8("Keep Current Title");append($$anchor8,text_4)},$$slots:{default:!0}});var node_7=sibling(node_6,2);Button(node_7,{get onclick(){return $$props.onConfirm},children:($$anchor8,$$slotProps4)=>{next$1();var text_5=text$8("Update Title");append($$anchor8,text_5)},$$slots:{default:!0}}), -append($$anchor7,fragment_4)},$$slots:{default:!0}})}),template_effect(()=>{set_text(text_2,$$props.currentTitle),set_text(text_3,$$props.newTitle)}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$t=from_html('<!> <span class="sr-only">Close preview</span>',1),root_3$N=from_html('<iframe sandbox="allow-scripts" class="code-preview-iframe"></iframe> <!>',1),root_2$X=from_html("<!> <!>",1);function DialogCodePreview($$anchor,$$props){ -push$1($$props,!0);let open2=prop($$props,"open",15),iframeRef=state$1(null);user_effect(()=>{get$4(iframeRef)&&(open2()?get$4(iframeRef).srcdoc=$$props.code:get$4(iframeRef).srcdoc="")});function handleOpenChange(nextOpen){open2(nextOpen),$$props.onOpenChange?.(nextOpen)}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Dialog,($$anchor2,DialogPrimitive_Root)=>{DialogPrimitive_Root($$anchor2,{get open(){return open2()},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{ -var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Portal$2,($$anchor4,DialogPrimitive_Portal)=>{DialogPrimitive_Portal($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$X(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_overlay$1,($$anchor6,DialogPrimitive_Overlay)=>{DialogPrimitive_Overlay($$anchor6,{class:"code-preview-overlay"})});var node_3=sibling(node_2,2);component(node_3,()=>Dialog_content$1,($$anchor6,DialogPrimitive_Content)=>{ -DialogPrimitive_Content($$anchor6,{class:"code-preview-content",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$N(),iframe=first_child(fragment_3);bind_this(iframe,$$value=>set$1(iframeRef,$$value),()=>get$4(iframeRef));var node_4=sibling(iframe,2);component(node_4,()=>Dialog_close,($$anchor8,DialogPrimitive_Close)=>{DialogPrimitive_Close($$anchor8,{class:"code-preview-close absolute top-4 right-4 border-none bg-transparent text-white opacity-70 mix-blend-difference transition-opacity \ -hover:opacity-100 focus-visible:ring-0 focus-visible:ring-offset-0 focus-visible:outline-none disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-8","aria-label":"Close preview",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$t(),node_5=first_child(fragment_4);X(node_5,{}),next$1(2),append($$anchor9,fragment_4)},$$slots:{default:!0}})}),template_effect(()=>set_attribute(iframe,"title",`Preview ${$$props.language??""}`)),append($$anchor7, -fragment_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_3$M=from_html("<!> <!>",1),root_2$W=from_html("<!> <!>",1);function DialogChatAttachmentPreview($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15),chatAttachmentPreviewRef=state$1(void 0),displayName=user_derived(()=>$$props.uploadedFile?.name||$$props.attachment?.name||$$props.name||"Unkno\ -wn File"),displaySize=user_derived(()=>$$props.uploadedFile?.size||$$props.size);user_effect(()=>{open2()&&get$4(chatAttachmentPreviewRef)&&get$4(chatAttachmentPreviewRef).reset()});var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get onOpenChange(){return $$props.onOpenChange},get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child( -fragment_1);component(node_1,()=>Dialog_content,($$anchor4,Dialog_Content)=>{Dialog_Content($$anchor4,{class:"grid max-h-[90vh] max-w-5xl overflow-hidden sm:w-auto sm:max-w-6xl",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$W(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_header,($$anchor6,Dialog_Header)=>{Dialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$M(),node_3=first_child(fragment_3);component(node_3,()=>Dialog_title,($$anchor8,Dialog_Title)=>{ -Dialog_Title($$anchor8,{class:"pr-8",children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,get$4(displayName))),append($$anchor9,text2)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Dialog_description,($$anchor8,Dialog_Description)=>{Dialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_5=comment$2(),node_5=first_child(fragment_5);{var consequent=$$anchor10=>{var text_1=text$8();template_effect($0=>set_text( -text_1,$0),[()=>formatFileSize(get$4(displaySize))]),append($$anchor10,text_1)};if_block(node_5,$$render=>{get$4(displaySize)&&$$render(consequent)})}append($$anchor9,fragment_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_6=sibling(node_2,2);bind_this(ChatAttachmentPreview(node_6,{get uploadedFile(){return $$props.uploadedFile},get attachment(){return $$props.attachment},get preview(){return $$props.preview},get name(){return get$4(displayName)},get textContent(){ -return $$props.textContent},get activeModelId(){return $$props.activeModelId}}),$$value=>set$1(chatAttachmentPreviewRef,$$value,!0),()=>get$4(chatAttachmentPreviewRef)),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$s=from_html("<!> <!>",1),root_3$L=from_html("<!> <!>",1),root_2$V=from_html("<!> <!>",1);function DialogChatAttachmentsViewAll($$anchor,$$props){push$1($$props,!0);let open2=prop( -$$props,"open",15,!1),uploadedFiles=prop($$props,"uploadedFiles",19,()=>[]),attachments=prop($$props,"attachments",19,()=>[]),readonly2=prop($$props,"readonly",3,!1),imageHeight=prop($$props,"imageHeight",3,"h-24"),imageWidth=prop($$props,"imageWidth",3,"w-auto"),imageClass=prop($$props,"imageClass",3,""),totalCount=user_derived(()=>uploadedFiles().length+attachments().length);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2, -{get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Portal$1,($$anchor4,Dialog_Portal)=>{Dialog_Portal($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$V(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_overlay,($$anchor6,Dialog_Overlay)=>{Dialog_Overlay($$anchor6,{})});var node_3=sibling(node_2,2);component(node_3,()=>Dialog_content,($$anchor6,Dialog_Content)=>{ -Dialog_Content($$anchor6,{class:"flex !max-h-[90vh] !max-w-6xl flex-col",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$L(),node_4=first_child(fragment_3);component(node_4,()=>Dialog_header,($$anchor8,Dialog_Header)=>{Dialog_Header($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$s(),node_5=first_child(fragment_4);component(node_5,()=>Dialog_title,($$anchor10,Dialog_Title)=>{Dialog_Title($$anchor10,{children:($$anchor11,$$slotProps5)=>{next$1();var text2=text$8();template_effect( -()=>set_text(text2,`All Attachments (${get$4(totalCount)??""})`)),append($$anchor11,text2)},$$slots:{default:!0}})});var node_6=sibling(node_5,2);component(node_6,()=>Dialog_description,($$anchor10,Dialog_Description)=>{Dialog_Description($$anchor10,{children:($$anchor11,$$slotProps5)=>{next$1();var text_1=text$8("View and manage all attached files");append($$anchor11,text_1)},$$slots:{default:!0}})}),append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_7=sibling(node_4,2);ChatAttachmentsViewAll( -node_7,{get uploadedFiles(){return uploadedFiles()},get attachments(){return attachments()},get readonly(){return readonly2()},get onFileRemove(){return $$props.onFileRemove},get imageHeight(){return imageHeight()},get imageWidth(){return imageWidth()},get imageClass(){return imageClass()},get activeModelId(){return $$props.activeModelId}}),append($$anchor7,fragment_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}), -append($$anchor,fragment),pop()}var root_4$r=from_html("<!> ",1),root_3$K=from_html("<!> <!>",1),root_9$l=from_html('<p><span class="font-medium">Context size:</span> </p>'),root_8$l=from_html('<div class="mt-2 space-y-1 text-xs opacity-80"><p><span class="font-medium">Prompt tokens:</span> </p> <!></div>'),root_2$U=from_html('<!> <div><p class="font-medium"> </p> <!></div> <!>',1);function DialogChatError($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15);const isTimeout=user_derived( -()=>$$props.type===ErrorDialogType.TIMEOUT),title2=user_derived(()=>get$4(isTimeout)?"TCP Timeout":"Server Error"),description2=user_derived(()=>get$4(isTimeout)?"The request did not receive a response from the server before timing out.":"The server responded with an error message. Review the details below."),iconClass=user_derived(()=>get$4(isTimeout)?"text-destructive":"text-amber-500"),badgeClass=user_derived(()=>get$4(isTimeout)?"border-destructive/40 bg-destructive/10 text-destructive":"bor\ +"Failed to read file as text, adding without content:",err),results.push(base2)}}catch(error2){console.error("Error processing file",file.name,error2),results.push(base2)}}return results}var root_2$1a=from_html("<!> Text",1),root_4$z=from_html('<div class="mr-1 h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent"></div>'),root_3$V=from_html("<!> Pages",1),root_1$V=from_html('<div class="flex items-center gap-2"><!> <!></div>'),root_6$x=from_html('<div class="flex items\ +-center justify-center"><img class="max-h-full rounded-lg object-contain shadow-lg"/></div>'),root_11$g=from_html('<span class="inline-flex">The selected model does not support vision. Only the extracted <span class="mx-1 cursor-pointer underline">text</span> will be sent to the model.</span>'),root_9$m=from_html("<!> <!> <!>",1),root_12$d=from_html('<div class="flex items-center justify-center p-8"><div class="text-center"><div class="mx-auto mb-4 h-8 w-8 animate-spin rounded-full border-4 bor\ +der-primary border-t-transparent"></div> <p class="text-muted-foreground">Converting PDF to images...</p></div></div>'),root_13$c=from_html('<div class="flex items-center justify-center p-8"><div class="text-center"><!> <p class="mb-4 text-muted-foreground">Failed to load PDF images</p> <p class="text-sm text-muted-foreground"> </p> <!></div></div>'),root_16$5=from_html('<div class="text-center"><p class="mb-2 text-sm text-muted-foreground"> </p> <img class="mx-auto max-w-full rounded-lg shadow-\ +lg"/></div>'),root_15$c=from_html('<div class="max-h-[70vh] space-y-4 overflow-auto"></div>'),root_17$a=from_html('<div class="flex items-center justify-center p-8"><div class="text-center"><!> <p class="mb-4 text-muted-foreground">No PDF pages available</p></div></div>'),root_7$t=from_html("<!> <!>",1),root_20$6=from_html('<audio controls="" class="mb-4 w-full">Your browser does not support the audio element.</audio>'),root_21$7=from_html('<audio controls="" class="mb-4 w-full">Your browser doe\ +s not support the audio element.</audio>'),root_22$2=from_html('<p class="mb-4 text-muted-foreground">Audio preview not available</p>'),root_19$a=from_html('<div class="flex items-center justify-center p-8"><div class="w-full max-w-md text-center"><!> <!> <p class="text-sm text-muted-foreground"> </p></div></div>'),root_23$3=from_html('<div class="flex items-center justify-center p-8"><div class="text-center"><!> <p class="mb-4 text-muted-foreground">Preview not available for this file type</p><\ +/div></div>'),root$1y=from_html('<div class="space-y-4"><div class="flex items-center justify-end gap-6"><!></div> <div class="flex-1 overflow-auto"><!></div></div>');function ChatAttachmentPreview($$anchor,$$props){push$1($$props,!0);let hasVisionModality=user_derived(()=>$$props.activeModelId?modelsStore.modelSupportsVision($$props.activeModelId):!1),displayName=user_derived(()=>$$props.uploadedFile?.name||$$props.attachment?.name||$$props.name||"Unknown File"),isAudio=user_derived(()=>isAudioFile( +$$props.attachment,$$props.uploadedFile)),isImage2=user_derived(()=>isImageFile($$props.attachment,$$props.uploadedFile)),isPdf=user_derived(()=>isPdfFile$1($$props.attachment,$$props.uploadedFile)),isText=user_derived(()=>isTextFile($$props.attachment,$$props.uploadedFile)),displayPreview=user_derived(()=>$$props.uploadedFile?.preview||(get$3(isImage2)&&$$props.attachment&&"base64Url"in $$props.attachment?$$props.attachment.base64Url:$$props.preview)),displayTextContent=user_derived(()=>$$props. +uploadedFile?.textContent||($$props.attachment&&"content"in $$props.attachment?$$props.attachment.content:$$props.textContent)),language2=user_derived(()=>getLanguageFromFilename(get$3(displayName))),IconComponent=user_derived(()=>()=>get$3(isImage2)?Image$1:get$3(isText)||get$3(isPdf)?File_text:get$3(isAudio)?Music:File$1),pdfViewMode=state$1("pages"),pdfImages=state$1(proxy([])),pdfImagesLoading=state$1(!1),pdfImagesError=state$1(null);async function loadPdfImages(){if(!(!get$3(isPdf)||get$3(pdfImages). +length>0||get$3(pdfImagesLoading))){set$1(pdfImagesLoading,!0),set$1(pdfImagesError,null);try{let file=null;if($$props.uploadedFile?.file)file=$$props.uploadedFile.file;else if(get$3(isPdf)&&$$props.attachment){if("images"in $$props.attachment&&$$props.attachment.images&&Array.isArray($$props.attachment.images)&&$$props.attachment.images.length>0){set$1(pdfImages,$$props.attachment.images,!0);return}if("base64Data"in $$props.attachment&&$$props.attachment.base64Data){const base64Data=$$props.attachment. +base64Data,byteCharacters=atob(base64Data),byteNumbers=new Array(byteCharacters.length);for(let i=0;i<byteCharacters.length;i++)byteNumbers[i]=byteCharacters.charCodeAt(i);const byteArray=new Uint8Array(byteNumbers);file=new File([byteArray],get$3(displayName),{type:"application/pdf"})}}if(file)set$1(pdfImages,await convertPDFToImage(file),!0);else throw new Error("No PDF file available for conversion")}catch(error2){set$1(pdfImagesError,error2 instanceof Error?error2.message:"Failed to load PDF\ + images",!0)}finally{set$1(pdfImagesLoading,!1)}}}function reset$1(){set$1(pdfImages,[],!0),set$1(pdfImagesLoading,!1),set$1(pdfImagesError,null),set$1(pdfViewMode,"pages")}user_effect(()=>{get$3(isPdf)&&get$3(pdfViewMode)==="pages"&&loadPdfImages()});var $$exports={reset:reset$1},div=root$1y(),div_1=child(div),node2=child(div_1);{var consequent_1=$$anchor2=>{var div_2=root_1$V(),node_1=child(div_2);{let $0=user_derived(()=>get$3(pdfViewMode)==="text"?"default":"outline");Button(node_1,{get variant(){ +return get$3($0)},size:"sm",onclick:()=>set$1(pdfViewMode,"text"),get disabled(){return get$3(pdfImagesLoading)},children:($$anchor3,$$slotProps)=>{var fragment=root_2$1a(),node_2=first_child(fragment);File_text(node_2,{class:"mr-1 h-4 w-4"}),next$1(),append($$anchor3,fragment)},$$slots:{default:!0}})}var node_3=sibling(node_1,2);{let $0=user_derived(()=>get$3(pdfViewMode)==="pages"?"default":"outline");Button(node_3,{get variant(){return get$3($0)},size:"sm",onclick:()=>{set$1(pdfViewMode,"page\ +s"),loadPdfImages()},get disabled(){return get$3(pdfImagesLoading)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_3$V(),node_4=first_child(fragment_1);{var consequent=$$anchor4=>{var div_3=root_4$z();append($$anchor4,div_3)},alternate=$$anchor4=>{Eye($$anchor4,{class:"mr-1 h-4 w-4"})};if_block(node_4,$$render=>{get$3(pdfImagesLoading)?$$render(consequent):$$render(alternate,-1)})}next$1(),append($$anchor3,fragment_1)},$$slots:{default:!0}})}reset(div_2),append($$anchor2,div_2)};if_block( +node2,$$render=>{get$3(isPdf)&&$$render(consequent_1)})}reset(div_1);var div_4=sibling(div_1,2),node_5=child(div_4);{var consequent_2=$$anchor2=>{var div_5=root_6$x(),img=child(div_5);reset(div_5),template_effect(()=>{set_attribute(img,"src",get$3(displayPreview)),set_attribute(img,"alt",get$3(displayName))}),append($$anchor2,div_5)},consequent_7=$$anchor2=>{var fragment_3=root_7$t(),node_6=first_child(fragment_3);{var consequent_3=$$anchor3=>{var fragment_4=comment$2(),node_7=first_child(fragment_4); +component(node_7,()=>Alert,($$anchor4,Alert_Root)=>{Alert_Root($$anchor4,{class:"mb-4",children:($$anchor5,$$slotProps)=>{var fragment_5=root_9$m(),node_8=first_child(fragment_5);Info$1(node_8,{class:"h-4 w-4"});var node_9=sibling(node_8,2);component(node_9,()=>Alert_title,($$anchor6,Alert_Title)=>{Alert_Title($$anchor6,{children:($$anchor7,$$slotProps2)=>{next$1();var text2=text$8("Preview only");append($$anchor7,text2)},$$slots:{default:!0}})});var node_10=sibling(node_9,2);component(node_10,()=>Alert_description, +($$anchor6,Alert_Description)=>{Alert_Description($$anchor6,{children:($$anchor7,$$slotProps2)=>{var span=root_11$g(),span_1=sibling(child(span));next$1(),reset(span),delegated("click",span_1,()=>set$1(pdfViewMode,"text")),append($$anchor7,span)},$$slots:{default:!0}})}),append($$anchor5,fragment_5)},$$slots:{default:!0}})}),append($$anchor3,fragment_4)};if_block(node_6,$$render=>{!get$3(hasVisionModality)&&$$props.activeModelId&&$$render(consequent_3)})}var node_11=sibling(node_6,2);{var consequent_4=$$anchor3=>{ +var div_6=root_12$d();append($$anchor3,div_6)},consequent_5=$$anchor3=>{var div_7=root_13$c(),div_8=child(div_7),node_12=child(div_8);File_text(node_12,{class:"mx-auto mb-4 h-16 w-16 text-muted-foreground"});var p2=sibling(node_12,4),text_1=child(p2,!0);reset(p2);var node_13=sibling(p2,2);Button(node_13,{class:"mt-4",onclick:()=>set$1(pdfViewMode,"text"),children:($$anchor4,$$slotProps)=>{next$1();var text_2=text$8("View as Text");append($$anchor4,text_2)},$$slots:{default:!0}}),reset(div_8),reset( +div_7),template_effect(()=>set_text(text_1,get$3(pdfImagesError))),append($$anchor3,div_7)},consequent_6=$$anchor3=>{var div_9=root_15$c();each(div_9,22,()=>get$3(pdfImages),image2=>image2,($$anchor4,image2,index2)=>{var div_10=root_16$5(),p_1=child(div_10),text_3=child(p_1);reset(p_1);var img_1=sibling(p_1,2);reset(div_10),template_effect(()=>{set_text(text_3,`Page ${get$3(index2)+1}`),set_attribute(img_1,"src",image2),set_attribute(img_1,"alt",`PDF Page ${get$3(index2)+1}`)}),append($$anchor4, +div_10)}),reset(div_9),append($$anchor3,div_9)},alternate_1=$$anchor3=>{var div_11=root_17$a(),div_12=child(div_11),node_14=child(div_12);File_text(node_14,{class:"mx-auto mb-4 h-16 w-16 text-muted-foreground"}),next$1(2),reset(div_12),reset(div_11),append($$anchor3,div_11)};if_block(node_11,$$render=>{get$3(pdfImagesLoading)?$$render(consequent_4):get$3(pdfImagesError)?$$render(consequent_5,1):get$3(pdfImages).length>0?$$render(consequent_6,2):$$render(alternate_1,-1)})}append($$anchor2,fragment_3)}, +consequent_8=$$anchor2=>{SyntaxHighlightedCode($$anchor2,{get code(){return get$3(displayTextContent)},get language(){return get$3(language2)},maxWidth:"calc(69rem - 2rem)"})},consequent_11=$$anchor2=>{var div_13=root_19$a(),div_14=child(div_13),node_15=child(div_14);Music(node_15,{class:"mx-auto mb-4 h-16 w-16 text-muted-foreground"});var node_16=sibling(node_15,2);{var consequent_9=$$anchor3=>{var audio=root_20$6();template_effect(()=>set_attribute(audio,"src",$$props.uploadedFile.preview)),append( +$$anchor3,audio)},consequent_10=$$anchor3=>{var audio_1=root_21$7();template_effect($0=>set_attribute(audio_1,"src",$0),[()=>createBase64DataUrl($$props.attachment.mimeType,$$props.attachment.base64Data)]),append($$anchor3,audio_1)},alternate_2=$$anchor3=>{var p_2=root_22$2();append($$anchor3,p_2)};if_block(node_16,$$render=>{$$props.uploadedFile?.preview?$$render(consequent_9):get$3(isAudio)&&$$props.attachment&&"mimeType"in $$props.attachment&&"base64Data"in $$props.attachment?$$render(consequent_10, +1):$$render(alternate_2,-1)})}var p_3=sibling(node_16,2),text_4=child(p_3,!0);reset(p_3),reset(div_14),reset(div_13),template_effect(()=>set_text(text_4,get$3(displayName))),append($$anchor2,div_13)},alternate_3=$$anchor2=>{var div_15=root_23$3(),div_16=child(div_15),node_17=child(div_16);{var consequent_12=$$anchor3=>{var fragment_7=comment$2(),node_18=first_child(fragment_7);component(node_18,()=>get$3(IconComponent),($$anchor4,IconComponent_1)=>{IconComponent_1($$anchor4,{class:"mx-auto mb-4 \ +h-16 w-16 text-muted-foreground"})}),append($$anchor3,fragment_7)};if_block(node_17,$$render=>{get$3(IconComponent)&&$$render(consequent_12)})}next$1(2),reset(div_16),reset(div_15),append($$anchor2,div_15)};if_block(node_5,$$render=>{get$3(isImage2)&&get$3(displayPreview)?$$render(consequent_2):get$3(isPdf)&&get$3(pdfViewMode)==="pages"?$$render(consequent_7,1):(get$3(isText)||get$3(isPdf)&&get$3(pdfViewMode)==="text")&&get$3(displayTextContent)?$$render(consequent_8,2):get$3(isAudio)?$$render(consequent_11, +3):$$render(alternate_3,-1)})}return reset(div_4),reset(div),append($$anchor,div),pop($$exports)}delegate(["click"]);var root_1$U=from_html("<div><!></div>");function ChatAttachmentMcpResources($$anchor,$$props){push$1($$props,!0);const attachments=user_derived(mcpResourceAttachments),hasAttachments=user_derived(mcpHasResourceAttachments);function handleRemove(attachmentId){mcpStore.removeResourceAttachment(attachmentId)}function handleResourceClick(uri2){$$props.onResourceClick?.(uri2)}var fragment=comment$2(), +node2=first_child(fragment);{var consequent=$$anchor2=>{var div=root_1$U(),node_1=child(div);HorizontalScrollCarousel(node_1,{gapSize:"2",children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);each(node_2,19,()=>get$3(attachments),attachment=>attachment.id,($$anchor4,attachment,i)=>{{let $0=user_derived(()=>get$3(i)===0?"ml-3":"");ChatAttachmentMcpResource($$anchor4,{get class(){return get$3($0)},get attachment(){return get$3(attachment)},onRemove:handleRemove, +onClick:()=>handleResourceClick(get$3(attachment).resource.uri)})}}),append($$anchor3,fragment_1)},$$slots:{default:!0}}),reset(div),template_effect(()=>set_class(div,1,clsx($$props.class))),append($$anchor2,div)};if_block(node2,$$render=>{get$3(hasAttachments)&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_3$U=from_html('<span class="text-xs text-muted-foreground"> </span>'),root_5$z=from_html('<div class="pointer-events-none absolute right-0 bottom-0 left-0 h-6 bg-gradient-to\ +-t from-muted to-transparent"></div>'),root_4$y=from_html('<div class="relative mt-2 w-full"><div class="overflow-hidden font-mono text-xs leading-relaxed break-words whitespace-pre-wrap text-muted-foreground"> </div> <!></div>'),root_2$19=from_html('<button type="button"><div class="flex items-start gap-3"><div class="flex min-w-0 flex-1 flex-col items-start text-left"><span class="w-full truncate text-sm font-medium text-foreground"> </span> <!> <!></div></div></button>'),root_8$q=from_html('<\ +div class="pointer-events-none absolute right-0 bottom-0 left-0 h-4 bg-gradient-to-t from-muted to-transparent"></div>'),root_7$s=from_html('<div class="relative"><div class="overflow-hidden font-mono text-xs leading-relaxed break-words whitespace-pre-wrap text-muted-foreground" style="max-height: 3rem; line-height: 1.2em;"> </div> <!></div>'),root_6$w=from_html('<button><div class="absolute top-2 right-2 opacity-0 transition-opacity group-hover:opacity-100"><!></div> <div class="pr-8"><span cla\ +ss="mb-3 block truncate text-sm font-medium text-foreground"> </span> <!></div></button>'),root_10$g=from_html('<span class="text-left text-xs text-muted-foreground"> </span>'),root_11$f=from_html('<span class="text-left text-xs text-muted-foreground"> </span>'),root_12$c=from_html('<div class="absolute top-2 right-2 opacity-0 transition-opacity group-hover:opacity-100"><!></div>'),root_9$l=from_html('<button><div class="flex h-8 w-8 items-center justify-center rounded bg-primary/10 text-xs font\ +-medium text-primary"> </div> <div class="flex flex-col gap-0.5"><span> </span> <!></div> <!></button>');function ChatAttachmentThumbnailFile($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),readonly2=prop($$props,"readonly",3,!1),isText=user_derived(()=>isTextFile($$props.attachment,$$props.uploadedFile)),fileTypeLabel=user_derived(()=>{if($$props.uploadedFile?.type)return getFileTypeLabel($$props.uploadedFile.type);if($$props.attachment){if("mimeType"in $$props.attachment&& +$$props.attachment.mimeType)return getFileTypeLabel($$props.attachment.mimeType);if($$props.attachment.type)return getFileTypeLabel($$props.attachment.type)}return getFileTypeLabel($$props.name)}),pdfProcessingMode=user_derived(()=>$$props.attachment?.type===AttachmentType.PDF?$$props.attachment.processedAsImages?"Sent as Image":"Sent as Text":null);var fragment=comment$2(),node2=first_child(fragment);{var consequent_6=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{var consequent_3=$$anchor3=>{ +var button=root_2$19(),div=child(button),div_1=child(div),span=child(div_1),text2=child(span,!0);reset(span);var node_2=sibling(span,2);{var consequent=$$anchor4=>{var span_1=root_3$U(),text_1=child(span_1,!0);reset(span_1),template_effect($0=>set_text(text_1,$0),[()=>formatFileSize($$props.size)]),append($$anchor4,span_1)};if_block(node_2,$$render=>{$$props.size&&$$render(consequent)})}var node_3=sibling(node_2,2);{var consequent_2=$$anchor4=>{var div_2=root_4$y(),div_3=child(div_2),text_2=child( +div_3,!0);reset(div_3);var node_4=sibling(div_3,2);{var consequent_1=$$anchor5=>{var div_4=root_5$z();append($$anchor5,div_4)};if_block(node_4,$$render=>{$$props.textContent.length>150&&$$render(consequent_1)})}reset(div_2),template_effect($0=>set_text(text_2,$0),[()=>getPreviewText($$props.textContent)]),append($$anchor4,div_2)};if_block(node_3,$$render=>{$$props.textContent&&$$render(consequent_2)})}reset(div_1),reset(div),reset(button),template_effect(()=>{set_class(button,1,`cursor-pointer r\ +ounded-lg border border-border bg-muted p-3 transition-shadow hover:shadow-md ${className()??""} w-full max-w-2xl`),set_attribute(button,"aria-label",`Preview ${$$props.name}`),set_text(text2,$$props.name)}),delegated("click",button,function(...$$args){$$props.onClick?.apply(this,$$args)}),append($$anchor3,button)},alternate=$$anchor3=>{var button_1=root_6$w(),div_5=child(button_1),node_5=child(div_5);ActionIconRemove(node_5,{get id(){return $$props.id},get onRemove(){return $$props.onRemove}}), +reset(div_5);var div_6=sibling(div_5,2),span_2=child(div_6),text_3=child(span_2,!0);reset(span_2);var node_6=sibling(span_2,2);{var consequent_5=$$anchor4=>{var div_7=root_7$s(),div_8=child(div_7),text_4=child(div_8,!0);reset(div_8);var node_7=sibling(div_8,2);{var consequent_4=$$anchor5=>{var div_9=root_8$q();append($$anchor5,div_9)};if_block(node_7,$$render=>{$$props.textContent.length>150&&$$render(consequent_4)})}reset(div_7),template_effect($0=>set_text(text_4,$0),[()=>getPreviewText($$props. +textContent)]),append($$anchor4,div_7)};if_block(node_6,$$render=>{$$props.textContent&&$$render(consequent_5)})}reset(div_6),reset(button_1),template_effect(()=>{set_class(button_1,1,`group relative rounded-lg border border-border bg-muted p-3 ${className()??""} ${$$props.textContent?"max-h-24 max-w-72":"max-w-36"} cursor-pointer text-left`),set_text(text_3,$$props.name)}),delegated("click",button_1,function(...$$args){$$props.onClick?.apply(this,$$args)}),append($$anchor3,button_1)};if_block(node_1, +$$render=>{readonly2()?$$render(consequent_3):$$render(alternate,-1)})}append($$anchor2,fragment_1)},alternate_1=$$anchor2=>{var button_2=root_9$l(),div_10=child(button_2),text_5=child(div_10,!0);reset(div_10);var div_11=sibling(div_10,2),span_3=child(div_11),text_6=child(span_3,!0);reset(span_3);var node_8=sibling(span_3,2);{var consequent_7=$$anchor3=>{var span_4=root_10$g(),text_7=child(span_4,!0);reset(span_4),template_effect(()=>set_text(text_7,get$3(pdfProcessingMode))),append($$anchor3,span_4)}, +consequent_8=$$anchor3=>{var span_5=root_11$f(),text_8=child(span_5,!0);reset(span_5),template_effect($0=>set_text(text_8,$0),[()=>formatFileSize($$props.size)]),append($$anchor3,span_5)};if_block(node_8,$$render=>{get$3(pdfProcessingMode)?$$render(consequent_7):$$props.size&&$$render(consequent_8,1)})}reset(div_11);var node_9=sibling(div_11,2);{var consequent_9=$$anchor3=>{var div_12=root_12$c(),node_10=child(div_12);ActionIconRemove(node_10,{get id(){return $$props.id},get onRemove(){return $$props. +onRemove}}),reset(div_12),append($$anchor3,div_12)};if_block(node_9,$$render=>{readonly2()||$$render(consequent_9)})}reset(button_2),template_effect(()=>{set_class(button_2,1,`group flex items-center gap-3 rounded-lg border border-border bg-muted p-3 ${className()??""} relative`),set_text(text_5,get$3(fileTypeLabel)),set_class(span_3,1,`max-w-24 truncate text-sm font-medium text-foreground ${readonly2()?"":"group-hover:pr-6"} md:max-w-32`),set_text(text_6,$$props.name)}),delegated("click",button_2, +function(...$$args){$$props.onClick?.apply(this,$$args)}),append($$anchor2,button_2)};if_block(node2,$$render=>{get$3(isText)?$$render(consequent_6):$$render(alternate_1,-1)})}append($$anchor,fragment),pop()}delegate(["click"]);var root_1$T=from_html('<button type="button" class="block h-full w-full rounded-lg focus:ring-2 focus:ring-primary focus:ring-offset-2 focus:outline-none"><img/></button>'),root_2$18=from_html("<img/>"),root_3$T=from_html('<div class="absolute top-1 right-1 flex items-ce\ +nter justify-center opacity-0 transition-opacity group-hover:opacity-100"><!></div>'),root$1x=from_html("<div><!> <!></div>");function ChatAttachmentThumbnailImage($$anchor,$$props){let readonly2=prop($$props,"readonly",3,!1),className=prop($$props,"class",3,""),width=prop($$props,"width",3,"w-auto"),height=prop($$props,"height",3,"h-16"),imageClass=prop($$props,"imageClass",3,"");var div=root$1x(),node2=child(div);{var consequent=$$anchor2=>{var button=root_1$T(),img=child(button);reset(button), +template_effect(()=>{set_attribute(button,"aria-label",`Preview ${$$props.name??""}`),set_attribute(img,"src",$$props.preview),set_attribute(img,"alt",$$props.name),set_class(img,1,`${height()??""} ${width()??""} cursor-pointer object-cover ${imageClass()??""}`)}),delegated("click",button,function(...$$args){$$props.onClick?.apply(this,$$args)}),append($$anchor2,button)},alternate=$$anchor2=>{var img_1=root_2$18();template_effect(()=>{set_attribute(img_1,"src",$$props.preview),set_attribute(img_1, +"alt",$$props.name),set_class(img_1,1,`${height()??""} ${width()??""} cursor-pointer object-cover ${imageClass()??""}`)}),append($$anchor2,img_1)};if_block(node2,$$render=>{$$props.onClick?$$render(consequent):$$render(alternate,-1)})}var node_1=sibling(node2,2);{var consequent_1=$$anchor2=>{var div_1=root_3$T(),node_2=child(div_1);ActionIconRemove(node_2,{get id(){return $$props.id},get onRemove(){return $$props.onRemove},class:"text-white"}),reset(div_1),append($$anchor2,div_1)};if_block(node_1, +$$render=>{readonly2()||$$render(consequent_1)})}reset(div),template_effect(()=>set_class(div,1,`group relative overflow-hidden rounded-lg bg-muted shadow-lg dark:border dark:border-muted ${className()??""}`)),append($$anchor,div)}delegate(["click"]);var root_1$S=from_html('<div><h3 class="mb-3 text-sm font-medium text-foreground"> </h3> <div class="flex flex-wrap items-start gap-3"></div></div>'),root_3$S=from_html('<div><h3 class="mb-3 text-sm font-medium text-foreground"> </h3> <div class="fl\ +ex flex-wrap items-start gap-3"></div></div>'),root$1w=from_html('<div class="space-y-4"><div class="min-h-0 flex-1 space-y-6 overflow-y-auto px-1"><!> <!></div></div> <!>',1);function ChatAttachmentsViewAll($$anchor,$$props){push$1($$props,!0);let uploadedFiles=prop($$props,"uploadedFiles",19,()=>[]),attachments=prop($$props,"attachments",19,()=>[]),readonly2=prop($$props,"readonly",3,!1),imageHeight=prop($$props,"imageHeight",3,"h-24"),imageWidth=prop($$props,"imageWidth",3,"w-auto"),imageClass=prop( +$$props,"imageClass",3,""),previewDialogOpen=state$1(!1),previewItem=state$1(null),displayItems=user_derived(()=>getAttachmentDisplayItems({uploadedFiles:uploadedFiles(),attachments:attachments()})),imageItems=user_derived(()=>get$3(displayItems).filter(item=>item.isImage)),fileItems=user_derived(()=>get$3(displayItems).filter(item=>!item.isImage));function openPreview(item,event2){event2&&(event2.preventDefault(),event2.stopPropagation()),set$1(previewItem,{uploadedFile:item.uploadedFile,attachment:item. +attachment,preview:item.preview,name:item.name,size:item.size,textContent:item.textContent},!0),set$1(previewDialogOpen,!0)}var fragment=root$1w(),div=first_child(fragment),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{var div_2=root_1$S(),h3=child(div_2),text2=child(h3);reset(h3);var div_3=sibling(h3,2);each(div_3,21,()=>get$3(fileItems),item=>item.id,($$anchor3,item)=>{ChatAttachmentThumbnailFile($$anchor3,{class:"cursor-pointer",get id(){return get$3(item).id},get name(){return get$3( +item).name},get size(){return get$3(item).size},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get textContent(){return get$3(item).textContent},get attachment(){return get$3(item).attachment},get uploadedFile(){return get$3(item).uploadedFile},onClick:event2=>openPreview(get$3(item),event2)})}),reset(div_3),reset(div_2),template_effect(()=>set_text(text2,`Files (${get$3(fileItems).length??""})`)),append($$anchor2,div_2)};if_block(node2,$$render=>{get$3(fileItems). +length>0&&$$render(consequent)})}var node_1=sibling(node2,2);{var consequent_2=$$anchor2=>{var div_4=root_3$S(),h3_1=child(div_4),text_1=child(h3_1);reset(h3_1);var div_5=sibling(h3_1,2);each(div_5,21,()=>get$3(imageItems),item=>item.id,($$anchor3,item)=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);{var consequent_1=$$anchor4=>{ChatAttachmentThumbnailImage($$anchor4,{class:"cursor-pointer",get id(){return get$3(item).id},get name(){return get$3(item).name},get preview(){return get$3( +item).preview},get readonly(){return readonly2()},get onRemove(){return $$props.onFileRemove},get height(){return imageHeight()},get width(){return imageWidth()},get imageClass(){return imageClass()},onClick:event2=>openPreview(get$3(item),event2)})};if_block(node_2,$$render=>{get$3(item).preview&&$$render(consequent_1)})}append($$anchor3,fragment_2)}),reset(div_5),reset(div_4),template_effect(()=>set_text(text_1,`Images (${get$3(imageItems).length??""})`)),append($$anchor2,div_4)};if_block(node_1, +$$render=>{get$3(imageItems).length>0&&$$render(consequent_2)})}reset(div_1),reset(div);var node_3=sibling(div,2);{var consequent_3=$$anchor2=>{DialogChatAttachmentPreview($$anchor2,{get uploadedFile(){return get$3(previewItem).uploadedFile},get attachment(){return get$3(previewItem).attachment},get preview(){return get$3(previewItem).preview},get name(){return get$3(previewItem).name},get size(){return get$3(previewItem).size},get textContent(){return get$3(previewItem).textContent},get activeModelId(){ +return $$props.activeModelId},get open(){return get$3(previewDialogOpen)},set open($$value){set$1(previewDialogOpen,$$value,!0)}})};if_block(node_3,$$render=>{get$3(previewItem)&&$$render(consequent_3)})}append($$anchor,fragment),pop()}function Dialog_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-l\ +g leading-none font-semibold",$$props.class));component(node2,()=>Dialog_title$1,($$anchor2,DialogPrimitive_Title)=>{DialogPrimitive_Title($$anchor2,spread_props({"data-slot":"dialog-title",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root$1v=from_html("<div><!></div>");function Dialog_footer($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$\ +slots","$$events","$$legacy","ref","class","children"]);var div=root$1v();attribute_effect(div,$0=>({"data-slot":"dialog-footer",class:$0,...restProps}),[()=>cn$1("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$1u=from_html("<div><!></div>");function Dialog_header($$anchor,$$props){push$1($$props,!0);let ref2=prop( +$$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1u();attribute_effect(div,$0=>({"data-slot":"dialog-header",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-2 text-center sm:text-left",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}function Dialog_overlay($$anchor,$$props){push$1($$props,!0);let ref2=prop( +$$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",$$props.class));component(node2,()=>Dialog_overlay$1,($$anchor2,DialogPrimitive_Overlay)=>{DialogPrimitive_Overlay($$anchor2,spread_props({"data-slot":"dialog-over\ +lay",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_4$x=from_html('<!> <span class="sr-only">Close</span>',1),root_2$17=from_html("<!> <!>",1),root_1$R=from_html("<!> <!>",1);function Dialog_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),showCloseButton=prop($$props,"showCloseButton",3,!0),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","cla\ +ss","portalProps","children","showCloseButton"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$1,($$anchor2,Dialog_Portal)=>{Dialog_Portal($$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$R(),node_1=first_child(fragment_1);component(node_1,()=>Dialog_overlay,($$anchor4,Dialog_Overlay)=>{Dialog_Overlay($$anchor4,{})});var node_2=sibling(node_1,2);{let $0=user_derived(()=>cn$1("fixed top-[50%] left-[50%] z-50\ + grid max-h-[100dvh] w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 overflow-y-auto rounded-lg border border-border/30 bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg md:max-h-[100vh]",$$props.class));component(node_2,()=>Dialog_content$1,($$anchor4,DialogPrimitive_Content)=>{DialogPrimitive_Content( +$$anchor4,spread_props({"data-slot":"dialog-content",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$17(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children??noop$3);var node_4=sibling(node_3,2);{var consequent=$$anchor6=>{var fragment_3=comment$2(),node_5=first_child(fragment_3);component(node_5,()=>Dialog_close,($$anchor7,DialogPrimitive_Close)=>{DialogPrimitive_Close( +$$anchor7,{class:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:($$anchor8,$$slotProps3)=>{var fragment_4=root_4$x(),node_6=first_child(fragment_4);X(node_6,{}),next$1(2),append($$anchor8,fragment_4)},$$slots:{default:!0}})}),append($$anchor6,fragment_3)}; +if_block(node_4,$$render=>{showCloseButton()&&$$render(consequent)})}append($$anchor5,fragment_2)},$$slots:{default:!0}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}function Dialog_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-sm text-muted-fore\ +ground",$$props.class));component(node2,()=>Dialog_description$1,($$anchor2,DialogPrimitive_Description)=>{DialogPrimitive_Description($$anchor2,spread_props({"data-slot":"dialog-description",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const Root$4=Dialog,Portal$1=Portal$2;class ConversationsStore{#conversations=state$1(proxy([]));get conversations(){return get$3(this.#conversations)}set conversations(value){ +set$1(this.#conversations,value,!0)}#activeConversation=state$1(null);get activeConversation(){return get$3(this.#activeConversation)}set activeConversation(value){set$1(this.#activeConversation,value,!0)}#activeMessages=state$1(proxy([]));get activeMessages(){return get$3(this.#activeMessages)}set activeMessages(value){set$1(this.#activeMessages,value,!0)}#isInitialized=state$1(!1);get isInitialized(){return get$3(this.#isInitialized)}set isInitialized(value){set$1(this.#isInitialized,value,!0)}#pendingMcpServerOverrides=state$1( +proxy(ConversationsStore.loadMcpDefaults()));get pendingMcpServerOverrides(){return get$3(this.#pendingMcpServerOverrides)}set pendingMcpServerOverrides(value){set$1(this.#pendingMcpServerOverrides,value,!0)}static loadMcpDefaults(){if(typeof globalThis.localStorage>"u")return[];try{const raw2=localStorage.getItem(MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY);if(!raw2)return[];const parsed=JSON.parse(raw2);return Array.isArray(parsed)?parsed.filter(o=>typeof o=="object"&&o!==null&&"serverId"in o&&"enabl\ +ed"in o):[]}catch{return[]}}saveMcpDefaults(){if(typeof globalThis.localStorage>"u")return;const plain=this.pendingMcpServerOverrides.map(o=>({serverId:o.serverId,enabled:o.enabled}));plain.length>0?localStorage.setItem(MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY,JSON.stringify(plain)):localStorage.removeItem(MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY)}titleUpdateConfirmationCallback;messageUpdateCallback=null;async init(){if(!this.isInitialized)try{await runLegacyMigration(),await this.loadConversations(),this. +isInitialized=!0}catch(error2){console.error("Failed to initialize conversations:",error2)}}async initialize(){return this.init()}registerMessageUpdateCallback(callback){this.messageUpdateCallback=callback}addMessageToActive(message){this.activeMessages.push(message)}updateMessageAtIndex(index2,updates){index2!==-1&&this.activeMessages[index2]&&(this.activeMessages[index2]={...this.activeMessages[index2],...updates})}findMessageIndex(messageId){return this.activeMessages.findIndex(m=>m.id===messageId)}sliceActiveMessages(startIndex){ +this.activeMessages=this.activeMessages.slice(0,startIndex)}removeMessageAtIndex(index2){if(index2!==-1)return this.activeMessages.splice(index2,1)[0]}setTitleUpdateConfirmationCallback(callback){this.titleUpdateConfirmationCallback=callback}async loadConversations(){const conversations2=await DatabaseService.getAllConversations();this.conversations=conversations2}async createConversation(name){const conversationName=name||`Chat ${new Date().toLocaleString()}`,conversation=await DatabaseService. +createConversation(conversationName);if(this.pendingMcpServerOverrides.length>0){const plainOverrides=this.pendingMcpServerOverrides.map(o=>({serverId:o.serverId,enabled:o.enabled}));conversation.mcpServerOverrides=plainOverrides,await DatabaseService.updateConversation(conversation.id,{mcpServerOverrides:plainOverrides}),this.pendingMcpServerOverrides=[]}return this.conversations=[conversation,...this.conversations],this.activeConversation=conversation,this.activeMessages=[],await goto(`#/chat/${conversation. +id}`),conversation.id}async loadConversation(convId){try{const conversation=await DatabaseService.getConversation(convId);if(!conversation)return!1;if(this.pendingMcpServerOverrides=[],this.activeConversation=conversation,conversation.currNode){const allMessages=await DatabaseService.getConversationMessages(convId),filteredMessages=filterByLeafNodeId(allMessages,conversation.currNode,!1);this.activeMessages=filteredMessages}else{const messages=await DatabaseService.getConversationMessages(convId); +this.activeMessages=messages}return!0}catch(error2){return console.error("Failed to load conversation:",error2),!1}}clearActiveConversation(){this.activeConversation=null,this.activeMessages=[],this.pendingMcpServerOverrides=ConversationsStore.loadMcpDefaults()}async deleteConversation(convId,options){try{if(await DatabaseService.deleteConversation(convId,options),options?.deleteWithForks){const idsToRemove=new SvelteSet([convId]),queue=[convId];for(;queue.length>0;){const parentId=queue.pop();for(const c2 of this. +conversations)c2.forkedFromConversationId===parentId&&!idsToRemove.has(c2.id)&&(idsToRemove.add(c2.id),queue.push(c2.id))}this.conversations=this.conversations.filter(c2=>!idsToRemove.has(c2.id)),this.activeConversation&&idsToRemove.has(this.activeConversation.id)&&(this.clearActiveConversation(),await goto("?new_chat=true#/"))}else{const newParent=this.conversations.find(c2=>c2.id===convId)?.forkedFromConversationId;this.conversations=this.conversations.filter(c2=>c2.id!==convId).map(c2=>c2.forkedFromConversationId=== +convId?{...c2,forkedFromConversationId:newParent}:c2),this.activeConversation?.id===convId&&(this.clearActiveConversation(),await goto("?new_chat=true#/"))}}catch(error2){console.error("Failed to delete conversation:",error2)}}async deleteAll(){try{const allConversations=await DatabaseService.getAllConversations();for(const conv of allConversations)await DatabaseService.deleteConversation(conv.id);this.clearActiveConversation(),this.conversations=[],toast.success("All conversations deleted"),await goto( +"?new_chat=true#/")}catch(error2){console.error("Failed to delete all conversations:",error2),toast.error("Failed to delete conversations")}}async refreshActiveMessages(){if(!this.activeConversation)return;const allMessages=await DatabaseService.getConversationMessages(this.activeConversation.id);if(allMessages.length===0){this.activeMessages=[];return}const leafNodeId=this.activeConversation.currNode||allMessages.reduce((latest,msg)=>msg.timestamp>latest.timestamp?msg:latest).id,currentPath=filterByLeafNodeId( +allMessages,leafNodeId,!1);this.activeMessages=currentPath}async getConversationMessages(convId){return await DatabaseService.getConversationMessages(convId)}async updateConversationName(convId,name){try{await DatabaseService.updateConversation(convId,{name});const convIndex=this.conversations.findIndex(c2=>c2.id===convId);convIndex!==-1&&(this.conversations[convIndex].name=name,this.conversations=[...this.conversations]),this.activeConversation?.id===convId&&(this.activeConversation={...this.activeConversation, +name})}catch(error2){console.error("Failed to update conversation name:",error2)}}async updateConversationTitleWithConfirmation(convId,newTitle){try{if(config$1().askForTitleConfirmation&&this.titleUpdateConfirmationCallback){const conversation=await DatabaseService.getConversation(convId);if(!conversation||!await this.titleUpdateConfirmationCallback(conversation.name,newTitle))return!1}return await this.updateConversationName(convId,newTitle),!0}catch(error2){return console.error("Failed to upd\ +ate conversation title with confirmation:",error2),!1}}updateConversationTimestamp(){if(!this.activeConversation)return;const chatIndex=this.conversations.findIndex(c2=>c2.id===this.activeConversation.id);if(chatIndex!==-1){this.conversations[chatIndex].lastModified=Date.now();const updatedConv=this.conversations.splice(chatIndex,1)[0];this.conversations=[updatedConv,...this.conversations]}}async updateCurrentNode(nodeId){this.activeConversation&&(await DatabaseService.updateCurrentNode(this.activeConversation. +id,nodeId),this.activeConversation={...this.activeConversation,currNode:nodeId})}async navigateToSibling(siblingId){if(!this.activeConversation)return;const allMessages=await DatabaseService.getConversationMessages(this.activeConversation.id),rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null),currentFirstUserMessage=this.activeMessages.find(m=>m.role===MessageRole.USER&&m.parent===rootMessage?.id),currentLeafNodeId=findLeafNode(allMessages,siblingId);if(await DatabaseService.updateCurrentNode( +this.activeConversation.id,currentLeafNodeId),this.activeConversation={...this.activeConversation,currNode:currentLeafNodeId},await this.refreshActiveMessages(),rootMessage&&this.activeMessages.length>0){const newFirstUserMessage=this.activeMessages.find(m=>m.role===MessageRole.USER&&m.parent===rootMessage.id);newFirstUserMessage&&newFirstUserMessage.content.trim()&&(!currentFirstUserMessage||newFirstUserMessage.id!==currentFirstUserMessage.id||newFirstUserMessage.content.trim()!==currentFirstUserMessage. +content.trim())&&await this.updateConversationTitleWithConfirmation(this.activeConversation.id,generateConversationTitle(newFirstUserMessage.content,!!config$1().titleGenerationUseFirstLine))}}getMcpServerOverride(serverId){return this.activeConversation?this.activeConversation.mcpServerOverrides?.find(o=>o.serverId===serverId):this.pendingMcpServerOverrides.find(o=>o.serverId===serverId)}getAllMcpServerOverrides(){return this.activeConversation?.mcpServerOverrides?this.activeConversation.mcpServerOverrides: +this.pendingMcpServerOverrides}isMcpServerEnabledForChat(serverId){return this.getMcpServerOverride(serverId)?.enabled??!1}async setMcpServerOverride(serverId,enabled){if(!this.activeConversation){this.setPendingMcpServerOverride(serverId,enabled);return}const currentOverrides=(this.activeConversation.mcpServerOverrides||[]).map(o=>({serverId:o.serverId,enabled:o.enabled}));let newOverrides;if(enabled===void 0)newOverrides=currentOverrides.filter(o=>o.serverId!==serverId);else{const existingIndex=currentOverrides. +findIndex(o=>o.serverId===serverId);existingIndex>=0?(newOverrides=[...currentOverrides],newOverrides[existingIndex]={serverId,enabled}):newOverrides=[...currentOverrides,{serverId,enabled}]}await DatabaseService.updateConversation(this.activeConversation.id,{mcpServerOverrides:newOverrides.length>0?newOverrides:void 0}),this.activeConversation={...this.activeConversation,mcpServerOverrides:newOverrides.length>0?newOverrides:void 0};const convIndex=this.conversations.findIndex(c2=>c2.id===this.activeConversation. +id);convIndex!==-1&&(this.conversations[convIndex].mcpServerOverrides=newOverrides.length>0?newOverrides:void 0,this.conversations=[...this.conversations])}setPendingMcpServerOverride(serverId,enabled){if(enabled===void 0)this.pendingMcpServerOverrides=this.pendingMcpServerOverrides.filter(o=>o.serverId!==serverId);else{const existingIndex=this.pendingMcpServerOverrides.findIndex(o=>o.serverId===serverId);if(existingIndex>=0){const newOverrides=[...this.pendingMcpServerOverrides];newOverrides[existingIndex]= +{serverId,enabled},this.pendingMcpServerOverrides=newOverrides}else this.pendingMcpServerOverrides=[...this.pendingMcpServerOverrides,{serverId,enabled}]}this.saveMcpDefaults()}async toggleMcpServerForChat(serverId){const currentEnabled=this.isMcpServerEnabledForChat(serverId);await this.setMcpServerOverride(serverId,!currentEnabled)}async removeMcpServerOverride(serverId){await this.setMcpServerOverride(serverId,void 0)}clearPendingMcpServerOverrides(){this.pendingMcpServerOverrides=[],this.saveMcpDefaults()}async forkConversation(messageId,options){ +if(!this.activeConversation)return null;try{const newConv=await DatabaseService.forkConversation(this.activeConversation.id,messageId,options);return this.conversations=[newConv,...this.conversations],await goto(`#/chat/${newConv.id}`),toast.success("Conversation forked"),newConv.id}catch(error2){return console.error("Failed to fork conversation:",error2),toast.error("Failed to fork conversation"),null}}generateConversationFilename(conversation,msgs){const sanitizedName=(conversation.name??"").trim(). +toLowerCase().replace(NON_ALPHANUMERIC_REGEX,EXPORT_CONV_NONALNUM_REPLACEMENT).replace(MULTIPLE_UNDERSCORE_REGEX,"_").substring(0,EXPORT_CONV_NAME_SUFFIX_MAX_LENGTH),formattedDate=(msgs?.length?new Date(Math.max(...msgs.map(m=>m.timestamp))):new Date).toISOString().slice(0,ISO_TIMESTAMP_SLICE_LENGTH).replace(ISO_DATE_TIME_SEPARATOR,ISO_DATE_TIME_SEPARATOR_REPLACEMENT).replaceAll(ISO_TIME_SEPARATOR,ISO_TIME_SEPARATOR_REPLACEMENT),trimmedConvId=conversation.id?.slice(0,EXPORT_CONV_ID_TRIM_LENGTH)?? +"";return`${formattedDate}_conv_${trimmedConvId}_${sanitizedName}.json`}downloadConversationFile(data,filename){const conversation="conv"in data?data.conv:Array.isArray(data)?data[0]?.conv:void 0,msgs="messages"in data?data.messages:Array.isArray(data)?data[0]?.messages:void 0;if(!conversation){console.error("Invalid data: missing conversation");return}let downloadFilename;filename?downloadFilename=filename:Array.isArray(data)&&data.length>1?downloadFilename=`${new Date().toISOString().split(ISO_DATE_TIME_SEPARATOR)[0]}\ +_conversations.json`:downloadFilename=this.generateConversationFilename(conversation,msgs);const blob=new Blob([JSON.stringify(data,null,2)],{type:"application/json"}),url2=URL.createObjectURL(blob),a=document.createElement("a");a.href=url2,a.download=downloadFilename,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(url2)}async downloadConversation(convId){let conversation,messages;if(this.activeConversation?.id===convId)conversation=this.activeConversation, +messages=this.activeMessages;else{if(conversation=await DatabaseService.getConversation(convId),!conversation)return;messages=await DatabaseService.getConversationMessages(convId)}this.downloadConversationFile({conv:conversation,messages})}async importConversations(){return new Promise((resolve2,reject)=>{const input=document.createElement("input");input.type=HtmlInputType.FILE,input.accept=FileExtensionText.JSON,input.onchange=async e=>{const file=e.target?.files?.[0];if(!file){reject(new Error( +"No file selected"));return}try{const text2=await file.text(),parsedData=JSON.parse(text2);let importedData;if(Array.isArray(parsedData))importedData=parsedData;else if(parsedData&&typeof parsedData=="object"&&"conv"in parsedData&&"messages"in parsedData)importedData=[parsedData];else throw new Error("Invalid file format");const result=await DatabaseService.importConversations(importedData);toast.success(`Imported ${result.imported} conversation(s), skipped ${result.skipped}`),await this.loadConversations(); +const importedConversations=(Array.isArray(importedData)?importedData:[importedData]).map(item=>item.conv);resolve2(importedConversations)}catch(err){const message=err instanceof Error?err.message:"Unknown error";console.error("Failed to import conversations:",err),toast.error("Import failed",{description:message}),reject(new Error(`Import failed: ${message}`))}},input.click()})}async importConversationsData(data){const result=await DatabaseService.importConversations(data);return await this.loadConversations(), +result}}const conversationsStore=new ConversationsStore;conversationsStore.init();const conversations=()=>conversationsStore.conversations,activeConversation=()=>conversationsStore.activeConversation,activeMessages=()=>conversationsStore.activeMessages,isConversationsInitialized=()=>conversationsStore.isInitialized;function buildConversationTree(convs){const childrenByParent=new SvelteMap,forkIds=new SvelteSet;for(const conv of convs)if(conv.forkedFromConversationId){forkIds.add(conv.id);const siblings2=childrenByParent. +get(conv.forkedFromConversationId)||[];siblings2.push(conv),childrenByParent.set(conv.forkedFromConversationId,siblings2)}const result=[],visited=new SvelteSet;function walk(conv,depth){visited.add(conv.id),result.push({conversation:conv,depth});const children=childrenByParent.get(conv.id);if(children){children.sort((a,b)=>b.lastModified-a.lastModified);for(const child2 of children)walk(child2,depth+1)}}const roots=convs.filter(c2=>!forkIds.has(c2.id));for(const root2 of roots)walk(root2,0);for(const conv of convs) +visited.has(conv.id)||walk(conv,1);return result}class ToolsService{static async list(){return apiFetch(API_TOOLS.LIST)}static async executeTool(toolName,params,signal){const result=await apiFetch(API_TOOLS.EXECUTE,{method:"POST",body:JSON.stringify({tool:toolName,params}),signal});return ToolResponseField.ERROR in result?{content:String(result[ToolResponseField.ERROR]),isError:!0}:ToolResponseField.PLAIN_TEXT in result?{content:String(result[ToolResponseField.PLAIN_TEXT]),isError:!1}:{content:JSON. +stringify(result),isError:!1}}}class ToolsStore{#_builtinTools=state$1(proxy([]));get _builtinTools(){return get$3(this.#_builtinTools)}set _builtinTools(value){set$1(this.#_builtinTools,value,!0)}#_loading=state$1(!1);get _loading(){return get$3(this.#_loading)}set _loading(value){set$1(this.#_loading,value,!0)}#_error=state$1(null);get _error(){return get$3(this.#_error)}set _error(value){set$1(this.#_error,value,!0)}#_disabledTools=state$1(proxy(new SvelteSet));get _disabledTools(){return get$3( +this.#_disabledTools)}set _disabledTools(value){set$1(this.#_disabledTools,value,!0)}#_toolsEndpointUnreachable=state$1(!1);get _toolsEndpointUnreachable(){return get$3(this.#_toolsEndpointUnreachable)}set _toolsEndpointUnreachable(value){set$1(this.#_toolsEndpointUnreachable,value,!0)}constructor(){try{const stored=localStorage.getItem(DISABLED_TOOLS_LOCALSTORAGE_KEY);if(stored){const parsed=JSON.parse(stored);if(Array.isArray(parsed))for(const name of parsed)typeof name=="string"&&this._disabledTools. +add(name)}}catch(err){console.error("[ToolsStore] Failed to load disabled tools from localStorage:",err)}this.fetchBuiltinTools()}persistDisabledTools(){try{localStorage.setItem(DISABLED_TOOLS_LOCALSTORAGE_KEY,JSON.stringify([...this._disabledTools]))}catch{}}get builtinTools(){return this._builtinTools}get mcpTools(){return mcpStore.getToolDefinitionsForLLM()}get customTools(){const raw2=config$1().custom;if(!raw2||typeof raw2!="string")return[];try{const parsed=JSON.parse(raw2);return Array.isArray( +parsed)?parsed.filter(t=>typeof t=="object"&&t!==null&&"type"in t&&t.type==="function"&&"function"in t&&typeof t.function?.name=="string"):[]}catch{return[]}}get allTools(){const entries=[];for(const def of this._builtinTools)entries.push({source:ToolSource.BUILTIN,definition:def});const connections=mcpStore.getConnections();if(connections.size>0)for(const[serverId,connection]of connections){const serverName=mcpStore.getServerDisplayName(serverId);for(const tool of connection.tools){const rawSchema=tool. +inputSchema??{type:JsonSchemaType.OBJECT,properties:{},required:[]};entries.push({source:ToolSource.MCP,serverName,serverId,definition:{type:ToolCallType.FUNCTION,function:{name:tool.name,description:tool.description,parameters:rawSchema}}})}}else for(const{serverId,serverName,tools}of this.getMcpToolsFromHealthChecks())for(const tool of tools)entries.push({source:ToolSource.MCP,serverName,serverId,definition:{type:ToolCallType.FUNCTION,function:{name:tool.name,description:tool.description,parameters:{ +type:JsonSchemaType.OBJECT,properties:{},required:[]}}}});for(const def of this.customTools)entries.push({source:ToolSource.CUSTOM,definition:def});return entries}get toolGroups(){const groups=[];this._builtinTools.length>0&&groups.push({source:ToolSource.BUILTIN,label:TOOL_GROUP_LABELS[ToolSource.BUILTIN],tools:this._builtinTools});const connections=mcpStore.getConnections();if(connections.size>0)for(const[serverId,connection]of connections){if(connection.tools.length===0)continue;const label=mcpStore. +getServerDisplayName(serverId),tools=connection.tools.map(tool=>{const rawSchema=tool.inputSchema??{type:JsonSchemaType.OBJECT,properties:{},required:[]};return{type:ToolCallType.FUNCTION,function:{name:tool.name,description:tool.description,parameters:rawSchema}}});groups.push({source:ToolSource.MCP,label,serverId,tools})}else for(const{serverId,serverName,tools}of this.getMcpToolsFromHealthChecks()){if(tools.length===0)continue;const defs=tools.map(tool=>({type:ToolCallType.FUNCTION,function:{ +name:tool.name,description:tool.description,parameters:{type:JsonSchemaType.OBJECT,properties:{},required:[]}}}));groups.push({source:ToolSource.MCP,label:serverName,serverId,tools:defs})}const custom2=this.customTools;return custom2.length>0&&groups.push({source:ToolSource.CUSTOM,label:TOOL_GROUP_LABELS[ToolSource.CUSTOM],tools:custom2}),groups}get enabledToolDefinitions(){return this.allTools.filter(t=>!this._disabledTools.has(t.definition.function.name)).map(t=>t.definition)}getEnabledToolsForLLM(){ +const disabled=this._disabledTools,result=[];for(const tool of this._builtinTools)disabled.has(tool.function.name)||result.push(tool);for(const tool of mcpStore.getToolDefinitionsForLLM())disabled.has(tool.function.name)||result.push(tool);for(const tool of this.customTools)disabled.has(tool.function.name)||result.push(tool);return result}get allToolDefinitions(){return this.allTools.map(t=>t.definition)}get loading(){return this._loading}get error(){return this._error}get isToolsEndpointUnreachable(){ +return this._toolsEndpointUnreachable}get disabledTools(){return this._disabledTools}isToolEnabled(toolName){return!this._disabledTools.has(toolName)}toggleTool(toolName){this._disabledTools.has(toolName)?this._disabledTools.delete(toolName):this._disabledTools.add(toolName),this.persistDisabledTools()}setToolEnabled(toolName,enabled){enabled?this._disabledTools.delete(toolName):this._disabledTools.add(toolName)}enableAllToolsForServer(serverId){const connection=mcpStore.getConnections().get(serverId); +if(connection){for(const tool of connection.tools)this._disabledTools.delete(tool.name);this.persistDisabledTools()}}toggleGroup(group){const allEnabled=group.tools.every(t=>this.isToolEnabled(t.function.name));for(const tool of group.tools)this.setToolEnabled(tool.function.name,!allEnabled);this.persistDisabledTools()}isGroupFullyEnabled(group){return group.tools.length>0&&group.tools.every(t=>this.isToolEnabled(t.function.name))}isGroupPartiallyEnabled(group){const enabledCount=group.tools.filter( +t=>this.isToolEnabled(t.function.name)).length;return enabledCount>0&&enabledCount<group.tools.length}getMcpToolsFromHealthChecks(){const result=[];for(const server of mcpStore.getServersSorted().filter(s2=>s2.enabled)){const health=mcpStore.getHealthCheckState(server.id);health.status===HealthCheckStatus.SUCCESS&&health.tools.length>0&&result.push({serverId:server.id,serverName:mcpStore.getServerLabel(server),tools:health.tools})}return result}getToolSource(toolName){if(this._builtinTools.some( +t=>t.function.name===toolName))return ToolSource.BUILTIN;for(const entry of this.allTools)if(entry.definition.function.name===toolName)return entry.source;return null}getToolServerLabel(toolName){for(const entry of this.allTools)if(entry.definition.function.name===toolName){if(entry.serverName)return mcpStore.getServerDisplayName(entry.serverName);if(entry.source===ToolSource.BUILTIN)return TOOL_SERVER_LABELS[ToolSource.BUILTIN];if(entry.source===ToolSource.CUSTOM)return TOOL_SERVER_LABELS[ToolSource. +CUSTOM]}return""}getPermissionKey(toolName){for(const entry of this.allTools)if(entry.definition.function.name===toolName)switch(entry.source){case ToolSource.BUILTIN:return`builtin:${toolName}`;case ToolSource.CUSTOM:return`custom:${toolName}`;case ToolSource.MCP:return entry.serverId?`mcp-${entry.serverId}:${toolName}`:`mcp:${toolName}`;default:return null}return null}get hasEnabledTools(){return this.getEnabledToolsForLLM().length>0}async fetchBuiltinTools(){if(!this._loading){this._loading=!0, +this._error=null,this._toolsEndpointUnreachable=!1;try{const toolInfos=await ToolsService.list();this._builtinTools=toolInfos.map(info2=>info2.definition)}catch(err){const errorMessage=err instanceof Error?err.message:String(err);this._error=errorMessage,(errorMessage.includes("404")||errorMessage.toLowerCase().includes("not found"))&&(this._toolsEndpointUnreachable=!0),console.error("[ToolsStore] Failed to fetch built-in tools:",err)}finally{this._loading=!1}}}}const toolsStore=new ToolsStore;var root_1$Q=from_html( +"<!> Add New Server",1),root_2$16=from_html('<div class="rounded-md border border-dashed p-4 text-sm text-muted-foreground">No MCP Servers configured yet. Add one to enable agentic features.</div>'),root_3$R=from_html('<div class="grid gap-3" style="grid-template-columns: repeat(auto-fill, minmax(min(32rem, calc(100dvw - 2rem)), 1fr));"></div>'),root$1t=from_html('<div class="max-h-full overflow-auto"><div class="flex items-center gap-2 p-4 md:absolute md:top-8 md:left-8 md:px-0 md:py-2"><!> <h1\ + class="text-xl font-semibold md:text-2xl">MCP Servers</h1></div> <div class="sticky top-0 z-10 mt-4 flex items-start justify-end gap-4 px-8 py-4"><!></div> <!> <div><!> <!></div></div>');function SettingsMcpServers($$anchor,$$props){push$1($$props,!0);let servers=user_derived(()=>mcpStore.getServersSorted()),initialLoadComplete=state$1(!1),isAddingServer=state$1(!1);onMount$1(()=>{if(page$1.url.searchParams.has("add")){set$1(isAddingServer,!0);const newUrl=new URL(page$1.url);newUrl.searchParams. +delete("add"),replaceState(newUrl,{})}}),user_effect(()=>{if(get$3(initialLoadComplete))return;get$3(servers).length>0&&get$3(servers).every(server=>{const state2=mcpStore.getHealthCheckState(server.id);return state2.status===HealthCheckStatus.SUCCESS||state2.status===HealthCheckStatus.ERROR})&&set$1(initialLoadComplete,!0)});var div=root$1t(),div_1=child(div),node2=child(div_1);McpLogo(node2,{class:"h-5 w-5 md:h-6 md:w-6"}),next$1(2),reset(div_1);var div_2=sibling(div_1,2),node_1=child(div_2);Button( +node_1,{variant:"outline",size:"sm",class:"shrink-0",onclick:()=>set$1(isAddingServer,!0),children:($$anchor2,$$slotProps)=>{var fragment=root_1$Q(),node_2=first_child(fragment);Plus(node_2,{class:"h-4 w-4"}),next$1(),append($$anchor2,fragment)},$$slots:{default:!0}}),reset(div_2);var node_3=sibling(div_2,2);DialogMcpServerAddNew(node_3,{get open(){return get$3(isAddingServer)},set open($$value){set$1(isAddingServer,$$value,!0)}});var div_3=sibling(node_3,2),node_4=child(div_3);{var consequent=$$anchor2=>{ +var div_4=root_2$16();append($$anchor2,div_4)};if_block(node_4,$$render=>{get$3(servers).length===0&&!get$3(isAddingServer)&&$$render(consequent)})}var node_5=sibling(node_4,2);{var consequent_2=$$anchor2=>{var div_5=root_3$R();each(div_5,21,()=>get$3(servers),server=>server.id,($$anchor3,server)=>{var fragment_1=comment$2(),node_6=first_child(fragment_1);{var consequent_1=$$anchor4=>{McpServerCardSkeleton($$anchor4)},alternate=$$anchor4=>{{let $0=user_derived(()=>mcpStore.getServerFavicon(get$3( +server).id)),$1=user_derived(()=>conversationsStore.isMcpServerEnabledForChat(get$3(server).id));McpServerCard($$anchor4,{get server(){return get$3(server)},get faviconUrl(){return get$3($0)},get enabled(){return get$3($1)},onToggle:async()=>{const wasEnabled=conversationsStore.isMcpServerEnabledForChat(get$3(server).id);await conversationsStore.toggleMcpServerForChat(get$3(server).id),wasEnabled||toolsStore.enableAllToolsForServer(get$3(server).id)},onUpdate:updates=>mcpStore.updateServer(get$3( +server).id,updates),onDelete:()=>mcpStore.removeServer(get$3(server).id)})}};if_block(node_6,$$render=>{get$3(initialLoadComplete)?$$render(alternate,-1):$$render(consequent_1)})}append($$anchor3,fragment_1)}),reset(div_5),append($$anchor2,div_5)};if_block(node_5,$$render=>{get$3(servers).length>0&&$$render(consequent_2)})}reset(div_3),reset(div),template_effect(()=>set_class(div_3,1,`grid gap-5 md:space-y-4 ${$$props.class??""}`)),transition(1,div,()=>fade,()=>({duration:150})),append($$anchor, +div),pop()}delegate(["click"]);const badgeVariants=tv({base:"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden whitespace-nowrap rounded-md border px-2 py-0.5 text-xs font-medium transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3",variants:{variant:{default:"bg-primary \ +text-primary-foreground [a&]:hover:bg-primary/90 border-transparent",secondary:"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent",tertiary:"bg-foreground/15 dark:bg-foreground/10 text-foreground [a&]:hover:bg-foreground/25 border-transparent",destructive:"bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/70 border-transparent text-white",outline:"text-foreground [a&]:hover:b\ +g-accent [a&]:hover:text-accent-foreground"}},defaultVariants:{variant:"default"}});function Badge($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),variant=prop($$props,"variant",3,"default"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","href","class","variant","children"]);var fragment=comment$2(),node2=first_child(fragment);element$4(node2,()=>$$props.href?"a":"span",!1,($$element,$$anchor2)=>{bind_this($$element,$$value=>ref2($$value),()=>ref2()), +attribute_effect($$element,$0=>({"data-slot":"badge",href:$$props.href,class:$0,...restProps}),[()=>cn$1(badgeVariants({variant:variant()}),$$props.class,"backdrop-blur-sm")]);var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3),append($$anchor2,fragment_1)}),append($$anchor,fragment),pop()}var root_3$Q=from_html("<!> Tools",1),root_5$y=from_html("<!> Resources",1),root_7$r=from_html("<!> Prompts",1),root_9$k=from_html("<!> Logging",1),root_11$e=from_html( +"<!> Completions",1),root_13$b=from_html("<!> Tasks",1),root_1$P=from_html("<!> <!> <!> <!> <!> <!>",1);function McpCapabilitiesBadges($$anchor,$$props){push$1($$props,!0);var fragment=comment$2(),node2=first_child(fragment);{var consequent_6=$$anchor2=>{var fragment_1=root_1$P(),node_1=first_child(fragment_1);{var consequent=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-green-50 px-1.5 text-[10px] dark:bg-green-950",children:($$anchor4,$$slotProps)=>{var fragment_3=root_3$Q(), +node_2=first_child(fragment_3);Wrench(node_2,{class:"h-3 w-3 text-green-600 dark:text-green-400"}),next$1(),append($$anchor4,fragment_3)},$$slots:{default:!0}})};if_block(node_1,$$render=>{$$props.capabilities.server.tools&&$$render(consequent)})}var node_3=sibling(node_1,2);{var consequent_1=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-blue-50 px-1.5 text-[10px] dark:bg-blue-950",children:($$anchor4,$$slotProps)=>{var fragment_5=root_5$y(),node_4=first_child(fragment_5);Database( +node_4,{class:"h-3 w-3 text-blue-600 dark:text-blue-400"}),next$1(),append($$anchor4,fragment_5)},$$slots:{default:!0}})};if_block(node_3,$$render=>{$$props.capabilities.server.resources&&$$render(consequent_1)})}var node_5=sibling(node_3,2);{var consequent_2=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-purple-50 px-1.5 text-[10px] dark:bg-purple-950",children:($$anchor4,$$slotProps)=>{var fragment_7=root_7$r(),node_6=first_child(fragment_7);Message_square(node_6,{class:"h-\ +3 w-3 text-purple-600 dark:text-purple-400"}),next$1(),append($$anchor4,fragment_7)},$$slots:{default:!0}})};if_block(node_5,$$render=>{$$props.capabilities.server.prompts&&$$render(consequent_2)})}var node_7=sibling(node_5,2);{var consequent_3=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-orange-50 px-1.5 text-[10px] dark:bg-orange-950",children:($$anchor4,$$slotProps)=>{var fragment_9=root_9$k(),node_8=first_child(fragment_9);File_text(node_8,{class:"h-3 w-3 text-orange-60\ +0 dark:text-orange-400"}),next$1(),append($$anchor4,fragment_9)},$$slots:{default:!0}})};if_block(node_7,$$render=>{$$props.capabilities.server.logging&&$$render(consequent_3)})}var node_9=sibling(node_7,2);{var consequent_4=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-cyan-50 px-1.5 text-[10px] dark:bg-cyan-950",children:($$anchor4,$$slotProps)=>{var fragment_11=root_11$e(),node_10=first_child(fragment_11);Sparkles(node_10,{class:"h-3 w-3 text-cyan-600 dark:text-cyan-400"}), +next$1(),append($$anchor4,fragment_11)},$$slots:{default:!0}})};if_block(node_9,$$render=>{$$props.capabilities.server.completions&&$$render(consequent_4)})}var node_11=sibling(node_9,2);{var consequent_5=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-pink-50 px-1.5 text-[10px] dark:bg-pink-950",children:($$anchor4,$$slotProps)=>{var fragment_13=root_13$b(),node_12=first_child(fragment_13);List_checks(node_12,{class:"h-3 w-3 text-pink-600 dark:text-pink-400"}),next$1(),append( +$$anchor4,fragment_13)},$$slots:{default:!0}})};if_block(node_11,$$render=>{$$props.capabilities.server.tasks&&$$render(consequent_5)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{$$props.capabilities&&$$render(consequent_6)})}append($$anchor,fragment),pop()}function Collapsible($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),open2=prop($$props,"open",15,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","open"]);var fragment=comment$2(), +node2=first_child(fragment);component(node2,()=>Collapsible$1,($$anchor2,CollapsiblePrimitive_Root)=>{CollapsiblePrimitive_Root($$anchor2,spread_props({"data-slot":"collapsible"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},get open(){return open2()},set open($$value){open2($$value)}}))}),append($$anchor,fragment),pop()}function Collapsible_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$event\ +s","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Collapsible_trigger$1,($$anchor2,CollapsiblePrimitive_Trigger)=>{CollapsiblePrimitive_Trigger($$anchor2,spread_props({"data-slot":"collapsible-trigger"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}function Collapsible_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots", +"$$events","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Collapsible_content$1,($$anchor2,CollapsiblePrimitive_Content)=>{CollapsiblePrimitive_Content($$anchor2,spread_props({"data-slot":"collapsible-content"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}var root_6$v=from_html('<span class="ml-1"> </span>'),root_3$P=from_html("<!> <span> </span> <!>",1),root_9$j=from_html('<details class\ +="ml-11"><summary class="cursor-pointer text-[10px] text-muted-foreground">details</summary> <pre class="mt-1 overflow-x-auto rounded bg-background/70 p-2 text-[10px] break-all whitespace-pre-wrap text-foreground/80"> </pre></details>'),root_8$p=from_html('<div><span class="shrink-0 text-muted-foreground"> </span> <!> <span class="break-all"> </span></div> <!>',1),root_7$q=from_html('<div class="max-h-64 space-y-0.5 overflow-y-auto rounded bg-muted/50 p-2 font-mono text-[10px]"></div>'),root_2$15=from_html( +'<div class="space-y-2"><!></div> <!>',1);function McpConnectionLogs($$anchor,$$props){push$1($$props,!0);let defaultExpanded=prop($$props,"defaultExpanded",3,!1),isExpanded=user_derived(defaultExpanded);function formatLogDetails(details){if(details==null)return"";try{return JSON.stringify(details,null,2)}catch{return String(details)}}var fragment=comment$2(),node2=first_child(fragment);{var consequent_3=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Collapsible, +($$anchor3,Collapsible_Root)=>{Collapsible_Root($$anchor3,{get class(){return $$props.class},get open(){return get$3(isExpanded)},set open($$value){set$1(isExpanded,$$value)},children:($$anchor4,$$slotProps)=>{var fragment_2=root_2$15(),div=first_child(fragment_2),node_2=child(div);component(node_2,()=>Collapsible_trigger,($$anchor5,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor5,{class:"flex w-full items-center gap-1 text-xs text-muted-foreground hover:text-foreground",children:($$anchor6,$$slotProps2)=>{ +var fragment_3=root_3$P(),node_3=first_child(fragment_3);{var consequent=$$anchor7=>{Chevron_down($$anchor7,{class:"h-3.5 w-3.5"})},alternate=$$anchor7=>{Chevron_right($$anchor7,{class:"h-3.5 w-3.5"})};if_block(node_3,$$render=>{get$3(isExpanded)?$$render(consequent):$$render(alternate,-1)})}var span=sibling(node_3,2),text2=child(span);reset(span);var node_4=sibling(span,2);{var consequent_1=$$anchor7=>{var span_1=root_6$v(),text_1=child(span_1);reset(span_1),template_effect(()=>set_text(text_1, +`· Connected in ${$$props.connectionTimeMs??""}ms`)),append($$anchor7,span_1)};if_block(node_4,$$render=>{$$props.connectionTimeMs!==void 0&&$$render(consequent_1)})}template_effect(()=>set_text(text2,`Connection Log (${$$props.logs.length??""})`)),append($$anchor6,fragment_3)},$$slots:{default:!0}})}),reset(div);var node_5=sibling(div,2);component(node_5,()=>Collapsible_content,($$anchor5,Collapsible_Content)=>{Collapsible_Content($$anchor5,{class:"mt-2",children:($$anchor6,$$slotProps2)=>{var div_1=root_7$q(); +each(div_1,21,()=>$$props.logs,log=>log.timestamp.getTime()+log.message,($$anchor7,log)=>{const Icon2=user_derived(()=>getMcpLogLevelIcon(get$3(log).level));var fragment_6=root_8$p(),div_2=first_child(fragment_6),span_2=child(div_2),text_2=child(span_2,!0);reset(span_2);var node_6=sibling(span_2,2);component(node_6,()=>get$3(Icon2),($$anchor8,Icon_1)=>{Icon_1($$anchor8,{class:"mt-0.5 h-3 w-3 shrink-0"})});var span_3=sibling(node_6,2),text_3=child(span_3,!0);reset(span_3),reset(div_2);var node_7=sibling( +div_2,2);{var consequent_2=$$anchor8=>{var details_1=root_9$j(),pre=sibling(child(details_1),2),text_4=child(pre,!0);reset(pre),reset(details_1),template_effect($0=>set_text(text_4,$0),[()=>formatLogDetails(get$3(log).details)]),append($$anchor8,details_1)};if_block(node_7,$$render=>{get$3(log).details!==void 0&&$$render(consequent_2)})}template_effect(($0,$1)=>{set_class(div_2,1,$0),set_text(text_2,$1),set_text(text_3,get$3(log).message)},[()=>clsx(cn$1("flex items-start gap-1.5",getMcpLogLevelClass( +get$3(log).level))),()=>formatTime(get$3(log).timestamp)]),append($$anchor7,fragment_6)}),reset(div_1),append($$anchor6,div_1)},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)};if_block(node2,$$render=>{$$props.logs.length>0&&$$render(consequent_3)})}append($$anchor,fragment),pop()}var root_1$O=from_html("<input/>"),root_2$14=from_html("<input/>");function Input($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null), +value=prop($$props,"value",15),files=prop($$props,"files",15),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","value","type","files","class"]);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var input=root_1$O();attribute_effect(input,$0=>({"data-slot":"input",class:$0,type:"file",...restProps}),[()=>cn$1("flex h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 pt-1.5 text-sm font-medium shadow-xs ring-offset-background tran\ +sition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30","focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",$$props.class)],void 0,void 0,void 0,!0),bind_this(input,$$value=>ref2($$value),()=>ref2()),bind_files(input,files), +bind_value(input,value),append($$anchor2,input)},alternate=$$anchor2=>{var input_1=root_2$14();attribute_effect(input_1,$0=>({"data-slot":"input",class:$0,style:"backdrop-filter: blur(0.5rem);",type:$$props.type,...restProps}),[()=>cn$1("flex h-9 w-full min-w-0 rounded-md border border-input bg-background px-3 py-1 text-base shadow-xs ring-offset-background transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground disabled\ +:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30","focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",$$props.class)],void 0,void 0,void 0,!0),bind_this(input_1,$$value=>ref2($$value),()=>ref2()),bind_value(input_1,value),append($$anchor2,input_1)};if_block(node2,$$render=>{$$props.type==="file"?$$render(consequent):$$render(alternate,-1)})}append( +$$anchor,fragment),pop()}function Switch($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),checked=prop($$props,"checked",15,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","checked"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("peer inline-flex h-[1.15rem] w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring fo\ +cus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80",$$props.class));component(node2,()=>Switch$1,($$anchor2,SwitchPrimitive_Root)=>{SwitchPrimitive_Root($$anchor2,spread_props({"data-slot":"switch",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},get checked(){return checked()},set checked($$value){ +checked($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $02=user_derived(()=>cn$1("pointer-events-none block size-4 rounded-full bg-background ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground"));component(node_1,()=>Switch_thumb,($$anchor4,SwitchPrimitive_Thumb)=>{SwitchPrimitive_Thumb( +$$anchor4,{"data-slot":"switch-thumb",get class(){return get$3($02)}})})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_1$N=from_html('<p class="mt-1.5 text-xs text-destructive"> </p>'),root_3$O=from_html('<span class="inline-flex gap-0.75 text-xs text-muted-foreground/60">(Run <pre>llama-server</pre> with <pre>--webui-mcp-proxy</pre> flag)</span>'),root_2$13=from_html('<label><!> <span><span class="text-xs text-muted-foreground">Use llama-server\ + proxy</span> <br/> <!></span></label>'),root$1s=from_html('<div class="grid gap-3"><div><label class="mb-2 block text-xs font-medium">Server URL <span class="text-destructive">*</span></label> <!> <!> <!></div> <!></div>');function McpServerForm($$anchor,$$props){push$1($$props,!0);let useProxy=prop($$props,"useProxy",3,!1),urlError=prop($$props,"urlError",3,null),id2=prop($$props,"id",3,"server"),isWebSocket=user_derived(()=>$$props.url.toLowerCase().startsWith(UrlProtocol.WEBSOCKET)||$$props. +url.toLowerCase().startsWith(UrlProtocol.WEBSOCKET_SECURE)),headerPairs=user_derived(()=>parseHeadersToArray($$props.headers));function updateHeaderPairs(newPairs){set$1(headerPairs,newPairs),$$props.onHeadersChange(serializeHeaders(newPairs))}var div=root$1s(),div_1=child(div),label=child(div_1),node2=sibling(label,2);{let $0=user_derived(()=>urlError()?"border-destructive":"");Input(node2,{get id(){return`server-url-${id2()??""}`},type:"url",get placeholder(){return MCP_SERVER_URL_PLACEHOLDER}, +get value(){return $$props.url},oninput:e=>$$props.onUrlChange(e.currentTarget.value),get class(){return get$3($0)}})}var node_1=sibling(node2,2);{var consequent=$$anchor2=>{var p2=root_1$N(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,urlError())),append($$anchor2,p2)};if_block(node_1,$$render=>{urlError()&&$$render(consequent)})}var node_2=sibling(node_1,2);{var consequent_2=$$anchor2=>{var label_1=root_2$13();let classes;var node_3=child(label_1);{let $0=user_derived(()=>!mcpStore. +isProxyAvailable);Switch(node_3,{class:"mt-1",get id(){return`use-proxy-${id2()??""}`},get checked(){return useProxy()},get disabled(){return get$3($0)},onCheckedChange:checked=>$$props.onUseProxyChange?.(checked)})}var span=sibling(node_3,2),node_4=sibling(child(span),4);{var consequent_1=$$anchor3=>{var span_1=root_3$O();append($$anchor3,span_1)};if_block(node_4,$$render=>{mcpStore.isProxyAvailable||$$render(consequent_1)})}reset(span),reset(label_1),template_effect(()=>classes=set_class(label_1, +1,"mt-3 flex items-start gap-2",null,classes,{"cursor-pointer":mcpStore.isProxyAvailable,"opacity-80":!mcpStore.isProxyAvailable})),append($$anchor2,label_1)};if_block(node_2,$$render=>{!get$3(isWebSocket)&&$$props.onUseProxyChange&&$$render(consequent_2)})}reset(div_1);var node_5=sibling(div_1,2);KeyValuePairs(node_5,{class:"mt-2",get pairs(){return get$3(headerPairs)},onPairsChange:updateHeaderPairs,keyPlaceholder:"Header name",valuePlaceholder:"Value",addButtonLabel:"Add",emptyMessage:"No cus\ +tom headers configured.",sectionLabel:"Custom Headers",sectionLabelOptional:!0}),reset(div),template_effect(()=>set_attribute(label,"for",`server-url-${id2()??""}`)),append($$anchor,div),pop()}var root$1r=from_html("<div><!></div>");function Card($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1r();attribute_effect(div,$0=>({"data-slot":"card",class:$0,...restProps}),[()=>cn$1( +"flex flex-col gap-6 rounded-xl bg-card py-6 text-card-foreground shadow-sm",BOX_BORDER,$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$1q=from_html("<div></div>");function Skeleton($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var div=root$1q();attribute_effect(div, +$0=>({"data-slot":"skeleton",class:$0,...restProps}),[()=>cn$1("animate-pulse rounded-md bg-accent",$$props.class)]),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root_4$w=from_html('<p class="text-xs text-destructive"> </p>'),root_5$x=from_html('<p class="line-clamp-2 text-xs text-muted-foreground"> </p>'),root_6$u=from_html('<div class="space-y-2"><div class="flex items-center gap-2"><!> <!></div> <div class="flex flex-wrap gap-1.5"><!> <!> <!></div></div> <di\ +v class="space-y-1.5"><div class="flex items-center gap-2"><!> <!></div></div>',1),root_7$p=from_html("<!> <!> <!>",1),root_12$b=from_html('<div class="flex flex-wrap items-center gap-1"><span class="text-[10px] text-muted-foreground"> </span></div>'),root_3$N=from_html('<!> <!> <!> <div class="grid gap-3"><!></div> <div class="flex justify-between gap-4"><!> <!></div>',1),root$1p=from_html("<!> <!>",1);function McpServerCard($$anchor,$$props){push$1($$props,!0);let healthState=user_derived(()=>mcpStore. +getHealthCheckState($$props.server.id)),displayName=user_derived(()=>mcpStore.getServerLabel($$props.server)),isIdle=user_derived(()=>get$3(healthState).status===HealthCheckStatus.IDLE),isHealthChecking=user_derived(()=>get$3(healthState).status===HealthCheckStatus.CONNECTING),isConnected=user_derived(()=>get$3(healthState).status===HealthCheckStatus.SUCCESS),isError=user_derived(()=>get$3(healthState).status===HealthCheckStatus.ERROR),showSkeleton=user_derived(()=>get$3(isIdle)||get$3(isHealthChecking)), +errorMessage=user_derived(()=>get$3(healthState).status===HealthCheckStatus.ERROR?get$3(healthState).message:void 0),tools=user_derived(()=>get$3(healthState).status===HealthCheckStatus.SUCCESS?get$3(healthState).tools:[]),connectionLogs=user_derived(()=>get$3(healthState).status===HealthCheckStatus.CONNECTING||get$3(healthState).status===HealthCheckStatus.SUCCESS||get$3(healthState).status===HealthCheckStatus.ERROR?get$3(healthState).logs:[]),successState=user_derived(()=>get$3(healthState).status=== +HealthCheckStatus.SUCCESS?get$3(healthState):null),serverInfo=user_derived(()=>get$3(successState)?.serverInfo),capabilities=user_derived(()=>get$3(successState)?.capabilities),transportType=user_derived(()=>get$3(successState)?.transportType),protocolVersion=user_derived(()=>get$3(successState)?.protocolVersion),connectionTimeMs=user_derived(()=>get$3(successState)?.connectionTimeMs),instructions=user_derived(()=>get$3(successState)?.instructions),isEditing2=user_derived(()=>!$$props.server.url. +trim()),showDeleteDialog=state$1(!1),editFormRef=state$1(null);function handleHealthCheck(){mcpStore.runHealthCheck($$props.server)}async function startEditing(){set$1(isEditing2,!0),await tick(),get$3(editFormRef)?.setInitialValues($$props.server.url,$$props.server.headers||"",$$props.server.useProxy||!1)}function cancelEditing(){$$props.server.url.trim()?set$1(isEditing2,!1):$$props.onDelete()}function saveEditing(url2,headers,useProxy){$$props.onUpdate({url:url2,headers:headers||void 0,useProxy}), +set$1(isEditing2,!1),$$props.server.enabled&&url2&&setTimeout(()=>mcpStore.runHealthCheck({...$$props.server,url:url2,useProxy}),100)}function handleDeleteClick(){set$1(showDeleteDialog,!0)}var fragment=root$1p(),node2=first_child(fragment);component(node2,()=>Card,($$anchor2,Card_Root)=>{Card_Root($$anchor2,{class:"!gap-3 bg-muted/30 p-4",children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{var consequent=$$anchor4=>{bind_this(McpServerCardEditForm($$anchor4, +{get serverId(){return $$props.server.id},get serverUrl(){return $$props.server.url},get serverUseProxy(){return $$props.server.useProxy},onSave:saveEditing,onCancel:cancelEditing}),$$value=>set$1(editFormRef,$$value,!0),()=>get$3(editFormRef))},alternate_1=$$anchor4=>{var fragment_3=root_3$N(),node_2=first_child(fragment_3);{let $0=user_derived(()=>$$props.enabled??$$props.server.enabled);McpServerCardHeader(node_2,{get displayName(){return get$3(displayName)},get faviconUrl(){return $$props.faviconUrl}, +get enabled(){return get$3($0)},get disabled(){return get$3(isError)},get onToggle(){return $$props.onToggle},get serverInfo(){return get$3(serverInfo)},get capabilities(){return get$3(capabilities)},get transportType(){return get$3(transportType)}})}var node_3=sibling(node_2,2);{var consequent_1=$$anchor5=>{var p2=root_4$w(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,get$3(errorMessage))),append($$anchor5,p2)};if_block(node_3,$$render=>{get$3(isError)&&get$3(errorMessage)&& +$$render(consequent_1)})}var node_4=sibling(node_3,2);{var consequent_2=$$anchor5=>{var p_1=root_5$x(),text_1=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text_1,get$3(serverInfo).description)),append($$anchor5,p_1)};if_block(node_4,$$render=>{get$3(isConnected)&&get$3(serverInfo)?.description&&$$render(consequent_2)})}var div=sibling(node_4,2),node_5=child(div);{var consequent_3=$$anchor5=>{var fragment_4=root_6$u(),div_1=first_child(fragment_4),div_2=child(div_1),node_6=child(div_2);Skeleton( +node_6,{class:"h-4 w-4 rounded"});var node_7=sibling(node_6,2);Skeleton(node_7,{class:"h-3 w-24"}),reset(div_2);var div_3=sibling(div_2,2),node_8=child(div_3);Skeleton(node_8,{class:"h-5 w-16 rounded-full"});var node_9=sibling(node_8,2);Skeleton(node_9,{class:"h-5 w-20 rounded-full"});var node_10=sibling(node_9,2);Skeleton(node_10,{class:"h-5 w-14 rounded-full"}),reset(div_3),reset(div_1);var div_4=sibling(div_1,2),div_5=child(div_4),node_11=child(div_5);Skeleton(node_11,{class:"h-4 w-4 rounded"}); +var node_12=sibling(node_11,2);Skeleton(node_12,{class:"h-3 w-32"}),reset(div_5),reset(div_4),append($$anchor5,fragment_4)},alternate=$$anchor5=>{var fragment_5=root_7$p(),node_13=first_child(fragment_5);{var consequent_4=$$anchor6=>{McpServerInfo($$anchor6,{get instructions(){return get$3(instructions)}})};if_block(node_13,$$render=>{get$3(isConnected)&&get$3(instructions)&&$$render(consequent_4)})}var node_14=sibling(node_13,2);{var consequent_5=$$anchor6=>{McpServerCardToolsList($$anchor6,{get tools(){ +return get$3(tools)}})};if_block(node_14,$$render=>{get$3(tools).length>0&&$$render(consequent_5)})}var node_15=sibling(node_14,2);{var consequent_6=$$anchor6=>{McpConnectionLogs($$anchor6,{get logs(){return get$3(connectionLogs)},get connectionTimeMs(){return get$3(connectionTimeMs)}})};if_block(node_15,$$render=>{get$3(connectionLogs).length>0&&$$render(consequent_6)})}append($$anchor5,fragment_5)};if_block(node_5,$$render=>{get$3(showSkeleton)?$$render(consequent_3):$$render(alternate,-1)})}reset( +div);var div_6=sibling(div,2),node_16=child(div_6);{var consequent_7=$$anchor5=>{Skeleton($$anchor5,{class:"h-3 w-28"})},consequent_8=$$anchor5=>{var div_7=root_12$b(),span=child(div_7),text_2=child(span);reset(span),reset(div_7),template_effect(()=>set_text(text_2,`Protocol version: ${get$3(protocolVersion)??""}`)),append($$anchor5,div_7)};if_block(node_16,$$render=>{get$3(showSkeleton)?$$render(consequent_7):get$3(protocolVersion)&&$$render(consequent_8,1)})}var node_17=sibling(node_16,2);McpServerCardActions( +node_17,{get isHealthChecking(){return get$3(isHealthChecking)},onEdit:startEditing,onRefresh:handleHealthCheck,onDelete:handleDeleteClick}),reset(div_6),append($$anchor4,fragment_3)};if_block(node_1,$$render=>{get$3(isEditing2)?$$render(consequent):$$render(alternate_1,-1)})}append($$anchor3,fragment_1)},$$slots:{default:!0}})});var node_18=sibling(node2,2);McpServerCardDeleteDialog(node_18,{get displayName(){return get$3(displayName)},onOpenChange:open2=>set$1(showDeleteDialog,open2,!0),get onConfirm(){ +return $$props.onDelete},get open(){return get$3(showDeleteDialog)},set open($$value){set$1(showDeleteDialog,$$value,!0)}}),append($$anchor,fragment),pop()}var root_1$M=from_html('<img alt="" class="h-5 w-5 shrink-0 rounded"/>'),root_2$12=from_html('<div class="flex h-5 w-5 shrink-0 items-center justify-center rounded bg-muted"><!></div>'),root_5$w=from_html('<a target="_blank" rel="noopener noreferrer" class="shrink-0 text-muted-foreground hover:text-foreground" aria-label="Open website"><!></a\ +>'),root_8$o=from_html("<!> ",1),root_6$t=from_html('<div class="flex flex-wrap items-center gap-1.5"><!> <!></div>'),root$1o=from_html('<div class="space-y-3"><div class="flex items-start justify-between gap-3"><div class="grid min-w-0 gap-3"><div class="flex items-center gap-2 overflow-hidden"><!> <p class="min-w-0 shrink-0 truncate leading-none font-medium"> </p> <!> <!></div> <!></div> <div class="flex shrink-0 items-center pl-2"><!></div></div></div>');function McpServerCardHeader($$anchor,$$props){ +push$1($$props,!0);let disabled=prop($$props,"disabled",3,!1);var div=root$1o(),div_1=child(div),div_2=child(div_1),div_3=child(div_2),node2=child(div_3);{var consequent=$$anchor2=>{var img=root_1$M();template_effect(()=>set_attribute(img,"src",$$props.faviconUrl)),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor2,img)},alternate=$$anchor2=>{var div_4=root_2$12(),node_1=child(div_4);Cable(node_1,{class:"h-3 w-3 text-muted-foreground"}),reset(div_4), +append($$anchor2,div_4)};if_block(node2,$$render=>{$$props.faviconUrl?$$render(consequent):$$render(alternate,-1)})}var p2=sibling(node2,2),text2=child(p2,!0);reset(p2);var node_2=sibling(p2,2);{var consequent_1=$$anchor2=>{Badge($$anchor2,{variant:"secondary",class:"h-4 min-w-0 truncate px-1 text-[10px]",children:($$anchor3,$$slotProps)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,`v${$$props.serverInfo.version??""}`)),append($$anchor3,text_1)},$$slots:{default:!0}})};if_block( +node_2,$$render=>{$$props.serverInfo?.version&&$$render(consequent_1)})}var node_3=sibling(node_2,2);{var consequent_2=$$anchor2=>{var a=root_5$w(),node_4=child(a);External_link(node_4,{class:"h-3 w-3"}),reset(a),template_effect(()=>set_attribute(a,"href",$$props.serverInfo.websiteUrl)),append($$anchor2,a)};if_block(node_3,$$render=>{$$props.serverInfo?.websiteUrl&&$$render(consequent_2)})}reset(div_3);var node_5=sibling(div_3,2);{var consequent_6=$$anchor2=>{var div_5=root_6$t(),node_6=child(div_5); +{var consequent_4=$$anchor3=>{const TransportIcon=user_derived(()=>MCP_TRANSPORT_ICONS[$$props.transportType]);Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 px-1.5 text-[10px]",children:($$anchor4,$$slotProps)=>{var fragment_3=root_8$o(),node_7=first_child(fragment_3);{var consequent_3=$$anchor5=>{var fragment_4=comment$2(),node_8=first_child(fragment_4);component(node_8,()=>get$3(TransportIcon),($$anchor6,TransportIcon_1)=>{TransportIcon_1($$anchor6,{class:"h-3 w-3"})}),append($$anchor5,fragment_4)}; +if_block(node_7,$$render=>{get$3(TransportIcon)&&$$render(consequent_3)})}var text_2=sibling(node_7);template_effect(()=>set_text(text_2,` ${(MCP_TRANSPORT_LABELS[$$props.transportType]||$$props.transportType)??""}`)),append($$anchor4,fragment_3)},$$slots:{default:!0}})};if_block(node_6,$$render=>{$$props.transportType&&$$render(consequent_4)})}var node_9=sibling(node_6,2);{var consequent_5=$$anchor3=>{McpCapabilitiesBadges($$anchor3,{get capabilities(){return $$props.capabilities}})};if_block(node_9, +$$render=>{$$props.capabilities&&$$render(consequent_5)})}reset(div_5),append($$anchor2,div_5)};if_block(node_5,$$render=>{($$props.capabilities||$$props.transportType)&&$$render(consequent_6)})}reset(div_2);var div_6=sibling(div_2,2),node_10=child(div_6);Switch(node_10,{get checked(){return $$props.enabled},get disabled(){return disabled()},get onCheckedChange(){return $$props.onToggle}}),reset(div_6),reset(div_1),reset(div),template_effect(()=>set_text(text2,$$props.displayName)),append($$anchor, +div),pop()}var root$1n=from_html('<div class="flex shrink-0 items-center gap-1"><!> <!> <!></div>');function McpServerCardActions($$anchor,$$props){var div=root$1n(),node2=child(div);Button(node2,{variant:"ghost",size:"icon",class:"h-7 w-7",get onclick(){return $$props.onEdit},"aria-label":"Edit",children:($$anchor2,$$slotProps)=>{Pencil($$anchor2,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}});var node_1=sibling(node2,2);Button(node_1,{variant:"ghost",size:"icon",class:"h-7 w-7",get onclick(){return $$props. +onRefresh},get disabled(){return $$props.isHealthChecking},"aria-label":"Refresh",children:($$anchor2,$$slotProps)=>{Refresh_cw($$anchor2,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}});var node_2=sibling(node_1,2);Button(node_2,{variant:"ghost",size:"icon",class:"hover:text-destructive-foreground h-7 w-7 text-destructive hover:bg-destructive/10",get onclick(){return $$props.onDelete},"aria-label":"Delete",children:($$anchor2,$$slotProps)=>{Trash_2($$anchor2,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}}), +reset(div),append($$anchor,div)}var root_2$11=from_html("<!> <span> </span>",1),root_8$n=from_html('<p class="mt-1 text-xs text-muted-foreground"> </p>'),root_6$s=from_html("<div><!> <!></div>"),root_5$v=from_html('<div class="max-h-64 space-y-3 overflow-y-auto"></div>'),root_1$L=from_html("<!> <!>",1);function McpServerCardToolsList($$anchor,$$props){push$1($$props,!0);let isExpanded=state$1(!1),toolsCount=user_derived(()=>$$props.tools.length);var fragment=comment$2(),node2=first_child(fragment); +component(node2,()=>Collapsible,($$anchor2,Collapsible_Root)=>{Collapsible_Root($$anchor2,{get open(){return get$3(isExpanded)},set open($$value){set$1(isExpanded,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$L(),node_1=first_child(fragment_1);component(node_1,()=>Collapsible_trigger,($$anchor4,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor4,{class:"flex w-full items-center gap-1 text-xs text-muted-foreground hover:text-foreground",children:($$anchor5,$$slotProps2)=>{ +var fragment_2=root_2$11(),node_2=first_child(fragment_2);{var consequent=$$anchor6=>{Chevron_down($$anchor6,{class:"h-3.5 w-3.5"})},alternate=$$anchor6=>{Chevron_right($$anchor6,{class:"h-3.5 w-3.5"})};if_block(node_2,$$render=>{get$3(isExpanded)?$$render(consequent):$$render(alternate,-1)})}var span=sibling(node_2,2),text2=child(span);reset(span),template_effect(()=>set_text(text2,`${get$3(toolsCount)??""} tools available · Show details`)),append($$anchor5,fragment_2)},$$slots:{default:!0}})}); +var node_3=sibling(node_1,2);component(node_3,()=>Collapsible_content,($$anchor4,Collapsible_Content)=>{Collapsible_Content($$anchor4,{class:"mt-2",children:($$anchor5,$$slotProps2)=>{var div=root_5$v();each(div,21,()=>$$props.tools,tool=>tool.name,($$anchor6,tool)=>{var div_1=root_6$s(),node_4=child(div_1);Badge(node_4,{variant:"secondary",children:($$anchor7,$$slotProps3)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,get$3(tool).name)),append($$anchor7,text_1)},$$slots:{default:!0}}); +var node_5=sibling(node_4,2);{var consequent_1=$$anchor7=>{var p2=root_8$n(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,get$3(tool).description)),append($$anchor7,p2)};if_block(node_5,$$render=>{get$3(tool).description&&$$render(consequent_1)})}reset(div_1),append($$anchor6,div_1)}),reset(div),append($$anchor5,div)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root$1m=from_html('<div class="space-y-4"><\ +p class="font-medium">Configure Server</p> <!> <div class="flex items-center justify-end gap-2"><!> <!></div></div>');function McpServerCardEditForm($$anchor,$$props){push$1($$props,!0);let serverUseProxy=prop($$props,"serverUseProxy",3,!1),editUrl=user_derived(()=>$$props.serverUrl),editHeaders=state$1(""),editUseProxy=user_derived(serverUseProxy),urlError=user_derived(()=>{if(!get$3(editUrl).trim())return"URL is required";try{return new URL(get$3(editUrl)),null}catch{return"Invalid URL format"}}), +canSave=user_derived(()=>!get$3(urlError));function handleSave(){get$3(canSave)&&$$props.onSave(get$3(editUrl).trim(),get$3(editHeaders).trim(),get$3(editUseProxy))}function setInitialValues(url2,headers,useProxy){set$1(editUrl,url2),set$1(editHeaders,headers,!0),set$1(editUseProxy,useProxy)}var $$exports={setInitialValues},div=root$1m(),node2=sibling(child(div),2);{let $0=user_derived(()=>get$3(editUrl)?get$3(urlError):null);McpServerForm(node2,{get url(){return get$3(editUrl)},get headers(){return get$3( +editHeaders)},get useProxy(){return get$3(editUseProxy)},onUrlChange:v=>set$1(editUrl,v),onHeadersChange:v=>set$1(editHeaders,v,!0),onUseProxyChange:v=>set$1(editUseProxy,v),get urlError(){return get$3($0)},get id(){return $$props.serverId}})}var div_1=sibling(node2,2),node_1=child(div_1);Button(node_1,{variant:"secondary",size:"sm",get onclick(){return $$props.onCancel},children:($$anchor2,$$slotProps)=>{next$1();var text2=text$8("Cancel");append($$anchor2,text2)},$$slots:{default:!0}});var node_2=sibling( +node_1,2);{let $0=user_derived(()=>!get$3(canSave));Button(node_2,{size:"sm",onclick:handleSave,get disabled(){return get$3($0)},children:($$anchor2,$$slotProps)=>{next$1();var text_1=text$8();template_effect($02=>set_text(text_1,$02),[()=>$$props.serverUrl.trim()?"Update":"Add"]),append($$anchor2,text_1)},$$slots:{default:!0}})}return reset(div_1),reset(div),append($$anchor,div),pop($$exports)}function Alert_dialog_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null), +restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-lg font-semibold",$$props.class));component(node2,()=>Dialog_title$1,($$anchor2,AlertDialogPrimitive_Title)=>{AlertDialogPrimitive_Title($$anchor2,spread_props({"data-slot":"alert-dialog-title",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()} +function Alert_dialog_action($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1(buttonVariants(),$$props.class));component(node2,()=>Alert_dialog_action$1,($$anchor2,AlertDialogPrimitive_Action)=>{AlertDialogPrimitive_Action($$anchor2,spread_props({"data-slot":"alert-dialog-action",get class(){return get$3($0)}},()=>restProps, +{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Alert_dialog_cancel($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1(buttonVariants({variant:"outline"}),$$props.class));component(node2,()=>Alert_dialog_cancel$1,($$anchor2,AlertDialogPrimitive_Cancel)=>{AlertDialogPrimitive_Cancel( +$$anchor2,spread_props({"data-slot":"alert-dialog-cancel",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root$1l=from_html("<div><!></div>");function Alert_dialog_footer($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1l();attribute_effect(div,$0=>({"data-slot":"alert-dialog\ +-footer",class:$0,...restProps}),[()=>cn$1("mt-6 flex flex-row gap-2 sm:mt-0 sm:justify-end [&>*]:flex-1 sm:[&>*]:flex-none",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$1k=from_html("<div><!></div>");function Alert_dialog_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","\ +ref","class","children"]);var div=root$1k();attribute_effect(div,$0=>({"data-slot":"alert-dialog-header",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-2 text-center sm:text-left",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}function Alert_dialog_overlay($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","\ +$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",$$props.class));component(node2,()=>Dialog_overlay$1,($$anchor2,AlertDialogPrimitive_Overlay)=>{AlertDialogPrimitive_Overlay($$anchor2,spread_props({"data-slot":"alert-dialog-overlay",get class(){return get$3($0)}},()=>restProps, +{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_1$K=from_html("<!> <!>",1);function Alert_dialog_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","portalProps"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,AlertDialogPrimitive_Portal)=>{AlertDialogPrimitive_Portal($$anchor2,spread_props( +()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$K(),node_1=first_child(fragment_1);Alert_dialog_overlay(node_1,{});var node_2=sibling(node_1,2);{let $0=user_derived(()=>cn$1("fixed z-[999999] grid w-full gap-4 border bg-background p-6 shadow-lg duration-200","right-0 bottom-0 left-0 max-h-[100dvh] translate-x-0 translate-y-0 overflow-y-auto rounded-t-lg","data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-bottom-full", +"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-bottom-full","sm:top-[50%] sm:right-auto sm:bottom-auto sm:left-[50%] sm:max-h-[100vh] sm:max-w-lg sm:translate-x-[-50%] sm:translate-y-[-50%] sm:rounded-lg","sm:data-[state=closed]:slide-out-to-bottom-0 sm:data-[state=closed]:zoom-out-95","sm:data-[state=open]:slide-in-from-bottom-0 sm:data-[state=open]:zoom-in-95",$$props.class));component(node_2,()=>Alert_dialog_content$1,($$anchor4,AlertDialogPrimitive_Content)=>{ +AlertDialogPrimitive_Content($$anchor4,spread_props({"data-slot":"alert-dialog-content",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}function Alert_dialog_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child( +fragment);{let $0=user_derived(()=>cn$1("text-sm text-muted-foreground",$$props.class));component(node2,()=>Dialog_description$1,($$anchor2,AlertDialogPrimitive_Description)=>{AlertDialogPrimitive_Description($$anchor2,spread_props({"data-slot":"alert-dialog-description",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const Root$3=Alert_dialog,Portal=Portal$2;var root_5$u=from_html(`Are you sure you want \ +to delete <strong> </strong>? This action cannot be + undone.`,1),root_3$M=from_html("<!> <!>",1),root_6$r=from_html("<!> <!>",1),root_2$10=from_html("<!> <!>",1);function McpServerCardDeleteDialog($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get onOpenChange(){return $$props.onOpenChange},get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{ +var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$10(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$M(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{ +AlertDialog_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("Delete Server");append($$anchor9,text2)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var fragment_4=root_5$u(),strong2=sibling(first_child(fragment_4)),text_1=child(strong2,!0);reset(strong2),next$1(),template_effect(()=>set_text(text_1, +$$props.displayName)),append($$anchor9,fragment_4)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_5=sibling(node_2,2);component(node_5,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_5=root_6$r(),node_6=first_child(fragment_5);component(node_6,()=>Alert_dialog_cancel,($$anchor8,AlertDialog_Cancel)=>{AlertDialog_Cancel($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1(); +var text_2=text$8("Cancel");append($$anchor9,text_2)},$$slots:{default:!0}})});var node_7=sibling(node_6,2);component(node_7,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{AlertDialog_Action($$anchor8,{class:"text-destructive-foreground bg-destructive hover:bg-destructive/90",get onclick(){return $$props.onConfirm},children:($$anchor9,$$slotProps4)=>{next$1();var text_3=text$8("Delete");append($$anchor9,text_3)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)},$$slots:{default:!0}})}), +append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_1$J=from_html('<div class="flex items-center justify-between gap-4"><div class="flex items-center gap-2"><!> <!> <!></div> <!></div> <div class="flex flex-wrap gap-1.5"><!> <!> <!></div> <div class="space-y-1.5"><!> <!></div> <!> <div class="flex justify-end gap-2"><!> <!> <!></div>',1);function McpServerCardSkeleton($$anchor){Card($$anchor,{class:"\ +grid gap-3 p-4",children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$J(),div=first_child(fragment_1),div_1=child(div),node2=child(div_1);Skeleton(node2,{class:"h-5 w-5 rounded"});var node_1=sibling(node2,2);Skeleton(node_1,{class:"h-5 w-28"});var node_2=sibling(node_1,2);Skeleton(node_2,{class:"h-5 w-12 rounded-full"}),reset(div_1);var node_3=sibling(div_1,2);Skeleton(node_3,{class:"h-6 w-11 rounded-full"}),reset(div);var div_2=sibling(div,2),node_4=child(div_2);Skeleton(node_4,{class:"h-5 w\ +-14 rounded-full"});var node_5=sibling(node_4,2);Skeleton(node_5,{class:"h-5 w-12 rounded-full"});var node_6=sibling(node_5,2);Skeleton(node_6,{class:"h-5 w-16 rounded-full"}),reset(div_2);var div_3=sibling(div_2,2),node_7=child(div_3);Skeleton(node_7,{class:"h-4 w-40"});var node_8=sibling(node_7,2);Skeleton(node_8,{class:"h-4 w-52"}),reset(div_3);var node_9=sibling(div_3,2);Skeleton(node_9,{class:"h-3.5 w-36"});var div_4=sibling(node_9,2),node_10=child(div_4);Skeleton(node_10,{class:"h-8 w-8 ro\ +unded"});var node_11=sibling(node_10,2);Skeleton(node_11,{class:"h-8 w-8 rounded"});var node_12=sibling(node_11,2);Skeleton(node_12,{class:"h-8 w-8 rounded"}),reset(div_4),append($$anchor2,fragment_1)},$$slots:{default:!0}})}var root_3$L=from_html("<!> <span>Server instructions</span>",1),root_6$q=from_html('<p class="rounded bg-muted/50 p-2 text-xs text-muted-foreground"> </p>'),root_2$$=from_html("<!> <!>",1);function McpServerInfo($$anchor,$$props){let isExpanded=state$1(!1);var fragment=comment$2(), +node2=first_child(fragment);{var consequent_1=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Collapsible,($$anchor3,Collapsible_Root)=>{Collapsible_Root($$anchor3,{get class(){return $$props.class},get open(){return get$3(isExpanded)},set open($$value){set$1(isExpanded,$$value,!0)},children:($$anchor4,$$slotProps)=>{var fragment_2=root_2$$(),node_2=first_child(fragment_2);component(node_2,()=>Collapsible_trigger,($$anchor5,Collapsible_Trigger)=>{Collapsible_Trigger( +$$anchor5,{class:"flex w-full items-center gap-1 text-xs text-muted-foreground hover:text-foreground",children:($$anchor6,$$slotProps2)=>{var fragment_3=root_3$L(),node_3=first_child(fragment_3);{var consequent=$$anchor7=>{Chevron_down($$anchor7,{class:"h-3.5 w-3.5"})},alternate=$$anchor7=>{Chevron_right($$anchor7,{class:"h-3.5 w-3.5"})};if_block(node_3,$$render=>{get$3(isExpanded)?$$render(consequent):$$render(alternate,-1)})}next$1(2),append($$anchor6,fragment_3)},$$slots:{default:!0}})});var node_4=sibling( +node_2,2);component(node_4,()=>Collapsible_content,($$anchor5,Collapsible_Content)=>{Collapsible_Content($$anchor5,{class:"mt-2",children:($$anchor6,$$slotProps2)=>{var p2=root_6$q(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,$$props.instructions)),append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)};if_block(node2,$$render=>{$$props.instructions&&$$render(consequent_1)})}append($$anchor,fragment)} +function Label($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",$$props.class));component(node2,()=>Label$1, +($$anchor2,LabelPrimitive_Root)=>{LabelPrimitive_Root($$anchor2,spread_props({"data-slot":"label",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_2$_=from_html('<span class="text-xs text-muted-foreground/50">...</span>'),root_1$I=from_html('<span> <span class="text-destructive">*</span></span> <!>',1),root_4$v=from_html('<button type="button"> </button>'),root_3$K=from_html('<div class="absolute \ +top-full right-0 left-0 z-10 mt-1 max-h-32 overflow-y-auto rounded-lg border border-border/50 bg-background shadow-lg"></div>'),root$1j=from_html('<div class="relative grid gap-1"><!> <!> <!></div>');function InputWithSuggestions($$anchor,$$props){push$1($$props,!0);let value=prop($$props,"value",3,""),suggestions=prop($$props,"suggestions",19,()=>[]),isLoadingSuggestions=prop($$props,"isLoadingSuggestions",3,!1),isAutocompleteActive=prop($$props,"isAutocompleteActive",3,!1),autocompleteIndex=prop( +$$props,"autocompleteIndex",3,0);var div=root$1j(),node2=child(div);Label(node2,{get for(){return`tpl-arg-${$$props.name??""}`},class:"mb-1 text-muted-foreground",children:($$anchor2,$$slotProps)=>{var fragment=root_1$I(),span=first_child(fragment),text2=child(span);next$1(),reset(span);var node_1=sibling(span,2);{var consequent=$$anchor3=>{var span_1=root_2$_();append($$anchor3,span_1)};if_block(node_1,$$render=>{isLoadingSuggestions()&&$$render(consequent)})}template_effect(()=>set_text(text2, +`${$$props.name??""} `)),append($$anchor2,fragment)},$$slots:{default:!0}});var node_2=sibling(node2,2);Input(node_2,{get id(){return`tpl-arg-${$$props.name??""}`},type:"text",get value(){return value()},oninput:e=>$$props.onInput(e.currentTarget.value),get onkeydown(){return $$props.onKeydown},get onblur(){return $$props.onBlur},get onfocus(){return $$props.onFocus},get placeholder(){return`Enter ${$$props.name??""}`},autocomplete:"off"});var node_3=sibling(node_2,2);{var consequent_1=$$anchor2=>{ +var div_1=root_3$K();each(div_1,22,suggestions,suggestion=>suggestion,($$anchor3,suggestion,i)=>{var button=root_4$v(),text_1=child(button,!0);reset(button),template_effect(()=>{set_class(button,1,`w-full px-3 py-1.5 text-left text-sm hover:bg-accent ${get$3(i)===autocompleteIndex()?"bg-accent":""}`),set_text(text_1,suggestion)}),delegated("mousedown",button,()=>$$props.onSelectSuggestion(suggestion)),append($$anchor3,button)}),reset(div_1),transition(3,div_1,()=>fly,()=>({y:-5,duration:100})),append( +$$anchor2,div_1)};if_block(node_3,$$render=>{isAutocompleteActive()&&suggestions().length>0&&$$render(consequent_1)})}reset(div),append($$anchor,div),pop()}delegate(["mousedown"]);var root_2$Z=from_html('<span class="text-muted-foreground">(optional)</span>'),root_1$H=from_html('<span class="text-xs font-medium"> <!></span>'),root_4$u=from_html('<div class="flex items-start gap-2"><!> <textarea class="flex-1 resize-none rounded-md border border-input bg-transparent px-3 py-2 text-sm leading-5 pl\ +aceholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-none" rows="1"></textarea> <button type="button" class="mt-1.5 shrink-0 cursor-pointer rounded-md p-1 text-muted-foreground hover:bg-destructive/10 hover:text-destructive" aria-label="Remove item"><!></button></div>'),root_3$J=from_html('<div class="space-y-3"></div>'),root_5$t=from_html('<p class="text-xs text-muted-foreground"> </p>'),root$1i=from_html('<div><div class="mb-2 flex items-center jus\ +tify-between"><!> <button type="button" class="inline-flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground"><!> </button></div> <!></div>');function KeyValuePairs($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),keyPlaceholder=prop($$props,"keyPlaceholder",3,"Key"),valuePlaceholder=prop($$props,"valuePlaceholder",3,"Value"),addButtonLabel=prop($$props,"addButtonLabel",3,"Add"),emptyMessage=prop( +$$props,"emptyMessage",3,"No items configured."),sectionLabelOptional=prop($$props,"sectionLabelOptional",3,!0);function addPair(){$$props.onPairsChange([...$$props.pairs,{key:"",value:""}])}function removePair(index2){$$props.onPairsChange($$props.pairs.filter((_,i)=>i!==index2))}function updatePairKey(index2,rawKey){const key2=sanitizeKeyValuePairKey(rawKey),newPairs=[...$$props.pairs];newPairs[index2]={...newPairs[index2],key:key2},$$props.onPairsChange(newPairs)}function trimPairKey(index2,key2){ +const trimmed=key2.trim();if(trimmed===key2)return;const newPairs=[...$$props.pairs];newPairs[index2]={...newPairs[index2],key:trimmed},$$props.onPairsChange(newPairs)}function updatePairValue(index2,rawValue){const value=sanitizeKeyValuePairValue(rawValue),newPairs=[...$$props.pairs];newPairs[index2]={...newPairs[index2],value},$$props.onPairsChange(newPairs)}function trimPairValue(index2,value){const trimmed=value.trim();if(trimmed===value)return;const newPairs=[...$$props.pairs];newPairs[index2]= +{...newPairs[index2],value:trimmed},$$props.onPairsChange(newPairs)}var div=root$1i(),div_1=child(div),node2=child(div_1);{var consequent_1=$$anchor2=>{var span=root_1$H(),text2=child(span),node_1=sibling(text2);{var consequent=$$anchor3=>{var span_1=root_2$Z();append($$anchor3,span_1)};if_block(node_1,$$render=>{sectionLabelOptional()&&$$render(consequent)})}reset(span),template_effect(()=>set_text(text2,`${$$props.sectionLabel??""} `)),append($$anchor2,span)};if_block(node2,$$render=>{$$props. +sectionLabel&&$$render(consequent_1)})}var button=sibling(node2,2),node_2=child(button);Plus(node_2,{class:"h-3 w-3"});var text_1=sibling(node_2);reset(button),reset(div_1);var node_3=sibling(div_1,2);{var consequent_2=$$anchor2=>{var div_2=root_3$J();each(div_2,21,()=>$$props.pairs,index$2,($$anchor3,pair,index2)=>{var div_3=root_4$u(),node_4=child(div_3);Input(node_4,{type:"text",get placeholder(){return keyPlaceholder()},get value(){return get$3(pair).key},get maxlength(){return KEY_VALUE_PAIR_KEY_MAX_LENGTH}, +oninput:e=>updatePairKey(index2,e.currentTarget.value),onblur:e=>trimPairKey(index2,e.currentTarget.value),class:"flex-1"});var textarea=sibling(node_4,2);remove_textarea_child(textarea),action(textarea,$$node=>autoResizeTextarea?.($$node));var button_1=sibling(textarea,2),node_5=child(button_1);Trash_2(node_5,{class:"h-3.5 w-3.5"}),reset(button_1),reset(div_3),template_effect(()=>{set_attribute(textarea,"placeholder",valuePlaceholder()),set_value(textarea,get$3(pair).value),set_attribute(textarea, +"maxlength",KEY_VALUE_PAIR_VALUE_MAX_LENGTH)}),delegated("input",textarea,e=>{updatePairValue(index2,e.currentTarget.value),autoResizeTextarea(e.currentTarget)}),event("blur",textarea,e=>trimPairValue(index2,e.currentTarget.value)),delegated("click",button_1,()=>removePair(index2)),append($$anchor3,div_3)}),reset(div_2),append($$anchor2,div_2)},alternate=$$anchor2=>{var p2=root_5$t(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,emptyMessage())),append($$anchor2,p2)};if_block( +node_3,$$render=>{$$props.pairs.length>0?$$render(consequent_2):$$render(alternate,-1)})}reset(div),template_effect(()=>{set_class(div,1,clsx(className())),set_text(text_1,` ${addButtonLabel()??""}`)}),delegated("click",button,addPair),append($$anchor,div),pop()}delegate(["click","input"]);var root_1$G=from_html('<button type="button" class="absolute top-1/2 right-3 -translate-y-1/2 transform cursor-pointer text-muted-foreground transition-colors hover:text-foreground"><!></button>'),root$1h=from_html( +"<div><!> <!> <!></div>");function SearchInput($$anchor,$$props){push$1($$props,!0);let value=prop($$props,"value",15,""),placeholder=prop($$props,"placeholder",3,"Search..."),ref2=prop($$props,"ref",15,null),isCancelAlwaysVisible=prop($$props,"isCancelAlwaysVisible",3,!1),showClearButton=user_derived(()=>isCancelAlwaysVisible()||!!value()||!!$$props.onClose);function handleInput(event2){const target2=event2.target;value(target2.value),$$props.onInput?.(target2.value)}function handleClear(){value()? +(value(""),$$props.onInput?.(""),ref2()?.focus()):$$props.onClose?.()}var div=root$1h(),node2=child(div);Search(node2,{class:"absolute top-1/2 left-3 z-10 h-4 w-4 -translate-y-1/2 transform text-muted-foreground"});var node_1=sibling(node2,2);{let $0=user_derived(()=>get$3(showClearButton)?"pr-9":"");Input(node_1,{get id(){return $$props.id},get class(){return`pl-9 ${get$3($0)??""}`},oninput:handleInput,get onkeydown(){return $$props.onKeyDown},get placeholder(){return placeholder()},type:"searc\ +h",get value(){return value()},set value($$value){value($$value)},get ref(){return ref2()},set ref($$value){ref2($$value)}})}var node_2=sibling(node_1,2);{var consequent=$$anchor2=>{var button=root_1$G(),node_3=child(button);X(node_3,{class:"h-4 w-4"}),reset(button),template_effect(()=>set_attribute(button,"aria-label",value()?"Clear search":"Close")),delegated("click",button,handleClear),append($$anchor2,button)};if_block(node_2,$$render=>{get$3(showClearButton)&&$$render(consequent)})}reset(div), +template_effect(()=>set_class(div,1,`relative ${$$props.class??""}`)),append($$anchor,div),pop()}delegate(["click"]);var root$1g=from_html('<div class="flex flex-col gap-2"><div class="mb-2 flex items-center gap-4"><!> <!></div> <h3 class="text-sm font-medium">Available resources</h3></div>');function McpResourceBrowserHeader($$anchor,$$props){push$1($$props,!0);let searchQuery=prop($$props,"searchQuery",3,"");var div=root$1g(),div_1=child(div),node2=child(div_1);SearchInput(node2,{placeholder:"\ +Search resources...",get value(){return searchQuery()},onInput:value=>$$props.onSearch?.(value)});var node_1=sibling(node2,2);Button(node_1,{variant:"ghost",size:"sm",class:"h-8 w-8 p-0",get onclick(){return $$props.onRefresh},get disabled(){return $$props.isLoading},title:"Refresh resources",children:($$anchor2,$$slotProps)=>{var fragment=comment$2(),node_2=first_child(fragment);{var consequent=$$anchor3=>{Loader_circle($$anchor3,{class:"h-4 w-4 animate-spin"})},alternate=$$anchor3=>{Refresh_cw( +$$anchor3,{class:"h-4 w-4"})};if_block(node_2,$$render=>{$$props.isLoading?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment)},$$slots:{default:!0}}),reset(div_1),next$1(2),reset(div),append($$anchor,div),pop()}var root$1f=from_html('<div class="py-4 text-center text-sm text-muted-foreground"><!></div>');function McpResourceBrowserEmptyState($$anchor,$$props){var div=root$1f(),node2=child(div);{var consequent=$$anchor2=>{var text2=text$8("Loading resources...");append($$anchor2, +text2)},alternate=$$anchor2=>{var text_1=text$8("No resources available");append($$anchor2,text_1)};if_block(node2,$$render=>{$$props.isLoading?$$render(consequent):$$render(alternate,-1)})}reset(div),append($$anchor,div)}var root_1$F=from_html('<div data-slot="checkbox-indicator" class="text-current transition-none"><!></div>');function Checkbox($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),checked=prop($$props,"checked",15,!1),indeterminate=prop($$props,"indetermina\ +te",15,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","checked","indeterminate","class"]);var fragment=comment$2(),node2=first_child(fragment);{const children=($$anchor2,$$arg0)=>{let checked2=()=>$$arg0?.().checked,indeterminate2=()=>$$arg0?.().indeterminate;var div=root_1$F(),node_1=child(div);{var consequent=$$anchor3=>{Check($$anchor3,{class:"size-3.5"})},consequent_1=$$anchor3=>{Minus($$anchor3,{class:"size-3.5"})};if_block(node_1,$$render=>{checked2()?$$render(consequent): +indeterminate2()&&$$render(consequent_1,1)})}reset(div),append($$anchor2,div)};let $0=user_derived(()=>cn$1("peer flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary dat\ +a-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary",$$props.class));component(node2,()=>Checkbox$1,($$anchor2,CheckboxPrimitive_Root)=>{CheckboxPrimitive_Root($$anchor2,spread_props({"data-slot":"checkbox",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},get checked(){return checked()},set checked($$value){checked($$value)},get indeterminate(){return indeterminate()}, +set indeterminate($$value){indeterminate($$value)},children,$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}function resourceMatchesSearch(resource,query){return resource.title?.toLowerCase().includes(query)||resource.uri.toLowerCase().includes(query)}function buildResourceTree(resourceList,serverName,searchQuery){const root2={name:"root",children:new Map};if(!searchQuery||!searchQuery.trim()){for(const resource of resourceList){const pathParts=parseResourcePath(resource.uri);let current2=root2; +for(let i=0;i<pathParts.length-1;i++){const part=pathParts[i];current2.children.has(part)||current2.children.set(part,{name:part,children:new Map}),current2=current2.children.get(part)}const fileName=pathParts[pathParts.length-1]||resource.name;current2.children.set(resource.uri,{name:fileName,resource:{...resource,serverName},children:new Map})}return root2}const query=searchQuery.toLowerCase();for(const resource of resourceList){if(!resourceMatchesSearch(resource,query))continue;const pathParts=parseResourcePath( +resource.uri);let current2=root2;for(let i=0;i<pathParts.length-1;i++){const part=pathParts[i];current2.children.has(part)||current2.children.set(part,{name:part,children:new Map,isFiltered:!0}),current2=current2.children.get(part)}const fileName=pathParts[pathParts.length-1]||resource.name;current2.children.set(resource.uri,{name:fileName,resource:{...resource,serverName},children:new Map,isFiltered:!0})}function cleanupEmptyFolders(node2){if(node2.resource)return!0;const toDelete=[];for(const[ +name,child2]of node2.children.entries())cleanupEmptyFolders(child2)||toDelete.push(name);for(const name of toDelete)node2.children.delete(name);return node2.children.size>0}return cleanupEmptyFolders(root2),root2}function countTreeResources(node2){if(node2.resource)return 1;let count=0;for(const child2 of node2.children.values())count+=countTreeResources(child2);return count}function sortTreeChildren(children){return children.sort((a,b)=>{const aIsFolder=!a.resource&&a.children.size>0,bIsFolder=!b. +resource&&b.children.size>0;return aIsFolder&&!bIsFolder?-1:!aIsFolder&&bIsFolder?1:a.name.localeCompare(b.name)})}var root_4$t=from_html('<!> <!> <span class="font-medium"> </span> <span class="text-xs text-muted-foreground"> </span>',1),root_7$o=from_html('<div class="ml-4 flex flex-col gap-0.5 border-l border-border/50 pl-2"></div>'),root_3$I=from_html("<!> <!>",1),root_9$i=from_html('<div class="group flex w-full items-center gap-2"><!> <button><!> <span class="min-w-0 flex-1 truncate text-l\ +eft"> </span></button></div>'),root_15$b=from_html('<img alt="" class="h-4 w-4 shrink-0 rounded-sm"/>'),root_12$a=from_html('<!> <span class="inline-flex flex-col items-start text-left"><span class="inline-flex items-center justify-start gap-1.5 font-medium"><!> </span> <span class="text-xs text-muted-foreground"> <!>)</span></span> <!>',1),root_19$9=from_html('<div class="py-1 text-xs text-red-500"> </div>'),root_20$5=from_html('<div class="py-1 text-xs text-muted-foreground">No resources</div>'), +root_25$3=from_html('<div class="my-1 border-t border-border/30"></div>'),root_26$2=from_html('<button><!> <span class="min-w-0 flex-1 truncate text-left"> </span></button>'),root_24$2=from_html('<!> <div class="py-0.5 text-[11px] font-medium tracking-wide text-muted-foreground/70 uppercase">Templates</div> <!>',1),root_21$6=from_html("<!> <!>",1),root_18$6=from_html('<div class="ml-4 flex flex-col gap-0.5 border-l border-border/50 pl-2"><!></div>'),root_11$d=from_html("<!> <!>",1);function McpResourceBrowserServerItem($$anchor,$$props){ +push$1($$props,!0);const renderTreeNode=($$anchor2,node2=noop$3,depth=noop$3,parentPath=noop$3)=>{const isFolder=user_derived(()=>!node2().resource&&node2().children.size>0),folderId=user_derived(()=>`${$$props.serverName}:${parentPath()}/${node2().name}`),isFolderExpanded=user_derived(()=>$$props.expandedFolders.has(get$3(folderId)));var fragment=comment$2(),node_1=first_child(fragment);{var consequent_1=$$anchor3=>{const folderCount=user_derived(()=>countTreeResources(node2()));var fragment_1=comment$2(), +node_2=first_child(fragment_1);component(node_2,()=>Collapsible,($$anchor4,Collapsible_Root)=>{Collapsible_Root($$anchor4,{get open(){return get$3(isFolderExpanded)},onOpenChange:()=>$$props.onToggleFolder(get$3(folderId)),children:($$anchor5,$$slotProps)=>{var fragment_2=root_3$I(),node_3=first_child(fragment_2);component(node_3,()=>Collapsible_trigger,($$anchor6,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor6,{class:"flex w-full items-center gap-2 rounded px-2 py-1 text-sm hover:bg-muted/\ +50",children:($$anchor7,$$slotProps2)=>{var fragment_3=root_4$t(),node_4=first_child(fragment_3);{var consequent=$$anchor8=>{Chevron_down($$anchor8,{class:"h-3 w-3"})},alternate=$$anchor8=>{Chevron_right($$anchor8,{class:"h-3 w-3"})};if_block(node_4,$$render=>{get$3(isFolderExpanded)?$$render(consequent):$$render(alternate,-1)})}var node_5=sibling(node_4,2);Folder_open(node_5,{class:"h-3.5 w-3.5 text-muted-foreground"});var span=sibling(node_5,2),text2=child(span,!0);reset(span);var span_1=sibling( +span,2),text_1=child(span_1);reset(span_1),template_effect(()=>{set_text(text2,node2().name),set_text(text_1,`(${get$3(folderCount)??""})`)}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_6=sibling(node_3,2);component(node_6,()=>Collapsible_content,($$anchor6,Collapsible_Content)=>{Collapsible_Content($$anchor6,{children:($$anchor7,$$slotProps2)=>{var div=root_7$o();each(div,21,()=>sortTreeChildren([...node2().children.values()]),child2=>child2.resource?.uri||`${$$props.serverName}\ +:${parentPath()}/${node2().name}/${child2.name}`,($$anchor8,child2)=>{renderTreeNode($$anchor8,()=>get$3(child2),()=>depth()+1,()=>`${parentPath()}/${node2().name}`)}),reset(div),append($$anchor7,div)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},consequent_3=$$anchor3=>{const resource=user_derived(()=>node2().resource),ResourceIcon=user_derived(()=>getResourceIcon(get$3(resource).mimeType,get$3(resource).uri)),isSelected=user_derived( +()=>isResourceSelected(get$3(resource))),resourceDisplayName=user_derived(()=>get$3(resource).title||getDisplayName(node2().name));var div_1=root_9$i(),node_7=child(div_1);{var consequent_2=$$anchor4=>{Checkbox($$anchor4,{get checked(){return get$3(isSelected)},onCheckedChange:checked=>handleCheckboxChange(get$3(resource),checked===!0),class:"h-4 w-4"})};if_block(node_7,$$render=>{$$props.onToggle&&$$render(consequent_2)})}var button=sibling(node_7,2),node_8=child(button);component(node_8,()=>get$3( +ResourceIcon),($$anchor4,ResourceIcon_1)=>{ResourceIcon_1($$anchor4,{class:"h-3.5 w-3.5 shrink-0 text-muted-foreground"})});var span_2=sibling(node_8,2),text_2=child(span_2,!0);reset(span_2),reset(button),reset(div_1),template_effect($0=>{set_class(button,1,$0),set_attribute(button,"title",get$3(resourceDisplayName)),set_text(text_2,get$3(resourceDisplayName))},[()=>clsx(cn$1("flex flex-1 items-center gap-2 rounded px-2 py-1 text-left text-sm transition-colors","hover:bg-muted/50",get$3(isSelected)&& +"bg-muted"))]),delegated("click",button,e=>handleResourceClick(get$3(resource),e)),append($$anchor3,div_1)};if_block(node_1,$$render=>{get$3(isFolder)?$$render(consequent_1):node2().resource&&$$render(consequent_3,1)})}append($$anchor2,fragment)};let searchQuery=prop($$props,"searchQuery",3,"");const hasResources=user_derived(()=>$$props.serverRes.resources.length>0),hasTemplates=user_derived(()=>$$props.serverRes.templates.length>0),hasContent=user_derived(()=>get$3(hasResources)||get$3(hasTemplates)), +displayName=user_derived(()=>mcpStore.getServerDisplayName($$props.serverName)),favicon=user_derived(()=>mcpStore.getServerFavicon($$props.serverName)),resourceTree=user_derived(()=>buildResourceTree($$props.serverRes.resources,$$props.serverName,searchQuery())),templateInfos=user_derived(()=>$$props.serverRes.templates.map(t=>({uriTemplate:t.uriTemplate,name:t.name,title:t.title,description:t.description,mimeType:t.mimeType,serverName:$$props.serverName,annotations:t.annotations,icons:t.icons}))); +function handleResourceClick(resource,event2){$$props.onSelect?.(resource,event2.shiftKey)}function handleCheckboxChange(resource,checked){$$props.onToggle?.(resource,checked)}function isResourceSelected(resource){return $$props.selectedUris.has(resource.uri)}var fragment_8=comment$2(),node_9=first_child(fragment_8);component(node_9,()=>Collapsible,($$anchor2,Collapsible_Root_1)=>{Collapsible_Root_1($$anchor2,{get open(){return $$props.isExpanded},get onOpenChange(){return $$props.onToggleServer}, +children:($$anchor3,$$slotProps)=>{var fragment_9=root_11$d(),node_10=first_child(fragment_9);component(node_10,()=>Collapsible_trigger,($$anchor4,Collapsible_Trigger_1)=>{Collapsible_Trigger_1($$anchor4,{class:"flex w-full items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-muted/50",children:($$anchor5,$$slotProps2)=>{var fragment_10=root_12$a(),node_11=first_child(fragment_10);{var consequent_4=$$anchor6=>{Chevron_down($$anchor6,{class:"h-3.5 w-3.5"})},alternate_1=$$anchor6=>{Chevron_right( +$$anchor6,{class:"h-3.5 w-3.5"})};if_block(node_11,$$render=>{$$props.isExpanded?$$render(consequent_4):$$render(alternate_1,-1)})}var span_3=sibling(node_11,2),span_4=child(span_3),node_12=child(span_4);{var consequent_5=$$anchor6=>{var img=root_15$b();template_effect(()=>set_attribute(img,"src",get$3(favicon))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor6,img)};if_block(node_12,$$render=>{get$3(favicon)&&$$render(consequent_5)})}var text_3=sibling( +node_12);reset(span_4);var span_5=sibling(span_4,2),text_4=child(span_5),node_13=sibling(text_4);{var consequent_6=$$anchor6=>{var text_5=text$8();template_effect(()=>set_text(text_5,`, ${$$props.serverRes.templates.length??""} template${$$props.serverRes.templates.length!==1?"s":""}`)),append($$anchor6,text_5)};if_block(node_13,$$render=>{get$3(hasTemplates)&&$$render(consequent_6)})}next$1(),reset(span_5),reset(span_3);var node_14=sibling(span_3,2);{var consequent_7=$$anchor6=>{Loader_circle($$anchor6, +{class:"ml-auto h-3 w-3 animate-spin text-muted-foreground"})};if_block(node_14,$$render=>{$$props.serverRes.loading&&$$render(consequent_7)})}template_effect(()=>{set_text(text_3,` ${get$3(displayName)??""}`),set_text(text_4,`(${$$props.serverRes.resources.length??""} resource${$$props.serverRes.resources.length!==1?"s":""}`)}),append($$anchor5,fragment_10)},$$slots:{default:!0}})});var node_15=sibling(node_10,2);component(node_15,()=>Collapsible_content,($$anchor4,Collapsible_Content_1)=>{Collapsible_Content_1( +$$anchor4,{children:($$anchor5,$$slotProps2)=>{var div_2=root_18$6(),node_16=child(div_2);{var consequent_8=$$anchor6=>{var div_3=root_19$9(),text_6=child(div_3);reset(div_3),template_effect(()=>set_text(text_6,`Error: ${$$props.serverRes.error??""}`)),append($$anchor6,div_3)},consequent_9=$$anchor6=>{var div_4=root_20$5();append($$anchor6,div_4)},alternate_2=$$anchor6=>{var fragment_15=root_21$6(),node_17=first_child(fragment_15);{var consequent_10=$$anchor7=>{var fragment_16=comment$2(),node_18=first_child( +fragment_16);each(node_18,17,()=>sortTreeChildren([...get$3(resourceTree).children.values()]),child2=>child2.resource?.uri||`${$$props.serverName}:${child2.name}`,($$anchor8,child2)=>{renderTreeNode($$anchor8,()=>get$3(child2),()=>1,()=>"")}),append($$anchor7,fragment_16)};if_block(node_17,$$render=>{get$3(hasResources)&&$$render(consequent_10)})}var node_19=sibling(node_17,2);{var consequent_12=$$anchor7=>{var fragment_18=root_24$2(),node_20=first_child(fragment_18);{var consequent_11=$$anchor8=>{ +var div_5=root_25$3();append($$anchor8,div_5)};if_block(node_20,$$render=>{get$3(hasResources)&&$$render(consequent_11)})}var node_21=sibling(node_20,4);each(node_21,17,()=>get$3(templateInfos),template=>template.uriTemplate,($$anchor8,template)=>{var button_1=root_26$2(),node_22=child(button_1);Braces(node_22,{class:"h-3.5 w-3.5 shrink-0 text-muted-foreground"});var span_6=sibling(node_22,2),text_7=child(span_6,!0);reset(span_6),reset(button_1),template_effect($0=>{set_class(button_1,1,$0),set_attribute( +button_1,"title",get$3(template).uriTemplate),set_text(text_7,get$3(template).title||get$3(template).name)},[()=>clsx(cn$1("flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm transition-colors","hover:bg-muted/50",$$props.selectedTemplateUri===get$3(template).uriTemplate&&"bg-muted"))]),delegated("click",button_1,()=>$$props.onTemplateSelect(get$3(template))),append($$anchor8,button_1)}),append($$anchor7,fragment_18)};if_block(node_19,$$render=>{get$3(hasTemplates)&&$$props.onTemplateSelect&& +$$render(consequent_12)})}append($$anchor6,fragment_15)};if_block(node_16,$$render=>{$$props.serverRes.error?$$render(consequent_8):get$3(hasContent)?$$render(alternate_2,-1):$$render(consequent_9,1)})}reset(div_2),append($$anchor5,div_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_9)},$$slots:{default:!0}})}),append($$anchor,fragment_8),pop()}delegate(["click"]);var root$1e=from_html('<div><!> <div class="flex flex-col gap-1"><!></div></div>');function McpResourceBrowser($$anchor,$$props){ +push$1($$props,!0);let selectedUris=prop($$props,"selectedUris",19,()=>new Set),expandedServers=new SvelteSet,expandedFolders=new SvelteSet,searchQuery=state$1("");const resources=user_derived(mcpResources),isLoading2=user_derived(mcpResourcesLoading),filteredResources=user_derived(()=>{if(!get$3(searchQuery).trim())return get$3(resources);const query=get$3(searchQuery).toLowerCase(),filtered=new SvelteMap;for(const[serverName,serverRes]of get$3(resources).entries()){const filteredResources2=serverRes. +resources.filter(r2=>r2.title?.toLowerCase().includes(query)||r2.uri.toLowerCase().includes(query)||serverName.toLowerCase().includes(query)),filteredTemplates=serverRes.templates.filter(t=>t.name?.toLowerCase().includes(query)||t.title?.toLowerCase().includes(query)||t.uriTemplate.toLowerCase().includes(query)||serverName.toLowerCase().includes(query));(filteredResources2.length>0||filteredTemplates.length>0||query.trim())&&filtered.set(serverName,{...serverRes,resources:filteredResources2,templates:filteredTemplates})} +return filtered});user_effect(()=>{$$props.expandToUri&&get$3(resources).size>0&&autoExpandToResource($$props.expandToUri)});function autoExpandToResource(uri2){for(const[serverName,serverRes]of get$3(resources).entries())if(serverRes.resources.find(r2=>r2.uri===uri2)){expandedServers.add(serverName);const pathParts=parseResourcePath(uri2);if(pathParts.length>1){let currentPath="";for(let i=0;i<pathParts.length-1;i++){currentPath=`${currentPath}/${pathParts[i]}`;const folderId=`${serverName}:${currentPath}`; +expandedFolders.add(folderId)}}break}}function toggleServer(serverName){expandedServers.has(serverName)?expandedServers.delete(serverName):expandedServers.add(serverName)}function toggleFolder(folderId){expandedFolders.has(folderId)?expandedFolders.delete(folderId):expandedFolders.add(folderId)}function handleRefresh(){mcpStore.fetchAllResources()}var div=root$1e(),node2=child(div);McpResourceBrowserHeader(node2,{get isLoading(){return get$3(isLoading2)},onRefresh:handleRefresh,onSearch:q2=>set$1( +searchQuery,q2,!0),get searchQuery(){return get$3(searchQuery)}});var div_1=sibling(node2,2),node_1=child(div_1);{var consequent=$$anchor2=>{McpResourceBrowserEmptyState($$anchor2,{get isLoading(){return get$3(isLoading2)}})},alternate=$$anchor2=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);each(node_2,17,()=>[...get$3(filteredResources).entries()],([serverName,serverRes])=>serverName,($$anchor3,$$item)=>{var $$array=user_derived(()=>to_array(get$3($$item),2));let serverName=()=>get$3( +$$array)[0],serverRes=()=>get$3($$array)[1];{let $0=user_derived(()=>expandedServers.has(serverName()));McpResourceBrowserServerItem($$anchor3,{get serverName(){return serverName()},get serverRes(){return serverRes()},get isExpanded(){return get$3($0)},get selectedUris(){return selectedUris()},get selectedTemplateUri(){return $$props.selectedTemplateUri},get expandedFolders(){return expandedFolders},onToggleServer:()=>toggleServer(serverName()),onToggleFolder:toggleFolder,get onSelect(){return $$props. +onSelect},get onToggle(){return $$props.onToggle},get onTemplateSelect(){return $$props.onTemplateSelect},get searchQuery(){return get$3(searchQuery)}})}}),append($$anchor2,fragment_1)};if_block(node_1,$$render=>{get$3(filteredResources).size===0?$$render(consequent):$$render(alternate,-1)})}reset(div_1),reset(div),template_effect($0=>set_class(div,1,$0),[()=>clsx(cn$1("flex flex-col gap-2",$$props.class))]),append($$anchor,div),pop()}var root_1$E=from_html('<div class="flex flex-col items-cente\ +r justify-center gap-2 py-8 text-muted-foreground"><!> <span class="text-sm">Select a resource to preview</span></div>'),root_3$H=from_html('<p class="mt-1 text-sm text-muted-foreground"> </p>'),root_5$s=from_html('<div class="flex items-center justify-center py-8"><!></div>'),root_6$p=from_html('<div class="flex flex-col items-center justify-center gap-2 py-8 text-red-500"><!> <span class="text-sm"> </span></div>'),root_8$m=from_html('<pre class="font-mono text-xs break-words whitespace-pre-wra\ +p"> </pre>'),root_10$f=from_html('<img alt="Resource content" class="max-w-full rounded"/>'),root_11$c=from_html('<div class="flex items-center gap-2 rounded bg-muted p-2 text-sm text-muted-foreground"><!> <span> </span></div>'),root_12$9=from_html('<div class="py-4 text-center text-sm text-muted-foreground">No content available</div>'),root_7$n=from_html("<!> <!> <!>",1),root_14$7=from_html('<span class="rounded bg-muted px-1.5 py-0.5"> </span>'),root_15$a=from_html('<span class="rounded bg-mut\ +ed px-1.5 py-0.5"> </span>'),root_13$a=from_html('<div class="flex flex-wrap gap-2 text-xs text-muted-foreground"><!> <!> <span class="rounded bg-muted px-1.5 py-0.5"> </span></div>'),root_2$Y=from_html('<div class="flex items-start justify-between gap-2"><div class="min-w-0 flex-1"><h3 class="truncate font-medium"> </h3> <p class="truncate text-xs text-muted-foreground"> </p> <!></div> <div class="flex items-center gap-1"><!> <!></div></div> <div class="min-h-[200px] overflow-auto rounded-md bo\ +rder bg-muted/30 p-3 break-all"><!></div> <!>',1),root$1d=from_html("<div><!></div>");function McpResourcePreview($$anchor,$$props){push$1($$props,!0);let content2=state$1(null),isLoading2=state$1(!1),error2=state$1(null);user_effect(()=>{$$props.resource?$$props.preloadedContent?(set$1(content2,$$props.preloadedContent,!0),set$1(isLoading2,!1),set$1(error2,null)):loadContent($$props.resource.uri):(set$1(content2,null),set$1(error2,null))});async function loadContent(uri2){set$1(isLoading2,!0),set$1( +error2,null);try{const result=await mcpStore.readResource(uri2);result?set$1(content2,result,!0):set$1(error2,"Failed to load resource content")}catch(e){set$1(error2,e instanceof Error?e.message:"Unknown error",!0)}finally{set$1(isLoading2,!1)}}function handleDownload(){const text2=getResourceTextContent(get$3(content2));!text2||!$$props.resource||downloadResourceContent(text2,$$props.resource.mimeType||MimeTypeText.PLAIN,$$props.resource.name||"resource.txt")}var div=root$1d(),node2=child(div); +{var consequent=$$anchor2=>{var div_1=root_1$E(),node_1=child(div_1);File_text(node_1,{class:"h-8 w-8 opacity-50"}),next$1(2),reset(div_1),append($$anchor2,div_1)},alternate_1=$$anchor2=>{var fragment=root_2$Y(),div_2=first_child(fragment),div_3=child(div_2),h3=child(div_3),text_1=child(h3,!0);reset(h3);var p2=sibling(h3,2),text_2=child(p2,!0);reset(p2);var node_2=sibling(p2,2);{var consequent_1=$$anchor3=>{var p_1=root_3$H(),text_3=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text_3,$$props. +resource.description)),append($$anchor3,p_1)};if_block(node_2,$$render=>{$$props.resource.description&&$$render(consequent_1)})}reset(div_3);var div_4=sibling(div_3,2),node_3=child(div_4);{let $0=user_derived(()=>getResourceTextContent(get$3(content2))),$1=user_derived(()=>!get$3(isLoading2)&&!!getResourceTextContent(get$3(content2)));ActionIconCopyToClipboard(node_3,{get text(){return get$3($0)},get canCopy(){return get$3($1)},ariaLabel:"Copy content"})}var node_4=sibling(node_3,2);{let $0=user_derived( +()=>get$3(isLoading2)||!getResourceTextContent(get$3(content2)));Button(node_4,{variant:"ghost",size:"sm",class:"h-7 w-7 p-0",onclick:handleDownload,get disabled(){return get$3($0)},title:"Download content",children:($$anchor3,$$slotProps)=>{Download($$anchor3,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})}reset(div_4),reset(div_2);var div_5=sibling(div_2,2),node_5=child(div_5);{var consequent_2=$$anchor3=>{var div_6=root_5$s(),node_6=child(div_6);Loader_circle(node_6,{class:"h-6 w-6 animate-spi\ +n text-muted-foreground"}),reset(div_6),append($$anchor3,div_6)},consequent_3=$$anchor3=>{var div_7=root_6$p(),node_7=child(div_7);Circle_alert(node_7,{class:"h-6 w-6"});var span=sibling(node_7,2),text_4=child(span,!0);reset(span),reset(div_7),template_effect(()=>set_text(text_4,get$3(error2))),append($$anchor3,div_7)},consequent_7=$$anchor3=>{const textContent=user_derived(()=>getResourceTextContent(get$3(content2))),blobContent=user_derived(()=>getResourceBlobContent(get$3(content2)));var fragment_2=root_7$n(), +node_8=first_child(fragment_2);{var consequent_4=$$anchor4=>{var pre=root_8$m(),text_5=child(pre,!0);reset(pre),template_effect(()=>set_text(text_5,get$3(textContent))),append($$anchor4,pre)};if_block(node_8,$$render=>{get$3(textContent)&&$$render(consequent_4)})}var node_9=sibling(node_8,2);each(node_9,17,()=>get$3(blobContent),blob=>blob.uri,($$anchor4,blob)=>{var fragment_3=comment$2(),node_10=first_child(fragment_3);{var consequent_5=$$anchor5=>{var img=root_10$f();template_effect($0=>set_attribute( +img,"src",$0),[()=>createBase64DataUrl(get$3(blob).mimeType??MimeTypeApplication.OCTET_STREAM,get$3(blob).blob)]),append($$anchor5,img)},d2=user_derived(()=>isImageMimeType(get$3(blob).mimeType??MimeTypeApplication.OCTET_STREAM)),alternate=$$anchor5=>{var div_8=root_11$c(),node_11=child(div_8);File_text(node_11,{class:"h-4 w-4"});var span_1=sibling(node_11,2),text_6=child(span_1);reset(span_1),reset(div_8),template_effect(()=>set_text(text_6,`Binary content (${(get$3(blob).mimeType||"unknown typ\ +e")??""})`)),append($$anchor5,div_8)};if_block(node_10,$$render=>{get$3(d2)?$$render(consequent_5):$$render(alternate,-1)})}append($$anchor4,fragment_3)});var node_12=sibling(node_9,2);{var consequent_6=$$anchor4=>{var div_9=root_12$9();append($$anchor4,div_9)};if_block(node_12,$$render=>{!get$3(textContent)&&get$3(blobContent).length===0&&$$render(consequent_6)})}append($$anchor3,fragment_2)};if_block(node_5,$$render=>{get$3(isLoading2)?$$render(consequent_2):get$3(error2)?$$render(consequent_3, +1):get$3(content2)&&$$render(consequent_7,2)})}reset(div_5);var node_13=sibling(div_5,2);{var consequent_10=$$anchor3=>{var div_10=root_13$a(),node_14=child(div_10);{var consequent_8=$$anchor4=>{var span_2=root_14$7(),text_7=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_7,$$props.resource.mimeType)),append($$anchor4,span_2)};if_block(node_14,$$render=>{$$props.resource.mimeType&&$$render(consequent_8)})}var node_15=sibling(node_14,2);{var consequent_9=$$anchor4=>{var span_3=root_15$a(), +text_8=child(span_3);reset(span_3),template_effect(()=>set_text(text_8,`Priority: ${$$props.resource.annotations.priority??""}`)),append($$anchor4,span_3)};if_block(node_15,$$render=>{$$props.resource.annotations?.priority!==void 0&&$$render(consequent_9)})}var span_4=sibling(node_15,2),text_9=child(span_4);reset(span_4),reset(div_10),template_effect(()=>set_text(text_9,`Server: ${$$props.resource.serverName??""}`)),append($$anchor3,div_10)};if_block(node_13,$$render=>{($$props.resource.mimeType|| +$$props.resource.annotations)&&$$render(consequent_10)})}template_effect(()=>{set_text(text_1,$$props.resource.title||$$props.resource.name),set_text(text_2,$$props.resource.uri)}),append($$anchor2,fragment)};if_block(node2,$$render=>{$$props.resource?$$render(alternate_1,-1):$$render(consequent)})}reset(div),template_effect($0=>set_class(div,1,$0),[()=>clsx(cn$1("flex flex-col gap-3",$$props.class))]),append($$anchor,div),pop()}var root_2$X=from_html('<div class="rounded-md bg-muted/50 px-3 py-\ +2"><p class="text-xs text-muted-foreground">Resolved URI:</p> <p class="mt-0.5 font-mono text-xs break-all"> </p></div>'),root$1c=from_html('<form class="space-y-3"><!> <!> <div class="flex justify-end gap-2 pt-1"><!> <!></div></form>');function McpResourceTemplateForm($$anchor,$$props){push$1($$props,!0);const variables=user_derived(()=>extractTemplateVariables($$props.template.uriTemplate));let values=proxy({}),suggestions=proxy({}),loadingSuggestions=proxy({}),activeAutocomplete=state$1(null), +autocompleteIndex=state$1(0);const expandedUri=user_derived(()=>expandTemplate($$props.template.uriTemplate,values)),isComplete=user_derived(()=>isTemplateComplete($$props.template.uriTemplate,values)),fetchCompletions=debounce(async(argName,value)=>{if(value.length<1){suggestions[argName]=[];return}loadingSuggestions[argName]=!0;try{const result=await mcpStore.getResourceCompletions($$props.template.serverName,$$props.template.uriTemplate,argName,value);if(result&&result.values.length>0){const filteredValues=result. +values.filter(v=>v.trim()!=="");filteredValues.length>0?(suggestions[argName]=filteredValues,set$1(activeAutocomplete,argName,!0),set$1(autocompleteIndex,0)):suggestions[argName]=[]}else suggestions[argName]=[]}catch(error2){console.error("[McpResourceTemplateForm] Failed to fetch completions:",error2),suggestions[argName]=[]}finally{loadingSuggestions[argName]=!1}},200);function handleArgInput(argName,value){values[argName]=value,fetchCompletions(argName,value)}function selectSuggestion(argName,value){ +values[argName]=value,suggestions[argName]=[],set$1(activeAutocomplete,null)}function handleArgKeydown(event2,argName){const argSuggestions=suggestions[argName]??[];if(event2.key===KeyboardKey.ESCAPE){event2.preventDefault(),event2.stopPropagation(),argSuggestions.length>0&&get$3(activeAutocomplete)===argName?(suggestions[argName]=[],set$1(activeAutocomplete,null)):$$props.onCancel();return}argSuggestions.length===0||get$3(activeAutocomplete)!==argName||(event2.key===KeyboardKey.ARROW_DOWN?(event2. +preventDefault(),set$1(autocompleteIndex,Math.min(get$3(autocompleteIndex)+1,argSuggestions.length-1),!0)):event2.key===KeyboardKey.ARROW_UP?(event2.preventDefault(),set$1(autocompleteIndex,Math.max(get$3(autocompleteIndex)-1,0),!0)):event2.key===KeyboardKey.ENTER&&argSuggestions[get$3(autocompleteIndex)]&&(event2.preventDefault(),event2.stopPropagation(),selectSuggestion(argName,argSuggestions[get$3(autocompleteIndex)])))}function handleArgBlur(argName){setTimeout(()=>{get$3(activeAutocomplete)=== +argName&&(suggestions[argName]=[],set$1(activeAutocomplete,null))},150)}function handleArgFocus(argName){const value=values[argName]??"";value.length>=MIN_AUTOCOMPLETE_INPUT_LENGTH&&fetchCompletions(argName,value)}function handleSubmit(event2){event2.preventDefault(),get$3(isComplete)&&$$props.onResolve(get$3(expandedUri),$$props.template.serverName)}var form=root$1c(),node2=child(form);each(node2,17,()=>get$3(variables),variable=>variable.name,($$anchor2,variable)=>{{let $0=user_derived(()=>values[get$3( +variable).name]??""),$1=user_derived(()=>suggestions[get$3(variable).name]??[]),$2=user_derived(()=>loadingSuggestions[get$3(variable).name]??!1),$3=user_derived(()=>get$3(activeAutocomplete)===get$3(variable).name),$4=user_derived(()=>get$3(activeAutocomplete)===get$3(variable).name?get$3(autocompleteIndex):0);InputWithSuggestions($$anchor2,{get name(){return get$3(variable).name},get value(){return get$3($0)},get suggestions(){return get$3($1)},get isLoadingSuggestions(){return get$3($2)},get isAutocompleteActive(){ +return get$3($3)},get autocompleteIndex(){return get$3($4)},onInput:value=>handleArgInput(get$3(variable).name,value),onKeydown:e=>handleArgKeydown(e,get$3(variable).name),onBlur:()=>handleArgBlur(get$3(variable).name),onFocus:()=>handleArgFocus(get$3(variable).name),onSelectSuggestion:value=>selectSuggestion(get$3(variable).name,value)})}});var node_1=sibling(node2,2);{var consequent=$$anchor2=>{var div=root_2$X(),p2=sibling(child(div),2),text2=child(p2,!0);reset(p2),reset(div),template_effect( +()=>set_text(text2,get$3(expandedUri))),append($$anchor2,div)};if_block(node_1,$$render=>{get$3(isComplete)&&$$render(consequent)})}var div_1=sibling(node_1,2),node_2=child(div_1);Button(node_2,{type:"button",size:"sm",variant:"secondary",get onclick(){return $$props.onCancel},children:($$anchor2,$$slotProps)=>{next$1();var text_1=text$8("Cancel");append($$anchor2,text_1)},$$slots:{default:!0}});var node_3=sibling(node_2,2);{let $0=user_derived(()=>!get$3(isComplete));Button(node_3,{size:"sm",type:"\ +submit",get disabled(){return get$3($0)},children:($$anchor2,$$slotProps)=>{next$1();var text_2=text$8("Read Resource");append($$anchor2,text_2)},$$slots:{default:!0}})}reset(div_1),reset(form),event("submit",form,handleSubmit),append($$anchor,form),pop()}var root_5$r=from_html("<!> <!>",1),root_2$W=from_html('<!> <div class="space-y-4 py-4"><!></div> <!>',1);function DialogMcpServerAddNew($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15),newServerUrl=state$1(""),newServerHeaders=state$1( +""),newServerUrlError=user_derived(()=>{if(!get$3(newServerUrl).trim())return"URL is required";try{return new URL(get$3(newServerUrl)),null}catch{return"Invalid URL format"}});function handleOpenChange(value){value||(set$1(newServerUrl,""),set$1(newServerHeaders,"")),open2(value),$$props.onOpenChange?.(value)}function saveNewServer(){if(get$3(newServerUrlError))return;const newServerId=uuid$1()??`${MCP_SERVER_ID_PREFIX}-${Date.now()}`;mcpStore.addServer({id:newServerId,enabled:!0,url:get$3(newServerUrl). +trim(),headers:get$3(newServerHeaders).trim()||void 0}),conversationsStore.setMcpServerOverride(newServerId,!0),handleOpenChange(!1)}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get open(){return open2()},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Dialog_content,($$anchor4,Dialog_Content)=>{Dialog_Content($$anchor4, +{class:"sm:max-w-md",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$W(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_header,($$anchor6,Dialog_Header)=>{Dialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=comment$2(),node_3=first_child(fragment_3);component(node_3,()=>Dialog_title,($$anchor8,Dialog_Title)=>{Dialog_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("Add New Server");append($$anchor9,text2)},$$slots:{default:!0}})}), +append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),node_4=child(div);{let $0=user_derived(()=>get$3(newServerUrl)?get$3(newServerUrlError):null);McpServerForm(node_4,{get url(){return get$3(newServerUrl)},get headers(){return get$3(newServerHeaders)},onUrlChange:v=>set$1(newServerUrl,v,!0),onHeadersChange:v=>set$1(newServerHeaders,v,!0),get urlError(){return get$3($0)},id:"new-server"})}reset(div);var node_5=sibling(div,2);component(node_5,()=>Dialog_footer,($$anchor6,Dialog_Footer)=>{ +Dialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_4=root_5$r(),node_6=first_child(fragment_4);Button(node_6,{variant:"secondary",size:"sm",onclick:()=>handleOpenChange(!1),children:($$anchor8,$$slotProps4)=>{next$1();var text_1=text$8("Cancel");append($$anchor8,text_1)},$$slots:{default:!0}});var node_7=sibling(node_6,2);{let $0=user_derived(()=>!!get$3(newServerUrlError));Button(node_7,{variant:"default",size:"sm",onclick:saveNewServer,get disabled(){return get$3($0)},"a\ +ria-label":"Save",children:($$anchor8,$$slotProps4)=>{next$1();var text_2=text$8("Add");append($$anchor8,text_2)},$$slots:{default:!0}})}append($$anchor7,fragment_4)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$s=from_html("<!> ",1),root_3$G=from_html("<!> <!>",1),root_8$l=from_html("<!> <!>",1),root_2$V=from_html("<!> <!> <!>",1);function DialogConfirmation($$anchor,$$props){ +push$1($$props,!0);let confirmText=prop($$props,"confirmText",3,"Confirm"),cancelText=prop($$props,"cancelText",3,"Cancel"),variant=prop($$props,"variant",3,"default");function handleKeydown(event2){event2.key===KeyboardKey.ENTER&&(event2.preventDefault(),$$props.onConfirm()),$$props.onKeydown?.(event2)}function handleOpenChange(newOpen){newOpen||$$props.onCancel()}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2, +{get open(){return $$props.open},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{onkeydown:handleKeydown,children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$V(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{ +var fragment_3=root_3$G(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$s(),node_4=first_child(fragment_4);{var consequent=$$anchor10=>{const IconComponent=user_derived(()=>$$props.icon);var fragment_5=comment$2(),node_5=first_child(fragment_5);{let $0=user_derived(()=>variant()==="destructive"?"text-destructive":"");component( +node_5,()=>get$3(IconComponent),($$anchor11,IconComponent_1)=>{IconComponent_1($$anchor11,{get class(){return`h-5 w-5 ${get$3($0)??""}`}})})}append($$anchor10,fragment_5)};if_block(node_4,$$render=>{$$props.icon&&$$render(consequent)})}var text2=sibling(node_4);template_effect(()=>set_text(text2,` ${$$props.title??""}`)),append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_6=sibling(node_3,2);component(node_6,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description( +$$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,$$props.description)),append($$anchor9,text_1)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_7=sibling(node_2,2);{var consequent_1=$$anchor6=>{var fragment_7=comment$2(),node_8=first_child(fragment_7);snippet(node_8,()=>$$props.children),append($$anchor6,fragment_7)};if_block(node_7,$$render=>{$$props.children&&$$render(consequent_1)})}var node_9=sibling( +node_7,2);component(node_9,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_8=root_8$l(),node_10=first_child(fragment_8);component(node_10,()=>Alert_dialog_cancel,($$anchor8,AlertDialog_Cancel)=>{AlertDialog_Cancel($$anchor8,{get onclick(){return $$props.onCancel},children:($$anchor9,$$slotProps4)=>{next$1();var text_2=text$8();template_effect(()=>set_text(text_2,cancelText())),append($$anchor9,text_2)},$$slots:{ +default:!0}})});var node_11=sibling(node_10,2);{let $0=user_derived(()=>variant()==="destructive"?"bg-destructive text-white hover:bg-destructive/80":"");component(node_11,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{AlertDialog_Action($$anchor8,{get onclick(){return $$props.onConfirm},get class(){return get$3($0)},children:($$anchor9,$$slotProps4)=>{next$1();var text_3=text$8();template_effect(()=>set_text(text_3,confirmText())),append($$anchor9,text_3)},$$slots:{default:!0}})})}append( +$$anchor7,fragment_8)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_3$F=from_html("<!> <!>",1),root_6$o=from_html("<!> <!>",1),root_2$U=from_html('<!> <div class="space-y-4 pt-2 pb-6"><div class="space-y-2"><p class="text-sm font-medium text-muted-foreground">Current title:</p> <p class="rounded-md bg-muted/50 p-3 text-sm font-medium"> </p></div> <div class="space-y-\ +2"><p class="text-sm font-medium text-muted-foreground">New title would be:</p> <p class="rounded-md bg-muted/50 p-3 text-sm font-medium"> </p></div></div> <!>',1);function DialogConversationTitleUpdate($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{ +var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$U(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$F(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{ +AlertDialog_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("Update Conversation Title?");append($$anchor9,text2)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8("Do you want to update the conversation title to match the first message content?");append($$anchor9,text_1)},$$slots:{ +default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),div_1=child(div),p2=sibling(child(div_1),2),text_2=child(p2,!0);reset(p2),reset(div_1);var div_2=sibling(div_1,2),p_1=sibling(child(div_2),2),text_3=child(p_1,!0);reset(p_1),reset(div_2),reset(div);var node_5=sibling(div,2);component(node_5,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_4=root_6$o(),node_6=first_child( +fragment_4);Button(node_6,{variant:"outline",get onclick(){return $$props.onCancel},children:($$anchor8,$$slotProps4)=>{next$1();var text_4=text$8("Keep Current Title");append($$anchor8,text_4)},$$slots:{default:!0}});var node_7=sibling(node_6,2);Button(node_7,{get onclick(){return $$props.onConfirm},children:($$anchor8,$$slotProps4)=>{next$1();var text_5=text$8("Update Title");append($$anchor8,text_5)},$$slots:{default:!0}}),append($$anchor7,fragment_4)},$$slots:{default:!0}})}),template_effect( +()=>{set_text(text_2,$$props.currentTitle),set_text(text_3,$$props.newTitle)}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$r=from_html('<!> <span class="sr-only">Close preview</span>',1),root_3$E=from_html('<iframe sandbox="allow-scripts" class="code-preview-iframe"></iframe> <!>',1),root_2$T=from_html("<!> <!>",1);function DialogCodePreview($$anchor,$$props){push$1($$props,!0);let open2=prop( +$$props,"open",15),iframeRef=state$1(null);user_effect(()=>{get$3(iframeRef)&&(open2()?get$3(iframeRef).srcdoc=$$props.code:get$3(iframeRef).srcdoc="")});function handleOpenChange(nextOpen){open2(nextOpen),$$props.onOpenChange?.(nextOpen)}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Dialog,($$anchor2,DialogPrimitive_Root)=>{DialogPrimitive_Root($$anchor2,{get open(){return open2()},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(), +node_1=first_child(fragment_1);component(node_1,()=>Portal$2,($$anchor4,DialogPrimitive_Portal)=>{DialogPrimitive_Portal($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$T(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_overlay$1,($$anchor6,DialogPrimitive_Overlay)=>{DialogPrimitive_Overlay($$anchor6,{class:"code-preview-overlay"})});var node_3=sibling(node_2,2);component(node_3,()=>Dialog_content$1,($$anchor6,DialogPrimitive_Content)=>{DialogPrimitive_Content($$anchor6, +{class:"code-preview-content",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$E(),iframe=first_child(fragment_3);bind_this(iframe,$$value=>set$1(iframeRef,$$value),()=>get$3(iframeRef));var node_4=sibling(iframe,2);component(node_4,()=>Dialog_close,($$anchor8,DialogPrimitive_Close)=>{DialogPrimitive_Close($$anchor8,{class:"code-preview-close absolute top-4 right-4 border-none bg-transparent text-white opacity-70 mix-blend-difference transition-opacity hover:opacity-100 focus-visible:ri\ +ng-0 focus-visible:ring-offset-0 focus-visible:outline-none disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-8","aria-label":"Close preview",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$r(),node_5=first_child(fragment_4);X(node_5,{}),next$1(2),append($$anchor9,fragment_4)},$$slots:{default:!0}})}),template_effect(()=>set_attribute(iframe,"title",`Preview ${$$props.language??""}`)),append($$anchor7,fragment_3)},$$slots:{default:!0}})}), +append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_3$D=from_html("<!> <!>",1),root_2$S=from_html("<!> <!>",1);function DialogChatAttachmentPreview($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15),chatAttachmentPreviewRef=state$1(void 0),displayName=user_derived(()=>$$props.uploadedFile?.name||$$props.attachment?.name||$$props.name||"Unknown File"),displaySize=user_derived(()=>$$props. +uploadedFile?.size||$$props.size);user_effect(()=>{open2()&&get$3(chatAttachmentPreviewRef)&&get$3(chatAttachmentPreviewRef).reset()});var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get onOpenChange(){return $$props.onOpenChange},get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Dialog_content, +($$anchor4,Dialog_Content)=>{Dialog_Content($$anchor4,{class:"grid max-h-[90vh] max-w-5xl overflow-hidden sm:w-auto sm:max-w-6xl",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$S(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_header,($$anchor6,Dialog_Header)=>{Dialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$D(),node_3=first_child(fragment_3);component(node_3,()=>Dialog_title,($$anchor8,Dialog_Title)=>{Dialog_Title($$anchor8,{class:"pr-8", +children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,get$3(displayName))),append($$anchor9,text2)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Dialog_description,($$anchor8,Dialog_Description)=>{Dialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_5=comment$2(),node_5=first_child(fragment_5);{var consequent=$$anchor10=>{var text_1=text$8();template_effect($0=>set_text(text_1,$0),[()=>formatFileSize( +get$3(displaySize))]),append($$anchor10,text_1)};if_block(node_5,$$render=>{get$3(displaySize)&&$$render(consequent)})}append($$anchor9,fragment_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_6=sibling(node_2,2);bind_this(ChatAttachmentPreview(node_6,{get uploadedFile(){return $$props.uploadedFile},get attachment(){return $$props.attachment},get preview(){return $$props.preview},get name(){return get$3(displayName)},get textContent(){return $$props.textContent}, +get activeModelId(){return $$props.activeModelId}}),$$value=>set$1(chatAttachmentPreviewRef,$$value,!0),()=>get$3(chatAttachmentPreviewRef)),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$q=from_html("<!> <!>",1),root_3$C=from_html("<!> <!>",1),root_2$R=from_html("<!> <!>",1);function DialogChatAttachmentsViewAll($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),uploadedFiles=prop( +$$props,"uploadedFiles",19,()=>[]),attachments=prop($$props,"attachments",19,()=>[]),readonly2=prop($$props,"readonly",3,!1),imageHeight=prop($$props,"imageHeight",3,"h-24"),imageWidth=prop($$props,"imageWidth",3,"w-auto"),imageClass=prop($$props,"imageClass",3,""),totalCount=user_derived(()=>uploadedFiles().length+attachments().length);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get open(){return open2()},set open($$value){ +open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Portal$1,($$anchor4,Dialog_Portal)=>{Dialog_Portal($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$R(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_overlay,($$anchor6,Dialog_Overlay)=>{Dialog_Overlay($$anchor6,{})});var node_3=sibling(node_2,2);component(node_3,()=>Dialog_content,($$anchor6,Dialog_Content)=>{Dialog_Content($$anchor6, +{class:"flex !max-h-[90vh] !max-w-6xl flex-col",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$C(),node_4=first_child(fragment_3);component(node_4,()=>Dialog_header,($$anchor8,Dialog_Header)=>{Dialog_Header($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$q(),node_5=first_child(fragment_4);component(node_5,()=>Dialog_title,($$anchor10,Dialog_Title)=>{Dialog_Title($$anchor10,{children:($$anchor11,$$slotProps5)=>{next$1();var text2=text$8();template_effect(()=>set_text( +text2,`All Attachments (${get$3(totalCount)??""})`)),append($$anchor11,text2)},$$slots:{default:!0}})});var node_6=sibling(node_5,2);component(node_6,()=>Dialog_description,($$anchor10,Dialog_Description)=>{Dialog_Description($$anchor10,{children:($$anchor11,$$slotProps5)=>{next$1();var text_1=text$8("View and manage all attached files");append($$anchor11,text_1)},$$slots:{default:!0}})}),append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_7=sibling(node_4,2);ChatAttachmentsViewAll(node_7, +{get uploadedFiles(){return uploadedFiles()},get attachments(){return attachments()},get readonly(){return readonly2()},get onFileRemove(){return $$props.onFileRemove},get imageHeight(){return imageHeight()},get imageWidth(){return imageWidth()},get imageClass(){return imageClass()},get activeModelId(){return $$props.activeModelId}}),append($$anchor7,fragment_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}), +append($$anchor,fragment),pop()}var root_4$p=from_html("<!> ",1),root_3$B=from_html("<!> <!>",1),root_9$h=from_html('<p><span class="font-medium">Context size:</span> </p>'),root_8$k=from_html('<div class="mt-2 space-y-1 text-xs opacity-80"><p><span class="font-medium">Prompt tokens:</span> </p> <!></div>'),root_2$Q=from_html('<!> <div><p class="font-medium"> </p> <!></div> <!>',1);function DialogChatError($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15);const isTimeout=user_derived( +()=>$$props.type===ErrorDialogType.TIMEOUT),title2=user_derived(()=>get$3(isTimeout)?"TCP Timeout":"Server Error"),description2=user_derived(()=>get$3(isTimeout)?"The request did not receive a response from the server before timing out.":"The server responded with an error message. Review the details below."),iconClass=user_derived(()=>get$3(isTimeout)?"text-destructive":"text-amber-500"),badgeClass=user_derived(()=>get$3(isTimeout)?"border-destructive/40 bg-destructive/10 text-destructive":"bor\ der-amber-500/40 bg-amber-500/10 text-amber-600 dark:text-amber-400");function handleOpenChange(newOpen){open2(newOpen),$$props.onOpenChange?.(newOpen)}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return open2()},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{ -AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$U(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$K(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$r(), -node_4=first_child(fragment_4);{var consequent=$$anchor10=>{{let $0=user_derived(()=>`h-5 w-5 ${get$4(iconClass)}`);Timer_off($$anchor10,{get class(){return get$4($0)}})}},alternate=$$anchor10=>{{let $0=user_derived(()=>`h-5 w-5 ${get$4(iconClass)}`);Triangle_alert($$anchor10,{get class(){return get$4($0)}})}};if_block(node_4,$$render=>{get$4(isTimeout)?$$render(consequent):$$render(alternate,!1)})}var text2=sibling(node_4);template_effect(()=>set_text(text2,` ${get$4(title2)??""}`)),append($$anchor9, -fragment_4)},$$slots:{default:!0}})});var node_5=sibling(node_3,2);component(node_5,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,get$4(description2))),append($$anchor9,text_1)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),p2=child(div),text_2=child(p2,!0);reset(p2);var node_6=sibling( -p2,2);{var consequent_2=$$anchor6=>{var div_1=root_8$l(),p_1=child(div_1),text_3=sibling(child(p_1));reset(p_1);var node_7=sibling(p_1,2);{var consequent_1=$$anchor7=>{var p_2=root_9$l(),text_4=sibling(child(p_2));reset(p_2),template_effect($0=>set_text(text_4,` ${$0??""}`),[()=>$$props.contextInfo.n_ctx.toLocaleString()]),append($$anchor7,p_2)};if_block(node_7,$$render=>{$$props.contextInfo.n_ctx&&$$render(consequent_1)})}reset(div_1),template_effect($0=>set_text(text_3,` ${$0??""}`),[()=>$$props. +AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$Q(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$B(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$p(), +node_4=first_child(fragment_4);{var consequent=$$anchor10=>{{let $0=user_derived(()=>`h-5 w-5 ${get$3(iconClass)}`);Timer_off($$anchor10,{get class(){return get$3($0)}})}},alternate=$$anchor10=>{{let $0=user_derived(()=>`h-5 w-5 ${get$3(iconClass)}`);Triangle_alert($$anchor10,{get class(){return get$3($0)}})}};if_block(node_4,$$render=>{get$3(isTimeout)?$$render(consequent):$$render(alternate,-1)})}var text2=sibling(node_4);template_effect(()=>set_text(text2,` ${get$3(title2)??""}`)),append($$anchor9, +fragment_4)},$$slots:{default:!0}})});var node_5=sibling(node_3,2);component(node_5,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,get$3(description2))),append($$anchor9,text_1)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),p2=child(div),text_2=child(p2,!0);reset(p2);var node_6=sibling( +p2,2);{var consequent_2=$$anchor6=>{var div_1=root_8$k(),p_1=child(div_1),text_3=sibling(child(p_1));reset(p_1);var node_7=sibling(p_1,2);{var consequent_1=$$anchor7=>{var p_2=root_9$h(),text_4=sibling(child(p_2));reset(p_2),template_effect($0=>set_text(text_4,` ${$0??""}`),[()=>$$props.contextInfo.n_ctx.toLocaleString()]),append($$anchor7,p_2)};if_block(node_7,$$render=>{$$props.contextInfo.n_ctx&&$$render(consequent_1)})}reset(div_1),template_effect($0=>set_text(text_3,` ${$0??""}`),[()=>$$props. contextInfo.n_prompt_tokens.toLocaleString()]),append($$anchor6,div_1)};if_block(node_6,$$render=>{$$props.contextInfo&&$$render(consequent_2)})}reset(div);var node_8=sibling(div,2);component(node_8,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_8=comment$2(),node_9=first_child(fragment_8);component(node_9,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{AlertDialog_Action($$anchor8,{onclick:()=>handleOpenChange( -!1),children:($$anchor9,$$slotProps4)=>{next$1();var text_5=text$8("Close");append($$anchor9,text_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_8)},$$slots:{default:!0}})}),template_effect(()=>{set_class(div,1,`rounded-lg border px-4 py-3 text-sm ${get$4(badgeClass)}`),set_text(text_2,$$props.message)}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$q=from_html("<!> Empty Files Dete\ -cted",1),root_3$J=from_html("<!> <!>",1),root_6$v=from_html('<li class="font-mono text-sm"> </li>'),root_2$T=from_html('<!> <div class="space-y-3 text-sm"><div class="rounded-lg bg-muted p-3"><div class="mb-2 font-medium">Empty Files:</div> <ul class="list-inside list-disc space-y-1 text-muted-foreground"></ul></div> <div><div class="mb-2 font-medium">What happened:</div> <ul class="list-inside list-disc space-y-1 text-muted-foreground"><li>Empty files cannot be processed or sent to the AI model\ +!1),children:($$anchor9,$$slotProps4)=>{next$1();var text_5=text$8("Close");append($$anchor9,text_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_8)},$$slots:{default:!0}})}),template_effect(()=>{set_class(div,1,`rounded-lg border px-4 py-3 text-sm ${get$3(badgeClass)}`),set_text(text_2,$$props.message)}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$o=from_html("<!> Empty Files Dete\ +cted",1),root_3$A=from_html("<!> <!>",1),root_6$n=from_html('<li class="font-mono text-sm"> </li>'),root_2$P=from_html('<!> <div class="space-y-3 text-sm"><div class="rounded-lg bg-muted p-3"><div class="mb-2 font-medium">Empty Files:</div> <ul class="list-inside list-disc space-y-1 text-muted-foreground"></ul></div> <div><div class="mb-2 font-medium">What happened:</div> <ul class="list-inside list-disc space-y-1 text-muted-foreground"><li>Empty files cannot be processed or sent to the AI model\ </li> <li>These files have been automatically removed from your attachments</li> <li>You can try uploading files with content instead</li></ul></div></div> <!>',1);function DialogEmptyFileAlert($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15);function handleOpenChange(newOpen){open2(newOpen),$$props.onOpenChange?.(newOpen)}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return open2()}, -onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$T(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$J(),node_3=first_child( -fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$q(),node_4=first_child(fragment_4);File_x(node_4,{class:"h-5 w-5 text-destructive"}),next$1(),append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_5=sibling(node_3,2);component(node_5,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{ -children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("The following files are empty and have been removed from your attachments:");append($$anchor9,text2)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),div_1=child(div),ul=sibling(child(div_1),2);each(ul,20,()=>$$props.emptyFiles,fileName=>fileName,($$anchor6,fileName)=>{var li2=root_6$v(),text_1=child(li2,!0);reset(li2),template_effect(()=>set_text(text_1,fileName)),append($$anchor6, +onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$P(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$A(),node_3=first_child( +fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$o(),node_4=first_child(fragment_4);File_x(node_4,{class:"h-5 w-5 text-destructive"}),next$1(),append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_5=sibling(node_3,2);component(node_5,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{ +children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("The following files are empty and have been removed from your attachments:");append($$anchor9,text2)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),div_1=child(div),ul=sibling(child(div_1),2);each(ul,20,()=>$$props.emptyFiles,fileName=>fileName,($$anchor6,fileName)=>{var li2=root_6$n(),text_1=child(li2,!0);reset(li2),template_effect(()=>set_text(text_1,fileName)),append($$anchor6, li2)}),reset(ul),reset(div_1),next$1(2),reset(div);var node_6=sibling(div,2);component(node_6,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_5=comment$2(),node_7=first_child(fragment_5);component(node_7,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{AlertDialog_Action($$anchor8,{onclick:()=>handleOpenChange(!1),children:($$anchor9,$$slotProps4)=>{next$1();var text_2=text$8("Got it");append($$anchor9, -text_2)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$p=from_html("<!> Model Not Available",1),root_3$I=from_html("<!> <!>",1),root_7$q=from_html('<button type="button" class="group flex w-full items-center justify-between gap-2 rounded-sm px-3 py-2 text-left text-sm transition-colors hover:bg-accent hover:text\ --accent-foreground"><span class="min-w-0 truncate font-mono text-xs"> </span> <!></button>'),root_6$u=from_html('<div class="text-sm"><p class="mb-2 font-medium text-muted-foreground">Select an available model:</p> <div class="max-h-48 space-y-1 overflow-y-auto rounded-md border p-1"></div></div>'),root_2$S=from_html('<!> <div class="space-y-3"><div class="rounded-lg border border-amber-500/40 bg-amber-500/10 px-4 py-3 text-sm"><p class="font-medium text-amber-600 dark:text-amber-400">Requested:\ +text_2)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_4$n=from_html("<!> Model Not Available",1),root_3$z=from_html("<!> <!>",1),root_7$m=from_html('<button type="button" class="group flex w-full items-center justify-between gap-2 rounded-sm px-3 py-2 text-left text-sm transition-colors hover:bg-accent hover:text\ +-accent-foreground"><span class="min-w-0 truncate font-mono text-xs"> </span> <!></button>'),root_6$m=from_html('<div class="text-sm"><p class="mb-2 font-medium text-muted-foreground">Select an available model:</p> <div class="max-h-48 space-y-1 overflow-y-auto rounded-md border p-1"></div></div>'),root_2$O=from_html('<!> <div class="space-y-3"><div class="rounded-lg border border-amber-500/40 bg-amber-500/10 px-4 py-3 text-sm"><p class="font-medium text-amber-600 dark:text-amber-400">Requested:\ <code class="rounded bg-amber-500/20 px-1.5 py-0.5"> </code></p></div> <!></div> <!>',1);function DialogModelNotAvailable($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15),availableModels=prop($$props,"availableModels",19,()=>[]);function handleOpenChange(newOpen){open2(newOpen),$$props.onOpenChange?.(newOpen)}function handleSelectModel(model){const url2=new URL(page$1.url);url2.searchParams.set("model",model),handleOpenChange(!1),goto(url2.toString())}var fragment=comment$2(), -node2=first_child(fragment);component(node2,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return open2()},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{class:"max-w-lg",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$S(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header, -($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$I(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$p(),node_4=first_child(fragment_4);Triangle_alert(node_4,{class:"h-5 w-5 text-amber-500"}),next$1(),append($$anchor9,fragment_4)},$$slots:{default:!0}})}); +node2=first_child(fragment);component(node2,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return open2()},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{class:"max-w-lg",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$O(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header, +($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$z(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$n(),node_4=first_child(fragment_4);Triangle_alert(node_4,{class:"h-5 w-5 text-amber-500"}),next$1(),append($$anchor9,fragment_4)},$$slots:{default:!0}})}); var node_5=sibling(node_3,2);component(node_5,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("The requested model could not be found. Select an available model to continue.");append($$anchor9,text2)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),div_1=child(div),p2=child(div_1),code2=sibling(child(p2)),text_1=child(code2, -!0);reset(code2),reset(p2),reset(div_1);var node_6=sibling(div_1,2);{var consequent=$$anchor6=>{var div_2=root_6$u(),div_3=sibling(child(div_2),2);each(div_3,20,availableModels,model=>model,($$anchor7,model)=>{var button=root_7$q();button.__click=()=>handleSelectModel(model);var span=child(button),text_2=child(span,!0);reset(span);var node_7=sibling(span,2);Arrow_right(node_7,{class:"h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100"}),reset(button),template_effect( -()=>set_text(text_2,model)),append($$anchor7,button)}),reset(div_3),reset(div_2),append($$anchor6,div_2)};if_block(node_6,$$render=>{availableModels().length>0&&$$render(consequent)})}reset(div);var node_8=sibling(div,2);component(node_8,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_5=comment$2(),node_9=first_child(fragment_5);component(node_9,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{AlertDialog_Action( -$$anchor8,{onclick:()=>handleOpenChange(!1),children:($$anchor9,$$slotProps4)=>{next$1();var text_3=text$8("Cancel");append($$anchor9,text_3)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)},$$slots:{default:!0}})}),template_effect(()=>set_text(text_1,$$props.modelName)),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}delegate(["click"]);var root_4$o=from_html("<!> <!>",1),root_3$H=from_html("<!>\ - <!>",1),root_2$R=from_html("<!> <!>",1);function DialogConversationSelection($$anchor,$$props){push$1($$props,!0);let messageCountMap=prop($$props,"messageCountMap",19,()=>new Map),open2=prop($$props,"open",15,!1),conversationSelectionRef=state$1(void 0),previousOpen=state$1(!1);user_effect(()=>{open2()&&!get$4(previousOpen)&&get$4(conversationSelectionRef)?get$4(conversationSelectionRef).reset():!open2()&&get$4(previousOpen)&&$$props.onCancel(),set$1(previousOpen,open2(),!0)});var fragment=comment$2(), -node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Portal$1,($$anchor4,Dialog_Portal)=>{Dialog_Portal($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$R(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_overlay,($$anchor6,Dialog_Overlay)=>{Dialog_Overlay( -$$anchor6,{class:"z-[1000000]"})});var node_3=sibling(node_2,2);component(node_3,()=>Dialog_content,($$anchor6,Dialog_Content)=>{Dialog_Content($$anchor6,{class:"z-[1000001] max-w-2xl",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$H(),node_4=first_child(fragment_3);component(node_4,()=>Dialog_header,($$anchor8,Dialog_Header)=>{Dialog_Header($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$o(),node_5=first_child(fragment_4);component(node_5,()=>Dialog_title,($$anchor10,Dialog_Title)=>{ +!0);reset(code2),reset(p2),reset(div_1);var node_6=sibling(div_1,2);{var consequent=$$anchor6=>{var div_2=root_6$m(),div_3=sibling(child(div_2),2);each(div_3,20,availableModels,model=>model,($$anchor7,model)=>{var button=root_7$m(),span=child(button),text_2=child(span,!0);reset(span);var node_7=sibling(span,2);Arrow_right(node_7,{class:"h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100"}),reset(button),template_effect(()=>set_text(text_2,model)),delegated( +"click",button,()=>handleSelectModel(model)),append($$anchor7,button)}),reset(div_3),reset(div_2),append($$anchor6,div_2)};if_block(node_6,$$render=>{availableModels().length>0&&$$render(consequent)})}reset(div);var node_8=sibling(div,2);component(node_8,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_5=comment$2(),node_9=first_child(fragment_5);component(node_9,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{ +AlertDialog_Action($$anchor8,{onclick:()=>handleOpenChange(!1),children:($$anchor9,$$slotProps4)=>{next$1();var text_3=text$8("Cancel");append($$anchor9,text_3)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)},$$slots:{default:!0}})}),template_effect(()=>set_text(text_1,$$props.modelName)),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}delegate(["click"]);var root_4$m=from_html("<!> <!>",1),root_3$y=from_html( +"<!> <!>",1),root_2$N=from_html("<!> <!>",1);function DialogConversationSelection($$anchor,$$props){push$1($$props,!0);let messageCountMap=prop($$props,"messageCountMap",19,()=>new Map),open2=prop($$props,"open",15,!1),conversationSelectionRef=state$1(void 0),previousOpen=state$1(!1);user_effect(()=>{open2()&&!get$3(previousOpen)&&get$3(conversationSelectionRef)?get$3(conversationSelectionRef).reset():!open2()&&get$3(previousOpen)&&$$props.onCancel(),set$1(previousOpen,open2(),!0)});var fragment=comment$2(), +node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Portal$1,($$anchor4,Dialog_Portal)=>{Dialog_Portal($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$N(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_overlay,($$anchor6,Dialog_Overlay)=>{Dialog_Overlay( +$$anchor6,{class:"z-[1000000]"})});var node_3=sibling(node_2,2);component(node_3,()=>Dialog_content,($$anchor6,Dialog_Content)=>{Dialog_Content($$anchor6,{class:"z-[1000001] max-w-2xl",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$y(),node_4=first_child(fragment_3);component(node_4,()=>Dialog_header,($$anchor8,Dialog_Header)=>{Dialog_Header($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$m(),node_5=first_child(fragment_4);component(node_5,()=>Dialog_title,($$anchor10,Dialog_Title)=>{ Dialog_Title($$anchor10,{children:($$anchor11,$$slotProps5)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,`Select Conversations to ${$$props.mode==="export"?"Export":"Import"}`)),append($$anchor11,text2)},$$slots:{default:!0}})});var node_6=sibling(node_5,2);component(node_6,()=>Dialog_description,($$anchor10,Dialog_Description)=>{Dialog_Description($$anchor10,{children:($$anchor11,$$slotProps5)=>{var fragment_6=comment$2(),node_7=first_child(fragment_6);{var consequent=$$anchor12=>{ var text_1=text$8(`Choose which conversations you want to export. Selected conversations will be downloaded as a JSON file.`);append($$anchor12,text_1)},alternate=$$anchor12=>{var text_2=text$8(`Choose which conversations you want to import. Selected conversations will be merged - with your existing conversations.`);append($$anchor12,text_2)};if_block(node_7,$$render=>{$$props.mode==="export"?$$render(consequent):$$render(alternate,!1)})}append($$anchor11,fragment_6)},$$slots:{default:!0}})}),append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_8=sibling(node_4,2);bind_this(ConversationSelection(node_8,{get conversations(){return $$props.conversations},get messageCountMap(){return messageCountMap()},get mode(){return $$props.mode},get onCancel(){return $$props. -onCancel},get onConfirm(){return $$props.onConfirm}}),$$value=>set$1(conversationSelectionRef,$$value,!0),()=>get$4(conversationSelectionRef)),append($$anchor7,fragment_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root$1j=from_html('<div data-slot="table-container" class="relative w-full overflow-x-auto"><table><!></table></div>');function Table($$anchor,$$props){push$1( -$$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1j(),table2=child(div);attribute_effect(table2,$0=>({"data-slot":"table",class:$0,...restProps}),[()=>cn$1("w-full caption-bottom text-sm",$$props.class)]);var node2=child(table2);snippet(node2,()=>$$props.children??noop$3),reset(table2),bind_this(table2,$$value=>ref2($$value),()=>ref2()),reset(div),append($$anchor,div),pop()}var root$1i=from_html( -"<tbody><!></tbody>");function Table_body($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var tbody2=root$1i();attribute_effect(tbody2,$0=>({"data-slot":"table-body",class:$0,...restProps}),[()=>cn$1("[&_tr:last-child]:border-0",$$props.class)]);var node2=child(tbody2);snippet(node2,()=>$$props.children??noop$3),reset(tbody2),bind_this(tbody2,$$value=>ref2($$value),()=>ref2()),append( -$$anchor,tbody2),pop()}var root$1h=from_html("<td><!></td>");function Table_cell($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var td=root$1h();attribute_effect(td,$0=>({"data-slot":"table-cell",class:$0,...restProps}),[()=>cn$1("bg-clip-padding p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0",$$props.class)]);var node2=child(td);snippet(node2,()=>$$props.children?? -noop$3),reset(td),bind_this(td,$$value=>ref2($$value),()=>ref2()),append($$anchor,td),pop()}var root$1g=from_html("<th><!></th>");function Table_head($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var th=root$1g();attribute_effect(th,$0=>({"data-slot":"table-head",class:$0,...restProps}),[()=>cn$1("h-10 bg-clip-padding px-2 text-left align-middle font-medium whitespace-nowrap text-\ -foreground [&:has([role=checkbox])]:pe-0",$$props.class)]);var node2=child(th);snippet(node2,()=>$$props.children??noop$3),reset(th),bind_this(th,$$value=>ref2($$value),()=>ref2()),append($$anchor,th),pop()}var root$1f=from_html("<thead><!></thead>");function Table_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var thead2=root$1f();attribute_effect(thead2,$0=>({"data-slot":"\ -table-header",class:$0,...restProps}),[()=>cn$1("[&_tr]:border-b",$$props.class)]);var node2=child(thead2);snippet(node2,()=>$$props.children??noop$3),reset(thead2),bind_this(thead2,$$value=>ref2($$value),()=>ref2()),append($$anchor,thead2),pop()}var root$1e=from_html("<tr><!></tr>");function Table_row($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var tr2=root$1e();attribute_effect( -tr2,$0=>({"data-slot":"table-row",class:$0,...restProps}),[()=>cn$1("border-b transition-colors data-[state=selected]:bg-muted hover:[&,&>svelte-css-wrapper]:[&>th,td]:bg-muted/50",$$props.class)]);var node2=child(tr2);snippet(node2,()=>$$props.children??noop$3),reset(tr2),bind_this(tr2,$$value=>ref2($$value),()=>ref2()),append($$anchor,tr2),pop()}var root_3$G=from_html("<!> <!>",1),root_6$t=from_html('<div class="flex items-center justify-center py-8"><div class="text-sm text-muted-foreground">\ -Loading model information...</div></div>'),root_14$8=from_html('<div class="inline-flex items-center gap-2"><span class="resizable-text-container min-w-0 flex-1 truncate"> </span> <!></div>'),root_12$7=from_html("<!> <!>",1),root_18$5=from_html('<span class="resizable-text-container min-w-0 flex-1 truncate"> </span> <!>',1),root_16$7=from_html("<!> <!>",1),root_20$9=from_html("<!> <!>",1),root_24$2=from_html("<!> <!>",1),root_28$3=from_html("<!> <!>",1),root_32$1=from_html("<!> <!>",1),root_36=from_html( -"<!> <!>",1),root_40$1=from_html("<!> <!>",1),root_44$1=from_html("<!> <!>",1),root_48=from_html("<!> <!>",1),root_51=from_html("<!> <!>",1),root_57=from_html('<div class="flex flex-wrap gap-1"><!></div>'),root_55=from_html("<!> <!>",1),root_58=from_html("<!> <!>",1),root_64=from_html('<div class="rounded-md bg-muted p-4"><pre class="font-mono text-xs whitespace-pre-wrap"> </pre></div>'),root_62=from_html("<!> <!>",1),root_15$5=from_html("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1),root_10$g=from_html( -"<!> <!>",1),root_66=from_html('<div class="flex items-center justify-center py-8"><div class="text-sm text-muted-foreground">No model information available</div></div>'),root_2$Q=from_html(`<style>@container (max-width: 56rem) { + with your existing conversations.`);append($$anchor12,text_2)};if_block(node_7,$$render=>{$$props.mode==="export"?$$render(consequent):$$render(alternate,-1)})}append($$anchor11,fragment_6)},$$slots:{default:!0}})}),append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_8=sibling(node_4,2);bind_this(ConversationSelection(node_8,{get conversations(){return $$props.conversations},get messageCountMap(){return messageCountMap()},get mode(){return $$props.mode},get onCancel(){return $$props. +onCancel},get onConfirm(){return $$props.onConfirm}}),$$value=>set$1(conversationSelectionRef,$$value,!0),()=>get$3(conversationSelectionRef)),append($$anchor7,fragment_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root$1b=from_html('<div data-slot="table-container" class="relative w-full overflow-x-auto"><table><!></table></div>');function Table($$anchor,$$props){push$1( +$$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1b(),table2=child(div);attribute_effect(table2,$0=>({"data-slot":"table",class:$0,...restProps}),[()=>cn$1("w-full caption-bottom text-sm",$$props.class)]);var node2=child(table2);snippet(node2,()=>$$props.children??noop$3),reset(table2),bind_this(table2,$$value=>ref2($$value),()=>ref2()),reset(div),append($$anchor,div),pop()}var root$1a=from_html( +"<tbody><!></tbody>");function Table_body($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var tbody2=root$1a();attribute_effect(tbody2,$0=>({"data-slot":"table-body",class:$0,...restProps}),[()=>cn$1("[&_tr:last-child]:border-0",$$props.class)]);var node2=child(tbody2);snippet(node2,()=>$$props.children??noop$3),reset(tbody2),bind_this(tbody2,$$value=>ref2($$value),()=>ref2()),append( +$$anchor,tbody2),pop()}var root$19=from_html("<td><!></td>");function Table_cell($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var td=root$19();attribute_effect(td,$0=>({"data-slot":"table-cell",class:$0,...restProps}),[()=>cn$1("bg-clip-padding p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pe-0",$$props.class)]);var node2=child(td);snippet(node2,()=>$$props.children?? +noop$3),reset(td),bind_this(td,$$value=>ref2($$value),()=>ref2()),append($$anchor,td),pop()}var root$18=from_html("<th><!></th>");function Table_head($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var th=root$18();attribute_effect(th,$0=>({"data-slot":"table-head",class:$0,...restProps}),[()=>cn$1("h-10 bg-clip-padding px-2 text-left align-middle font-medium whitespace-nowrap text-\ +foreground [&:has([role=checkbox])]:pe-0",$$props.class)]);var node2=child(th);snippet(node2,()=>$$props.children??noop$3),reset(th),bind_this(th,$$value=>ref2($$value),()=>ref2()),append($$anchor,th),pop()}var root$17=from_html("<thead><!></thead>");function Table_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var thead2=root$17();attribute_effect(thead2,$0=>({"data-slot":"\ +table-header",class:$0,...restProps}),[()=>cn$1("[&_tr]:border-b",$$props.class)]);var node2=child(thead2);snippet(node2,()=>$$props.children??noop$3),reset(thead2),bind_this(thead2,$$value=>ref2($$value),()=>ref2()),append($$anchor,thead2),pop()}var root$16=from_html("<tr><!></tr>");function Table_row($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var tr2=root$16();attribute_effect( +tr2,$0=>({"data-slot":"table-row",class:$0,...restProps}),[()=>cn$1("border-b transition-colors data-[state=selected]:bg-muted hover:[&,&>svelte-css-wrapper]:[&>th,td]:bg-muted/50",$$props.class)]);var node2=child(tr2);snippet(node2,()=>$$props.children??noop$3),reset(tr2),bind_this(tr2,$$value=>ref2($$value),()=>ref2()),append($$anchor,tr2),pop()}var root_3$x=from_html("<!> <!>",1),root_6$l=from_html('<div class="flex items-center justify-center py-8"><div class="text-sm text-muted-foreground">\ +Loading model information...</div></div>'),root_13$9=from_html('<div class="inline-flex items-center gap-2"><span class="resizable-text-container min-w-0 flex-1 truncate"> </span> <!></div>'),root_11$b=from_html("<!> <!>",1),root_17$9=from_html('<span class="resizable-text-container min-w-0 flex-1 truncate"> </span> <!>',1),root_15$9=from_html("<!> <!>",1),root_19$8=from_html("<!> <!>",1),root_23$2=from_html("<!> <!>",1),root_27$2=from_html("<!> <!>",1),root_31=from_html("<!> <!>",1),root_35=from_html( +"<!> <!>",1),root_39=from_html("<!> <!>",1),root_43=from_html("<!> <!>",1),root_47=from_html("<!> <!>",1),root_50=from_html("<!> <!>",1),root_56=from_html('<div class="flex flex-wrap gap-1"><!></div>'),root_54=from_html("<!> <!>",1),root_57=from_html("<!> <!>",1),root_63=from_html('<div class="rounded-md bg-muted p-4"><pre class="font-mono text-xs whitespace-pre-wrap"> </pre></div>'),root_61=from_html("<!> <!>",1),root_14$6=from_html("<!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!>",1),root_9$g=from_html( +"<!> <!>",1),root_64=from_html('<div class="flex items-center justify-center py-8"><div class="text-sm text-muted-foreground">No model information available</div></div>'),root_2$M=from_html(`<style>@container (max-width: 56rem) { .resizable-text-container { max-width: calc(100vw - var(--threshold)); } - }</style> <!> <div class="space-y-6 py-4"><!></div>`,1);function DialogModelInformation($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15),modelId=prop($$props,"modelId",3,null),isRouter=user_derived(()=>serverStore.isRouterMode),routerModelProps=state$1(null),isLoadingRouterProps=state$1(!1),serverProps2=user_derived(()=>get$4(isRouter)&&modelId()?get$4(routerModelProps):serverStore.props),modelName=user_derived(()=>get$4(isRouter)&&modelId()?modelId():modelsStore.singleModelName), -models=user_derived(modelOptions),isLoadingModels=user_derived(modelsLoading),firstModel=user_derived(()=>get$4(isRouter)&&modelId()?get$4(models).find(m=>m.model===modelId())??null:get$4(models)[0]??null),modalities=user_derived(()=>get$4(firstModel)?.id?modelsStore.getModelModalitiesArray(get$4(firstModel).id):[]);user_effect(()=>{open2()&&get$4(models).length===0&&modelsStore.fetch()}),user_effect(()=>{open2()&&get$4(isRouter)&&modelId()&&(set$1(isLoadingRouterProps,!0),modelsStore.fetchModelProps( + }</style> <!> <div class="space-y-6 py-4"><!></div>`,1);function DialogModelInformation($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15),modelId=prop($$props,"modelId",3,null),isRouter=user_derived(()=>serverStore.isRouterMode),routerModelProps=state$1(null),isLoadingRouterProps=state$1(!1),serverProps2=user_derived(()=>get$3(isRouter)&&modelId()?get$3(routerModelProps):serverStore.props),modelName=user_derived(()=>get$3(isRouter)&&modelId()?modelId():modelsStore.singleModelName), +models=user_derived(modelOptions),isLoadingModels=user_derived(modelsLoading),firstModel=user_derived(()=>get$3(isRouter)&&modelId()?get$3(models).find(m=>m.model===modelId())??null:get$3(models)[0]??null),modalities=user_derived(()=>get$3(firstModel)?.id?modelsStore.getModelModalitiesArray(get$3(firstModel).id):[]);user_effect(()=>{open2()&&get$3(models).length===0&&modelsStore.fetch()}),user_effect(()=>{open2()&&get$3(isRouter)&&modelId()&&(set$1(isLoadingRouterProps,!0),modelsStore.fetchModelProps( modelId()).then(props=>{set$1(routerModelProps,props,!0)}).catch(()=>{set$1(routerModelProps,null)}).finally(()=>{set$1(isLoadingRouterProps,!1)})),open2()||set$1(routerModelProps,null)});var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get onOpenChange(){return $$props.onOpenChange},get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child( -fragment_1);component(node_1,()=>Dialog_content,($$anchor4,Dialog_Content)=>{Dialog_Content($$anchor4,{class:"@container z-9999 !max-h-[80dvh] !max-w-[60rem] max-w-full",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$Q(),node_2=sibling(first_child(fragment_2),2);component(node_2,()=>Dialog_header,($$anchor6,Dialog_Header)=>{Dialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$G(),node_3=first_child(fragment_3);component(node_3,()=>Dialog_title,($$anchor8,Dialog_Title)=>{ +fragment_1);component(node_1,()=>Dialog_content,($$anchor4,Dialog_Content)=>{Dialog_Content($$anchor4,{class:"@container z-9999 !max-h-[80dvh] !max-w-[60rem] max-w-full",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$M(),node_2=sibling(first_child(fragment_2),2);component(node_2,()=>Dialog_header,($$anchor6,Dialog_Header)=>{Dialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$x(),node_3=first_child(fragment_3);component(node_3,()=>Dialog_title,($$anchor8,Dialog_Title)=>{ Dialog_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("Model Information");append($$anchor9,text2)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Dialog_description,($$anchor8,Dialog_Description)=>{Dialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8("Current model details and capabilities");append($$anchor9,text_1)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})}); -var div=sibling(node_2,2),node_5=child(div);{var consequent=$$anchor6=>{var div_1=root_6$t();append($$anchor6,div_1)},alternate_2=$$anchor6=>{var fragment_4=comment$2(),node_6=first_child(fragment_4);{var consequent_11=$$anchor7=>{const modelMeta=user_derived(()=>get$4(firstModel).meta);var fragment_5=comment$2(),node_7=first_child(fragment_5);{var consequent_10=$$anchor8=>{var fragment_6=comment$2(),node_8=first_child(fragment_6);component(node_8,()=>Table,($$anchor9,Table_Root)=>{Table_Root($$anchor9, -{children:($$anchor10,$$slotProps3)=>{var fragment_7=root_10$g(),node_9=first_child(fragment_7);component(node_9,()=>Table_header,($$anchor11,Table_Header)=>{Table_Header($$anchor11,{children:($$anchor12,$$slotProps4)=>{var fragment_8=comment$2(),node_10=first_child(fragment_8);component(node_10,()=>Table_row,($$anchor13,Table_Row)=>{Table_Row($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_9=root_12$7(),node_11=first_child(fragment_9);component(node_11,()=>Table_head,($$anchor15,Table_Head)=>{ -Table_Head($$anchor15,{class:"w-[10rem]",children:($$anchor16,$$slotProps6)=>{next$1();var text_2=text$8("Model");append($$anchor16,text_2)},$$slots:{default:!0}})});var node_12=sibling(node_11,2);component(node_12,()=>Table_head,($$anchor15,Table_Head_1)=>{Table_Head_1($$anchor15,{children:($$anchor16,$$slotProps6)=>{var div_2=root_14$8(),span=child(div_2);set_style(span,"",{},{"--threshold":"12rem"});var text_3=child(span,!0);reset(span);var node_13=sibling(span,2);{let $0=user_derived(()=>get$4( -modelName)||""),$1=user_derived(()=>!!get$4(modelName));ActionIconCopyToClipboard(node_13,{get text(){return get$4($0)},get canCopy(){return get$4($1)},ariaLabel:"Copy model name to clipboard"})}reset(div_2),template_effect(()=>set_text(text_3,get$4(modelName))),append($$anchor16,div_2)},$$slots:{default:!0}})}),append($$anchor14,fragment_9)},$$slots:{default:!0}})}),append($$anchor12,fragment_8)},$$slots:{default:!0}})});var node_14=sibling(node_9,2);component(node_14,()=>Table_body,($$anchor11,Table_Body)=>{ -Table_Body($$anchor11,{children:($$anchor12,$$slotProps4)=>{var fragment_10=root_15$5(),node_15=first_child(fragment_10);component(node_15,()=>Table_row,($$anchor13,Table_Row_1)=>{Table_Row_1($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_11=root_16$7(),node_16=first_child(fragment_11);component(node_16,()=>Table_cell,($$anchor15,Table_Cell)=>{Table_Cell($$anchor15,{class:"h-10 align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_4=text$8("File Path");append( -$$anchor16,text_4)},$$slots:{default:!0}})});var node_17=sibling(node_16,2);component(node_17,()=>Table_cell,($$anchor15,Table_Cell_1)=>{Table_Cell_1($$anchor15,{class:"inline-flex h-10 items-center gap-2 align-middle font-mono text-xs",children:($$anchor16,$$slotProps6)=>{var fragment_12=root_18$5(),span_1=first_child(fragment_12);set_style(span_1,"",{},{"--threshold":"14rem"});var text_5=child(span_1,!0);reset(span_1);var node_18=sibling(span_1,2);ActionIconCopyToClipboard(node_18,{get text(){ -return get$4(serverProps2).model_path},ariaLabel:"Copy model path to clipboard"}),template_effect(()=>set_text(text_5,get$4(serverProps2).model_path)),append($$anchor16,fragment_12)},$$slots:{default:!0}})}),append($$anchor14,fragment_11)},$$slots:{default:!0}})});var node_19=sibling(node_15,2);{var consequent_1=$$anchor13=>{var fragment_13=comment$2(),node_20=first_child(fragment_13);component(node_20,()=>Table_row,($$anchor14,Table_Row_2)=>{Table_Row_2($$anchor14,{children:($$anchor15,$$slotProps5)=>{ -var fragment_14=root_20$9(),node_21=first_child(fragment_14);component(node_21,()=>Table_cell,($$anchor16,Table_Cell_2)=>{Table_Cell_2($$anchor16,{class:"h-10 align-middle font-medium",children:($$anchor17,$$slotProps6)=>{next$1();var text_6=text$8("Context Size");append($$anchor17,text_6)},$$slots:{default:!0}})});var node_22=sibling(node_21,2);component(node_22,()=>Table_cell,($$anchor16,Table_Cell_3)=>{Table_Cell_3($$anchor16,{children:($$anchor17,$$slotProps6)=>{next$1();var text_7=text$8(); -template_effect($0=>set_text(text_7,`${$0??""} tokens`),[()=>formatNumber(get$4(serverProps2).default_generation_settings.n_ctx)]),append($$anchor17,text_7)},$$slots:{default:!0}})}),append($$anchor15,fragment_14)},$$slots:{default:!0}})}),append($$anchor13,fragment_13)},alternate=$$anchor13=>{var fragment_16=comment$2(),node_23=first_child(fragment_16);component(node_23,()=>Table_row,($$anchor14,Table_Row_3)=>{Table_Row_3($$anchor14,{children:($$anchor15,$$slotProps5)=>{var fragment_17=root_24$2(), -node_24=first_child(fragment_17);component(node_24,()=>Table_cell,($$anchor16,Table_Cell_4)=>{Table_Cell_4($$anchor16,{class:"h-10 align-middle font-medium text-red-500",children:($$anchor17,$$slotProps6)=>{next$1();var text_8=text$8("Context Size");append($$anchor17,text_8)},$$slots:{default:!0}})});var node_25=sibling(node_24,2);component(node_25,()=>Table_cell,($$anchor16,Table_Cell_5)=>{Table_Cell_5($$anchor16,{class:"text-red-500",children:($$anchor17,$$slotProps6)=>{next$1();var text_9=text$8( -"Not available");append($$anchor17,text_9)},$$slots:{default:!0}})}),append($$anchor15,fragment_17)},$$slots:{default:!0}})}),append($$anchor13,fragment_16)};if_block(node_19,$$render=>{get$4(serverProps2)?.default_generation_settings?.n_ctx?$$render(consequent_1):$$render(alternate,!1)})}var node_26=sibling(node_19,2);{var consequent_2=$$anchor13=>{var fragment_18=comment$2(),node_27=first_child(fragment_18);component(node_27,()=>Table_row,($$anchor14,Table_Row_4)=>{Table_Row_4($$anchor14,{children:($$anchor15,$$slotProps5)=>{ -var fragment_19=root_28$3(),node_28=first_child(fragment_19);component(node_28,()=>Table_cell,($$anchor16,Table_Cell_6)=>{Table_Cell_6($$anchor16,{class:"h-10 align-middle font-medium",children:($$anchor17,$$slotProps6)=>{next$1();var text_10=text$8("Training Context");append($$anchor17,text_10)},$$slots:{default:!0}})});var node_29=sibling(node_28,2);component(node_29,()=>Table_cell,($$anchor16,Table_Cell_7)=>{Table_Cell_7($$anchor16,{children:($$anchor17,$$slotProps6)=>{next$1();var text_11=text$8(); -template_effect($0=>set_text(text_11,`${$0??""} tokens`),[()=>formatNumber(get$4(modelMeta).n_ctx_train)]),append($$anchor17,text_11)},$$slots:{default:!0}})}),append($$anchor15,fragment_19)},$$slots:{default:!0}})}),append($$anchor13,fragment_18)};if_block(node_26,$$render=>{get$4(modelMeta)?.n_ctx_train&&$$render(consequent_2)})}var node_30=sibling(node_26,2);{var consequent_3=$$anchor13=>{var fragment_21=comment$2(),node_31=first_child(fragment_21);component(node_31,()=>Table_row,($$anchor14,Table_Row_5)=>{ -Table_Row_5($$anchor14,{children:($$anchor15,$$slotProps5)=>{var fragment_22=root_32$1(),node_32=first_child(fragment_22);component(node_32,()=>Table_cell,($$anchor16,Table_Cell_8)=>{Table_Cell_8($$anchor16,{class:"h-10 align-middle font-medium",children:($$anchor17,$$slotProps6)=>{next$1();var text_12=text$8("Model Size");append($$anchor17,text_12)},$$slots:{default:!0}})});var node_33=sibling(node_32,2);component(node_33,()=>Table_cell,($$anchor16,Table_Cell_9)=>{Table_Cell_9($$anchor16,{children:($$anchor17,$$slotProps6)=>{ -next$1();var text_13=text$8();template_effect($0=>set_text(text_13,$0),[()=>formatFileSize(get$4(modelMeta).size)]),append($$anchor17,text_13)},$$slots:{default:!0}})}),append($$anchor15,fragment_22)},$$slots:{default:!0}})}),append($$anchor13,fragment_21)};if_block(node_30,$$render=>{get$4(modelMeta)?.size&&$$render(consequent_3)})}var node_34=sibling(node_30,2);{var consequent_4=$$anchor13=>{var fragment_24=comment$2(),node_35=first_child(fragment_24);component(node_35,()=>Table_row,($$anchor14,Table_Row_6)=>{ -Table_Row_6($$anchor14,{children:($$anchor15,$$slotProps5)=>{var fragment_25=root_36(),node_36=first_child(fragment_25);component(node_36,()=>Table_cell,($$anchor16,Table_Cell_10)=>{Table_Cell_10($$anchor16,{class:"h-10 align-middle font-medium",children:($$anchor17,$$slotProps6)=>{next$1();var text_14=text$8("Parameters");append($$anchor17,text_14)},$$slots:{default:!0}})});var node_37=sibling(node_36,2);component(node_37,()=>Table_cell,($$anchor16,Table_Cell_11)=>{Table_Cell_11($$anchor16,{children:($$anchor17,$$slotProps6)=>{ -next$1();var text_15=text$8();template_effect($0=>set_text(text_15,$0),[()=>formatParameters(get$4(modelMeta).n_params)]),append($$anchor17,text_15)},$$slots:{default:!0}})}),append($$anchor15,fragment_25)},$$slots:{default:!0}})}),append($$anchor13,fragment_24)};if_block(node_34,$$render=>{get$4(modelMeta)?.n_params&&$$render(consequent_4)})}var node_38=sibling(node_34,2);{var consequent_5=$$anchor13=>{var fragment_27=comment$2(),node_39=first_child(fragment_27);component(node_39,()=>Table_row, -($$anchor14,Table_Row_7)=>{Table_Row_7($$anchor14,{children:($$anchor15,$$slotProps5)=>{var fragment_28=root_40$1(),node_40=first_child(fragment_28);component(node_40,()=>Table_cell,($$anchor16,Table_Cell_12)=>{Table_Cell_12($$anchor16,{class:"align-middle font-medium",children:($$anchor17,$$slotProps6)=>{next$1();var text_16=text$8("Embedding Size");append($$anchor17,text_16)},$$slots:{default:!0}})});var node_41=sibling(node_40,2);component(node_41,()=>Table_cell,($$anchor16,Table_Cell_13)=>{Table_Cell_13( -$$anchor16,{children:($$anchor17,$$slotProps6)=>{next$1();var text_17=text$8();template_effect($0=>set_text(text_17,$0),[()=>formatNumber(get$4(modelMeta).n_embd)]),append($$anchor17,text_17)},$$slots:{default:!0}})}),append($$anchor15,fragment_28)},$$slots:{default:!0}})}),append($$anchor13,fragment_27)};if_block(node_38,$$render=>{get$4(modelMeta)?.n_embd&&$$render(consequent_5)})}var node_42=sibling(node_38,2);{var consequent_6=$$anchor13=>{var fragment_30=comment$2(),node_43=first_child(fragment_30); -component(node_43,()=>Table_row,($$anchor14,Table_Row_8)=>{Table_Row_8($$anchor14,{children:($$anchor15,$$slotProps5)=>{var fragment_31=root_44$1(),node_44=first_child(fragment_31);component(node_44,()=>Table_cell,($$anchor16,Table_Cell_14)=>{Table_Cell_14($$anchor16,{class:"align-middle font-medium",children:($$anchor17,$$slotProps6)=>{next$1();var text_18=text$8("Vocabulary Size");append($$anchor17,text_18)},$$slots:{default:!0}})});var node_45=sibling(node_44,2);component(node_45,()=>Table_cell, -($$anchor16,Table_Cell_15)=>{Table_Cell_15($$anchor16,{children:($$anchor17,$$slotProps6)=>{next$1();var text_19=text$8();template_effect($0=>set_text(text_19,`${$0??""} tokens`),[()=>formatNumber(get$4(modelMeta).n_vocab)]),append($$anchor17,text_19)},$$slots:{default:!0}})}),append($$anchor15,fragment_31)},$$slots:{default:!0}})}),append($$anchor13,fragment_30)};if_block(node_42,$$render=>{get$4(modelMeta)?.n_vocab&&$$render(consequent_6)})}var node_46=sibling(node_42,2);{var consequent_7=$$anchor13=>{ -var fragment_33=comment$2(),node_47=first_child(fragment_33);component(node_47,()=>Table_row,($$anchor14,Table_Row_9)=>{Table_Row_9($$anchor14,{children:($$anchor15,$$slotProps5)=>{var fragment_34=root_48(),node_48=first_child(fragment_34);component(node_48,()=>Table_cell,($$anchor16,Table_Cell_16)=>{Table_Cell_16($$anchor16,{class:"align-middle font-medium",children:($$anchor17,$$slotProps6)=>{next$1();var text_20=text$8("Vocabulary Type");append($$anchor17,text_20)},$$slots:{default:!0}})});var node_49=sibling( -node_48,2);component(node_49,()=>Table_cell,($$anchor16,Table_Cell_17)=>{Table_Cell_17($$anchor16,{class:"align-middle capitalize",children:($$anchor17,$$slotProps6)=>{next$1();var text_21=text$8();template_effect(()=>set_text(text_21,get$4(modelMeta).vocab_type)),append($$anchor17,text_21)},$$slots:{default:!0}})}),append($$anchor15,fragment_34)},$$slots:{default:!0}})}),append($$anchor13,fragment_33)};if_block(node_46,$$render=>{get$4(modelMeta)?.vocab_type&&$$render(consequent_7)})}var node_50=sibling( -node_46,2);component(node_50,()=>Table_row,($$anchor13,Table_Row_10)=>{Table_Row_10($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_36=root_51(),node_51=first_child(fragment_36);component(node_51,()=>Table_cell,($$anchor15,Table_Cell_18)=>{Table_Cell_18($$anchor15,{class:"align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_22=text$8("Parallel Slots");append($$anchor16,text_22)},$$slots:{default:!0}})});var node_52=sibling(node_51,2);component(node_52,()=>Table_cell, -($$anchor15,Table_Cell_19)=>{Table_Cell_19($$anchor15,{children:($$anchor16,$$slotProps6)=>{next$1();var text_23=text$8();template_effect(()=>set_text(text_23,get$4(serverProps2).total_slots)),append($$anchor16,text_23)},$$slots:{default:!0}})}),append($$anchor14,fragment_36)},$$slots:{default:!0}})});var node_53=sibling(node_50,2);{var consequent_8=$$anchor13=>{var fragment_38=comment$2(),node_54=first_child(fragment_38);component(node_54,()=>Table_row,($$anchor14,Table_Row_11)=>{Table_Row_11($$anchor14, -{children:($$anchor15,$$slotProps5)=>{var fragment_39=root_55(),node_55=first_child(fragment_39);component(node_55,()=>Table_cell,($$anchor16,Table_Cell_20)=>{Table_Cell_20($$anchor16,{class:"align-middle font-medium",children:($$anchor17,$$slotProps6)=>{next$1();var text_24=text$8("Modalities");append($$anchor17,text_24)},$$slots:{default:!0}})});var node_56=sibling(node_55,2);component(node_56,()=>Table_cell,($$anchor16,Table_Cell_21)=>{Table_Cell_21($$anchor16,{children:($$anchor17,$$slotProps6)=>{ -var div_3=root_57(),node_57=child(div_3);BadgeModality(node_57,{get modalities(){return get$4(modalities)}}),reset(div_3),append($$anchor17,div_3)},$$slots:{default:!0}})}),append($$anchor15,fragment_39)},$$slots:{default:!0}})}),append($$anchor13,fragment_38)};if_block(node_53,$$render=>{get$4(modalities).length>0&&$$render(consequent_8)})}var node_58=sibling(node_53,2);component(node_58,()=>Table_row,($$anchor13,Table_Row_12)=>{Table_Row_12($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_40=root_58(), -node_59=first_child(fragment_40);component(node_59,()=>Table_cell,($$anchor15,Table_Cell_22)=>{Table_Cell_22($$anchor15,{class:"align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_25=text$8("Build Info");append($$anchor16,text_25)},$$slots:{default:!0}})});var node_60=sibling(node_59,2);component(node_60,()=>Table_cell,($$anchor15,Table_Cell_23)=>{Table_Cell_23($$anchor15,{class:"align-middle font-mono text-xs",children:($$anchor16,$$slotProps6)=>{next$1();var text_26=text$8(); -template_effect(()=>set_text(text_26,get$4(serverProps2).build_info)),append($$anchor16,text_26)},$$slots:{default:!0}})}),append($$anchor14,fragment_40)},$$slots:{default:!0}})});var node_61=sibling(node_58,2);{var consequent_9=$$anchor13=>{var fragment_42=comment$2(),node_62=first_child(fragment_42);component(node_62,()=>Table_row,($$anchor14,Table_Row_13)=>{Table_Row_13($$anchor14,{children:($$anchor15,$$slotProps5)=>{var fragment_43=root_62(),node_63=first_child(fragment_43);component(node_63, -()=>Table_cell,($$anchor16,Table_Cell_24)=>{Table_Cell_24($$anchor16,{class:"align-middle font-medium",children:($$anchor17,$$slotProps6)=>{next$1();var text_27=text$8("Chat Template");append($$anchor17,text_27)},$$slots:{default:!0}})});var node_64=sibling(node_63,2);component(node_64,()=>Table_cell,($$anchor16,Table_Cell_25)=>{Table_Cell_25($$anchor16,{class:"py-10",children:($$anchor17,$$slotProps6)=>{var div_4=root_64(),pre=child(div_4),text_28=child(pre,!0);reset(pre),reset(div_4),template_effect( -()=>set_text(text_28,get$4(serverProps2).chat_template)),append($$anchor17,div_4)},$$slots:{default:!0}})}),append($$anchor15,fragment_43)},$$slots:{default:!0}})}),append($$anchor13,fragment_42)};if_block(node_61,$$render=>{get$4(serverProps2).chat_template&&$$render(consequent_9)})}append($$anchor12,fragment_10)},$$slots:{default:!0}})}),append($$anchor10,fragment_7)},$$slots:{default:!0}})}),append($$anchor8,fragment_6)};if_block(node_7,$$render=>{get$4(serverProps2)&&$$render(consequent_10)})} -append($$anchor7,fragment_5)},alternate_1=$$anchor7=>{var fragment_44=comment$2(),node_65=first_child(fragment_44);{var consequent_12=$$anchor8=>{var div_5=root_66();append($$anchor8,div_5)};if_block(node_65,$$render=>{get$4(isLoadingModels)||$$render(consequent_12)},!0)}append($$anchor7,fragment_44)};if_block(node_6,$$render=>{get$4(firstModel)?$$render(consequent_11):$$render(alternate_1,!1)},!0)}append($$anchor6,fragment_4)};if_block(node_5,$$render=>{get$4(isLoadingModels)||get$4(isLoadingRouterProps)? -$$render(consequent):$$render(alternate_2,!1)})}reset(div),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}class ConversationsStore{#conversations=state$1(proxy([]));get conversations(){return get$4(this.#conversations)}set conversations(value){set$1(this.#conversations,value,!0)}#activeConversation=state$1(null);get activeConversation(){return get$4(this.#activeConversation)}set activeConversation(value){ -set$1(this.#activeConversation,value,!0)}#activeMessages=state$1(proxy([]));get activeMessages(){return get$4(this.#activeMessages)}set activeMessages(value){set$1(this.#activeMessages,value,!0)}#isInitialized=state$1(!1);get isInitialized(){return get$4(this.#isInitialized)}set isInitialized(value){set$1(this.#isInitialized,value,!0)}#pendingMcpServerOverrides=state$1(proxy(ConversationsStore.loadMcpDefaults()));get pendingMcpServerOverrides(){return get$4(this.#pendingMcpServerOverrides)}set pendingMcpServerOverrides(value){ -set$1(this.#pendingMcpServerOverrides,value,!0)}static loadMcpDefaults(){if(typeof globalThis.localStorage>"u")return[];try{const raw2=localStorage.getItem(MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY);if(!raw2)return[];const parsed=JSON.parse(raw2);return Array.isArray(parsed)?parsed.filter(o=>typeof o=="object"&&o!==null&&"serverId"in o&&"enabled"in o):[]}catch{return[]}}saveMcpDefaults(){if(typeof globalThis.localStorage>"u")return;const plain=this.pendingMcpServerOverrides.map(o=>({serverId:o.serverId, -enabled:o.enabled}));plain.length>0?localStorage.setItem(MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY,JSON.stringify(plain)):localStorage.removeItem(MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY)}titleUpdateConfirmationCallback;messageUpdateCallback=null;async init(){if(!this.isInitialized)try{await runLegacyMigration(),await this.loadConversations(),this.isInitialized=!0}catch(error2){console.error("Failed to initialize conversations:",error2)}}async initialize(){return this.init()}registerMessageUpdateCallback(callback){ -this.messageUpdateCallback=callback}addMessageToActive(message){this.activeMessages.push(message)}updateMessageAtIndex(index2,updates){index2!==-1&&this.activeMessages[index2]&&(this.activeMessages[index2]={...this.activeMessages[index2],...updates})}findMessageIndex(messageId){return this.activeMessages.findIndex(m=>m.id===messageId)}sliceActiveMessages(startIndex){this.activeMessages=this.activeMessages.slice(0,startIndex)}removeMessageAtIndex(index2){if(index2!==-1)return this.activeMessages. -splice(index2,1)[0]}setTitleUpdateConfirmationCallback(callback){this.titleUpdateConfirmationCallback=callback}async loadConversations(){const conversations2=await DatabaseService.getAllConversations();this.conversations=conversations2}async createConversation(name){const conversationName=name||`Chat ${new Date().toLocaleString()}`,conversation=await DatabaseService.createConversation(conversationName);if(this.pendingMcpServerOverrides.length>0){const plainOverrides=this.pendingMcpServerOverrides. -map(o=>({serverId:o.serverId,enabled:o.enabled}));conversation.mcpServerOverrides=plainOverrides,await DatabaseService.updateConversation(conversation.id,{mcpServerOverrides:plainOverrides}),this.pendingMcpServerOverrides=[]}return this.conversations=[conversation,...this.conversations],this.activeConversation=conversation,this.activeMessages=[],await goto(`#/chat/${conversation.id}`),conversation.id}async loadConversation(convId){try{const conversation=await DatabaseService.getConversation(convId); -if(!conversation)return!1;if(this.pendingMcpServerOverrides=[],this.activeConversation=conversation,conversation.currNode){const allMessages=await DatabaseService.getConversationMessages(convId),filteredMessages=filterByLeafNodeId(allMessages,conversation.currNode,!1);this.activeMessages=filteredMessages}else{const messages=await DatabaseService.getConversationMessages(convId);this.activeMessages=messages}return!0}catch(error2){return console.error("Failed to load conversation:",error2),!1}}clearActiveConversation(){ -this.activeConversation=null,this.activeMessages=[],this.pendingMcpServerOverrides=ConversationsStore.loadMcpDefaults()}async deleteConversation(convId,options){try{if(await DatabaseService.deleteConversation(convId,options),options?.deleteWithForks){const idsToRemove=new SvelteSet([convId]),queue=[convId];for(;queue.length>0;){const parentId=queue.pop();for(const c2 of this.conversations)c2.forkedFromConversationId===parentId&&!idsToRemove.has(c2.id)&&(idsToRemove.add(c2.id),queue.push(c2.id))} -this.conversations=this.conversations.filter(c2=>!idsToRemove.has(c2.id)),this.activeConversation&&idsToRemove.has(this.activeConversation.id)&&(this.clearActiveConversation(),await goto("?new_chat=true#/"))}else{const newParent=this.conversations.find(c2=>c2.id===convId)?.forkedFromConversationId;this.conversations=this.conversations.filter(c2=>c2.id!==convId).map(c2=>c2.forkedFromConversationId===convId?{...c2,forkedFromConversationId:newParent}:c2),this.activeConversation?.id===convId&&(this. -clearActiveConversation(),await goto("?new_chat=true#/"))}}catch(error2){console.error("Failed to delete conversation:",error2)}}async deleteAll(){try{const allConversations=await DatabaseService.getAllConversations();for(const conv of allConversations)await DatabaseService.deleteConversation(conv.id);this.clearActiveConversation(),this.conversations=[],toast.success("All conversations deleted"),await goto("?new_chat=true#/")}catch(error2){console.error("Failed to delete all conversations:",error2), -toast.error("Failed to delete conversations")}}async refreshActiveMessages(){if(!this.activeConversation)return;const allMessages=await DatabaseService.getConversationMessages(this.activeConversation.id);if(allMessages.length===0){this.activeMessages=[];return}const leafNodeId=this.activeConversation.currNode||allMessages.reduce((latest,msg)=>msg.timestamp>latest.timestamp?msg:latest).id,currentPath=filterByLeafNodeId(allMessages,leafNodeId,!1);this.activeMessages=currentPath}async getConversationMessages(convId){ -return await DatabaseService.getConversationMessages(convId)}async updateConversationName(convId,name){try{await DatabaseService.updateConversation(convId,{name});const convIndex=this.conversations.findIndex(c2=>c2.id===convId);convIndex!==-1&&(this.conversations[convIndex].name=name,this.conversations=[...this.conversations]),this.activeConversation?.id===convId&&(this.activeConversation={...this.activeConversation,name})}catch(error2){console.error("Failed to update conversation name:",error2)}}async updateConversationTitleWithConfirmation(convId,newTitle){ -try{if(config$1().askForTitleConfirmation&&this.titleUpdateConfirmationCallback){const conversation=await DatabaseService.getConversation(convId);if(!conversation||!await this.titleUpdateConfirmationCallback(conversation.name,newTitle))return!1}return await this.updateConversationName(convId,newTitle),!0}catch(error2){return console.error("Failed to update conversation title with confirmation:",error2),!1}}updateConversationTimestamp(){if(!this.activeConversation)return;const chatIndex=this.conversations. -findIndex(c2=>c2.id===this.activeConversation.id);if(chatIndex!==-1){this.conversations[chatIndex].lastModified=Date.now();const updatedConv=this.conversations.splice(chatIndex,1)[0];this.conversations=[updatedConv,...this.conversations]}}async updateCurrentNode(nodeId){this.activeConversation&&(await DatabaseService.updateCurrentNode(this.activeConversation.id,nodeId),this.activeConversation={...this.activeConversation,currNode:nodeId})}async navigateToSibling(siblingId){if(!this.activeConversation) -return;const allMessages=await DatabaseService.getConversationMessages(this.activeConversation.id),rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null),currentFirstUserMessage=this.activeMessages.find(m=>m.role===MessageRole.USER&&m.parent===rootMessage?.id),currentLeafNodeId=findLeafNode(allMessages,siblingId);if(await DatabaseService.updateCurrentNode(this.activeConversation.id,currentLeafNodeId),this.activeConversation={...this.activeConversation,currNode:currentLeafNodeId},await this. -refreshActiveMessages(),rootMessage&&this.activeMessages.length>0){const newFirstUserMessage=this.activeMessages.find(m=>m.role===MessageRole.USER&&m.parent===rootMessage.id);newFirstUserMessage&&newFirstUserMessage.content.trim()&&(!currentFirstUserMessage||newFirstUserMessage.id!==currentFirstUserMessage.id||newFirstUserMessage.content.trim()!==currentFirstUserMessage.content.trim())&&await this.updateConversationTitleWithConfirmation(this.activeConversation.id,generateConversationTitle(newFirstUserMessage. -content,!!config$1().titleGenerationUseFirstLine))}}getMcpServerOverride(serverId){return this.activeConversation?this.activeConversation.mcpServerOverrides?.find(o=>o.serverId===serverId):this.pendingMcpServerOverrides.find(o=>o.serverId===serverId)}getAllMcpServerOverrides(){return this.activeConversation?.mcpServerOverrides?this.activeConversation.mcpServerOverrides:this.pendingMcpServerOverrides}isMcpServerEnabledForChat(serverId){return this.getMcpServerOverride(serverId)?.enabled??!1}async setMcpServerOverride(serverId,enabled){ -if(!this.activeConversation){this.setPendingMcpServerOverride(serverId,enabled);return}const currentOverrides=(this.activeConversation.mcpServerOverrides||[]).map(o=>({serverId:o.serverId,enabled:o.enabled}));let newOverrides;if(enabled===void 0)newOverrides=currentOverrides.filter(o=>o.serverId!==serverId);else{const existingIndex=currentOverrides.findIndex(o=>o.serverId===serverId);existingIndex>=0?(newOverrides=[...currentOverrides],newOverrides[existingIndex]={serverId,enabled}):newOverrides= -[...currentOverrides,{serverId,enabled}]}await DatabaseService.updateConversation(this.activeConversation.id,{mcpServerOverrides:newOverrides.length>0?newOverrides:void 0}),this.activeConversation={...this.activeConversation,mcpServerOverrides:newOverrides.length>0?newOverrides:void 0};const convIndex=this.conversations.findIndex(c2=>c2.id===this.activeConversation.id);convIndex!==-1&&(this.conversations[convIndex].mcpServerOverrides=newOverrides.length>0?newOverrides:void 0,this.conversations=[ -...this.conversations])}setPendingMcpServerOverride(serverId,enabled){if(enabled===void 0)this.pendingMcpServerOverrides=this.pendingMcpServerOverrides.filter(o=>o.serverId!==serverId);else{const existingIndex=this.pendingMcpServerOverrides.findIndex(o=>o.serverId===serverId);if(existingIndex>=0){const newOverrides=[...this.pendingMcpServerOverrides];newOverrides[existingIndex]={serverId,enabled},this.pendingMcpServerOverrides=newOverrides}else this.pendingMcpServerOverrides=[...this.pendingMcpServerOverrides, -{serverId,enabled}]}this.saveMcpDefaults()}async toggleMcpServerForChat(serverId){const currentEnabled=this.isMcpServerEnabledForChat(serverId);await this.setMcpServerOverride(serverId,!currentEnabled)}async removeMcpServerOverride(serverId){await this.setMcpServerOverride(serverId,void 0)}clearPendingMcpServerOverrides(){this.pendingMcpServerOverrides=[],this.saveMcpDefaults()}async forkConversation(messageId,options){if(!this.activeConversation)return null;try{const newConv=await DatabaseService. -forkConversation(this.activeConversation.id,messageId,options);return this.conversations=[newConv,...this.conversations],await goto(`#/chat/${newConv.id}`),toast.success("Conversation forked"),newConv.id}catch(error2){return console.error("Failed to fork conversation:",error2),toast.error("Failed to fork conversation"),null}}generateConversationFilename(conversation,msgs){const sanitizedName=(conversation.name??"").trim().toLowerCase().replace(NON_ALPHANUMERIC_REGEX,EXPORT_CONV_NONALNUM_REPLACEMENT). -replace(MULTIPLE_UNDERSCORE_REGEX,"_").substring(0,EXPORT_CONV_NAME_SUFFIX_MAX_LENGTH),formattedDate=(msgs?.length?new Date(Math.max(...msgs.map(m=>m.timestamp))):new Date).toISOString().slice(0,ISO_TIMESTAMP_SLICE_LENGTH).replace(ISO_DATE_TIME_SEPARATOR,ISO_DATE_TIME_SEPARATOR_REPLACEMENT).replaceAll(ISO_TIME_SEPARATOR,ISO_TIME_SEPARATOR_REPLACEMENT),trimmedConvId=conversation.id?.slice(0,EXPORT_CONV_ID_TRIM_LENGTH)??"";return`${formattedDate}_conv_${trimmedConvId}_${sanitizedName}.json`}downloadConversationFile(data,filename){ -const conversation="conv"in data?data.conv:Array.isArray(data)?data[0]?.conv:void 0,msgs="messages"in data?data.messages:Array.isArray(data)?data[0]?.messages:void 0;if(!conversation){console.error("Invalid data: missing conversation");return}const downloadFilename=filename??this.generateConversationFilename(conversation,msgs),blob=new Blob([JSON.stringify(data,null,2)],{type:"application/json"}),url2=URL.createObjectURL(blob),a=document.createElement("a");a.href=url2,a.download=downloadFilename, -document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(url2)}async downloadConversation(convId){let conversation,messages;if(this.activeConversation?.id===convId)conversation=this.activeConversation,messages=this.activeMessages;else{if(conversation=await DatabaseService.getConversation(convId),!conversation)return;messages=await DatabaseService.getConversationMessages(convId)}this.downloadConversationFile({conv:conversation,messages})}async importConversations(){ -return new Promise((resolve2,reject)=>{const input=document.createElement("input");input.type="file",input.accept=".json",input.onchange=async e=>{const file=e.target?.files?.[0];if(!file){reject(new Error("No file selected"));return}try{const text2=await file.text(),parsedData=JSON.parse(text2);let importedData;if(Array.isArray(parsedData))importedData=parsedData;else if(parsedData&&typeof parsedData=="object"&&"conv"in parsedData&&"messages"in parsedData)importedData=[parsedData];else throw new Error( -"Invalid file format");const result=await DatabaseService.importConversations(importedData);toast.success(`Imported ${result.imported} conversation(s), skipped ${result.skipped}`),await this.loadConversations();const importedConversations=(Array.isArray(importedData)?importedData:[importedData]).map(item=>item.conv);resolve2(importedConversations)}catch(err){const message=err instanceof Error?err.message:"Unknown error";console.error("Failed to import conversations:",err),toast.error("Import fai\ -led",{description:message}),reject(new Error(`Import failed: ${message}`))}},input.click()})}async importConversationsData(data){const result=await DatabaseService.importConversations(data);return await this.loadConversations(),result}}const conversationsStore=new ConversationsStore;conversationsStore.init();const conversations=()=>conversationsStore.conversations,activeConversation=()=>conversationsStore.activeConversation,activeMessages=()=>conversationsStore.activeMessages,isConversationsInitialized=()=>conversationsStore. -isInitialized;function buildConversationTree(convs){const childrenByParent=new SvelteMap,forkIds=new SvelteSet;for(const conv of convs)if(conv.forkedFromConversationId){forkIds.add(conv.id);const siblings2=childrenByParent.get(conv.forkedFromConversationId)||[];siblings2.push(conv),childrenByParent.set(conv.forkedFromConversationId,siblings2)}const result=[],visited=new SvelteSet;function walk(conv,depth){visited.add(conv.id),result.push({conversation:conv,depth});const children=childrenByParent. -get(conv.id);if(children){children.sort((a,b)=>b.lastModified-a.lastModified);for(const child2 of children)walk(child2,depth+1)}}const roots=convs.filter(c2=>!forkIds.has(c2.id));for(const root2 of roots)walk(root2,0);for(const conv of convs)visited.has(conv.id)||walk(conv,1);return result}var root_5$t=from_html('<span class="text-sm font-normal text-muted-foreground"> </span>'),root_4$n=from_html("<!> <span>MCP Resources</span> <!>",1),root_3$F=from_html("<!> <!>",1),root_8$k=from_html('<p clas\ -s="mb-4 text-xs text-muted-foreground"> </p>'),root_9$k=from_html('<div class="flex flex-1 items-center justify-center"><!></div>'),root_11$b=from_html('<div class="flex flex-1 flex-col items-center justify-center gap-2 text-red-500"><span class="text-sm"> </span> <!></div>'),root_7$p=from_html('<div class="flex h-full flex-col"><div class="mb-3 flex items-center gap-2"><!> <span class="text-sm font-medium"> </span></div> <!> <div class="mb-4 rounded-md border border-border/50 bg-muted/30 px-3 p\ -y-2"><p class="font-mono text-xs break-all text-muted-foreground"> </p></div> <!></div>'),root_19$2=from_html('<div class="flex flex-col gap-10"></div>'),root_22$6=from_html('<div class="flex h-full items-center justify-center text-sm text-muted-foreground">Select a resource to preview</div>'),root_26$4=from_html("<!> Attach Resource",1),root_30$2=from_html("<!> ",1),root_23$4=from_html("<!> <!>",1),root_2$P=from_html('<!> <div class="flex h-[500px] min-w-0"><div class="w-72 shrink-0 overflow-y-\ -auto border-r border-border/30 p-4"><!></div> <div class="min-w-0 flex-1 overflow-auto p-4"><!></div></div> <!>',1);function DialogMcpResources($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),selectedResources=new SvelteSet,lastSelectedUri=state$1(null),isAttaching=state$1(!1),selectedTemplate=state$1(null),templatePreviewUri=state$1(null),templatePreviewContent=state$1(null),templatePreviewLoading=state$1(!1),templatePreviewError=state$1(null);const totalCount=user_derived( -mcpTotalResourceCount);user_effect(()=>{open2()&&(loadResources(),$$props.preSelectedUri&&(selectedResources.clear(),selectedResources.add($$props.preSelectedUri),set$1(lastSelectedUri,$$props.preSelectedUri,!0)))});async function loadResources(){const perChatOverrides=conversationsStore.getAllMcpServerOverrides();await mcpStore.ensureInitialized(perChatOverrides)&&await mcpStore.fetchAllResources()}function handleOpenChange(newOpen){open2(newOpen),$$props.onOpenChange?.(newOpen),newOpen||(selectedResources. -clear(),set$1(lastSelectedUri,null),clearTemplateState())}function clearTemplateState(){set$1(selectedTemplate,null),set$1(templatePreviewUri,null),set$1(templatePreviewContent,null),set$1(templatePreviewLoading,!1),set$1(templatePreviewError,null)}function handleTemplateSelect(template){if(selectedResources.clear(),set$1(lastSelectedUri,null),get$4(selectedTemplate)?.uriTemplate===template.uriTemplate&&get$4(selectedTemplate)?.serverName===template.serverName){clearTemplateState();return}set$1( -selectedTemplate,template,!0),set$1(templatePreviewUri,null),set$1(templatePreviewContent,null),set$1(templatePreviewLoading,!1),set$1(templatePreviewError,null)}async function handleTemplateResolve(uri2,serverName){set$1(templatePreviewUri,uri2,!0),set$1(templatePreviewContent,null),set$1(templatePreviewLoading,!0),set$1(templatePreviewError,null);try{const content2=await mcpStore.readResourceByUri(serverName,uri2);content2?set$1(templatePreviewContent,content2,!0):set$1(templatePreviewError,"F\ -ailed to read resource")}catch(error2){set$1(templatePreviewError,error2 instanceof Error?error2.message:"Unknown error",!0)}finally{set$1(templatePreviewLoading,!1)}}function handleTemplateCancelForm(){clearTemplateState()}async function handleAttachTemplateResource(){if(!(!get$4(templatePreviewUri)||!get$4(selectedTemplate)||!get$4(templatePreviewContent))){set$1(isAttaching,!0);try{const knownResource=mcpResourceStore.findResourceByUri(get$4(templatePreviewUri));if(knownResource)mcpResourceStore. -isAttached(knownResource.uri)||await mcpStore.attachResource(knownResource.uri),toast.success(`Resource attached: ${knownResource.title||knownResource.name}`);else{if(mcpResourceStore.isAttached(get$4(templatePreviewUri))){toast.info("Resource already attached"),handleOpenChange(!1);return}const resourceInfo={uri:get$4(templatePreviewUri),name:get$4(templatePreviewUri).split("/").pop()||get$4(templatePreviewUri),serverName:get$4(selectedTemplate).serverName},attachment=mcpResourceStore.addAttachment( -resourceInfo);mcpResourceStore.updateAttachmentContent(attachment.id,get$4(templatePreviewContent)),toast.success(`Resource attached: ${resourceInfo.name}`)}handleOpenChange(!1)}catch(error2){console.error("Failed to attach template resource:",error2)}finally{set$1(isAttaching,!1)}}}function handleResourceSelect(resource,shiftKey=!1){if(clearTemplateState(),shiftKey&&get$4(lastSelectedUri)){const allResources=getAllResourcesFlatInTreeOrder(),lastIndex=allResources.findIndex(r2=>r2.uri===get$4(lastSelectedUri)), -currentIndex=allResources.findIndex(r2=>r2.uri===resource.uri);if(lastIndex!==-1&¤tIndex!==-1){const start2=Math.min(lastIndex,currentIndex),end=Math.max(lastIndex,currentIndex);for(let i=start2;i<=end;i++)selectedResources.add(allResources[i].uri)}}else selectedResources.clear(),selectedResources.add(resource.uri),set$1(lastSelectedUri,resource.uri,!0)}function handleResourceToggle(resource,checked){clearTemplateState(),checked?selectedResources.add(resource.uri):selectedResources.delete( -resource.uri),set$1(lastSelectedUri,resource.uri,!0)}function getAllResourcesFlatInTreeOrder(){const allResources=[],resourcesMap=mcpResources();for(const[serverName,serverRes]of resourcesMap.entries())for(const resource of serverRes.resources)allResources.push({...resource,serverName});return allResources.sort((a,b)=>{const aName=getResourceDisplayName(a),bName=getResourceDisplayName(b);return aName.localeCompare(bName)})}async function handleAttach(){if(selectedResources.size!==0){set$1(isAttaching, -!0);try{const resourcesToAttach=getAllResourcesFlatInTreeOrder().filter(r2=>selectedResources.has(r2.uri));for(const resource of resourcesToAttach)await mcpStore.attachResource(resource.uri),$$props.onAttach?.(resource);const count=resourcesToAttach.length;toast.success(count===1?`Resource attached: ${resourcesToAttach[0].name}`:`${count} resources attached`),handleOpenChange(!1)}catch(error2){console.error("Failed to attach resources:",error2)}finally{set$1(isAttaching,!1)}}}const selectedTemplateUri=user_derived( -()=>get$4(selectedTemplate)?.uriTemplate??null),hasTemplateResult=user_derived(()=>!!get$4(selectedTemplate)&&!!get$4(templatePreviewContent)&&!!get$4(templatePreviewUri));var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get open(){return open2()},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Dialog_content,($$anchor4,Dialog_Content)=>{ -Dialog_Content($$anchor4,{class:"max-h-[80vh] !max-w-4xl overflow-hidden p-0",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$P(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_header,($$anchor6,Dialog_Header)=>{Dialog_Header($$anchor6,{class:"border-b border-border/30 px-6 py-4",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$F(),node_3=first_child(fragment_3);component(node_3,()=>Dialog_title,($$anchor8,Dialog_Title)=>{Dialog_Title($$anchor8,{class:"flex items-c\ -enter gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$n(),node_4=first_child(fragment_4);Folder_open(node_4,{class:"h-5 w-5"});var node_5=sibling(node_4,4);{var consequent=$$anchor10=>{var span=root_5$t(),text2=child(span);reset(span),template_effect(()=>set_text(text2,`(${get$4(totalCount)??""})`)),append($$anchor10,span)};if_block(node_5,$$render=>{get$4(totalCount)>0&&$$render(consequent)})}append($$anchor9,fragment_4)},$$slots:{default:!0}})});var node_6=sibling(node_3,2);component( -node_6,()=>Dialog_description,($$anchor8,Dialog_Description)=>{Dialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8("Browse and attach resources from connected MCP servers to your chat context.");append($$anchor9,text_1)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),div_1=child(div),node_7=child(div_1);McpResourceBrowser(node_7,{onSelect:handleResourceSelect,onToggle:handleResourceToggle,onTemplateSelect:handleTemplateSelect, -get selectedUris(){return selectedResources},get selectedTemplateUri(){return get$4(selectedTemplateUri)},get expandToUri(){return $$props.preSelectedUri}}),reset(div_1);var div_2=sibling(div_1,2),node_8=child(div_2);{var consequent_4=$$anchor6=>{var div_3=root_7$p(),div_4=child(div_3),node_9=child(div_4);Braces(node_9,{class:"h-4 w-4 text-muted-foreground"});var span_1=sibling(node_9,2),text_2=child(span_1,!0);reset(span_1),reset(div_4);var node_10=sibling(div_4,2);{var consequent_1=$$anchor7=>{ -var p2=root_8$k(),text_3=child(p2,!0);reset(p2),template_effect(()=>set_text(text_3,get$4(selectedTemplate).description)),append($$anchor7,p2)};if_block(node_10,$$render=>{get$4(selectedTemplate).description&&$$render(consequent_1)})}var div_5=sibling(node_10,2),p_1=child(div_5),text_4=child(p_1,!0);reset(p_1),reset(div_5);var node_11=sibling(div_5,2);{var consequent_2=$$anchor7=>{var div_6=root_9$k(),node_12=child(div_6);Loader_circle(node_12,{class:"h-6 w-6 animate-spin text-muted-foreground"}), -reset(div_6),append($$anchor7,div_6)},alternate_1=$$anchor7=>{var fragment_5=comment$2(),node_13=first_child(fragment_5);{var consequent_3=$$anchor8=>{var div_7=root_11$b(),span_2=child(div_7),text_5=child(span_2,!0);reset(span_2);var node_14=sibling(span_2,2);Button(node_14,{size:"sm",variant:"outline",onclick:()=>{set$1(templatePreviewError,null)},children:($$anchor9,$$slotProps3)=>{next$1();var text_6=text$8("Try again");append($$anchor9,text_6)},$$slots:{default:!0}}),reset(div_7),template_effect( -()=>set_text(text_5,get$4(templatePreviewError))),append($$anchor8,div_7)},alternate=$$anchor8=>{McpResourceTemplateForm($$anchor8,{get template(){return get$4(selectedTemplate)},onResolve:handleTemplateResolve,onCancel:handleTemplateCancelForm})};if_block(node_13,$$render=>{get$4(templatePreviewError)?$$render(consequent_3):$$render(alternate,!1)},!0)}append($$anchor7,fragment_5)};if_block(node_11,$$render=>{get$4(templatePreviewLoading)?$$render(consequent_2):$$render(alternate_1,!1)})}reset(div_3), -template_effect(()=>{set_text(text_2,get$4(selectedTemplate).title||get$4(selectedTemplate).name),set_text(text_4,get$4(selectedTemplate).uriTemplate)}),append($$anchor6,div_3)},alternate_5=$$anchor6=>{var fragment_7=comment$2(),node_15=first_child(fragment_7);{var consequent_5=$$anchor7=>{{let $0=user_derived(()=>({uri:get$4(templatePreviewUri)??"",name:get$4(templatePreviewUri)?.split("/").pop()||(get$4(templatePreviewUri)??""),serverName:get$4(selectedTemplate)?.serverName||""}));McpResourcePreview( -$$anchor7,{get resource(){return get$4($0)},get preloadedContent(){return get$4(templatePreviewContent)}})}},alternate_4=$$anchor7=>{var fragment_9=comment$2(),node_16=first_child(fragment_9);{var consequent_6=$$anchor8=>{const allResources=user_derived(getAllResourcesFlatInTreeOrder),selectedResource=user_derived(()=>get$4(allResources).find(r2=>selectedResources.has(r2.uri)));{let $0=user_derived(()=>get$4(selectedResource)??null);McpResourcePreview($$anchor8,{get resource(){return get$4($0)}})}}, -alternate_3=$$anchor8=>{var fragment_11=comment$2(),node_17=first_child(fragment_11);{var consequent_8=$$anchor9=>{var div_8=root_19$2();each(div_8,21,getAllResourcesFlatInTreeOrder,resource=>resource.uri,($$anchor10,resource)=>{var fragment_12=comment$2(),node_18=first_child(fragment_12);{var consequent_7=$$anchor11=>{McpResourcePreview($$anchor11,{get resource(){return get$4(resource)}})};if_block(node_18,$$render=>{selectedResources.has(get$4(resource).uri)&&$$render(consequent_7)})}append($$anchor10, -fragment_12)}),reset(div_8),append($$anchor9,div_8)},alternate_2=$$anchor9=>{var div_9=root_22$6();append($$anchor9,div_9)};if_block(node_17,$$render=>{selectedResources.size>1?$$render(consequent_8):$$render(alternate_2,!1)},!0)}append($$anchor8,fragment_11)};if_block(node_16,$$render=>{selectedResources.size===1?$$render(consequent_6):$$render(alternate_3,!1)},!0)}append($$anchor7,fragment_9)};if_block(node_15,$$render=>{get$4(hasTemplateResult)?$$render(consequent_5):$$render(alternate_4,!1)}, -!0)}append($$anchor6,fragment_7)};if_block(node_8,$$render=>{get$4(selectedTemplate)&&!get$4(templatePreviewContent)?$$render(consequent_4):$$render(alternate_5,!1)})}reset(div_2),reset(div);var node_19=sibling(div,2);component(node_19,()=>Dialog_footer,($$anchor6,Dialog_Footer)=>{Dialog_Footer($$anchor6,{class:"border-t border-border/30 px-6 py-4",children:($$anchor7,$$slotProps3)=>{var fragment_14=root_23$4(),node_20=first_child(fragment_14);Button(node_20,{variant:"outline",onclick:()=>handleOpenChange( -!1),children:($$anchor8,$$slotProps4)=>{next$1();var text_7=text$8("Cancel");append($$anchor8,text_7)},$$slots:{default:!0}});var node_21=sibling(node_20,2);{var consequent_10=$$anchor8=>{Button($$anchor8,{onclick:handleAttachTemplateResource,get disabled(){return get$4(isAttaching)},children:($$anchor9,$$slotProps4)=>{var fragment_16=root_26$4(),node_22=first_child(fragment_16);{var consequent_9=$$anchor10=>{Loader_circle($$anchor10,{class:"mr-2 h-4 w-4 animate-spin"})},alternate_6=$$anchor10=>{ -Plus($$anchor10,{class:"mr-2 h-4 w-4"})};if_block(node_22,$$render=>{get$4(isAttaching)?$$render(consequent_9):$$render(alternate_6,!1)})}next$1(),append($$anchor9,fragment_16)},$$slots:{default:!0}})},alternate_8=$$anchor8=>{{let $0=user_derived(()=>selectedResources.size===0||get$4(isAttaching));Button($$anchor8,{onclick:handleAttach,get disabled(){return get$4($0)},children:($$anchor9,$$slotProps4)=>{var fragment_20=root_30$2(),node_23=first_child(fragment_20);{var consequent_11=$$anchor10=>{ -Loader_circle($$anchor10,{class:"mr-2 h-4 w-4 animate-spin"})},alternate_7=$$anchor10=>{Plus($$anchor10,{class:"mr-2 h-4 w-4"})};if_block(node_23,$$render=>{get$4(isAttaching)?$$render(consequent_11):$$render(alternate_7,!1)})}var text_8=sibling(node_23);template_effect(()=>set_text(text_8,` Attach ${selectedResources.size>0?`(${selectedResources.size})`:"Resource"}`)),append($$anchor9,fragment_20)},$$slots:{default:!0}})}};if_block(node_21,$$render=>{get$4(hasTemplateResult)?$$render(consequent_10): -$$render(alternate_8,!1)})}append($$anchor7,fragment_14)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_7$o=from_html('<img alt="" class="h-3 w-3 shrink-0 rounded-sm"/>'),root_6$s=from_html('<span class="flex items-center gap-1 text-xs text-muted-foreground">· <!> </span>'),root_8$j=from_html('<span class="rounded bg-muted px-1.5 py-0.5 text-xs"> </span>'),root_5$s=from_html( -'<div class="flex items-center gap-2"><span class="text-xs text-muted-foreground"> </span> <!> <!></div>'),root_3$E=from_html("<!> <!>",1),root_10$f=from_html('<div class="flex items-center justify-center"><img class="max-h-[70vh] max-w-full rounded object-contain"/></div>'),root_14$7=from_html('<pre class="max-h-[70vh] overflow-auto rounded-md border bg-muted/30 p-4 font-mono text-sm break-words whitespace-pre-wrap"> </pre>'),root_15$4=from_html('<div class="py-8 text-center text-sm text-muted-\ -foreground">No content available</div>'),root_2$O=from_html('<!> <div class="flex items-center justify-end gap-1"><!> <!></div> <div class="overflow-auto"><!></div>',1);function DialogMcpResourcePreview($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15);const serverName=user_derived(()=>mcpStore.getServerDisplayName($$props.extra.serverName)),favicon=user_derived(()=>mcpStore.getServerFavicon($$props.extra.serverName));function getLanguage(){if($$props.extra.mimeType?.includes( -MimeTypeIncludes.JSON))return MimeTypeIncludes.JSON;if($$props.extra.mimeType?.includes(MimeTypeIncludes.JAVASCRIPT))return MimeTypeIncludes.JAVASCRIPT;if($$props.extra.mimeType?.includes(MimeTypeIncludes.TYPESCRIPT))return MimeTypeIncludes.TYPESCRIPT;const name=$$props.extra.name||$$props.extra.uri||"";return getLanguageFromFilename(name)||"plaintext"}function handleDownload(){$$props.extra.content&&downloadResourceContent($$props.extra.content,$$props.extra.mimeType||MimeTypeText.PLAIN,$$props. -extra.name||DEFAULT_RESOURCE_FILENAME)}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get onOpenChange(){return $$props.onOpenChange},get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Dialog_content,($$anchor4,Dialog_Content)=>{Dialog_Content($$anchor4,{class:"grid max-h-[90vh] max-w-5xl over\ -flow-hidden sm:w-auto sm:max-w-6xl",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$O(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_header,($$anchor6,Dialog_Header)=>{Dialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$E(),node_3=first_child(fragment_3);component(node_3,()=>Dialog_title,($$anchor8,Dialog_Title)=>{Dialog_Title($$anchor8,{class:"pr-8",children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8();template_effect(()=>set_text( -text2,$$props.extra.name)),append($$anchor9,text2)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Dialog_description,($$anchor8,Dialog_Description)=>{Dialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{var div=root_5$s(),span=child(div),text_1=child(span,!0);reset(span);var node_5=sibling(span,2);{var consequent_1=$$anchor10=>{var span_1=root_6$s(),node_6=sibling(child(span_1));{var consequent=$$anchor11=>{var img=root_7$o();template_effect(()=>set_attribute( -img,"src",get$4(favicon))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor11,img)};if_block(node_6,$$render=>{get$4(favicon)&&$$render(consequent)})}var text_2=sibling(node_6);reset(span_1),template_effect(()=>set_text(text_2,` ${get$4(serverName)??""}`)),append($$anchor10,span_1)};if_block(node_5,$$render=>{get$4(serverName)&&$$render(consequent_1)})}var node_7=sibling(node_5,2);{var consequent_2=$$anchor10=>{var span_2=root_8$j(),text_3=child(span_2, -!0);reset(span_2),template_effect(()=>set_text(text_3,$$props.extra.mimeType)),append($$anchor10,span_2)};if_block(node_7,$$render=>{$$props.extra.mimeType&&$$render(consequent_2)})}reset(div),template_effect(()=>set_text(text_1,$$props.extra.uri)),append($$anchor9,div)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div_1=sibling(node_2,2),node_8=child(div_1);{let $0=user_derived(()=>!!$$props.extra.content);ActionIconCopyToClipboard(node_8,{get text(){return $$props. -extra.content},get canCopy(){return get$4($0)},ariaLabel:"Copy content"})}var node_9=sibling(node_8,2);{let $0=user_derived(()=>!$$props.extra.content);Button(node_9,{variant:"ghost",size:"sm",class:"h-7 w-7 p-0",onclick:handleDownload,get disabled(){return get$4($0)},title:"Download content",children:($$anchor6,$$slotProps3)=>{Download($$anchor6,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})}reset(div_1);var div_2=sibling(div_1,2),node_10=child(div_2);{var consequent_3=$$anchor6=>{var div_3=root_10$f(), -img_1=child(div_3);reset(div_3),template_effect($0=>{set_attribute(img_1,"src",$0),set_attribute(img_1,"alt",$$props.extra.name)},[()=>$$props.extra.content.startsWith("data:")?$$props.extra.content:`data:${$$props.extra.mimeType||"image/png"};base64,${$$props.extra.content}`]),append($$anchor6,div_3)},alternate_2=$$anchor6=>{var fragment_6=comment$2(),node_11=first_child(fragment_6);{var consequent_4=$$anchor7=>{{let $0=user_derived(getLanguage);SyntaxHighlightedCode($$anchor7,{get code(){return $$props. -extra.content},get language(){return get$4($0)},maxHeight:"70vh"})}},alternate_1=$$anchor7=>{var fragment_8=comment$2(),node_12=first_child(fragment_8);{var consequent_5=$$anchor8=>{var pre=root_14$7(),text_4=child(pre,!0);reset(pre),template_effect(()=>set_text(text_4,$$props.extra.content)),append($$anchor8,pre)},alternate=$$anchor8=>{var div_4=root_15$4();append($$anchor8,div_4)};if_block(node_12,$$render=>{$$props.extra.content?$$render(consequent_5):$$render(alternate,!1)},!0)}append($$anchor7, -fragment_8)};if_block(node_11,$$render=>{isCodeResource($$props.extra.mimeType,$$props.extra.uri)&&$$props.extra.content?$$render(consequent_4):$$render(alternate_1,!1)},!0)}append($$anchor6,fragment_6)};if_block(node_10,$$render=>{isImageResource($$props.extra.mimeType,$$props.extra.uri)&&$$props.extra.content?$$render(consequent_3):$$render(alternate_2,!1)})}reset(div_2),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor, -fragment),pop()}function createDefaultSession(){return{isRunning:!1,currentTurn:0,totalToolCalls:0,lastError:null,streamingToolCall:null}}function toAgenticMessages(messages){return messages.map(message=>message.role===MessageRole.ASSISTANT&&message.tool_calls&&message.tool_calls.length>0?{role:MessageRole.ASSISTANT,content:message.content,tool_calls:message.tool_calls.map((call,index2)=>({id:call.id??`call_${index2}`,type:call.type??ToolCallType.FUNCTION,function:{name:call.function?.name??"",arguments:call. -function?.arguments??""}}))}:message.role===MessageRole.TOOL&&message.tool_call_id?{role:MessageRole.TOOL,tool_call_id:message.tool_call_id,content:typeof message.content=="string"?message.content:""}:{role:message.role,content:message.content})}class AgenticStore{#_sessions=state$1(proxy(new Map));get _sessions(){return get$4(this.#_sessions)}set _sessions(value){set$1(this.#_sessions,value,!0)}get isReady(){return!0}get isAnyRunning(){for(const session of this._sessions.values())if(session.isRunning) -return!0;return!1}getSession(conversationId){let session=this._sessions.get(conversationId);return session||(session=createDefaultSession(),this._sessions.set(conversationId,session)),session}updateSession(conversationId,update2){const session=this.getSession(conversationId);this._sessions.set(conversationId,{...session,...update2})}clearSession(conversationId){this._sessions.delete(conversationId)}getActiveSessions(){const active=[];for(const[conversationId,session]of this._sessions.entries())session. -isRunning&&active.push({conversationId,session});return active}isRunning(conversationId){return this.getSession(conversationId).isRunning}currentTurn(conversationId){return this.getSession(conversationId).currentTurn}totalToolCalls(conversationId){return this.getSession(conversationId).totalToolCalls}lastError(conversationId){return this.getSession(conversationId).lastError}streamingToolCall(conversationId){return this.getSession(conversationId).streamingToolCall}clearError(conversationId){this. -updateSession(conversationId,{lastError:null})}getConfig(settings,perChatOverrides){const maxTurns=Number(settings.agenticMaxTurns)||DEFAULT_AGENTIC_CONFIG.maxTurns,maxToolPreviewLines=Number(settings.agenticMaxToolPreviewLines)||DEFAULT_AGENTIC_CONFIG.maxToolPreviewLines;return{enabled:mcpStore.hasEnabledServers(perChatOverrides)&&DEFAULT_AGENTIC_CONFIG.enabled,maxTurns,maxToolPreviewLines}}async runAgenticFlow(params){const{conversationId,messages,options={},callbacks,signal,perChatOverrides}=params, -agenticConfig=this.getConfig(config$1(),perChatOverrides);if(!agenticConfig.enabled)return{handled:!1};if(!await mcpStore.ensureInitialized(perChatOverrides))return console.log("[AgenticStore] MCP not initialized, falling back to standard chat"),{handled:!1};const tools=mcpStore.getToolDefinitionsForLLM();if(tools.length===0)return console.log("[AgenticStore] No tools available, falling back to standard chat"),{handled:!1};console.log(`[AgenticStore] Starting agentic flow with ${tools.length} to\ -ols`);const normalizedMessages=messages.map(msg=>"id"in msg&&"convId"in msg&&"timestamp"in msg?ChatService.convertDbMessageToApiChatMessageData(msg):msg).filter(msg=>msg.role===MessageRole.SYSTEM?(typeof msg.content=="string"?msg.content:"").trim().length>0:!0);this.updateSession(conversationId,{isRunning:!0,currentTurn:0,totalToolCalls:0,lastError:null}),mcpStore.acquireConnection();try{return await this.executeAgenticLoop({conversationId,messages:normalizedMessages,options,tools,agenticConfig, -callbacks,signal}),{handled:!0}}catch(error2){const normalizedError=error2 instanceof Error?error2:new Error(String(error2));return this.updateSession(conversationId,{lastError:normalizedError}),callbacks.onError?.(normalizedError),{handled:!0,error:normalizedError}}finally{this.updateSession(conversationId,{isRunning:!1}),await mcpStore.releaseConnection().catch(err=>console.warn("[AgenticStore] Failed to release MCP connection:",err))}}async executeAgenticLoop(params){const{conversationId,messages, -options,tools,agenticConfig,callbacks,signal}=params,{onChunk,onReasoningChunk,onToolCallsStreaming,onAttachments,onModel,onAssistantTurnComplete,createToolResultMessage,createAssistantMessage,onFlowComplete,onTimings,onTurnComplete}=callbacks,sessionMessages=toAgenticMessages(messages);let capturedTimings,totalToolCallCount=0;const agenticTimings={turns:0,toolCallsCount:0,toolsMs:0,toolCalls:[],perTurn:[],llm:{predicted_n:0,predicted_ms:0,prompt_n:0,prompt_ms:0}},maxTurns=agenticConfig.maxTurns, -effectiveModel=options.model||modelsStore.models[0]?.model||"";for(let turn=0;turn<maxTurns;turn++){if(this.updateSession(conversationId,{currentTurn:turn+1}),agenticTimings.turns=turn+1,signal?.aborted){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}turn>0&&createAssistantMessage&&await createAssistantMessage();let turnContent="",turnReasoningContent="",turnToolCalls=[],lastStreamingToolCallName="",lastStreamingToolCallArgsLength=0,turnTimings;const turnStats={turn:turn+ -1,llm:{predicted_n:0,predicted_ms:0,prompt_n:0,prompt_ms:0},toolCalls:[],toolsMs:0};try{await ChatService.sendMessage(sessionMessages,{...options,stream:!0,tools:tools.length>0?tools:void 0,onChunk:chunk=>{turnContent+=chunk,onChunk?.(chunk)},onReasoningChunk:chunk=>{turnReasoningContent+=chunk,onReasoningChunk?.(chunk)},onToolCallChunk:serialized=>{try{if(turnToolCalls=JSON.parse(serialized),onToolCallsStreaming?.(turnToolCalls),turnToolCalls.length>0&&turnToolCalls[0]?.function){const name=turnToolCalls[0]. -function.name||"",args=turnToolCalls[0].function.arguments||"",argsLengthBucket=Math.floor(args.length/100);(name!==lastStreamingToolCallName||argsLengthBucket!==lastStreamingToolCallArgsLength)&&(lastStreamingToolCallName=name,lastStreamingToolCallArgsLength=argsLengthBucket,this.updateSession(conversationId,{streamingToolCall:{name,arguments:args}}))}}catch{}},onModel,onTimings:(timings,progress)=>{onTimings?.(timings,progress),timings&&(capturedTimings=timings,turnTimings=timings)},onComplete:()=>{}, -onError:error2=>{throw error2}},void 0,signal),this.updateSession(conversationId,{streamingToolCall:null}),turnTimings&&(agenticTimings.llm.predicted_n+=turnTimings.predicted_n||0,agenticTimings.llm.predicted_ms+=turnTimings.predicted_ms||0,agenticTimings.llm.prompt_n+=turnTimings.prompt_n||0,agenticTimings.llm.prompt_ms+=turnTimings.prompt_ms||0,turnStats.llm.predicted_n=turnTimings.predicted_n||0,turnStats.llm.predicted_ms=turnTimings.predicted_ms||0,turnStats.llm.prompt_n=turnTimings.prompt_n|| -0,turnStats.llm.prompt_ms=turnTimings.prompt_ms||0)}catch(error2){if(signal?.aborted){await onAssistantTurnComplete?.(turnContent,turnReasoningContent||void 0,this.buildFinalTimings(capturedTimings,agenticTimings),void 0),onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}const normalizedError=error2 instanceof Error?error2:new Error("LLM stream error");throw onChunk?.(`${LLM_ERROR_BLOCK_START}${normalizedError.message}${LLM_ERROR_BLOCK_END}`),await onAssistantTurnComplete?.( -turnContent+`${LLM_ERROR_BLOCK_START}${normalizedError.message}${LLM_ERROR_BLOCK_END}`,turnReasoningContent||void 0,this.buildFinalTimings(capturedTimings,agenticTimings),void 0),onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings)),normalizedError}if(turnToolCalls.length===0){agenticTimings.perTurn.push(turnStats);const finalTimings=this.buildFinalTimings(capturedTimings,agenticTimings);await onAssistantTurnComplete?.(turnContent,turnReasoningContent||void 0,finalTimings,void 0), -finalTimings&&onTurnComplete?.(finalTimings),onFlowComplete?.(finalTimings);return}const normalizedCalls=this.normalizeToolCalls(turnToolCalls);if(normalizedCalls.length===0){await onAssistantTurnComplete?.(turnContent,turnReasoningContent||void 0,this.buildFinalTimings(capturedTimings,agenticTimings),void 0),onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}totalToolCallCount+=normalizedCalls.length,this.updateSession(conversationId,{totalToolCalls:totalToolCallCount}), -await onAssistantTurnComplete?.(turnContent,turnReasoningContent||void 0,turnTimings,normalizedCalls),sessionMessages.push({role:MessageRole.ASSISTANT,content:turnContent||void 0,reasoning_content:turnReasoningContent||void 0,tool_calls:normalizedCalls});for(const toolCall of normalizedCalls){if(signal?.aborted){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}const toolStartTime=performance.now(),mcpCall={id:toolCall.id,function:{name:toolCall.function.name,arguments:toolCall. -function.arguments}};let result,toolSuccess=!0;try{result=(await mcpStore.executeTool(mcpCall,signal)).content}catch(error2){if(isAbortError(error2)){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}result=`Error: ${error2 instanceof Error?error2.message:String(error2)}`,toolSuccess=!1}const toolDurationMs=performance.now()-toolStartTime,toolTiming={name:toolCall.function.name,duration_ms:Math.round(toolDurationMs),success:toolSuccess};if(agenticTimings.toolCalls.push( -toolTiming),agenticTimings.toolCallsCount++,agenticTimings.toolsMs+=Math.round(toolDurationMs),turnStats.toolCalls.push(toolTiming),turnStats.toolsMs+=Math.round(toolDurationMs),signal?.aborted){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}const{cleanedResult,attachments}=this.extractBase64Attachments(result);let toolResultMessage;createToolResultMessage&&(toolResultMessage=await createToolResultMessage(toolCall.id,cleanedResult,attachments.length>0?attachments: -void 0)),attachments.length>0&&toolResultMessage&&onAttachments?.(toolResultMessage.id,attachments);const contentParts=[{type:ContentPartType.TEXT,text:cleanedResult}];for(const attachment of attachments)attachment.type===AttachmentType.IMAGE&&(modelsStore.modelSupportsVision(effectiveModel)?contentParts.push({type:ContentPartType.IMAGE_URL,image_url:{url:attachment.base64Url}}):console.info(`[AgenticStore] Skipping image attachment (model "${effectiveModel}" does not support vision)`));sessionMessages. -push({role:MessageRole.TOOL,tool_call_id:toolCall.id,content:contentParts.length===1?cleanedResult:contentParts})}if(turnStats.toolCalls.length>0){agenticTimings.perTurn.push(turnStats);const intermediateTimings=this.buildFinalTimings(capturedTimings,agenticTimings);intermediateTimings&&onTurnComplete?.(intermediateTimings)}}onChunk?.(TURN_LIMIT_MESSAGE),await onAssistantTurnComplete?.(TURN_LIMIT_MESSAGE,void 0,this.buildFinalTimings(capturedTimings,agenticTimings),void 0),onFlowComplete?.(this. -buildFinalTimings(capturedTimings,agenticTimings))}buildFinalTimings(capturedTimings,agenticTimings){return agenticTimings.toolCallsCount===0?capturedTimings:{predicted_n:capturedTimings?.predicted_n,predicted_ms:capturedTimings?.predicted_ms,prompt_n:capturedTimings?.prompt_n,prompt_ms:capturedTimings?.prompt_ms,cache_n:capturedTimings?.cache_n,agentic:agenticTimings}}normalizeToolCalls(toolCalls){return toolCalls?toolCalls.map((call,index2)=>({id:call?.id??`tool_${index2}`,type:call?.type??ToolCallType. -FUNCTION,function:{name:call?.function?.name??"",arguments:call?.function?.arguments??""}})):[]}extractBase64Attachments(result){if(!result.trim())return{cleanedResult:result,attachments:[]};const lines=result.split(NEWLINE_SEPARATOR),attachments=[];let attachmentIndex=0;return{cleanedResult:lines.map(line=>{const trimmedLine=line.trim(),match=trimmedLine.match(DATA_URI_BASE64_REGEX);if(!match)return line;const mimeType=match[1].toLowerCase();if(!match[2])return line;attachmentIndex+=1;const name=this. -buildAttachmentName(mimeType,attachmentIndex);return mimeType.startsWith(MimeTypePrefix.IMAGE)?(attachments.push({type:AttachmentType.IMAGE,name,base64Url:trimmedLine}),`[Attachment saved: ${name}]`):line}).join(NEWLINE_SEPARATOR),attachments}}buildAttachmentName(mimeType,index2){const extension2=IMAGE_MIME_TO_EXTENSION[mimeType]??DEFAULT_IMAGE_EXTENSION;return`${MCP_ATTACHMENT_NAME_PREFIX}-${Date.now()}-${index2}.${extension2}`}}const agenticStore=new AgenticStore;class ChatStore{#activeProcessingState=state$1( -null);get activeProcessingState(){return get$4(this.#activeProcessingState)}set activeProcessingState(value){set$1(this.#activeProcessingState,value,!0)}#currentResponse=state$1("");get currentResponse(){return get$4(this.#currentResponse)}set currentResponse(value){set$1(this.#currentResponse,value,!0)}#errorDialogState=state$1(null);get errorDialogState(){return get$4(this.#errorDialogState)}set errorDialogState(value){set$1(this.#errorDialogState,value,!0)}#isLoading=state$1(!1);get isLoading(){ -return get$4(this.#isLoading)}set isLoading(value){set$1(this.#isLoading,value,!0)}chatLoadingStates=new SvelteMap;chatStreamingStates=new SvelteMap;abortControllers=new SvelteMap;preEncodeAbortController=null;processingStates=new SvelteMap;conversationStateTimestamps=new SvelteMap;#activeConversationId=state$1(null);get activeConversationId(){return get$4(this.#activeConversationId)}set activeConversationId(value){set$1(this.#activeConversationId,value,!0)}#isStreamingActive=state$1(!1);get isStreamingActive(){ -return get$4(this.#isStreamingActive)}set isStreamingActive(value){set$1(this.#isStreamingActive,value,!0)}#isEditModeActive=state$1(!1);get isEditModeActive(){return get$4(this.#isEditModeActive)}set isEditModeActive(value){set$1(this.#isEditModeActive,value,!0)}#addFilesHandler=state$1(null);get addFilesHandler(){return get$4(this.#addFilesHandler)}set addFilesHandler(value){set$1(this.#addFilesHandler,value,!0)}#pendingEditMessageId=state$1(null);get pendingEditMessageId(){return get$4(this.#pendingEditMessageId)}set pendingEditMessageId(value){ -set$1(this.#pendingEditMessageId,value,!0)}messageUpdateCallback=null;#_pendingDraftMessage=state$1("");get _pendingDraftMessage(){return get$4(this.#_pendingDraftMessage)}set _pendingDraftMessage(value){set$1(this.#_pendingDraftMessage,value,!0)}#_pendingDraftFiles=state$1(proxy([]));get _pendingDraftFiles(){return get$4(this.#_pendingDraftFiles)}set _pendingDraftFiles(value){set$1(this.#_pendingDraftFiles,value,!0)}setChatLoading(convId,loading){this.touchConversationState(convId),loading?(this. -chatLoadingStates.set(convId,!0),convId===conversationsStore.activeConversation?.id&&(this.isLoading=!0)):(this.chatLoadingStates.delete(convId),convId===conversationsStore.activeConversation?.id&&(this.isLoading=!1))}setChatStreaming(convId,response,messageId){this.touchConversationState(convId),this.chatStreamingStates.set(convId,{response,messageId}),convId===conversationsStore.activeConversation?.id&&(this.currentResponse=response)}clearChatStreaming(convId){this.chatStreamingStates.delete(convId), -convId===conversationsStore.activeConversation?.id&&(this.currentResponse="")}getChatStreaming(convId){return this.chatStreamingStates.get(convId)}syncLoadingStateForChat(convId){this.isLoading=this.chatLoadingStates.get(convId)||!1;const s2=this.chatStreamingStates.get(convId);if(this.currentResponse=s2?.response||"",this.isStreamingActive=s2!==void 0,this.setActiveProcessingConversation(convId),s2?.response&&s2?.messageId){const idx=conversationsStore.findMessageIndex(s2.messageId);idx!==-1&&conversationsStore. -updateMessageAtIndex(idx,{content:s2.response})}}clearUIState(){this.isLoading=!1,this.currentResponse="",this.isStreamingActive=!1}setActiveProcessingConversation(conversationId){this.activeConversationId=conversationId,this.activeProcessingState=conversationId&&this.processingStates.get(conversationId)||null}getProcessingState(conversationId){return this.processingStates.get(conversationId)||null}setProcessingState(conversationId,state2){state2===null?this.processingStates.delete(conversationId): -this.processingStates.set(conversationId,state2),conversationId===this.activeConversationId&&(this.activeProcessingState=state2)}clearProcessingState(conversationId){this.processingStates.delete(conversationId),conversationId===this.activeConversationId&&(this.activeProcessingState=null)}getActiveProcessingState(){return this.activeProcessingState}getCurrentProcessingStateSync(){return this.activeProcessingState}setStreamingActive(active){this.isStreamingActive=active}isStreaming(){return this.isStreamingActive}getOrCreateAbortController(convId){ -let c2=this.abortControllers.get(convId);return(!c2||c2.signal.aborted)&&(c2=new AbortController,this.abortControllers.set(convId,c2)),c2}abortRequest(convId){if(convId){const c2=this.abortControllers.get(convId);c2&&(c2.abort(),this.abortControllers.delete(convId))}else{for(const c2 of this.abortControllers.values())c2.abort();this.abortControllers.clear()}}showErrorDialog(state2){this.errorDialogState=state2}dismissErrorDialog(){this.errorDialogState=null}clearEditMode(){this.isEditModeActive= -!1,this.addFilesHandler=null}isEditing(){return this.isEditModeActive}setEditModeActive(handler){this.isEditModeActive=!0,this.addFilesHandler=handler}getAddFilesHandler(){return this.addFilesHandler}clearPendingEditMessageId(){this.pendingEditMessageId=null}savePendingDraft(message,files){this._pendingDraftMessage=message,this._pendingDraftFiles=[...files]}consumePendingDraft(){if(!this._pendingDraftMessage&&this._pendingDraftFiles.length===0)return null;const d2={message:this._pendingDraftMessage, -files:[...this._pendingDraftFiles]};return this._pendingDraftMessage="",this._pendingDraftFiles=[],d2}hasPendingDraft(){return!!this._pendingDraftMessage||this._pendingDraftFiles.length>0}getAllLoadingChats(){return Array.from(this.chatLoadingStates.keys())}getAllStreamingChats(){return Array.from(this.chatStreamingStates.keys())}getChatStreamingPublic(convId){return this.getChatStreaming(convId)}isChatLoadingPublic(convId){return this.chatLoadingStates.get(convId)||!1}isChatLoadingInternal(convId){ -return this.chatStreamingStates.has(convId)}touchConversationState(convId){this.conversationStateTimestamps.set(convId,{lastAccessed:Date.now()})}cleanupOldConversationStates(activeConversationIds){const now2=Date.now(),activeIdsList=activeConversationIds??[],preserveIds=this.activeConversationId?[...activeIdsList,this.activeConversationId]:activeIdsList,allConvIds=[...new Set([...this.chatLoadingStates.keys(),...this.chatStreamingStates.keys(),...this.abortControllers.keys(),...this.processingStates. -keys(),...this.conversationStateTimestamps.keys()])],cleanupCandidates=[];for(const convId of allConvIds){if(preserveIds.includes(convId)||this.chatLoadingStates.get(convId)||this.chatStreamingStates.has(convId))continue;const ts=this.conversationStateTimestamps.get(convId);cleanupCandidates.push({convId,lastAccessed:ts?.lastAccessed??0})}cleanupCandidates.sort((a,b)=>a.lastAccessed-b.lastAccessed);let cleanedUp=0;for(const{convId,lastAccessed}of cleanupCandidates)(cleanupCandidates.length-cleanedUp> -MAX_INACTIVE_CONVERSATION_STATES||now2-lastAccessed>INACTIVE_CONVERSATION_STATE_MAX_AGE_MS)&&(this.cleanupConversationState(convId),cleanedUp++);return cleanedUp}cleanupConversationState(convId){const c2=this.abortControllers.get(convId);c2&&!c2.signal.aborted&&c2.abort(),this.chatLoadingStates.delete(convId),this.chatStreamingStates.delete(convId),this.abortControllers.delete(convId),this.processingStates.delete(convId),this.conversationStateTimestamps.delete(convId)}getTrackedConversationCount(){ -return new Set([...this.chatLoadingStates.keys(),...this.chatStreamingStates.keys(),...this.abortControllers.keys(),...this.processingStates.keys()]).size}getMessageByIdWithRole(messageId,expectedRole){const index2=conversationsStore.findMessageIndex(messageId);if(index2===-1)return null;const message=conversationsStore.activeMessages[index2];return expectedRole&&message.role!==expectedRole?null:{message,index:index2}}async addMessage(role,content2,type2=MessageType.TEXT,parent="-1",extras){const activeConv=conversationsStore. -activeConversation;if(!activeConv)throw new Error("No active conversation");let parentId=null;if(parent==="-1"){const am=conversationsStore.activeMessages;if(am.length>0)parentId=am[am.length-1].id;else{const r2=(await conversationsStore.getConversationMessages(activeConv.id)).find(m=>m.parent===null&&m.type==="root");parentId=r2?r2.id:await DatabaseService.createRootMessage(activeConv.id)}}else parentId=parent;const message=await DatabaseService.createMessageBranch({convId:activeConv.id,role,content:content2, -type:type2,timestamp:Date.now(),toolCalls:"",children:[],extra:extras},parentId);return conversationsStore.addMessageToActive(message),await conversationsStore.updateCurrentNode(message.id),conversationsStore.updateConversationTimestamp(),message}async addSystemPrompt(){let activeConv=conversationsStore.activeConversation;if(activeConv||(await conversationsStore.createConversation(),activeConv=conversationsStore.activeConversation),!!activeConv)try{const allMessages=await conversationsStore.getConversationMessages( -activeConv.id),rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null),rootId=rootMessage?rootMessage.id:await DatabaseService.createRootMessage(activeConv.id),existingSystemMessage=allMessages.find(m=>m.role===MessageRole.SYSTEM&&m.parent===rootId);if(existingSystemMessage){this.pendingEditMessageId=existingSystemMessage.id,conversationsStore.activeMessages.some(m=>m.id===existingSystemMessage.id)||conversationsStore.activeMessages.unshift(existingSystemMessage);return}const firstActiveMessage=conversationsStore. -activeMessages.find(m=>m.parent===rootId),systemMessage=await DatabaseService.createSystemMessage(activeConv.id,SYSTEM_MESSAGE_PLACEHOLDER,rootId);if(firstActiveMessage){await DatabaseService.updateMessage(firstActiveMessage.id,{parent:systemMessage.id}),await DatabaseService.updateMessage(systemMessage.id,{children:[firstActiveMessage.id]});const updatedRootChildren=rootMessage?rootMessage.children.filter(id2=>id2!==firstActiveMessage.id):[];await DatabaseService.updateMessage(rootId,{children:[ -...updatedRootChildren.filter(id2=>id2!==systemMessage.id),systemMessage.id]});const firstMsgIndex=conversationsStore.findMessageIndex(firstActiveMessage.id);firstMsgIndex!==-1&&conversationsStore.updateMessageAtIndex(firstMsgIndex,{parent:systemMessage.id})}conversationsStore.activeMessages.unshift(systemMessage),this.pendingEditMessageId=systemMessage.id,conversationsStore.updateConversationTimestamp()}catch(error2){console.error("Failed to add system prompt:",error2)}}async removeSystemPromptPlaceholder(messageId){ -const activeConv=conversationsStore.activeConversation;if(!activeConv)return!1;try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),systemMessage=findMessageById(allMessages,messageId);if(!systemMessage||systemMessage.role!==MessageRole.SYSTEM)return!1;const rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null);if(!rootMessage)return!1;if(allMessages.length===2&&systemMessage.children.length===0)return await conversationsStore.deleteConversation(activeConv. -id),!0;for(const childId of systemMessage.children){await DatabaseService.updateMessage(childId,{parent:rootMessage.id});const childIndex=conversationsStore.findMessageIndex(childId);childIndex!==-1&&conversationsStore.updateMessageAtIndex(childIndex,{parent:rootMessage.id})}await DatabaseService.updateMessage(rootMessage.id,{children:[...rootMessage.children.filter(id2=>id2!==messageId),...systemMessage.children]}),await DatabaseService.deleteMessage(messageId);const systemIndex=conversationsStore. -findMessageIndex(messageId);return systemIndex!==-1&&conversationsStore.activeMessages.splice(systemIndex,1),conversationsStore.updateConversationTimestamp(),!1}catch(error2){return console.error("Failed to remove system prompt placeholder:",error2),!1}}async createAssistantMessage(parentId){const activeConv=conversationsStore.activeConversation;if(!activeConv)throw new Error("No active conversation");return await DatabaseService.createMessageBranch({convId:activeConv.id,type:MessageType.TEXT,role:MessageRole. -ASSISTANT,content:"",timestamp:Date.now(),toolCalls:"",children:[],model:null},parentId||null)}async sendMessage(content2,extras){if(!content2.trim()&&(!extras||extras.length===0))return;const activeConv=conversationsStore.activeConversation;if(activeConv&&this.isChatLoadingInternal(activeConv.id))return;this.cancelPreEncode();const resourceExtras=mcpStore.consumeResourceAttachmentsAsExtras(),allExtras=resourceExtras.length>0?[...extras||[],...resourceExtras]:extras;let isNewConversation=!1;activeConv|| -(await conversationsStore.createConversation(),isNewConversation=!0);const currentConv=conversationsStore.activeConversation;if(currentConv){this.showErrorDialog(null),this.setChatLoading(currentConv.id,!0),this.clearChatStreaming(currentConv.id);try{let parentIdForUserMessage;if(isNewConversation){const rootId=await DatabaseService.createRootMessage(currentConv.id),systemPrompt=config$1().systemMessage?.toString().trim();if(systemPrompt){const systemMessage=await DatabaseService.createSystemMessage( -currentConv.id,systemPrompt,rootId);conversationsStore.addMessageToActive(systemMessage),parentIdForUserMessage=systemMessage.id}else parentIdForUserMessage=rootId}const userMessage=await this.addMessage(MessageRole.USER,content2,MessageType.TEXT,parentIdForUserMessage??"-1",allExtras);isNewConversation&&content2&&await conversationsStore.updateConversationName(currentConv.id,generateConversationTitle(content2,!!config$1().titleGenerationUseFirstLine));const assistantMessage=await this.createAssistantMessage( -userMessage.id);conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion(conversationsStore.activeMessages.slice(0,-1),assistantMessage)}catch(error2){if(isAbortError(error2)){this.setChatLoading(currentConv.id,!1);return}console.error("Failed to send message:",error2),this.setChatLoading(currentConv.id,!1);const dialogType=error2 instanceof Error&&error2.name==="TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER,contextInfo=error2.contextInfo;this.showErrorDialog( -{type:dialogType,message:error2 instanceof Error?error2.message:"Unknown error",contextInfo})}}}async streamChatCompletion(allMessages,assistantMessage,onComplete,onError,modelOverride){let effectiveModel=modelOverride;if(isRouterMode()&&!effectiveModel){const conversationModel=this.getConversationModel(allMessages);effectiveModel=selectedModelName()||conversationModel}isRouterMode()&&effectiveModel&&(modelsStore.getModelProps(effectiveModel)||await modelsStore.fetchModelProps(effectiveModel));let currentMessageId=assistantMessage. -id,streamedContent="",streamedReasoningContent="",resolvedModel=null,modelPersisted=!1;const convId=assistantMessage.convId,recordModel=(modelName,persistImmediately=!0)=>{if(!modelName)return;const n=normalizeModelName(modelName);if(!n||n===resolvedModel)return;resolvedModel=n;const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{model:n}),persistImmediately&&!modelPersisted&&(modelPersisted=!0,DatabaseService.updateMessage(currentMessageId, -{model:n}).catch(()=>{modelPersisted=!1,resolvedModel=null}))},updateStreamingUI=()=>{this.setChatStreaming(convId,streamedContent,currentMessageId);const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{content:streamedContent})},cleanupStreamingState=()=>{this.setStreamingActive(!1),this.setChatLoading(convId,!1),this.clearChatStreaming(convId),this.setProcessingState(convId,null)};this.setStreamingActive(!0),this.setActiveProcessingConversation( -convId);const abortController=this.getOrCreateAbortController(convId),streamCallbacks={onChunk:chunk=>{streamedContent+=chunk,updateStreamingUI()},onReasoningChunk:chunk=>{streamedReasoningContent+=chunk;const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{reasoningContent:streamedReasoningContent})},onToolCallsStreaming:toolCalls=>{const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{ -toolCalls:JSON.stringify(toolCalls)})},onAttachments:(messageId,extras)=>{if(!extras.length)return;const idx=conversationsStore.findMessageIndex(messageId);if(idx===-1)return;const updatedExtras=[...conversationsStore.activeMessages[idx].extra||[],...extras];conversationsStore.updateMessageAtIndex(idx,{extra:updatedExtras}),DatabaseService.updateMessage(messageId,{extra:updatedExtras}).catch(console.error)},onModel:modelName=>recordModel(modelName),onTurnComplete:intermediateTimings=>{const idx=conversationsStore. -findMessageIndex(assistantMessage.id);conversationsStore.updateMessageAtIndex(idx,{timings:intermediateTimings})},onTimings:(timings,promptProgress)=>{const tokensPerSecond=timings?.predicted_ms&&timings?.predicted_n?timings.predicted_n/timings.predicted_ms*1e3:0;this.updateProcessingStateFromTimings({prompt_n:timings?.prompt_n||0,prompt_ms:timings?.prompt_ms,predicted_n:timings?.predicted_n||0,predicted_per_second:tokensPerSecond,cache_n:timings?.cache_n||0,prompt_progress:promptProgress},convId)}, -onAssistantTurnComplete:async(content2,reasoningContent,timings,toolCalls)=>{const updateData={content:content2,reasoningContent:reasoningContent||void 0,toolCalls:toolCalls?JSON.stringify(toolCalls):"",timings};resolvedModel&&!modelPersisted&&(updateData.model=resolvedModel),await DatabaseService.updateMessage(currentMessageId,updateData);const idx=conversationsStore.findMessageIndex(currentMessageId),uiUpdate={content:content2,reasoningContent:reasoningContent||void 0,toolCalls:toolCalls?JSON. -stringify(toolCalls):""};timings&&(uiUpdate.timings=timings),resolvedModel&&(uiUpdate.model=resolvedModel),conversationsStore.updateMessageAtIndex(idx,uiUpdate),await conversationsStore.updateCurrentNode(currentMessageId)},createToolResultMessage:async(toolCallId,content2,extras)=>{const msg=await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.TOOL,content:content2,toolCallId,timestamp:Date.now(),toolCalls:"",children:[],extra:extras},currentMessageId);return conversationsStore. +var div=sibling(node_2,2),node_5=child(div);{var consequent=$$anchor6=>{var div_1=root_6$l();append($$anchor6,div_1)},consequent_11=$$anchor6=>{const modelMeta=user_derived(()=>get$3(firstModel).meta);var fragment_4=comment$2(),node_6=first_child(fragment_4);{var consequent_10=$$anchor7=>{var fragment_5=comment$2(),node_7=first_child(fragment_5);component(node_7,()=>Table,($$anchor8,Table_Root)=>{Table_Root($$anchor8,{children:($$anchor9,$$slotProps3)=>{var fragment_6=root_9$g(),node_8=first_child( +fragment_6);component(node_8,()=>Table_header,($$anchor10,Table_Header)=>{Table_Header($$anchor10,{children:($$anchor11,$$slotProps4)=>{var fragment_7=comment$2(),node_9=first_child(fragment_7);component(node_9,()=>Table_row,($$anchor12,Table_Row)=>{Table_Row($$anchor12,{children:($$anchor13,$$slotProps5)=>{var fragment_8=root_11$b(),node_10=first_child(fragment_8);component(node_10,()=>Table_head,($$anchor14,Table_Head)=>{Table_Head($$anchor14,{class:"w-[10rem]",children:($$anchor15,$$slotProps6)=>{ +next$1();var text_2=text$8("Model");append($$anchor15,text_2)},$$slots:{default:!0}})});var node_11=sibling(node_10,2);component(node_11,()=>Table_head,($$anchor14,Table_Head_1)=>{Table_Head_1($$anchor14,{children:($$anchor15,$$slotProps6)=>{var div_2=root_13$9(),span=child(div_2);set_style(span,"",{},{"--threshold":"12rem"});var text_3=child(span,!0);reset(span);var node_12=sibling(span,2);{let $0=user_derived(()=>get$3(modelName)||""),$1=user_derived(()=>!!get$3(modelName));ActionIconCopyToClipboard( +node_12,{get text(){return get$3($0)},get canCopy(){return get$3($1)},ariaLabel:"Copy model name to clipboard"})}reset(div_2),template_effect(()=>set_text(text_3,get$3(modelName))),append($$anchor15,div_2)},$$slots:{default:!0}})}),append($$anchor13,fragment_8)},$$slots:{default:!0}})}),append($$anchor11,fragment_7)},$$slots:{default:!0}})});var node_13=sibling(node_8,2);component(node_13,()=>Table_body,($$anchor10,Table_Body)=>{Table_Body($$anchor10,{children:($$anchor11,$$slotProps4)=>{var fragment_9=root_14$6(), +node_14=first_child(fragment_9);component(node_14,()=>Table_row,($$anchor12,Table_Row_1)=>{Table_Row_1($$anchor12,{children:($$anchor13,$$slotProps5)=>{var fragment_10=root_15$9(),node_15=first_child(fragment_10);component(node_15,()=>Table_cell,($$anchor14,Table_Cell)=>{Table_Cell($$anchor14,{class:"h-10 align-middle font-medium",children:($$anchor15,$$slotProps6)=>{next$1();var text_4=text$8("File Path");append($$anchor15,text_4)},$$slots:{default:!0}})});var node_16=sibling(node_15,2);component( +node_16,()=>Table_cell,($$anchor14,Table_Cell_1)=>{Table_Cell_1($$anchor14,{class:"inline-flex h-10 items-center gap-2 align-middle font-mono text-xs",children:($$anchor15,$$slotProps6)=>{var fragment_11=root_17$9(),span_1=first_child(fragment_11);set_style(span_1,"",{},{"--threshold":"14rem"});var text_5=child(span_1,!0);reset(span_1);var node_17=sibling(span_1,2);ActionIconCopyToClipboard(node_17,{get text(){return get$3(serverProps2).model_path},ariaLabel:"Copy model path to clipboard"}),template_effect( +()=>set_text(text_5,get$3(serverProps2).model_path)),append($$anchor15,fragment_11)},$$slots:{default:!0}})}),append($$anchor13,fragment_10)},$$slots:{default:!0}})});var node_18=sibling(node_14,2);{var consequent_1=$$anchor12=>{var fragment_12=comment$2(),node_19=first_child(fragment_12);component(node_19,()=>Table_row,($$anchor13,Table_Row_2)=>{Table_Row_2($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_13=root_19$8(),node_20=first_child(fragment_13);component(node_20,()=>Table_cell, +($$anchor15,Table_Cell_2)=>{Table_Cell_2($$anchor15,{class:"h-10 align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_6=text$8("Context Size");append($$anchor16,text_6)},$$slots:{default:!0}})});var node_21=sibling(node_20,2);component(node_21,()=>Table_cell,($$anchor15,Table_Cell_3)=>{Table_Cell_3($$anchor15,{children:($$anchor16,$$slotProps6)=>{next$1();var text_7=text$8();template_effect($0=>set_text(text_7,`${$0??""} tokens`),[()=>formatNumber(get$3(serverProps2). +default_generation_settings.n_ctx)]),append($$anchor16,text_7)},$$slots:{default:!0}})}),append($$anchor14,fragment_13)},$$slots:{default:!0}})}),append($$anchor12,fragment_12)},alternate=$$anchor12=>{var fragment_15=comment$2(),node_22=first_child(fragment_15);component(node_22,()=>Table_row,($$anchor13,Table_Row_3)=>{Table_Row_3($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_16=root_23$2(),node_23=first_child(fragment_16);component(node_23,()=>Table_cell,($$anchor15,Table_Cell_4)=>{ +Table_Cell_4($$anchor15,{class:"h-10 align-middle font-medium text-red-500",children:($$anchor16,$$slotProps6)=>{next$1();var text_8=text$8("Context Size");append($$anchor16,text_8)},$$slots:{default:!0}})});var node_24=sibling(node_23,2);component(node_24,()=>Table_cell,($$anchor15,Table_Cell_5)=>{Table_Cell_5($$anchor15,{class:"text-red-500",children:($$anchor16,$$slotProps6)=>{next$1();var text_9=text$8("Not available");append($$anchor16,text_9)},$$slots:{default:!0}})}),append($$anchor14,fragment_16)}, +$$slots:{default:!0}})}),append($$anchor12,fragment_15)};if_block(node_18,$$render=>{get$3(serverProps2)?.default_generation_settings?.n_ctx?$$render(consequent_1):$$render(alternate,-1)})}var node_25=sibling(node_18,2);{var consequent_2=$$anchor12=>{var fragment_17=comment$2(),node_26=first_child(fragment_17);component(node_26,()=>Table_row,($$anchor13,Table_Row_4)=>{Table_Row_4($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_18=root_27$2(),node_27=first_child(fragment_18);component( +node_27,()=>Table_cell,($$anchor15,Table_Cell_6)=>{Table_Cell_6($$anchor15,{class:"h-10 align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_10=text$8("Training Context");append($$anchor16,text_10)},$$slots:{default:!0}})});var node_28=sibling(node_27,2);component(node_28,()=>Table_cell,($$anchor15,Table_Cell_7)=>{Table_Cell_7($$anchor15,{children:($$anchor16,$$slotProps6)=>{next$1();var text_11=text$8();template_effect($0=>set_text(text_11,`${$0??""} tokens`),[()=>formatNumber( +get$3(modelMeta).n_ctx_train)]),append($$anchor16,text_11)},$$slots:{default:!0}})}),append($$anchor14,fragment_18)},$$slots:{default:!0}})}),append($$anchor12,fragment_17)};if_block(node_25,$$render=>{get$3(modelMeta)?.n_ctx_train&&$$render(consequent_2)})}var node_29=sibling(node_25,2);{var consequent_3=$$anchor12=>{var fragment_20=comment$2(),node_30=first_child(fragment_20);component(node_30,()=>Table_row,($$anchor13,Table_Row_5)=>{Table_Row_5($$anchor13,{children:($$anchor14,$$slotProps5)=>{ +var fragment_21=root_31(),node_31=first_child(fragment_21);component(node_31,()=>Table_cell,($$anchor15,Table_Cell_8)=>{Table_Cell_8($$anchor15,{class:"h-10 align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_12=text$8("Model Size");append($$anchor16,text_12)},$$slots:{default:!0}})});var node_32=sibling(node_31,2);component(node_32,()=>Table_cell,($$anchor15,Table_Cell_9)=>{Table_Cell_9($$anchor15,{children:($$anchor16,$$slotProps6)=>{next$1();var text_13=text$8();template_effect( +$0=>set_text(text_13,$0),[()=>formatFileSize(get$3(modelMeta).size)]),append($$anchor16,text_13)},$$slots:{default:!0}})}),append($$anchor14,fragment_21)},$$slots:{default:!0}})}),append($$anchor12,fragment_20)};if_block(node_29,$$render=>{get$3(modelMeta)?.size&&$$render(consequent_3)})}var node_33=sibling(node_29,2);{var consequent_4=$$anchor12=>{var fragment_23=comment$2(),node_34=first_child(fragment_23);component(node_34,()=>Table_row,($$anchor13,Table_Row_6)=>{Table_Row_6($$anchor13,{children:($$anchor14,$$slotProps5)=>{ +var fragment_24=root_35(),node_35=first_child(fragment_24);component(node_35,()=>Table_cell,($$anchor15,Table_Cell_10)=>{Table_Cell_10($$anchor15,{class:"h-10 align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_14=text$8("Parameters");append($$anchor16,text_14)},$$slots:{default:!0}})});var node_36=sibling(node_35,2);component(node_36,()=>Table_cell,($$anchor15,Table_Cell_11)=>{Table_Cell_11($$anchor15,{children:($$anchor16,$$slotProps6)=>{next$1();var text_15=text$8(); +template_effect($0=>set_text(text_15,$0),[()=>formatParameters(get$3(modelMeta).n_params)]),append($$anchor16,text_15)},$$slots:{default:!0}})}),append($$anchor14,fragment_24)},$$slots:{default:!0}})}),append($$anchor12,fragment_23)};if_block(node_33,$$render=>{get$3(modelMeta)?.n_params&&$$render(consequent_4)})}var node_37=sibling(node_33,2);{var consequent_5=$$anchor12=>{var fragment_26=comment$2(),node_38=first_child(fragment_26);component(node_38,()=>Table_row,($$anchor13,Table_Row_7)=>{Table_Row_7( +$$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_27=root_39(),node_39=first_child(fragment_27);component(node_39,()=>Table_cell,($$anchor15,Table_Cell_12)=>{Table_Cell_12($$anchor15,{class:"align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_16=text$8("Embedding Size");append($$anchor16,text_16)},$$slots:{default:!0}})});var node_40=sibling(node_39,2);component(node_40,()=>Table_cell,($$anchor15,Table_Cell_13)=>{Table_Cell_13($$anchor15,{children:($$anchor16,$$slotProps6)=>{ +next$1();var text_17=text$8();template_effect($0=>set_text(text_17,$0),[()=>formatNumber(get$3(modelMeta).n_embd)]),append($$anchor16,text_17)},$$slots:{default:!0}})}),append($$anchor14,fragment_27)},$$slots:{default:!0}})}),append($$anchor12,fragment_26)};if_block(node_37,$$render=>{get$3(modelMeta)?.n_embd&&$$render(consequent_5)})}var node_41=sibling(node_37,2);{var consequent_6=$$anchor12=>{var fragment_29=comment$2(),node_42=first_child(fragment_29);component(node_42,()=>Table_row,($$anchor13,Table_Row_8)=>{ +Table_Row_8($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_30=root_43(),node_43=first_child(fragment_30);component(node_43,()=>Table_cell,($$anchor15,Table_Cell_14)=>{Table_Cell_14($$anchor15,{class:"align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_18=text$8("Vocabulary Size");append($$anchor16,text_18)},$$slots:{default:!0}})});var node_44=sibling(node_43,2);component(node_44,()=>Table_cell,($$anchor15,Table_Cell_15)=>{Table_Cell_15($$anchor15,{children:($$anchor16,$$slotProps6)=>{ +next$1();var text_19=text$8();template_effect($0=>set_text(text_19,`${$0??""} tokens`),[()=>formatNumber(get$3(modelMeta).n_vocab)]),append($$anchor16,text_19)},$$slots:{default:!0}})}),append($$anchor14,fragment_30)},$$slots:{default:!0}})}),append($$anchor12,fragment_29)};if_block(node_41,$$render=>{get$3(modelMeta)?.n_vocab&&$$render(consequent_6)})}var node_45=sibling(node_41,2);{var consequent_7=$$anchor12=>{var fragment_32=comment$2(),node_46=first_child(fragment_32);component(node_46,()=>Table_row, +($$anchor13,Table_Row_9)=>{Table_Row_9($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_33=root_47(),node_47=first_child(fragment_33);component(node_47,()=>Table_cell,($$anchor15,Table_Cell_16)=>{Table_Cell_16($$anchor15,{class:"align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_20=text$8("Vocabulary Type");append($$anchor16,text_20)},$$slots:{default:!0}})});var node_48=sibling(node_47,2);component(node_48,()=>Table_cell,($$anchor15,Table_Cell_17)=>{Table_Cell_17( +$$anchor15,{class:"align-middle capitalize",children:($$anchor16,$$slotProps6)=>{next$1();var text_21=text$8();template_effect(()=>set_text(text_21,get$3(modelMeta).vocab_type)),append($$anchor16,text_21)},$$slots:{default:!0}})}),append($$anchor14,fragment_33)},$$slots:{default:!0}})}),append($$anchor12,fragment_32)};if_block(node_45,$$render=>{get$3(modelMeta)?.vocab_type&&$$render(consequent_7)})}var node_49=sibling(node_45,2);component(node_49,()=>Table_row,($$anchor12,Table_Row_10)=>{Table_Row_10( +$$anchor12,{children:($$anchor13,$$slotProps5)=>{var fragment_35=root_50(),node_50=first_child(fragment_35);component(node_50,()=>Table_cell,($$anchor14,Table_Cell_18)=>{Table_Cell_18($$anchor14,{class:"align-middle font-medium",children:($$anchor15,$$slotProps6)=>{next$1();var text_22=text$8("Parallel Slots");append($$anchor15,text_22)},$$slots:{default:!0}})});var node_51=sibling(node_50,2);component(node_51,()=>Table_cell,($$anchor14,Table_Cell_19)=>{Table_Cell_19($$anchor14,{children:($$anchor15,$$slotProps6)=>{ +next$1();var text_23=text$8();template_effect(()=>set_text(text_23,get$3(serverProps2).total_slots)),append($$anchor15,text_23)},$$slots:{default:!0}})}),append($$anchor13,fragment_35)},$$slots:{default:!0}})});var node_52=sibling(node_49,2);{var consequent_8=$$anchor12=>{var fragment_37=comment$2(),node_53=first_child(fragment_37);component(node_53,()=>Table_row,($$anchor13,Table_Row_11)=>{Table_Row_11($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_38=root_54(),node_54=first_child( +fragment_38);component(node_54,()=>Table_cell,($$anchor15,Table_Cell_20)=>{Table_Cell_20($$anchor15,{class:"align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_24=text$8("Modalities");append($$anchor16,text_24)},$$slots:{default:!0}})});var node_55=sibling(node_54,2);component(node_55,()=>Table_cell,($$anchor15,Table_Cell_21)=>{Table_Cell_21($$anchor15,{children:($$anchor16,$$slotProps6)=>{var div_3=root_56(),node_56=child(div_3);BadgeModality(node_56,{get modalities(){ +return get$3(modalities)}}),reset(div_3),append($$anchor16,div_3)},$$slots:{default:!0}})}),append($$anchor14,fragment_38)},$$slots:{default:!0}})}),append($$anchor12,fragment_37)};if_block(node_52,$$render=>{get$3(modalities).length>0&&$$render(consequent_8)})}var node_57=sibling(node_52,2);component(node_57,()=>Table_row,($$anchor12,Table_Row_12)=>{Table_Row_12($$anchor12,{children:($$anchor13,$$slotProps5)=>{var fragment_39=root_57(),node_58=first_child(fragment_39);component(node_58,()=>Table_cell, +($$anchor14,Table_Cell_22)=>{Table_Cell_22($$anchor14,{class:"align-middle font-medium",children:($$anchor15,$$slotProps6)=>{next$1();var text_25=text$8("Build Info");append($$anchor15,text_25)},$$slots:{default:!0}})});var node_59=sibling(node_58,2);component(node_59,()=>Table_cell,($$anchor14,Table_Cell_23)=>{Table_Cell_23($$anchor14,{class:"align-middle font-mono text-xs",children:($$anchor15,$$slotProps6)=>{next$1();var text_26=text$8();template_effect(()=>set_text(text_26,get$3(serverProps2). +build_info)),append($$anchor15,text_26)},$$slots:{default:!0}})}),append($$anchor13,fragment_39)},$$slots:{default:!0}})});var node_60=sibling(node_57,2);{var consequent_9=$$anchor12=>{var fragment_41=comment$2(),node_61=first_child(fragment_41);component(node_61,()=>Table_row,($$anchor13,Table_Row_13)=>{Table_Row_13($$anchor13,{children:($$anchor14,$$slotProps5)=>{var fragment_42=root_61(),node_62=first_child(fragment_42);component(node_62,()=>Table_cell,($$anchor15,Table_Cell_24)=>{Table_Cell_24( +$$anchor15,{class:"align-middle font-medium",children:($$anchor16,$$slotProps6)=>{next$1();var text_27=text$8("Chat Template");append($$anchor16,text_27)},$$slots:{default:!0}})});var node_63=sibling(node_62,2);component(node_63,()=>Table_cell,($$anchor15,Table_Cell_25)=>{Table_Cell_25($$anchor15,{class:"py-10",children:($$anchor16,$$slotProps6)=>{var div_4=root_63(),pre=child(div_4),text_28=child(pre,!0);reset(pre),reset(div_4),template_effect(()=>set_text(text_28,get$3(serverProps2).chat_template)), +append($$anchor16,div_4)},$$slots:{default:!0}})}),append($$anchor14,fragment_42)},$$slots:{default:!0}})}),append($$anchor12,fragment_41)};if_block(node_60,$$render=>{get$3(serverProps2).chat_template&&$$render(consequent_9)})}append($$anchor11,fragment_9)},$$slots:{default:!0}})}),append($$anchor9,fragment_6)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)};if_block(node_6,$$render=>{get$3(serverProps2)&&$$render(consequent_10)})}append($$anchor6,fragment_4)},consequent_12=$$anchor6=>{var div_5=root_64(); +append($$anchor6,div_5)};if_block(node_5,$$render=>{get$3(isLoadingModels)||get$3(isLoadingRouterProps)?$$render(consequent):get$3(firstModel)?$$render(consequent_11,1):get$3(isLoadingModels)||$$render(consequent_12,2)})}reset(div),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_5$q=from_html('<span class="text-sm font-normal text-muted-foreground"> </span>'),root_4$l=from_html("<!> <span>MCP R\ +esources</span> <!>",1),root_3$w=from_html("<!> <!>",1),root_8$j=from_html('<p class="mb-4 text-xs text-muted-foreground"> </p>'),root_9$f=from_html('<div class="flex flex-1 items-center justify-center"><!></div>'),root_10$e=from_html('<div class="flex flex-1 flex-col items-center justify-center gap-2 text-red-500"><span class="text-sm"> </span> <!></div>'),root_7$l=from_html('<div class="flex h-full flex-col"><div class="mb-3 flex items-center gap-2"><!> <span class="text-sm font-medium"> </spa\ +n></div> <!> <div class="mb-4 rounded-md border border-border/50 bg-muted/30 px-3 py-2"><p class="font-mono text-xs break-all text-muted-foreground"> </p></div> <!></div>'),root_15$8=from_html('<div class="flex flex-col gap-10"></div>'),root_18$5=from_html('<div class="flex h-full items-center justify-center text-sm text-muted-foreground">Select a resource to preview</div>'),root_22$1=from_html("<!> Attach Resource",1),root_26$1=from_html("<!> ",1),root_19$7=from_html("<!> <!>",1),root_2$L=from_html( +'<!> <div class="flex h-[500px] min-w-0"><div class="w-72 shrink-0 overflow-y-auto border-r border-border/30 p-4"><!></div> <div class="min-w-0 flex-1 overflow-auto p-4"><!></div></div> <!>',1);function DialogMcpResources($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),selectedResources=new SvelteSet,lastSelectedUri=state$1(null),isAttaching=state$1(!1),selectedTemplate=state$1(null),templatePreviewUri=state$1(null),templatePreviewContent=state$1(null),templatePreviewLoading=state$1( +!1),templatePreviewError=state$1(null);const totalCount=user_derived(mcpTotalResourceCount);user_effect(()=>{open2()&&(loadResources(),$$props.preSelectedUri&&(selectedResources.clear(),selectedResources.add($$props.preSelectedUri),set$1(lastSelectedUri,$$props.preSelectedUri,!0)))});async function loadResources(){const perChatOverrides=conversationsStore.getAllMcpServerOverrides();await mcpStore.ensureInitialized(perChatOverrides)&&await mcpStore.fetchAllResources()}function handleOpenChange(newOpen){ +open2(newOpen),$$props.onOpenChange?.(newOpen),newOpen||(selectedResources.clear(),set$1(lastSelectedUri,null),clearTemplateState())}function clearTemplateState(){set$1(selectedTemplate,null),set$1(templatePreviewUri,null),set$1(templatePreviewContent,null),set$1(templatePreviewLoading,!1),set$1(templatePreviewError,null)}function handleTemplateSelect(template){if(selectedResources.clear(),set$1(lastSelectedUri,null),get$3(selectedTemplate)?.uriTemplate===template.uriTemplate&&get$3(selectedTemplate)?. +serverName===template.serverName){clearTemplateState();return}set$1(selectedTemplate,template,!0),set$1(templatePreviewUri,null),set$1(templatePreviewContent,null),set$1(templatePreviewLoading,!1),set$1(templatePreviewError,null)}async function handleTemplateResolve(uri2,serverName){set$1(templatePreviewUri,uri2,!0),set$1(templatePreviewContent,null),set$1(templatePreviewLoading,!0),set$1(templatePreviewError,null);try{const content2=await mcpStore.readResourceByUri(serverName,uri2);content2?set$1( +templatePreviewContent,content2,!0):set$1(templatePreviewError,"Failed to read resource")}catch(error2){set$1(templatePreviewError,error2 instanceof Error?error2.message:"Unknown error",!0)}finally{set$1(templatePreviewLoading,!1)}}function handleTemplateCancelForm(){clearTemplateState()}async function handleAttachTemplateResource(){if(!(!get$3(templatePreviewUri)||!get$3(selectedTemplate)||!get$3(templatePreviewContent))){set$1(isAttaching,!0);try{const knownResource=mcpResourceStore.findResourceByUri( +get$3(templatePreviewUri));if(knownResource)mcpResourceStore.isAttached(knownResource.uri)||await mcpStore.attachResource(knownResource.uri),toast.success(`Resource attached: ${knownResource.title||knownResource.name}`);else{if(mcpResourceStore.isAttached(get$3(templatePreviewUri))){toast.info("Resource already attached"),handleOpenChange(!1);return}const resourceInfo={uri:get$3(templatePreviewUri),name:get$3(templatePreviewUri).split("/").pop()||get$3(templatePreviewUri),serverName:get$3(selectedTemplate). +serverName},attachment=mcpResourceStore.addAttachment(resourceInfo);mcpResourceStore.updateAttachmentContent(attachment.id,get$3(templatePreviewContent)),toast.success(`Resource attached: ${resourceInfo.name}`)}handleOpenChange(!1)}catch(error2){console.error("Failed to attach template resource:",error2)}finally{set$1(isAttaching,!1)}}}function handleResourceSelect(resource,shiftKey=!1){if(clearTemplateState(),shiftKey&&get$3(lastSelectedUri)){const allResources=getAllResourcesFlatInTreeOrder(), +lastIndex=allResources.findIndex(r2=>r2.uri===get$3(lastSelectedUri)),currentIndex=allResources.findIndex(r2=>r2.uri===resource.uri);if(lastIndex!==-1&¤tIndex!==-1){const start2=Math.min(lastIndex,currentIndex),end=Math.max(lastIndex,currentIndex);for(let i=start2;i<=end;i++)selectedResources.add(allResources[i].uri)}}else selectedResources.clear(),selectedResources.add(resource.uri),set$1(lastSelectedUri,resource.uri,!0)}function handleResourceToggle(resource,checked){clearTemplateState(), +checked?selectedResources.add(resource.uri):selectedResources.delete(resource.uri),set$1(lastSelectedUri,resource.uri,!0)}function getAllResourcesFlatInTreeOrder(){const allResources=[],resourcesMap=mcpResources();for(const[serverName,serverRes]of resourcesMap.entries())for(const resource of serverRes.resources)allResources.push({...resource,serverName});return allResources.sort((a,b)=>{const aName=getResourceDisplayName(a),bName=getResourceDisplayName(b);return aName.localeCompare(bName)})}async function handleAttach(){ +if(selectedResources.size!==0){set$1(isAttaching,!0);try{const resourcesToAttach=getAllResourcesFlatInTreeOrder().filter(r2=>selectedResources.has(r2.uri));for(const resource of resourcesToAttach)await mcpStore.attachResource(resource.uri),$$props.onAttach?.(resource);const count=resourcesToAttach.length;toast.success(count===1?`Resource attached: ${resourcesToAttach[0].name}`:`${count} resources attached`),handleOpenChange(!1)}catch(error2){console.error("Failed to attach resources:",error2)}finally{ +set$1(isAttaching,!1)}}}const selectedTemplateUri=user_derived(()=>get$3(selectedTemplate)?.uriTemplate??null),hasTemplateResult=user_derived(()=>!!get$3(selectedTemplate)&&!!get$3(templatePreviewContent)&&!!get$3(templatePreviewUri));var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get open(){return open2()},onOpenChange:handleOpenChange,children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child( +fragment_1);component(node_1,()=>Dialog_content,($$anchor4,Dialog_Content)=>{Dialog_Content($$anchor4,{class:"max-h-[80vh] !max-w-4xl overflow-hidden p-0",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$L(),node_2=first_child(fragment_2);component(node_2,()=>Dialog_header,($$anchor6,Dialog_Header)=>{Dialog_Header($$anchor6,{class:"border-b border-border/30 px-6 py-4",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$w(),node_3=first_child(fragment_3);component(node_3,()=>Dialog_title, +($$anchor8,Dialog_Title)=>{Dialog_Title($$anchor8,{class:"flex items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_4=root_4$l(),node_4=first_child(fragment_4);Folder_open(node_4,{class:"h-5 w-5"});var node_5=sibling(node_4,4);{var consequent=$$anchor10=>{var span=root_5$q(),text2=child(span);reset(span),template_effect(()=>set_text(text2,`(${get$3(totalCount)??""})`)),append($$anchor10,span)};if_block(node_5,$$render=>{get$3(totalCount)>0&&$$render(consequent)})}append($$anchor9, +fragment_4)},$$slots:{default:!0}})});var node_6=sibling(node_3,2);component(node_6,()=>Dialog_description,($$anchor8,Dialog_Description)=>{Dialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8("Browse and attach resources from connected MCP servers to your chat context.");append($$anchor9,text_1)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div=sibling(node_2,2),div_1=child(div),node_7=child(div_1);McpResourceBrowser( +node_7,{onSelect:handleResourceSelect,onToggle:handleResourceToggle,onTemplateSelect:handleTemplateSelect,get selectedUris(){return selectedResources},get selectedTemplateUri(){return get$3(selectedTemplateUri)},get expandToUri(){return $$props.preSelectedUri}}),reset(div_1);var div_2=sibling(div_1,2),node_8=child(div_2);{var consequent_4=$$anchor6=>{var div_3=root_7$l(),div_4=child(div_3),node_9=child(div_4);Braces(node_9,{class:"h-4 w-4 text-muted-foreground"});var span_1=sibling(node_9,2),text_2=child( +span_1,!0);reset(span_1),reset(div_4);var node_10=sibling(div_4,2);{var consequent_1=$$anchor7=>{var p2=root_8$j(),text_3=child(p2,!0);reset(p2),template_effect(()=>set_text(text_3,get$3(selectedTemplate).description)),append($$anchor7,p2)};if_block(node_10,$$render=>{get$3(selectedTemplate).description&&$$render(consequent_1)})}var div_5=sibling(node_10,2),p_1=child(div_5),text_4=child(p_1,!0);reset(p_1),reset(div_5);var node_11=sibling(div_5,2);{var consequent_2=$$anchor7=>{var div_6=root_9$f(), +node_12=child(div_6);Loader_circle(node_12,{class:"h-6 w-6 animate-spin text-muted-foreground"}),reset(div_6),append($$anchor7,div_6)},consequent_3=$$anchor7=>{var div_7=root_10$e(),span_2=child(div_7),text_5=child(span_2,!0);reset(span_2);var node_13=sibling(span_2,2);Button(node_13,{size:"sm",variant:"outline",onclick:()=>{set$1(templatePreviewError,null)},children:($$anchor8,$$slotProps3)=>{next$1();var text_6=text$8("Try again");append($$anchor8,text_6)},$$slots:{default:!0}}),reset(div_7),template_effect( +()=>set_text(text_5,get$3(templatePreviewError))),append($$anchor7,div_7)},alternate=$$anchor7=>{McpResourceTemplateForm($$anchor7,{get template(){return get$3(selectedTemplate)},onResolve:handleTemplateResolve,onCancel:handleTemplateCancelForm})};if_block(node_11,$$render=>{get$3(templatePreviewLoading)?$$render(consequent_2):get$3(templatePreviewError)?$$render(consequent_3,1):$$render(alternate,-1)})}reset(div_3),template_effect(()=>{set_text(text_2,get$3(selectedTemplate).title||get$3(selectedTemplate). +name),set_text(text_4,get$3(selectedTemplate).uriTemplate)}),append($$anchor6,div_3)},consequent_5=$$anchor6=>{{let $0=user_derived(()=>({uri:get$3(templatePreviewUri)??"",name:get$3(templatePreviewUri)?.split("/").pop()||(get$3(templatePreviewUri)??""),serverName:get$3(selectedTemplate)?.serverName||""}));McpResourcePreview($$anchor6,{get resource(){return get$3($0)},get preloadedContent(){return get$3(templatePreviewContent)}})}},consequent_6=$$anchor6=>{const allResources=user_derived(getAllResourcesFlatInTreeOrder), +selectedResource=user_derived(()=>get$3(allResources).find(r2=>selectedResources.has(r2.uri)));{let $0=user_derived(()=>get$3(selectedResource)??null);McpResourcePreview($$anchor6,{get resource(){return get$3($0)}})}},consequent_8=$$anchor6=>{var div_8=root_15$8();each(div_8,21,getAllResourcesFlatInTreeOrder,resource=>resource.uri,($$anchor7,resource)=>{var fragment_8=comment$2(),node_14=first_child(fragment_8);{var consequent_7=$$anchor8=>{McpResourcePreview($$anchor8,{get resource(){return get$3( +resource)}})},d2=user_derived(()=>selectedResources.has(get$3(resource).uri));if_block(node_14,$$render=>{get$3(d2)&&$$render(consequent_7)})}append($$anchor7,fragment_8)}),reset(div_8),append($$anchor6,div_8)},alternate_1=$$anchor6=>{var div_9=root_18$5();append($$anchor6,div_9)};if_block(node_8,$$render=>{get$3(selectedTemplate)&&!get$3(templatePreviewContent)?$$render(consequent_4):get$3(hasTemplateResult)?$$render(consequent_5,1):selectedResources.size===1?$$render(consequent_6,2):selectedResources. +size>1?$$render(consequent_8,3):$$render(alternate_1,-1)})}reset(div_2),reset(div);var node_15=sibling(div,2);component(node_15,()=>Dialog_footer,($$anchor6,Dialog_Footer)=>{Dialog_Footer($$anchor6,{class:"border-t border-border/30 px-6 py-4",children:($$anchor7,$$slotProps3)=>{var fragment_10=root_19$7(),node_16=first_child(fragment_10);Button(node_16,{variant:"outline",onclick:()=>handleOpenChange(!1),children:($$anchor8,$$slotProps4)=>{next$1();var text_7=text$8("Cancel");append($$anchor8,text_7)}, +$$slots:{default:!0}});var node_17=sibling(node_16,2);{var consequent_10=$$anchor8=>{Button($$anchor8,{onclick:handleAttachTemplateResource,get disabled(){return get$3(isAttaching)},children:($$anchor9,$$slotProps4)=>{var fragment_12=root_22$1(),node_18=first_child(fragment_12);{var consequent_9=$$anchor10=>{Loader_circle($$anchor10,{class:"mr-2 h-4 w-4 animate-spin"})},alternate_2=$$anchor10=>{Plus($$anchor10,{class:"mr-2 h-4 w-4"})};if_block(node_18,$$render=>{get$3(isAttaching)?$$render(consequent_9): +$$render(alternate_2,-1)})}next$1(),append($$anchor9,fragment_12)},$$slots:{default:!0}})},alternate_4=$$anchor8=>{{let $0=user_derived(()=>selectedResources.size===0||get$3(isAttaching));Button($$anchor8,{onclick:handleAttach,get disabled(){return get$3($0)},children:($$anchor9,$$slotProps4)=>{var fragment_16=root_26$1(),node_19=first_child(fragment_16);{var consequent_11=$$anchor10=>{Loader_circle($$anchor10,{class:"mr-2 h-4 w-4 animate-spin"})},alternate_3=$$anchor10=>{Plus($$anchor10,{class:"\ +mr-2 h-4 w-4"})};if_block(node_19,$$render=>{get$3(isAttaching)?$$render(consequent_11):$$render(alternate_3,-1)})}var text_8=sibling(node_19);template_effect(()=>set_text(text_8,` Attach ${selectedResources.size>0?`(${selectedResources.size})`:"Resource"}`)),append($$anchor9,fragment_16)},$$slots:{default:!0}})}};if_block(node_17,$$render=>{get$3(hasTemplateResult)?$$render(consequent_10):$$render(alternate_4,-1)})}append($$anchor7,fragment_10)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)}, +$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_7$k=from_html('<img alt="" class="h-3 w-3 shrink-0 rounded-sm"/>'),root_6$k=from_html('<span class="flex items-center gap-1 text-xs text-muted-foreground">· <!> </span>'),root_8$i=from_html('<span class="rounded bg-muted px-1.5 py-0.5 text-xs"> </span>'),root_5$p=from_html('<div class="flex items-center gap-2"><span class="text-xs text-muted-foreground"> </span> <!> <!></div>'), +root_3$v=from_html("<!> <!>",1),root_10$d=from_html('<div class="flex items-center justify-center"><img class="max-h-[70vh] max-w-full rounded object-contain"/></div>'),root_12$8=from_html('<pre class="max-h-[70vh] overflow-auto rounded-md border bg-muted/30 p-4 font-mono text-sm break-words whitespace-pre-wrap"> </pre>'),root_13$8=from_html('<div class="py-8 text-center text-sm text-muted-foreground">No content available</div>'),root_2$K=from_html('<!> <div class="flex items-center justify-end \ +gap-1"><!> <!></div> <div class="overflow-auto"><!></div>',1);function DialogMcpResourcePreview($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15);const serverName=user_derived(()=>mcpStore.getServerDisplayName($$props.extra.serverName)),favicon=user_derived(()=>mcpStore.getServerFavicon($$props.extra.serverName));function getLanguage(){if($$props.extra.mimeType?.includes(MimeTypeIncludes.JSON))return MimeTypeIncludes.JSON;if($$props.extra.mimeType?.includes(MimeTypeIncludes. +JAVASCRIPT))return MimeTypeIncludes.JAVASCRIPT;if($$props.extra.mimeType?.includes(MimeTypeIncludes.TYPESCRIPT))return MimeTypeIncludes.TYPESCRIPT;const name=$$props.extra.name||$$props.extra.uri||"";return getLanguageFromFilename(name)||"plaintext"}function handleDownload(){$$props.extra.content&&downloadResourceContent($$props.extra.content,$$props.extra.mimeType||MimeTypeText.PLAIN,$$props.extra.name||DEFAULT_RESOURCE_FILENAME)}var fragment=comment$2(),node2=first_child(fragment);component(node2, +()=>Root$4,($$anchor2,Dialog_Root)=>{Dialog_Root($$anchor2,{get onOpenChange(){return $$props.onOpenChange},get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Dialog_content,($$anchor4,Dialog_Content)=>{Dialog_Content($$anchor4,{class:"grid max-h-[90vh] max-w-5xl overflow-hidden sm:w-auto sm:max-w-6xl",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$K(),node_2=first_child( +fragment_2);component(node_2,()=>Dialog_header,($$anchor6,Dialog_Header)=>{Dialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$v(),node_3=first_child(fragment_3);component(node_3,()=>Dialog_title,($$anchor8,Dialog_Title)=>{Dialog_Title($$anchor8,{class:"pr-8",children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,$$props.extra.name)),append($$anchor9,text2)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component( +node_4,()=>Dialog_description,($$anchor8,Dialog_Description)=>{Dialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{var div=root_5$p(),span=child(div),text_1=child(span,!0);reset(span);var node_5=sibling(span,2);{var consequent_1=$$anchor10=>{var span_1=root_6$k(),node_6=sibling(child(span_1));{var consequent=$$anchor11=>{var img=root_7$k();template_effect(()=>set_attribute(img,"src",get$3(favicon))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append( +$$anchor11,img)};if_block(node_6,$$render=>{get$3(favicon)&&$$render(consequent)})}var text_2=sibling(node_6);reset(span_1),template_effect(()=>set_text(text_2,` ${get$3(serverName)??""}`)),append($$anchor10,span_1)};if_block(node_5,$$render=>{get$3(serverName)&&$$render(consequent_1)})}var node_7=sibling(node_5,2);{var consequent_2=$$anchor10=>{var span_2=root_8$i(),text_3=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_3,$$props.extra.mimeType)),append($$anchor10,span_2)};if_block( +node_7,$$render=>{$$props.extra.mimeType&&$$render(consequent_2)})}reset(div),template_effect(()=>set_text(text_1,$$props.extra.uri)),append($$anchor9,div)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div_1=sibling(node_2,2),node_8=child(div_1);{let $0=user_derived(()=>!!$$props.extra.content);ActionIconCopyToClipboard(node_8,{get text(){return $$props.extra.content},get canCopy(){return get$3($0)},ariaLabel:"Copy content"})}var node_9=sibling(node_8,2);{let $0=user_derived( +()=>!$$props.extra.content);Button(node_9,{variant:"ghost",size:"sm",class:"h-7 w-7 p-0",onclick:handleDownload,get disabled(){return get$3($0)},title:"Download content",children:($$anchor6,$$slotProps3)=>{Download($$anchor6,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})}reset(div_1);var div_2=sibling(div_1,2),node_10=child(div_2);{var consequent_3=$$anchor6=>{var div_3=root_10$d(),img_1=child(div_3);reset(div_3),template_effect($0=>{set_attribute(img_1,"src",$0),set_attribute(img_1,"alt",$$props. +extra.name)},[()=>$$props.extra.content.startsWith("data:")?$$props.extra.content:`data:${$$props.extra.mimeType||"image/png"};base64,${$$props.extra.content}`]),append($$anchor6,div_3)},d2=user_derived(()=>isImageResource($$props.extra.mimeType,$$props.extra.uri)&&$$props.extra.content),consequent_4=$$anchor6=>{{let $0=user_derived(getLanguage);SyntaxHighlightedCode($$anchor6,{get code(){return $$props.extra.content},get language(){return get$3($0)},maxHeight:"70vh"})}},d_12=user_derived(()=>isCodeResource( +$$props.extra.mimeType,$$props.extra.uri)&&$$props.extra.content),consequent_5=$$anchor6=>{var pre=root_12$8(),text_4=child(pre,!0);reset(pre),template_effect(()=>set_text(text_4,$$props.extra.content)),append($$anchor6,pre)},alternate=$$anchor6=>{var div_4=root_13$8();append($$anchor6,div_4)};if_block(node_10,$$render=>{get$3(d2)?$$render(consequent_3):get$3(d_12)?$$render(consequent_4,1):$$props.extra.content?$$render(consequent_5,2):$$render(alternate,-1)})}reset(div_2),append($$anchor5,fragment_2)}, +$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}class PermissionsStore{#_tools=state$1(proxy(new SvelteSet));get _tools(){return get$3(this.#_tools)}set _tools(value){set$1(this.#_tools,value,!0)}constructor(){try{const stored=localStorage.getItem(ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY);if(stored)for(const name of JSON.parse(stored))typeof name=="string"&&this._tools.add(name)}catch(err){console.error(`Failed to load permissions from\ + localStorage ("${ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY}"):`,err)}}get tools(){return this._tools}hasTool(key2){return this._tools.has(key2)}allowTool(key2){this._tools.add(key2),this._persist()}allowTools(keys2){for(const key2 of keys2)this._tools.add(key2);this._persist()}revokeTool(key2){this._tools.delete(key2),this._persist()}_persist(){try{localStorage.setItem(ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY,JSON.stringify([...this._tools]))}catch(err){console.error(`Failed to persist to localStorage\ + ("${ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY}"):`,err)}}}const permissionsStore=new PermissionsStore;function createDefaultSession(){return{isRunning:!1,currentTurn:0,totalToolCalls:0,lastError:null,streamingToolCall:null,pendingPermissionRequest:null}}function toAgenticMessages(messages){return messages.map(message=>message.role===MessageRole.ASSISTANT&&message.tool_calls&&message.tool_calls.length>0?{role:MessageRole.ASSISTANT,content:message.content,reasoning_content:message.reasoning_content,tool_calls:message. +tool_calls.map((call,index2)=>({id:call.id??`call_${index2}`,type:call.type??ToolCallType.FUNCTION,function:{name:call.function?.name??"",arguments:call.function?.arguments??""}}))}:message.role===MessageRole.ASSISTANT?{role:MessageRole.ASSISTANT,content:message.content,reasoning_content:message.reasoning_content}:message.role===MessageRole.TOOL&&message.tool_call_id?{role:MessageRole.TOOL,tool_call_id:message.tool_call_id,content:typeof message.content=="string"?message.content:""}:{role:message. +role,content:message.content})}class AgenticStore{_sessions=new SvelteMap;_pendingPermissions=new SvelteMap;_permissionResolvers=new Map;_pendingContinueRequests=new SvelteMap;_continueResolvers=new Map;_steeringMessages=new SvelteMap;get isReady(){return!0}get isAnyRunning(){for(const session of this._sessions.values())if(session.isRunning)return!0;return!1}getSession(conversationId){let session=this._sessions.get(conversationId);return session||(session=createDefaultSession(),this._sessions.set( +conversationId,session)),session}updateSession(conversationId,update2){const session=this.getSession(conversationId);this._sessions.set(conversationId,{...session,...update2})}clearSession(conversationId){this._sessions.delete(conversationId)}getActiveSessions(){const active=[];for(const[conversationId,session]of this._sessions.entries())session.isRunning&&active.push({conversationId,session});return active}isRunning(conversationId){return this.getSession(conversationId).isRunning}currentTurn(conversationId){ +return this.getSession(conversationId).currentTurn}totalToolCalls(conversationId){return this.getSession(conversationId).totalToolCalls}lastError(conversationId){return this.getSession(conversationId).lastError}streamingToolCall(conversationId){return this.getSession(conversationId).streamingToolCall}pendingPermissionRequest(conversationId){return this._pendingPermissions.get(conversationId)??null}pendingContinueRequest(conversationId){return this._pendingContinueRequests.get(conversationId)??!1}resolveContinue(conversationId,shouldContinue){ +const resolver2=this._continueResolvers.get(conversationId);resolver2&&(this._continueResolvers.delete(conversationId),resolver2(shouldContinue))}resolvePermission(conversationId,decision){const resolver2=this._permissionResolvers.get(conversationId);resolver2&&(this._permissionResolvers.delete(conversationId),resolver2(decision))}clearError(conversationId){this.updateSession(conversationId,{lastError:null})}hasPendingSteeringMessage(conversationId){return this._steeringMessages.has(conversationId)}pendingSteeringMessageContent(conversationId){ +return this._steeringMessages.get(conversationId)?.content??null}pendingSteeringMessageExtras(conversationId){return this._steeringMessages.get(conversationId)?.extras}injectSteeringMessage(conversationId,content2,extras){this._steeringMessages.set(conversationId,{content:content2,extras})}clearSteeringMessage(conversationId){this._steeringMessages.delete(conversationId)}consumePendingSteeringMessage(conversationId){const msg=this._steeringMessages.get(conversationId);return msg?(this._steeringMessages. +delete(conversationId),msg):null}getConfig(settings,perChatOverrides){const maxTurns=Number(settings.agenticMaxTurns)||DEFAULT_AGENTIC_CONFIG.maxTurns,maxToolPreviewLines=Number(settings.agenticMaxToolPreviewLines)||DEFAULT_AGENTIC_CONFIG.maxToolPreviewLines;return{enabled:(mcpStore.hasEnabledServers(perChatOverrides)||toolsStore.builtinTools.length>0||toolsStore.customTools.length>0)&&DEFAULT_AGENTIC_CONFIG.enabled,maxTurns,maxToolPreviewLines}}parseToolArguments(args){if(typeof args=="object") +return args;const trimmed=args.trim();return trimmed===""?{}:JSON.parse(trimmed)}async requestPermission(conversationId,toolName,serverLabel,signal){const permissionKey=toolsStore.getPermissionKey(toolName);return permissionKey&&permissionsStore.hasTool(permissionKey)?ToolPermissionDecision.ONCE:(this._pendingPermissions.set(conversationId,{toolName,serverLabel}),new Promise(resolve2=>{if(signal?.aborted){this._pendingPermissions.set(conversationId,null),resolve2(ToolPermissionDecision.DENY);return} +this._permissionResolvers.set(conversationId,decision=>{if(this._pendingPermissions.set(conversationId,null),decision===ToolPermissionDecision.ALWAYS&&permissionKey)permissionsStore.allowTool(permissionKey);else if(decision===ToolPermissionDecision.ALWAYS_SERVER){const serverToolKeys=toolsStore.allTools.filter(t=>t.serverName?t.serverName===serverLabel:toolsStore.getToolServerLabel(t.definition.function.name)===serverLabel).map(t=>toolsStore.getPermissionKey(t.definition.function.name)).filter(k=>k!== +null);permissionsStore.allowTools(serverToolKeys)}resolve2(decision)}),signal?.addEventListener("abort",()=>{this._permissionResolvers.get(conversationId)&&(this._permissionResolvers.delete(conversationId),this._pendingPermissions.set(conversationId,null),resolve2(ToolPermissionDecision.DENY))},{once:!0})}))}async requestContinue(conversationId,signal){return this._pendingContinueRequests.set(conversationId,!0),new Promise(resolve2=>{if(signal?.aborted){this._pendingContinueRequests.set(conversationId, +!1),resolve2(!1);return}this._continueResolvers.set(conversationId,shouldContinue=>{this._pendingContinueRequests.set(conversationId,!1),resolve2(shouldContinue)}),signal?.addEventListener("abort",()=>{this._continueResolvers.get(conversationId)&&(this._continueResolvers.delete(conversationId),this._pendingContinueRequests.set(conversationId,!1),resolve2(!1))},{once:!0})})}async runAgenticFlow(params){const{conversationId,messages,options={},callbacks,signal,perChatOverrides}=params;this._pendingPermissions. +set(conversationId,null),this._permissionResolvers.delete(conversationId),this._pendingContinueRequests.set(conversationId,!1),this._continueResolvers.delete(conversationId),this._steeringMessages.delete(conversationId),toolsStore.builtinTools.length===0&&!toolsStore.loading&&await toolsStore.fetchBuiltinTools();const agenticConfig=this.getConfig(config$1(),perChatOverrides);if(!agenticConfig.enabled)return{handled:!1};const hasMcpServers=mcpStore.hasEnabledServers(perChatOverrides);hasMcpServers&& +(await mcpStore.ensureInitialized(perChatOverrides)||console.log("[AgenticStore] MCP not initialized"));const tools=toolsStore.getEnabledToolsForLLM();if(tools.length===0)return console.log("[AgenticStore] No tools available, falling back to standard chat"),{handled:!1};console.log(`[AgenticStore] Starting agentic flow with ${tools.length} tools`);const normalizedMessages=messages.map(msg=>"id"in msg&&"convId"in msg&&"timestamp"in msg?ChatService.convertDbMessageToApiChatMessageData(msg):msg).filter( +msg=>msg.role===MessageRole.SYSTEM?(typeof msg.content=="string"?msg.content:"").trim().length>0:!0);this.updateSession(conversationId,{isRunning:!0,currentTurn:0,totalToolCalls:0,lastError:null}),hasMcpServers&&mcpStore.acquireConnection();try{return await this.executeAgenticLoop({conversationId,messages:normalizedMessages,options,tools,agenticConfig,callbacks,signal}),{handled:!0}}catch(error2){const normalizedError=error2 instanceof Error?error2:new Error(String(error2));return this.updateSession( +conversationId,{lastError:normalizedError}),callbacks.onError?.(normalizedError),{handled:!0,error:normalizedError}}finally{this.updateSession(conversationId,{isRunning:!1}),hasMcpServers&&await mcpStore.releaseConnection().catch(err=>console.warn("[AgenticStore] Failed to release MCP connection:",err))}}async executeAgenticLoop(params){const{conversationId,messages,options,tools,agenticConfig,callbacks,signal}=params,{onChunk,onReasoningChunk,onToolCallsStreaming,onAttachments,onModel,onAssistantTurnComplete, +createToolResultMessage,createAssistantMessage,onFlowComplete,onTimings,onTurnComplete}=callbacks,sessionMessages=toAgenticMessages(messages);let capturedTimings,totalToolCallCount=0;const agenticTimings={turns:0,toolCallsCount:0,toolsMs:0,toolCalls:[],perTurn:[],llm:{predicted_n:0,predicted_ms:0,prompt_n:0,prompt_ms:0}},maxTurns=agenticConfig.maxTurns,effectiveModel=options.model||modelsStore.models[0]?.model||"";let turn=0;for(;;){if(turn>=maxTurns){const shouldContinue=await this.requestContinue( +conversationId,signal);if(await new Promise(r2=>setTimeout(r2,0)),!shouldContinue||signal?.aborted){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}turn=0}if(this.updateSession(conversationId,{currentTurn:turn+1}),agenticTimings.turns=turn+1,signal?.aborted){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}turn>0&&createAssistantMessage&&await createAssistantMessage();let turnContent="",turnReasoningContent="",turnToolCalls=[],lastStreamingToolCallName="", +lastStreamingToolCallArgsLength=0,turnTimings;const turnStats={turn:turn+1,llm:{predicted_n:0,predicted_ms:0,prompt_n:0,prompt_ms:0},toolCalls:[],toolsMs:0};try{await ChatService.sendMessage(sessionMessages,{...options,stream:!0,tools:tools.length>0?tools:void 0,onChunk:chunk=>{turnContent+=chunk,onChunk?.(chunk)},onReasoningChunk:chunk=>{turnReasoningContent+=chunk,onReasoningChunk?.(chunk)},onToolCallChunk:serialized=>{try{if(turnToolCalls=JSON.parse(serialized),onToolCallsStreaming?.(turnToolCalls), +turnToolCalls.length>0&&turnToolCalls[0]?.function){const name=turnToolCalls[0].function.name||"",args=turnToolCalls[0].function.arguments||"",argsLengthBucket=Math.floor(args.length/100);(name!==lastStreamingToolCallName||argsLengthBucket!==lastStreamingToolCallArgsLength)&&(lastStreamingToolCallName=name,lastStreamingToolCallArgsLength=argsLengthBucket,this.updateSession(conversationId,{streamingToolCall:{name,arguments:args}}))}}catch{}},onModel,onTimings:(timings,progress)=>{onTimings?.(timings, +progress),timings&&(capturedTimings=timings,turnTimings=timings)},onComplete:()=>{},onError:error2=>{throw error2}},void 0,signal),this.updateSession(conversationId,{streamingToolCall:null}),turnTimings&&(agenticTimings.llm.predicted_n+=turnTimings.predicted_n||0,agenticTimings.llm.predicted_ms+=turnTimings.predicted_ms||0,agenticTimings.llm.prompt_n+=turnTimings.prompt_n||0,agenticTimings.llm.prompt_ms+=turnTimings.prompt_ms||0,turnStats.llm.predicted_n=turnTimings.predicted_n||0,turnStats.llm. +predicted_ms=turnTimings.predicted_ms||0,turnStats.llm.prompt_n=turnTimings.prompt_n||0,turnStats.llm.prompt_ms=turnTimings.prompt_ms||0)}catch(error2){if(signal?.aborted){await onAssistantTurnComplete?.(turnContent,turnReasoningContent||void 0,this.buildFinalTimings(capturedTimings,agenticTimings),void 0),onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}const normalizedError=error2 instanceof Error?error2:new Error("LLM stream error");throw onChunk?.(`${LLM_ERROR_BLOCK_START}${normalizedError. +message}${LLM_ERROR_BLOCK_END}`),await onAssistantTurnComplete?.(turnContent+`${LLM_ERROR_BLOCK_START}${normalizedError.message}${LLM_ERROR_BLOCK_END}`,turnReasoningContent||void 0,this.buildFinalTimings(capturedTimings,agenticTimings),void 0),onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings)),normalizedError}if(this._steeringMessages.has(conversationId)){console.log("[AgenticStore] Steering message detected after turn, exiting agentic flow"),await onAssistantTurnComplete?.( +turnContent,turnReasoningContent||void 0,this.buildFinalTimings(capturedTimings,agenticTimings),turnToolCalls.length>0?this.normalizeToolCalls(turnToolCalls):void 0),onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}if(turnToolCalls.length===0){agenticTimings.perTurn.push(turnStats);const finalTimings=this.buildFinalTimings(capturedTimings,agenticTimings);await onAssistantTurnComplete?.(turnContent,turnReasoningContent||void 0,finalTimings,void 0),finalTimings&&onTurnComplete?.( +finalTimings),onFlowComplete?.(finalTimings);return}const normalizedCalls=this.normalizeToolCalls(turnToolCalls);if(normalizedCalls.length===0){await onAssistantTurnComplete?.(turnContent,turnReasoningContent||void 0,this.buildFinalTimings(capturedTimings,agenticTimings),void 0),onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}totalToolCallCount+=normalizedCalls.length,this.updateSession(conversationId,{totalToolCalls:totalToolCallCount}),await onAssistantTurnComplete?.( +turnContent,turnReasoningContent||void 0,turnTimings,normalizedCalls),sessionMessages.push({role:MessageRole.ASSISTANT,content:turnContent||void 0,reasoning_content:turnReasoningContent||void 0,tool_calls:normalizedCalls});for(let i=0;i<normalizedCalls.length;i++){const toolCall=normalizedCalls[i];if(signal?.aborted){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}if(this._steeringMessages.has(conversationId)){console.log(`[AgenticStore] Steering message detected,\ + skipping ${normalizedCalls.length-i} remaining tool call(s)`);for(let j=i;j<normalizedCalls.length;j++){const remainingCall=normalizedCalls[j],interruptedContent="Tool execution was interrupted by a new user message.";createToolResultMessage&&await createToolResultMessage(remainingCall.id,interruptedContent),sessionMessages.push({role:MessageRole.TOOL,tool_call_id:remainingCall.id,content:interruptedContent})}break}const toolName=toolCall.function.name,serverLabel=toolsStore.getToolServerLabel( +toolName),permission=await this.requestPermission(conversationId,toolName,serverLabel,signal);if(await new Promise(r2=>setTimeout(r2,0)),signal?.aborted){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}const toolStartTime=performance.now(),toolSource=toolsStore.getToolSource(toolName);let result,toolSuccess=!0;if(permission===ToolPermissionDecision.DENY)result="Tool execution was denied by the user.",toolSuccess=!1;else try{if(toolSource===ToolSource.BUILTIN){const args=this. +parseToolArguments(toolCall.function.arguments),executionResult=await ToolsService.executeTool(toolName,args,signal);result=executionResult.content,executionResult.isError&&(toolSuccess=!1)}else{const mcpCall={id:toolCall.id,function:{name:toolName,arguments:toolCall.function.arguments}};result=(await mcpStore.executeTool(mcpCall,signal)).content}}catch(error2){if(isAbortError(error2)){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}result=`Error: ${error2 instanceof +Error?error2.message:String(error2)}`,toolSuccess=!1}const toolDurationMs=performance.now()-toolStartTime,toolTiming={name:toolCall.function.name,duration_ms:Math.round(toolDurationMs),success:toolSuccess};if(agenticTimings.toolCalls.push(toolTiming),agenticTimings.toolCallsCount++,agenticTimings.toolsMs+=Math.round(toolDurationMs),turnStats.toolCalls.push(toolTiming),turnStats.toolsMs+=Math.round(toolDurationMs),signal?.aborted){onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings)); +return}const{cleanedResult,attachments}=this.extractBase64Attachments(result);let toolResultMessage;createToolResultMessage&&(toolResultMessage=await createToolResultMessage(toolCall.id,cleanedResult,attachments.length>0?attachments:void 0)),attachments.length>0&&toolResultMessage&&onAttachments?.(toolResultMessage.id,attachments);const contentParts=[{type:ContentPartType.TEXT,text:cleanedResult}];for(const attachment of attachments)attachment.type===AttachmentType.IMAGE&&(modelsStore.modelSupportsVision( +effectiveModel)?contentParts.push({type:ContentPartType.IMAGE_URL,image_url:{url:attachment.base64Url}}):console.info(`[AgenticStore] Skipping image attachment (model "${effectiveModel}" does not support vision)`));sessionMessages.push({role:MessageRole.TOOL,tool_call_id:toolCall.id,content:contentParts.length===1?cleanedResult:contentParts})}if(turnStats.toolCalls.length>0){agenticTimings.perTurn.push(turnStats);const intermediateTimings=this.buildFinalTimings(capturedTimings,agenticTimings);intermediateTimings&& +onTurnComplete?.(intermediateTimings)}if(this._steeringMessages.has(conversationId)){console.log("[AgenticStore] Steering message detected after tool execution, exiting agentic flow"),onFlowComplete?.(this.buildFinalTimings(capturedTimings,agenticTimings));return}turn++}}buildFinalTimings(capturedTimings,agenticTimings){return agenticTimings.toolCallsCount===0?capturedTimings:{predicted_n:capturedTimings?.predicted_n,predicted_ms:capturedTimings?.predicted_ms,prompt_n:capturedTimings?.prompt_n,prompt_ms:capturedTimings?. +prompt_ms,cache_n:capturedTimings?.cache_n,agentic:agenticTimings}}normalizeToolCalls(toolCalls){return toolCalls?toolCalls.map((call,index2)=>({id:call?.id??`tool_${index2}`,type:call?.type??ToolCallType.FUNCTION,function:{name:call?.function?.name??"",arguments:call?.function?.arguments??""}})):[]}extractBase64Attachments(result){if(!result.trim())return{cleanedResult:result,attachments:[]};const lines=result.split(NEWLINE_SEPARATOR),attachments=[];let attachmentIndex=0;return{cleanedResult:lines. +map(line=>{const trimmedLine=line.trim(),match=trimmedLine.match(DATA_URI_BASE64_REGEX);if(!match)return line;const mimeType=match[1].toLowerCase();if(!match[2])return line;attachmentIndex+=1;const name=this.buildAttachmentName(mimeType,attachmentIndex);return mimeType.startsWith(MimeTypePrefix.IMAGE)?(attachments.push({type:AttachmentType.IMAGE,name,base64Url:trimmedLine}),`[Attachment saved: ${name}]`):line}).join(NEWLINE_SEPARATOR),attachments}}buildAttachmentName(mimeType,index2){const extension2=IMAGE_MIME_TO_EXTENSION[mimeType]?? +DEFAULT_IMAGE_EXTENSION;return`${MCP_ATTACHMENT_NAME_PREFIX}-${Date.now()}-${index2}.${extension2}`}}const agenticStore=new AgenticStore;function agenticPendingPermissionRequest(conversationId){return agenticStore.pendingPermissionRequest(conversationId)}function agenticResolvePermission(conversationId,decision){agenticStore.resolvePermission(conversationId,decision)}function agenticPendingContinueRequest(conversationId){return agenticStore.pendingContinueRequest(conversationId)}function agenticResolveContinue(conversationId,shouldContinue){ +agenticStore.resolveContinue(conversationId,shouldContinue)}function agenticInjectSteeringMessage(conversationId,content2,extras){agenticStore.injectSteeringMessage(conversationId,content2,extras)}function agenticPendingSteeringMessageContent(conversationId){return agenticStore.pendingSteeringMessageContent(conversationId)}function agenticPendingSteeringMessageExtras(conversationId){return agenticStore.pendingSteeringMessageExtras(conversationId)}function agenticClearSteeringMessage(conversationId){ +agenticStore.clearSteeringMessage(conversationId)}class ChatStore{#activeProcessingState=state$1(null);get activeProcessingState(){return get$3(this.#activeProcessingState)}set activeProcessingState(value){set$1(this.#activeProcessingState,value,!0)}#currentResponse=state$1("");get currentResponse(){return get$3(this.#currentResponse)}set currentResponse(value){set$1(this.#currentResponse,value,!0)}#errorDialogState=state$1(null);get errorDialogState(){return get$3(this.#errorDialogState)}set errorDialogState(value){ +set$1(this.#errorDialogState,value,!0)}#isLoading=state$1(!1);get isLoading(){return get$3(this.#isLoading)}set isLoading(value){set$1(this.#isLoading,value,!0)}chatLoadingStates=new SvelteMap;chatStreamingStates=new SvelteMap;abortControllers=new SvelteMap;preEncodeAbortController=null;processingStates=new SvelteMap;conversationStateTimestamps=new SvelteMap;#activeConversationId=state$1(null);get activeConversationId(){return get$3(this.#activeConversationId)}set activeConversationId(value){set$1( +this.#activeConversationId,value,!0)}#isStreamingActive=state$1(!1);get isStreamingActive(){return get$3(this.#isStreamingActive)}set isStreamingActive(value){set$1(this.#isStreamingActive,value,!0)}#isEditModeActive=state$1(!1);get isEditModeActive(){return get$3(this.#isEditModeActive)}set isEditModeActive(value){set$1(this.#isEditModeActive,value,!0)}#addFilesHandler=state$1(null);get addFilesHandler(){return get$3(this.#addFilesHandler)}set addFilesHandler(value){set$1(this.#addFilesHandler, +value,!0)}#pendingEditMessageId=state$1(null);get pendingEditMessageId(){return get$3(this.#pendingEditMessageId)}set pendingEditMessageId(value){set$1(this.#pendingEditMessageId,value,!0)}messageUpdateCallback=null;#_pendingDraftMessage=state$1("");get _pendingDraftMessage(){return get$3(this.#_pendingDraftMessage)}set _pendingDraftMessage(value){set$1(this.#_pendingDraftMessage,value,!0)}#_pendingDraftFiles=state$1(proxy([]));get _pendingDraftFiles(){return get$3(this.#_pendingDraftFiles)}set _pendingDraftFiles(value){ +set$1(this.#_pendingDraftFiles,value,!0)}_pendingMessages=new SvelteMap;setChatLoading(convId,loading){this.touchConversationState(convId),loading?(this.chatLoadingStates.set(convId,!0),convId===conversationsStore.activeConversation?.id&&(this.isLoading=!0)):(this.chatLoadingStates.delete(convId),convId===conversationsStore.activeConversation?.id&&(this.isLoading=!1))}setChatStreaming(convId,response,messageId){this.touchConversationState(convId),this.chatStreamingStates.set(convId,{response,messageId}), +convId===conversationsStore.activeConversation?.id&&(this.currentResponse=response)}clearChatStreaming(convId){this.chatStreamingStates.delete(convId),convId===conversationsStore.activeConversation?.id&&(this.currentResponse="")}getChatStreaming(convId){return this.chatStreamingStates.get(convId)}syncLoadingStateForChat(convId){this.isLoading=this.chatLoadingStates.get(convId)||!1;const s2=this.chatStreamingStates.get(convId);if(this.currentResponse=s2?.response||"",this.isStreamingActive=s2!==void 0, +this.setActiveProcessingConversation(convId),s2?.response&&s2?.messageId){const idx=conversationsStore.findMessageIndex(s2.messageId);idx!==-1&&conversationsStore.updateMessageAtIndex(idx,{content:s2.response})}}clearUIState(){this.isLoading=!1,this.currentResponse="",this.isStreamingActive=!1}setActiveProcessingConversation(conversationId){this.activeConversationId=conversationId,this.activeProcessingState=conversationId&&this.processingStates.get(conversationId)||null}getProcessingState(conversationId){ +return this.processingStates.get(conversationId)||null}setProcessingState(conversationId,state2){state2===null?this.processingStates.delete(conversationId):this.processingStates.set(conversationId,state2),conversationId===this.activeConversationId&&(this.activeProcessingState=state2)}clearProcessingState(conversationId){this.processingStates.delete(conversationId),conversationId===this.activeConversationId&&(this.activeProcessingState=null)}getActiveProcessingState(){return this.activeProcessingState}getCurrentProcessingStateSync(){ +return this.activeProcessingState}setStreamingActive(active){this.isStreamingActive=active}isStreaming(){return this.isStreamingActive}getOrCreateAbortController(convId){let c2=this.abortControllers.get(convId);return(!c2||c2.signal.aborted)&&(c2=new AbortController,this.abortControllers.set(convId,c2)),c2}abortRequest(convId){if(convId){const c2=this.abortControllers.get(convId);c2&&(c2.abort(),this.abortControllers.delete(convId))}else{for(const c2 of this.abortControllers.values())c2.abort(); +this.abortControllers.clear()}}abortCurrentFlow(convId){const c2=this.abortControllers.get(convId);c2&&(c2.abort(),this.abortControllers.delete(convId))}showErrorDialog(state2){this.errorDialogState=state2}dismissErrorDialog(){this.errorDialogState=null}clearEditMode(){this.isEditModeActive=!1,this.addFilesHandler=null}isEditing(){return this.isEditModeActive}setEditModeActive(handler){this.isEditModeActive=!0,this.addFilesHandler=handler}getAddFilesHandler(){return this.addFilesHandler}clearPendingEditMessageId(){ +this.pendingEditMessageId=null}savePendingDraft(message,files){this._pendingDraftMessage=message,this._pendingDraftFiles=[...files]}consumePendingDraft(){if(!this._pendingDraftMessage&&this._pendingDraftFiles.length===0)return null;const d2={message:this._pendingDraftMessage,files:[...this._pendingDraftFiles]};return this._pendingDraftMessage="",this._pendingDraftFiles=[],d2}hasPendingDraft(){return!!this._pendingDraftMessage||this._pendingDraftFiles.length>0}getAllLoadingChats(){return Array.from( +this.chatLoadingStates.keys())}getAllStreamingChats(){return Array.from(this.chatStreamingStates.keys())}getChatStreamingPublic(convId){return this.getChatStreaming(convId)}isChatLoadingPublic(convId){return this.chatLoadingStates.get(convId)||!1}isChatLoadingInternal(convId){return this.chatStreamingStates.has(convId)}hasPendingMessage(convId){return this._pendingMessages.has(convId)}pendingMessageContent(convId){return this._pendingMessages.get(convId)?.content??null}pendingMessageExtras(convId){ +return this._pendingMessages.get(convId)?.extras}injectPendingMessage(convId,content2,extras){this._pendingMessages.set(convId,{content:content2,extras})}clearPendingMessage(convId){this._pendingMessages.delete(convId)}consumePendingMessage(convId){const msg=this._pendingMessages.get(convId);return msg?(this._pendingMessages.delete(convId),msg):null}touchConversationState(convId){this.conversationStateTimestamps.set(convId,{lastAccessed:Date.now()})}cleanupOldConversationStates(activeConversationIds){ +const now2=Date.now(),activeIdsList=activeConversationIds??[],preserveIds=this.activeConversationId?[...activeIdsList,this.activeConversationId]:activeIdsList,allConvIds=[...new Set([...this.chatLoadingStates.keys(),...this.chatStreamingStates.keys(),...this.abortControllers.keys(),...this.processingStates.keys(),...this.conversationStateTimestamps.keys()])],cleanupCandidates=[];for(const convId of allConvIds){if(preserveIds.includes(convId)||this.chatLoadingStates.get(convId)||this.chatStreamingStates. +has(convId))continue;const ts=this.conversationStateTimestamps.get(convId);cleanupCandidates.push({convId,lastAccessed:ts?.lastAccessed??0})}cleanupCandidates.sort((a,b)=>a.lastAccessed-b.lastAccessed);let cleanedUp=0;for(const{convId,lastAccessed}of cleanupCandidates)(cleanupCandidates.length-cleanedUp>MAX_INACTIVE_CONVERSATION_STATES||now2-lastAccessed>INACTIVE_CONVERSATION_STATE_MAX_AGE_MS)&&(this.cleanupConversationState(convId),cleanedUp++);return cleanedUp}cleanupConversationState(convId){ +const c2=this.abortControllers.get(convId);c2&&!c2.signal.aborted&&c2.abort(),this.chatLoadingStates.delete(convId),this.chatStreamingStates.delete(convId),this.abortControllers.delete(convId),this.processingStates.delete(convId),this.conversationStateTimestamps.delete(convId)}getTrackedConversationCount(){return new Set([...this.chatLoadingStates.keys(),...this.chatStreamingStates.keys(),...this.abortControllers.keys(),...this.processingStates.keys()]).size}getMessageByIdWithRole(messageId,expectedRole){ +const index2=conversationsStore.findMessageIndex(messageId);if(index2===-1)return null;const message=conversationsStore.activeMessages[index2];return expectedRole&&message.role!==expectedRole?null:{message,index:index2}}async addMessage(role,content2,type2=MessageType.TEXT,parent="-1",extras){const activeConv=conversationsStore.activeConversation;if(!activeConv)throw new Error("No active conversation");let parentId=null;if(parent==="-1"){const am=conversationsStore.activeMessages;if(am.length>0) +parentId=am[am.length-1].id;else{const r2=(await conversationsStore.getConversationMessages(activeConv.id)).find(m=>m.parent===null&&m.type==="root");parentId=r2?r2.id:await DatabaseService.createRootMessage(activeConv.id)}}else parentId=parent;const message=await DatabaseService.createMessageBranch({convId:activeConv.id,role,content:content2,type:type2,timestamp:Date.now(),toolCalls:"",children:[],extra:extras},parentId);return conversationsStore.addMessageToActive(message),await conversationsStore. +updateCurrentNode(message.id),conversationsStore.updateConversationTimestamp(),message}async addSystemPrompt(){let activeConv=conversationsStore.activeConversation;if(activeConv||(await conversationsStore.createConversation(),activeConv=conversationsStore.activeConversation),!!activeConv)try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null),rootId=rootMessage?rootMessage.id:await DatabaseService.createRootMessage( +activeConv.id),existingSystemMessage=allMessages.find(m=>m.role===MessageRole.SYSTEM&&m.parent===rootId);if(existingSystemMessage){this.pendingEditMessageId=existingSystemMessage.id,conversationsStore.activeMessages.some(m=>m.id===existingSystemMessage.id)||conversationsStore.activeMessages.unshift(existingSystemMessage);return}const firstActiveMessage=conversationsStore.activeMessages.find(m=>m.parent===rootId),systemMessage=await DatabaseService.createSystemMessage(activeConv.id,SYSTEM_MESSAGE_PLACEHOLDER, +rootId);if(firstActiveMessage){await DatabaseService.updateMessage(firstActiveMessage.id,{parent:systemMessage.id}),await DatabaseService.updateMessage(systemMessage.id,{children:[firstActiveMessage.id]});const updatedRootChildren=rootMessage?rootMessage.children.filter(id2=>id2!==firstActiveMessage.id):[];await DatabaseService.updateMessage(rootId,{children:[...updatedRootChildren.filter(id2=>id2!==systemMessage.id),systemMessage.id]});const firstMsgIndex=conversationsStore.findMessageIndex(firstActiveMessage. +id);firstMsgIndex!==-1&&conversationsStore.updateMessageAtIndex(firstMsgIndex,{parent:systemMessage.id})}conversationsStore.activeMessages.unshift(systemMessage),this.pendingEditMessageId=systemMessage.id,conversationsStore.updateConversationTimestamp()}catch(error2){console.error("Failed to add system prompt:",error2)}}async removeSystemPromptPlaceholder(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv)return!1;try{const allMessages=await conversationsStore.getConversationMessages( +activeConv.id),systemMessage=findMessageById(allMessages,messageId);if(!systemMessage||systemMessage.role!==MessageRole.SYSTEM)return!1;const rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null);if(!rootMessage)return!1;if(allMessages.length===2&&systemMessage.children.length===0)return await conversationsStore.deleteConversation(activeConv.id),!0;for(const childId of systemMessage.children){await DatabaseService.updateMessage(childId,{parent:rootMessage.id});const childIndex=conversationsStore. +findMessageIndex(childId);childIndex!==-1&&conversationsStore.updateMessageAtIndex(childIndex,{parent:rootMessage.id})}await DatabaseService.updateMessage(rootMessage.id,{children:[...rootMessage.children.filter(id2=>id2!==messageId),...systemMessage.children]}),await DatabaseService.deleteMessage(messageId);const systemIndex=conversationsStore.findMessageIndex(messageId);return systemIndex!==-1&&conversationsStore.activeMessages.splice(systemIndex,1),conversationsStore.updateConversationTimestamp(), +!1}catch(error2){return console.error("Failed to remove system prompt placeholder:",error2),!1}}async createAssistantMessage(parentId){const activeConv=conversationsStore.activeConversation;if(!activeConv)throw new Error("No active conversation");return await DatabaseService.createMessageBranch({convId:activeConv.id,type:MessageType.TEXT,role:MessageRole.ASSISTANT,content:"",timestamp:Date.now(),toolCalls:"",children:[],model:null},parentId||null)}async sendMessage(content2,extras){if(!content2. +trim()&&(!extras||extras.length===0))return;const activeConv=conversationsStore.activeConversation;if(activeConv&&agenticStore.isRunning(activeConv.id)){agenticStore.injectSteeringMessage(activeConv.id,content2,extras);return}if(activeConv&&this.isChatLoadingInternal(activeConv.id)){this.injectPendingMessage(activeConv.id,content2,extras);return}this.cancelPreEncode();const resourceExtras=mcpStore.consumeResourceAttachmentsAsExtras(),allExtras=resourceExtras.length>0?[...extras||[],...resourceExtras]: +extras;let isNewConversation=!1;activeConv||(await conversationsStore.createConversation(),isNewConversation=!0);const currentConv=conversationsStore.activeConversation;if(currentConv){this.showErrorDialog(null),this.setChatLoading(currentConv.id,!0),this.clearChatStreaming(currentConv.id);try{let parentIdForUserMessage;if(isNewConversation){const rootId=await DatabaseService.createRootMessage(currentConv.id),systemPrompt=config$1().systemMessage?.toString().trim();if(systemPrompt){const systemMessage=await DatabaseService. +createSystemMessage(currentConv.id,systemPrompt,rootId);conversationsStore.addMessageToActive(systemMessage),parentIdForUserMessage=systemMessage.id}else parentIdForUserMessage=rootId}const userMessage=await this.addMessage(MessageRole.USER,content2,MessageType.TEXT,parentIdForUserMessage??"-1",allExtras);isNewConversation&&content2&&await conversationsStore.updateConversationName(currentConv.id,generateConversationTitle(content2,!!config$1().titleGenerationUseFirstLine));const assistantMessage=await this. +createAssistantMessage(userMessage.id);conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion(conversationsStore.activeMessages.slice(0,-1),assistantMessage)}catch(error2){if(isAbortError(error2)){this.setChatLoading(currentConv.id,!1);return}console.error("Failed to send message:",error2),this.setChatLoading(currentConv.id,!1);const dialogType=error2 instanceof Error&&error2.name==="TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER,contextInfo=error2. +contextInfo;this.showErrorDialog({type:dialogType,message:error2 instanceof Error?error2.message:"Unknown error",contextInfo})}}}async streamChatCompletion(allMessages,assistantMessage,onComplete,onError,modelOverride){let effectiveModel=modelOverride;if(isRouterMode()&&!effectiveModel){const conversationModel=this.getConversationModel(allMessages);effectiveModel=selectedModelName()||conversationModel}isRouterMode()&&effectiveModel&&(modelsStore.getModelProps(effectiveModel)||await modelsStore.fetchModelProps( +effectiveModel));let currentMessageId=assistantMessage.id,streamedContent="",streamedReasoningContent="",resolvedModel=null,modelPersisted=!1;const convId=assistantMessage.convId,recordModel=(modelName,persistImmediately=!0)=>{if(!modelName)return;const n=normalizeModelName(modelName);if(!n||n===resolvedModel)return;resolvedModel=n;const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{model:n}),persistImmediately&&!modelPersisted&&(modelPersisted= +!0,DatabaseService.updateMessage(currentMessageId,{model:n}).catch(()=>{modelPersisted=!1,resolvedModel=null}))},updateStreamingUI=()=>{this.setChatStreaming(convId,streamedContent,currentMessageId);const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{content:streamedContent})},cleanupStreamingState=()=>{this.setStreamingActive(!1),this.setChatLoading(convId,!1),this.clearChatStreaming(convId),this.setProcessingState(convId,null)};this.setStreamingActive( +!0),this.setActiveProcessingConversation(convId);const abortController=this.getOrCreateAbortController(convId),streamCallbacks={onChunk:chunk=>{streamedContent+=chunk,updateStreamingUI()},onReasoningChunk:chunk=>{streamedReasoningContent+=chunk;const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore.updateMessageAtIndex(idx,{reasoningContent:streamedReasoningContent})},onToolCallsStreaming:toolCalls=>{const idx=conversationsStore.findMessageIndex(currentMessageId);conversationsStore. +updateMessageAtIndex(idx,{toolCalls:JSON.stringify(toolCalls)})},onAttachments:(messageId,extras)=>{if(!extras.length)return;const idx=conversationsStore.findMessageIndex(messageId);if(idx===-1)return;const updatedExtras=[...conversationsStore.activeMessages[idx].extra||[],...extras];conversationsStore.updateMessageAtIndex(idx,{extra:updatedExtras}),DatabaseService.updateMessage(messageId,{extra:updatedExtras}).catch(console.error)},onModel:modelName=>recordModel(modelName),onTurnComplete:intermediateTimings=>{ +const idx=conversationsStore.findMessageIndex(assistantMessage.id);conversationsStore.updateMessageAtIndex(idx,{timings:intermediateTimings})},onTimings:(timings,promptProgress)=>{const tokensPerSecond=timings?.predicted_ms&&timings?.predicted_n?timings.predicted_n/timings.predicted_ms*1e3:0;this.updateProcessingStateFromTimings({prompt_n:timings?.prompt_n||0,prompt_ms:timings?.prompt_ms,predicted_n:timings?.predicted_n||0,predicted_per_second:tokensPerSecond,cache_n:timings?.cache_n||0,prompt_progress:promptProgress}, +convId)},onAssistantTurnComplete:async(content2,reasoningContent,timings,toolCalls)=>{const updateData={content:content2,reasoningContent:reasoningContent||void 0,toolCalls:toolCalls?JSON.stringify(toolCalls):"",timings};resolvedModel&&!modelPersisted&&(updateData.model=resolvedModel),await DatabaseService.updateMessage(currentMessageId,updateData);const idx=conversationsStore.findMessageIndex(currentMessageId),uiUpdate={content:content2,reasoningContent:reasoningContent||void 0,toolCalls:toolCalls? +JSON.stringify(toolCalls):""};timings&&(uiUpdate.timings=timings),resolvedModel&&(uiUpdate.model=resolvedModel),conversationsStore.updateMessageAtIndex(idx,uiUpdate),await conversationsStore.updateCurrentNode(currentMessageId)},createToolResultMessage:async(toolCallId,content2,extras)=>{const msg=await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.TOOL,content:content2,toolCallId,timestamp:Date.now(),toolCalls:"",children:[],extra:extras},currentMessageId);return conversationsStore. addMessageToActive(msg),await conversationsStore.updateCurrentNode(msg.id),msg},createAssistantMessage:async()=>{streamedContent="",streamedReasoningContent="";const lastMsg=conversationsStore.activeMessages[conversationsStore.activeMessages.length-1],msg=await DatabaseService.createMessageBranch({convId,type:MessageType.TEXT,role:MessageRole.ASSISTANT,content:"",timestamp:Date.now(),toolCalls:"",children:[],model:resolvedModel},lastMsg.id);return conversationsStore.addMessageToActive(msg),currentMessageId= msg.id,msg},onFlowComplete:finalTimings=>{if(finalTimings){const idx=conversationsStore.findMessageIndex(assistantMessage.id);conversationsStore.updateMessageAtIndex(idx,{timings:finalTimings}),DatabaseService.updateMessage(assistantMessage.id,{timings:finalTimings}).catch(console.error)}cleanupStreamingState(),onComplete&&onComplete(streamedContent),isRouterMode()&&modelsStore.fetchRouterModels().catch(console.error),config$1().preEncodeConversation&&this.triggerPreEncode(allMessages,assistantMessage, -streamedContent,effectiveModel,!!config$1().excludeReasoningFromContext)},onError:error2=>{if(this.setStreamingActive(!1),isAbortError(error2)){cleanupStreamingState();return}console.error("Streaming error:",error2),cleanupStreamingState();const idx=conversationsStore.findMessageIndex(assistantMessage.id);if(idx!==-1){const failedMessage=conversationsStore.removeMessageAtIndex(idx);failedMessage&&DatabaseService.deleteMessage(failedMessage.id).catch(console.error)}const contextInfo=error2.contextInfo; -this.showErrorDialog({type:error2.name==="TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER,message:error2.message,contextInfo}),onError&&onError(error2)}},perChatOverrides=conversationsStore.activeConversation?.mcpServerOverrides;agenticStore.getConfig(config$1(),perChatOverrides).enabled&&(await agenticStore.runAgenticFlow({conversationId:convId,messages:allMessages,options:{...this.getApiOptions(),...effectiveModel?{model:effectiveModel}:{}},callbacks:streamCallbacks,signal:abortController. -signal,perChatOverrides})).handled||await ChatService.sendMessage(allMessages,{...this.getApiOptions(),...effectiveModel?{model:effectiveModel}:{},stream:!0,onChunk:streamCallbacks.onChunk,onReasoningChunk:streamCallbacks.onReasoningChunk,onModel:streamCallbacks.onModel,onTimings:streamCallbacks.onTimings,onComplete:async(finalContent,reasoningContent,timings,toolCalls)=>{const content2=streamedContent||finalContent||"",reasoning=streamedReasoningContent||reasoningContent,updateData={content:content2, -reasoningContent:reasoning||void 0,toolCalls:toolCalls||"",timings};resolvedModel&&!modelPersisted&&(updateData.model=resolvedModel),await DatabaseService.updateMessage(currentMessageId,updateData);const idx=conversationsStore.findMessageIndex(currentMessageId),uiUpdate={content:content2,reasoningContent:reasoning||void 0,toolCalls:toolCalls||""};timings&&(uiUpdate.timings=timings),resolvedModel&&(uiUpdate.model=resolvedModel),conversationsStore.updateMessageAtIndex(idx,uiUpdate),await conversationsStore. -updateCurrentNode(currentMessageId),cleanupStreamingState(),onComplete&&await onComplete(content2),isRouterMode()&&modelsStore.fetchRouterModels().catch(console.error)},onError:streamCallbacks.onError},convId,abortController.signal)}async stopGeneration(){const activeConv=conversationsStore.activeConversation;activeConv&&await this.stopGenerationForChat(activeConv.id)}async stopGenerationForChat(convId){await this.savePartialResponseIfNeeded(convId),this.setStreamingActive(!1),this.abortRequest( -convId),this.setChatLoading(convId,!1),this.clearChatStreaming(convId),this.setProcessingState(convId,null)}async savePartialResponseIfNeeded(convId){const conversationId=convId||conversationsStore.activeConversation?.id;if(!conversationId)return;const streamingState=this.getChatStreaming(conversationId);if(!streamingState||!streamingState.response.trim())return;const messages=conversationId===conversationsStore.activeConversation?.id?conversationsStore.activeMessages:await conversationsStore.getConversationMessages( -conversationId);if(!messages.length)return;const lastMessage=messages[messages.length-1];if(lastMessage?.role===MessageRole.ASSISTANT)try{const updateData={content:streamingState.response},lastKnownState=this.getProcessingState(conversationId);lastKnownState&&(updateData.timings={prompt_n:lastKnownState.promptTokens||0,prompt_ms:lastKnownState.promptMs,predicted_n:lastKnownState.tokensDecoded||0,cache_n:lastKnownState.cacheTokens||0,predicted_ms:lastKnownState.tokensPerSecond&&lastKnownState.tokensDecoded? -lastKnownState.tokensDecoded/lastKnownState.tokensPerSecond*1e3:void 0}),await DatabaseService.updateMessage(lastMessage.id,updateData),lastMessage.content=streamingState.response,updateData.timings&&(lastMessage.timings=updateData.timings)}catch(error2){lastMessage.content=streamingState.response,console.error("Failed to save partial response:",error2)}}async updateMessage(messageId,newContent){const activeConv=conversationsStore.activeConversation;if(!activeConv)return;this.isChatLoadingInternal( -activeConv.id)&&await this.stopGeneration();const result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(!result)return;const{message:messageToUpdate,index:messageIndex}=result,originalContent=messageToUpdate.content;try{const rootMessage=(await conversationsStore.getConversationMessages(activeConv.id)).find(m=>m.type==="root"&&m.parent===null),isFirstUserMessage=rootMessage&&messageToUpdate.parent===rootMessage.id;conversationsStore.updateMessageAtIndex(messageIndex,{content:newContent}), -await DatabaseService.updateMessage(messageId,{content:newContent}),isFirstUserMessage&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine));const messagesToRemove=conversationsStore.activeMessages.slice(messageIndex+1);for(const message of messagesToRemove)await DatabaseService.deleteMessage(message.id);conversationsStore.sliceActiveMessages(messageIndex+1),conversationsStore. -updateConversationTimestamp(),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const assistantMessage=await this.createAssistantMessage();conversationsStore.addMessageToActive(assistantMessage),await conversationsStore.updateCurrentNode(assistantMessage.id),await this.streamChatCompletion(conversationsStore.activeMessages.slice(0,-1),assistantMessage,void 0,()=>{conversationsStore.updateMessageAtIndex(conversationsStore.findMessageIndex(messageId),{content:originalContent})})}catch(error2){ -isAbortError(error2)||console.error("Failed to update message:",error2)}}async regenerateMessage(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;this.cancelPreEncode();const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{index:messageIndex}=result;try{const messagesToRemove=conversationsStore.activeMessages.slice(messageIndex);for(const message of messagesToRemove)await DatabaseService. -deleteMessage(message.id);conversationsStore.sliceActiveMessages(messageIndex),conversationsStore.updateConversationTimestamp(),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const parentMessageId=conversationsStore.activeMessages.length>0?conversationsStore.activeMessages[conversationsStore.activeMessages.length-1].id:void 0,assistantMessage=await this.createAssistantMessage(parentMessageId);conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion( -conversationsStore.activeMessages.slice(0,-1),assistantMessage)}catch(error2){isAbortError(error2)||console.error("Failed to regenerate message:",error2),this.setChatLoading(activeConv?.id||"",!1)}}async regenerateMessageWithBranching(messageId,modelOverride){const activeConv=conversationsStore.activeConversation;if(!(!activeConv||this.isChatLoadingInternal(activeConv.id))){this.cancelPreEncode();try{const idx=conversationsStore.findMessageIndex(messageId);if(idx===-1)return;const msg=conversationsStore. -activeMessages[idx];if(msg.role!==MessageRole.ASSISTANT)return;const allMessages=await conversationsStore.getConversationMessages(activeConv.id),parentMessage=findMessageById(allMessages,msg.parent);if(!parentMessage)return;this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const newAssistantMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date.now(),role:msg.role,content:"",toolCalls:"",children:[],model:null},parentMessage.id); -await conversationsStore.updateCurrentNode(newAssistantMessage.id),conversationsStore.updateConversationTimestamp(),await conversationsStore.refreshActiveMessages();const conversationPath=filterByLeafNodeId(allMessages,parentMessage.id,!1),modelToUse=modelOverride||msg.model||void 0;await this.streamChatCompletion(conversationPath,newAssistantMessage,void 0,void 0,modelToUse)}catch(error2){isAbortError(error2)||console.error("Failed to regenerate message with branching:",error2),this.setChatLoading( -activeConv?.id||"",!1)}}}async getDeletionInfo(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv)return{totalCount:0,userMessages:0,assistantMessages:0,messageTypes:[]};const allMessages=await conversationsStore.getConversationMessages(activeConv.id);if(findMessageById(allMessages,messageId)?.role===MessageRole.SYSTEM){const messagesToDelete2=allMessages.filter(m=>m.id===messageId);let userMessages2=0,assistantMessages2=0;const messageTypes2=[];for(const msg of messagesToDelete2) -msg.role===MessageRole.USER?(userMessages2++,messageTypes2.includes("user message")||messageTypes2.push("user message")):msg.role===MessageRole.ASSISTANT&&(assistantMessages2++,messageTypes2.includes("assistant response")||messageTypes2.push("assistant response"));return{totalCount:1,userMessages:userMessages2,assistantMessages:assistantMessages2,messageTypes:messageTypes2}}const descendants=findDescendantMessages(allMessages,messageId),allToDelete=[messageId,...descendants],messagesToDelete=allMessages. -filter(m=>allToDelete.includes(m.id));let userMessages=0,assistantMessages=0;const messageTypes=[];for(const msg of messagesToDelete)msg.role===MessageRole.USER?(userMessages++,messageTypes.includes("user message")||messageTypes.push("user message")):msg.role===MessageRole.ASSISTANT&&(assistantMessages++,messageTypes.includes("assistant response")||messageTypes.push("assistant response"));return{totalCount:allToDelete.length,userMessages,assistantMessages,messageTypes}}async deleteMessage(messageId){ -const activeConv=conversationsStore.activeConversation;if(activeConv)try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),messageToDelete=findMessageById(allMessages,messageId);if(!messageToDelete)return;if(filterByLeafNodeId(allMessages,activeConv.currNode||"",!1).some(m=>m.id===messageId)&&messageToDelete.parent){const siblings2=allMessages.filter(m=>m.parent===messageToDelete.parent&&m.id!==messageId);if(siblings2.length>0){const latestSibling=siblings2.reduce( -(latest,sibling2)=>sibling2.timestamp>latest.timestamp?sibling2:latest);await conversationsStore.updateCurrentNode(findLeafNode(allMessages,latestSibling.id))}else messageToDelete.parent&&await conversationsStore.updateCurrentNode(findLeafNode(allMessages,messageToDelete.parent))}await DatabaseService.deleteMessageCascading(activeConv.id,messageId),await conversationsStore.refreshActiveMessages(),conversationsStore.updateConversationTimestamp()}catch(error2){console.error("Failed to delete messa\ -ge:",error2)}}async continueAssistantMessage(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{message:msg,index:idx}=result;try{this.showErrorDialog(null),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const allMessages=await conversationsStore.getConversationMessages(activeConv.id),dbMessage=findMessageById( -allMessages,messageId);if(!dbMessage){this.setChatLoading(activeConv.id,!1);return}const originalContent=dbMessage.content,originalReasoning=dbMessage.reasoningContent||"",contextWithContinue=[...conversationsStore.activeMessages.slice(0,idx),{role:MessageRole.ASSISTANT,content:originalContent}];let appendedContent="",appendedReasoning="",hasReceivedContent=!1;const updateStreamingContent=fullContent=>{this.setChatStreaming(msg.convId,fullContent,msg.id),conversationsStore.updateMessageAtIndex(idx, -{content:fullContent})},abortController=this.getOrCreateAbortController(msg.convId);await ChatService.sendMessage(contextWithContinue,{...this.getApiOptions(),onChunk:chunk=>{appendedContent+=chunk,hasReceivedContent=!0,updateStreamingContent(originalContent+appendedContent)},onReasoningChunk:chunk=>{appendedReasoning+=chunk,hasReceivedContent=!0,conversationsStore.updateMessageAtIndex(idx,{reasoningContent:originalReasoning+appendedReasoning})},onTimings:(timings,promptProgress)=>{const tokensPerSecond=timings?. -predicted_ms&&timings?.predicted_n?timings.predicted_n/timings.predicted_ms*1e3:0;this.updateProcessingStateFromTimings({prompt_n:timings?.prompt_n||0,prompt_ms:timings?.prompt_ms,predicted_n:timings?.predicted_n||0,predicted_per_second:tokensPerSecond,cache_n:timings?.cache_n||0,prompt_progress:promptProgress},msg.convId)},onComplete:async(finalContent,reasoningContent,timings)=>{const finalAppendedContent=hasReceivedContent?appendedContent:finalContent||"",finalAppendedReasoning=hasReceivedContent? -appendedReasoning:reasoningContent||"",fullContent=originalContent+finalAppendedContent,fullReasoning=originalReasoning+finalAppendedReasoning||void 0;await DatabaseService.updateMessage(msg.id,{content:fullContent,reasoningContent:fullReasoning,timestamp:Date.now(),timings}),conversationsStore.updateMessageAtIndex(idx,{content:fullContent,reasoningContent:fullReasoning,timestamp:Date.now(),timings}),conversationsStore.updateConversationTimestamp(),this.setChatLoading(msg.convId,!1),this.clearChatStreaming( -msg.convId),this.setProcessingState(msg.convId,null)},onError:async error2=>{if(isAbortError(error2)){hasReceivedContent&&appendedContent&&(await DatabaseService.updateMessage(msg.id,{content:originalContent+appendedContent,reasoningContent:originalReasoning+appendedReasoning||void 0,timestamp:Date.now()}),conversationsStore.updateMessageAtIndex(idx,{content:originalContent+appendedContent,reasoningContent:originalReasoning+appendedReasoning||void 0,timestamp:Date.now()})),this.setChatLoading(msg. -convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null);return}console.error("Continue generation error:",error2),conversationsStore.updateMessageAtIndex(idx,{content:originalContent}),await DatabaseService.updateMessage(msg.id,{content:originalContent}),this.setChatLoading(msg.convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null),this.showErrorDialog({type:error2.name==="TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER, -message:error2.message})}},msg.convId,abortController.signal)}catch(error2){isAbortError(error2)||console.error("Failed to continue message:",error2),activeConv&&this.setChatLoading(activeConv.id,!1)}}async editAssistantMessage(messageId,newContent,shouldBranch){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{message:msg,index:idx}=result; -try{if(shouldBranch){const newMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date.now(),role:msg.role,content:newContent,toolCalls:msg.toolCalls||"",children:[],model:msg.model},msg.parent);await conversationsStore.updateCurrentNode(newMessage.id)}else await DatabaseService.updateMessage(msg.id,{content:newContent}),conversationsStore.updateMessageAtIndex(idx,{content:newContent});conversationsStore.updateConversationTimestamp(),await conversationsStore. -refreshActiveMessages()}catch(error2){console.error("Failed to edit assistant message:",error2)}}async editUserMessagePreserveResponses(messageId,newContent,newExtras){const activeConv=conversationsStore.activeConversation;if(!activeConv)return;const result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(!result)return;const{message:msg,index:idx}=result;try{const updateData={content:newContent};newExtras!==void 0&&(updateData.extra=JSON.parse(JSON.stringify(newExtras))),await DatabaseService. -updateMessage(messageId,updateData),conversationsStore.updateMessageAtIndex(idx,updateData);const rootMessage=(await conversationsStore.getConversationMessages(activeConv.id)).find(m=>m.type==="root"&&m.parent===null);rootMessage&&msg.parent===rootMessage.id&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine)),conversationsStore.updateConversationTimestamp()}catch(error2){ -console.error("Failed to edit user message:",error2)}}async editMessageWithBranching(messageId,newContent,newExtras){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;let result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(result||(result=this.getMessageByIdWithRole(messageId,MessageRole.SYSTEM)),!result)return;const{message:msg,index:idx}=result;try{const allMessages=await conversationsStore.getConversationMessages( -activeConv.id),rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null),isFirstUserMessage=msg.role===MessageRole.USER&&rootMessage&&msg.parent===rootMessage.id,extrasToUse=newExtras!==void 0?JSON.parse(JSON.stringify(newExtras)):msg.extra?JSON.parse(JSON.stringify(msg.extra)):void 0;let messageIdForResponse;const dbMsg=findMessageById(allMessages,msg.id);if(dbMsg?dbMsg.children.length>0:msg.children.length>0){const parentId=msg.parent||rootMessage?.id;if(!parentId)return;const newMessage=await DatabaseService. -createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date.now(),role:msg.role,content:newContent,toolCalls:msg.toolCalls||"",children:[],extra:extrasToUse,model:msg.model},parentId);await conversationsStore.updateCurrentNode(newMessage.id),messageIdForResponse=newMessage.id}else{const updates={content:newContent,timestamp:Date.now(),extra:extrasToUse};await DatabaseService.updateMessage(msg.id,updates),conversationsStore.updateMessageAtIndex(idx,updates),messageIdForResponse=msg.id}conversationsStore. -updateConversationTimestamp(),isFirstUserMessage&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine)),await conversationsStore.refreshActiveMessages(),msg.role===MessageRole.USER&&await this.generateResponseForMessage(messageIdForResponse)}catch(error2){console.error("Failed to edit message with branching:",error2)}}async generateResponseForMessage(userMessageId){const activeConv=conversationsStore. -activeConversation;if(activeConv){this.showErrorDialog(null),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),conversationPath=filterByLeafNodeId(allMessages,userMessageId,!1),assistantMessage=await DatabaseService.createMessageBranch({convId:activeConv.id,type:MessageType.TEXT,timestamp:Date.now(),role:MessageRole.ASSISTANT,content:"",toolCalls:"",children:[],model:null},userMessageId); -conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion(conversationPath,assistantMessage)}catch(error2){console.error("Failed to generate response:",error2),this.setChatLoading(activeConv.id,!1)}}}getContextTotal(){const activeConvId=this.activeConversationId,activeState=activeConvId?this.getProcessingState(activeConvId):null;if(activeState&&typeof activeState.contextTotal=="number"&&activeState.contextTotal>0)return activeState.contextTotal;if(isRouterMode()){const modelContextSize=selectedModelContextSize(); -if(typeof modelContextSize=="number"&&modelContextSize>0)return modelContextSize}else{const propsContextSize=contextSize();if(typeof propsContextSize=="number"&&propsContextSize>0)return propsContextSize}return null}updateProcessingStateFromTimings(timingData,conversationId){const processingState=this.parseTimingData(timingData);if(processingState===null){console.warn("Failed to parse timing data - skipping update");return}const targetId=conversationId||this.activeConversationId;targetId&&this.setProcessingState( -targetId,processingState)}parseTimingData(timingData){const promptTokens=timingData.prompt_n||0,promptMs=timingData.prompt_ms||void 0,predictedTokens=timingData.predicted_n||0,tokensPerSecond=timingData.predicted_per_second||0,cacheTokens=timingData.cache_n||0,promptProgress=timingData.prompt_progress,contextTotal=this.getContextTotal(),currentConfig=config$1(),outputTokensMax=currentConfig.max_tokens||-1,contextUsed=promptTokens+cacheTokens+predictedTokens,outputTokensUsed=predictedTokens,progressCache=promptProgress?. -cache||0,progressActualDone=(promptProgress?.processed??0)-progressCache,progressActualTotal=(promptProgress?.total??0)-progressCache,progressPercent=promptProgress?Math.round(progressActualDone/progressActualTotal*100):void 0;return{status:predictedTokens>0?"generating":promptProgress?"preparing":"idle",tokensDecoded:predictedTokens,tokensRemaining:outputTokensMax-predictedTokens,contextUsed,contextTotal,outputTokensUsed,outputTokensMax,hasNextToken:predictedTokens>0,tokensPerSecond,temperature:currentConfig. -temperature??.8,topP:currentConfig.top_p??.95,speculative:!1,progressPercent,promptProgress,promptTokens,promptMs,cacheTokens}}restoreProcessingStateFromMessages(messages,conversationId){for(let i=messages.length-1;i>=0;i--){const message=messages[i];if(message.role===MessageRole.ASSISTANT&&message.timings){const restoredState=this.parseTimingData({prompt_n:message.timings.prompt_n||0,prompt_ms:message.timings.prompt_ms,predicted_n:message.timings.predicted_n||0,predicted_per_second:message.timings. -predicted_n&&message.timings.predicted_ms?message.timings.predicted_n/message.timings.predicted_ms*1e3:0,cache_n:message.timings.cache_n||0});if(restoredState){this.setProcessingState(conversationId,restoredState);return}}}}getConversationModel(messages){for(let i=messages.length-1;i>=0;i--){const message=messages[i];if(message.role===MessageRole.ASSISTANT&&message.model)return message.model}return null}getApiOptions(){const currentConfig=config$1(),hasValue=value=>value!=null&&value!=="",apiOptions={ -stream:!0,timings_per_token:!0};if(isRouterMode()){const modelName=selectedModelName();modelName&&(apiOptions.model=modelName)}return currentConfig.systemMessage&&(apiOptions.systemMessage=currentConfig.systemMessage),currentConfig.disableReasoningParsing&&(apiOptions.disableReasoningParsing=!0),currentConfig.excludeReasoningFromContext&&(apiOptions.excludeReasoningFromContext=!0),hasValue(currentConfig.temperature)&&(apiOptions.temperature=Number(currentConfig.temperature)),hasValue(currentConfig. -max_tokens)&&(apiOptions.max_tokens=Number(currentConfig.max_tokens)),hasValue(currentConfig.dynatemp_range)&&(apiOptions.dynatemp_range=Number(currentConfig.dynatemp_range)),hasValue(currentConfig.dynatemp_exponent)&&(apiOptions.dynatemp_exponent=Number(currentConfig.dynatemp_exponent)),hasValue(currentConfig.top_k)&&(apiOptions.top_k=Number(currentConfig.top_k)),hasValue(currentConfig.top_p)&&(apiOptions.top_p=Number(currentConfig.top_p)),hasValue(currentConfig.min_p)&&(apiOptions.min_p=Number( -currentConfig.min_p)),hasValue(currentConfig.xtc_probability)&&(apiOptions.xtc_probability=Number(currentConfig.xtc_probability)),hasValue(currentConfig.xtc_threshold)&&(apiOptions.xtc_threshold=Number(currentConfig.xtc_threshold)),hasValue(currentConfig.typ_p)&&(apiOptions.typ_p=Number(currentConfig.typ_p)),hasValue(currentConfig.repeat_last_n)&&(apiOptions.repeat_last_n=Number(currentConfig.repeat_last_n)),hasValue(currentConfig.repeat_penalty)&&(apiOptions.repeat_penalty=Number(currentConfig. -repeat_penalty)),hasValue(currentConfig.presence_penalty)&&(apiOptions.presence_penalty=Number(currentConfig.presence_penalty)),hasValue(currentConfig.frequency_penalty)&&(apiOptions.frequency_penalty=Number(currentConfig.frequency_penalty)),hasValue(currentConfig.dry_multiplier)&&(apiOptions.dry_multiplier=Number(currentConfig.dry_multiplier)),hasValue(currentConfig.dry_base)&&(apiOptions.dry_base=Number(currentConfig.dry_base)),hasValue(currentConfig.dry_allowed_length)&&(apiOptions.dry_allowed_length= -Number(currentConfig.dry_allowed_length)),hasValue(currentConfig.dry_penalty_last_n)&&(apiOptions.dry_penalty_last_n=Number(currentConfig.dry_penalty_last_n)),currentConfig.samplers&&(apiOptions.samplers=currentConfig.samplers),apiOptions.backend_sampling=currentConfig.backend_sampling,currentConfig.custom&&(apiOptions.custom=currentConfig.custom),apiOptions}cancelPreEncode(){this.preEncodeAbortController&&(this.preEncodeAbortController.abort(),this.preEncodeAbortController=null)}async triggerPreEncode(allMessages,assistantMessage,assistantContent,model,excludeReasoning){ -this.cancelPreEncode(),this.preEncodeAbortController=new AbortController;const signal=this.preEncodeAbortController.signal;try{if(!await ChatService.areAllSlotsIdle(model,signal)||signal.aborted)return;const messagesWithAssistant=[...allMessages,{...assistantMessage,content:assistantContent}];await ChatService.preEncode(messagesWithAssistant,model,excludeReasoning,signal)}catch(err){isAbortError(err)||console.warn("[ChatStore] Pre-encode failed:",err)}}}const chatStore=new ChatStore,activeProcessingState=()=>chatStore. -activeProcessingState,errorDialog=()=>chatStore.errorDialogState,getAddFilesHandler=()=>chatStore.getAddFilesHandler(),getAllLoadingChats=()=>chatStore.getAllLoadingChats(),isChatStreaming=()=>chatStore.isStreaming(),isEditing=()=>chatStore.isEditing(),isLoading=()=>chatStore.isLoading,pendingEditMessageId=()=>chatStore.pendingEditMessageId;var root$1d=from_html('<!> <form><!> <!> <div data-slot="input-area"><!> <div class="flex-column relative min-h-[48px] items-center rounded-3xl py-2 pb-2.25 \ -shadow-sm transition-all focus-within:shadow-md md:!py-3"><!> <!> <!></div></div></form> <!>',1);function ChatForm($$anchor,$$props){push$1($$props,!0);let attachments=prop($$props,"attachments",19,()=>[]),className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),isLoading2=prop($$props,"isLoading",3,!1),placeholder=prop($$props,"placeholder",3,"Type a message..."),showMcpPromptButton=prop($$props,"showMcpPromptButton",3,!1),uploadedFiles=prop($$props,"uploadedFiles",31,()=>proxy( -[])),value=prop($$props,"value",15,""),audioRecorder,chatFormActionsRef=state$1(void 0),fileInputRef=state$1(void 0),promptPickerRef=state$1(void 0),resourcePickerRef=state$1(void 0),textareaRef=state$1(void 0),isRecording=state$1(!1),recordingSupported=state$1(!1),isPromptPickerOpen=state$1(!1),promptSearchQuery=state$1(""),isInlineResourcePickerOpen=state$1(!1),resourceSearchQuery=state$1(""),isResourceDialogOpen=state$1(!1),preSelectedResourceUri=state$1(void 0),currentConfig=user_derived(config$1), -pasteLongTextToFileLength=user_derived(()=>{const n=Number(get$4(currentConfig).pasteLongTextToFileLen);return Number.isNaN(n)?Number(SETTING_CONFIG_DEFAULT.pasteLongTextToFileLen):n}),isRouter=user_derived(isRouterMode),conversationModel=user_derived(()=>chatStore.getConversationModel(activeMessages())),activeModelId=user_derived(()=>{const options=modelOptions();if(!get$4(isRouter))return options.length>0?options[0].model:null;const selectedId=selectedModelId();if(selectedId){const model=options. -find(m=>m.id===selectedId);if(model)return model.model}if(get$4(conversationModel)){const model=options.find(m=>m.model===get$4(conversationModel));if(model)return model.model}return null}),hasModelSelected=user_derived(()=>!get$4(isRouter)||!!get$4(conversationModel)||!!selectedModelId()),hasLoadingAttachments=user_derived(()=>uploadedFiles().some(f=>f.isLoading)),hasAttachments=user_derived(()=>attachments()&&attachments().length>0||uploadedFiles()&&uploadedFiles().length>0),canSubmit=user_derived( -()=>value().trim().length>0||get$4(hasAttachments));onMount$1(()=>{set$1(recordingSupported,isAudioRecordingSupported(),!0),audioRecorder=new AudioRecorder});function focus2(){get$4(textareaRef)?.focus()}function resetTextareaHeight(){get$4(textareaRef)?.resetHeight()}function openModelSelector(){get$4(chatFormActionsRef)?.openModelSelector()}function checkModelSelected(){return get$4(hasModelSelected)?!0:(get$4(chatFormActionsRef)?.openModelSelector(),!1)}function handleFileSelect(files){$$props. -onFilesAdd?.(files)}function handleFileUpload(){get$4(fileInputRef)?.click()}function handleFileRemove(fileId){if(fileId.startsWith("attachment-")){const index2=parseInt(fileId.replace("attachment-",""),10);!isNaN(index2)&&index2>=0&&index2<attachments().length&&$$props.onAttachmentRemove?.(index2)}else $$props.onUploadedFileRemove?.(fileId)}function handleInput(){const perChatOverrides=conversationsStore.getAllMcpServerOverrides(),hasServers=mcpStore.hasEnabledServers(perChatOverrides);value(). -startsWith(PROMPT_TRIGGER_PREFIX)&&hasServers?(set$1(isPromptPickerOpen,!0),set$1(promptSearchQuery,value().slice(1),!0),set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,"")):value().startsWith(RESOURCE_TRIGGER_PREFIX)&&hasServers&&mcpStore.hasResourcesCapability(perChatOverrides)?(set$1(isInlineResourcePickerOpen,!0),set$1(resourceSearchQuery,value().slice(1),!0),set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,"")):(set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,""),set$1( -isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""))}function handleKeydown(event2){if(!(get$4(isPromptPickerOpen)&&get$4(promptPickerRef)?.handleKeydown(event2))&&!(get$4(isInlineResourcePickerOpen)&&get$4(resourcePickerRef)?.handleKeydown(event2))){if(event2.key===KeyboardKey.ESCAPE&&get$4(isPromptPickerOpen)){set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,"");return}if(event2.key===KeyboardKey.ESCAPE&&get$4(isInlineResourcePickerOpen)){set$1(isInlineResourcePickerOpen,!1),set$1( -resourceSearchQuery,"");return}if(event2.key===KeyboardKey.ENTER&&!event2.shiftKey&&!isIMEComposing(event2)){const isModifier=event2.ctrlKey||event2.metaKey;if(get$4(currentConfig).sendOnEnter!==!1||isModifier){if(event2.preventDefault(),!get$4(canSubmit)||disabled()||isLoading2()||get$4(hasLoadingAttachments))return;$$props.onSubmit?.()}}}}function handlePaste(event2){if(!event2.clipboardData)return;const files=Array.from(event2.clipboardData.items).filter(item=>item.kind==="file").map(item=>item. -getAsFile()).filter(file=>file!==null);if(files.length>0){event2.preventDefault(),$$props.onFilesAdd?.(files);return}const text2=event2.clipboardData.getData(MimeTypeText.PLAIN);if(text2.startsWith(CLIPBOARD_CONTENT_QUOTE_PREFIX)){const parsed=parseClipboardContent(text2);if(parsed.textAttachments.length>0||parsed.mcpPromptAttachments.length>0){if(event2.preventDefault(),value(parsed.message),$$props.onValueChange?.(parsed.message),parsed.textAttachments.length>0){const attachmentFiles=parsed.textAttachments. -map(att=>new File([att.content],att.name,{type:MimeTypeText.PLAIN}));$$props.onFilesAdd?.(attachmentFiles)}if(parsed.mcpPromptAttachments.length>0){const mcpPromptFiles=parsed.mcpPromptAttachments.map(att=>({id:uuid$1(),name:att.name,size:att.content.length,type:SpecialFileType.MCP_PROMPT,file:new File([att.content],`${att.name}${FileExtensionText.TXT}`,{type:MimeTypeText.PLAIN}),isLoading:!1,textContent:att.content,mcpPrompt:{serverName:att.serverName,promptName:att.promptName,arguments:att.arguments}})); -uploadedFiles([...uploadedFiles(),...mcpPromptFiles]),$$props.onUploadedFilesChange?.(uploadedFiles())}setTimeout(()=>{get$4(textareaRef)?.focus()},10);return}}if(text2.length>0&&get$4(pasteLongTextToFileLength)>0&&text2.length>get$4(pasteLongTextToFileLength)){event2.preventDefault();const textFile=new File([text2],"Pasted",{type:MimeTypeText.PLAIN});$$props.onFilesAdd?.([textFile])}}function handlePromptLoadStart(placeholderId,promptInfo,args){value().startsWith(PROMPT_TRIGGER_PREFIX)&&(value( -""),$$props.onValueChange?.("")),set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,"");const promptName=promptInfo.title||promptInfo.name,placeholder2={id:placeholderId,name:promptName,size:INITIAL_FILE_SIZE,type:SpecialFileType.MCP_PROMPT,file:new File([],"loading"),isLoading:!0,mcpPrompt:{serverName:promptInfo.serverName,promptName:promptInfo.name,arguments:args?{...args}:void 0}};uploadedFiles([...uploadedFiles(),placeholder2]),$$props.onUploadedFilesChange?.(uploadedFiles()),get$4(textareaRef)?. -focus()}function handlePromptLoadComplete(placeholderId,result){const promptText=result.messages?.map(msg=>typeof msg.content=="string"?msg.content:msg.content.type===ContentPartType.TEXT?msg.content.text:"").filter(Boolean).join(PROMPT_CONTENT_SEPARATOR);uploadedFiles(uploadedFiles().map(f=>f.id===placeholderId?{...f,isLoading:!1,textContent:promptText,size:promptText.length,file:new File([promptText],`${f.name}${FileExtensionText.TXT}`,{type:MimeTypeText.PLAIN})}:f)),$$props.onUploadedFilesChange?.( -uploadedFiles())}function handlePromptLoadError(placeholderId,error2){uploadedFiles(uploadedFiles().map(f=>f.id===placeholderId?{...f,isLoading:!1,loadError:error2}:f)),$$props.onUploadedFilesChange?.(uploadedFiles())}function handlePromptPickerClose(){set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,""),get$4(textareaRef)?.focus()}function handleInlineResourcePickerClose(){set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),get$4(textareaRef)?.focus()}function handleInlineResourceSelect(){ -value().startsWith(RESOURCE_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),get$4(textareaRef)?.focus()}function handleBrowseResources(){set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),value().startsWith(RESOURCE_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isResourceDialogOpen,!0)}async function handleMicClick(){if(!audioRecorder||!get$4(recordingSupported)){console.warn("Audio recor\ -ding not supported");return}if(get$4(isRecording))try{const audioBlob=await audioRecorder.stopRecording(),wavBlob=await convertToWav(audioBlob),audioFile=createAudioFile(wavBlob);$$props.onFilesAdd?.([audioFile]),set$1(isRecording,!1)}catch(error2){console.error("Failed to stop recording:",error2),set$1(isRecording,!1)}else try{await audioRecorder.startRecording(),set$1(isRecording,!0)}catch(error2){console.error("Failed to start recording:",error2)}}var $$exports={focus:focus2,resetTextareaHeight, -openModelSelector,checkModelSelected},fragment=root$1d(),node2=first_child(fragment);bind_this(ChatFormFileInputInvisible(node2,{onFileSelect:handleFileSelect}),$$value=>set$1(fileInputRef,$$value,!0),()=>get$4(fileInputRef));var form=sibling(node2,2),node_1=child(form);bind_this(ChatFormPromptPicker(node_1,{get isOpen(){return get$4(isPromptPickerOpen)},get searchQuery(){return get$4(promptSearchQuery)},onClose:handlePromptPickerClose,onPromptLoadStart:handlePromptLoadStart,onPromptLoadComplete:handlePromptLoadComplete, -onPromptLoadError:handlePromptLoadError}),$$value=>set$1(promptPickerRef,$$value,!0),()=>get$4(promptPickerRef));var node_2=sibling(node_1,2);bind_this(ChatFormResourcePicker(node_2,{get isOpen(){return get$4(isInlineResourcePickerOpen)},get searchQuery(){return get$4(resourceSearchQuery)},onClose:handleInlineResourcePickerClose,onResourceSelect:handleInlineResourceSelect,onBrowse:handleBrowseResources}),$$value=>set$1(resourcePickerRef,$$value,!0),()=>get$4(resourcePickerRef));var div=sibling(node_2, -2),node_3=child(div);{let $0=user_derived(()=>get$4(activeModelId)??void 0);ChatAttachmentsList(node_3,{get attachments(){return attachments()},onFileRemove:handleFileRemove,limitToSingleRow:!0,class:"py-5",style:"scroll-padding: 1rem;",get activeModelId(){return get$4($0)},get uploadedFiles(){return uploadedFiles()},set uploadedFiles($$value){uploadedFiles($$value)}})}var div_1=sibling(node_3,2),node_4=child(div_1);bind_this(ChatFormTextarea(node_4,{class:"px-5 py-1.5 md:pt-0",onKeydown:handleKeydown, -onInput:()=>{handleInput(),$$props.onValueChange?.(value())},get disabled(){return disabled()},get placeholder(){return placeholder()},get value(){return value()},set value($$value){value($$value)}}),$$value=>set$1(textareaRef,$$value,!0),()=>get$4(textareaRef));var node_5=sibling(node_4,2);{var consequent=$$anchor2=>{ChatAttachmentMcpResources($$anchor2,{class:"mb-3",onResourceClick:uri2=>{set$1(preSelectedResourceUri,uri2,!0),set$1(isResourceDialogOpen,!0)}})};if_block(node_5,$$render=>{mcpHasResourceAttachments()&& -$$render(consequent)})}var node_6=sibling(node_5,2);{let $0=user_derived(()=>value().trim().length>0),$1=user_derived(()=>showMcpPromptButton()?()=>set$1(isPromptPickerOpen,!0):void 0);bind_this(ChatFormActions(node_6,{class:"px-3",get canSend(){return get$4(canSubmit)},get hasText(){return get$4($0)},get disabled(){return disabled()},get isLoading(){return isLoading2()},get isRecording(){return get$4(isRecording)},get uploadedFiles(){return uploadedFiles()},onFileUpload:handleFileUpload,onMicClick:handleMicClick, -get onStop(){return $$props.onStop},onSystemPromptClick:()=>$$props.onSystemPromptClick?.({message:value(),files:uploadedFiles()}),get onMcpPromptClick(){return get$4($1)},onMcpResourcesClick:()=>set$1(isResourceDialogOpen,!0)}),$$value=>set$1(chatFormActionsRef,$$value,!0),()=>get$4(chatFormActionsRef))}reset(div_1),reset(div),reset(form);var node_7=sibling(form,2);return DialogMcpResources(node_7,{get preSelectedUri(){return get$4(preSelectedResourceUri)},onAttach:resource=>{mcpStore.attachResource( -resource.uri)},onOpenChange:newOpen=>{newOpen||set$1(preSelectedResourceUri,void 0)},get open(){return get$4(isResourceDialogOpen)},set open($$value){set$1(isResourceDialogOpen,$$value,!0)}}),template_effect(()=>{set_class(form,1,`relative ${className()??""}`),set_class(div,1,`${INPUT_CLASSES??""} overflow-hidden rounded-3xl backdrop-blur-md ${disabled()?"cursor-not-allowed opacity-60":""}`)}),event("submit",form,e=>{e.preventDefault(),!(!get$4(canSubmit)||disabled()||isLoading2()||get$4(hasLoadingAttachments))&& -$$props.onSubmit?.()}),event("paste",div_1,handlePaste),append($$anchor,fragment),pop($$exports)}function Dropdown_menu_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props,"sideOffset",3,4),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","sideOffset","portalProps","class"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,DropdownMenuPrimitive_Portal)=>{DropdownMenuPrimitive_Portal( -$$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>cn$1("z-50 max-h-(--bits-dropdown-menu-content-available-height) min-w-[8rem] origin-(--bits-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-md outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-r\ -ight-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/20",$$props.class));component(node_1,()=>Dropdown_menu_content$1,($$anchor4,DropdownMenuPrimitive_Content)=>{DropdownMenuPrimitive_Content($$anchor4,spread_props({"data-slot":"dropdown-menu-content",get sideOffset(){ -return sideOffset()},get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}function Dropdown_menu_item($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),variant=prop($$props,"variant",3,"default"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","inset","variant"]);var fragment=comment$2(),node2=first_child( -fragment);{let $0=user_derived(()=>cn$1("relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:data-highlighted:bg-destructive/10 data-[variant=destructive]:data-highlighted:text-destructive dark:data-[variant=destructive]:data-h\ -ighlighted:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:!text-destructive",$$props.class));component(node2,()=>Menu_item,($$anchor2,DropdownMenuPrimitive_Item)=>{DropdownMenuPrimitive_Item($$anchor2,spread_props({"data-slot":"dropdown-menu-item",get"data-inset"(){return $$props.inset},get"data-variant"(){return variant()},get class(){return get$4($0)}},()=>restProps, -{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Dropdown_menu_separator($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("-mx-1 my-1 h-px bg-border/20",$$props.class));component(node2,()=>Menu_separator,($$anchor2,DropdownMenuPrimitive_Separator)=>{DropdownMenuPrimitive_Separator( -$$anchor2,spread_props({"data-slot":"dropdown-menu-separator",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Dropdown_menu_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Menu_trigger,($$anchor2,DropdownMenuPrimitive_Trigger)=>{ -DropdownMenuPrimitive_Trigger($$anchor2,spread_props({"data-slot":"dropdown-menu-trigger"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}function Dropdown_menu_sub_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("z-50 min-w-[8rem] origin-(--b\ -its-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",$$props.class));component(node2,()=>Menu_sub_content, -($$anchor2,DropdownMenuPrimitive_SubContent)=>{DropdownMenuPrimitive_SubContent($$anchor2,spread_props({"data-slot":"dropdown-menu-sub-content",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_1$P=from_html("<!> <!>",1);function Dropdown_menu_sub_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","cl\ -ass","inset","children"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:s\ -ize-4 [&_svg:not([class*='text-'])]:text-muted-foreground",$$props.class));component(node2,()=>Menu_sub_trigger,($$anchor2,DropdownMenuPrimitive_SubTrigger)=>{DropdownMenuPrimitive_SubTrigger($$anchor2,spread_props({"data-slot":"dropdown-menu-sub-trigger",get"data-inset"(){return $$props.inset},get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$P(),node_1=first_child(fragment_1);snippet(node_1, -()=>$$props.children??noop$3);var node_2=sibling(node_1,2);Chevron_right(node_2,{class:"ml-auto size-4"}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}const Sub=Menu_sub,Root$2=Menu;function Switch($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),checked=prop($$props,"checked",15,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","checked"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived( -()=>cn$1("peer inline-flex h-[1.15rem] w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80",$$props.class));component(node2,()=>Switch$1,($$anchor2,SwitchPrimitive_Root)=>{SwitchPrimitive_Root($$anchor2,spread_props( -{"data-slot":"switch",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},get checked(){return checked()},set checked($$value){checked($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $02=user_derived(()=>cn$1("pointer-events-none block size-4 rounded-full bg-background ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0 dark\ -:data-[state=checked]:bg-primary-foreground dark:data-[state=unchecked]:bg-foreground"));component(node_1,()=>Switch_thumb,($$anchor4,SwitchPrimitive_Thumb)=>{SwitchPrimitive_Thumb($$anchor4,{"data-slot":"switch-thumb",get class(){return get$4($02)}})})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_5$r=from_html('<span class="sr-only"></span> <!>',1),root_6$r=from_html("<p></p>"),root_3$D=from_html("<!> <!>",1),root_9$j=from_html("<!> <span>Imag\ -es</span>",1),root_13$b=from_html("<!> <span>Images</span>",1),root_14$6=from_html("<p>Image processing requires a vision model</p>"),root_11$a=from_html("<!> <!>",1),root_16$6=from_html("<!> <span>Audio Files</span>",1),root_20$8=from_html("<!> <span>Audio Files</span>",1),root_21$4=from_html("<p>Audio files processing requires an audio model</p>"),root_18$4=from_html("<!> <!>",1),root_22$5=from_html("<!> <span>Text Files</span>",1),root_24$1=from_html("<!> <span>PDF Files</span>",1),root_28$2=from_html( -"<!> <span>PDF Files</span>",1),root_29$1=from_html("<p>PDFs will be converted to text. Image-based PDFs may not work properly.</p>"),root_26$3=from_html("<!> <!>",1),root_32=from_html("<!> <span>System Message</span>",1),root_33$1=from_html("<p> </p>"),root_30$1=from_html("<!> <!>",1),root_35=from_html("<!> <span>MCP Servers</span>",1),root_38=from_html("<!> <span>Manage MCP Servers</span>",1),root_41=from_html('<img alt="" class="h-4 w-4 shrink-0 rounded-sm"/>'),root_42=from_html('<span class=\ -"shrink-0 rounded bg-destructive/15 px-1.5 py-0.5 text-xs text-destructive">Error</span>'),root_40=from_html('<button type="button" class="flex w-full items-center justify-between gap-2 rounded-sm px-2 py-2 text-left transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50"><div class="flex min-w-0 flex-1 items-center gap-2"><!> <span class="truncate text-sm"> </span> <!></div> <!></button>'),root_39=from_html('<div class="max-h-64 overflow-y-auto"></div>'),root_34=from_html( -"<!> <!>",1),root_44=from_html("<!> <span>MCP Prompt</span>",1),root_46=from_html("<!> <span>MCP Resources</span>",1),root_7$n=from_html("<!> <!> <!> <!> <!> <!> <!> <!> <!>",1),root_1$O=from_html("<!> <!>",1),root$1c=from_html("<div><!></div>");function ChatFormActionAttachmentsDropdown($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),hasVisionModality=prop($$props,"hasVisi\ -onModality",3,!1),hasMcpPromptsSupport=prop($$props,"hasMcpPromptsSupport",3,!1),hasMcpResourcesSupport=prop($$props,"hasMcpResourcesSupport",3,!1),isNewChat=user_derived(()=>!page$1.params.id),systemMessageTooltip=user_derived(()=>get$4(isNewChat)?"Add custom system message for a new conversation":"Inject custom system message at the beginning of the conversation"),dropdownOpen=state$1(!1),mcpServers=user_derived(()=>mcpStore.getServersSorted().filter(s2=>s2.enabled)),hasMcpServers=user_derived( -()=>get$4(mcpServers).length>0),mcpSearchQuery=state$1(""),filteredMcpServers=user_derived(()=>{const query=get$4(mcpSearchQuery).toLowerCase().trim();return query?get$4(mcpServers).filter(s2=>{const name=getServerLabel(s2).toLowerCase(),url2=s2.url.toLowerCase();return name.includes(query)||url2.includes(query)}):get$4(mcpServers)});function getServerLabel(server){return mcpStore.getServerLabel(server)}function isServerEnabledForChat(serverId){return conversationsStore.isMcpServerEnabledForChat( -serverId)}async function toggleServerForChat(serverId){await conversationsStore.toggleMcpServerForChat(serverId)}function handleMcpSubMenuOpen(open2){open2&&(set$1(mcpSearchQuery,""),mcpStore.runHealthChecksForServers(get$4(mcpServers)))}function handleMcpPromptClick(){set$1(dropdownOpen,!1),$$props.onMcpPromptClick?.()}function handleMcpSettingsClick(){set$1(dropdownOpen,!1),$$props.onMcpSettingsClick?.()}function handleMcpResourcesClick(){set$1(dropdownOpen,!1),$$props.onMcpResourcesClick?.()} -var div=root$1c(),node2=child(div);component(node2,()=>Root$2,($$anchor2,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor2,{get open(){return get$4(dropdownOpen)},set open($$value){set$1(dropdownOpen,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment=root_1$O(),node_1=first_child(fragment);component(node_1,()=>Dropdown_menu_trigger,($$anchor4,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor4,{name:"Attach files",get disabled(){return disabled()},children:($$anchor5,$$slotProps2)=>{ -var fragment_1=comment$2(),node_2=first_child(fragment_1);component(node_2,()=>Root$5,($$anchor6,Tooltip_Root)=>{Tooltip_Root($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_2=root_3$D(),node_3=first_child(fragment_2);component(node_3,()=>Tooltip_trigger,($$anchor8,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor8,{class:"w-full",children:($$anchor9,$$slotProps4)=>{Button($$anchor9,{class:"file-upload-button h-8 w-8 rounded-full p-0",get disabled(){return disabled()},variant:"secondary",type:"\ -button",children:($$anchor10,$$slotProps5)=>{var fragment_4=root_5$r(),span=first_child(fragment_4);span.textContent="Add files, system prompt or MCP Servers";var node_4=sibling(span,2);Plus(node_4,{class:"h-4 w-4"}),append($$anchor10,fragment_4)},$$slots:{default:!0}})},$$slots:{default:!0}})});var node_5=sibling(node_3,2);component(node_5,()=>Tooltip_content,($$anchor8,Tooltip_Content)=>{Tooltip_Content($$anchor8,{children:($$anchor9,$$slotProps4)=>{var p2=root_6$r();p2.textContent="Add files,\ - system prompt or MCP Servers",append($$anchor9,p2)},$$slots:{default:!0}})}),append($$anchor7,fragment_2)},$$slots:{default:!0}})}),append($$anchor5,fragment_1)},$$slots:{default:!0}})});var node_6=sibling(node_1,2);component(node_6,()=>Dropdown_menu_content,($$anchor4,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor4,{align:"start",class:"w-48",children:($$anchor5,$$slotProps2)=>{var fragment_5=root_7$n(),node_7=first_child(fragment_5);{var consequent=$$anchor6=>{var fragment_6=comment$2(), -node_8=first_child(fragment_6);component(node_8,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor7,{class:"images-button flex cursor-pointer items-center gap-2",onclick:()=>$$props.onFileUpload?.(),children:($$anchor8,$$slotProps3)=>{var fragment_7=root_9$j(),node_9=first_child(fragment_7);component(node_9,()=>FILE_TYPE_ICONS.image,($$anchor9,FILE_TYPE_ICONS_image)=>{FILE_TYPE_ICONS_image($$anchor9,{class:"h-4 w-4"})}),next$1(2),append($$anchor8,fragment_7)},$$slots:{ -default:!0}})}),append($$anchor6,fragment_6)},alternate=$$anchor6=>{var fragment_8=comment$2(),node_10=first_child(fragment_8);component(node_10,()=>Root$5,($$anchor7,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor7,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor8,$$slotProps3)=>{var fragment_9=root_11$a(),node_11=first_child(fragment_9);component(node_11,()=>Tooltip_trigger,($$anchor9,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor9,{class:"w-full",children:($$anchor10,$$slotProps4)=>{ -var fragment_10=comment$2(),node_12=first_child(fragment_10);component(node_12,()=>Dropdown_menu_item,($$anchor11,DropdownMenu_Item_1)=>{DropdownMenu_Item_1($$anchor11,{class:"images-button flex cursor-pointer items-center gap-2",disabled:!0,children:($$anchor12,$$slotProps5)=>{var fragment_11=root_13$b(),node_13=first_child(fragment_11);component(node_13,()=>FILE_TYPE_ICONS.image,($$anchor13,FILE_TYPE_ICONS_image_1)=>{FILE_TYPE_ICONS_image_1($$anchor13,{class:"h-4 w-4"})}),next$1(2),append($$anchor12, -fragment_11)},$$slots:{default:!0}})}),append($$anchor10,fragment_10)},$$slots:{default:!0}})});var node_14=sibling(node_11,2);component(node_14,()=>Tooltip_content,($$anchor9,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor9,{side:"right",children:($$anchor10,$$slotProps4)=>{var p_1=root_14$6();append($$anchor10,p_1)},$$slots:{default:!0}})}),append($$anchor8,fragment_9)},$$slots:{default:!0}})}),append($$anchor6,fragment_8)};if_block(node_7,$$render=>{hasVisionModality()?$$render(consequent):$$render( -alternate,!1)})}var node_15=sibling(node_7,2);{var consequent_1=$$anchor6=>{var fragment_12=comment$2(),node_16=first_child(fragment_12);component(node_16,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item_2)=>{DropdownMenu_Item_2($$anchor7,{class:"audio-button flex cursor-pointer items-center gap-2",onclick:()=>$$props.onFileUpload?.(),children:($$anchor8,$$slotProps3)=>{var fragment_13=root_16$6(),node_17=first_child(fragment_13);component(node_17,()=>FILE_TYPE_ICONS.audio,($$anchor9,FILE_TYPE_ICONS_audio)=>{ -FILE_TYPE_ICONS_audio($$anchor9,{class:"h-4 w-4"})}),next$1(2),append($$anchor8,fragment_13)},$$slots:{default:!0}})}),append($$anchor6,fragment_12)},alternate_1=$$anchor6=>{var fragment_14=comment$2(),node_18=first_child(fragment_14);component(node_18,()=>Root$5,($$anchor7,Tooltip_Root_2)=>{Tooltip_Root_2($$anchor7,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor8,$$slotProps3)=>{var fragment_15=root_18$4(),node_19=first_child(fragment_15);component(node_19,()=>Tooltip_trigger, -($$anchor9,Tooltip_Trigger_2)=>{Tooltip_Trigger_2($$anchor9,{class:"w-full",children:($$anchor10,$$slotProps4)=>{var fragment_16=comment$2(),node_20=first_child(fragment_16);component(node_20,()=>Dropdown_menu_item,($$anchor11,DropdownMenu_Item_3)=>{DropdownMenu_Item_3($$anchor11,{class:"audio-button flex cursor-pointer items-center gap-2",disabled:!0,children:($$anchor12,$$slotProps5)=>{var fragment_17=root_20$8(),node_21=first_child(fragment_17);component(node_21,()=>FILE_TYPE_ICONS.audio,($$anchor13,FILE_TYPE_ICONS_audio_1)=>{ -FILE_TYPE_ICONS_audio_1($$anchor13,{class:"h-4 w-4"})}),next$1(2),append($$anchor12,fragment_17)},$$slots:{default:!0}})}),append($$anchor10,fragment_16)},$$slots:{default:!0}})});var node_22=sibling(node_19,2);component(node_22,()=>Tooltip_content,($$anchor9,Tooltip_Content_2)=>{Tooltip_Content_2($$anchor9,{side:"right",children:($$anchor10,$$slotProps4)=>{var p_2=root_21$4();append($$anchor10,p_2)},$$slots:{default:!0}})}),append($$anchor8,fragment_15)},$$slots:{default:!0}})}),append($$anchor6, -fragment_14)};if_block(node_15,$$render=>{hasAudioModality()?$$render(consequent_1):$$render(alternate_1,!1)})}var node_23=sibling(node_15,2);component(node_23,()=>Dropdown_menu_item,($$anchor6,DropdownMenu_Item_4)=>{DropdownMenu_Item_4($$anchor6,{class:"flex cursor-pointer items-center gap-2",onclick:()=>$$props.onFileUpload?.(),children:($$anchor7,$$slotProps3)=>{var fragment_18=root_22$5(),node_24=first_child(fragment_18);component(node_24,()=>FILE_TYPE_ICONS.text,($$anchor8,FILE_TYPE_ICONS_text)=>{ -FILE_TYPE_ICONS_text($$anchor8,{class:"h-4 w-4"})}),next$1(2),append($$anchor7,fragment_18)},$$slots:{default:!0}})});var node_25=sibling(node_23,2);{var consequent_2=$$anchor6=>{var fragment_19=comment$2(),node_26=first_child(fragment_19);component(node_26,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item_5)=>{DropdownMenu_Item_5($$anchor7,{class:"flex cursor-pointer items-center gap-2",onclick:()=>$$props.onFileUpload?.(),children:($$anchor8,$$slotProps3)=>{var fragment_20=root_24$1(),node_27=first_child( -fragment_20);component(node_27,()=>FILE_TYPE_ICONS.pdf,($$anchor9,FILE_TYPE_ICONS_pdf)=>{FILE_TYPE_ICONS_pdf($$anchor9,{class:"h-4 w-4"})}),next$1(2),append($$anchor8,fragment_20)},$$slots:{default:!0}})}),append($$anchor6,fragment_19)},alternate_2=$$anchor6=>{var fragment_21=comment$2(),node_28=first_child(fragment_21);component(node_28,()=>Root$5,($$anchor7,Tooltip_Root_3)=>{Tooltip_Root_3($$anchor7,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor8,$$slotProps3)=>{var fragment_22=root_26$3(), -node_29=first_child(fragment_22);component(node_29,()=>Tooltip_trigger,($$anchor9,Tooltip_Trigger_3)=>{Tooltip_Trigger_3($$anchor9,{class:"w-full",children:($$anchor10,$$slotProps4)=>{var fragment_23=comment$2(),node_30=first_child(fragment_23);component(node_30,()=>Dropdown_menu_item,($$anchor11,DropdownMenu_Item_6)=>{DropdownMenu_Item_6($$anchor11,{class:"flex cursor-pointer items-center gap-2",onclick:()=>$$props.onFileUpload?.(),children:($$anchor12,$$slotProps5)=>{var fragment_24=root_28$2(), -node_31=first_child(fragment_24);component(node_31,()=>FILE_TYPE_ICONS.pdf,($$anchor13,FILE_TYPE_ICONS_pdf_1)=>{FILE_TYPE_ICONS_pdf_1($$anchor13,{class:"h-4 w-4"})}),next$1(2),append($$anchor12,fragment_24)},$$slots:{default:!0}})}),append($$anchor10,fragment_23)},$$slots:{default:!0}})});var node_32=sibling(node_29,2);component(node_32,()=>Tooltip_content,($$anchor9,Tooltip_Content_3)=>{Tooltip_Content_3($$anchor9,{side:"right",children:($$anchor10,$$slotProps4)=>{var p_3=root_29$1();append($$anchor10, -p_3)},$$slots:{default:!0}})}),append($$anchor8,fragment_22)},$$slots:{default:!0}})}),append($$anchor6,fragment_21)};if_block(node_25,$$render=>{hasVisionModality()?$$render(consequent_2):$$render(alternate_2,!1)})}var node_33=sibling(node_25,2);component(node_33,()=>Root$5,($$anchor6,Tooltip_Root_4)=>{Tooltip_Root_4($$anchor6,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor7,$$slotProps3)=>{var fragment_25=root_30$1(),node_34=first_child(fragment_25);component(node_34,()=>Tooltip_trigger, -($$anchor8,Tooltip_Trigger_4)=>{Tooltip_Trigger_4($$anchor8,{class:"w-full",children:($$anchor9,$$slotProps4)=>{var fragment_26=comment$2(),node_35=first_child(fragment_26);component(node_35,()=>Dropdown_menu_item,($$anchor10,DropdownMenu_Item_7)=>{DropdownMenu_Item_7($$anchor10,{class:"flex cursor-pointer items-center gap-2",onclick:()=>$$props.onSystemPromptClick?.(),children:($$anchor11,$$slotProps5)=>{var fragment_27=root_32(),node_36=first_child(fragment_27);Message_square(node_36,{class:"h\ --4 w-4"}),next$1(2),append($$anchor11,fragment_27)},$$slots:{default:!0}})}),append($$anchor9,fragment_26)},$$slots:{default:!0}})});var node_37=sibling(node_34,2);component(node_37,()=>Tooltip_content,($$anchor8,Tooltip_Content_4)=>{Tooltip_Content_4($$anchor8,{side:"right",children:($$anchor9,$$slotProps4)=>{var p_4=root_33$1(),text2=child(p_4,!0);reset(p_4),template_effect(()=>set_text(text2,get$4(systemMessageTooltip))),append($$anchor9,p_4)},$$slots:{default:!0}})}),append($$anchor7,fragment_25)}, -$$slots:{default:!0}})});var node_38=sibling(node_33,2);component(node_38,()=>Dropdown_menu_separator,($$anchor6,DropdownMenu_Separator)=>{DropdownMenu_Separator($$anchor6,{})});var node_39=sibling(node_38,2);component(node_39,()=>Sub,($$anchor6,DropdownMenu_Sub)=>{DropdownMenu_Sub($$anchor6,{onOpenChange:handleMcpSubMenuOpen,children:($$anchor7,$$slotProps3)=>{var fragment_28=root_34(),node_40=first_child(fragment_28);component(node_40,()=>Dropdown_menu_sub_trigger,($$anchor8,DropdownMenu_SubTrigger)=>{ -DropdownMenu_SubTrigger($$anchor8,{class:"flex cursor-pointer items-center gap-2",children:($$anchor9,$$slotProps4)=>{var fragment_29=root_35(),node_41=first_child(fragment_29);McpLogo(node_41,{class:"h-4 w-4"}),next$1(2),append($$anchor9,fragment_29)},$$slots:{default:!0}})});var node_42=sibling(node_40,2);component(node_42,()=>Dropdown_menu_sub_content,($$anchor8,DropdownMenu_SubContent)=>{DropdownMenu_SubContent($$anchor8,{class:"w-72 pt-0",children:($$anchor9,$$slotProps4)=>{{const footer2=$$anchor10=>{ -var fragment_31=comment$2(),node_43=first_child(fragment_31);component(node_43,()=>Dropdown_menu_item,($$anchor11,DropdownMenu_Item_8)=>{DropdownMenu_Item_8($$anchor11,{class:"flex cursor-pointer items-center gap-2",onclick:handleMcpSettingsClick,children:($$anchor12,$$slotProps5)=>{var fragment_32=root_38(),node_44=first_child(fragment_32);Settings$1(node_44,{class:"h-4 w-4"}),next$1(2),append($$anchor12,fragment_32)},$$slots:{default:!0}})}),append($$anchor10,fragment_31)};let $0=user_derived( -()=>get$4(hasMcpServers)?"No servers found":"No MCP servers configured"),$1=user_derived(()=>get$4(filteredMcpServers).length===0);DropdownMenuSearchable($$anchor9,{placeholder:"Search servers...",get emptyMessage(){return get$4($0)},get isEmpty(){return get$4($1)},get searchValue(){return get$4(mcpSearchQuery)},set searchValue($$value){set$1(mcpSearchQuery,$$value,!0)},footer:footer2,children:($$anchor10,$$slotProps5)=>{var div_1=root_39();each(div_1,21,()=>get$4(filteredMcpServers),server=>server. -id,($$anchor11,server)=>{const healthState=user_derived(()=>mcpStore.getHealthCheckState(get$4(server).id)),hasError=user_derived(()=>get$4(healthState).status===HealthCheckStatus.ERROR),isEnabledForChat=user_derived(()=>isServerEnabledForChat(get$4(server).id));var button=root_40();button.__click=()=>!get$4(hasError)&&toggleServerForChat(get$4(server).id);var div_2=child(button),node_45=child(div_2);{var consequent_3=$$anchor12=>{var img=root_41();template_effect($02=>set_attribute(img,"src",$02), -[()=>mcpStore.getServerFavicon(get$4(server).id)]),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor12,img)};if_block(node_45,$$render=>{mcpStore.getServerFavicon(get$4(server).id)&&$$render(consequent_3)})}var span_1=sibling(node_45,2),text_1=child(span_1,!0);reset(span_1);var node_46=sibling(span_1,2);{var consequent_4=$$anchor12=>{var span_2=root_42();append($$anchor12,span_2)};if_block(node_46,$$render=>{get$4(hasError)&&$$render(consequent_4)})} -reset(div_2);var node_47=sibling(div_2,2);Switch(node_47,{get checked(){return get$4(isEnabledForChat)},get disabled(){return get$4(hasError)},onclick:e=>e.stopPropagation(),onCheckedChange:()=>toggleServerForChat(get$4(server).id)}),reset(button),template_effect($02=>{button.disabled=get$4(hasError),set_text(text_1,$02)},[()=>getServerLabel(get$4(server))]),append($$anchor11,button)}),reset(div_1),append($$anchor10,div_1)},$$slots:{footer:!0,default:!0}})}},$$slots:{default:!0}})}),append($$anchor7, -fragment_28)},$$slots:{default:!0}})});var node_48=sibling(node_39,2);{var consequent_5=$$anchor6=>{var fragment_33=comment$2(),node_49=first_child(fragment_33);component(node_49,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item_9)=>{DropdownMenu_Item_9($$anchor7,{class:"flex cursor-pointer items-center gap-2",onclick:handleMcpPromptClick,children:($$anchor8,$$slotProps3)=>{var fragment_34=root_44(),node_50=first_child(fragment_34);Zap(node_50,{class:"h-4 w-4"}),next$1(2),append($$anchor8,fragment_34)}, -$$slots:{default:!0}})}),append($$anchor6,fragment_33)};if_block(node_48,$$render=>{hasMcpPromptsSupport()&&$$render(consequent_5)})}var node_51=sibling(node_48,2);{var consequent_6=$$anchor6=>{var fragment_35=comment$2(),node_52=first_child(fragment_35);component(node_52,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item_10)=>{DropdownMenu_Item_10($$anchor7,{class:"flex cursor-pointer items-center gap-2",onclick:handleMcpResourcesClick,children:($$anchor8,$$slotProps3)=>{var fragment_36=root_46(), -node_53=first_child(fragment_36);Folder_open(node_53,{class:"h-4 w-4"}),next$1(2),append($$anchor8,fragment_36)},$$slots:{default:!0}})}),append($$anchor6,fragment_35)};if_block(node_51,$$render=>{hasMcpResourcesSupport()&&$$render(consequent_6)})}append($$anchor5,fragment_5)},$$slots:{default:!0}})}),append($$anchor3,fragment)},$$slots:{default:!0}})}),reset(div),template_effect(()=>set_class(div,1,`flex items-center gap-1 ${className()??""}`)),append($$anchor,div),pop()}delegate(["click"]);function Sheet_overlay($$anchor,$$props){ -push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",$$props.class));component(node2,()=>Dialog_overlay$1,($$anchor2,SheetPrimitive_Overlay)=>{SheetPrimitive_Overlay($$anchor2,spread_props( -{"data-slot":"sheet-overlay",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const sheetVariants=tv({base:`border-border/30 dark:border-border/20 data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-sm transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 ${PANEL_CLASSES}`,variants:{side:{top:"data-[state=closed]:slide-out-to-t\ -op data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",bottom:"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",left:"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",right:"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm"}},defaultVariants:{side:"right"}}); -var root_3$C=from_html('<!> <span class="sr-only">Close</span>',1),root_2$N=from_html("<!> <!>",1),root_1$N=from_html("<!> <!>",1);function Sheet_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),side=prop($$props,"side",3,"right"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","side","portalProps","children"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,SheetPrimitive_Portal)=>{SheetPrimitive_Portal( -$$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$N(),node_1=first_child(fragment_1);Sheet_overlay(node_1,{});var node_2=sibling(node_1,2);{let $0=user_derived(()=>cn$1(sheetVariants({side:side()}),$$props.class));component(node_2,()=>Dialog_content$1,($$anchor4,SheetPrimitive_Content)=>{SheetPrimitive_Content($$anchor4,spread_props({"data-slot":"sheet-content",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ -ref2($$value)},children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$N(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children??noop$3);var node_4=sibling(node_3,2);component(node_4,()=>Dialog_close,($$anchor6,SheetPrimitive_Close)=>{SheetPrimitive_Close($$anchor6,{class:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-hidden dis\ -abled:pointer-events-none",children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$C(),node_5=first_child(fragment_3);X(node_5,{class:"size-4"}),next$1(2),append($$anchor7,fragment_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}var root$1b=from_html("<div><!></div>");function Sheet_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$1b();attribute_effect(div,$0=>({"data-slot":"sheet-header",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-1.5 p-4",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}function Sheet_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$s\ -lots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("font-semibold text-foreground",$$props.class));component(node2,()=>Dialog_title$1,($$anchor2,SheetPrimitive_Title)=>{SheetPrimitive_Title($$anchor2,spread_props({"data-slot":"sheet-title",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Sheet_description($$anchor,$$props){ -push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-sm text-muted-foreground",$$props.class));component(node2,()=>Dialog_description$1,($$anchor2,SheetPrimitive_Description)=>{SheetPrimitive_Description($$anchor2,spread_props({"data-slot":"sheet-description",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()}, -set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const Root$1=Dialog;var root_2$M=from_html('<span class="sr-only"></span> <!>',1),root_4$m=from_html("<!> <!>",1),root_7$m=from_html('<span class="ml-auto text-xs text-muted-foreground">Requires vision model</span>'),root_8$i=from_html('<span class="ml-auto text-xs text-muted-foreground">Requires audio model</span>'),root_9$i=from_html('<span class="ml-auto text-xs text-muted-foreground">Text-only</span>'),root_10$e=from_html('\ -<button type="button"><!> <span>MCP Prompt</span></button>'),root_11$9=from_html('<button type="button"><!> <span>MCP Resources</span></button>'),root_3$B=from_html('<!> <div class="flex flex-col gap-1 overflow-y-auto px-1.5 pb-2"><button type="button"><!> <span>Images</span> <!></button> <button type="button"><!> <span>Audio Files</span> <!></button> <button type="button"><!> <span>Text Files</span></button> <button type="button"><!> <span>PDF Files</span> <!></button> <button type="button"><!>\ - <span>System Message</span></button> <button type="button"><!> <span>MCP Servers</span></button> <!> <!></div>',1),root_1$M=from_html("<!> <!>",1),root$1a=from_html("<div><!></div>");function ChatFormActionAttachmentsSheet($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),hasVisionModality=prop($$props,"hasVisionModality",3,!1),hasMcpPromptsSupport=prop($$props,"hasMcpPrompt\ -sSupport",3,!1),hasMcpResourcesSupport=prop($$props,"hasMcpResourcesSupport",3,!1),sheetOpen=state$1(!1);function handleMcpPromptClick(){set$1(sheetOpen,!1),$$props.onMcpPromptClick?.()}function handleMcpSettingsClick(){$$props.onMcpSettingsClick?.()}function handleMcpResourcesClick(){set$1(sheetOpen,!1),$$props.onMcpResourcesClick?.()}function handleSheetFileUpload(){set$1(sheetOpen,!1),$$props.onFileUpload?.()}function handleSheetSystemPromptClick(){set$1(sheetOpen,!1),$$props.onSystemPromptClick?.()} -const sheetItemClass="flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-left text-sm transition-colors hover:bg-accent active:bg-accent disabled:cursor-not-allowed disabled:opacity-50";var div=root$1a(),node2=child(div);component(node2,()=>Root$1,($$anchor2,Sheet_Root)=>{Sheet_Root($$anchor2,{get open(){return get$4(sheetOpen)},set open($$value){set$1(sheetOpen,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment=root_1$M(),node_1=first_child(fragment);Button(node_1,{class:"file\ --upload-button h-8 w-8 rounded-full p-0",get disabled(){return disabled()},variant:"secondary",type:"button",onclick:()=>set$1(sheetOpen,!0),children:($$anchor4,$$slotProps2)=>{var fragment_1=root_2$M(),span=first_child(fragment_1);span.textContent="Add files, system prompt or MCP Servers";var node_2=sibling(span,2);Plus(node_2,{class:"h-4 w-4"}),append($$anchor4,fragment_1)},$$slots:{default:!0}});var node_3=sibling(node_1,2);component(node_3,()=>Sheet_content,($$anchor4,Sheet_Content)=>{Sheet_Content( -$$anchor4,{side:"bottom",class:"max-h-[85vh] gap-0",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_3$B(),node_4=first_child(fragment_2);component(node_4,()=>Sheet_header,($$anchor6,Sheet_Header)=>{Sheet_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_4$m(),node_5=first_child(fragment_3);component(node_5,()=>Sheet_title,($$anchor8,Sheet_Title)=>{Sheet_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("Add to chat");append($$anchor9,text2)}, -$$slots:{default:!0}})});var node_6=sibling(node_5,2);component(node_6,()=>Sheet_description,($$anchor8,Sheet_Description)=>{Sheet_Description($$anchor8,{class:"sr-only",children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8("Add files, system prompt or configure MCP servers");append($$anchor9,text_1)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div_1=sibling(node_4,2),button=child(div_1);set_class(button,1,clsx(sheetItemClass)),button.__click=handleSheetFileUpload; -var node_7=child(button);component(node_7,()=>FILE_TYPE_ICONS.image,($$anchor6,FILE_TYPE_ICONS_image)=>{FILE_TYPE_ICONS_image($$anchor6,{class:"h-4 w-4 shrink-0"})});var node_8=sibling(node_7,4);{var consequent=$$anchor6=>{var span_1=root_7$m();append($$anchor6,span_1)};if_block(node_8,$$render=>{hasVisionModality()||$$render(consequent)})}reset(button);var button_1=sibling(button,2);set_class(button_1,1,clsx(sheetItemClass)),button_1.__click=handleSheetFileUpload;var node_9=child(button_1);component( -node_9,()=>FILE_TYPE_ICONS.audio,($$anchor6,FILE_TYPE_ICONS_audio)=>{FILE_TYPE_ICONS_audio($$anchor6,{class:"h-4 w-4 shrink-0"})});var node_10=sibling(node_9,4);{var consequent_1=$$anchor6=>{var span_2=root_8$i();append($$anchor6,span_2)};if_block(node_10,$$render=>{hasAudioModality()||$$render(consequent_1)})}reset(button_1);var button_2=sibling(button_1,2);set_class(button_2,1,clsx(sheetItemClass)),button_2.__click=handleSheetFileUpload;var node_11=child(button_2);component(node_11,()=>FILE_TYPE_ICONS. -text,($$anchor6,FILE_TYPE_ICONS_text)=>{FILE_TYPE_ICONS_text($$anchor6,{class:"h-4 w-4 shrink-0"})}),next$1(2),reset(button_2);var button_3=sibling(button_2,2);set_class(button_3,1,clsx(sheetItemClass)),button_3.__click=handleSheetFileUpload;var node_12=child(button_3);component(node_12,()=>FILE_TYPE_ICONS.pdf,($$anchor6,FILE_TYPE_ICONS_pdf)=>{FILE_TYPE_ICONS_pdf($$anchor6,{class:"h-4 w-4 shrink-0"})});var node_13=sibling(node_12,4);{var consequent_2=$$anchor6=>{var span_3=root_9$i();append($$anchor6, -span_3)};if_block(node_13,$$render=>{hasVisionModality()||$$render(consequent_2)})}reset(button_3);var button_4=sibling(button_3,2);set_class(button_4,1,clsx(sheetItemClass)),button_4.__click=handleSheetSystemPromptClick;var node_14=child(button_4);Message_square(node_14,{class:"h-4 w-4 shrink-0"}),next$1(2),reset(button_4);var button_5=sibling(button_4,2);set_class(button_5,1,clsx(sheetItemClass)),button_5.__click=handleMcpSettingsClick;var node_15=child(button_5);McpLogo(node_15,{class:"h-4 w-\ -4 shrink-0"}),next$1(2),reset(button_5);var node_16=sibling(button_5,2);{var consequent_3=$$anchor6=>{var button_6=root_10$e();set_class(button_6,1,clsx(sheetItemClass)),button_6.__click=handleMcpPromptClick;var node_17=child(button_6);Zap(node_17,{class:"h-4 w-4 shrink-0"}),next$1(2),reset(button_6),append($$anchor6,button_6)};if_block(node_16,$$render=>{hasMcpPromptsSupport()&&$$render(consequent_3)})}var node_18=sibling(node_16,2);{var consequent_4=$$anchor6=>{var button_7=root_11$9();set_class( -button_7,1,clsx(sheetItemClass)),button_7.__click=handleMcpResourcesClick;var node_19=child(button_7);Folder_open(node_19,{class:"h-4 w-4 shrink-0"}),next$1(2),reset(button_7),append($$anchor6,button_7)};if_block(node_18,$$render=>{hasMcpResourcesSupport()&&$$render(consequent_4)})}reset(div_1),template_effect(()=>{button.disabled=!hasVisionModality(),button_1.disabled=!hasAudioModality()}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment)},$$slots:{default:!0}})}), -reset(div),template_effect(()=>set_class(div,1,`flex items-center gap-1 ${className()??""}`)),append($$anchor,div),pop()}delegate(["click"]);var root_3$A=from_html('<span class="sr-only"> </span> <!>',1),root_7$l=from_html("<p>Current model does not support audio</p>"),root_1$L=from_html("<!> <!>",1),root$19=from_html("<div><!></div>");function ChatFormActionRecord($$anchor,$$props){let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"has\ -AudioModality",3,!1),isLoading2=prop($$props,"isLoading",3,!1),isRecording=prop($$props,"isRecording",3,!1);var div=root$19(),node2=child(div);component(node2,()=>Root$5,($$anchor2,Tooltip_Root)=>{Tooltip_Root($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment=root_1$L(),node_1=first_child(fragment);component(node_1,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor4,{children:($$anchor5,$$slotProps2)=>{{let $0=user_derived(()=>isRecording()?"animate-pulse bg-red-\ -500 text-white hover:bg-red-600":""),$1=user_derived(()=>disabled()||isLoading2()||!hasAudioModality());Button($$anchor5,{get class(){return`h-8 w-8 rounded-full p-0 ${get$4($0)??""}`},get disabled(){return get$4($1)},get onclick(){return $$props.onMicClick},type:"button",children:($$anchor6,$$slotProps3)=>{var fragment_2=root_3$A(),span=first_child(fragment_2),text2=child(span,!0);reset(span);var node_2=sibling(span,2);{var consequent=$$anchor7=>{Square($$anchor7,{class:"h-4 w-4 animate-pulse f\ -ill-white"})},alternate=$$anchor7=>{Mic($$anchor7,{class:"h-4 w-4"})};if_block(node_2,$$render=>{isRecording()?$$render(consequent):$$render(alternate,!1)})}template_effect(()=>set_text(text2,isRecording()?"Stop recording":"Start recording")),append($$anchor6,fragment_2)},$$slots:{default:!0}})}},$$slots:{default:!0}})});var node_3=sibling(node_1,2);{var consequent_1=$$anchor4=>{var fragment_5=comment$2(),node_4=first_child(fragment_5);component(node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{ -Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_7$l();append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_5)};if_block(node_3,$$render=>{hasAudioModality()||$$render(consequent_1)})}append($$anchor3,fragment)},$$slots:{default:!0}})}),reset(div),template_effect(()=>set_class(div,1,`flex items-center gap-1 ${className()??""}`)),append($$anchor,div)}const MESSAGE_EDIT_KEY=Symbol.for(CONTEXT_KEY_MESSAGE_EDIT);function setMessageEditContext(ctx){return setContext( -MESSAGE_EDIT_KEY,ctx)}function getMessageEditContext(){return getContext(MESSAGE_EDIT_KEY)}const CHAT_ACTIONS_KEY=Symbol.for(CONTEXT_KEY_CHAT_ACTIONS);function setChatActionsContext(ctx){return setContext(CHAT_ACTIONS_KEY,ctx)}function getChatActionsContext(){return getContext(CHAT_ACTIONS_KEY)}const CHAT_SETTINGS_DIALOG_KEY=Symbol.for(CONTEXT_KEY_CHAT_SETTINGS_DIALOG);function setChatSettingsDialogContext(ctx){return setContext(CHAT_SETTINGS_DIALOG_KEY,ctx)}function getChatSettingsDialogContext(){ -return getContext(CHAT_SETTINGS_DIALOG_KEY)}var root_6$q=from_html('<span class="sr-only">Stop</span> <!>',1),root$18=from_html('<div style="container-type: inline-size"><div class="mr-auto flex items-center gap-2"><!> <!></div> <div class="ml-auto flex items-center gap-1.5"><!></div> <!></div>');function ChatFormActions($$anchor,$$props){push$1($$props,!0);let canSend=prop($$props,"canSend",3,!1),className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),isLoading2=prop($$props, -"isLoading",3,!1),isRecording=prop($$props,"isRecording",3,!1),hasText=prop($$props,"hasText",3,!1),uploadedFiles=prop($$props,"uploadedFiles",19,()=>[]),currentConfig=user_derived(config$1),isRouter=user_derived(isRouterMode),isOffline=user_derived(()=>!!serverError()),conversationModel=user_derived(()=>chatStore.getConversationModel(activeMessages())),lastSyncedConversationModel=null;user_effect(()=>{if(get$4(conversationModel)&&get$4(conversationModel)!==lastSyncedConversationModel)lastSyncedConversationModel= -get$4(conversationModel),modelsStore.selectModelByName(get$4(conversationModel));else if(get$4(isRouter)&&!modelsStore.selectedModelId&&modelsStore.loadedModelIds.length>0){lastSyncedConversationModel=null;const first=modelOptions().find(m=>modelsStore.loadedModelIds.includes(m.model));first&&modelsStore.selectModelById(first.id)}});let activeModelId=user_derived(()=>{const options=modelOptions();if(!get$4(isRouter))return options.length>0?options[0].model:null;const selectedId=selectedModelId(); -if(selectedId){const model=options.find(m=>m.id===selectedId);if(model)return model.model}if(get$4(conversationModel)){const model=options.find(m=>m.model===get$4(conversationModel));if(model)return model.model}return null}),modelPropsVersion=state$1(0);user_effect(()=>{get$4(activeModelId)&&(modelsStore.getModelProps(get$4(activeModelId))||modelsStore.fetchModelProps(get$4(activeModelId)).then(()=>{update$1(modelPropsVersion)}))});let hasAudioModality=user_derived(()=>get$4(activeModelId)?(get$4( -modelPropsVersion),modelsStore.modelSupportsAudio(get$4(activeModelId))):!1),hasVisionModality=user_derived(()=>get$4(activeModelId)?(get$4(modelPropsVersion),modelsStore.modelSupportsVision(get$4(activeModelId))):!1),hasAudioAttachments=user_derived(()=>uploadedFiles().some(file=>getFileTypeCategory(file.type)===FileTypeCategory.AUDIO)),shouldShowRecordButton=user_derived(()=>get$4(hasAudioModality)&&!hasText()&&!get$4(hasAudioAttachments)&&get$4(currentConfig).autoMicOnEmpty),hasModelSelected=user_derived( -()=>!get$4(isRouter)||!!get$4(conversationModel)||!!selectedModelId()),isSelectedModelInCache=user_derived(()=>{if(!get$4(isRouter))return!0;if(get$4(conversationModel))return modelOptions().some(option2=>option2.model===get$4(conversationModel));const currentModelId=selectedModelId();return currentModelId?modelOptions().some(option2=>option2.id===currentModelId):!1}),submitTooltip=user_derived(()=>get$4(hasModelSelected)?get$4(isSelectedModelInCache)?"":"Selected model is not available, please \ -select another":"Please select a model first"),selectorModelRef=state$1(void 0),isMobile=new IsMobile;function openModelSelector(){get$4(selectorModelRef)?.open()}const chatSettingsDialog=getChatSettingsDialogContext();let hasMcpPromptsSupport=user_derived(()=>{const perChatOverrides=conversationsStore.getAllMcpServerOverrides();return mcpStore.hasPromptsCapability(perChatOverrides)}),hasMcpResourcesSupport=user_derived(()=>{const perChatOverrides=conversationsStore.getAllMcpServerOverrides();return mcpStore. -hasResourcesCapability(perChatOverrides)});var $$exports={openModelSelector},div=root$18(),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{ChatFormActionAttachmentsSheet($$anchor2,{get disabled(){return disabled()},get hasAudioModality(){return get$4(hasAudioModality)},get hasVisionModality(){return get$4(hasVisionModality)},get hasMcpPromptsSupport(){return get$4(hasMcpPromptsSupport)},get hasMcpResourcesSupport(){return get$4(hasMcpResourcesSupport)},get onFileUpload(){return $$props. -onFileUpload},get onSystemPromptClick(){return $$props.onSystemPromptClick},get onMcpPromptClick(){return $$props.onMcpPromptClick},get onMcpResourcesClick(){return $$props.onMcpResourcesClick},onMcpSettingsClick:()=>chatSettingsDialog.open(SETTINGS_SECTION_TITLES.MCP)})},alternate=$$anchor2=>{ChatFormActionAttachmentsDropdown($$anchor2,{get disabled(){return disabled()},get hasAudioModality(){return get$4(hasAudioModality)},get hasVisionModality(){return get$4(hasVisionModality)},get hasMcpPromptsSupport(){ -return get$4(hasMcpPromptsSupport)},get hasMcpResourcesSupport(){return get$4(hasMcpResourcesSupport)},get onFileUpload(){return $$props.onFileUpload},get onSystemPromptClick(){return $$props.onSystemPromptClick},get onMcpPromptClick(){return $$props.onMcpPromptClick},get onMcpResourcesClick(){return $$props.onMcpResourcesClick},onMcpSettingsClick:()=>chatSettingsDialog.open(SETTINGS_SECTION_TITLES.MCP)})};if_block(node2,$$render=>{isMobile.current?$$render(consequent):$$render(alternate,!1)})}var node_1=sibling( -node2,2);McpServersSelector(node_1,{get disabled(){return disabled()},onSettingsClick:()=>chatSettingsDialog.open(SETTINGS_SECTION_TITLES.MCP)}),reset(div_1);var div_2=sibling(div_1,2),node_2=child(div_2);{var consequent_1=$$anchor2=>{{let $0=user_derived(()=>disabled()||get$4(isOffline));bind_this(ModelsSelectorSheet($$anchor2,{get disabled(){return get$4($0)},get currentModel(){return get$4(conversationModel)},forceForegroundText:!0,useGlobalSelection:!0}),$$value=>set$1(selectorModelRef,$$value, -!0),()=>get$4(selectorModelRef))}},alternate_1=$$anchor2=>{{let $0=user_derived(()=>disabled()||get$4(isOffline));bind_this(ModelsSelector($$anchor2,{get disabled(){return get$4($0)},get currentModel(){return get$4(conversationModel)},forceForegroundText:!0,useGlobalSelection:!0}),$$value=>set$1(selectorModelRef,$$value,!0),()=>get$4(selectorModelRef))}};if_block(node_2,$$render=>{isMobile.current?$$render(consequent_1):$$render(alternate_1,!1)})}reset(div_2);var node_3=sibling(div_2,2);{var consequent_2=$$anchor2=>{ -Button($$anchor2,{type:"button",variant:"secondary",get onclick(){return $$props.onStop},class:"group h-8 w-8 rounded-full p-0 hover:bg-destructive/10!",children:($$anchor3,$$slotProps)=>{var fragment_5=root_6$q(),node_4=sibling(first_child(fragment_5),2);Square(node_4,{class:"h-8 w-8 fill-muted-foreground stroke-muted-foreground group-hover:fill-destructive group-hover:stroke-destructive hover:fill-destructive hover:stroke-destructive"}),append($$anchor3,fragment_5)},$$slots:{default:!0}})},alternate_3=$$anchor2=>{ -var fragment_6=comment$2(),node_5=first_child(fragment_6);{var consequent_3=$$anchor3=>{ChatFormActionRecord($$anchor3,{get disabled(){return disabled()},get hasAudioModality(){return get$4(hasAudioModality)},get isLoading(){return isLoading2()},get isRecording(){return isRecording()},get onMicClick(){return $$props.onMicClick}})},alternate_2=$$anchor3=>{{let $0=user_derived(()=>canSend()&&get$4(hasModelSelected)&&get$4(isSelectedModelInCache)),$1=user_derived(()=>get$4(hasModelSelected)&&!get$4( -isSelectedModelInCache));ChatFormActionSubmit($$anchor3,{get canSend(){return get$4($0)},get disabled(){return disabled()},get isLoading(){return isLoading2()},get tooltipLabel(){return get$4(submitTooltip)},get showErrorState(){return get$4($1)}})}};if_block(node_5,$$render=>{get$4(shouldShowRecordButton)?$$render(consequent_3):$$render(alternate_2,!1)},!0)}append($$anchor2,fragment_6)};if_block(node_3,$$render=>{isLoading2()?$$render(consequent_2):$$render(alternate_3,!1)})}return reset(div),template_effect( -()=>set_class(div,1,`flex w-full items-center gap-3 ${className()??""}`)),append($$anchor,div),pop($$exports)}var root_2$L=from_html('<span class="sr-only">Send</span> <!>',1),root_6$p=from_html("<p> </p>"),root_4$l=from_html("<!> <!>",1);function ChatFormActionSubmit($$anchor,$$props){push$1($$props,!0);const submitButton=($$anchor2,$$arg0)=>{let props=derived_safe_equal(()=>fallback($$arg0?.(),()=>({}),!0));{let $0=user_derived(()=>cn$1("h-8 w-8 rounded-full p-0",showErrorState()?"bg-red-400/1\ -0 text-red-400 hover:bg-red-400/20 hover:text-red-400 disabled:opacity-100":""));Button($$anchor2,spread_props({type:"submit",get disabled(){return get$4(isDisabled)},get class(){return get$4($0)}},()=>get$4(props),{children:($$anchor3,$$slotProps)=>{var fragment_1=root_2$L(),node2=sibling(first_child(fragment_1),2);Arrow_up(node2,{class:"h-12 w-12"}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))}};let canSend=prop($$props,"canSend",3,!1),disabled=prop($$props,"disabled",3,!1),isLoading2=prop( -$$props,"isLoading",3,!1),showErrorState=prop($$props,"showErrorState",3,!1),isDisabled=user_derived(()=>!canSend()||disabled()||isLoading2());var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor2=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);component(node_2,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_4=root_4$l(),node_3=first_child(fragment_4);component(node_3,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{ -Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{submitButton($$anchor6)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_6$p(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,$$props.tooltipLabel)),append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})}),append($$anchor2,fragment_3)}, -alternate=$$anchor2=>{submitButton($$anchor2)};if_block(node_1,$$render=>{$$props.tooltipLabel?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment_2),pop()}var root$17=from_html('<input type="file"/>');function ChatFormFileInputInvisible($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),multiple=prop($$props,"multiple",3,!0),fileInputElement;function click(){fileInputElement?.click()}function handleFileSelect(event2){const input=event2.target;input. -files&&$$props.onFileSelect?.(Array.from(input.files))}var $$exports={click},input_1=root$17();return input_1.__change=handleFileSelect,bind_this(input_1,$$value=>fileInputElement=$$value,()=>fileInputElement),template_effect(()=>{input_1.multiple=multiple(),set_class(input_1,1,`hidden ${className()??""}`)}),append($$anchor,input_1),pop($$exports)}delegate(["change"]);var root_2$K=from_html('<p class="text-xs text-muted-foreground">Press <kbd class="rounded bg-muted px-1 py-0.5 font-mono text-xs\ -">Enter</kbd> to send, <kbd class="rounded bg-muted px-1 py-0.5 font-mono text-xs">Shift + Enter</kbd> for new line</p>'),root_3$z=from_html(`<p class="text-xs text-muted-foreground">Press <kbd class="rounded bg-muted px-1 py-0.5 font-mono text-xs"> </kbd> to - send, <kbd class="rounded bg-muted px-1 py-0.5 font-mono text-xs">Enter</kbd> for new line</p>`),root_1$K=from_html("<div><!></div>");function ChatFormHelperText($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),show=prop($$props,"show",3,!0),sendOnEnter=user_derived(()=>config$1().sendOnEnter!==!1),modKey=/Mac|iPhone|iPad|iPod/.test(navigator.platform)?"Cmd":"Ctrl";var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{var div=root_1$K(), -node_1=child(div);{var consequent=$$anchor3=>{var p2=root_2$K();append($$anchor3,p2)},alternate=$$anchor3=>{var p_1=root_3$z(),kbd=sibling(child(p_1)),text2=child(kbd);reset(kbd),next$1(3),reset(p_1),template_effect(()=>set_text(text2,`${modKey} + Enter`)),append($$anchor3,p_1)};if_block(node_1,$$render=>{get$4(sendOnEnter)?$$render(consequent):$$render(alternate,!1)})}reset(div),template_effect(()=>set_class(div,1,`mt-6 items-center justify-center ${className()??""} hidden md:flex`)),append($$anchor2, -div)};if_block(node2,$$render=>{show()&&$$render(consequent_1)})}append($$anchor,fragment),pop()}var root$16=from_html('<div><textarea style="max-height: var(--max-message-height);"></textarea></div>');function ChatFormTextarea($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),placeholder=prop($$props,"placeholder",3,"Ask anything..."),value=prop($$props,"value",15,""),textareaElement;onMount$1(()=>{textareaElement&&(autoResizeTextarea( -textareaElement),textareaElement.focus())});function getElement(){return textareaElement}function focus2(){textareaElement?.focus()}function resetHeight(){textareaElement&&(textareaElement.style.height="1rem")}var $$exports={getElement,focus:focus2,resetHeight},div=root$16(),textarea=child(div);remove_textarea_child(textarea);let classes;return textarea.__keydown=function(...$$args){$$props.onKeydown?.apply(this,$$args)},textarea.__input=event2=>{autoResizeTextarea(event2.currentTarget),$$props. -onInput?.()},bind_this(textarea,$$value=>textareaElement=$$value,()=>textareaElement),reset(div),template_effect(()=>{set_class(div,1,`flex-1 ${className()??""}`),classes=set_class(textarea,1,"text-md min-h-12 w-full resize-none border-0 bg-transparent p-0 leading-6 outline-none placeholder:text-muted-foreground focus-visible:ring-0 focus-visible:ring-offset-0",null,classes,{"cursor-not-allowed":disabled()}),textarea.disabled=disabled(),set_attribute(textarea,"placeholder",placeholder())}),event( -"paste",textarea,function(...$$args){$$props.onPaste?.apply(this,$$args)}),bind_value(textarea,value),append($$anchor,div),pop($$exports)}delegate(["keydown","input"]);const badgeVariants=tv({base:"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden whitespace-nowrap rounded-md border px-2 py-0.5 text-xs font-medium t\ -ransition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3",variants:{variant:{default:"bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent",secondary:"bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent",tertiary:"bg-foreground/15 dark:bg-foreground/10 text-foreground [a&]:hover:bg-foreground/25 border-transparent",destructive:"bg-destructive [a&]:hover:bg-destructive/90 focus-visible:ring-destruct\ -ive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/70 border-transparent text-white",outline:"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"}},defaultVariants:{variant:"default"}});function Badge($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),variant=prop($$props,"variant",3,"default"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","href","class","variant","children"]);var fragment=comment$2(),node2=first_child( -fragment);element$4(node2,()=>$$props.href?"a":"span",!1,($$element,$$anchor2)=>{bind_this($$element,$$value=>ref2($$value),()=>ref2()),attribute_effect($$element,$0=>({"data-slot":"badge",href:$$props.href,class:$0,...restProps}),[()=>cn$1(badgeVariants({variant:variant()}),$$props.class,"backdrop-blur-sm")]);var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3),append($$anchor2,fragment_1)}),append($$anchor,fragment),pop()}var root_2$J=from_html( -'<div class="p-4"><!> <!></div>');function ChatFormPromptPicker($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),isOpen=prop($$props,"isOpen",7,!1),searchQuery=prop($$props,"searchQuery",3,""),prompts=state$1(proxy([])),isLoading2=state$1(!1),selectedPrompt=state$1(null),promptArgs=state$1(proxy({})),selectedIndex=state$1(0),internalSearchQuery=state$1(""),promptError=state$1(null),selectedIndexBeforeArgumentForm=state$1(null),suggestions=proxy({}),loadingSuggestions=proxy( -{}),activeAutocomplete=state$1(null),autocompleteIndex=state$1(0),serverSettingsMap=user_derived(()=>{const servers=mcpStore.getServers(),map2=new SvelteMap;for(const server of servers)map2.set(server.id,server);return map2});user_effect(()=>{isOpen()?(loadPrompts(),set$1(selectedIndex,0)):(set$1(selectedPrompt,null),set$1(promptArgs,{},!0),set$1(promptError,null))}),user_effect(()=>{get$4(filteredPrompts).length>0&&get$4(selectedIndex)>=get$4(filteredPrompts).length&&set$1(selectedIndex,0)});async function loadPrompts(){ -set$1(isLoading2,!0);try{const perChatOverrides=conversationsStore.getAllMcpServerOverrides();if(!await mcpStore.ensureInitialized(perChatOverrides)){set$1(prompts,[],!0);return}set$1(prompts,await mcpStore.getAllPrompts(),!0)}catch(error2){console.error("[ChatFormPromptPicker] Failed to load prompts:",error2),set$1(prompts,[],!0)}finally{set$1(isLoading2,!1)}}function handlePromptClick(prompt){const args=prompt.arguments??[];args.length>0?(set$1(selectedIndexBeforeArgumentForm,get$4(selectedIndex), -!0),set$1(selectedPrompt,prompt,!0),set$1(promptArgs,{},!0),set$1(promptError,null),requestAnimationFrame(()=>{const firstInput=document.querySelector(`#arg-${args[0].name}`);firstInput&&firstInput.focus()})):executePrompt(prompt,{})}async function executePrompt(prompt,args){set$1(promptError,null);const placeholderId=uuid$1(),nonEmptyArgs=Object.fromEntries(Object.entries(args).filter(([,value])=>value.trim()!=="")),argsToPass=Object.keys(nonEmptyArgs).length>0?nonEmptyArgs:void 0;$$props.onPromptLoadStart?.( -placeholderId,prompt,argsToPass),$$props.onClose?.();try{const result=await mcpStore.getPrompt(prompt.serverName,prompt.name,args);$$props.onPromptLoadComplete?.(placeholderId,result)}catch(error2){const errorMessage=error2 instanceof Error?error2.message:"Unknown error executing prompt";$$props.onPromptLoadError?.(placeholderId,errorMessage)}}function handleArgumentSubmit(event2){event2.preventDefault(),get$4(selectedPrompt)&&executePrompt(get$4(selectedPrompt),get$4(promptArgs))}const fetchCompletions=debounce( -async(argName,value)=>{if(!get$4(selectedPrompt)||value.length<1){suggestions[argName]=[];return}loadingSuggestions[argName]=!0;try{const result=await mcpStore.getPromptCompletions(get$4(selectedPrompt).serverName,get$4(selectedPrompt).name,argName,value);if(result&&result.values.length>0){const filteredValues=result.values.filter(v=>v.trim()!=="");filteredValues.length>0?(suggestions[argName]=filteredValues,set$1(activeAutocomplete,argName,!0),set$1(autocompleteIndex,0)):suggestions[argName]=[]}else -suggestions[argName]=[]}catch(error2){console.error("[ChatFormPromptPicker] Failed to fetch completions:",error2),suggestions[argName]=[]}finally{loadingSuggestions[argName]=!1}},200);function handleArgInput(argName,value){get$4(promptArgs)[argName]=value,fetchCompletions(argName,value)}function selectSuggestion(argName,value){get$4(promptArgs)[argName]=value,suggestions[argName]=[],set$1(activeAutocomplete,null)}function handleArgKeydown(event2,argName){const argSuggestions=suggestions[argName]?? -[];if(event2.key===KeyboardKey.ESCAPE){event2.preventDefault(),event2.stopPropagation(),handleCancelArgumentForm();return}argSuggestions.length===0||get$4(activeAutocomplete)!==argName||(event2.key===KeyboardKey.ARROW_DOWN?(event2.preventDefault(),set$1(autocompleteIndex,Math.min(get$4(autocompleteIndex)+1,argSuggestions.length-1),!0)):event2.key===KeyboardKey.ARROW_UP?(event2.preventDefault(),set$1(autocompleteIndex,Math.max(get$4(autocompleteIndex)-1,0),!0)):event2.key===KeyboardKey.ENTER&&argSuggestions[get$4( -autocompleteIndex)]&&(event2.preventDefault(),event2.stopPropagation(),selectSuggestion(argName,argSuggestions[get$4(autocompleteIndex)])))}function handleArgBlur(argName){setTimeout(()=>{get$4(activeAutocomplete)===argName&&(suggestions[argName]=[],set$1(activeAutocomplete,null))},150)}function handleArgFocus(argName){(suggestions[argName]?.length??0)>0&&set$1(activeAutocomplete,argName,!0)}function handleCancelArgumentForm(){get$4(selectedIndexBeforeArgumentForm)!==null&&(set$1(selectedIndex,get$4( -selectedIndexBeforeArgumentForm),!0),set$1(selectedIndexBeforeArgumentForm,null)),set$1(selectedPrompt,null),set$1(promptArgs,{},!0),set$1(promptError,null)}function handleKeydown(event2){return isOpen()?event2.key===KeyboardKey.ESCAPE?(event2.preventDefault(),get$4(selectedPrompt)?handleCancelArgumentForm():$$props.onClose?.(),!0):event2.key===KeyboardKey.ARROW_DOWN?(event2.preventDefault(),get$4(filteredPrompts).length>0&&set$1(selectedIndex,(get$4(selectedIndex)+1)%get$4(filteredPrompts).length), -!0):event2.key===KeyboardKey.ARROW_UP?(event2.preventDefault(),get$4(filteredPrompts).length>0&&set$1(selectedIndex,get$4(selectedIndex)===0?get$4(filteredPrompts).length-1:get$4(selectedIndex)-1,!0),!0):event2.key===KeyboardKey.ENTER&&!get$4(selectedPrompt)?(event2.preventDefault(),get$4(filteredPrompts)[get$4(selectedIndex)]&&handlePromptClick(get$4(filteredPrompts)[get$4(selectedIndex)]),!0):!1:!1}let filteredPrompts=user_derived(()=>{const sortedServers=mcpStore.getServersSorted(),serverOrderMap=new Map( -sortedServers.map((server,index2)=>[server.id,index2])),sortedPrompts=[...get$4(prompts)].sort((a,b)=>{const orderA=serverOrderMap.get(a.serverName)??Number.MAX_SAFE_INTEGER,orderB=serverOrderMap.get(b.serverName)??Number.MAX_SAFE_INTEGER;return orderA-orderB}),query=(searchQuery()||get$4(internalSearchQuery)).toLowerCase();return query?sortedPrompts.filter(prompt=>prompt.name.toLowerCase().includes(query)||prompt.title?.toLowerCase().includes(query)||prompt.description?.toLowerCase().includes(query)): -sortedPrompts}),showSearchInput=user_derived(()=>get$4(prompts).length>3);var $$exports={handleKeydown};return ChatFormPickerPopover($$anchor,{get class(){return className()},srLabel:"Open prompt picker",get onClose(){return $$props.onClose},onKeydown:handleKeydown,get isOpen(){return isOpen()},set isOpen($$value){isOpen($$value)},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent_1=$$anchor3=>{const prompt=user_derived(()=>get$4(selectedPrompt)), -server=user_derived(()=>get$4(serverSettingsMap).get(get$4(prompt).serverName)),serverLabel=user_derived(()=>get$4(server)?mcpStore.getServerLabel(get$4(server)):get$4(prompt).serverName);var div=root_2$J(),node_1=child(div);{const titleExtra=$$anchor4=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);{var consequent=$$anchor5=>{Badge($$anchor5,{variant:"secondary",children:($$anchor6,$$slotProps2)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,`${get$4(prompt).arguments. -length??""} arg${get$4(prompt).arguments.length>1?"s":""}`)),append($$anchor6,text2)},$$slots:{default:!0}})};if_block(node_2,$$render=>{get$4(prompt).arguments?.length&&$$render(consequent)})}append($$anchor4,fragment_2)};let $0=user_derived(()=>get$4(prompt).title||get$4(prompt).name);ChatFormPickerItemHeader(node_1,{get server(){return get$4(server)},get serverLabel(){return get$4(serverLabel)},get title(){return get$4($0)},get description(){return get$4(prompt).description},titleExtra,$$slots:{ -titleExtra:!0}})}var node_3=sibling(node_1,2);ChatFormPromptPickerArgumentForm(node_3,{get prompt(){return get$4(selectedPrompt)},get promptArgs(){return get$4(promptArgs)},get suggestions(){return suggestions},get loadingSuggestions(){return loadingSuggestions},get activeAutocomplete(){return get$4(activeAutocomplete)},get autocompleteIndex(){return get$4(autocompleteIndex)},get promptError(){return get$4(promptError)},onArgInput:handleArgInput,onArgKeydown:handleArgKeydown,onArgBlur:handleArgBlur, -onArgFocus:handleArgFocus,onSelectSuggestion:selectSuggestion,onSubmit:handleArgumentSubmit,onCancel:handleCancelArgumentForm}),reset(div),append($$anchor3,div)},alternate=$$anchor3=>{ChatFormPickerList($$anchor3,{get items(){return get$4(filteredPrompts)},get isLoading(){return get$4(isLoading2)},get selectedIndex(){return get$4(selectedIndex)},get showSearchInput(){return get$4(showSearchInput)},searchPlaceholder:"Search prompts...",emptyMessage:"No MCP prompts available",itemKey:prompt=>prompt. -serverName+":"+prompt.name,get searchQuery(){return get$4(internalSearchQuery)},set searchQuery($$value){set$1(internalSearchQuery,$$value,!0)},item:($$anchor4,prompt=noop$3,index2=noop$3,isSelected=noop$3)=>{const server=user_derived(()=>get$4(serverSettingsMap).get(prompt().serverName)),serverLabel=user_derived(()=>get$4(server)?mcpStore.getServerLabel(get$4(server)):prompt().serverName);ChatFormPickerListItem($$anchor4,{get dataIndex(){return index2()},get isSelected(){return isSelected()},onClick:()=>handlePromptClick( -prompt()),children:($$anchor5,$$slotProps2)=>{{const titleExtra=$$anchor6=>{var fragment_8=comment$2(),node_4=first_child(fragment_8);{var consequent_2=$$anchor7=>{Badge($$anchor7,{variant:"secondary",children:($$anchor8,$$slotProps3)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,`${prompt().arguments.length??""} arg${prompt().arguments.length>1?"s":""}`)),append($$anchor8,text_1)},$$slots:{default:!0}})};if_block(node_4,$$render=>{prompt().arguments?.length&&$$render(consequent_2)})} -append($$anchor6,fragment_8)};let $0=user_derived(()=>prompt().title||prompt().name);ChatFormPickerItemHeader($$anchor5,{get server(){return get$4(server)},get serverLabel(){return get$4(serverLabel)},get title(){return get$4($0)},get description(){return prompt().description},titleExtra,$$slots:{titleExtra:!0}})}},$$slots:{default:!0}})},skeleton:$$anchor4=>{ChatFormPickerListItemSkeleton($$anchor4,{titleWidth:"w-32",showBadge:!0})},$$slots:{item:!0,skeleton:!0}})};if_block(node2,$$render=>{get$4( -selectedPrompt)?$$render(consequent_1):$$render(alternate,!1)})}append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop($$exports)}const linear=x=>x;function cubic_out(t){const f=t-1;return f*f*f+1}function split_css_unit(value){const split=typeof value=="string"&&value.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);return split?[parseFloat(split[1]),split[2]||"px"]:[value,"px"]}function fade(node2,{delay=0,duration:duration2=400,easing=linear}={}){const o=+getComputedStyle(node2).opacity;return{delay,duration:duration2, -easing,css:t=>`opacity: ${t*o}`}}function fly(node2,{delay=0,duration:duration2=400,easing=cubic_out,x=0,y=0,opacity=0}={}){const style2=getComputedStyle(node2),target_opacity=+style2.opacity,transform2=style2.transform==="none"?"":style2.transform,od=target_opacity*(1-opacity),[x_value,x_unit]=split_css_unit(x),[y_value,y_unit]=split_css_unit(y);return{delay,duration:duration2,easing,css:(t,u)=>` - transform: ${transform2} translate(${(1-t)*x_value}${x_unit}, ${(1-t)*y_value}${y_unit}); - opacity: ${target_opacity-od*u}`}}function slide(node2,{delay=0,duration:duration2=400,easing=cubic_out,axis="y"}={}){const style2=getComputedStyle(node2),opacity=+style2.opacity,primary_property=axis==="y"?"height":"width",primary_property_value=parseFloat(style2[primary_property]),secondary_properties=axis==="y"?["top","bottom"]:["left","right"],capitalized_secondary_properties=secondary_properties.map(e=>`${e[0].toUpperCase()}${e.slice(1)}`),padding_start_value=parseFloat(style2[`padding${capitalized_secondary_properties[0]}`]), -padding_end_value=parseFloat(style2[`padding${capitalized_secondary_properties[1]}`]),margin_start_value=parseFloat(style2[`margin${capitalized_secondary_properties[0]}`]),margin_end_value=parseFloat(style2[`margin${capitalized_secondary_properties[1]}`]),border_width_start_value=parseFloat(style2[`border${capitalized_secondary_properties[0]}Width`]),border_width_end_value=parseFloat(style2[`border${capitalized_secondary_properties[1]}Width`]);return{delay,duration:duration2,easing,css:t=>`overf\ -low: hidden;opacity: ${Math.min(t*20,1)*opacity};${primary_property}: ${t*primary_property_value}px;padding-${secondary_properties[0]}: ${t*padding_start_value}px;padding-${secondary_properties[1]}: ${t*padding_end_value}px;margin-${secondary_properties[0]}: ${t*margin_start_value}px;margin-${secondary_properties[1]}: ${t*margin_end_value}px;border-${secondary_properties[0]}-width: ${t*border_width_start_value}px;border-${secondary_properties[1]}-width: ${t*border_width_end_value}px;min-${primary_property}\ -: 0`}}function scale(node2,{delay=0,duration:duration2=400,easing=cubic_out,start:start2=0,opacity=0}={}){const style2=getComputedStyle(node2),target_opacity=+style2.opacity,transform2=style2.transform==="none"?"":style2.transform,sd=1-start2,od=target_opacity*(1-opacity);return{delay,duration:duration2,easing,css:(_t,u)=>` - transform: ${transform2} scale(${1-sd*u}); - opacity: ${target_opacity-od*u} - `}}var root_1$J=from_html("<input/>"),root_2$I=from_html("<input/>");function Input($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),value=prop($$props,"value",15),files=prop($$props,"files",15),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","value","type","files","class"]);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var input=root_1$J();attribute_effect(input,$0=>({"data-slot":"input",class:$0,type:"file",...restProps}), -[()=>cn$1("flex h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 pt-1.5 text-sm font-medium shadow-xs ring-offset-background transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30","focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","aria-invalid:border-destructive aria-invalid:ring-destructive/20\ - dark:aria-invalid:ring-destructive/40",$$props.class)],void 0,void 0,void 0,!0),bind_this(input,$$value=>ref2($$value),()=>ref2()),bind_files(input,files),bind_value(input,value),append($$anchor2,input)},alternate=$$anchor2=>{var input_1=root_2$I();attribute_effect(input_1,$0=>({"data-slot":"input",class:$0,style:"backdrop-filter: blur(0.5rem);",type:$$props.type,...restProps}),[()=>cn$1("flex h-9 w-full min-w-0 rounded-md border border-input bg-background px-3 py-1 text-base shadow-xs ring-off\ -set-background transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30","focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",$$props.class)],void 0,void 0,void 0,!0),bind_this(input_1,$$value=>ref2($$value),()=>ref2()), -bind_value(input_1,value),append($$anchor2,input_1)};if_block(node2,$$render=>{$$props.type==="file"?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}function Label($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("flex items-center gap-2 text-sm leading-none font-medium select-none g\ -roup-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",$$props.class));component(node2,()=>Label$1,($$anchor2,LabelPrimitive_Root)=>{LabelPrimitive_Root($$anchor2,spread_props({"data-slot":"label",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_2$H=from_html('<span class="text-destructive">*</span>'),root_3$y=from_html( -'<span class="text-xs text-muted-foreground/50">...</span>'),root_1$I=from_html("<span> <!></span> <!>",1),root_5$q=from_html('<button type="button"> </button>'),root_4$k=from_html('<div class="absolute top-full right-0 left-0 z-10 mt-1 max-h-32 overflow-y-auto rounded-lg border border-border/50 bg-background shadow-lg"></div>'),root$15=from_html('<div class="relative grid gap-1"><!> <!> <!></div>');function ChatFormPromptPickerArgumentInput($$anchor,$$props){push$1($$props,!0);let value=prop($$props, -"value",3,""),suggestions=prop($$props,"suggestions",19,()=>[]),isLoadingSuggestions=prop($$props,"isLoadingSuggestions",3,!1),isAutocompleteActive=prop($$props,"isAutocompleteActive",3,!1),autocompleteIndex=prop($$props,"autocompleteIndex",3,0);var div=root$15(),node2=child(div);Label(node2,{get for(){return`arg-${$$props.argument.name??""}`},class:"mb-1 text-muted-foreground",children:($$anchor2,$$slotProps)=>{var fragment=root_1$I(),span=first_child(fragment),text2=child(span),node_1=sibling( -text2);{var consequent=$$anchor3=>{var span_1=root_2$H();append($$anchor3,span_1)};if_block(node_1,$$render=>{$$props.argument.required&&$$render(consequent)})}reset(span);var node_2=sibling(span,2);{var consequent_1=$$anchor3=>{var span_2=root_3$y();append($$anchor3,span_2)};if_block(node_2,$$render=>{isLoadingSuggestions()&&$$render(consequent_1)})}template_effect(()=>set_text(text2,`${$$props.argument.name??""} `)),append($$anchor2,fragment)},$$slots:{default:!0}});var node_3=sibling(node2,2); -{let $0=user_derived(()=>$$props.argument.description||$$props.argument.name);Input(node_3,{get id(){return`arg-${$$props.argument.name??""}`},type:"text",get value(){return value()},oninput:e=>$$props.onInput(e.currentTarget.value),get onkeydown(){return $$props.onKeydown},get onblur(){return $$props.onBlur},get onfocus(){return $$props.onFocus},get placeholder(){return get$4($0)},get required(){return $$props.argument.required},autocomplete:"off"})}var node_4=sibling(node_3,2);{var consequent_2=$$anchor2=>{ -var div_1=root_4$k();each(div_1,22,suggestions,suggestion=>suggestion,($$anchor3,suggestion,i)=>{var button=root_5$q();button.__mousedown=()=>$$props.onSelectSuggestion(suggestion);var text_1=child(button,!0);reset(button),template_effect(()=>{set_class(button,1,`w-full px-3 py-1.5 text-left text-sm hover:bg-accent ${get$4(i)===autocompleteIndex()?"bg-accent":""}`),set_text(text_1,suggestion)}),append($$anchor3,button)}),reset(div_1),transition(3,div_1,()=>fly,()=>({y:-5,duration:100})),append($$anchor2, -div_1)};if_block(node_4,$$render=>{isAutocompleteActive()&&suggestions().length>0&&$$render(consequent_2)})}reset(div),append($$anchor,div),pop()}delegate(["mousedown"]);var root_2$G=from_html('<div class="flex items-start gap-2 rounded-lg border border-destructive/50 bg-destructive/10 px-3 py-2 text-sm text-destructive" role="alert"><span class="shrink-0">⚠</span> <span> </span></div>'),root$14=from_html('<form class="space-y-3 pt-4"><!> <!> <div class="mt-8 flex justify-end gap-2"><!> <!></d\ -iv></form>');function ChatFormPromptPickerArgumentForm($$anchor,$$props){push$1($$props,!0);var form=root$14(),node2=child(form);each(node2,17,()=>$$props.prompt.arguments??[],arg=>arg.name,($$anchor2,arg)=>{{let $0=user_derived(()=>$$props.promptArgs[get$4(arg).name]??""),$1=user_derived(()=>$$props.suggestions[get$4(arg).name]??[]),$2=user_derived(()=>$$props.loadingSuggestions[get$4(arg).name]??!1),$3=user_derived(()=>$$props.activeAutocomplete===get$4(arg).name),$4=user_derived(()=>$$props.activeAutocomplete=== -get$4(arg).name?$$props.autocompleteIndex:0);ChatFormPromptPickerArgumentInput($$anchor2,{get argument(){return get$4(arg)},get value(){return get$4($0)},get suggestions(){return get$4($1)},get isLoadingSuggestions(){return get$4($2)},get isAutocompleteActive(){return get$4($3)},get autocompleteIndex(){return get$4($4)},onInput:value=>$$props.onArgInput(get$4(arg).name,value),onKeydown:e=>$$props.onArgKeydown(e,get$4(arg).name),onBlur:()=>$$props.onArgBlur(get$4(arg).name),onFocus:()=>$$props.onArgFocus( -get$4(arg).name),onSelectSuggestion:value=>$$props.onSelectSuggestion(get$4(arg).name,value)})}});var node_1=sibling(node2,2);{var consequent=$$anchor2=>{var div=root_2$G(),span=sibling(child(div),2),text2=child(span,!0);reset(span),reset(div),template_effect(()=>set_text(text2,$$props.promptError)),append($$anchor2,div)};if_block(node_1,$$render=>{$$props.promptError&&$$render(consequent)})}var div_1=sibling(node_1,2),node_2=child(div_1);Button(node_2,{type:"button",size:"sm",get onclick(){return $$props. -onCancel},variant:"secondary",children:($$anchor2,$$slotProps)=>{next$1();var text_1=text$8("Cancel");append($$anchor2,text_1)},$$slots:{default:!0}});var node_3=sibling(node_2,2);Button(node_3,{size:"sm",type:"submit",children:($$anchor2,$$slotProps)=>{next$1();var text_2=text$8("Use Prompt");append($$anchor2,text_2)},$$slots:{default:!0}}),reset(div_1),reset(form),event("submit",form,function(...$$args){$$props.onSubmit?.apply(this,$$args)}),append($$anchor,form),pop()}function Popover($$anchor,$$props){ -push$1($$props,!0);let open2=prop($$props,"open",15,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","open"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Popover$1,($$anchor2,PopoverPrimitive_Root)=>{PopoverPrimitive_Root($$anchor2,spread_props(()=>restProps,{get open(){return open2()},set open($$value){open2($$value)}}))}),append($$anchor,fragment),pop()}function Popover_portal($$anchor,$$props){let restProps=rest_props($$props,["$$slots","$$events", -"$$legacy"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,PopoverPrimitive_Portal)=>{PopoverPrimitive_Portal($$anchor2,spread_props(()=>restProps))}),append($$anchor,fragment)}function Popover_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props,"sideOffset",3,4),align=prop($$props,"align",3,"center"),collisionPadding=prop($$props,"collisionPadding",3,8),avoidCollisions=prop($$props,"avoidCollisi\ -ons",3,!0),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","sideOffset","side","align","collisionPadding","avoidCollisions","portalProps"]);Popover_portal($$anchor,spread_props(()=>$$props.portalProps,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{let $0=user_derived(()=>cn$1("z-50 w-72 origin-(--bits-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[\ -side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",$$props.class));component(node2,()=>Popover_content$1,($$anchor3,PopoverPrimitive_Content)=>{PopoverPrimitive_Content($$anchor3,spread_props({"data-slot":"popover-conten\ -t",get sideOffset(){return sideOffset()},get side(){return $$props.side},get align(){return align()},get collisionPadding(){return collisionPadding()},get avoidCollisions(){return avoidCollisions()},get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Popover_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$s\ -lots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("",$$props.class));component(node2,()=>Popover_trigger$1,($$anchor2,PopoverPrimitive_Trigger)=>{PopoverPrimitive_Trigger($$anchor2,spread_props({"data-slot":"popover-trigger",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_2$F=from_html('<span class="sr-only"> </span>'),root_1$H=from_html( -"<!> <!>",1);function ChatFormPickerPopover($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),isOpen=prop($$props,"isOpen",15,!1),srLabel=prop($$props,"srLabel",3,"Open picker");var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Popover,($$anchor2,Popover_Root)=>{Popover_Root($$anchor2,{onOpenChange:open2=>{open2||$$props.onClose?.()},get open(){return isOpen()},set open($$value){isOpen($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$H(), -node_1=first_child(fragment_1);component(node_1,()=>Popover_trigger,($$anchor4,Popover_Trigger)=>{Popover_Trigger($$anchor4,{class:"pointer-events-none absolute inset-0 opacity-0",children:($$anchor5,$$slotProps2)=>{var span=root_2$F(),text2=child(span,!0);reset(span),template_effect(()=>set_text(text2,srLabel())),append($$anchor5,span)},$$slots:{default:!0}})});var node_2=sibling(node_1,2);component(node_2,()=>Popover_content,($$anchor4,Popover_Content)=>{Popover_Content($$anchor4,{side:"top",align:"\ -start",sideOffset:12,get class(){return`w-[var(--bits-popover-anchor-width)] max-w-none rounded-xl border-border/50 p-0 shadow-xl ${className()??""}`},get onkeydown(){return $$props.onKeydown},onOpenAutoFocus:e=>e.preventDefault(),children:($$anchor5,$$slotProps2)=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()} -var root_1$G=from_html("<!> <!>",1);function Scroll_area_scrollbar($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),orientation=prop($$props,"orientation",3,"vertical"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","orientation","children"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("flex touch-none p-px transition-colors select-none",orientation()==="vertical"&&"h-full w-2.5 border-l border-l-transpa\ -rent",orientation()==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",$$props.class));component(node2,()=>Scroll_area_scrollbar$1,($$anchor2,ScrollAreaPrimitive_Scrollbar)=>{ScrollAreaPrimitive_Scrollbar($$anchor2,spread_props({"data-slot":"scroll-area-scrollbar",get orientation(){return orientation()},get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$G(),node_1=first_child( -fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);component(node_2,()=>Scroll_area_thumb,($$anchor4,ScrollAreaPrimitive_Thumb)=>{ScrollAreaPrimitive_Thumb($$anchor4,{"data-slot":"scroll-area-thumb",class:"relative flex-1 rounded-full bg-border"})}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_1$F=from_html("<!> <!> <!> <!>",1);function Scroll_area($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"re\ -f",15,null),orientation=prop($$props,"orientation",3,"vertical"),scrollbarXClasses=prop($$props,"scrollbarXClasses",3,""),scrollbarYClasses=prop($$props,"scrollbarYClasses",3,""),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","orientation","scrollbarXClasses","scrollbarYClasses","children"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("relative",$$props.class));component(node2,()=>Scroll_area$1,($$anchor2,ScrollAreaPrimitive_Root)=>{ -ScrollAreaPrimitive_Root($$anchor2,spread_props({"data-slot":"scroll-area",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$F(),node_1=first_child(fragment_1);component(node_1,()=>Scroll_area_viewport,($$anchor4,ScrollAreaPrimitive_Viewport)=>{ScrollAreaPrimitive_Viewport($$anchor4,{"data-slot":"scroll-area-viewport",class:"size-full rounded-[inherit] ring-ring/10 outline-ring/50 transi\ -tion-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1 dark:ring-ring/20 dark:outline-ring/40",children:($$anchor5,$$slotProps2)=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);snippet(node_2,()=>$$props.children??noop$3),append($$anchor5,fragment_2)},$$slots:{default:!0}})});var node_3=sibling(node_1,2);{var consequent=$$anchor4=>{Scroll_area_scrollbar($$anchor4,{orientation:"vertical",get class(){return scrollbarYClasses()}})};if_block(node_3,$$render=>{(orientation()=== -"vertical"||orientation()==="both")&&$$render(consequent)})}var node_4=sibling(node_3,2);{var consequent_1=$$anchor4=>{Scroll_area_scrollbar($$anchor4,{orientation:"horizontal",get class(){return scrollbarXClasses()}})};if_block(node_4,$$render=>{(orientation()==="horizontal"||orientation()==="both")&&$$render(consequent_1)})}var node_5=sibling(node_4,2);component(node_5,()=>Scroll_area_corner,($$anchor4,ScrollAreaPrimitive_Corner)=>{ScrollAreaPrimitive_Corner($$anchor4,{})}),append($$anchor3,fragment_1)}, -$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_2$E=from_html('<div class="absolute top-0 right-0 left-0 z-10 p-2 pb-0"><!></div>'),root_6$o=from_html('<div class="py-6 text-center text-sm text-muted-foreground"> </div>'),root_1$E=from_html("<!> <div><!></div> <!>",1);function ChatFormPickerList($$anchor,$$props){push$1($$props,!0);let searchQuery=prop($$props,"searchQuery",15),searchPlaceholder=prop($$props,"searchPlaceholder",3,"Search..."),emptyMessage=prop($$props,"emptyMe\ -ssage",3,"No items available"),listContainer=state$1(null);user_effect(()=>{if(get$4(listContainer)&&$$props.selectedIndex>=0&&$$props.selectedIndex<$$props.items.length){const selectedElement=get$4(listContainer).querySelector(`[data-picker-index="${$$props.selectedIndex}"]`);selectedElement&&selectedElement.scrollIntoView({behavior:"smooth",block:"center",inline:"nearest"})}}),Scroll_area($$anchor,{children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$E(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{ -var div=root_2$E(),node_1=child(div);SearchInput(node_1,{get placeholder(){return searchPlaceholder()},get value(){return searchQuery()},set value($$value){searchQuery($$value)}}),reset(div),append($$anchor3,div)};if_block(node2,$$render=>{$$props.showSearchInput&&$$render(consequent)})}var div_1=sibling(node2,2);let classes;var node_2=child(div_1);{var consequent_2=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);{var consequent_1=$$anchor4=>{var fragment_3=comment$2(),node_4=first_child( -fragment_3);snippet(node_4,()=>$$props.skeleton),append($$anchor4,fragment_3)};if_block(node_3,$$render=>{$$props.skeleton&&$$render(consequent_1)})}append($$anchor3,fragment_2)},alternate_1=$$anchor3=>{var fragment_4=comment$2(),node_5=first_child(fragment_4);{var consequent_3=$$anchor4=>{var div_2=root_6$o(),text2=child(div_2,!0);reset(div_2),template_effect(()=>set_text(text2,emptyMessage())),append($$anchor4,div_2)},alternate=$$anchor4=>{var fragment_5=comment$2(),node_6=first_child(fragment_5); -each(node_6,19,()=>$$props.items,(itemData,index2)=>$$props.itemKey(itemData,index2),($$anchor5,itemData,index2)=>{var fragment_6=comment$2(),node_7=first_child(fragment_6);snippet(node_7,()=>$$props.item,()=>get$4(itemData),()=>get$4(index2),()=>get$4(index2)===$$props.selectedIndex),append($$anchor5,fragment_6)}),append($$anchor4,fragment_5)};if_block(node_5,$$render=>{$$props.items.length===0?$$render(consequent_3):$$render(alternate,!1)},!0)}append($$anchor3,fragment_4)};if_block(node_2,$$render=>{ -$$props.isLoading?$$render(consequent_2):$$render(alternate_1,!1)})}reset(div_1),bind_this(div_1,$$value=>set$1(listContainer,$$value),()=>get$4(listContainer));var node_8=sibling(div_1,2);{var consequent_4=$$anchor3=>{var fragment_7=comment$2(),node_9=first_child(fragment_7);snippet(node_9,()=>$$props.footer),append($$anchor3,fragment_7)};if_block(node_8,$$render=>{$$props.footer&&$$render(consequent_4)})}template_effect(()=>classes=set_class(div_1,1,`${CHAT_FORM_POPOVER_MAX_HEIGHT} p-2`,null,classes, -{"pt-13":$$props.showSearchInput})),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}var root$13=from_html('<button type="button"><!></button>');function ChatFormPickerListItem($$anchor,$$props){let isSelected=prop($$props,"isSelected",3,!1);var button=root$13();button.__click=function(...$$args){$$props.onClick?.apply(this,$$args)};var node2=child(button);snippet(node2,()=>$$props.children),reset(button),template_effect(()=>{set_attribute(button,"data-picker-index",$$props.dataIndex), -set_class(button,1,`flex w-full cursor-pointer items-start gap-3 rounded-lg px-3 py-2 text-left hover:bg-accent/50 ${isSelected()?"bg-accent/50":""}`)}),append($$anchor,button)}delegate(["click"]);var root_1$D=from_html('<img alt="" class="h-3 w-3 shrink-0 rounded-sm"/>'),root_3$x=from_html('<p class="mt-0.5 truncate text-sm text-muted-foreground"> </p>'),root$12=from_html('<div class="min-w-0 flex-1"><div class="mb-0.5 flex items-center gap-1.5 text-xs text-muted-foreground"><!> <span> </span><\ -/div> <div class="flex items-center gap-2"><span class="font-medium"> </span> <!></div> <!> <!></div>');function ChatFormPickerItemHeader($$anchor,$$props){push$1($$props,!0);let faviconUrl=user_derived(()=>$$props.server?mcpStore.getServerFavicon($$props.server.id):null);var div=root$12(),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{var img=root_1$D();template_effect(()=>set_attribute(img,"src",get$4(faviconUrl))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events( -img),append($$anchor2,img)};if_block(node2,$$render=>{get$4(faviconUrl)&&$$render(consequent)})}var span=sibling(node2,2),text2=child(span,!0);reset(span),reset(div_1);var div_2=sibling(div_1,2),span_1=child(div_2),text_1=child(span_1,!0);reset(span_1);var node_1=sibling(span_1,2);{var consequent_1=$$anchor2=>{var fragment=comment$2(),node_2=first_child(fragment);snippet(node_2,()=>$$props.titleExtra),append($$anchor2,fragment)};if_block(node_1,$$render=>{$$props.titleExtra&&$$render(consequent_1)})} -reset(div_2);var node_3=sibling(div_2,2);{var consequent_2=$$anchor2=>{var p2=root_3$x(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,$$props.description)),append($$anchor2,p2)};if_block(node_3,$$render=>{$$props.description&&$$render(consequent_2)})}var node_4=sibling(node_3,2);{var consequent_3=$$anchor2=>{var fragment_1=comment$2(),node_5=first_child(fragment_1);snippet(node_5,()=>$$props.subtitle),append($$anchor2,fragment_1)};if_block(node_4,$$render=>{$$props.subtitle&& -$$render(consequent_3)})}reset(div),template_effect(()=>{set_text(text2,$$props.serverLabel),set_text(text_1,$$props.title)}),append($$anchor,div),pop()}var root_1$C=from_html('<div class="h-4 w-12 animate-pulse rounded-full bg-muted"></div>'),root$11=from_html('<div class="flex w-full items-start gap-3 rounded-lg px-3 py-2"><div class="min-w-0 flex-1 space-y-2"><div class="mb-2 flex items-center gap-1.5"><div class="h-3 w-3 shrink-0 animate-pulse rounded-sm bg-muted"></div> <div class="h-3 w-24\ - animate-pulse rounded bg-muted"></div></div> <div class="flex items-center gap-2"><div></div> <!></div> <div class="h-3 w-full animate-pulse rounded bg-muted"></div></div></div>');function ChatFormPickerListItemSkeleton($$anchor,$$props){let titleWidth=prop($$props,"titleWidth",3,"w-48"),showBadge=prop($$props,"showBadge",3,!1);var div=root$11(),div_1=child(div),div_2=sibling(child(div_1),2),div_3=child(div_2),node2=sibling(div_3,2);{var consequent=$$anchor2=>{var div_4=root_1$C();append($$anchor2, -div_4)};if_block(node2,$$render=>{showBadge()&&$$render(consequent)})}reset(div_2),next$1(2),reset(div_1),reset(div),template_effect(()=>set_class(div_3,1,`h-4 ${titleWidth()??""} animate-pulse rounded bg-muted`)),append($$anchor,div)}var root_5$p=from_html('<span class="inline-flex items-center rounded-full bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary">attached</span>'),root_6$n=from_html('<p class="mt-0.5 truncate text-xs text-muted-foreground/60"> </p>'),root_10$d=from_html( -"<!> Browse all",1);function ChatFormResourcePicker($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),isOpen=prop($$props,"isOpen",7,!1),searchQuery=prop($$props,"searchQuery",3,""),resources=state$1(proxy([])),isLoading2=state$1(!1),selectedIndex=state$1(0),internalSearchQuery=state$1(""),serverSettingsMap=user_derived(()=>{const servers=mcpStore.getServers(),map2=new SvelteMap;for(const server of servers)map2.set(server.id,server);return map2});user_effect(()=>{isOpen()&& -(loadResources(),set$1(selectedIndex,0))}),user_effect(()=>{get$4(filteredResources).length>0&&get$4(selectedIndex)>=get$4(filteredResources).length&&set$1(selectedIndex,0)});async function loadResources(){set$1(isLoading2,!0);try{const perChatOverrides=conversationsStore.getAllMcpServerOverrides();if(!await mcpStore.ensureInitialized(perChatOverrides)){set$1(resources,[],!0);return}await mcpStore.fetchAllResources(),set$1(resources,mcpResourceStore.getAllResourceInfos(),!0)}catch(error2){console. -error("[ChatFormResourcePicker] Failed to load resources:",error2),set$1(resources,[],!0)}finally{set$1(isLoading2,!1)}}function handleResourceClick(resource){mcpStore.attachResource(resource.uri),$$props.onResourceSelect?.(resource),$$props.onClose?.()}function isResourceAttached(uri2){return mcpResourceStore.isAttached(uri2)}function handleKeydown(event2){return isOpen()?event2.key===KeyboardKey.ESCAPE?(event2.preventDefault(),$$props.onClose?.(),!0):event2.key===KeyboardKey.ARROW_DOWN?(event2. -preventDefault(),get$4(filteredResources).length>0&&set$1(selectedIndex,(get$4(selectedIndex)+1)%get$4(filteredResources).length),!0):event2.key===KeyboardKey.ARROW_UP?(event2.preventDefault(),get$4(filteredResources).length>0&&set$1(selectedIndex,get$4(selectedIndex)===0?get$4(filteredResources).length-1:get$4(selectedIndex)-1,!0),!0):event2.key===KeyboardKey.ENTER?(event2.preventDefault(),get$4(filteredResources)[get$4(selectedIndex)]&&handleResourceClick(get$4(filteredResources)[get$4(selectedIndex)]), -!0):!1:!1}let filteredResources=user_derived(()=>{const sortedServers=mcpStore.getServersSorted(),serverOrderMap=new Map(sortedServers.map((server,index2)=>[server.id,index2])),sortedResources=[...get$4(resources)].sort((a,b)=>{const orderA=serverOrderMap.get(a.serverName)??Number.MAX_SAFE_INTEGER,orderB=serverOrderMap.get(b.serverName)??Number.MAX_SAFE_INTEGER;return orderA-orderB}),query=(searchQuery()||get$4(internalSearchQuery)).toLowerCase();return query?sortedResources.filter(resource=>resource. -name.toLowerCase().includes(query)||resource.title?.toLowerCase().includes(query)||resource.description?.toLowerCase().includes(query)||resource.uri.toLowerCase().includes(query)):sortedResources}),showSearchInput=user_derived(()=>get$4(resources).length>3);var $$exports={handleKeydown};return ChatFormPickerPopover($$anchor,{get class(){return className()},srLabel:"Open resource picker",get onClose(){return $$props.onClose},onKeydown:handleKeydown,get isOpen(){return isOpen()},set isOpen($$value){ -isOpen($$value)},children:($$anchor2,$$slotProps)=>{ChatFormPickerList($$anchor2,{get items(){return get$4(filteredResources)},get isLoading(){return get$4(isLoading2)},get selectedIndex(){return get$4(selectedIndex)},get showSearchInput(){return get$4(showSearchInput)},searchPlaceholder:"Search resources...",emptyMessage:"No MCP resources available",itemKey:resource=>resource.serverName+":"+resource.uri,get searchQuery(){return get$4(internalSearchQuery)},set searchQuery($$value){set$1(internalSearchQuery, -$$value,!0)},item:($$anchor3,resource=noop$3,index2=noop$3,isSelected=noop$3)=>{const server=user_derived(()=>get$4(serverSettingsMap).get(resource().serverName)),serverLabel=user_derived(()=>get$4(server)?mcpStore.getServerLabel(get$4(server)):resource().serverName);ChatFormPickerListItem($$anchor3,{get dataIndex(){return index2()},get isSelected(){return isSelected()},onClick:()=>handleResourceClick(resource()),children:($$anchor4,$$slotProps2)=>{{const titleExtra=$$anchor5=>{var fragment_4=comment$2(), -node2=first_child(fragment_4);{var consequent=$$anchor6=>{var span=root_5$p();append($$anchor6,span)};if_block(node2,$$render=>{isResourceAttached(resource().uri)&&$$render(consequent)})}append($$anchor5,fragment_4)},subtitle=$$anchor5=>{var p2=root_6$n(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,resource().uri)),append($$anchor5,p2)};let $0=user_derived(()=>resource().title||resource().name);ChatFormPickerItemHeader($$anchor4,{get server(){return get$4(server)},get serverLabel(){ -return get$4(serverLabel)},get title(){return get$4($0)},get description(){return resource().description},titleExtra,subtitle,$$slots:{titleExtra:!0,subtitle:!0}})}},$$slots:{default:!0}})},skeleton:$$anchor3=>{ChatFormPickerListItemSkeleton($$anchor3,{})},footer:$$anchor3=>{var fragment_6=comment$2(),node_1=first_child(fragment_6);{var consequent_1=$$anchor4=>{Button($$anchor4,{class:"fixed right-3 bottom-3",type:"button",get onclick(){return $$props.onBrowse},variant:"secondary",size:"sm",children:($$anchor5,$$slotProps2)=>{ -var fragment_8=root_10$d(),node_2=first_child(fragment_8);Folder_open(node_2,{class:"h-3 w-3"}),next$1(),append($$anchor5,fragment_8)},$$slots:{default:!0}})};if_block(node_1,$$render=>{$$props.onBrowse&&get$4(resources).length>3&&$$render(consequent_1)})}append($$anchor3,fragment_6)},$$slots:{item:!0,skeleton:!0,footer:!0}})},$$slots:{default:!0}}),pop($$exports)}function fadeInView(node2,options={}){const{duration:duration2=300,y=0,skipIfVisible=!1}=options;if(skipIfVisible){const rect=node2.getBoundingClientRect(); -if(rect.top<window.innerHeight&&rect.bottom>0&&rect.left<window.innerWidth&&rect.right>0)return}node2.style.opacity="0",node2.style.transform=`translateY(${y}px)`,node2.style.transition=`opacity ${duration2}ms ease-out, transform ${duration2}ms ease-out`,user_effect(()=>{const observer=new IntersectionObserver(entries=>{for(const entry of entries)entry.isIntersecting&&(requestAnimationFrame(()=>{node2.style.opacity="1",node2.style.transform="translateY(0)"}),observer.disconnect())},{threshold:.05}); -return observer.observe(node2),()=>{observer.disconnect()}})}var root_1$B=from_html("<div><!></div>"),root$10=from_html('<div style="height: auto; min-height: calc(100dvh - 14rem);"></div>');function ChatMessages($$anchor,$$props){push$1($$props,!0);let messages=prop($$props,"messages",19,()=>[]),allConversationMessages=state$1(proxy([]));const currentConfig=config$1();setChatActionsContext({copy:async message=>{const asPlainText=!!currentConfig.copyTextAttachmentsAsPlainText,clipboardContent=formatMessageForClipboard( -message.content,message.extra,asPlainText);await copyToClipboard(clipboardContent,"Message copied to clipboard")},delete:async message=>{await chatStore.deleteMessage(message.id),refreshAllMessages()},navigateToSibling:async siblingId=>{await conversationsStore.navigateToSibling(siblingId)},editWithBranching:async(message,newContent,newExtras)=>{$$props.onUserAction?.(),await chatStore.editMessageWithBranching(message.id,newContent,newExtras),refreshAllMessages()},editWithReplacement:async(message,newContent,shouldBranch)=>{ -$$props.onUserAction?.(),await chatStore.editAssistantMessage(message.id,newContent,shouldBranch),refreshAllMessages()},editUserMessagePreserveResponses:async(message,newContent,newExtras)=>{$$props.onUserAction?.(),await chatStore.editUserMessagePreserveResponses(message.id,newContent,newExtras),refreshAllMessages()},regenerateWithBranching:async(message,modelOverride)=>{$$props.onUserAction?.(),await chatStore.regenerateMessageWithBranching(message.id,modelOverride),refreshAllMessages()},continueAssistantMessage:async message=>{ -$$props.onUserAction?.(),await chatStore.continueAssistantMessage(message.id),refreshAllMessages()},forkConversation:async(message,options)=>{await conversationsStore.forkConversation(message.id,options)}});function refreshAllMessages(){const conversation=activeConversation();conversation?conversationsStore.getConversationMessages(conversation.id).then(messages2=>{set$1(allConversationMessages,messages2,!0)}):set$1(allConversationMessages,[],!0)}user_effect(()=>{activeConversation()&&refreshAllMessages()}); -let displayMessages=user_derived(()=>{if(!messages().length)return[];const filteredMessages=currentConfig.showSystemMessage?messages():messages().filter(msg=>msg.type!==MessageRole.SYSTEM),result=[];for(let i=0;i<filteredMessages.length;i++){const msg=filteredMessages[i];if(msg.role===MessageRole.TOOL)continue;const toolMessages=[];if(msg.role===MessageRole.ASSISTANT&&hasAgenticContent(msg)){let j=i+1;for(;j<filteredMessages.length;){const next2=filteredMessages[j];if(next2.role===MessageRole.TOOL) -toolMessages.push(next2),j++;else if(next2.role===MessageRole.ASSISTANT)toolMessages.push(next2),j++;else break}i=j-1}else if(msg.role===MessageRole.ASSISTANT){let j=i+1;for(;j<filteredMessages.length&&filteredMessages[j].role===MessageRole.TOOL;)toolMessages.push(filteredMessages[j]),j++}const siblingInfo=getMessageSiblings(get$4(allConversationMessages),msg.id);result.push({message:msg,toolMessages,isLastAssistantMessage:!1,siblingInfo:siblingInfo||{message:msg,siblingIds:[msg.id],currentIndex:0, -totalSiblings:1}})}for(let i=result.length-1;i>=0;i--)if(result[i].message.role===MessageRole.ASSISTANT){result[i].isLastAssistantMessage=!0;break}return result});var div=root$10();each(div,21,()=>get$4(displayMessages),({message,toolMessages,isLastAssistantMessage,siblingInfo})=>message.id,($$anchor2,$$item)=>{let message=()=>get$4($$item).message,toolMessages=()=>get$4($$item).toolMessages,isLastAssistantMessage=()=>get$4($$item).isLastAssistantMessage,siblingInfo=()=>get$4($$item).siblingInfo; -var div_1=root_1$B(),node2=child(div_1);ChatMessage(node2,{class:"mx-auto w-full max-w-[48rem]",get message(){return message()},get toolMessages(){return toolMessages()},get isLastAssistantMessage(){return isLastAssistantMessage()},get siblingInfo(){return siblingInfo()}}),reset(div_1),action(div_1,$$node=>fadeInView?.($$node)),append($$anchor2,div_1)}),reset(div),template_effect(()=>set_class(div,1,`flex h-full flex-col space-y-10 pt-24 ${$$props.class??""}`)),append($$anchor,div),pop()}function ChatMessage($$anchor,$$props){ -push$1($$props,!0);let className=prop($$props,"class",3,""),toolMessages=prop($$props,"toolMessages",19,()=>[]),isLastAssistantMessage=prop($$props,"isLastAssistantMessage",3,!1),siblingInfo=prop($$props,"siblingInfo",3,null);const chatActions=getChatActionsContext();let deletionInfo=state$1(null),editedContent=user_derived(()=>$$props.message.content),editedExtras=user_derived(()=>$$props.message.extra?[...$$props.message.extra]:[]),editedUploadedFiles=state$1(proxy([])),isEditing2=state$1(!1), -showDeleteDialog=state$1(!1),shouldBranchAfterEdit=state$1(!1),textareaElement=state$1(void 0),showSaveOnlyOption=user_derived(()=>$$props.message.role===MessageRole.USER);setMessageEditContext({get isEditing(){return get$4(isEditing2)},get editedContent(){return get$4(editedContent)},get editedExtras(){return get$4(editedExtras)},get editedUploadedFiles(){return get$4(editedUploadedFiles)},get originalContent(){return $$props.message.content},get originalExtras(){return $$props.message.extra||[]}, -get showSaveOnlyOption(){return get$4(showSaveOnlyOption)},setContent:content2=>{set$1(editedContent,content2)},setExtras:extras=>{set$1(editedExtras,extras)},setUploadedFiles:files=>{set$1(editedUploadedFiles,files,!0)},save:handleSaveEdit,saveOnly:handleSaveEditOnly,cancel:handleCancelEdit,startEdit:handleEdit});let mcpPromptExtra=user_derived(()=>{if($$props.message.role!==MessageRole.USER||$$props.message.content.trim()||!$$props.message.extra||$$props.message.extra.length!==1)return null;const extra=$$props. -message.extra[0];return extra.type===AttachmentType.MCP_PROMPT?extra:null});user_effect(()=>{const pendingId=pendingEditMessageId();pendingId&&pendingId===$$props.message.id&&!get$4(isEditing2)&&(handleEdit(),chatStore.clearPendingEditMessageId())});async function handleCancelEdit(){if(set$1(isEditing2,!1),$$props.message.role===MessageRole.SYSTEM){await chatStore.removeSystemPromptPlaceholder($$props.message.id)&&goto(`${base}/`);return}set$1(editedContent,$$props.message.content),set$1(editedExtras, -$$props.message.extra?[...$$props.message.extra]:[]),set$1(editedUploadedFiles,[],!0)}function handleCopy(){chatActions.copy($$props.message)}async function handleConfirmDelete(){$$props.message.role===MessageRole.SYSTEM?await chatStore.removeSystemPromptPlaceholder($$props.message.id)&&goto(`${base}/`):chatActions.delete($$props.message),set$1(showDeleteDialog,!1)}async function handleDelete2(){set$1(deletionInfo,await chatStore.getDeletionInfo($$props.message.id),!0),set$1(showDeleteDialog,!0)} -function handleEdit(){set$1(isEditing2,!0),set$1(editedContent,$$props.message.role===MessageRole.SYSTEM&&$$props.message.content===SYSTEM_MESSAGE_PLACEHOLDER?"":$$props.message.content),get$4(textareaElement)?.focus(),set$1(editedExtras,$$props.message.extra?[...$$props.message.extra]:[]),set$1(editedUploadedFiles,[],!0),setTimeout(()=>{get$4(textareaElement)&&(get$4(textareaElement).focus(),get$4(textareaElement).setSelectionRange(get$4(textareaElement).value.length,get$4(textareaElement).value. -length))},0)}function handleRegenerate(modelOverride){chatActions.regenerateWithBranching($$props.message,modelOverride)}function handleContinue(){chatActions.continueAssistantMessage($$props.message)}function handleForkConversation(options){chatActions.forkConversation($$props.message,options)}function handleNavigateToSibling(siblingId){chatActions.navigateToSibling(siblingId)}async function handleSaveEdit(){if($$props.message.role===MessageRole.SYSTEM){const newContent=get$4(editedContent).trim(); -if(!newContent){const conversationDeleted=await chatStore.removeSystemPromptPlaceholder($$props.message.id);set$1(isEditing2,!1),conversationDeleted&&goto(`${base}/`);return}await DatabaseService.updateMessage($$props.message.id,{content:newContent});const index2=conversationsStore.findMessageIndex($$props.message.id);index2!==-1&&conversationsStore.updateMessageAtIndex(index2,{content:newContent})}else if($$props.message.role===MessageRole.USER){const finalExtras=await getMergedExtras();chatActions. -editWithBranching($$props.message,get$4(editedContent).trim(),finalExtras)}else chatActions.editWithReplacement($$props.message,get$4(editedContent),get$4(shouldBranchAfterEdit));set$1(isEditing2,!1),set$1(shouldBranchAfterEdit,!1),set$1(editedUploadedFiles,[],!0)}async function handleSaveEditOnly(){if($$props.message.role===MessageRole.USER){const finalExtras=await getMergedExtras();chatActions.editUserMessagePreserveResponses($$props.message,get$4(editedContent).trim(),finalExtras)}set$1(isEditing2, -!1),set$1(editedUploadedFiles,[],!0)}async function getMergedExtras(){if(get$4(editedUploadedFiles).length===0)return get$4(editedExtras);const plainFiles=snapshot(get$4(editedUploadedFiles)),newExtras=(await parseFilesToMessageExtras(plainFiles))?.extras||[];return[...get$4(editedExtras),...newExtras]}function handleShowDeleteDialogChange(show){set$1(showDeleteDialog,show,!0)}var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{ChatMessageSystem($$anchor2,{get class(){ -return className()},get deletionInfo(){return get$4(deletionInfo)},get message(){return $$props.message},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$4(showDeleteDialog)},get siblingInfo(){return siblingInfo()},get textareaElement(){return get$4(textareaElement)},set textareaElement($$value){set$1(textareaElement,$$value, -!0)}})},alternate_2=$$anchor2=>{var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent_1=$$anchor3=>{ChatMessageMcpPrompt($$anchor3,{get class(){return className()},get deletionInfo(){return get$4(deletionInfo)},get message(){return $$props.message},get mcpPrompt(){return get$4(mcpPromptExtra)},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange, -get showDeleteDialog(){return get$4(showDeleteDialog)},get siblingInfo(){return siblingInfo()}})},alternate_1=$$anchor3=>{var fragment_4=comment$2(),node_2=first_child(fragment_4);{var consequent_2=$$anchor4=>{ChatMessageUser($$anchor4,{get class(){return className()},get deletionInfo(){return get$4(deletionInfo)},get message(){return $$props.message},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling, -onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$4(showDeleteDialog)},get siblingInfo(){return siblingInfo()}})},alternate=$$anchor4=>{ChatMessageAssistant($$anchor4,{get class(){return className()},get deletionInfo(){return get$4(deletionInfo)},get isLastAssistantMessage(){return isLastAssistantMessage()},get message(){return $$props.message},get toolMessages(){return toolMessages()},get messageContent(){return $$props.message.content},onConfirmDelete:handleConfirmDelete, -onContinue:handleContinue,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling,onRegenerate:handleRegenerate,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$4(showDeleteDialog)},get siblingInfo(){return siblingInfo()},get textareaElement(){return get$4(textareaElement)},set textareaElement($$value){set$1(textareaElement,$$value,!0)}})};if_block(node_2,$$render=>{$$props. -message.role===MessageRole.USER?$$render(consequent_2):$$render(alternate,!1)},!0)}append($$anchor3,fragment_4)};if_block(node_1,$$render=>{get$4(mcpPromptExtra)?$$render(consequent_1):$$render(alternate_1,!1)},!0)}append($$anchor2,fragment_2)};if_block(node2,$$render=>{$$props.message.role===MessageRole.SYSTEM?$$render(consequent):$$render(alternate_2,!1)})}append($$anchor,fragment),pop()}var root_2$D=from_html('<div class="agentic-text svelte-1uhcmx5"><!></div>'),root_9$h=from_html('<div class\ -="rounded bg-muted/30 p-2 text-xs text-muted-foreground italic">Receiving arguments...</div>'),root_10$c=from_html('<div class="rounded bg-yellow-500/10 p-2 text-xs text-yellow-600 italic dark:text-yellow-400">Response was truncated</div>'),root_5$o=from_html('<div class="pt-3"><div class="my-3 flex items-center gap-2 text-xs text-muted-foreground"><span>Arguments:</span> <!></div> <!></div>'),root_14$5=from_html('<div class="pt-3"><div class="my-3 text-xs text-muted-foreground">Arguments:</div>\ - <!></div>'),root_18$3=from_html('<img class="mt-2 mb-2 h-auto max-w-full rounded-lg" loading="lazy"/>'),root_17$4=from_html('<div class="font-mono text-xs leading-relaxed whitespace-pre-wrap"> </div> <!>',1),root_16$5=from_html('<div class="overflow-auto rounded-lg border border-border bg-muted p-4"></div>'),root_20$7=from_html('<div class="rounded bg-muted/30 p-2 text-xs text-muted-foreground italic">Waiting for result...</div>'),root_13$a=from_html('<!> <div class="pt-3"><div class="my-3 flex\ - items-center gap-2 text-xs text-muted-foreground"><span>Result:</span> <!></div> <!></div>',1),root_23$3=from_html('<div class="pt-3"><div class="text-xs leading-relaxed break-words whitespace-pre-wrap"> </div></div>'),root_26$2=from_html('<div class="pt-3"><div class="text-xs leading-relaxed break-words whitespace-pre-wrap"> </div></div>'),root_30=from_html('<div class="turn-stats svelte-1uhcmx5"><!></div>'),root_28$1=from_html('<div class="agentic-turn my-2 hover:bg-muted/80 dark:hover:bg-mut\ -ed/30 svelte-1uhcmx5"><span class="agentic-turn-label svelte-1uhcmx5"></span> <!> <!></div>'),root$$=from_html('<div class="agentic-content svelte-1uhcmx5"><!></div>');function ChatMessageAgenticContent($$anchor,$$props){push$1($$props,!0);const renderSection=($$anchor2,section=noop$3,index2=noop$3)=>{var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor3=>{var div=root_2$D(),node_1=child(div);{let $0=user_derived(()=>$$props.message?.extra);MarkdownContent(node_1,{get content(){ -return section().content},get attachments(){return get$4($0)}})}reset(div),append($$anchor3,div)},alternate_6=$$anchor3=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);{var consequent_4=$$anchor4=>{const streamingIcon=user_derived(()=>(isStreaming(),Loader_circle)),streamingIconClass=user_derived(()=>isStreaming()?"h-4 w-4 animate-spin":"h-4 w-4");{let $0=user_derived(()=>isExpanded(index2(),section())),$1=user_derived(()=>section().toolName||"Tool call"),$2=user_derived(()=>isStreaming()? -"":"incomplete");CollapsibleContentBlock($$anchor4,{get open(){return get$4($0)},class:"my-2",get icon(){return get$4(streamingIcon)},get iconClass(){return get$4(streamingIconClass)},get title(){return get$4($1)},get subtitle(){return get$4($2)},get isStreaming(){return isStreaming()},onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor5,$$slotProps)=>{var div_1=root_5$o(),div_2=child(div_1),node_3=sibling(child(div_2),2);{var consequent_1=$$anchor6=>{Loader_circle($$anchor6,{class:"\ -h-3 w-3 animate-spin"})};if_block(node_3,$$render=>{isStreaming()&&$$render(consequent_1)})}reset(div_2);var node_4=sibling(div_2,2);{var consequent_2=$$anchor6=>{{let $02=user_derived(()=>formatJsonPretty(section().toolArgs));SyntaxHighlightedCode($$anchor6,{get code(){return get$4($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}},alternate_1=$$anchor6=>{var fragment_5=comment$2(),node_5=first_child(fragment_5);{var consequent_3=$$anchor7=>{var div_3=root_9$h(); -append($$anchor7,div_3)},alternate=$$anchor7=>{var div_4=root_10$c();append($$anchor7,div_4)};if_block(node_5,$$render=>{isStreaming()?$$render(consequent_3):$$render(alternate,!1)},!0)}append($$anchor6,fragment_5)};if_block(node_4,$$render=>{section().toolArgs?$$render(consequent_2):$$render(alternate_1,!1)})}reset(div_1),append($$anchor5,div_1)},$$slots:{default:!0}})}},alternate_5=$$anchor4=>{var fragment_6=comment$2(),node_6=first_child(fragment_6);{var consequent_10=$$anchor5=>{const isPending=user_derived( -()=>section().type===AgenticSectionType.TOOL_CALL_PENDING),toolIcon=user_derived(()=>get$4(isPending)?Loader_circle:Wrench),toolIconClass=user_derived(()=>get$4(isPending)?"h-4 w-4 animate-spin":"h-4 w-4");{let $0=user_derived(()=>isExpanded(index2(),section())),$1=user_derived(()=>section().toolName||""),$2=user_derived(()=>get$4(isPending)?"executing...":void 0);CollapsibleContentBlock($$anchor5,{get open(){return get$4($0)},class:"my-2",get icon(){return get$4(toolIcon)},get iconClass(){return get$4( -toolIconClass)},get title(){return get$4($1)},get subtitle(){return get$4($2)},get isStreaming(){return get$4(isPending)},onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor6,$$slotProps)=>{var fragment_8=root_13$a(),node_7=first_child(fragment_8);{var consequent_5=$$anchor7=>{var div_5=root_14$5(),node_8=sibling(child(div_5),2);{let $02=user_derived(()=>formatJsonPretty(section().toolArgs));SyntaxHighlightedCode(node_8,{get code(){return get$4($02)},get language(){return FileTypeText. -JSON},maxHeight:"20rem",class:"text-xs"})}reset(div_5),append($$anchor7,div_5)};if_block(node_7,$$render=>{section().toolArgs&§ion().toolArgs!=="{}"&&$$render(consequent_5)})}var div_6=sibling(node_7,2),div_7=child(div_6),node_9=sibling(child(div_7),2);{var consequent_6=$$anchor7=>{Loader_circle($$anchor7,{class:"h-3 w-3 animate-spin"})};if_block(node_9,$$render=>{get$4(isPending)&&$$render(consequent_6)})}reset(div_7);var node_10=sibling(div_7,2);{var consequent_8=$$anchor7=>{var div_8=root_16$5(); -each(div_8,21,()=>section().parsedLines,index$2,($$anchor8,line)=>{var fragment_10=root_17$4(),div_9=first_child(fragment_10),text2=child(div_9,!0);reset(div_9);var node_11=sibling(div_9,2);{var consequent_7=$$anchor9=>{var img=root_18$3();template_effect(()=>{set_attribute(img,"src",get$4(line).image.base64Url),set_attribute(img,"alt",get$4(line).image.name)}),append($$anchor9,img)};if_block(node_11,$$render=>{get$4(line).image&&$$render(consequent_7)})}template_effect(()=>set_text(text2,get$4( -line).text)),append($$anchor8,fragment_10)}),reset(div_8),append($$anchor7,div_8)},alternate_2=$$anchor7=>{var fragment_11=comment$2(),node_12=first_child(fragment_11);{var consequent_9=$$anchor8=>{var div_10=root_20$7();append($$anchor8,div_10)};if_block(node_12,$$render=>{get$4(isPending)&&$$render(consequent_9)},!0)}append($$anchor7,fragment_11)};if_block(node_10,$$render=>{section().toolResult?$$render(consequent_8):$$render(alternate_2,!1)})}reset(div_6),append($$anchor6,fragment_8)},$$slots:{ -default:!0}})}},alternate_4=$$anchor5=>{var fragment_12=comment$2(),node_13=first_child(fragment_12);{var consequent_11=$$anchor6=>{{let $0=user_derived(()=>isExpanded(index2(),section()));CollapsibleContentBlock($$anchor6,{get open(){return get$4($0)},class:"my-2",get icon(){return Brain},title:"Reasoning",onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor7,$$slotProps)=>{var div_11=root_23$3(),div_12=child(div_11),text_1=child(div_12,!0);reset(div_12),reset(div_11),template_effect( -()=>set_text(text_1,section().content)),append($$anchor7,div_11)},$$slots:{default:!0}})}},alternate_3=$$anchor6=>{var fragment_14=comment$2(),node_14=first_child(fragment_14);{var consequent_12=$$anchor7=>{const reasoningTitle=user_derived(()=>isStreaming()?"Reasoning...":"Reasoning"),reasoningSubtitle=user_derived(()=>isStreaming()?"":"incomplete");{let $0=user_derived(()=>isExpanded(index2(),section()));CollapsibleContentBlock($$anchor7,{get open(){return get$4($0)},class:"my-2",get icon(){return Brain}, -get title(){return get$4(reasoningTitle)},get subtitle(){return get$4(reasoningSubtitle)},get isStreaming(){return isStreaming()},onToggle:()=>toggleExpanded(index2(),section()),children:($$anchor8,$$slotProps)=>{var div_13=root_26$2(),div_14=child(div_13),text_2=child(div_14,!0);reset(div_14),reset(div_13),template_effect(()=>set_text(text_2,section().content)),append($$anchor8,div_13)},$$slots:{default:!0}})}};if_block(node_14,$$render=>{section().type===AgenticSectionType.REASONING_PENDING&&$$render( -consequent_12)},!0)}append($$anchor6,fragment_14)};if_block(node_13,$$render=>{section().type===AgenticSectionType.REASONING?$$render(consequent_11):$$render(alternate_3,!1)},!0)}append($$anchor5,fragment_12)};if_block(node_6,$$render=>{section().type===AgenticSectionType.TOOL_CALL||section().type===AgenticSectionType.TOOL_CALL_PENDING?$$render(consequent_10):$$render(alternate_4,!1)},!0)}append($$anchor4,fragment_6)};if_block(node_2,$$render=>{section().type===AgenticSectionType.TOOL_CALL_STREAMING? -$$render(consequent_4):$$render(alternate_5,!1)},!0)}append($$anchor3,fragment_1)};if_block(node2,$$render=>{section().type===AgenticSectionType.TEXT?$$render(consequent):$$render(alternate_6,!1)})}append($$anchor2,fragment)};let toolMessages=prop($$props,"toolMessages",19,()=>[]),isStreaming=prop($$props,"isStreaming",3,!1),highlightTurns=prop($$props,"highlightTurns",3,!1),expandedStates=proxy({});const showToolCallInProgress=user_derived(()=>config$1().showToolCallInProgress),showThoughtInProgress=user_derived( -()=>config$1().showThoughtInProgress),sections=user_derived(()=>deriveAgenticSections($$props.message,toolMessages(),[],isStreaming())),sectionsParsed=user_derived(()=>get$4(sections).map(section=>({...section,parsedLines:section.toolResult?parseToolResultWithImages(section.toolResult,section.toolResultExtras||$$props.message?.extra):[]}))),turnGroups=user_derived(()=>{const turns=[];let currentTurn=[],currentIndices=[],prevWasTool=!1;for(let i=0;i<get$4(sectionsParsed).length;i++){const section=get$4( -sectionsParsed)[i],isTool=section.type===AgenticSectionType.TOOL_CALL||section.type===AgenticSectionType.TOOL_CALL_PENDING||section.type===AgenticSectionType.TOOL_CALL_STREAMING;!isTool&&prevWasTool&¤tTurn.length>0&&(turns.push({sections:currentTurn,flatIndices:currentIndices}),currentTurn=[],currentIndices=[]),currentTurn.push(section),currentIndices.push(i),prevWasTool=isTool}return currentTurn.length>0&&turns.push({sections:currentTurn,flatIndices:currentIndices}),turns});function getDefaultExpanded(section){ -return section.type===AgenticSectionType.TOOL_CALL_PENDING||section.type===AgenticSectionType.TOOL_CALL_STREAMING?get$4(showToolCallInProgress):section.type===AgenticSectionType.REASONING_PENDING?get$4(showThoughtInProgress):!1}function isExpanded(index2,section){return expandedStates[index2]!==void 0?expandedStates[index2]:getDefaultExpanded(section)}function toggleExpanded(index2,section){const currentState=isExpanded(index2,section);expandedStates[index2]=!currentState}function buildTurnAgenticTimings(stats){ -return{turns:1,toolCallsCount:stats.toolCalls.length,toolsMs:stats.toolsMs,toolCalls:stats.toolCalls,llm:stats.llm}}var div_15=root$$(),node_15=child(div_15);{var consequent_14=$$anchor2=>{var fragment_16=comment$2(),node_16=first_child(fragment_16);each(node_16,17,()=>get$4(turnGroups),index$2,($$anchor3,turn,turnIndex)=>{const turnStats=user_derived(()=>$$props.message?.timings?.agentic?.perTurn?.[turnIndex]);var div_16=root_28$1(),span=child(div_16);span.textContent=`Turn ${turnIndex+1}`;var node_17=sibling( -span,2);each(node_17,19,()=>get$4(turn).sections,(section,sIdx)=>get$4(turn).flatIndices[sIdx],($$anchor4,section,sIdx)=>{renderSection($$anchor4,()=>get$4(section),()=>get$4(turn).flatIndices[get$4(sIdx)])});var node_18=sibling(node_17,2);{var consequent_13=$$anchor4=>{var div_17=root_30(),node_19=child(div_17);{let $0=user_derived(()=>get$4(turnStats).toolCalls.length>0?buildTurnAgenticTimings(get$4(turnStats)):void 0);ChatMessageStatistics(node_19,{get promptTokens(){return get$4(turnStats).llm. -prompt_n},get promptMs(){return get$4(turnStats).llm.prompt_ms},get predictedTokens(){return get$4(turnStats).llm.predicted_n},get predictedMs(){return get$4(turnStats).llm.predicted_ms},get agenticTimings(){return get$4($0)},get initialView(){return ChatMessageStatsView.GENERATION},hideSummary:!0})}reset(div_17),append($$anchor4,div_17)};if_block(node_18,$$render=>{get$4(turnStats)&&$$render(consequent_13)})}reset(div_16),append($$anchor3,div_16)}),append($$anchor2,fragment_16)},alternate_7=$$anchor2=>{ -var fragment_18=comment$2(),node_20=first_child(fragment_18);each(node_20,17,()=>get$4(sectionsParsed),index$2,($$anchor3,section,index2)=>{renderSection($$anchor3,()=>get$4(section),()=>index2)}),append($$anchor2,fragment_18)};if_block(node_15,$$render=>{highlightTurns()&&get$4(turnGroups).length>1?$$render(consequent_14):$$render(alternate_7,!1)})}reset(div_15),append($$anchor,div_15),pop()}var root_1$A=from_html('<div data-slot="checkbox-indicator" class="text-current transition-none"><!></di\ -v>');function Checkbox($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),checked=prop($$props,"checked",15,!1),indeterminate=prop($$props,"indeterminate",15,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","checked","indeterminate","class"]);var fragment=comment$2(),node2=first_child(fragment);{const children=($$anchor2,$$arg0)=>{let checked2=()=>$$arg0?.().checked,indeterminate2=()=>$$arg0?.().indeterminate;var div=root_1$A(),node_1=child(div);{var consequent=$$anchor3=>{ -Check($$anchor3,{class:"size-3.5"})},alternate=$$anchor3=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);{var consequent_1=$$anchor4=>{Minus($$anchor4,{class:"size-3.5"})};if_block(node_2,$$render=>{indeterminate2()&&$$render(consequent_1)},!0)}append($$anchor3,fragment_2)};if_block(node_1,$$render=>{checked2()?$$render(consequent):$$render(alternate,!1)})}reset(div),append($$anchor2,div)};let $0=user_derived(()=>cn$1("peer flex size-4 shrink-0 items-center justify-center rounded-[4p\ -x] border border-input shadow-xs transition-shadow outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary",$$props.class));component(node2,()=>Checkbox$1, -($$anchor2,CheckboxPrimitive_Root)=>{CheckboxPrimitive_Root($$anchor2,spread_props({"data-slot":"checkbox",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},get checked(){return checked()},set checked($$value){checked($$value)},get indeterminate(){return indeterminate()},set indeterminate($$value){indeterminate($$value)},children,$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_6$m=from_html('<div class="flex items-center gap\ --2"><span class="text-xs text-muted-foreground">Show raw output</span> <!></div>'),root_7$k=from_html('<div class="flex flex-col gap-4 py-2"><div class="flex flex-col gap-2"><!> <!></div> <div class="flex items-center gap-2"><!> <!></div></div>'),root$_=from_html('<div><div><!> <div class="pointer-events-auto inset-0 flex items-center gap-1 opacity-100 transition-all duration-150"><!> <!> <!> <!> <!> <!></div></div> <!></div> <!> <!>',1);function ChatMessageActions($$anchor,$$props){push$1($$props, -!0);let siblingInfo=prop($$props,"siblingInfo",3,null),showDeleteDialog=prop($$props,"showDeleteDialog",7),showRawOutputSwitch=prop($$props,"showRawOutputSwitch",3,!1),rawOutputEnabled=prop($$props,"rawOutputEnabled",3,!1),showForkDialog=state$1(!1),forkName=state$1(""),forkIncludeAttachments=state$1(!0);function handleConfirmDelete(){$$props.onConfirmDelete(),$$props.onShowDeleteDialogChange(!1)}function handleOpenForkDialog(){const conv=activeConversation();set$1(forkName,`Fork of ${conv?.name?? -"Conversation"}`),set$1(forkIncludeAttachments,!0),set$1(showForkDialog,!0)}function handleConfirmFork(){$$props.onForkConversation?.({name:get$4(forkName).trim(),includeAttachments:get$4(forkIncludeAttachments)}),set$1(showForkDialog,!1)}var fragment=root$_(),div=first_child(fragment),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{ChatMessageBranchingControls($$anchor2,{get siblingInfo(){return siblingInfo()},get onNavigateToSibling(){return $$props.onNavigateToSibling}})};if_block( -node2,$$render=>{siblingInfo()&&siblingInfo().totalSiblings>1&&$$render(consequent)})}var div_2=sibling(node2,2),node_1=child(div_2);ActionIcon(node_1,{get icon(){return Copy},tooltip:"Copy",get onclick(){return $$props.onCopy}});var node_2=sibling(node_1,2);{var consequent_1=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Square_pen},tooltip:"Edit",get onclick(){return $$props.onEdit}})};if_block(node_2,$$render=>{$$props.onEdit&&$$render(consequent_1)})}var node_3=sibling(node_2,2);{var consequent_2=$$anchor2=>{ -ActionIcon($$anchor2,{get icon(){return Refresh_cw},tooltip:"Regenerate",onclick:()=>$$props.onRegenerate()})};if_block(node_3,$$render=>{$$props.role===MessageRole.ASSISTANT&&$$props.onRegenerate&&$$render(consequent_2)})}var node_4=sibling(node_3,2);{var consequent_3=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Arrow_right},tooltip:"Continue",get onclick(){return $$props.onContinue}})};if_block(node_4,$$render=>{$$props.role===MessageRole.ASSISTANT&&$$props.onContinue&&$$render(consequent_3)})} -var node_5=sibling(node_4,2);{var consequent_4=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Git_branch},tooltip:"Fork conversation",onclick:handleOpenForkDialog})};if_block(node_5,$$render=>{$$props.onForkConversation&&$$render(consequent_4)})}var node_6=sibling(node_5,2);ActionIcon(node_6,{get icon(){return Trash_2},tooltip:"Delete",get onclick(){return $$props.onDelete}}),reset(div_2),reset(div_1);var node_7=sibling(div_1,2);{var consequent_5=$$anchor2=>{var div_3=root_6$m(),node_8=sibling( -child(div_3),2);Switch(node_8,{get checked(){return rawOutputEnabled()},onCheckedChange:checked=>$$props.onRawOutputToggle?.(checked)}),reset(div_3),append($$anchor2,div_3)};if_block(node_7,$$render=>{showRawOutputSwitch()&&$$render(consequent_5)})}reset(div);var node_9=sibling(div,2);{let $0=user_derived(()=>$$props.deletionInfo&&$$props.deletionInfo.totalCount>1?`This will delete ${$$props.deletionInfo.totalCount} messages including: ${$$props.deletionInfo.userMessages} user message${$$props.deletionInfo. -userMessages>1?"s":""} and ${$$props.deletionInfo.assistantMessages} assistant response${$$props.deletionInfo.assistantMessages>1?"s":""}. All messages in this branch and their responses will be permanently removed. This action cannot be undone.`:"Are you sure you want to delete this message? This action cannot be undone."),$1=user_derived(()=>$$props.deletionInfo&&$$props.deletionInfo.totalCount>1?`Delete ${$$props.deletionInfo.totalCount} Messages`:"Delete");DialogConfirmation(node_9,{title:"D\ -elete Message",get description(){return get$4($0)},get confirmText(){return get$4($1)},cancelText:"Cancel",variant:"destructive",get icon(){return Trash_2},onConfirm:handleConfirmDelete,onCancel:()=>$$props.onShowDeleteDialogChange(!1),get open(){return showDeleteDialog()},set open($$value){showDeleteDialog($$value)}})}var node_10=sibling(node_9,2);DialogConfirmation(node_10,{title:"Fork Conversation",description:"Create a new conversation branching from this message.",confirmText:"Fork",cancelText:"\ -Cancel",get icon(){return Git_branch},onConfirm:handleConfirmFork,onCancel:()=>set$1(showForkDialog,!1),get open(){return get$4(showForkDialog)},set open($$value){set$1(showForkDialog,$$value,!0)},children:($$anchor2,$$slotProps)=>{var div_4=root_7$k(),div_5=child(div_4),node_11=child(div_5);Label(node_11,{for:"fork-name",children:($$anchor3,$$slotProps2)=>{next$1();var text2=text$8("Title");append($$anchor3,text2)},$$slots:{default:!0}});var node_12=sibling(node_11,2);Input(node_12,{id:"fork-na\ -me",class:"text-foreground",placeholder:"Enter fork name",type:"text",get value(){return get$4(forkName)},set value($$value){set$1(forkName,$$value,!0)}}),reset(div_5);var div_6=sibling(div_5,2),node_13=child(div_6);Checkbox(node_13,{id:"fork-attachments",get checked(){return get$4(forkIncludeAttachments)},onCheckedChange:checked=>{set$1(forkIncludeAttachments,checked===!0)}});var node_14=sibling(node_13,2);Label(node_14,{for:"fork-attachments",class:"cursor-pointer text-sm font-normal",children:($$anchor3,$$slotProps2)=>{ -next$1();var text_1=text$8("Include all attachments");append($$anchor3,text_1)},$$slots:{default:!0}}),reset(div_6),reset(div_4),append($$anchor2,div_4)},$$slots:{default:!0}}),template_effect(()=>{set_class(div,1,`relative ${$$props.justify==="start"?"mt-2":""} flex h-6 items-center justify-between`),set_class(div_1,1,`${$$props.actionsPosition==="left"?"left-0":"right-0"} flex items-center gap-2 opacity-100 transition-opacity`)}),append($$anchor,fragment),pop()}var root_5$n=from_html("<p>Previ\ -ous version</p>"),root_2$C=from_html("<!> <!>",1),root_9$g=from_html("<p>Next version</p>"),root_6$l=from_html("<!> <!>",1),root_1$z=from_html('<div role="navigation"><!> <span class="px-1 font-mono text-xs"> </span> <!></div>');function ChatMessageBranchingControls($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),hasPrevious=user_derived(()=>$$props.siblingInfo&&$$props.siblingInfo.currentIndex>0),hasNext=user_derived(()=>$$props.siblingInfo&&$$props.siblingInfo.currentIndex< -$$props.siblingInfo.totalSiblings-1),nextSiblingId=user_derived(()=>get$4(hasNext)?$$props.siblingInfo.siblingIds[$$props.siblingInfo.currentIndex+1]:null),previousSiblingId=user_derived(()=>get$4(hasPrevious)?$$props.siblingInfo.siblingIds[$$props.siblingInfo.currentIndex-1]:null);function handleNext(){get$4(nextSiblingId)&&$$props.onNavigateToSibling?.(get$4(nextSiblingId))}function handlePrevious(){get$4(previousSiblingId)&&$$props.onNavigateToSibling?.(get$4(previousSiblingId))}var fragment=comment$2(), -node2=first_child(fragment);{var consequent=$$anchor2=>{var div=root_1$z(),node_1=child(div);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_1=root_2$C(),node_2=first_child(fragment_1);component(node_2,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{{let $0=user_derived(()=>get$4(hasPrevious)?"":"cursor-not-allowed opacity-30"),$1=user_derived(()=>!get$4( -hasPrevious));Button($$anchor6,{"aria-label":"Previous message version",get class(){return`h-5 w-5 p-0 ${get$4($0)??""}`},get disabled(){return get$4($1)},onclick:handlePrevious,size:"sm",variant:"ghost",children:($$anchor7,$$slotProps3)=>{Chevron_left($$anchor7,{class:"h-3 w-3"})},$$slots:{default:!0}})}},$$slots:{default:!0}})});var node_3=sibling(node_2,2);component(node_3,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_5$n(); -append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_1)},$$slots:{default:!0}})});var span=sibling(node_1,2),text2=child(span);reset(span);var node_4=sibling(span,2);component(node_4,()=>Root$5,($$anchor3,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_4=root_6$l(),node_5=first_child(fragment_4);component(node_5,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor5,{children:($$anchor6,$$slotProps2)=>{{let $0=user_derived( -()=>get$4(hasNext)?"":"cursor-not-allowed opacity-30"),$1=user_derived(()=>!get$4(hasNext));Button($$anchor6,{"aria-label":"Next message version",get class(){return`h-5 w-5 p-0 ${get$4($0)??""}`},get disabled(){return get$4($1)},onclick:handleNext,size:"sm",variant:"ghost",children:($$anchor7,$$slotProps3)=>{Chevron_right($$anchor7,{class:"h-3 w-3"})},$$slots:{default:!0}})}},$$slots:{default:!0}})});var node_6=sibling(node_5,2);component(node_6,()=>Tooltip_content,($$anchor5,Tooltip_Content_1)=>{ -Tooltip_Content_1($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p_1=root_9$g();append($$anchor6,p_1)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})}),reset(div),template_effect(()=>{set_attribute(div,"aria-label",`Message version ${$$props.siblingInfo.currentIndex+1} of ${$$props.siblingInfo.totalSiblings??""}`),set_class(div,1,`flex items-center gap-1 text-xs text-muted-foreground ${className()??""}`),set_text(text2,`${$$props.siblingInfo.currentIndex+1}/${$$props. -siblingInfo.totalSiblings??""}`)}),append($$anchor2,div)};if_block(node2,$$render=>{$$props.siblingInfo&&$$props.siblingInfo.totalSiblings>1&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_3$w=from_html('<button type="button"><!> <span class="sr-only">Reading</span></button>'),root_4$j=from_html("<p>Reading (prompt processing)</p>"),root_2$B=from_html("<!> <!>",1),root_6$k=from_html('<button type="button"><!> <span class="sr-only">Generation</span></button>'),root_7$j=from_html( -"<p> </p>"),root_5$m=from_html("<!> <!>",1),root_10$b=from_html('<button type="button"><!> <span class="sr-only">Tools</span></button>'),root_11$8=from_html("<p>Tool calls</p>"),root_9$f=from_html("<!> <!>",1),root_14$4=from_html('<button type="button"><!> <span class="sr-only">Summary</span></button>'),root_15$3=from_html("<p>Agentic summary</p>"),root_13$9=from_html("<!> <!>",1),root_8$h=from_html("<!> <!>",1),root_16$4=from_html("<!> <!> <!>",1),root_18$2=from_html("<!> <!> <!>",1),root_20$6=from_html( -"<!> <!> <!>",1),root_22$4=from_html("<!> <!> <!>",1),root$Z=from_html('<div class="inline-flex items-center text-xs text-muted-foreground"><div class="inline-flex items-center rounded-sm bg-muted-foreground/15 p-0.5"><!> <!> <!></div> <div class="flex items-center gap-1 px-2"><!></div></div>');function ChatMessageStatistics($$anchor,$$props){push$1($$props,!0);let isLive=prop($$props,"isLive",3,!1),isProcessingPrompt=prop($$props,"isProcessingPrompt",3,!1),initialView=prop($$props,"initialView", -19,()=>ChatMessageStatsView.GENERATION),hideSummary=prop($$props,"hideSummary",3,!1),activeView=user_derived(initialView),hasAutoSwitchedToGeneration=state$1(!1);user_effect(()=>{$$props.onActiveViewChange?.(get$4(activeView))}),user_effect(()=>{isLive()&&(!get$4(hasAutoSwitchedToGeneration)&&!isProcessingPrompt()&&$$props.predictedTokens&&$$props.predictedTokens>0?(set$1(activeView,ChatMessageStatsView.GENERATION),set$1(hasAutoSwitchedToGeneration,!0)):get$4(hasAutoSwitchedToGeneration)||set$1( -activeView,ChatMessageStatsView.READING))});let hasGenerationStats=user_derived(()=>$$props.predictedTokens!==void 0&&$$props.predictedTokens>0&&$$props.predictedMs!==void 0&&$$props.predictedMs>0),tokensPerSecond=user_derived(()=>get$4(hasGenerationStats)?$$props.predictedTokens/$$props.predictedMs*MS_PER_SECOND:0),formattedTime=user_derived(()=>$$props.predictedMs!==void 0?formatPerformanceTime($$props.predictedMs):DEFAULT_PERFORMANCE_TIME),promptTokensPerSecond=user_derived(()=>$$props.promptTokens!== -void 0&&$$props.promptMs!==void 0&&$$props.promptMs>0?$$props.promptTokens/$$props.promptMs*MS_PER_SECOND:void 0),formattedPromptTime=user_derived(()=>$$props.promptMs!==void 0?formatPerformanceTime($$props.promptMs):void 0),hasPromptStats=user_derived(()=>$$props.promptTokens!==void 0&&$$props.promptMs!==void 0&&get$4(promptTokensPerSecond)!==void 0&&get$4(formattedPromptTime)!==void 0),isGenerationDisabled=user_derived(()=>isLive()&&!get$4(hasGenerationStats)),hasAgenticStats=user_derived(()=>$$props. -agenticTimings!==void 0&&$$props.agenticTimings.toolCallsCount>0),agenticToolsPerSecond=user_derived(()=>get$4(hasAgenticStats)&&$$props.agenticTimings.toolsMs>0?$$props.agenticTimings.toolCallsCount/$$props.agenticTimings.toolsMs*MS_PER_SECOND:0),formattedAgenticToolsTime=user_derived(()=>get$4(hasAgenticStats)?formatPerformanceTime($$props.agenticTimings.toolsMs):DEFAULT_PERFORMANCE_TIME),agenticTotalTimeMs=user_derived(()=>get$4(hasAgenticStats)?$$props.agenticTimings.toolsMs+$$props.agenticTimings. -llm.predicted_ms+$$props.agenticTimings.llm.prompt_ms:0),formattedAgenticTotalTime=user_derived(()=>formatPerformanceTime(get$4(agenticTotalTimeMs)));var div=root$Z(),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{var fragment=comment$2(),node_1=first_child(fragment);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_1=root_2$B(),node_2=first_child(fragment_1);component(node_2,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{ -Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{var button=root_3$w();button.__click=()=>set$1(activeView,ChatMessageStatsView.READING);var node_3=child(button);Book_open_text(node_3,{class:"h-3 w-3"}),next$1(2),reset(button),template_effect(()=>set_class(button,1,`inline-flex h-5 w-5 items-center justify-center rounded-sm transition-colors ${get$4(activeView)===ChatMessageStatsView.READING?"bg-background text-foreground shadow-sm":"hover:text-foreground"}`)),append($$anchor6,button)}, -$$slots:{default:!0}})});var node_4=sibling(node_2,2);component(node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_4$j();append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_1)},$$slots:{default:!0}})}),append($$anchor2,fragment)};if_block(node2,$$render=>{(get$4(hasPromptStats)||isLive())&&$$render(consequent)})}var node_5=sibling(node2,2);component(node_5,()=>Root$5,($$anchor2,Tooltip_Root_1)=>{ -Tooltip_Root_1($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment_2=root_5$m(),node_6=first_child(fragment_2);component(node_6,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor4,{children:($$anchor5,$$slotProps2)=>{var button_1=root_6$k();button_1.__click=()=>!get$4(isGenerationDisabled)&&set$1(activeView,ChatMessageStatsView.GENERATION);var node_7=child(button_1);Sparkles(node_7,{class:"h-3 w-3"}),next$1(2),reset(button_1),template_effect(()=>{set_class(button_1, -1,`inline-flex h-5 w-5 items-center justify-center rounded-sm transition-colors ${get$4(activeView)===ChatMessageStatsView.GENERATION?"bg-background text-foreground shadow-sm":get$4(isGenerationDisabled)?"cursor-not-allowed opacity-40":"hover:text-foreground"}`),button_1.disabled=get$4(isGenerationDisabled)}),append($$anchor5,button_1)},$$slots:{default:!0}})});var node_8=sibling(node_6,2);component(node_8,()=>Tooltip_content,($$anchor4,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor4,{children:($$anchor5,$$slotProps2)=>{ -var p_1=root_7$j(),text2=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text2,get$4(isGenerationDisabled)?"Generation (waiting for tokens...)":"Generation (token output)")),append($$anchor5,p_1)},$$slots:{default:!0}})}),append($$anchor3,fragment_2)},$$slots:{default:!0}})});var node_9=sibling(node_5,2);{var consequent_2=$$anchor2=>{var fragment_3=root_8$h(),node_10=first_child(fragment_3);component(node_10,()=>Root$5,($$anchor3,Tooltip_Root_2)=>{Tooltip_Root_2($$anchor3,{children:($$anchor4,$$slotProps)=>{ -var fragment_4=root_9$f(),node_11=first_child(fragment_4);component(node_11,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger_2)=>{Tooltip_Trigger_2($$anchor5,{children:($$anchor6,$$slotProps2)=>{var button_2=root_10$b();button_2.__click=()=>set$1(activeView,ChatMessageStatsView.TOOLS);var node_12=child(button_2);Wrench(node_12,{class:"h-3 w-3"}),next$1(2),reset(button_2),template_effect(()=>set_class(button_2,1,`inline-flex h-5 w-5 items-center justify-center rounded-sm transition-colors ${get$4(activeView)=== -ChatMessageStatsView.TOOLS?"bg-background text-foreground shadow-sm":"hover:text-foreground"}`)),append($$anchor6,button_2)},$$slots:{default:!0}})});var node_13=sibling(node_11,2);component(node_13,()=>Tooltip_content,($$anchor5,Tooltip_Content_2)=>{Tooltip_Content_2($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p_2=root_11$8();append($$anchor6,p_2)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})});var node_14=sibling(node_10,2);{var consequent_1=$$anchor3=>{ -var fragment_5=comment$2(),node_15=first_child(fragment_5);component(node_15,()=>Root$5,($$anchor4,Tooltip_Root_3)=>{Tooltip_Root_3($$anchor4,{children:($$anchor5,$$slotProps)=>{var fragment_6=root_13$9(),node_16=first_child(fragment_6);component(node_16,()=>Tooltip_trigger,($$anchor6,Tooltip_Trigger_3)=>{Tooltip_Trigger_3($$anchor6,{children:($$anchor7,$$slotProps2)=>{var button_3=root_14$4();button_3.__click=()=>set$1(activeView,ChatMessageStatsView.SUMMARY);var node_17=child(button_3);Layers( -node_17,{class:"h-3 w-3"}),next$1(2),reset(button_3),template_effect(()=>set_class(button_3,1,`inline-flex h-5 w-5 items-center justify-center rounded-sm transition-colors ${get$4(activeView)===ChatMessageStatsView.SUMMARY?"bg-background text-foreground shadow-sm":"hover:text-foreground"}`)),append($$anchor7,button_3)},$$slots:{default:!0}})});var node_18=sibling(node_16,2);component(node_18,()=>Tooltip_content,($$anchor6,Tooltip_Content_3)=>{Tooltip_Content_3($$anchor6,{children:($$anchor7,$$slotProps2)=>{ -var p_3=root_15$3();append($$anchor7,p_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_6)},$$slots:{default:!0}})}),append($$anchor3,fragment_5)};if_block(node_14,$$render=>{hideSummary()||$$render(consequent_1)})}append($$anchor2,fragment_3)};if_block(node_9,$$render=>{get$4(hasAgenticStats)&&$$render(consequent_2)})}reset(div_1);var div_2=sibling(div_1,2),node_19=child(div_2);{var consequent_3=$$anchor2=>{var fragment_7=root_16$4(),node_20=first_child(fragment_7);{let $0=user_derived(()=>$$props. -predictedTokens?.toLocaleString());BadgeChatStatistic(node_20,{class:"bg-transparent",get icon(){return Whole_word},get value(){return`${get$4($0)??""} tokens`},tooltipLabel:"Generated tokens"})}var node_21=sibling(node_20,2);BadgeChatStatistic(node_21,{class:"bg-transparent",get icon(){return Clock},get value(){return get$4(formattedTime)},tooltipLabel:"Generation time"});var node_22=sibling(node_21,2);{let $0=user_derived(()=>get$4(tokensPerSecond).toFixed(2));BadgeChatStatistic(node_22,{class:"\ -bg-transparent",get icon(){return Gauge},get value(){return`${get$4($0)??""} t/s`},tooltipLabel:"Generation speed"})}append($$anchor2,fragment_7)},alternate_2=$$anchor2=>{var fragment_8=comment$2(),node_23=first_child(fragment_8);{var consequent_4=$$anchor3=>{var fragment_9=root_18$2(),node_24=first_child(fragment_9);BadgeChatStatistic(node_24,{class:"bg-transparent",get icon(){return Wrench},get value(){return`${$$props.agenticTimings.toolCallsCount??""} calls`},tooltipLabel:"Tool calls execute\ -d"});var node_25=sibling(node_24,2);BadgeChatStatistic(node_25,{class:"bg-transparent",get icon(){return Clock},get value(){return get$4(formattedAgenticToolsTime)},tooltipLabel:"Tool execution time"});var node_26=sibling(node_25,2);{let $0=user_derived(()=>get$4(agenticToolsPerSecond).toFixed(2));BadgeChatStatistic(node_26,{class:"bg-transparent",get icon(){return Gauge},get value(){return`${get$4($0)??""} calls/s`},tooltipLabel:"Tool execution rate"})}append($$anchor3,fragment_9)},alternate_1=$$anchor3=>{ -var fragment_10=comment$2(),node_27=first_child(fragment_10);{var consequent_5=$$anchor4=>{var fragment_11=root_20$6(),node_28=first_child(fragment_11);BadgeChatStatistic(node_28,{class:"bg-transparent",get icon(){return Layers},get value(){return`${$$props.agenticTimings.turns??""} turns`},tooltipLabel:"Agentic turns (LLM calls)"});var node_29=sibling(node_28,2);{let $0=user_derived(()=>$$props.agenticTimings.llm.predicted_n.toLocaleString());BadgeChatStatistic(node_29,{class:"bg-transparent",get icon(){ -return Whole_word},get value(){return`${get$4($0)??""} tokens`},tooltipLabel:"Total tokens generated"})}var node_30=sibling(node_29,2);BadgeChatStatistic(node_30,{class:"bg-transparent",get icon(){return Clock},get value(){return get$4(formattedAgenticTotalTime)},tooltipLabel:"Total time (LLM + tools)"}),append($$anchor4,fragment_11)},alternate=$$anchor4=>{var fragment_12=comment$2(),node_31=first_child(fragment_12);{var consequent_6=$$anchor5=>{var fragment_13=root_22$4(),node_32=first_child(fragment_13); -BadgeChatStatistic(node_32,{class:"bg-transparent",get icon(){return Whole_word},get value(){return`${$$props.promptTokens??""} tokens`},tooltipLabel:"Prompt tokens"});var node_33=sibling(node_32,2);{let $0=user_derived(()=>get$4(formattedPromptTime)??"0s");BadgeChatStatistic(node_33,{class:"bg-transparent",get icon(){return Clock},get value(){return get$4($0)},tooltipLabel:"Prompt processing time"})}var node_34=sibling(node_33,2);{let $0=user_derived(()=>get$4(promptTokensPerSecond).toFixed(2)); -BadgeChatStatistic(node_34,{class:"bg-transparent",get icon(){return Gauge},get value(){return`${get$4($0)??""} tokens/s`},tooltipLabel:"Prompt processing speed"})}append($$anchor5,fragment_13)};if_block(node_31,$$render=>{get$4(hasPromptStats)&&$$render(consequent_6)},!0)}append($$anchor4,fragment_12)};if_block(node_27,$$render=>{get$4(activeView)===ChatMessageStatsView.SUMMARY&&get$4(hasAgenticStats)?$$render(consequent_5):$$render(alternate,!1)},!0)}append($$anchor3,fragment_10)};if_block(node_23, -$$render=>{get$4(activeView)===ChatMessageStatsView.TOOLS&&get$4(hasAgenticStats)?$$render(consequent_4):$$render(alternate_1,!1)},!0)}append($$anchor2,fragment_8)};if_block(node_19,$$render=>{get$4(activeView)===ChatMessageStatsView.GENERATION&&get$4(hasGenerationStats)?$$render(consequent_3):$$render(alternate_2,!1)})}reset(div_2),reset(div),append($$anchor,div),pop()}delegate(["click"]);var root_3$v=from_html('<div class="max-w-[80%]"><!></div>'),root_2$A=from_html("<!> <!>",1),root$Y=from_html( -'<div aria-label="MCP Prompt message with actions" role="group"><!></div>');function ChatMessageMcpPrompt($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),siblingInfo=prop($$props,"siblingInfo",3,null);const editCtx=getMessageEditContext();var div=root$Y(),node2=child(div);{var consequent=$$anchor2=>{ChatMessageEditForm($$anchor2,{})},alternate=$$anchor2=>{var fragment_1=root_2$A(),node_1=first_child(fragment_1);ChatMessageMcpPromptContent(node_1,{get prompt(){return $$props. -mcpPrompt},get variant(){return McpPromptVariant.MESSAGE},class:"w-full max-w-[80%]"});var node_2=sibling(node_1,2);{var consequent_1=$$anchor3=>{var div_1=root_3$v(),node_3=child(div_1);ChatMessageActions(node_3,{actionsPosition:"right",get deletionInfo(){return $$props.deletionInfo},justify:"end",get onConfirmDelete(){return $$props.onConfirmDelete},get onCopy(){return $$props.onCopy},get onDelete(){return $$props.onDelete},get onEdit(){return $$props.onEdit},get onNavigateToSibling(){return $$props. -onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get role(){return MessageRole.USER}}),reset(div_1),append($$anchor3,div_1)};if_block(node_2,$$render=>{$$props.message.timestamp&&$$render(consequent_1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate,!1)})}reset(div),template_effect(()=>set_class( -div,1,`group flex flex-col items-end gap-3 md:gap-2 ${className()??""}`)),append($$anchor,div),pop()}var root$X=from_html("<div><!></div>");function Card($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$X();attribute_effect(div,$0=>({"data-slot":"card",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-6 rounded-xl bg-card py-6 text-card-foreground shadow-sm",BOX_BORDER, -$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root_1$y=from_html('<button class="absolute top-1/2 right-3 -translate-y-1/2 text-muted-foreground hover:text-foreground" type="button"><!></button>'),root_4$i=from_html('<tr><td colspan="3" class="p-8 text-center text-sm text-muted-foreground"><!></td></tr>'),root_8$g=from_html('<tr class="cursor-pointer border-b transition-\ -colors hover:bg-muted/50"><td class="p-3"><!></td><td class="p-3 text-sm"><div class="max-w-[17rem] truncate"> </div></td><td class="p-3 text-sm text-muted-foreground"> </td></tr>'),root_3$u=from_html('<table class="w-full"><thead class="sticky top-0 z-10 bg-muted"><tr class="border-b"><th class="w-12 p-3 text-left"><!></th><th class="p-3 text-left text-sm font-medium">Conversation Name</th><th class="w-32 p-3 text-left text-sm font-medium">Messages</th></tr></thead><tbody><!></tbody></table>'), -root$W=from_html('<div class="space-y-4"><div class="relative"><!> <!> <!></div> <div class="flex items-center justify-between text-sm text-muted-foreground"><span> <!></span></div> <div class="overflow-hidden rounded-md border"><!></div> <div class="flex justify-end gap-2"><!> <!></div></div>');function ConversationSelection($$anchor,$$props){push$1($$props,!0);let messageCountMap=prop($$props,"messageCountMap",19,()=>new Map),searchQuery=state$1(""),selectedIds=state$1(getInitialSelectedIds()), -lastClickedId=state$1(null);function getInitialSelectedIds(){return new SvelteSet($$props.conversations.map(c2=>c2.id))}let filteredConversations=user_derived(()=>$$props.conversations.filter(conv=>(conv.name||"Untitled conversation").toLowerCase().includes(get$4(searchQuery).toLowerCase()))),allSelected=user_derived(()=>get$4(filteredConversations).length>0&&get$4(filteredConversations).every(conv=>get$4(selectedIds).has(conv.id))),someSelected=user_derived(()=>get$4(filteredConversations).some( -conv=>get$4(selectedIds).has(conv.id))&&!get$4(allSelected));function toggleConversation(id2,shiftKey=!1){const newSet=new SvelteSet(get$4(selectedIds));if(shiftKey&&get$4(lastClickedId)!==null){const lastIndex=get$4(filteredConversations).findIndex(c2=>c2.id===get$4(lastClickedId)),currentIndex=get$4(filteredConversations).findIndex(c2=>c2.id===id2);if(lastIndex!==-1&¤tIndex!==-1){const start2=Math.min(lastIndex,currentIndex),end=Math.max(lastIndex,currentIndex),shouldSelect=!newSet.has(id2); -for(let i=start2;i<=end;i++)shouldSelect?newSet.add(get$4(filteredConversations)[i].id):newSet.delete(get$4(filteredConversations)[i].id);set$1(selectedIds,newSet);return}}newSet.has(id2)?newSet.delete(id2):newSet.add(id2),set$1(selectedIds,newSet),set$1(lastClickedId,id2,!0)}function toggleAll(){if(get$4(allSelected)){const newSet=new SvelteSet(get$4(selectedIds));get$4(filteredConversations).forEach(conv=>newSet.delete(conv.id)),set$1(selectedIds,newSet)}else{const newSet=new SvelteSet(get$4(selectedIds)); -get$4(filteredConversations).forEach(conv=>newSet.add(conv.id)),set$1(selectedIds,newSet)}}function handleConfirm(){const selected=$$props.conversations.filter(conv=>get$4(selectedIds).has(conv.id));$$props.onConfirm(selected)}function handleCancel(){set$1(selectedIds,getInitialSelectedIds()),set$1(searchQuery,""),set$1(lastClickedId,null),$$props.onCancel()}function reset$1(){set$1(selectedIds,getInitialSelectedIds()),set$1(searchQuery,""),set$1(lastClickedId,null)}var $$exports={reset:reset$1}, -div=root$W(),div_1=child(div),node2=child(div_1);Search(node2,{class:"absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground"});var node_1=sibling(node2,2);Input(node_1,{placeholder:"Search conversations...",class:"pr-9 pl-9",get value(){return get$4(searchQuery)},set value($$value){set$1(searchQuery,$$value,!0)}});var node_2=sibling(node_1,2);{var consequent=$$anchor2=>{var button=root_1$y();button.__click=()=>set$1(searchQuery,"");var node_3=child(button);X(node_3,{class:"h-4 w\ --4"}),reset(button),append($$anchor2,button)};if_block(node_2,$$render=>{get$4(searchQuery)&&$$render(consequent)})}reset(div_1);var div_2=sibling(div_1,2),span=child(div_2),text2=child(span),node_4=sibling(text2);{var consequent_1=$$anchor2=>{var text_1=text$8();template_effect(()=>set_text(text_1,`(${get$4(filteredConversations).length??""} shown)`)),append($$anchor2,text_1)};if_block(node_4,$$render=>{get$4(searchQuery)&&$$render(consequent_1)})}reset(span),reset(div_2);var div_3=sibling(div_2, -2),node_5=child(div_3);Scroll_area(node_5,{class:"h-[400px]",children:($$anchor2,$$slotProps)=>{var table2=root_3$u(),thead2=child(table2),tr2=child(thead2),th=child(tr2),node_6=child(th);Checkbox(node_6,{get checked(){return get$4(allSelected)},get indeterminate(){return get$4(someSelected)},onCheckedChange:toggleAll}),reset(th),next$1(2),reset(tr2),reset(thead2);var tbody2=sibling(thead2),node_7=child(tbody2);{var consequent_3=$$anchor3=>{var tr_1=root_4$i(),td=child(tr_1),node_8=child(td);{var consequent_2=$$anchor4=>{ -var text_2=text$8();template_effect(()=>set_text(text_2,`No conversations found matching "${get$4(searchQuery)??""}"`)),append($$anchor4,text_2)},alternate=$$anchor4=>{var text_3=text$8("No conversations available");append($$anchor4,text_3)};if_block(node_8,$$render=>{get$4(searchQuery)?$$render(consequent_2):$$render(alternate,!1)})}reset(td),reset(tr_1),append($$anchor3,tr_1)},alternate_1=$$anchor3=>{var fragment_2=comment$2(),node_9=first_child(fragment_2);each(node_9,17,()=>get$4(filteredConversations), -conv=>conv.id,($$anchor4,conv)=>{var tr_2=root_8$g();tr_2.__click=e=>toggleConversation(get$4(conv).id,e.shiftKey);var td_1=child(tr_2),node_10=child(td_1);{let $0=user_derived(()=>get$4(selectedIds).has(get$4(conv).id));Checkbox(node_10,{get checked(){return get$4($0)},onclick:e=>{e.preventDefault(),e.stopPropagation(),toggleConversation(get$4(conv).id,e.shiftKey)}})}reset(td_1);var td_2=sibling(td_1),div_4=child(td_2),text_4=child(div_4,!0);reset(div_4),reset(td_2);var td_3=sibling(td_2),text_5=child( -td_3,!0);reset(td_3),reset(tr_2),template_effect($0=>{set_attribute(div_4,"title",get$4(conv).name||"Untitled conversation"),set_text(text_4,get$4(conv).name||"Untitled conversation"),set_text(text_5,$0)},[()=>messageCountMap().get(get$4(conv).id)??0]),append($$anchor4,tr_2)}),append($$anchor3,fragment_2)};if_block(node_7,$$render=>{get$4(filteredConversations).length===0?$$render(consequent_3):$$render(alternate_1,!1)})}reset(tbody2),reset(table2),append($$anchor2,table2)},$$slots:{default:!0}}), -reset(div_3);var div_5=sibling(div_3,2),node_11=child(div_5);Button(node_11,{variant:"outline",onclick:handleCancel,children:($$anchor2,$$slotProps)=>{next$1();var text_6=text$8("Cancel");append($$anchor2,text_6)},$$slots:{default:!0}});var node_12=sibling(node_11,2);{let $0=user_derived(()=>get$4(selectedIds).size===0);Button(node_12,{onclick:handleConfirm,get disabled(){return get$4($0)},children:($$anchor2,$$slotProps)=>{next$1();var text_7=text$8();template_effect(()=>set_text(text_7,`${$$props. -mode==="export"?"Export":"Import"} (${get$4(selectedIds).size??""})`)),append($$anchor2,text_7)},$$slots:{default:!0}})}return reset(div_5),reset(div),template_effect(()=>set_text(text2,`${get$4(selectedIds).size??""} of ${$$props.conversations.length??""} selected `)),append($$anchor,div),pop($$exports)}delegate(["click"]);var root$V=from_html('<div><button aria-label="Scroll left"><!></button> <div><!></div> <button aria-label="Scroll right"><!></button></div>');function HorizontalScrollCarousel($$anchor,$$props){ -push$1($$props,!0);let className=prop($$props,"class",3,""),gapSize=prop($$props,"gapSize",3,"3"),canScrollLeft=state$1(!1),canScrollRight=state$1(!1),scrollContainer=state$1(void 0);function scrollLeft(event2){event2?.stopPropagation(),event2?.preventDefault(),get$4(scrollContainer)&&get$4(scrollContainer).scrollBy({left:get$4(scrollContainer).clientWidth*-.67,behavior:"smooth"})}function scrollRight(event2){event2?.stopPropagation(),event2?.preventDefault(),get$4(scrollContainer)&&get$4(scrollContainer). -scrollBy({left:get$4(scrollContainer).clientWidth*.67,behavior:"smooth"})}function updateScrollButtons(){if(!get$4(scrollContainer))return;const{scrollLeft:scrollLeft2,scrollWidth,clientWidth}=get$4(scrollContainer);set$1(canScrollLeft,scrollLeft2>0),set$1(canScrollRight,scrollLeft2<scrollWidth-clientWidth-1);const isScrollable=scrollWidth>clientWidth;$$props.onScrollableChange?.(isScrollable)}function resetScroll(){get$4(scrollContainer)&&(get$4(scrollContainer).scrollLeft=0,setTimeout(()=>{updateScrollButtons()}, -0))}user_effect(()=>{get$4(scrollContainer)&&setTimeout(()=>{updateScrollButtons()},0)});var $$exports={resetScroll},div=root$V(),button=child(div);button.__click=scrollLeft;var node2=child(button);Chevron_left(node2,{class:"h-4 w-4"}),reset(button);var div_1=sibling(button,2),node_1=child(div_1);snippet(node_1,()=>$$props.children??noop$3),reset(div_1),bind_this(div_1,$$value=>set$1(scrollContainer,$$value),()=>get$4(scrollContainer));var button_1=sibling(div_1,2);button_1.__click=scrollRight;var node_2=child( -button_1);return Chevron_right(node_2,{class:"h-4 w-4"}),reset(button_1),reset(div),template_effect(()=>{set_class(div,1,`relative ${className()??""}`),set_class(button,1,`absolute top-1/2 left-4 z-10 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded-full bg-foreground/15 shadow-md backdrop-blur-xs transition-opacity hover:bg-foreground/35 ${get$4(canScrollLeft)?"opacity-100":"pointer-events-none opacity-0"}`),set_class(div_1,1,`scrollbar-hide flex items-start gap-${gapSize()??""}\ - overflow-x-auto`),set_class(button_1,1,`absolute top-1/2 right-4 z-10 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded-full bg-foreground/15 shadow-md backdrop-blur-xs transition-opacity hover:bg-foreground/35 ${get$4(canScrollRight)?"opacity-100":"pointer-events-none opacity-0"}`)}),event("scroll",div_1,updateScrollButtons),append($$anchor,div),pop($$exports)}delegate(["click"]);var root_3$t=from_html('<span class="block truncate"> </span>'),root_4$h=from_html("<p> </p>"),root_2$z=from_html( -"<!> <!>",1),root_5$l=from_html("<span> </span>");function TruncatedText($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),showTooltip=prop($$props,"showTooltip",3,!0),textElement=state$1(void 0),isTruncated=state$1(!1);function checkTruncation(){get$4(textElement)&&set$1(isTruncated,get$4(textElement).scrollWidth>get$4(textElement).clientWidth)}user_effect(()=>{if(get$4(textElement)){checkTruncation();const observer=new ResizeObserver(checkTruncation);return observer. -observe(get$4(textElement)),()=>observer.disconnect()}});var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_2=root_2$z(),node_2=first_child(fragment_2);component(node_2,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{get class(){return className()},children:($$anchor6,$$slotProps2)=>{ -var span=root_3$t(),text_1=child(span,!0);reset(span),bind_this(span,$$value=>set$1(textElement,$$value),()=>get$4(textElement)),template_effect(()=>set_text(text_1,$$props.text)),append($$anchor6,span)},$$slots:{default:!0}})});var node_3=sibling(node_2,2);component(node_3,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{class:"z-[9999]",children:($$anchor6,$$slotProps2)=>{var p2=root_4$h(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,$$props.text)), -append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var span_1=root_5$l(),text_3=child(span_1,!0);reset(span_1),bind_this(span_1,$$value=>set$1(textElement,$$value),()=>get$4(textElement)),template_effect(()=>{set_class(span_1,1,`${className()??""} block truncate`),set_text(text_3,$$props.text)}),append($$anchor2,span_1)};if_block(node2,$$render=>{get$4(isTruncated)&&showTooltip()?$$render(consequent): -$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_4$g=from_html("<span>⌘</span>"),root_6$j=from_html("<span></span>"),root_1$x=from_html("<!> <!>",1),root$U=from_html("<kbd></kbd>");function KeyboardShortcutInfo($$anchor,$$props){push$1($$props,!0);let variant=prop($$props,"variant",3,"default"),className=prop($$props,"class",3,""),variantClasses=user_derived(()=>variant()==="destructive"?"text-destructive":"text-muted-foreground");var kbd=root$U();each(kbd,21,()=>$$props.keys, -index$2,($$anchor2,key2,index2)=>{var fragment=root_1$x(),node2=first_child(fragment);{var consequent=$$anchor3=>{{let $0=user_derived(()=>variant()==="destructive"?"text-destructive":"");Arrow_big_up($$anchor3,{get class(){return`h-1 w-1 ${get$4($0)??""} -mr-1`}})}},alternate_1=$$anchor3=>{var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent_1=$$anchor4=>{var span=root_4$g();template_effect(()=>set_class(span,1,clsx(variant()==="destructive"?"text-destructive":""))),append( -$$anchor4,span)},alternate=$$anchor4=>{var text2=text$8();template_effect($0=>set_text(text2,$0),[()=>get$4(key2).toUpperCase()]),append($$anchor4,text2)};if_block(node_1,$$render=>{get$4(key2)==="cmd"?$$render(consequent_1):$$render(alternate,!1)},!0)}append($$anchor3,fragment_2)};if_block(node2,$$render=>{get$4(key2)==="shift"?$$render(consequent):$$render(alternate_1,!1)})}var node_2=sibling(node2,2);{var consequent_2=$$anchor3=>{var span_1=root_6$j();append($$anchor3,span_1)};if_block(node_2, -$$render=>{index2<$$props.keys.length-1&&$$render(consequent_2)})}append($$anchor2,fragment)}),reset(kbd),template_effect(()=>set_class(kbd,1,`px-1 pointer-events-none inline-flex select-none items-center gap-0.5 font-sans text-md font-medium opacity-0 transition-opacity -my-1 ${get$4(variantClasses)??""} ${className()??""}`)),append($$anchor,kbd),pop()}var root_3$s=from_html('<img alt="" class="h-3.5 w-3.5 shrink-0 rounded-sm"/>'),root_4$f=from_html("<span> </span>"),root_1$w=from_html("<!> <!>", -1),root_8$f=from_html("<span> </span>"),root_9$e=from_html('<span class="max-w-xs break-all"> </span>'),root_7$i=from_html("<!> <!>",1),root_5$k=from_html('<div class="flex flex-wrap justify-end gap-1"></div>'),root_11$7=from_html("<div><span> </span></div>"),root_14$3=from_html('<div><div class="space-y-2"><div class="h-3 w-3/4 animate-pulse rounded bg-foreground/20"></div> <div class="h-3 w-full animate-pulse rounded bg-foreground/20"></div> <div class="h-3 w-5/6 animate-pulse rounded bg-foreg\ -round/20"></div></div></div>'),root_19$1=from_html("<span> </span>"),root_20$5=from_html("<span> </span>"),root_17$3=from_html("<div><span></span></div>"),root$T=from_html('<div><div class="flex items-center justify-between gap-2"><div class="inline-flex flex-wrap items-center gap-1.25 text-xs text-muted-foreground"><!> <!></div> <!></div> <!></div>');function ChatMessageMcpPromptContent($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),variant=prop($$props,"variant", -19,()=>McpPromptVariant.MESSAGE),isLoading2=prop($$props,"isLoading",3,!1),hoveredArgKey=state$1(null),argumentEntries=user_derived(()=>Object.entries($$props.prompt.arguments??{})),hasArguments=user_derived(()=>$$props.prompt.arguments&&Object.keys($$props.prompt.arguments).length>0),hasContent=user_derived(()=>$$props.prompt.content&&$$props.prompt.content.trim().length>0),contentParts=user_derived(()=>{if(!$$props.prompt.content||!get$4(hasArguments))return[{text:$$props.prompt.content||"",argKey:null}]; -const parts=[];let remaining=$$props.prompt.content;const valueToKey=new SvelteMap;for(const[key2,value]of get$4(argumentEntries))value&&value.trim()&&valueToKey.set(value,key2);const sortedValues=[...valueToKey.keys()].sort((a,b)=>b.length-a.length);for(;remaining.length>0;){let earliestMatch=null;for(const value of sortedValues){const index2=remaining.indexOf(value);index2!==-1&&(earliestMatch===null||index2<earliestMatch.index)&&(earliestMatch={index:index2,value,key:valueToKey.get(value)})}if(earliestMatch) -earliestMatch.index>0&&parts.push({text:remaining.slice(0,earliestMatch.index),argKey:null}),parts.push({text:earliestMatch.value,argKey:earliestMatch.key}),remaining=remaining.slice(earliestMatch.index+earliestMatch.value.length);else{parts.push({text:remaining,argKey:null});break}}return parts}),showArgBadges=user_derived(()=>get$4(hasArguments)&&!isLoading2()&&!$$props.loadError),isAttachment=user_derived(()=>variant()===McpPromptVariant.ATTACHMENT),textSizeClass=user_derived(()=>get$4(isAttachment)? -"text-xs":"text-md"),paddingClass=user_derived(()=>get$4(isAttachment)?"px-3 py-2":"px-3.75 py-2.5"),maxHeightStyle=user_derived(()=>get$4(isAttachment)?"max-height: 6rem;":"max-height: var(--max-message-height);");const serverFavicon=user_derived(()=>mcpStore.getServerFavicon($$props.prompt.serverName)),serverDisplayName=user_derived(()=>mcpStore.getServerDisplayName($$props.prompt.serverName));var div=root$T(),div_1=child(div),div_2=child(div_1),node2=child(div_2);component(node2,()=>Root$5,($$anchor2,Tooltip_Root)=>{ -Tooltip_Root($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment=root_1$w(),node_1=first_child(fragment);component(node_1,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);{var consequent=$$anchor6=>{var img=root_3$s();template_effect(()=>set_attribute(img,"src",get$4(serverFavicon))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append( -$$anchor6,img)};if_block(node_2,$$render=>{get$4(serverFavicon)&&$$render(consequent)})}append($$anchor5,fragment_1)},$$slots:{default:!0}})});var node_3=sibling(node_1,2);component(node_3,()=>Tooltip_content,($$anchor4,Tooltip_Content)=>{Tooltip_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var span=root_4$f(),text2=child(span,!0);reset(span),template_effect(()=>set_text(text2,get$4(serverDisplayName))),append($$anchor5,span)},$$slots:{default:!0}})}),append($$anchor3,fragment)},$$slots:{ -default:!0}})});var node_4=sibling(node2,2);TruncatedText(node_4,{get text(){return $$props.prompt.name}}),reset(div_2);var node_5=sibling(div_2,2);{var consequent_1=$$anchor2=>{var div_3=root_5$k();each(div_3,21,()=>get$4(argumentEntries),([key2,value])=>key2,($$anchor3,$$item)=>{var $$array=user_derived(()=>to_array(get$4($$item),2));let key2=()=>get$4($$array)[0],value=()=>get$4($$array)[1];var fragment_2=comment$2(),node_6=first_child(fragment_2);component(node_6,()=>Root$5,($$anchor4,Tooltip_Root_1)=>{ -Tooltip_Root_1($$anchor4,{children:($$anchor5,$$slotProps)=>{var fragment_3=root_7$i(),node_7=first_child(fragment_3);component(node_7,()=>Tooltip_trigger,($$anchor6,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor6,{children:($$anchor7,$$slotProps2)=>{var span_1=root_8$f(),text_1=child(span_1,!0);reset(span_1),template_effect(()=>{set_class(span_1,1,`rounded-sm bg-purple-200/60 px-1.5 py-0.5 text-[10px] leading-none text-purple-700 transition-opacity dark:bg-purple-800/40 dark:text-purple-300 ${get$4( -hoveredArgKey)&&get$4(hoveredArgKey)!==key2()?"opacity-30":""}`),set_text(text_1,key2())}),event("mouseenter",span_1,()=>set$1(hoveredArgKey,key2(),!0)),event("mouseleave",span_1,()=>set$1(hoveredArgKey,null)),append($$anchor7,span_1)},$$slots:{default:!0}})});var node_8=sibling(node_7,2);component(node_8,()=>Tooltip_content,($$anchor6,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor6,{children:($$anchor7,$$slotProps2)=>{var span_2=root_9$e(),text_2=child(span_2,!0);reset(span_2),template_effect( -()=>set_text(text_2,value())),append($$anchor7,span_2)},$$slots:{default:!0}})}),append($$anchor5,fragment_3)},$$slots:{default:!0}})}),append($$anchor3,fragment_2)}),reset(div_3),append($$anchor2,div_3)};if_block(node_5,$$render=>{get$4(showArgBadges)&&$$render(consequent_1)})}reset(div_1);var node_9=sibling(div_1,2);{var consequent_2=$$anchor2=>{Card($$anchor2,{class:"relative overflow-hidden rounded-[1.125rem] border border-destructive/50 bg-destructive/10 backdrop-blur-md",children:($$anchor3,$$slotProps)=>{ -var div_4=root_11$7(),span_3=child(div_4),text_3=child(span_3,!0);reset(span_3),reset(div_4),template_effect(()=>{set_class(div_4,1,`overflow-y-auto ${get$4(paddingClass)??""}`),set_style(div_4,`${get$4(maxHeightStyle)??""} overflow-wrap: anywhere; word-break: break-word;`),set_class(span_3,1,`${get$4(textSizeClass)??""} text-destructive`),set_text(text_3,$$props.loadError)}),append($$anchor3,div_4)},$$slots:{default:!0}})},alternate_2=$$anchor2=>{var fragment_5=comment$2(),node_10=first_child(fragment_5); -{var consequent_3=$$anchor3=>{Card($$anchor3,{class:"relative overflow-hidden rounded-[1.125rem] border border-purple-200 bg-purple-500/10 px-1 py-2 backdrop-blur-md dark:border-purple-800 dark:bg-purple-500/20",children:($$anchor4,$$slotProps)=>{var div_5=root_14$3();template_effect(()=>{set_class(div_5,1,`overflow-y-auto ${get$4(paddingClass)??""}`),set_style(div_5,`${get$4(maxHeightStyle)??""} overflow-wrap: anywhere; word-break: break-word;`)}),append($$anchor4,div_5)},$$slots:{default:!0}})}, -alternate_1=$$anchor3=>{var fragment_7=comment$2(),node_11=first_child(fragment_7);{var consequent_5=$$anchor4=>{Card($$anchor4,{class:"relative overflow-hidden rounded-[1.125rem] border border-purple-200 bg-purple-500/10 py-0 text-foreground backdrop-blur-md dark:border-purple-800 dark:bg-purple-500/20",children:($$anchor5,$$slotProps)=>{var div_6=root_17$3(),span_4=child(div_6);each(span_4,21,()=>get$4(contentParts),index$2,($$anchor6,part)=>{var fragment_9=comment$2(),node_12=first_child(fragment_9); -{var consequent_4=$$anchor7=>{var span_5=root_19$1(),text_4=child(span_5,!0);reset(span_5),template_effect(()=>{set_class(span_5,1,`rounded-sm bg-purple-300/50 px-0.5 text-purple-900 transition-opacity dark:bg-purple-700/50 dark:text-purple-100 ${get$4(hoveredArgKey)&&get$4(hoveredArgKey)!==get$4(part).argKey?"opacity-30":""}`),set_text(text_4,get$4(part).text)}),event("mouseenter",span_5,()=>set$1(hoveredArgKey,get$4(part).argKey,!0)),event("mouseleave",span_5,()=>set$1(hoveredArgKey,null)),append( -$$anchor7,span_5)},alternate=$$anchor7=>{var span_6=root_20$5(),text_5=child(span_6,!0);reset(span_6),template_effect(()=>{set_class(span_6,1,`transition-opacity ${get$4(hoveredArgKey)?"opacity-30":""}`),set_text(text_5,get$4(part).text)}),append($$anchor7,span_6)};if_block(node_12,$$render=>{get$4(part).argKey?$$render(consequent_4):$$render(alternate,!1)})}append($$anchor6,fragment_9)}),reset(span_4),reset(div_6),template_effect(()=>{set_class(div_6,1,`overflow-y-auto ${get$4(paddingClass)??""}`), -set_style(div_6,`${get$4(maxHeightStyle)??""} overflow-wrap: anywhere; word-break: break-word;`),set_class(span_4,1,`${get$4(textSizeClass)??""} whitespace-pre-wrap`)}),append($$anchor5,div_6)},$$slots:{default:!0}})};if_block(node_11,$$render=>{get$4(hasContent)&&$$render(consequent_5)},!0)}append($$anchor3,fragment_7)};if_block(node_10,$$render=>{isLoading2()?$$render(consequent_3):$$render(alternate_1,!1)},!0)}append($$anchor2,fragment_5)};if_block(node_9,$$render=>{$$props.loadError?$$render( -consequent_2):$$render(alternate_2,!1)})}reset(div),template_effect(()=>set_class(div,1,`flex flex-col gap-2 ${className()??""}`)),append($$anchor,div),pop()}var root_2$y=from_html("<!> Cancel",1),root_3$r=from_html("<!> Save",1),root_1$v=from_html('<div class="w-full max-w-[80%]"><textarea placeholder="Edit system message..."></textarea> <div class="mt-2 flex justify-end gap-2"><!> <!></div></div>'),root_7$h=from_html("<div><!></div>"),root_8$e=from_html("<span> </span>"),root_9$d=from_html('<d\ -iv class="pointer-events-none absolute right-0 bottom-0 left-0 h-48 bg-gradient-to-t from-muted to-transparent"></div> <div class="pointer-events-none absolute right-0 bottom-4 left-0 flex justify-center opacity-0 transition-opacity group-hover/expand:opacity-100"><!></div>',1),root_11$6=from_html('<div class="mb-2 flex justify-center"><!></div>'),root_6$i=from_html("<div><!> <!></div> <!>",1),root_5$j=from_html('<div class="relative max-w-[80%]"><button type="button"><!></button></div>'),root_13$8=from_html( -'<div class="max-w-[80%]"><!></div>'),root_4$e=from_html("<!> <!>",1),root$S=from_html('<div aria-label="System message with actions" role="group"><!></div>');function ChatMessageSystem($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),siblingInfo=prop($$props,"siblingInfo",3,null),textareaElement=prop($$props,"textareaElement",15);const editCtx=getMessageEditContext();function handleEditKeydown(event2){event2.key===KeyboardKey.ENTER&&!event2.shiftKey&&!isIMEComposing( -event2)?(event2.preventDefault(),editCtx.save()):event2.key===KeyboardKey.ESCAPE&&(event2.preventDefault(),editCtx.cancel())}let isMultiline=state$1(!1),messageElement=state$1(void 0),isExpanded=state$1(!1),contentHeight=state$1(0);const MAX_HEIGHT=200,currentConfig=config$1();let showExpandButton=user_derived(()=>get$4(contentHeight)>MAX_HEIGHT);user_effect(()=>{if(!get$4(messageElement)||!$$props.message.content.trim())return;$$props.message.content.includes(` -`)&&set$1(isMultiline,!0);const resizeObserver=new ResizeObserver(entries=>{for(const entry of entries){const element2=entry.target;set$1(isMultiline,element2.offsetHeight>24*1.5),set$1(contentHeight,element2.scrollHeight,!0)}});return resizeObserver.observe(get$4(messageElement)),()=>{resizeObserver.disconnect()}});function toggleExpand(){set$1(isExpanded,!get$4(isExpanded))}var div=root$S(),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$v(),textarea=child(div_1);remove_textarea_child( -textarea),textarea.__keydown=handleEditKeydown,textarea.__input=e=>editCtx.setContent(e.currentTarget.value),bind_this(textarea,$$value=>textareaElement($$value),()=>textareaElement());var div_2=sibling(textarea,2),node_1=child(div_2);Button(node_1,{class:"h-8 px-3",get onclick(){return editCtx.cancel},size:"sm",variant:"outline",children:($$anchor3,$$slotProps)=>{var fragment=root_2$y(),node_2=first_child(fragment);X(node_2,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor3,fragment)},$$slots:{default:!0}}); -var node_3=sibling(node_1,2);{let $0=user_derived(()=>!editCtx.editedContent.trim());Button(node_3,{class:"h-8 px-3",get onclick(){return editCtx.save},get disabled(){return get$4($0)},size:"sm",children:($$anchor3,$$slotProps)=>{var fragment_1=root_3$r(),node_4=first_child(fragment_1);Check(node_4,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor3,fragment_1)},$$slots:{default:!0}})}reset(div_2),reset(div_1),template_effect(()=>{set_value(textarea,editCtx.editedContent),set_class(textarea,1,`min\ --h-[60px] w-full resize-none rounded-2xl px-3 py-2 text-sm ${INPUT_CLASSES??""}`)}),append($$anchor2,div_1)},alternate_1=$$anchor2=>{var fragment_2=root_4$e(),node_5=first_child(fragment_2);{var consequent_4=$$anchor3=>{var div_3=root_5$j(),button=child(div_3);button.__click=function(...$$args){(get$4(showExpandButton)&&!get$4(isExpanded)?toggleExpand:void 0)?.apply(this,$$args)};var node_6=child(button);{let $0=user_derived(()=>get$4(isMultiline)?"":void 0);Card(node_6,{class:"overflow-y-auto r\ -ounded-[1.125rem] !border-2 !border-dashed !border-border/50 bg-muted px-3.75 py-1.5 data-[multiline]:py-2.5",get"data-multiline"(){return get$4($0)},style:"border: 2px dashed hsl(var(--border)); max-height: var(--max-message-height); overflow-wrap: anywhere; word-break: break-word;",children:($$anchor4,$$slotProps)=>{var fragment_3=root_6$i(),div_4=first_child(fragment_3),node_7=child(div_4);{var consequent_1=$$anchor5=>{var div_5=root_7$h(),node_8=child(div_5);MarkdownContent(node_8,{class:"ma\ -rkdown-system-content -my-4",get content(){return $$props.message.content}}),reset(div_5),bind_this(div_5,$$value=>set$1(messageElement,$$value),()=>get$4(messageElement)),template_effect(()=>set_class(div_5,1,clsx(get$4(isExpanded)?"cursor-text":""))),append($$anchor5,div_5)},alternate=$$anchor5=>{var span=root_8$e(),text2=child(span,!0);reset(span),bind_this(span,$$value=>set$1(messageElement,$$value),()=>get$4(messageElement)),template_effect(()=>{set_class(span,1,`text-md whitespace-pre-wrap\ - ${get$4(isExpanded)?"cursor-text":""}`),set_text(text2,$$props.message.content)}),append($$anchor5,span)};if_block(node_7,$$render=>{currentConfig.renderUserContentAsMarkdown?$$render(consequent_1):$$render(alternate,!1)})}var node_9=sibling(node_7,2);{var consequent_2=$$anchor5=>{var fragment_4=root_9$d(),div_6=sibling(first_child(fragment_4),2),node_10=child(div_6);Button(node_10,{class:"rounded-full px-4 py-1.5 text-xs shadow-md",size:"sm",variant:"outline",children:($$anchor6,$$slotProps2)=>{ -next$1();var text_1=text$8("Show full system message");append($$anchor6,text_1)},$$slots:{default:!0}}),reset(div_6),append($$anchor5,fragment_4)};if_block(node_9,$$render=>{!get$4(isExpanded)&&get$4(showExpandButton)&&$$render(consequent_2)})}reset(div_4);var node_11=sibling(div_4,2);{var consequent_3=$$anchor5=>{var div_7=root_11$6(),node_12=child(div_7);Button(node_12,{class:"rounded-full px-4 py-1.5 text-xs",onclick:e=>{e.stopPropagation(),toggleExpand()},size:"sm",variant:"outline",children:($$anchor6,$$slotProps2)=>{ -next$1();var text_2=text$8("Collapse System Message");append($$anchor6,text_2)},$$slots:{default:!0}}),reset(div_7),append($$anchor5,div_7)};if_block(node_11,$$render=>{get$4(isExpanded)&&get$4(showExpandButton)&&$$render(consequent_3)})}template_effect(()=>{set_class(div_4,1,`relative transition-all duration-300 ${get$4(isExpanded)?"cursor-text select-text":"select-none"}`),set_style(div_4,!get$4(isExpanded)&&get$4(showExpandButton)?`max-height: ${MAX_HEIGHT}px;`:"max-height: none;")}),append($$anchor4, -fragment_3)},$$slots:{default:!0}})}reset(button),reset(div_3),template_effect(()=>set_class(button,1,`group/expand w-full text-left ${!get$4(isExpanded)&&get$4(showExpandButton)?"cursor-pointer":"cursor-auto"}`)),append($$anchor3,div_3)};if_block(node_5,$$render=>{$$props.message.content.trim()&&$$render(consequent_4)})}var node_13=sibling(node_5,2);{var consequent_5=$$anchor3=>{var div_8=root_13$8(),node_14=child(div_8);ChatMessageActions(node_14,{actionsPosition:"right",get deletionInfo(){return $$props. -deletionInfo},justify:"end",get onConfirmDelete(){return $$props.onConfirmDelete},get onCopy(){return $$props.onCopy},get onDelete(){return $$props.onDelete},get onEdit(){return $$props.onEdit},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get role(){return MessageRole.USER}}),reset(div_8),append($$anchor3,div_8)}; -if_block(node_13,$$render=>{$$props.message.timestamp&&$$render(consequent_5)})}append($$anchor2,fragment_2)};if_block(node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate_1,!1)})}reset(div),template_effect(()=>set_class(div,1,`group flex flex-col items-end gap-3 md:gap-2 ${className()??""}`)),append($$anchor,div),pop()}delegate(["keydown","input","click"]);var root_1$u=from_html('<div class="flex items-center gap-2"><!> <label for="save-only-switch" class="cursor-pointer t\ -ext-xs text-muted-foreground">Update without re-sending</label></div>'),root_2$x=from_html("<div></div>"),root_3$q=from_html("<!> Cancel",1),root$R=from_html('<div class="relative w-full max-w-[80%]"><!></div> <div class="mt-2 flex w-full max-w-[80%] items-center justify-between"><!> <!></div> <!>',1);function ChatMessageEditForm($$anchor,$$props){push$1($$props,!0);const editCtx=getMessageEditContext();let inputAreaRef=state$1(void 0),saveWithoutRegenerate=state$1(!1),showDiscardDialog=state$1( -!1),hasUnsavedChanges=user_derived(()=>!!(editCtx.editedContent!==editCtx.originalContent||editCtx.editedUploadedFiles.length>0||editCtx.editedExtras.length!==editCtx.originalExtras.length||editCtx.editedExtras.some((extra,i)=>extra!==editCtx.originalExtras[i]))),hasAttachments=user_derived(()=>editCtx.editedExtras&&editCtx.editedExtras.length>0||editCtx.editedUploadedFiles&&editCtx.editedUploadedFiles.length>0),canSubmit=user_derived(()=>editCtx.editedContent.trim().length>0||get$4(hasAttachments)); -function handleGlobalKeydown(event2){event2.key===KeyboardKey.ESCAPE&&(event2.preventDefault(),attemptCancel())}function attemptCancel(){get$4(hasUnsavedChanges)?set$1(showDiscardDialog,!0):editCtx.cancel()}function handleSubmit(){get$4(canSubmit)&&(get$4(saveWithoutRegenerate)&&editCtx.showSaveOnlyOption?editCtx.saveOnly():editCtx.save(),set$1(saveWithoutRegenerate,!1))}function handleAttachmentRemove(index2){const newExtras=[...editCtx.editedExtras];newExtras.splice(index2,1),editCtx.setExtras( -newExtras)}function handleUploadedFileRemove(fileId){const newFiles=editCtx.editedUploadedFiles.filter(f=>f.id!==fileId);editCtx.setUploadedFiles(newFiles)}async function handleFilesAdd(files){const processed=await processFilesToChatUploaded(files);editCtx.setUploadedFiles([...editCtx.editedUploadedFiles,...processed])}function handleUploadedFilesChange(files){editCtx.setUploadedFiles(files)}user_effect(()=>(chatStore.setEditModeActive(handleFilesAdd),()=>{chatStore.clearEditMode()}));var fragment=root$R(); -event("keydown",$window,handleGlobalKeydown);var div=first_child(fragment),node2=child(div);bind_this(ChatForm(node2,{get value(){return editCtx.editedContent},get attachments(){return editCtx.editedExtras},get uploadedFiles(){return editCtx.editedUploadedFiles},placeholder:"Edit your message...",showMcpPromptButton:!0,get onValueChange(){return editCtx.setContent},onAttachmentRemove:handleAttachmentRemove,onUploadedFileRemove:handleUploadedFileRemove,onUploadedFilesChange:handleUploadedFilesChange, -onFilesAdd:handleFilesAdd,onSubmit:handleSubmit}),$$value=>set$1(inputAreaRef,$$value,!0),()=>get$4(inputAreaRef)),reset(div);var div_1=sibling(div,2),node_1=child(div_1);{var consequent=$$anchor2=>{var div_2=root_1$u(),node_2=child(div_2);Switch(node_2,{id:"save-only-switch",class:"scale-75",get checked(){return get$4(saveWithoutRegenerate)},set checked($$value){set$1(saveWithoutRegenerate,$$value,!0)}}),next$1(2),reset(div_2),append($$anchor2,div_2)},alternate=$$anchor2=>{var div_3=root_2$x(); -append($$anchor2,div_3)};if_block(node_1,$$render=>{editCtx.showSaveOnlyOption?$$render(consequent):$$render(alternate,!1)})}var node_3=sibling(node_1,2);Button(node_3,{class:"h-7 px-3 text-xs",onclick:attemptCancel,size:"sm",variant:"ghost",children:($$anchor2,$$slotProps)=>{var fragment_1=root_3$q(),node_4=first_child(fragment_1);X(node_4,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor2,fragment_1)},$$slots:{default:!0}}),reset(div_1);var node_5=sibling(div_1,2);DialogConfirmation(node_5,{title:"\ -Discard changes?",description:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard",cancelText:"Keep editing",variant:"destructive",get icon(){return Triangle_alert},get onConfirm(){return editCtx.cancel},onCancel:()=>set$1(showDiscardDialog,!1),get open(){return get$4(showDiscardDialog)},set open($$value){set$1(showDiscardDialog,$$value,!0)}}),append($$anchor,fragment),pop()}var root_3$p=from_html('<div class="mb-2 max-w-[80%]"><!></div>'),root_6$h=from_html("\ -<div><!></div>"),root_7$g=from_html('<span class="text-md whitespace-pre-wrap"> </span>'),root_8$d=from_html('<div class="max-w-[80%]"><!></div>'),root_2$w=from_html("<!> <!> <!>",1),root$Q=from_html('<div aria-label="User message with actions" role="group"><!></div>');function ChatMessageUser($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),siblingInfo=prop($$props,"siblingInfo",3,null);const editCtx=getMessageEditContext();let isMultiline=state$1(!1),messageElement=state$1( -void 0);const currentConfig=config$1();user_effect(()=>{if(!get$4(messageElement)||!$$props.message.content.trim())return;if($$props.message.content.includes(` -`)){set$1(isMultiline,!0);return}const resizeObserver=new ResizeObserver(entries=>{for(const entry of entries){const element2=entry.target;set$1(isMultiline,element2.offsetHeight>24*1.5)}});return resizeObserver.observe(get$4(messageElement)),()=>{resizeObserver.disconnect()}});var div=root$Q(),node2=child(div);{var consequent=$$anchor2=>{ChatMessageEditForm($$anchor2,{})},alternate_1=$$anchor2=>{var fragment_1=root_2$w(),node_1=first_child(fragment_1);{var consequent_1=$$anchor3=>{var div_1=root_3$p(), -node_2=child(div_1);ChatAttachmentsList(node_2,{get attachments(){return $$props.message.extra},readonly:!0,imageHeight:"h-80"}),reset(div_1),append($$anchor3,div_1)};if_block(node_1,$$render=>{$$props.message.extra&&$$props.message.extra.length>0&&$$render(consequent_1)})}var node_3=sibling(node_1,2);{var consequent_3=$$anchor3=>{{let $0=user_derived(()=>get$4(isMultiline)?"":void 0);Card($$anchor3,{class:"max-w-[80%] overflow-y-auto rounded-[1.125rem] border-none bg-primary/5 px-3.75 py-1.5 te\ -xt-foreground backdrop-blur-md data-[multiline]:py-2.5 dark:bg-primary/15",get"data-multiline"(){return get$4($0)},style:"max-height: var(--max-message-height); overflow-wrap: anywhere; word-break: break-word;",children:($$anchor4,$$slotProps)=>{var fragment_3=comment$2(),node_4=first_child(fragment_3);{var consequent_2=$$anchor5=>{var div_2=root_6$h(),node_5=child(div_2);MarkdownContent(node_5,{class:"markdown-user-content -my-4",get content(){return $$props.message.content}}),reset(div_2),bind_this( -div_2,$$value=>set$1(messageElement,$$value),()=>get$4(messageElement)),append($$anchor5,div_2)},alternate=$$anchor5=>{var span=root_7$g(),text2=child(span,!0);reset(span),bind_this(span,$$value=>set$1(messageElement,$$value),()=>get$4(messageElement)),template_effect(()=>set_text(text2,$$props.message.content)),append($$anchor5,span)};if_block(node_4,$$render=>{currentConfig.renderUserContentAsMarkdown?$$render(consequent_2):$$render(alternate,!1)})}append($$anchor4,fragment_3)},$$slots:{default:!0}})}}; -if_block(node_3,$$render=>{$$props.message.content.trim()&&$$render(consequent_3)})}var node_6=sibling(node_3,2);{var consequent_4=$$anchor3=>{var div_3=root_8$d(),node_7=child(div_3);ChatMessageActions(node_7,{actionsPosition:"right",get deletionInfo(){return $$props.deletionInfo},justify:"end",get onConfirmDelete(){return $$props.onConfirmDelete},get onCopy(){return $$props.onCopy},get onDelete(){return $$props.onDelete},get onEdit(){return $$props.onEdit},get onForkConversation(){return $$props. -onForkConversation},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get role(){return MessageRole.USER}}),reset(div_3),append($$anchor3,div_3)};if_block(node_6,$$render=>{$$props.message.timestamp&&$$render(consequent_4)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{editCtx.isEditing?$$render(consequent): -$$render(alternate_1,!1)})}reset(div),template_effect(()=>set_class(div,1,`group flex flex-col items-end gap-3 md:gap-2 ${className()??""}`)),append($$anchor,div),pop()}function useProcessingState(){let isMonitoring=state$1(!1),lastKnownState=state$1(null),lastKnownProcessingStats=state$1(null);const processingState=user_derived(()=>get$4(isMonitoring)?activeProcessingState():get$4(lastKnownState));user_effect(()=>{get$4(processingState)&&get$4(isMonitoring)&&set$1(lastKnownState,get$4(processingState), -!0)}),user_effect(()=>{if(get$4(processingState)?.promptProgress){const{processed,total,time_ms,cache:cache2}=get$4(processingState).promptProgress,actualProcessed=processed-cache2,actualTotal=total-cache2;if(actualProcessed>0&&time_ms>0){const tokensPerSecond=actualProcessed/(time_ms/1e3);set$1(lastKnownProcessingStats,{tokensProcessed:actualProcessed,totalTokens:actualTotal,timeMs:time_ms,tokensPerSecond},!0)}}});function getETASecs(done,total,elapsedMs){const elapsedSecs=elapsedMs/1e3;return done=== -0||elapsedSecs<.5?void 0:elapsedSecs*(total/done-1)}function startMonitoring(){get$4(isMonitoring)||set$1(isMonitoring,!0)}function stopMonitoring(){if(!get$4(isMonitoring))return;set$1(isMonitoring,!1),config$1().keepStatsVisible||(set$1(lastKnownState,null),set$1(lastKnownProcessingStats,null))}function getProcessingMessage(){if(!get$4(processingState))return"Processing...";switch(get$4(processingState).status){case"initializing":return"Initializing...";case"preparing":return get$4(processingState). -progressPercent!==void 0?`Processing (${get$4(processingState).progressPercent}%)`:"Preparing response...";case"generating":return"";default:return"Processing..."}}function getProcessingDetails(){const stateToUse=get$4(processingState)||get$4(lastKnownState);if(!stateToUse)return[];const details=[];if(stateToUse.promptProgress){const{processed,total,time_ms,cache:cache2}=stateToUse.promptProgress,actualProcessed=processed-cache2,actualTotal=total-cache2;if(actualProcessed<actualTotal&&actualProcessed> -0){const percent=Math.round(actualProcessed/actualTotal*100),eta=getETASecs(actualProcessed,actualTotal,time_ms);if(eta!==void 0){const etaSecs=Math.ceil(eta);details.push(`Processing ${percent}% (ETA: ${etaSecs}s)`)}else details.push(`Processing ${percent}%`)}}if(typeof stateToUse.contextTotal=="number"&&stateToUse.contextUsed>=0&&stateToUse.contextTotal>0){const contextPercent=Math.round(stateToUse.contextUsed/stateToUse.contextTotal*100);details.push(`Context: ${stateToUse.contextUsed}/${stateToUse. -contextTotal} (${contextPercent}%)`)}if(stateToUse.outputTokensUsed>0)if(stateToUse.outputTokensMax<=0)details.push(`Output: ${stateToUse.outputTokensUsed}/∞`);else{const outputPercent=Math.round(stateToUse.outputTokensUsed/stateToUse.outputTokensMax*100);details.push(`Output: ${stateToUse.outputTokensUsed}/${stateToUse.outputTokensMax} (${outputPercent}%)`)}return stateToUse.tokensPerSecond&&stateToUse.tokensPerSecond>0&&details.push(`${stateToUse.tokensPerSecond.toFixed(1)} ${STATS_UNITS.TOKENS_PER_SECOND}`), -stateToUse.speculative&&details.push("Speculative decoding enabled"),details}function getTechnicalDetails(){const stateToUse=get$4(processingState)||get$4(lastKnownState);if(!stateToUse)return[];const details=[];if(typeof stateToUse.contextTotal=="number"&&stateToUse.contextUsed>=0&&stateToUse.contextTotal>0){const contextPercent=Math.round(stateToUse.contextUsed/stateToUse.contextTotal*100);details.push(`Context: ${stateToUse.contextUsed}/${stateToUse.contextTotal} (${contextPercent}%)`)}if(stateToUse. -outputTokensUsed>0)if(stateToUse.outputTokensMax<=0)details.push(`Output: ${stateToUse.outputTokensUsed}/∞`);else{const outputPercent=Math.round(stateToUse.outputTokensUsed/stateToUse.outputTokensMax*100);details.push(`Output: ${stateToUse.outputTokensUsed}/${stateToUse.outputTokensMax} (${outputPercent}%)`)}return stateToUse.tokensPerSecond&&stateToUse.tokensPerSecond>0&&details.push(`${stateToUse.tokensPerSecond.toFixed(1)} ${STATS_UNITS.TOKENS_PER_SECOND}`),stateToUse.speculative&&details.push( -"Speculative decoding enabled"),details}function shouldShowDetails(){return get$4(processingState)!==null&&get$4(processingState).status!=="idle"}function getPromptProgressText(){if(!get$4(processingState)?.promptProgress)return null;const{processed,total,cache:cache2}=get$4(processingState).promptProgress,actualProcessed=processed-cache2,actualTotal=total-cache2,percent=Math.round(actualProcessed/actualTotal*100),eta=getETASecs(actualProcessed,actualTotal,get$4(processingState).promptProgress.time_ms); -if(eta!==void 0){const etaSecs=Math.ceil(eta);return`Processing ${percent}% (ETA: ${etaSecs}s)`}return`Processing ${percent}%`}function getLiveProcessingStats(){if(get$4(processingState)?.promptProgress){const{processed,total,time_ms,cache:cache2}=get$4(processingState).promptProgress,actualProcessed=processed-cache2,actualTotal=total-cache2;if(actualProcessed>0&&time_ms>0){const tokensPerSecond=actualProcessed/(time_ms/1e3);return{tokensProcessed:actualProcessed,totalTokens:actualTotal,timeMs:time_ms, -tokensPerSecond}}}return get$4(lastKnownProcessingStats)}function getLiveGenerationStats(){if(!get$4(processingState))return null;const{tokensDecoded,tokensPerSecond}=get$4(processingState);if(tokensDecoded<=0)return null;const timeMs=tokensPerSecond&&tokensPerSecond>0?tokensDecoded/tokensPerSecond*1e3:0;return{tokensGenerated:tokensDecoded,timeMs,tokensPerSecond:tokensPerSecond||0}}return{get processingState(){return get$4(processingState)},getProcessingDetails,getTechnicalDetails,getProcessingMessage, -getPromptProgressText,getLiveProcessingStats,getLiveGenerationStats,shouldShowDetails,startMonitoring,stopMonitoring}}var root_1$t=from_html('<div class="mt-6 w-full max-w-[48rem]"><div class="processing-container svelte-14103tf"><span class="processing-text svelte-14103tf"> </span></div></div>'),root_4$d=from_html("<!> Cancel",1),root_5$i=from_html("<!> Save",1),root_2$v=from_html('<div class="w-full"><textarea placeholder="Edit assistant message..."></textarea> <div class="mt-2 flex items-cent\ -er justify-between"><div class="flex items-center space-x-2"><!> <!></div> <div class="flex gap-2"><!> <!></div></div></div>'),root_8$c=from_html('<pre class="raw-output svelte-14103tf"> </pre>'),root_10$a=from_html('<div class="text-sm whitespace-pre-wrap"> </div>'),root_11$5=from_html('<div class="mt-4 w-full max-w-[48rem]"><div class="processing-container svelte-14103tf"><span class="processing-text svelte-14103tf"> </span></div></div>'),root_12$6=from_html('<div class="inline-flex flex-wrap \ -items-start gap-2 text-xs text-muted-foreground"><!> <!></div>'),root$P=from_html('<div role="group" aria-label="Assistant message with actions"><!> <!> <!> <div class="info my-6 grid gap-4 tabular-nums"><!></div> <!></div>');function ChatMessageAssistant($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),isLastAssistantMessage=prop($$props,"isLastAssistantMessage",3,!1),toolMessages=prop($$props,"toolMessages",19,()=>[]),siblingInfo=prop($$props,"siblingInfo",3,null), -textareaElement=prop($$props,"textareaElement",15);const editCtx=getMessageEditContext();let shouldBranchAfterEdit=state$1(!1);function handleEditKeydown(event2){event2.key===KeyboardKey.ENTER&&!event2.shiftKey&&!isIMEComposing(event2)?(event2.preventDefault(),editCtx.save()):event2.key===KeyboardKey.ESCAPE&&(event2.preventDefault(),editCtx.cancel())}const isAgentic=user_derived(()=>hasAgenticContent($$props.message,toolMessages())),hasReasoning=user_derived(()=>!!$$props.message.reasoningContent), -processingState=useProcessingState();let currentConfig=user_derived(config$1),isRouter=user_derived(isRouterMode),showRawOutput=state$1(!1),rawOutputContent=user_derived(()=>{const sections=deriveAgenticSections($$props.message,toolMessages(),[],!1),parts=[];for(const section of sections)switch(section.type){case AgenticSectionType.REASONING:case AgenticSectionType.REASONING_PENDING:parts.push(`${REASONING_TAGS.START} -${section.content} -${REASONING_TAGS.END}`);break;case AgenticSectionType.TEXT:parts.push(section.content);break;case AgenticSectionType.TOOL_CALL:case AgenticSectionType.TOOL_CALL_PENDING:case AgenticSectionType.TOOL_CALL_STREAMING:{const callObj={name:section.toolName};if(section.toolArgs)try{callObj.arguments=JSON.parse(section.toolArgs)}catch{callObj.arguments=section.toolArgs}parts.push(JSON.stringify(callObj,null,2)),section.toolResult&&parts.push(`[Tool Result] -${section.toolResult}`);break}}return parts.join(` +streamedContent,effectiveModel,!!config$1().excludeReasoningFromContext)},onError:error2=>{if(this.setStreamingActive(!1),isAbortError(error2)){cleanupStreamingState();const pending=this.consumePendingMessage(convId);pending&&this.sendMessage(pending.content,pending.extras);return}console.error("Streaming error:",error2),cleanupStreamingState(),this.clearPendingMessage(convId);const idx=conversationsStore.findMessageIndex(assistantMessage.id);if(idx!==-1){const failedMessage=conversationsStore.removeMessageAtIndex( +idx);failedMessage&&DatabaseService.deleteMessage(failedMessage.id).catch(console.error)}const contextInfo=error2.contextInfo;this.showErrorDialog({type:error2.name==="TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER,message:error2.message,contextInfo}),onError&&onError(error2)}},perChatOverrides=conversationsStore.activeConversation?.mcpServerOverrides;if((await agenticStore.runAgenticFlow({conversationId:convId,messages:allMessages,options:{...this.getApiOptions(),...effectiveModel? +{model:effectiveModel}:{}},callbacks:streamCallbacks,signal:abortController.signal,perChatOverrides})).handled){const pending=agenticStore.consumePendingSteeringMessage(convId);pending&&await this.sendMessage(pending.content,pending.extras);return}await ChatService.sendMessage(allMessages,{...this.getApiOptions(),...effectiveModel?{model:effectiveModel}:{},stream:!0,onChunk:streamCallbacks.onChunk,onReasoningChunk:streamCallbacks.onReasoningChunk,onModel:streamCallbacks.onModel,onTimings:streamCallbacks. +onTimings,onComplete:async(finalContent,reasoningContent,timings,toolCalls)=>{const content2=streamedContent||finalContent||"",reasoning=streamedReasoningContent||reasoningContent,updateData={content:content2,reasoningContent:reasoning||void 0,toolCalls:toolCalls||"",timings};resolvedModel&&!modelPersisted&&(updateData.model=resolvedModel),await DatabaseService.updateMessage(currentMessageId,updateData);const idx=conversationsStore.findMessageIndex(currentMessageId),uiUpdate={content:content2,reasoningContent:reasoning|| +void 0,toolCalls:toolCalls||""};timings&&(uiUpdate.timings=timings),resolvedModel&&(uiUpdate.model=resolvedModel),conversationsStore.updateMessageAtIndex(idx,uiUpdate),await conversationsStore.updateCurrentNode(currentMessageId),cleanupStreamingState(),onComplete&&await onComplete(content2),isRouterMode()&&modelsStore.fetchRouterModels().catch(console.error);const pending=this.consumePendingMessage(convId);pending&&await this.sendMessage(pending.content,pending.extras)},onError:streamCallbacks.onError}, +convId,abortController.signal)}async stopGeneration(){const activeConv=conversationsStore.activeConversation;activeConv&&await this.stopGenerationForChat(activeConv.id)}async stopGenerationForChat(convId){await this.savePartialResponseIfNeeded(convId),this.setStreamingActive(!1),this.abortRequest(convId),this.setChatLoading(convId,!1),this.clearChatStreaming(convId),this.setProcessingState(convId,null),this.clearPendingMessage(convId)}async savePartialResponseIfNeeded(convId){const conversationId=convId|| +conversationsStore.activeConversation?.id;if(!conversationId)return;const streamingState=this.getChatStreaming(conversationId);if(!streamingState||!streamingState.response.trim())return;const messages=conversationId===conversationsStore.activeConversation?.id?conversationsStore.activeMessages:await conversationsStore.getConversationMessages(conversationId);if(!messages.length)return;const lastMessage=messages[messages.length-1];if(lastMessage?.role===MessageRole.ASSISTANT)try{const updateData={content:streamingState. +response},lastKnownState=this.getProcessingState(conversationId);lastKnownState&&(updateData.timings={prompt_n:lastKnownState.promptTokens||0,prompt_ms:lastKnownState.promptMs,predicted_n:lastKnownState.tokensDecoded||0,cache_n:lastKnownState.cacheTokens||0,predicted_ms:lastKnownState.tokensPerSecond&&lastKnownState.tokensDecoded?lastKnownState.tokensDecoded/lastKnownState.tokensPerSecond*1e3:void 0}),await DatabaseService.updateMessage(lastMessage.id,updateData),lastMessage.content=streamingState. +response,updateData.timings&&(lastMessage.timings=updateData.timings)}catch(error2){lastMessage.content=streamingState.response,console.error("Failed to save partial response:",error2)}}async updateMessage(messageId,newContent){const activeConv=conversationsStore.activeConversation;if(!activeConv)return;this.isChatLoadingInternal(activeConv.id)&&await this.stopGeneration();const result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(!result)return;const{message:messageToUpdate,index:messageIndex}=result, +originalContent=messageToUpdate.content;try{const rootMessage=(await conversationsStore.getConversationMessages(activeConv.id)).find(m=>m.type==="root"&&m.parent===null),isFirstUserMessage=rootMessage&&messageToUpdate.parent===rootMessage.id;conversationsStore.updateMessageAtIndex(messageIndex,{content:newContent}),await DatabaseService.updateMessage(messageId,{content:newContent}),isFirstUserMessage&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv. +id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine));const messagesToRemove=conversationsStore.activeMessages.slice(messageIndex+1);for(const message of messagesToRemove)await DatabaseService.deleteMessage(message.id);conversationsStore.sliceActiveMessages(messageIndex+1),conversationsStore.updateConversationTimestamp(),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const assistantMessage=await this.createAssistantMessage();conversationsStore. +addMessageToActive(assistantMessage),await conversationsStore.updateCurrentNode(assistantMessage.id),await this.streamChatCompletion(conversationsStore.activeMessages.slice(0,-1),assistantMessage,void 0,()=>{conversationsStore.updateMessageAtIndex(conversationsStore.findMessageIndex(messageId),{content:originalContent})})}catch(error2){isAbortError(error2)||console.error("Failed to update message:",error2)}}async regenerateMessage(messageId){const activeConv=conversationsStore.activeConversation; +if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;this.cancelPreEncode();const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{index:messageIndex}=result;try{const messagesToRemove=conversationsStore.activeMessages.slice(messageIndex);for(const message of messagesToRemove)await DatabaseService.deleteMessage(message.id);conversationsStore.sliceActiveMessages(messageIndex),conversationsStore.updateConversationTimestamp(),this.setChatLoading( +activeConv.id,!0),this.clearChatStreaming(activeConv.id);const parentMessageId=conversationsStore.activeMessages.length>0?conversationsStore.activeMessages[conversationsStore.activeMessages.length-1].id:void 0,assistantMessage=await this.createAssistantMessage(parentMessageId);conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion(conversationsStore.activeMessages.slice(0,-1),assistantMessage)}catch(error2){isAbortError(error2)||console.error("Failed to regenerat\ +e message:",error2),this.setChatLoading(activeConv?.id||"",!1)}}async regenerateMessageWithBranching(messageId,modelOverride){const activeConv=conversationsStore.activeConversation;if(!(!activeConv||this.isChatLoadingInternal(activeConv.id))){this.cancelPreEncode();try{const idx=conversationsStore.findMessageIndex(messageId);if(idx===-1)return;const msg=conversationsStore.activeMessages[idx];if(msg.role!==MessageRole.ASSISTANT)return;const allMessages=await conversationsStore.getConversationMessages( +activeConv.id),parentMessage=findMessageById(allMessages,msg.parent);if(!parentMessage)return;this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const newAssistantMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date.now(),role:msg.role,content:"",toolCalls:"",children:[],model:null},parentMessage.id);await conversationsStore.updateCurrentNode(newAssistantMessage.id),conversationsStore.updateConversationTimestamp(),await conversationsStore. +refreshActiveMessages();const conversationPath=filterByLeafNodeId(allMessages,parentMessage.id,!1),modelToUse=modelOverride||msg.model||void 0;await this.streamChatCompletion(conversationPath,newAssistantMessage,void 0,void 0,modelToUse)}catch(error2){isAbortError(error2)||console.error("Failed to regenerate message with branching:",error2),this.setChatLoading(activeConv?.id||"",!1)}}}async getDeletionInfo(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv)return{totalCount:0, +userMessages:0,assistantMessages:0,messageTypes:[]};const allMessages=await conversationsStore.getConversationMessages(activeConv.id);if(findMessageById(allMessages,messageId)?.role===MessageRole.SYSTEM){const messagesToDelete2=allMessages.filter(m=>m.id===messageId);let userMessages2=0,assistantMessages2=0;const messageTypes2=[];for(const msg of messagesToDelete2)msg.role===MessageRole.USER?(userMessages2++,messageTypes2.includes("user message")||messageTypes2.push("user message")):msg.role===MessageRole. +ASSISTANT&&(assistantMessages2++,messageTypes2.includes("assistant response")||messageTypes2.push("assistant response"));return{totalCount:1,userMessages:userMessages2,assistantMessages:assistantMessages2,messageTypes:messageTypes2}}const descendants=findDescendantMessages(allMessages,messageId),allToDelete=[messageId,...descendants],messagesToDelete=allMessages.filter(m=>allToDelete.includes(m.id));let userMessages=0,assistantMessages=0;const messageTypes=[];for(const msg of messagesToDelete)msg. +role===MessageRole.USER?(userMessages++,messageTypes.includes("user message")||messageTypes.push("user message")):msg.role===MessageRole.ASSISTANT&&(assistantMessages++,messageTypes.includes("assistant response")||messageTypes.push("assistant response"));return{totalCount:allToDelete.length,userMessages,assistantMessages,messageTypes}}async deleteMessage(messageId){const activeConv=conversationsStore.activeConversation;if(activeConv)try{const allMessages=await conversationsStore.getConversationMessages( +activeConv.id),messageToDelete=findMessageById(allMessages,messageId);if(!messageToDelete)return;if(filterByLeafNodeId(allMessages,activeConv.currNode||"",!1).some(m=>m.id===messageId)&&messageToDelete.parent){const siblings2=allMessages.filter(m=>m.parent===messageToDelete.parent&&m.id!==messageId);if(siblings2.length>0){const latestSibling=siblings2.reduce((latest,sibling2)=>sibling2.timestamp>latest.timestamp?sibling2:latest);await conversationsStore.updateCurrentNode(findLeafNode(allMessages, +latestSibling.id))}else messageToDelete.parent&&await conversationsStore.updateCurrentNode(findLeafNode(allMessages,messageToDelete.parent))}await DatabaseService.deleteMessageCascading(activeConv.id,messageId),await conversationsStore.refreshActiveMessages(),conversationsStore.updateConversationTimestamp()}catch(error2){console.error("Failed to delete message:",error2)}}async continueAssistantMessage(messageId){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal( +activeConv.id))return;const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{message:msg,index:idx}=result;try{this.showErrorDialog(null),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming(activeConv.id);const allMessages=await conversationsStore.getConversationMessages(activeConv.id),dbMessage=findMessageById(allMessages,messageId);if(!dbMessage){this.setChatLoading(activeConv.id,!1);return}const originalContent=dbMessage.content,originalReasoning=dbMessage. +reasoningContent||"",contextWithContinue=[...conversationsStore.activeMessages.slice(0,idx),{role:MessageRole.ASSISTANT,content:originalContent}];let appendedContent="",appendedReasoning="",hasReceivedContent=!1;const updateStreamingContent=fullContent=>{this.setChatStreaming(msg.convId,fullContent,msg.id),conversationsStore.updateMessageAtIndex(idx,{content:fullContent})},abortController=this.getOrCreateAbortController(msg.convId);await ChatService.sendMessage(contextWithContinue,{...this.getApiOptions(), +onChunk:chunk=>{appendedContent+=chunk,hasReceivedContent=!0,updateStreamingContent(originalContent+appendedContent)},onReasoningChunk:chunk=>{appendedReasoning+=chunk,hasReceivedContent=!0,conversationsStore.updateMessageAtIndex(idx,{reasoningContent:originalReasoning+appendedReasoning})},onTimings:(timings,promptProgress)=>{const tokensPerSecond=timings?.predicted_ms&&timings?.predicted_n?timings.predicted_n/timings.predicted_ms*1e3:0;this.updateProcessingStateFromTimings({prompt_n:timings?.prompt_n|| +0,prompt_ms:timings?.prompt_ms,predicted_n:timings?.predicted_n||0,predicted_per_second:tokensPerSecond,cache_n:timings?.cache_n||0,prompt_progress:promptProgress},msg.convId)},onComplete:async(finalContent,reasoningContent,timings)=>{const finalAppendedContent=hasReceivedContent?appendedContent:finalContent||"",finalAppendedReasoning=hasReceivedContent?appendedReasoning:reasoningContent||"",fullContent=originalContent+finalAppendedContent,fullReasoning=originalReasoning+finalAppendedReasoning|| +void 0;await DatabaseService.updateMessage(msg.id,{content:fullContent,reasoningContent:fullReasoning,timestamp:Date.now(),timings}),conversationsStore.updateMessageAtIndex(idx,{content:fullContent,reasoningContent:fullReasoning,timestamp:Date.now(),timings}),conversationsStore.updateConversationTimestamp(),this.setChatLoading(msg.convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null)},onError:async error2=>{if(isAbortError(error2)){hasReceivedContent&&appendedContent&& +(await DatabaseService.updateMessage(msg.id,{content:originalContent+appendedContent,reasoningContent:originalReasoning+appendedReasoning||void 0,timestamp:Date.now()}),conversationsStore.updateMessageAtIndex(idx,{content:originalContent+appendedContent,reasoningContent:originalReasoning+appendedReasoning||void 0,timestamp:Date.now()})),this.setChatLoading(msg.convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null);return}console.error("Continue generation error:", +error2),conversationsStore.updateMessageAtIndex(idx,{content:originalContent}),await DatabaseService.updateMessage(msg.id,{content:originalContent}),this.setChatLoading(msg.convId,!1),this.clearChatStreaming(msg.convId),this.setProcessingState(msg.convId,null),this.showErrorDialog({type:error2.name==="TimeoutError"?ErrorDialogType.TIMEOUT:ErrorDialogType.SERVER,message:error2.message})}},msg.convId,abortController.signal)}catch(error2){isAbortError(error2)||console.error("Failed to continue mess\ +age:",error2),activeConv&&this.setChatLoading(activeConv.id,!1)}}async editAssistantMessage(messageId,newContent,shouldBranch){const activeConv=conversationsStore.activeConversation;if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;const result=this.getMessageByIdWithRole(messageId,MessageRole.ASSISTANT);if(!result)return;const{message:msg,index:idx}=result;try{if(shouldBranch){const newMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date. +now(),role:msg.role,content:newContent,toolCalls:msg.toolCalls||"",children:[],model:msg.model},msg.parent);await conversationsStore.updateCurrentNode(newMessage.id)}else await DatabaseService.updateMessage(msg.id,{content:newContent}),conversationsStore.updateMessageAtIndex(idx,{content:newContent});conversationsStore.updateConversationTimestamp(),await conversationsStore.refreshActiveMessages()}catch(error2){console.error("Failed to edit assistant message:",error2)}}async editUserMessagePreserveResponses(messageId,newContent,newExtras){ +const activeConv=conversationsStore.activeConversation;if(!activeConv)return;const result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(!result)return;const{message:msg,index:idx}=result;try{const updateData={content:newContent};newExtras!==void 0&&(updateData.extra=JSON.parse(JSON.stringify(newExtras))),await DatabaseService.updateMessage(messageId,updateData),conversationsStore.updateMessageAtIndex(idx,updateData);const rootMessage=(await conversationsStore.getConversationMessages( +activeConv.id)).find(m=>m.type==="root"&&m.parent===null);rootMessage&&msg.parent===rootMessage.id&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation(activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine)),conversationsStore.updateConversationTimestamp()}catch(error2){console.error("Failed to edit user message:",error2)}}async editMessageWithBranching(messageId,newContent,newExtras){const activeConv=conversationsStore.activeConversation; +if(!activeConv||this.isChatLoadingInternal(activeConv.id))return;let result=this.getMessageByIdWithRole(messageId,MessageRole.USER);if(result||(result=this.getMessageByIdWithRole(messageId,MessageRole.SYSTEM)),!result)return;const{message:msg,index:idx}=result;try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),rootMessage=allMessages.find(m=>m.type==="root"&&m.parent===null),isFirstUserMessage=msg.role===MessageRole.USER&&rootMessage&&msg.parent===rootMessage.id, +extrasToUse=newExtras!==void 0?JSON.parse(JSON.stringify(newExtras)):msg.extra?JSON.parse(JSON.stringify(msg.extra)):void 0;let messageIdForResponse;const dbMsg=findMessageById(allMessages,msg.id);if(dbMsg?dbMsg.children.length>0:msg.children.length>0){const parentId=msg.parent||rootMessage?.id;if(!parentId)return;const newMessage=await DatabaseService.createMessageBranch({convId:msg.convId,type:msg.type,timestamp:Date.now(),role:msg.role,content:newContent,toolCalls:msg.toolCalls||"",children:[], +extra:extrasToUse,model:msg.model},parentId);await conversationsStore.updateCurrentNode(newMessage.id),messageIdForResponse=newMessage.id}else{const updates={content:newContent,timestamp:Date.now(),extra:extrasToUse};await DatabaseService.updateMessage(msg.id,updates),conversationsStore.updateMessageAtIndex(idx,updates),messageIdForResponse=msg.id}conversationsStore.updateConversationTimestamp(),isFirstUserMessage&&newContent.trim()&&await conversationsStore.updateConversationTitleWithConfirmation( +activeConv.id,generateConversationTitle(newContent,!!config$1().titleGenerationUseFirstLine)),await conversationsStore.refreshActiveMessages(),msg.role===MessageRole.USER&&await this.generateResponseForMessage(messageIdForResponse)}catch(error2){console.error("Failed to edit message with branching:",error2)}}async generateResponseForMessage(userMessageId){const activeConv=conversationsStore.activeConversation;if(activeConv){this.showErrorDialog(null),this.setChatLoading(activeConv.id,!0),this.clearChatStreaming( +activeConv.id);try{const allMessages=await conversationsStore.getConversationMessages(activeConv.id),conversationPath=filterByLeafNodeId(allMessages,userMessageId,!1),assistantMessage=await DatabaseService.createMessageBranch({convId:activeConv.id,type:MessageType.TEXT,timestamp:Date.now(),role:MessageRole.ASSISTANT,content:"",toolCalls:"",children:[],model:null},userMessageId);conversationsStore.addMessageToActive(assistantMessage),await this.streamChatCompletion(conversationPath,assistantMessage)}catch(error2){ +console.error("Failed to generate response:",error2),this.setChatLoading(activeConv.id,!1)}}}getContextTotal(){const activeConvId=this.activeConversationId,activeState=activeConvId?this.getProcessingState(activeConvId):null;if(activeState&&typeof activeState.contextTotal=="number"&&activeState.contextTotal>0)return activeState.contextTotal;if(isRouterMode()){const modelContextSize=selectedModelContextSize();if(typeof modelContextSize=="number"&&modelContextSize>0)return modelContextSize}else{const propsContextSize=contextSize(); +if(typeof propsContextSize=="number"&&propsContextSize>0)return propsContextSize}return null}updateProcessingStateFromTimings(timingData,conversationId){const processingState=this.parseTimingData(timingData);if(processingState===null){console.warn("Failed to parse timing data - skipping update");return}const targetId=conversationId||this.activeConversationId;targetId&&this.setProcessingState(targetId,processingState)}parseTimingData(timingData){const promptTokens=timingData.prompt_n||0,promptMs=timingData. +prompt_ms||void 0,predictedTokens=timingData.predicted_n||0,tokensPerSecond=timingData.predicted_per_second||0,cacheTokens=timingData.cache_n||0,promptProgress=timingData.prompt_progress,contextTotal=this.getContextTotal(),currentConfig=config$1(),outputTokensMax=currentConfig.max_tokens||-1,contextUsed=promptTokens+cacheTokens+predictedTokens,outputTokensUsed=predictedTokens,progressCache=promptProgress?.cache||0,progressActualDone=(promptProgress?.processed??0)-progressCache,progressActualTotal=(promptProgress?. +total??0)-progressCache,progressPercent=promptProgress?Math.round(progressActualDone/progressActualTotal*100):void 0;return{status:predictedTokens>0?"generating":promptProgress?"preparing":"idle",tokensDecoded:predictedTokens,tokensRemaining:outputTokensMax-predictedTokens,contextUsed,contextTotal,outputTokensUsed,outputTokensMax,hasNextToken:predictedTokens>0,tokensPerSecond,temperature:currentConfig.temperature??.8,topP:currentConfig.top_p??.95,speculative:!1,progressPercent,promptProgress,promptTokens, +promptMs,cacheTokens}}restoreProcessingStateFromMessages(messages,conversationId){for(let i=messages.length-1;i>=0;i--){const message=messages[i];if(message.role===MessageRole.ASSISTANT&&message.timings){const restoredState=this.parseTimingData({prompt_n:message.timings.prompt_n||0,prompt_ms:message.timings.prompt_ms,predicted_n:message.timings.predicted_n||0,predicted_per_second:message.timings.predicted_n&&message.timings.predicted_ms?message.timings.predicted_n/message.timings.predicted_ms*1e3: +0,cache_n:message.timings.cache_n||0});if(restoredState){this.setProcessingState(conversationId,restoredState);return}}}}getConversationModel(messages){for(let i=messages.length-1;i>=0;i--){const message=messages[i];if(message.role===MessageRole.ASSISTANT&&message.model)return message.model}return null}getApiOptions(){const currentConfig=config$1(),hasValue=value=>value!=null&&value!=="",apiOptions={stream:!0,timings_per_token:!0};if(isRouterMode()){const modelName=selectedModelName();modelName&& +(apiOptions.model=modelName)}return currentConfig.systemMessage&&(apiOptions.systemMessage=currentConfig.systemMessage),currentConfig.disableReasoningParsing&&(apiOptions.disableReasoningParsing=!0),currentConfig.excludeReasoningFromContext&&(apiOptions.excludeReasoningFromContext=!0),hasValue(currentConfig.temperature)&&(apiOptions.temperature=Number(currentConfig.temperature)),hasValue(currentConfig.max_tokens)&&(apiOptions.max_tokens=Number(currentConfig.max_tokens)),hasValue(currentConfig.dynatemp_range)&& +(apiOptions.dynatemp_range=Number(currentConfig.dynatemp_range)),hasValue(currentConfig.dynatemp_exponent)&&(apiOptions.dynatemp_exponent=Number(currentConfig.dynatemp_exponent)),hasValue(currentConfig.top_k)&&(apiOptions.top_k=Number(currentConfig.top_k)),hasValue(currentConfig.top_p)&&(apiOptions.top_p=Number(currentConfig.top_p)),hasValue(currentConfig.min_p)&&(apiOptions.min_p=Number(currentConfig.min_p)),hasValue(currentConfig.xtc_probability)&&(apiOptions.xtc_probability=Number(currentConfig. +xtc_probability)),hasValue(currentConfig.xtc_threshold)&&(apiOptions.xtc_threshold=Number(currentConfig.xtc_threshold)),hasValue(currentConfig.typ_p)&&(apiOptions.typ_p=Number(currentConfig.typ_p)),hasValue(currentConfig.repeat_last_n)&&(apiOptions.repeat_last_n=Number(currentConfig.repeat_last_n)),hasValue(currentConfig.repeat_penalty)&&(apiOptions.repeat_penalty=Number(currentConfig.repeat_penalty)),hasValue(currentConfig.presence_penalty)&&(apiOptions.presence_penalty=Number(currentConfig.presence_penalty)), +hasValue(currentConfig.frequency_penalty)&&(apiOptions.frequency_penalty=Number(currentConfig.frequency_penalty)),hasValue(currentConfig.dry_multiplier)&&(apiOptions.dry_multiplier=Number(currentConfig.dry_multiplier)),hasValue(currentConfig.dry_base)&&(apiOptions.dry_base=Number(currentConfig.dry_base)),hasValue(currentConfig.dry_allowed_length)&&(apiOptions.dry_allowed_length=Number(currentConfig.dry_allowed_length)),hasValue(currentConfig.dry_penalty_last_n)&&(apiOptions.dry_penalty_last_n=Number( +currentConfig.dry_penalty_last_n)),currentConfig.samplers&&(apiOptions.samplers=currentConfig.samplers),apiOptions.backend_sampling=currentConfig.backend_sampling,currentConfig.custom&&(apiOptions.custom=currentConfig.custom),apiOptions}cancelPreEncode(){this.preEncodeAbortController&&(this.preEncodeAbortController.abort(),this.preEncodeAbortController=null)}async triggerPreEncode(allMessages,assistantMessage,assistantContent,model,excludeReasoning){this.cancelPreEncode(),this.preEncodeAbortController= +new AbortController;const signal=this.preEncodeAbortController.signal;try{if(!await ChatService.areAllSlotsIdle(model,signal)||signal.aborted)return;const messagesWithAssistant=[...allMessages,{...assistantMessage,content:assistantContent}];await ChatService.preEncode(messagesWithAssistant,model,excludeReasoning,signal)}catch(err){isAbortError(err)||console.warn("[ChatStore] Pre-encode failed:",err)}}}const chatStore=new ChatStore,activeProcessingState=()=>chatStore.activeProcessingState,errorDialog=()=>chatStore. +errorDialogState,getAddFilesHandler=()=>chatStore.getAddFilesHandler(),getAllLoadingChats=()=>chatStore.getAllLoadingChats(),isChatStreaming=()=>chatStore.isStreaming(),isEditing=()=>chatStore.isEditing(),isLoading=()=>chatStore.isLoading,pendingEditMessageId=()=>chatStore.pendingEditMessageId,chatPendingMessageContent=convId=>chatStore.pendingMessageContent(convId),chatPendingMessageExtras=convId=>chatStore.pendingMessageExtras(convId),chatClearPendingMessage=convId=>chatStore.clearPendingMessage( +convId),chatInjectPendingMessage=(convId,content2,extras)=>chatStore.injectPendingMessage(convId,content2,extras);var root$15=from_html('<!> <form><!> <!> <div data-slot="input-area"><!> <div class="flex-column relative min-h-[48px] items-center rounded-3xl py-2 pb-2.25 shadow-sm transition-all focus-within:shadow-md md:!py-3"><!> <!> <!></div></div></form> <!>',1);function ChatForm($$anchor,$$props){push$1($$props,!0);let attachments=prop($$props,"attachments",19,()=>[]),className=prop($$props, +"class",3,""),disabled=prop($$props,"disabled",3,!1),isLoading2=prop($$props,"isLoading",3,!1),placeholder=prop($$props,"placeholder",3,"Type a message..."),showMcpPromptButton=prop($$props,"showMcpPromptButton",3,!1),uploadedFiles=prop($$props,"uploadedFiles",31,()=>proxy([])),value=prop($$props,"value",15,""),audioRecorder,chatFormActionsRef=state$1(void 0),fileInputRef=state$1(void 0),promptPickerRef=state$1(void 0),resourcePickerRef=state$1(void 0),textareaRef=state$1(void 0),isRecording=state$1( +!1),recordingSupported=state$1(!1),isPromptPickerOpen=state$1(!1),promptSearchQuery=state$1(""),isInlineResourcePickerOpen=state$1(!1),resourceSearchQuery=state$1(""),isResourceDialogOpen=state$1(!1),preSelectedResourceUri=state$1(void 0),currentConfig=user_derived(config$1),pasteLongTextToFileLength=user_derived(()=>{const n=Number(get$3(currentConfig).pasteLongTextToFileLen);return Number.isNaN(n)?Number(SETTING_CONFIG_DEFAULT.pasteLongTextToFileLen):n}),isRouter=user_derived(isRouterMode),conversationModel=user_derived( +()=>chatStore.getConversationModel(activeMessages())),activeModelId=user_derived(()=>{const options=modelOptions();if(!get$3(isRouter))return options.length>0?options[0].model:null;const selectedId=selectedModelId();if(selectedId){const model=options.find(m=>m.id===selectedId);if(model)return model.model}if(get$3(conversationModel)){const model=options.find(m=>m.model===get$3(conversationModel));if(model)return model.model}return null}),hasModelSelected=user_derived(()=>!get$3(isRouter)||!!get$3( +conversationModel)||!!selectedModelId()),hasLoadingAttachments=user_derived(()=>uploadedFiles().some(f=>f.isLoading)),hasAttachments=user_derived(()=>attachments()&&attachments().length>0||uploadedFiles()&&uploadedFiles().length>0),canSubmit=user_derived(()=>value().trim().length>0||get$3(hasAttachments));onMount$1(()=>{set$1(recordingSupported,isAudioRecordingSupported(),!0),audioRecorder=new AudioRecorder});function focus2(){get$3(textareaRef)?.focus()}function resetTextareaHeight(){get$3(textareaRef)?. +resetHeight()}function openModelSelector(){get$3(chatFormActionsRef)?.openModelSelector()}function checkModelSelected(){return get$3(hasModelSelected)?!0:(get$3(chatFormActionsRef)?.openModelSelector(),!1)}function handleFileSelect(files){$$props.onFilesAdd?.(files)}function handleFileUpload(){get$3(fileInputRef)?.click()}function handleFileRemove(fileId){if(fileId.startsWith("attachment-")){const index2=parseInt(fileId.replace("attachment-",""),10);!isNaN(index2)&&index2>=0&&index2<attachments(). +length&&$$props.onAttachmentRemove?.(index2)}else $$props.onUploadedFileRemove?.(fileId)}function handleInput(){const perChatOverrides=conversationsStore.getAllMcpServerOverrides(),hasServers=mcpStore.hasEnabledServers(perChatOverrides);value().startsWith(PROMPT_TRIGGER_PREFIX)&&hasServers?(set$1(isPromptPickerOpen,!0),set$1(promptSearchQuery,value().slice(1),!0),set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,"")):value().startsWith(RESOURCE_TRIGGER_PREFIX)&&hasServers&&mcpStore. +hasResourcesCapability(perChatOverrides)?(set$1(isInlineResourcePickerOpen,!0),set$1(resourceSearchQuery,value().slice(1),!0),set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,"")):(set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,""),set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""))}function handleKeydown(event2){if(!(get$3(isPromptPickerOpen)&&get$3(promptPickerRef)?.handleKeydown(event2))&&!(get$3(isInlineResourcePickerOpen)&&get$3(resourcePickerRef)?.handleKeydown(event2))){ +if(event2.key===KeyboardKey.ESCAPE&&get$3(isPromptPickerOpen)){set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,"");return}if(event2.key===KeyboardKey.ESCAPE&&get$3(isInlineResourcePickerOpen)){set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,"");return}if(event2.key===KeyboardKey.ENTER&&!event2.shiftKey&&!isIMEComposing(event2)){const isModifier=event2.ctrlKey||event2.metaKey;if(get$3(currentConfig).sendOnEnter!==!1||isModifier){if(event2.preventDefault(),!get$3(canSubmit)||disabled()|| +get$3(hasLoadingAttachments))return;$$props.onSubmit?.()}}}}function handlePaste(event2){if(!event2.clipboardData)return;const files=Array.from(event2.clipboardData.items).filter(item=>item.kind==="file").map(item=>item.getAsFile()).filter(file=>file!==null);if(files.length>0){event2.preventDefault(),$$props.onFilesAdd?.(files);return}const text2=event2.clipboardData.getData(MimeTypeText.PLAIN);if(text2.startsWith(CLIPBOARD_CONTENT_QUOTE_PREFIX)){const parsed=parseClipboardContent(text2);if(parsed. +textAttachments.length>0||parsed.mcpPromptAttachments.length>0){if(event2.preventDefault(),value(parsed.message),$$props.onValueChange?.(parsed.message),parsed.textAttachments.length>0){const attachmentFiles=parsed.textAttachments.map(att=>new File([att.content],att.name,{type:MimeTypeText.PLAIN}));$$props.onFilesAdd?.(attachmentFiles)}if(parsed.mcpPromptAttachments.length>0){const mcpPromptFiles=parsed.mcpPromptAttachments.map(att=>({id:uuid$1(),name:att.name,size:att.content.length,type:SpecialFileType. +MCP_PROMPT,file:new File([att.content],`${att.name}${FileExtensionText.TXT}`,{type:MimeTypeText.PLAIN}),isLoading:!1,textContent:att.content,mcpPrompt:{serverName:att.serverName,promptName:att.promptName,arguments:att.arguments}}));uploadedFiles([...uploadedFiles(),...mcpPromptFiles]),$$props.onUploadedFilesChange?.(uploadedFiles())}setTimeout(()=>{get$3(textareaRef)?.focus()},10);return}}if(text2.length>0&&get$3(pasteLongTextToFileLength)>0&&text2.length>get$3(pasteLongTextToFileLength)){event2. +preventDefault();const textFile=new File([text2],"Pasted",{type:MimeTypeText.PLAIN});$$props.onFilesAdd?.([textFile])}}function handlePromptLoadStart(placeholderId,promptInfo,args){value().startsWith(PROMPT_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isPromptPickerOpen,!1),set$1(promptSearchQuery,"");const promptName=promptInfo.title||promptInfo.name,placeholder2={id:placeholderId,name:promptName,size:INITIAL_FILE_SIZE,type:SpecialFileType.MCP_PROMPT,file:new File([],"loading"), +isLoading:!0,mcpPrompt:{serverName:promptInfo.serverName,promptName:promptInfo.name,arguments:args?{...args}:void 0}};uploadedFiles([...uploadedFiles(),placeholder2]),$$props.onUploadedFilesChange?.(uploadedFiles()),get$3(textareaRef)?.focus()}function handlePromptLoadComplete(placeholderId,result){const promptText=result.messages?.map(msg=>typeof msg.content=="string"?msg.content:msg.content.type===ContentPartType.TEXT?msg.content.text:"").filter(Boolean).join(PROMPT_CONTENT_SEPARATOR);uploadedFiles( +uploadedFiles().map(f=>f.id===placeholderId?{...f,isLoading:!1,textContent:promptText,size:promptText.length,file:new File([promptText],`${f.name}${FileExtensionText.TXT}`,{type:MimeTypeText.PLAIN})}:f)),$$props.onUploadedFilesChange?.(uploadedFiles())}function handlePromptLoadError(placeholderId,error2){uploadedFiles(uploadedFiles().map(f=>f.id===placeholderId?{...f,isLoading:!1,loadError:error2}:f)),$$props.onUploadedFilesChange?.(uploadedFiles())}function handlePromptPickerClose(){set$1(isPromptPickerOpen, +!1),set$1(promptSearchQuery,""),get$3(textareaRef)?.focus()}function handleInlineResourcePickerClose(){set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),get$3(textareaRef)?.focus()}function handleInlineResourceSelect(){value().startsWith(RESOURCE_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery,""),get$3(textareaRef)?.focus()}function handleBrowseResources(){set$1(isInlineResourcePickerOpen,!1),set$1(resourceSearchQuery, +""),value().startsWith(RESOURCE_TRIGGER_PREFIX)&&(value(""),$$props.onValueChange?.("")),set$1(isResourceDialogOpen,!0)}async function handleMicClick(){if(!audioRecorder||!get$3(recordingSupported)){console.warn("Audio recording not supported");return}if(get$3(isRecording)){set$1(isRecording,!1);try{const audioBlob=await audioRecorder.stopRecording(),wavBlob=await convertToWav(audioBlob),audioFile=createAudioFile(wavBlob);$$props.onFilesAdd?.([audioFile])}catch(error2){console.error("Failed to s\ +top recording:",error2)}}else try{await audioRecorder.startRecording(),set$1(isRecording,!0)}catch(error2){console.error("Failed to start recording:",error2)}}var $$exports={focus:focus2,resetTextareaHeight,openModelSelector,checkModelSelected},fragment=root$15(),node2=first_child(fragment);bind_this(ChatFormFileInputInvisible(node2,{onFileSelect:handleFileSelect}),$$value=>set$1(fileInputRef,$$value,!0),()=>get$3(fileInputRef));var form=sibling(node2,2),node_1=child(form);bind_this(ChatFormPromptPicker( +node_1,{get isOpen(){return get$3(isPromptPickerOpen)},get searchQuery(){return get$3(promptSearchQuery)},onClose:handlePromptPickerClose,onPromptLoadStart:handlePromptLoadStart,onPromptLoadComplete:handlePromptLoadComplete,onPromptLoadError:handlePromptLoadError}),$$value=>set$1(promptPickerRef,$$value,!0),()=>get$3(promptPickerRef));var node_2=sibling(node_1,2);bind_this(ChatFormResourcePicker(node_2,{get isOpen(){return get$3(isInlineResourcePickerOpen)},get searchQuery(){return get$3(resourceSearchQuery)}, +onClose:handleInlineResourcePickerClose,onResourceSelect:handleInlineResourceSelect,onBrowse:handleBrowseResources}),$$value=>set$1(resourcePickerRef,$$value,!0),()=>get$3(resourcePickerRef));var div=sibling(node_2,2),node_3=child(div);{let $0=user_derived(()=>get$3(activeModelId)??void 0);ChatAttachmentsList(node_3,{get attachments(){return attachments()},onFileRemove:handleFileRemove,limitToSingleRow:!0,class:"py-5",style:"scroll-padding: 1rem;",get activeModelId(){return get$3($0)},get uploadedFiles(){ +return uploadedFiles()},set uploadedFiles($$value){uploadedFiles($$value)}})}var div_1=sibling(node_3,2),node_4=child(div_1);bind_this(ChatFormTextarea(node_4,{class:"px-5 py-1.5 md:pt-0",onKeydown:handleKeydown,onInput:()=>{handleInput(),$$props.onValueChange?.(value())},get disabled(){return disabled()},get placeholder(){return placeholder()},get value(){return value()},set value($$value){value($$value)}}),$$value=>set$1(textareaRef,$$value,!0),()=>get$3(textareaRef));var node_5=sibling(node_4, +2);{var consequent=$$anchor2=>{ChatAttachmentMcpResources($$anchor2,{class:"mb-3",onResourceClick:uri2=>{set$1(preSelectedResourceUri,uri2,!0),set$1(isResourceDialogOpen,!0)}})},d2=user_derived(()=>mcpHasResourceAttachments());if_block(node_5,$$render=>{get$3(d2)&&$$render(consequent)})}var node_6=sibling(node_5,2);{let $0=user_derived(()=>value().trim().length>0),$1=user_derived(()=>showMcpPromptButton()?()=>set$1(isPromptPickerOpen,!0):void 0);bind_this(ChatFormActions(node_6,{class:"px-3",get canSend(){ +return get$3(canSubmit)},get hasText(){return get$3($0)},get disabled(){return disabled()},get isLoading(){return isLoading2()},get isRecording(){return get$3(isRecording)},get uploadedFiles(){return uploadedFiles()},onFileUpload:handleFileUpload,onMicClick:handleMicClick,get onStop(){return $$props.onStop},onSystemPromptClick:()=>$$props.onSystemPromptClick?.({message:value(),files:uploadedFiles()}),get onMcpPromptClick(){return get$3($1)},onMcpResourcesClick:()=>set$1(isResourceDialogOpen,!0)}), +$$value=>set$1(chatFormActionsRef,$$value,!0),()=>get$3(chatFormActionsRef))}reset(div_1),reset(div),reset(form);var node_7=sibling(form,2);return DialogMcpResources(node_7,{get preSelectedUri(){return get$3(preSelectedResourceUri)},onAttach:resource=>{mcpStore.attachResource(resource.uri)},onOpenChange:newOpen=>{newOpen||set$1(preSelectedResourceUri,void 0)},get open(){return get$3(isResourceDialogOpen)},set open($$value){set$1(isResourceDialogOpen,$$value,!0)}}),template_effect(()=>{set_class( +form,1,`relative ${className()??""}`),set_class(div,1,`${INPUT_CLASSES??""} overflow-hidden rounded-3xl backdrop-blur-md ${disabled()?"cursor-not-allowed opacity-60":""}`)}),event("submit",form,e=>{e.preventDefault(),!(!get$3(canSubmit)||disabled()||get$3(hasLoadingAttachments))&&$$props.onSubmit?.()}),event("paste",div_1,handlePaste),append($$anchor,fragment),pop($$exports)}function Dropdown_menu_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props, +"sideOffset",3,4),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","sideOffset","portalProps","class"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,DropdownMenuPrimitive_Portal)=>{DropdownMenuPrimitive_Portal($$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>cn$1("z-50 max-h-(--bits-dropdown-menu-content-available-\ +height) min-w-[8rem] origin-(--bits-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-md outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=op\ +en]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/20",$$props.class));component(node_1,()=>Dropdown_menu_content$1,($$anchor4,DropdownMenuPrimitive_Content)=>{DropdownMenuPrimitive_Content($$anchor4,spread_props({"data-slot":"dropdown-menu-content",get sideOffset(){return sideOffset()},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}function Dropdown_menu_item($$anchor,$$props){ +push$1($$props,!0);let ref2=prop($$props,"ref",15,null),variant=prop($$props,"variant",3,"default"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","inset","variant"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled]:pointer-events-none data-[disab\ +led]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:data-highlighted:bg-destructive/10 data-[variant=destructive]:data-highlighted:text-destructive dark:data-[variant=destructive]:data-highlighted:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:!text-destructive",$$props.class));component(node2,()=>Menu_item, +($$anchor2,DropdownMenuPrimitive_Item)=>{DropdownMenuPrimitive_Item($$anchor2,spread_props({"data-slot":"dropdown-menu-item",get"data-inset"(){return $$props.inset},get"data-variant"(){return variant()},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Dropdown_menu_separator($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events", +"$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("-mx-1 my-1 h-px bg-border/20",$$props.class));component(node2,()=>Menu_separator,($$anchor2,DropdownMenuPrimitive_Separator)=>{DropdownMenuPrimitive_Separator($$anchor2,spread_props({"data-slot":"dropdown-menu-separator",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Dropdown_menu_trigger($$anchor,$$props){ +push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Menu_trigger,($$anchor2,DropdownMenuPrimitive_Trigger)=>{DropdownMenuPrimitive_Trigger($$anchor2,spread_props({"data-slot":"dropdown-menu-trigger"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}function Dropdown_menu_sub_content($$anchor,$$props){ +push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("z-50 max-h-(--bits-dropdown-menu-content-available-height) min-w-[8rem] origin-(--bits-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-md outline-none data-[side=bottom]:slide-\ +in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/20",$$props.class));component(node2,()=>Menu_sub_content,($$anchor2,DropdownMenuPrimitive_SubContent)=>{DropdownMenuPrimitive_SubContent($$anchor2,spread_props({"data-sl\ +ot":"dropdown-menu-sub-content",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_1$D=from_html("<!> <!>",1);function Dropdown_menu_sub_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","inset","children"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("fl\ +ex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",$$props.class));component(node2,()=>Menu_sub_trigger, +($$anchor2,DropdownMenuPrimitive_SubTrigger)=>{DropdownMenuPrimitive_SubTrigger($$anchor2,spread_props({"data-slot":"dropdown-menu-sub-trigger",get"data-inset"(){return $$props.inset},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$D(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);Chevron_right(node_2,{class:"ml-auto size-4"}), +append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}const Sub=Menu_sub,Root$2=Menu;function useAttachmentMenu(getFlags,getCallbacks,close2){const modalityFlags=user_derived(getFlags),callbacks=user_derived(()=>{const cbs=getCallbacks(),wrap2=fn=>()=>{close2(),fn?.()};return{[AttachmentAction.FILE_UPLOAD]:wrap2(cbs.onFileUpload),[AttachmentAction.SYSTEM_PROMPT_CLICK]:wrap2(cbs.onSystemPromptClick),[AttachmentAction.MCP_PROMPT_CLICK]:wrap2(cbs.onMcpPromptClick), +[AttachmentAction.MCP_RESOURCES_CLICK]:wrap2(cbs.onMcpResourcesClick)}});function isItemEnabled(enabledWhen){return!enabledWhen||enabledWhen==="always"?!0:!!get$3(modalityFlags)[enabledWhen]}function isItemVisible(visibleWhen){return visibleWhen?!!get$3(modalityFlags)[visibleWhen]:!0}function getSystemMessageTooltip(){return page$1.params.id?"Inject custom system message at the beginning of the conversation":"Add custom system message for a new conversation"}return{get callbacks(){return get$3(callbacks)}, +isItemEnabled,isItemVisible,getSystemMessageTooltip}}var root_5$o=from_html('<span class="sr-only"> </span> <!>',1),root_6$j=from_html("<p> </p>"),root_3$u=from_html("<!> <!>",1),root_10$c=from_html("<!> <span> </span>",1),root_14$5=from_html("<!> <span> </span>",1),root_15$7=from_html("<p> </p>"),root_12$7=from_html("<!> <!>",1),root_20$4=from_html("<!> <span> </span>",1),root_21$5=from_html("<p>PDFs will be converted to text. Image-based PDFs may not work properly.</p>"),root_17$8=from_html("<\ +!> <!>",1),root_26=from_html("<!> <span> </span>",1),root_27$1=from_html("<p> </p>"),root_24$1=from_html("<!> <!>",1),root_30$1=from_html("<!> <span> </span>",1),root_7$j=from_html("<!> <!> <!> <!> <!> <!> <!>",1),root_1$C=from_html("<!> <!>",1),root$14=from_html("<div><!></div>");function ChatFormActionAttachmentsDropdown($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),hasVisionModality=prop( +$$props,"hasVisionModality",3,!1),hasMcpPromptsSupport=prop($$props,"hasMcpPromptsSupport",3,!1),hasMcpResourcesSupport=prop($$props,"hasMcpResourcesSupport",3,!1),dropdownOpen=state$1(!1);function handleMcpSettingsClick(){set$1(dropdownOpen,!1),$$props.onMcpSettingsClick?.()}const attachmentMenu=useAttachmentMenu(()=>({hasVisionModality:hasVisionModality(),hasAudioModality:hasAudioModality(),hasMcpPromptsSupport:hasMcpPromptsSupport(),hasMcpResourcesSupport:hasMcpResourcesSupport()}),()=>({onFileUpload:$$props. +onFileUpload,onSystemPromptClick:$$props.onSystemPromptClick,onMcpPromptClick:$$props.onMcpPromptClick,onMcpResourcesClick:$$props.onMcpResourcesClick}),()=>{set$1(dropdownOpen,!1)});var div=root$14(),node2=child(div);component(node2,()=>Root$2,($$anchor2,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor2,{get open(){return get$3(dropdownOpen)},set open($$value){set$1(dropdownOpen,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment=root_1$C(),node_1=first_child(fragment);component(node_1, +()=>Dropdown_menu_trigger,($$anchor4,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor4,{name:"Attach files",get disabled(){return disabled()},children:($$anchor5,$$slotProps2)=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);component(node_2,()=>Root$5,($$anchor6,Tooltip_Root)=>{Tooltip_Root($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_2=root_3$u(),node_3=first_child(fragment_2);component(node_3,()=>Tooltip_trigger,($$anchor8,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor8, +{class:"w-full",children:($$anchor9,$$slotProps4)=>{Button($$anchor9,{class:"file-upload-button h-8 w-8 rounded-full p-0",get disabled(){return disabled()},variant:"secondary",type:"button",children:($$anchor10,$$slotProps5)=>{var fragment_4=root_5$o(),span=first_child(fragment_4),text2=child(span,!0);reset(span);var node_4=sibling(span,2);Plus(node_4,{class:"h-4 w-4"}),template_effect(()=>set_text(text2,ATTACHMENT_TOOLTIP_TEXT)),append($$anchor10,fragment_4)},$$slots:{default:!0}})},$$slots:{default:!0}})}); +var node_5=sibling(node_3,2);component(node_5,()=>Tooltip_content,($$anchor8,Tooltip_Content)=>{Tooltip_Content($$anchor8,{children:($$anchor9,$$slotProps4)=>{var p2=root_6$j(),text_1=child(p2,!0);reset(p2),template_effect(()=>set_text(text_1,ATTACHMENT_TOOLTIP_TEXT)),append($$anchor9,p2)},$$slots:{default:!0}})}),append($$anchor7,fragment_2)},$$slots:{default:!0}})}),append($$anchor5,fragment_1)},$$slots:{default:!0}})});var node_6=sibling(node_1,2);component(node_6,()=>Dropdown_menu_content,($$anchor4,DropdownMenu_Content)=>{ +DropdownMenu_Content($$anchor4,{align:"start",class:"w-48",children:($$anchor5,$$slotProps2)=>{var fragment_5=root_7$j(),node_7=first_child(fragment_5);each(node_7,17,()=>ATTACHMENT_FILE_ITEMS,item=>item.id,($$anchor6,item)=>{const enabled=user_derived(()=>attachmentMenu.isItemEnabled(get$3(item).enabledWhen));var fragment_6=comment$2(),node_8=first_child(fragment_6);{var consequent=$$anchor7=>{var fragment_7=comment$2(),node_9=first_child(fragment_7);{let $0=user_derived(()=>get$3(item).class?? +"");component(node_9,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor8,{get class(){return`${get$3($0)??""} flex cursor-pointer items-center gap-2`},onclick:()=>attachmentMenu.callbacks[get$3(item).action](),children:($$anchor9,$$slotProps3)=>{var fragment_8=root_10$c(),node_10=first_child(fragment_8);component(node_10,()=>get$3(item).icon,($$anchor10,item_icon)=>{item_icon($$anchor10,{class:"h-4 w-4"})});var span_1=sibling(node_10,2),text_2=child(span_1,!0);reset( +span_1),template_effect(()=>set_text(text_2,get$3(item).label)),append($$anchor9,fragment_8)},$$slots:{default:!0}})})}append($$anchor7,fragment_7)},consequent_1=$$anchor7=>{var fragment_9=comment$2(),node_11=first_child(fragment_9);component(node_11,()=>Root$5,($$anchor8,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_10=root_12$7(),node_12=first_child(fragment_10);component(node_12,()=>Tooltip_trigger, +($$anchor10,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor10,{class:"w-full",children:($$anchor11,$$slotProps4)=>{var fragment_11=comment$2(),node_13=first_child(fragment_11);{let $0=user_derived(()=>get$3(item).class??"");component(node_13,()=>Dropdown_menu_item,($$anchor12,DropdownMenu_Item_1)=>{DropdownMenu_Item_1($$anchor12,{get class(){return`${get$3($0)??""} flex cursor-pointer items-center gap-2`},disabled:!0,children:($$anchor13,$$slotProps5)=>{var fragment_12=root_14$5(),node_14=first_child( +fragment_12);component(node_14,()=>get$3(item).icon,($$anchor14,item_icon_1)=>{item_icon_1($$anchor14,{class:"h-4 w-4"})});var span_2=sibling(node_14,2),text_3=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_3,get$3(item).label)),append($$anchor13,fragment_12)},$$slots:{default:!0}})})}append($$anchor11,fragment_11)},$$slots:{default:!0}})});var node_15=sibling(node_12,2);component(node_15,()=>Tooltip_content,($$anchor10,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor10,{side:"r\ +ight",children:($$anchor11,$$slotProps4)=>{var p_1=root_15$7(),text_4=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text_4,get$3(item).disabledTooltip)),append($$anchor11,p_1)},$$slots:{default:!0}})}),append($$anchor9,fragment_10)},$$slots:{default:!0}})}),append($$anchor7,fragment_9)};if_block(node_8,$$render=>{get$3(enabled)?$$render(consequent):get$3(item).disabledTooltip&&$$render(consequent_1,1)})}append($$anchor6,fragment_6)});var node_16=sibling(node_7,2);{var consequent_3=$$anchor6=>{ +var fragment_13=comment$2(),node_17=first_child(fragment_13);component(node_17,()=>Root$5,($$anchor7,Tooltip_Root_2)=>{Tooltip_Root_2($$anchor7,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor8,$$slotProps3)=>{var fragment_14=root_17$8(),node_18=first_child(fragment_14);component(node_18,()=>Tooltip_trigger,($$anchor9,Tooltip_Trigger_2)=>{Tooltip_Trigger_2($$anchor9,{class:"w-full",children:($$anchor10,$$slotProps4)=>{var fragment_15=comment$2(),node_19=first_child(fragment_15); +component(node_19,()=>Dropdown_menu_item,($$anchor11,DropdownMenu_Item_2)=>{DropdownMenu_Item_2($$anchor11,{class:"flex cursor-pointer items-center gap-2",get onclick(){return attachmentMenu.callbacks.onFileUpload},children:($$anchor12,$$slotProps5)=>{const pdfItem=user_derived(()=>ATTACHMENT_FILE_ITEMS.find(i=>i.id===AttachmentMenuItemId.PDF));var fragment_16=comment$2(),node_20=first_child(fragment_16);{var consequent_2=$$anchor13=>{var fragment_17=root_20$4(),node_21=first_child(fragment_17); +component(node_21,()=>get$3(pdfItem).icon,($$anchor14,pdfItem_icon)=>{pdfItem_icon($$anchor14,{class:"h-4 w-4"})});var span_3=sibling(node_21,2),text_5=child(span_3,!0);reset(span_3),template_effect(()=>set_text(text_5,get$3(pdfItem).label)),append($$anchor13,fragment_17)};if_block(node_20,$$render=>{get$3(pdfItem)&&$$render(consequent_2)})}append($$anchor12,fragment_16)},$$slots:{default:!0}})}),append($$anchor10,fragment_15)},$$slots:{default:!0}})});var node_22=sibling(node_18,2);component(node_22, +()=>Tooltip_content,($$anchor9,Tooltip_Content_2)=>{Tooltip_Content_2($$anchor9,{side:"right",children:($$anchor10,$$slotProps4)=>{var p_2=root_21$5();append($$anchor10,p_2)},$$slots:{default:!0}})}),append($$anchor8,fragment_14)},$$slots:{default:!0}})}),append($$anchor6,fragment_13)},d2=user_derived(()=>!attachmentMenu.isItemEnabled("hasVisionModality"));if_block(node_16,$$render=>{get$3(d2)&&$$render(consequent_3)})}var node_23=sibling(node_16,2);component(node_23,()=>Dropdown_menu_separator, +($$anchor6,DropdownMenu_Separator)=>{DropdownMenu_Separator($$anchor6,{})});var node_24=sibling(node_23,2);each(node_24,17,()=>ATTACHMENT_EXTRA_ITEMS,item=>item.id,($$anchor6,item)=>{var fragment_18=comment$2(),node_25=first_child(fragment_18);{var consequent_4=$$anchor7=>{var fragment_19=comment$2(),node_26=first_child(fragment_19);component(node_26,()=>Root$5,($$anchor8,Tooltip_Root_3)=>{Tooltip_Root_3($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{ +var fragment_20=root_24$1(),node_27=first_child(fragment_20);component(node_27,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger_3)=>{Tooltip_Trigger_3($$anchor10,{class:"w-full",children:($$anchor11,$$slotProps4)=>{var fragment_21=comment$2(),node_28=first_child(fragment_21);component(node_28,()=>Dropdown_menu_item,($$anchor12,DropdownMenu_Item_3)=>{DropdownMenu_Item_3($$anchor12,{class:"flex cursor-pointer items-center gap-2",onclick:()=>attachmentMenu.callbacks[get$3(item).action](),children:($$anchor13,$$slotProps5)=>{ +var fragment_22=root_26(),node_29=first_child(fragment_22);component(node_29,()=>get$3(item).icon,($$anchor14,item_icon_2)=>{item_icon_2($$anchor14,{class:"h-4 w-4"})});var span_4=sibling(node_29,2),text_6=child(span_4,!0);reset(span_4),template_effect(()=>set_text(text_6,get$3(item).label)),append($$anchor13,fragment_22)},$$slots:{default:!0}})}),append($$anchor11,fragment_21)},$$slots:{default:!0}})});var node_30=sibling(node_27,2);component(node_30,()=>Tooltip_content,($$anchor10,Tooltip_Content_3)=>{ +Tooltip_Content_3($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p_3=root_27$1(),text_7=child(p_3,!0);reset(p_3),template_effect($0=>set_text(text_7,$0),[()=>attachmentMenu.getSystemMessageTooltip()]),append($$anchor11,p_3)},$$slots:{default:!0}})}),append($$anchor9,fragment_20)},$$slots:{default:!0}})}),append($$anchor7,fragment_19)};if_block(node_25,$$render=>{get$3(item).id===AttachmentMenuItemId.SYSTEM_MESSAGE&&$$render(consequent_4)})}append($$anchor6,fragment_18)});var node_31=sibling( +node_24,2);ChatFormActionToolsSubmenu(node_31,{});var node_32=sibling(node_31,2);ChatFormActionMcpServersSubmenu(node_32,{onMcpSettingsClick:handleMcpSettingsClick});var node_33=sibling(node_32,2);each(node_33,17,()=>ATTACHMENT_MCP_ITEMS,item=>item.id,($$anchor6,item)=>{var fragment_23=comment$2(),node_34=first_child(fragment_23);{var consequent_5=$$anchor7=>{var fragment_24=comment$2(),node_35=first_child(fragment_24);component(node_35,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item_4)=>{DropdownMenu_Item_4( +$$anchor8,{class:"flex cursor-pointer items-center gap-2",onclick:()=>attachmentMenu.callbacks[get$3(item).action](),children:($$anchor9,$$slotProps3)=>{var fragment_25=root_30$1(),node_36=first_child(fragment_25);component(node_36,()=>get$3(item).icon,($$anchor10,item_icon_3)=>{item_icon_3($$anchor10,{class:"h-4 w-4"})});var span_5=sibling(node_36,2),text_8=child(span_5,!0);reset(span_5),template_effect(()=>set_text(text_8,get$3(item).label)),append($$anchor9,fragment_25)},$$slots:{default:!0}})}), +append($$anchor7,fragment_24)},d_12=user_derived(()=>attachmentMenu.isItemVisible(get$3(item).visibleWhen));if_block(node_34,$$render=>{get$3(d_12)&&$$render(consequent_5)})}append($$anchor6,fragment_23)}),append($$anchor5,fragment_5)},$$slots:{default:!0}})}),append($$anchor3,fragment)},$$slots:{default:!0}})}),reset(div),template_effect(()=>set_class(div,1,`flex items-center gap-1 ${className()??""}`)),append($$anchor,div),pop()}function Sheet_overlay($$anchor,$$props){push$1($$props,!0);let ref2=prop( +$$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",$$props.class));component(node2,()=>Dialog_overlay$1,($$anchor2,SheetPrimitive_Overlay)=>{SheetPrimitive_Overlay($$anchor2,spread_props({"data-slot":"sheet-overlay", +get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const sheetVariants=tv({base:`border-border/30 dark:border-border/20 data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-sm transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 ${PANEL_CLASSES}`,variants:{side:{top:"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in\ +-from-top inset-x-0 top-0 h-auto border-b",bottom:"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",left:"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",right:"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm"}},defaultVariants:{side:"right"}});var root_3$t=from_html('<!> <\ +span class="sr-only">Close</span>',1),root_2$J=from_html("<!> <!>",1),root_1$B=from_html("<!> <!>",1);function Sheet_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),side=prop($$props,"side",3,"right"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","side","portalProps","children"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,SheetPrimitive_Portal)=>{SheetPrimitive_Portal($$anchor2,spread_props( +()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$B(),node_1=first_child(fragment_1);Sheet_overlay(node_1,{});var node_2=sibling(node_1,2);{let $0=user_derived(()=>cn$1(sheetVariants({side:side()}),$$props.class));component(node_2,()=>Dialog_content$1,($$anchor4,SheetPrimitive_Content)=>{SheetPrimitive_Content($$anchor4,spread_props({"data-slot":"sheet-content",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor5,$$slotProps2)=>{ +var fragment_2=root_2$J(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children??noop$3);var node_4=sibling(node_3,2);component(node_4,()=>Dialog_close,($$anchor6,SheetPrimitive_Close)=>{SheetPrimitive_Close($$anchor6,{class:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none",children:($$anchor7,$$slotProps3)=>{ +var fragment_3=root_3$t(),node_5=first_child(fragment_3);X(node_5,{class:"size-4"}),next$1(2),append($$anchor7,fragment_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}var root$13=from_html("<div><!></div>");function Sheet_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","cl\ +ass","children"]);var div=root$13();attribute_effect(div,$0=>({"data-slot":"sheet-header",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-1.5 p-4",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}function Sheet_title($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(), +node2=first_child(fragment);{let $0=user_derived(()=>cn$1("font-semibold text-foreground",$$props.class));component(node2,()=>Dialog_title$1,($$anchor2,SheetPrimitive_Title)=>{SheetPrimitive_Title($$anchor2,spread_props({"data-slot":"sheet-title",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}function Sheet_description($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props( +$$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("text-sm text-muted-foreground",$$props.class));component(node2,()=>Dialog_description$1,($$anchor2,SheetPrimitive_Description)=>{SheetPrimitive_Description($$anchor2,spread_props({"data-slot":"sheet-description",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}const Root$1=Dialog; +var root_2$I=from_html('<span class="sr-only"> </span> <!>',1),root_4$k=from_html("<!> <!>",1),root_8$h=from_html('<button type="button"><!> <span> </span></button>'),root_11$a=from_html('<button type="button" disabled=""><!> <span> </span></button>'),root_12$6=from_html("<p> </p>"),root_10$b=from_html("<!> <!>",1),root_16$4=from_html('<button type="button"><!> <span> </span></button>'),root_17$7=from_html("<p>PDFs will be converted to text. Image-based PDFs may not work properly.</p>"),root_15$6=from_html( +"<!> <!>",1),root_21$4=from_html('<button type="button"><!> <span> </span></button>'),root_22=from_html("<p> </p>"),root_20$3=from_html("<!> <!>",1),root_24=from_html('<button type="button"><!> <span> </span></button>'),root_3$s=from_html('<!> <div class="flex flex-col gap-1 px-1.5 pb-2"><!> <!> <!> <div class="my-2 border-t"></div> <!> <!> <!></div>',1),root_1$A=from_html("<!> <!>",1),root$12=from_html("<div><!></div>");function ChatFormActionAttachmentsSheet($$anchor,$$props){push$1($$props,!0); +let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),hasVisionModality=prop($$props,"hasVisionModality",3,!1),hasMcpPromptsSupport=prop($$props,"hasMcpPromptsSupport",3,!1),hasMcpResourcesSupport=prop($$props,"hasMcpResourcesSupport",3,!1),sheetOpen=state$1(!1);const attachmentMenu=useAttachmentMenu(()=>({hasVisionModality:hasVisionModality(),hasAudioModality:hasAudioModality(),hasMcpPromptsSupport:hasMcpPromptsSupport(), +hasMcpResourcesSupport:hasMcpResourcesSupport()}),()=>({onFileUpload:$$props.onFileUpload,onSystemPromptClick:$$props.onSystemPromptClick,onMcpPromptClick:$$props.onMcpPromptClick,onMcpResourcesClick:$$props.onMcpResourcesClick}),()=>{set$1(sheetOpen,!1)});function handleMcpSettingsClick(){set$1(sheetOpen,!1),$$props.onMcpSettingsClick?.()}const sheetItemClass="flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-left text-sm transition-colors hover:bg-accent active:bg-accent disabled:curs\ +or-not-allowed disabled:opacity-50";var div=root$12(),node2=child(div);component(node2,()=>Root$1,($$anchor2,Sheet_Root)=>{Sheet_Root($$anchor2,{get open(){return get$3(sheetOpen)},set open($$value){set$1(sheetOpen,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment=root_1$A(),node_1=first_child(fragment);Button(node_1,{class:"file-upload-button h-8 w-8 rounded-full p-0",get disabled(){return disabled()},variant:"secondary",type:"button",onclick:()=>set$1(sheetOpen,!0),children:($$anchor4,$$slotProps2)=>{ +var fragment_1=root_2$I(),span=first_child(fragment_1),text2=child(span,!0);reset(span);var node_2=sibling(span,2);Plus(node_2,{class:"h-4 w-4"}),template_effect(()=>set_text(text2,ATTACHMENT_TOOLTIP_TEXT)),append($$anchor4,fragment_1)},$$slots:{default:!0}});var node_3=sibling(node_1,2);component(node_3,()=>Sheet_content,($$anchor4,Sheet_Content)=>{Sheet_Content($$anchor4,{side:"bottom",class:"max-h-[85vh] gap-0 overflow-y-auto",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_3$s(),node_4=first_child( +fragment_2);component(node_4,()=>Sheet_header,($$anchor6,Sheet_Header)=>{Sheet_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_4$k(),node_5=first_child(fragment_3);component(node_5,()=>Sheet_title,($$anchor8,Sheet_Title)=>{Sheet_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8("Add to chat");append($$anchor9,text_1)},$$slots:{default:!0}})});var node_6=sibling(node_5,2);component(node_6,()=>Sheet_description,($$anchor8,Sheet_Description)=>{ +Sheet_Description($$anchor8,{class:"sr-only",children:($$anchor9,$$slotProps4)=>{next$1();var text_2=text$8("Add files, system prompt or configure MCP servers");append($$anchor9,text_2)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var div_1=sibling(node_4,2),node_7=child(div_1);each(node_7,17,()=>ATTACHMENT_FILE_ITEMS,item=>item.id,($$anchor6,item)=>{const enabled=user_derived(()=>attachmentMenu.isItemEnabled(get$3(item).enabledWhen));var fragment_4=comment$2(), +node_8=first_child(fragment_4);{var consequent=$$anchor7=>{var button=root_8$h();set_class(button,1,clsx(sheetItemClass));var node_9=child(button);component(node_9,()=>get$3(item).icon,($$anchor8,item_icon)=>{item_icon($$anchor8,{class:"h-4 w-4 shrink-0"})});var span_1=sibling(node_9,2),text_3=child(span_1,!0);reset(span_1),reset(button),template_effect(()=>set_text(text_3,get$3(item).label)),delegated("click",button,()=>attachmentMenu.callbacks[get$3(item).action]()),append($$anchor7,button)},consequent_1=$$anchor7=>{ +var fragment_5=comment$2(),node_10=first_child(fragment_5);component(node_10,()=>Root$5,($$anchor8,Tooltip_Root)=>{Tooltip_Root($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_6=root_10$b(),node_11=first_child(fragment_6);component(node_11,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor10,{children:($$anchor11,$$slotProps4)=>{var button_1=root_11$a();set_class(button_1,1,clsx(sheetItemClass));var node_12=child( +button_1);component(node_12,()=>get$3(item).icon,($$anchor12,item_icon_1)=>{item_icon_1($$anchor12,{class:"h-4 w-4 shrink-0"})});var span_2=sibling(node_12,2),text_4=child(span_2,!0);reset(span_2),reset(button_1),template_effect(()=>set_text(text_4,get$3(item).label)),append($$anchor11,button_1)},$$slots:{default:!0}})});var node_13=sibling(node_11,2);component(node_13,()=>Tooltip_content,($$anchor10,Tooltip_Content)=>{Tooltip_Content($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{ +var p2=root_12$6(),text_5=child(p2,!0);reset(p2),template_effect(()=>set_text(text_5,get$3(item).disabledTooltip)),append($$anchor11,p2)},$$slots:{default:!0}})}),append($$anchor9,fragment_6)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)};if_block(node_8,$$render=>{get$3(enabled)?$$render(consequent):get$3(item).disabledTooltip&&$$render(consequent_1,1)})}append($$anchor6,fragment_4)});var node_14=sibling(node_7,2);{var consequent_3=$$anchor6=>{const pdfItem=user_derived(()=>ATTACHMENT_FILE_ITEMS. +find(i=>i.id===AttachmentMenuItemId.PDF));var fragment_7=comment$2(),node_15=first_child(fragment_7);{var consequent_2=$$anchor7=>{var fragment_8=comment$2(),node_16=first_child(fragment_8);component(node_16,()=>Root$5,($$anchor8,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{var fragment_9=root_15$6(),node_17=first_child(fragment_9);component(node_17,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger_1)=>{Tooltip_Trigger_1( +$$anchor10,{children:($$anchor11,$$slotProps4)=>{var button_2=root_16$4();set_class(button_2,1,clsx(sheetItemClass));var node_18=child(button_2);component(node_18,()=>get$3(pdfItem).icon,($$anchor12,pdfItem_icon)=>{pdfItem_icon($$anchor12,{class:"h-4 w-4 shrink-0"})});var span_3=sibling(node_18,2),text_6=child(span_3,!0);reset(span_3),reset(button_2),template_effect(()=>set_text(text_6,get$3(pdfItem).label)),delegated("click",button_2,()=>attachmentMenu.callbacks[get$3(pdfItem).action]()),append( +$$anchor11,button_2)},$$slots:{default:!0}})});var node_19=sibling(node_17,2);component(node_19,()=>Tooltip_content,($$anchor10,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p_1=root_17$7();append($$anchor11,p_1)},$$slots:{default:!0}})}),append($$anchor9,fragment_9)},$$slots:{default:!0}})}),append($$anchor7,fragment_8)};if_block(node_15,$$render=>{get$3(pdfItem)&&$$render(consequent_2)})}append($$anchor6,fragment_7)},d2=user_derived(()=>!attachmentMenu. +isItemEnabled("hasVisionModality"));if_block(node_14,$$render=>{get$3(d2)&&$$render(consequent_3)})}var node_20=sibling(node_14,2);each(node_20,17,()=>ATTACHMENT_EXTRA_ITEMS,item=>item.id,($$anchor6,item)=>{var fragment_10=comment$2(),node_21=first_child(fragment_10);{var consequent_4=$$anchor7=>{var fragment_11=comment$2(),node_22=first_child(fragment_11);component(node_22,()=>Root$5,($$anchor8,Tooltip_Root_2)=>{Tooltip_Root_2($$anchor8,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor9,$$slotProps3)=>{ +var fragment_12=root_20$3(),node_23=first_child(fragment_12);component(node_23,()=>Tooltip_trigger,($$anchor10,Tooltip_Trigger_2)=>{Tooltip_Trigger_2($$anchor10,{children:($$anchor11,$$slotProps4)=>{var button_3=root_21$4();set_class(button_3,1,clsx(sheetItemClass));var node_24=child(button_3);component(node_24,()=>get$3(item).icon,($$anchor12,item_icon_2)=>{item_icon_2($$anchor12,{class:"h-4 w-4 shrink-0"})});var span_4=sibling(node_24,2),text_7=child(span_4,!0);reset(span_4),reset(button_3),template_effect( +()=>set_text(text_7,get$3(item).label)),delegated("click",button_3,()=>attachmentMenu.callbacks[get$3(item).action]()),append($$anchor11,button_3)},$$slots:{default:!0}})});var node_25=sibling(node_23,2);component(node_25,()=>Tooltip_content,($$anchor10,Tooltip_Content_2)=>{Tooltip_Content_2($$anchor10,{side:"right",children:($$anchor11,$$slotProps4)=>{var p_2=root_22(),text_8=child(p_2,!0);reset(p_2),template_effect($0=>set_text(text_8,$0),[()=>attachmentMenu.getSystemMessageTooltip()]),append( +$$anchor11,p_2)},$$slots:{default:!0}})}),append($$anchor9,fragment_12)},$$slots:{default:!0}})}),append($$anchor7,fragment_11)};if_block(node_21,$$render=>{get$3(item).id===AttachmentMenuItemId.SYSTEM_MESSAGE&&$$render(consequent_4)})}append($$anchor6,fragment_10)});var node_26=sibling(node_20,4);ChatFormActionToolsSubmenu(node_26,{});var node_27=sibling(node_26,2);ChatFormActionMcpServersSubmenu(node_27,{onMcpSettingsClick:handleMcpSettingsClick});var node_28=sibling(node_27,2);each(node_28,17, +()=>ATTACHMENT_MCP_ITEMS,item=>item.id,($$anchor6,item)=>{var fragment_13=comment$2(),node_29=first_child(fragment_13);{var consequent_5=$$anchor7=>{var button_4=root_24();set_class(button_4,1,clsx(sheetItemClass));var node_30=child(button_4);component(node_30,()=>get$3(item).icon,($$anchor8,item_icon_3)=>{item_icon_3($$anchor8,{class:"h-4 w-4 shrink-0"})});var span_5=sibling(node_30,2),text_9=child(span_5,!0);reset(span_5),reset(button_4),template_effect(()=>set_text(text_9,get$3(item).label)), +delegated("click",button_4,()=>attachmentMenu.callbacks[get$3(item).action]()),append($$anchor7,button_4)},d_12=user_derived(()=>attachmentMenu.isItemVisible(get$3(item).visibleWhen));if_block(node_29,$$render=>{get$3(d_12)&&$$render(consequent_5)})}append($$anchor6,fragment_13)}),reset(div_1),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment)},$$slots:{default:!0}})}),reset(div),template_effect(()=>set_class(div,1,`flex items-center gap-1 ${className()??""}`)),append( +$$anchor,div),pop()}delegate(["click"]);var root_3$r=from_html('<span class="sr-only"> </span> <!>',1),root_7$i=from_html("<p>Current model does not support audio</p>"),root_1$z=from_html("<!> <!>",1),root$11=from_html("<div><!></div>");function ChatFormActionRecord($$anchor,$$props){let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),hasAudioModality=prop($$props,"hasAudioModality",3,!1),isLoading2=prop($$props,"isLoading",3,!1),isRecording=prop($$props,"isRecording", +3,!1);var div=root$11(),node2=child(div);component(node2,()=>Root$5,($$anchor2,Tooltip_Root)=>{Tooltip_Root($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment=root_1$z(),node_1=first_child(fragment);component(node_1,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor4,{children:($$anchor5,$$slotProps2)=>{{let $0=user_derived(()=>isRecording()?"animate-pulse bg-red-500 text-white hover:bg-red-600":""),$1=user_derived(()=>disabled()||isLoading2()||!hasAudioModality()); +Button($$anchor5,{get class(){return`h-8 w-8 rounded-full p-0 ${get$3($0)??""}`},get disabled(){return get$3($1)},get onclick(){return $$props.onMicClick},type:"button",children:($$anchor6,$$slotProps3)=>{var fragment_2=root_3$r(),span=first_child(fragment_2),text2=child(span,!0);reset(span);var node_2=sibling(span,2);{var consequent=$$anchor7=>{Square($$anchor7,{class:"h-4 w-4 animate-pulse fill-white"})},alternate=$$anchor7=>{Mic($$anchor7,{class:"h-4 w-4"})};if_block(node_2,$$render=>{isRecording()? +$$render(consequent):$$render(alternate,-1)})}template_effect(()=>set_text(text2,isRecording()?"Stop recording":"Start recording")),append($$anchor6,fragment_2)},$$slots:{default:!0}})}},$$slots:{default:!0}})});var node_3=sibling(node_1,2);{var consequent_1=$$anchor4=>{var fragment_5=comment$2(),node_4=first_child(fragment_5);component(node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_7$i();append($$anchor6,p2)},$$slots:{ +default:!0}})}),append($$anchor4,fragment_5)};if_block(node_3,$$render=>{hasAudioModality()||$$render(consequent_1)})}append($$anchor3,fragment)},$$slots:{default:!0}})}),reset(div),template_effect(()=>set_class(div,1,`flex items-center gap-1 ${className()??""}`)),append($$anchor,div)}var root_6$i=from_html('<span class="sr-only">Stop</span> <!>',1),root$10=from_html('<div style="container-type: inline-size"><div class="mr-auto flex items-center gap-2"><!></div> <div class="ml-auto flex items-ce\ +nter gap-2"><!></div> <!></div>');function ChatFormActions($$anchor,$$props){push$1($$props,!0);let canSend=prop($$props,"canSend",3,!1),className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),isLoading2=prop($$props,"isLoading",3,!1),isRecording=prop($$props,"isRecording",3,!1),hasText=prop($$props,"hasText",3,!1),uploadedFiles=prop($$props,"uploadedFiles",19,()=>[]),currentConfig=user_derived(config$1),isRouter=user_derived(isRouterMode),isOffline=user_derived(()=>!!serverError()), +conversationModel=user_derived(()=>chatStore.getConversationModel(activeMessages())),lastSyncedConversationModel=null;user_effect(()=>{if(get$3(conversationModel)&&get$3(conversationModel)!==lastSyncedConversationModel)lastSyncedConversationModel=get$3(conversationModel),modelsStore.selectModelByName(get$3(conversationModel));else if(get$3(isRouter)&&!modelsStore.selectedModelId&&modelsStore.loadedModelIds.length>0){lastSyncedConversationModel=null;const first=modelOptions().find(m=>modelsStore. +loadedModelIds.includes(m.model));first&&modelsStore.selectModelById(first.id)}});let activeModelId=user_derived(()=>{const options=modelOptions();if(!get$3(isRouter))return options.length>0?options[0].model:null;const selectedId=selectedModelId();if(selectedId){const model=options.find(m=>m.id===selectedId);if(model)return model.model}if(get$3(conversationModel)){const model=options.find(m=>m.model===get$3(conversationModel));if(model)return model.model}return null}),modelPropsVersion=state$1(0); +user_effect(()=>{get$3(activeModelId)&&(modelsStore.getModelProps(get$3(activeModelId))||modelsStore.fetchModelProps(get$3(activeModelId)).then(()=>{update$1(modelPropsVersion)}))});let hasAudioModality=user_derived(()=>get$3(activeModelId)?(get$3(modelPropsVersion),modelsStore.modelSupportsAudio(get$3(activeModelId))):!1),hasVisionModality=user_derived(()=>get$3(activeModelId)?(get$3(modelPropsVersion),modelsStore.modelSupportsVision(get$3(activeModelId))):!1),hasAudioAttachments=user_derived(()=>uploadedFiles(). +some(file=>getFileTypeCategory(file.type)===FileTypeCategory.AUDIO)),shouldShowRecordButton=user_derived(()=>get$3(hasAudioModality)&&!hasText()&&!get$3(hasAudioAttachments)&&get$3(currentConfig).autoMicOnEmpty),hasModelSelected=user_derived(()=>!get$3(isRouter)||!!get$3(conversationModel)||!!selectedModelId()),isSelectedModelInCache=user_derived(()=>{if(!get$3(isRouter))return!0;if(get$3(conversationModel))return modelOptions().some(option2=>option2.model===get$3(conversationModel));const currentModelId=selectedModelId(); +return currentModelId?modelOptions().some(option2=>option2.id===currentModelId):!1}),submitTooltip=user_derived(()=>get$3(hasModelSelected)?get$3(isSelectedModelInCache)?"":"Selected model is not available, please select another":"Please select a model first"),selectorModelRef=state$1(void 0),isMobile=new IsMobile;function openModelSelector(){get$3(selectorModelRef)?.open()}let hasMcpPromptsSupport=user_derived(()=>{const perChatOverrides=conversationsStore.getAllMcpServerOverrides();return mcpStore. +hasPromptsCapability(perChatOverrides)}),hasMcpResourcesSupport=user_derived(()=>{const perChatOverrides=conversationsStore.getAllMcpServerOverrides();return mcpStore.hasResourcesCapability(perChatOverrides)});var $$exports={openModelSelector},div=root$10(),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{ChatFormActionAttachmentsSheet($$anchor2,{get disabled(){return disabled()},get hasAudioModality(){return get$3(hasAudioModality)},get hasVisionModality(){return get$3(hasVisionModality)}, +get hasMcpPromptsSupport(){return get$3(hasMcpPromptsSupport)},get hasMcpResourcesSupport(){return get$3(hasMcpResourcesSupport)},get onFileUpload(){return $$props.onFileUpload},get onSystemPromptClick(){return $$props.onSystemPromptClick},get onMcpPromptClick(){return $$props.onMcpPromptClick},onMcpSettingsClick:()=>goto("#/settings/mcp"),get onMcpResourcesClick(){return $$props.onMcpResourcesClick}})},alternate=$$anchor2=>{ChatFormActionAttachmentsDropdown($$anchor2,{get disabled(){return disabled()}, +get hasAudioModality(){return get$3(hasAudioModality)},get hasVisionModality(){return get$3(hasVisionModality)},get hasMcpPromptsSupport(){return get$3(hasMcpPromptsSupport)},get hasMcpResourcesSupport(){return get$3(hasMcpResourcesSupport)},get onFileUpload(){return $$props.onFileUpload},get onSystemPromptClick(){return $$props.onSystemPromptClick},get onMcpPromptClick(){return $$props.onMcpPromptClick},get onMcpResourcesClick(){return $$props.onMcpResourcesClick},onMcpSettingsClick:()=>goto("#\ +/settings/mcp")})};if_block(node2,$$render=>{isMobile.current?$$render(consequent):$$render(alternate,-1)})}reset(div_1);var div_2=sibling(div_1,2),node_1=child(div_2);{var consequent_1=$$anchor2=>{{let $0=user_derived(()=>disabled()||get$3(isOffline));bind_this(ModelsSelectorSheet($$anchor2,{get disabled(){return get$3($0)},get currentModel(){return get$3(conversationModel)},forceForegroundText:!0,useGlobalSelection:!0}),$$value=>set$1(selectorModelRef,$$value,!0),()=>get$3(selectorModelRef))}}, +alternate_1=$$anchor2=>{{let $0=user_derived(()=>disabled()||get$3(isOffline));bind_this(ModelsSelectorDropdown($$anchor2,{get disabled(){return get$3($0)},get currentModel(){return get$3(conversationModel)},forceForegroundText:!0,useGlobalSelection:!0}),$$value=>set$1(selectorModelRef,$$value,!0),()=>get$3(selectorModelRef))}};if_block(node_1,$$render=>{isMobile.current?$$render(consequent_1):$$render(alternate_1,-1)})}reset(div_2);var node_2=sibling(div_2,2);{var consequent_2=$$anchor2=>{Button( +$$anchor2,{type:"button",variant:"secondary",get onclick(){return $$props.onStop},class:"group h-8 w-8 rounded-full p-0 hover:bg-destructive/10!",children:($$anchor3,$$slotProps)=>{var fragment_5=root_6$i(),node_3=sibling(first_child(fragment_5),2);Square(node_3,{class:"h-8 w-8 fill-muted-foreground stroke-muted-foreground group-hover:fill-destructive group-hover:stroke-destructive hover:fill-destructive hover:stroke-destructive"}),append($$anchor3,fragment_5)},$$slots:{default:!0}})},consequent_3=$$anchor2=>{ +ChatFormActionRecord($$anchor2,{get disabled(){return disabled()},get hasAudioModality(){return get$3(hasAudioModality)},get isLoading(){return isLoading2()},get isRecording(){return isRecording()},get onMicClick(){return $$props.onMicClick}})},alternate_2=$$anchor2=>{{let $0=user_derived(()=>canSend()&&get$3(hasModelSelected)&&get$3(isSelectedModelInCache)),$1=user_derived(()=>get$3(hasModelSelected)&&!get$3(isSelectedModelInCache));ChatFormActionSubmit($$anchor2,{get canSend(){return get$3($0)}, +get disabled(){return disabled()},get tooltipLabel(){return get$3(submitTooltip)},get showErrorState(){return get$3($1)}})}};if_block(node_2,$$render=>{isLoading2()&&!hasText()?$$render(consequent_2):get$3(shouldShowRecordButton)?$$render(consequent_3,1):$$render(alternate_2,-1)})}return reset(div),template_effect(()=>set_class(div,1,`flex w-full items-center gap-3 ${className()??""}`)),append($$anchor,div),pop($$exports)}var root_2$H=from_html('<span class="sr-only">Send</span> <!>',1),root_6$h=from_html( +"<p> </p>"),root_4$j=from_html("<!> <!>",1);function ChatFormActionSubmit($$anchor,$$props){push$1($$props,!0);const submitButton=($$anchor2,$$arg0)=>{let props=derived_safe_equal(()=>fallback($$arg0?.(),()=>({}),!0));{let $0=user_derived(()=>cn$1("h-8 w-8 rounded-full p-0",showErrorState()?"bg-red-400/10 text-red-400 hover:bg-red-400/20 hover:text-red-400 disabled:opacity-100":""));Button($$anchor2,spread_props({type:"submit",get disabled(){return get$3(isDisabled)},get class(){return get$3($0)}}, +()=>get$3(props),{children:($$anchor3,$$slotProps)=>{var fragment_1=root_2$H(),node2=sibling(first_child(fragment_1),2);Arrow_up(node2,{class:"h-12 w-12"}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))}};let canSend=prop($$props,"canSend",3,!1),disabled=prop($$props,"disabled",3,!1),showErrorState=prop($$props,"showErrorState",3,!1),isDisabled=user_derived(()=>!canSend()||disabled());var fragment_2=comment$2(),node_1=first_child(fragment_2);{var consequent=$$anchor2=>{var fragment_3=comment$2(), +node_2=first_child(fragment_3);component(node_2,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_4=root_4$j(),node_3=first_child(fragment_4);component(node_3,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{submitButton($$anchor6)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5, +{children:($$anchor6,$$slotProps2)=>{var p2=root_6$h(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,$$props.tooltipLabel)),append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})}),append($$anchor2,fragment_3)},alternate=$$anchor2=>{submitButton($$anchor2)};if_block(node_1,$$render=>{$$props.tooltipLabel?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment_2),pop()}function useToolsPanel(){const expandedGroups=new SvelteSet, +groups=user_derived(()=>toolsStore.toolGroups),activeGroups=user_derived(()=>get$3(groups).filter(g=>g.source!==ToolSource.MCP||!g.serverId||conversationsStore.isMcpServerEnabledForChat(g.serverId))),totalToolCount=user_derived(()=>get$3(activeGroups).reduce((n,g)=>n+g.tools.length,0)),noToolsInfoMessage=user_derived(()=>toolsStore.loading||toolsStore.toolGroups.length>0?null:toolsStore.isToolsEndpointUnreachable?"To enable Built-In Tools you need to run llama-server with --tools all or --tools \ +<name> flag. To see MCP Tools you need to add / enable MCP Server(s).":toolsStore.error?null:"To enable Built-In Tools you need to run llama-server with --tools all or --tools <name> flag. To see MCP Tools you need to add / enable MCP Server(s).");function getGroupCheckedState(group){return{checked:toolsStore.isGroupFullyEnabled(group),indeterminate:toolsStore.isGroupPartiallyEnabled(group)}}function getEnabledToolCount(group){return group.tools.filter(tool=>toolsStore.isToolEnabled(tool.function. +name)).length}function getFavicon(group){if(group.source!==ToolSource.MCP)return null;for(const server of mcpStore.getServersSorted())if(mcpStore.getServerLabel(server)===group.label)return mcpStore.getServerFavicon(server.id);return null}function isGroupDisabled(group){return group.source===ToolSource.MCP&&!!group.serverId&&!conversationsStore.isMcpServerEnabledForChat(group.serverId)}function toggleGroupExpanded(label){expandedGroups.has(label)?expandedGroups.delete(label):expandedGroups.add(label)} +function handleOpen(){toolsStore.builtinTools.length===0&&!toolsStore.loading&&toolsStore.fetchBuiltinTools(),mcpStore.runHealthChecksForServers(mcpStore.getServersSorted().filter(s2=>s2.enabled))}return{expandedGroups,get groups(){return get$3(groups)},get activeGroups(){return get$3(activeGroups)},get totalToolCount(){return get$3(totalToolCount)},get noToolsInfoMessage(){return get$3(noToolsInfoMessage)},getGroupCheckedState,getEnabledToolCount,getFavicon,isGroupDisabled,toggleGroupExpanded,handleOpen}} +var root_2$G=from_html("<!> <span>Tools</span>",1),root_5$n=from_html('<div class="px-3 py-4 text-center text-sm text-muted-foreground"><!> Loading tools...</div>'),root_6$g=from_html('<div class="grid gap-2.5 px-3 py-4 text-sm text-muted-foreground"><span class="flex gap-2"><!> <span>Run llama-server with <code>--tools</code> flag to enable <strong>Built-in Tools</strong>.</span></span> <span class="flex gap-2"><!> <span> <strong>MCP Tools</strong>.</span></span></div>'),root_7$h=from_html('<di\ +v class="px-3 py-4 text-center text-sm text-muted-foreground">Failed to load tools</div>'),root_8$g=from_html('<div class="flex gap-2 px-3 py-4 text-sm text-muted-foreground"><!> <span> </span></div>'),root_9$e=from_html('<div class="px-3 py-4 text-center text-sm text-muted-foreground">No tools available</div>'),root_16$3=from_html('<img alt="" class="h-4 w-4 shrink-0 rounded-sm"/>'),root_13$7=from_html('<!> <span class="inline-flex min-w-0 items-center gap-1.5 font-medium"><!> <span class="trun\ +cate"> </span></span> <span class="ml-auto shrink-0 text-xs text-muted-foreground"> </span>',1),root_19$6=from_html("<p> </p>"),root_17$6=from_html("<!> <!>",1),root_21$3=from_html('<button type="button" class="flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm transition-colors hover:bg-muted/50"><!> <span class="min-w-0 flex-1 truncate font-mono text-[12px]"> </span></button>'),root_20$2=from_html('<div class="ml-4 flex flex-col gap-0.5 border-l border-border/50 pl-2"></div>'), +root_12$5=from_html('<div class="flex items-center gap-1"><!> <!></div> <!>',1),root_10$a=from_html('<div class="max-h-80 overflow-y-auto p-2 pr-1"></div>'),root_1$y=from_html("<!> <!>",1);function ChatFormActionToolsSubmenu($$anchor,$$props){push$1($$props,!0);const toolsPanel=useToolsPanel(),hasMcpServersAvailable=user_derived(()=>mcpStore.getServersSorted().length>0);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Sub,($$anchor2,DropdownMenu_Sub)=>{DropdownMenu_Sub($$anchor2, +{onOpenChange:open2=>open2&&toolsPanel.handleOpen(),children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$y(),node_1=first_child(fragment_1);component(node_1,()=>Dropdown_menu_sub_trigger,($$anchor4,DropdownMenu_SubTrigger)=>{DropdownMenu_SubTrigger($$anchor4,{class:"flex cursor-pointer items-center gap-2",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$G(),node_2=first_child(fragment_2);Pencil_ruler(node_2,{class:"h-4 w-4"}),next$1(2),append($$anchor5,fragment_2)},$$slots:{default:!0}})}); +var node_3=sibling(node_1,2);component(node_3,()=>Dropdown_menu_sub_content,($$anchor4,DropdownMenu_SubContent)=>{DropdownMenu_SubContent($$anchor4,{class:"w-72 p-0",children:($$anchor5,$$slotProps2)=>{var fragment_3=comment$2(),node_4=first_child(fragment_3);{var consequent_4=$$anchor6=>{var fragment_4=comment$2(),node_5=first_child(fragment_4);{var consequent=$$anchor7=>{var div=root_5$n(),node_6=child(div);Loader_circle(node_6,{class:"mx-auto mb-1 h-4 w-4 animate-spin"}),next$1(),reset(div),append( +$$anchor7,div)},consequent_1=$$anchor7=>{var div_1=root_6$g(),span=child(div_1),node_7=child(span);Info$1(node_7,{class:"mt-0.5 h-4 w-4 shrink-0"}),next$1(2),reset(span);var span_1=sibling(span,2),node_8=child(span_1);Info$1(node_8,{class:"mt-0.5 h-4 w-4 shrink-0"});var span_2=sibling(node_8,2),text2=child(span_2);next$1(2),reset(span_2),reset(span_1),reset(div_1),template_effect(()=>set_text(text2,`${get$3(hasMcpServersAvailable)?"Enable":"Add"} MCP Server(s) to access `)),append($$anchor7,div_1)}, +consequent_2=$$anchor7=>{var div_2=root_7$h();append($$anchor7,div_2)},consequent_3=$$anchor7=>{var div_3=root_8$g(),node_9=child(div_3);Info$1(node_9,{class:"mt-0.5 h-4 w-4 shrink-0"});var span_3=sibling(node_9,2),text_1=child(span_3,!0);reset(span_3),reset(div_3),template_effect(()=>set_text(text_1,toolsPanel.noToolsInfoMessage)),append($$anchor7,div_3)},alternate=$$anchor7=>{var div_4=root_9$e();append($$anchor7,div_4)};if_block(node_5,$$render=>{toolsStore.loading?$$render(consequent):toolsStore. +isToolsEndpointUnreachable?$$render(consequent_1,1):toolsStore.error?$$render(consequent_2,2):toolsPanel.noToolsInfoMessage?$$render(consequent_3,3):$$render(alternate,-1)})}append($$anchor6,fragment_4)},alternate_2=$$anchor6=>{var div_5=root_10$a();each(div_5,21,()=>toolsPanel.activeGroups,group=>group.label,($$anchor7,group)=>{const isExpanded=user_derived(()=>toolsPanel.expandedGroups.has(get$3(group).label)),computed_const=user_derived(()=>{const{checked,indeterminate}=toolsPanel.getGroupCheckedState( +get$3(group));return{checked,indeterminate}}),favicon=user_derived(()=>toolsPanel.getFavicon(get$3(group)));var fragment_5=comment$2(),node_10=first_child(fragment_5);component(node_10,()=>Collapsible,($$anchor8,Collapsible_Root)=>{Collapsible_Root($$anchor8,{get open(){return get$3(isExpanded)},onOpenChange:()=>toolsPanel.toggleGroupExpanded(get$3(group).label),children:($$anchor9,$$slotProps3)=>{var fragment_6=root_12$5(),div_6=first_child(fragment_6),node_11=child(div_6);component(node_11,()=>Collapsible_trigger, +($$anchor10,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor10,{class:"flex min-w-0 flex-1 items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-muted/50",children:($$anchor11,$$slotProps4)=>{var fragment_7=root_13$7(),node_12=first_child(fragment_7);{var consequent_5=$$anchor12=>{Chevron_down($$anchor12,{class:"h-3.5 w-3.5 shrink-0"})},alternate_1=$$anchor12=>{Chevron_right($$anchor12,{class:"h-3.5 w-3.5 shrink-0"})};if_block(node_12,$$render=>{get$3(isExpanded)?$$render(consequent_5):$$render( +alternate_1,-1)})}var span_4=sibling(node_12,2),node_13=child(span_4);{var consequent_6=$$anchor12=>{var img=root_16$3();template_effect(()=>set_attribute(img,"src",get$3(favicon))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor12,img)};if_block(node_13,$$render=>{get$3(favicon)&&$$render(consequent_6)})}var span_5=sibling(node_13,2),text_2=child(span_5,!0);reset(span_5),reset(span_4);var span_6=sibling(span_4,2),text_3=child(span_6);reset(span_6), +template_effect($0=>{set_text(text_2,get$3(group).label),set_text(text_3,`${$0??""}/${get$3(group).tools.length??""}`)},[()=>toolsPanel.getEnabledToolCount(get$3(group))]),append($$anchor11,fragment_7)},$$slots:{default:!0}})});var node_14=sibling(node_11,2);component(node_14,()=>Root$5,($$anchor10,Tooltip_Root)=>{Tooltip_Root($$anchor10,{children:($$anchor11,$$slotProps4)=>{var fragment_10=root_17$6(),node_15=first_child(fragment_10);component(node_15,()=>Tooltip_trigger,($$anchor12,Tooltip_Trigger)=>{ +Tooltip_Trigger($$anchor12,{children:($$anchor13,$$slotProps5)=>{Checkbox($$anchor13,{get checked(){return get$3(computed_const).checked},get indeterminate(){return get$3(computed_const).indeterminate},onCheckedChange:()=>toolsStore.toggleGroup(get$3(group)),class:"mr-2 h-4 w-4 shrink-0"})},$$slots:{default:!0}})});var node_16=sibling(node_15,2);component(node_16,()=>Tooltip_content,($$anchor12,Tooltip_Content)=>{Tooltip_Content($$anchor12,{side:"right",children:($$anchor13,$$slotProps5)=>{var p2=root_19$6(), +text_4=child(p2);reset(p2),template_effect(()=>set_text(text_4,`${get$3(computed_const).checked?"Disable":"Enable"} + ${get$3(group).tools.length??""} tool${get$3(group).tools.length!==1?"s":""}`)),append($$anchor13,p2)},$$slots:{default:!0}})}),append($$anchor11,fragment_10)},$$slots:{default:!0}})}),reset(div_6);var node_17=sibling(div_6,2);component(node_17,()=>Collapsible_content,($$anchor10,Collapsible_Content)=>{Collapsible_Content($$anchor10,{children:($$anchor11,$$slotProps4)=>{var div_7=root_20$2();each(div_7,21,()=>get$3(group).tools,tool=>tool.function.name,($$anchor12,tool)=>{var button=root_21$3(), +node_18=child(button);{let $0=user_derived(()=>toolsStore.isToolEnabled(get$3(tool).function.name));Checkbox(node_18,{get checked(){return get$3($0)},onCheckedChange:()=>toolsStore.toggleTool(get$3(tool).function.name),class:"h-4 w-4 shrink-0"})}var span_7=sibling(node_18,2),text_5=child(span_7,!0);reset(span_7),reset(button),template_effect(()=>set_text(text_5,get$3(tool).function.name)),delegated("click",button,()=>toolsStore.toggleTool(get$3(tool).function.name)),append($$anchor12,button)}),reset( +div_7),append($$anchor11,div_7)},$$slots:{default:!0}})}),append($$anchor9,fragment_6)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)}),reset(div_5),append($$anchor6,div_5)};if_block(node_4,$$render=>{toolsPanel.totalToolCount===0?$$render(consequent_4):$$render(alternate_2,-1)})}append($$anchor5,fragment_3)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}delegate(["click"]);var root_2$F=from_html("<!> <span>MCP Servers</sp\ +an>",1),root_6$f=from_html("<!> <span>Manage MCP Servers</span>",1),root_9$d=from_html('<img alt="" class="h-4 w-4 shrink-0 rounded-sm"/>'),root_10$9=from_html('<span class="shrink-0 rounded bg-destructive/15 px-1.5 py-0.5 text-xs text-destructive">Error</span>'),root_8$f=from_html('<button type="button" class="flex w-full items-center justify-between gap-2 rounded-sm px-2 py-2 text-left transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50"><div class="flex min-w-0 f\ +lex-1 items-center gap-2"><!> <span class="truncate text-sm"> </span> <!></div> <!></button>'),root_7$g=from_html('<div class="max-h-64 overflow-y-auto"></div>'),root_12$4=from_html("<!> <span>Add MCP Servers</span>",1),root_11$9=from_html('<div class="px-2 py-3 text-center text-sm text-muted-foreground">No MCP servers configured</div> <!> <!>',1),root_1$x=from_html("<!> <!>",1);function ChatFormActionMcpServersSubmenu($$anchor,$$props){push$1($$props,!0);let mcpSearchQuery=state$1(""),allMcpServers=user_derived( +()=>mcpStore.getServersSorted()),mcpServers=user_derived(()=>get$3(allMcpServers).filter(s2=>s2.enabled)),hasMcpServers=user_derived(()=>get$3(mcpServers).length>0),filteredMcpServers=user_derived(()=>{const query=get$3(mcpSearchQuery).toLowerCase().trim();return query?get$3(mcpServers).filter(s2=>{const name=getServerLabel(s2).toLowerCase(),url2=s2.url.toLowerCase();return name.includes(query)||url2.includes(query)}):get$3(mcpServers)});function getServerLabel(server){return mcpStore.getServerLabel( +server)}function isServerEnabledForChat(serverId){return conversationsStore.isMcpServerEnabledForChat(serverId)}async function toggleServerForChat(serverId){await conversationsStore.toggleMcpServerForChat(serverId)}function handleMcpSubMenuOpen(open2){open2&&(set$1(mcpSearchQuery,""),mcpStore.runHealthChecksForServers(get$3(allMcpServers)))}function handleMcpSettingsClick(){$$props.onMcpSettingsClick?.(),goto(`${get$3(hasMcpServers)?"":"?add"}#/settings/mcp`)}var fragment=comment$2(),node2=first_child( +fragment);component(node2,()=>Sub,($$anchor2,DropdownMenu_Sub)=>{DropdownMenu_Sub($$anchor2,{onOpenChange:handleMcpSubMenuOpen,children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$x(),node_1=first_child(fragment_1);component(node_1,()=>Dropdown_menu_sub_trigger,($$anchor4,DropdownMenu_SubTrigger)=>{DropdownMenu_SubTrigger($$anchor4,{class:"flex cursor-pointer items-center gap-2",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$F(),node_2=first_child(fragment_2);McpLogo(node_2,{class:"\ +h-4 w-4"}),next$1(2),append($$anchor5,fragment_2)},$$slots:{default:!0}})});var node_3=sibling(node_1,2);component(node_3,()=>Dropdown_menu_sub_content,($$anchor4,DropdownMenu_SubContent)=>{DropdownMenu_SubContent($$anchor4,{class:"w-72 pt-0",children:($$anchor5,$$slotProps2)=>{var fragment_3=comment$2(),node_4=first_child(fragment_3);{var consequent_2=$$anchor6=>{{const footer2=$$anchor7=>{var fragment_5=comment$2(),node_5=first_child(fragment_5);component(node_5,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item)=>{ +DropdownMenu_Item($$anchor8,{class:"flex cursor-pointer items-center gap-2",onclick:handleMcpSettingsClick,children:($$anchor9,$$slotProps3)=>{var fragment_6=root_6$f(),node_6=first_child(fragment_6);Settings$1(node_6,{class:"h-4 w-4"}),next$1(2),append($$anchor9,fragment_6)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)};let $0=user_derived(()=>get$3(filteredMcpServers).length===0);DropdownMenuSearchable($$anchor6,{placeholder:"Search servers...",emptyMessage:"No servers found",get isEmpty(){ +return get$3($0)},get searchValue(){return get$3(mcpSearchQuery)},set searchValue($$value){set$1(mcpSearchQuery,$$value,!0)},footer:footer2,children:($$anchor7,$$slotProps3)=>{var div=root_7$g();each(div,21,()=>get$3(filteredMcpServers),server=>server.id,($$anchor8,server)=>{const healthState=user_derived(()=>mcpStore.getHealthCheckState(get$3(server).id)),hasError=user_derived(()=>get$3(healthState).status===HealthCheckStatus.ERROR),isEnabledForChat=user_derived(()=>isServerEnabledForChat(get$3( +server).id));var button=root_8$f(),div_1=child(button),node_7=child(div_1);{var consequent=$$anchor9=>{var img=root_9$d();template_effect($02=>set_attribute(img,"src",$02),[()=>mcpStore.getServerFavicon(get$3(server).id)]),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor9,img)},d2=user_derived(()=>mcpStore.getServerFavicon(get$3(server).id));if_block(node_7,$$render=>{get$3(d2)&&$$render(consequent)})}var span=sibling(node_7,2),text2=child(span,!0); +reset(span);var node_8=sibling(span,2);{var consequent_1=$$anchor9=>{var span_1=root_10$9();append($$anchor9,span_1)};if_block(node_8,$$render=>{get$3(hasError)&&$$render(consequent_1)})}reset(div_1);var node_9=sibling(div_1,2);Switch(node_9,{get checked(){return get$3(isEnabledForChat)},get disabled(){return get$3(hasError)},onclick:e=>e.stopPropagation(),onCheckedChange:()=>toggleServerForChat(get$3(server).id)}),reset(button),template_effect($02=>{button.disabled=get$3(hasError),set_text(text2, +$02)},[()=>getServerLabel(get$3(server))]),delegated("click",button,()=>!get$3(hasError)&&toggleServerForChat(get$3(server).id)),append($$anchor8,button)}),reset(div),append($$anchor7,div)},$$slots:{footer:!0,default:!0}})}},alternate=$$anchor6=>{var fragment_7=root_11$9(),node_10=sibling(first_child(fragment_7),2);component(node_10,()=>Dropdown_menu_separator,($$anchor7,DropdownMenu_Separator)=>{DropdownMenu_Separator($$anchor7,{})});var node_11=sibling(node_10,2);component(node_11,()=>Dropdown_menu_item, +($$anchor7,DropdownMenu_Item_1)=>{DropdownMenu_Item_1($$anchor7,{class:"flex cursor-pointer items-center gap-2",onclick:handleMcpSettingsClick,children:($$anchor8,$$slotProps3)=>{var fragment_8=root_12$4(),node_12=first_child(fragment_8);Plus(node_12,{class:"h-4 w-4"}),next$1(2),append($$anchor8,fragment_8)},$$slots:{default:!0}})}),append($$anchor6,fragment_7)};if_block(node_4,$$render=>{get$3(hasMcpServers)?$$render(consequent_2):$$render(alternate,-1)})}append($$anchor5,fragment_3)},$$slots:{ +default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}delegate(["click"]);var root$$=from_html('<input type="file"/>');function ChatFormFileInputInvisible($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),multiple=prop($$props,"multiple",3,!0),fileInputElement;function click(){fileInputElement?.click()}function handleFileSelect(event2){const input=event2.target;input.files&&$$props.onFileSelect?.(Array.from(input.files))} +var $$exports={click},input_1=root$$();return bind_this(input_1,$$value=>fileInputElement=$$value,()=>fileInputElement),template_effect(()=>{input_1.multiple=multiple(),set_class(input_1,1,`hidden ${className()??""}`)}),delegated("change",input_1,handleFileSelect),append($$anchor,input_1),pop($$exports)}delegate(["change"]);var root_2$E=from_html('<p class="text-xs text-muted-foreground">Press <kbd class="rounded bg-muted px-1 py-0.5 font-mono text-xs">Enter</kbd> to send, <kbd class="rounded bg\ +-muted px-1 py-0.5 font-mono text-xs">Shift + Enter</kbd> for new line</p>'),root_3$q=from_html(`<p class="text-xs text-muted-foreground">Press <kbd class="rounded bg-muted px-1 py-0.5 font-mono text-xs"> </kbd> to + send, <kbd class="rounded bg-muted px-1 py-0.5 font-mono text-xs">Enter</kbd> for new line</p>`),root_1$w=from_html("<div><!></div>");function ChatFormHelperText($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),show=prop($$props,"show",3,!0),sendOnEnter=user_derived(()=>config$1().sendOnEnter!==!1),modKey=/Mac|iPhone|iPad|iPod/.test(navigator.platform)?"Cmd":"Ctrl";var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{var div=root_1$w(), +node_1=child(div);{var consequent=$$anchor3=>{var p2=root_2$E();append($$anchor3,p2)},alternate=$$anchor3=>{var p_1=root_3$q(),kbd=sibling(child(p_1)),text2=child(kbd);reset(kbd),next$1(3),reset(p_1),template_effect(()=>set_text(text2,`${modKey} + Enter`)),append($$anchor3,p_1)};if_block(node_1,$$render=>{get$3(sendOnEnter)?$$render(consequent):$$render(alternate,-1)})}reset(div),template_effect(()=>set_class(div,1,`mt-6 items-center justify-center ${className()??""} hidden md:flex`)),append($$anchor2, +div)};if_block(node2,$$render=>{show()&&$$render(consequent_1)})}append($$anchor,fragment),pop()}var root$_=from_html('<div><textarea style="max-height: var(--max-message-height);"></textarea></div>');function ChatFormTextarea($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),placeholder=prop($$props,"placeholder",3,"Ask anything..."),value=prop($$props,"value",15,""),textareaElement;onMount$1(()=>{textareaElement&&(autoResizeTextarea( +textareaElement),textareaElement.focus())});function getElement(){return textareaElement}function focus2(){textareaElement?.focus()}function resetHeight(){textareaElement&&(textareaElement.style.height="1rem")}var $$exports={getElement,focus:focus2,resetHeight},div=root$_(),textarea=child(div);remove_textarea_child(textarea);let classes;return bind_this(textarea,$$value=>textareaElement=$$value,()=>textareaElement),reset(div),template_effect(()=>{set_class(div,1,`flex-1 ${className()??""}`),classes= +set_class(textarea,1,"text-md min-h-12 w-full resize-none border-0 bg-transparent p-0 leading-6 outline-none placeholder:text-muted-foreground focus-visible:ring-0 focus-visible:ring-offset-0",null,classes,{"cursor-not-allowed":disabled()}),textarea.disabled=disabled(),set_attribute(textarea,"placeholder",placeholder())}),delegated("keydown",textarea,function(...$$args){$$props.onKeydown?.apply(this,$$args)}),delegated("input",textarea,event2=>{autoResizeTextarea(event2.currentTarget),$$props.onInput?.()}), +event("paste",textarea,function(...$$args){$$props.onPaste?.apply(this,$$args)}),bind_value(textarea,value),append($$anchor,div),pop($$exports)}delegate(["keydown","input"]);var root_2$D=from_html('<div class="p-4"><!> <!></div>');function ChatFormPromptPicker($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),isOpen=prop($$props,"isOpen",7,!1),searchQuery=prop($$props,"searchQuery",3,""),prompts=state$1(proxy([])),isLoading2=state$1(!1),selectedPrompt=state$1(null),promptArgs=state$1( +proxy({})),selectedIndex=state$1(0),internalSearchQuery=state$1(""),promptError=state$1(null),selectedIndexBeforeArgumentForm=state$1(null),suggestions=proxy({}),loadingSuggestions=proxy({}),activeAutocomplete=state$1(null),autocompleteIndex=state$1(0),serverSettingsMap=user_derived(()=>{const servers=mcpStore.getServers(),map2=new SvelteMap;for(const server of servers)map2.set(server.id,server);return map2});user_effect(()=>{isOpen()?(loadPrompts(),set$1(selectedIndex,0)):(set$1(selectedPrompt, +null),set$1(promptArgs,{},!0),set$1(promptError,null))}),user_effect(()=>{get$3(filteredPrompts).length>0&&get$3(selectedIndex)>=get$3(filteredPrompts).length&&set$1(selectedIndex,0)});async function loadPrompts(){set$1(isLoading2,!0);try{const perChatOverrides=conversationsStore.getAllMcpServerOverrides();if(!await mcpStore.ensureInitialized(perChatOverrides)){set$1(prompts,[],!0);return}set$1(prompts,await mcpStore.getAllPrompts(),!0)}catch(error2){console.error("[ChatFormPromptPicker] Failed \ +to load prompts:",error2),set$1(prompts,[],!0)}finally{set$1(isLoading2,!1)}}function handlePromptClick(prompt){const args=prompt.arguments??[];args.length>0?(set$1(selectedIndexBeforeArgumentForm,get$3(selectedIndex),!0),set$1(selectedPrompt,prompt,!0),set$1(promptArgs,{},!0),set$1(promptError,null),requestAnimationFrame(()=>{const firstInput=document.querySelector(`#arg-${args[0].name}`);firstInput&&firstInput.focus()})):executePrompt(prompt,{})}async function executePrompt(prompt,args){set$1( +promptError,null);const placeholderId=uuid$1(),nonEmptyArgs=Object.fromEntries(Object.entries(args).filter(([,value])=>value.trim()!=="")),argsToPass=Object.keys(nonEmptyArgs).length>0?nonEmptyArgs:void 0;$$props.onPromptLoadStart?.(placeholderId,prompt,argsToPass),$$props.onClose?.();try{const result=await mcpStore.getPrompt(prompt.serverName,prompt.name,args);$$props.onPromptLoadComplete?.(placeholderId,result)}catch(error2){const errorMessage=error2 instanceof Error?error2.message:"Unknown er\ +ror executing prompt";$$props.onPromptLoadError?.(placeholderId,errorMessage)}}function handleArgumentSubmit(event2){event2.preventDefault(),get$3(selectedPrompt)&&executePrompt(get$3(selectedPrompt),get$3(promptArgs))}const fetchCompletions=debounce(async(argName,value)=>{if(!get$3(selectedPrompt)||value.length<1){suggestions[argName]=[];return}loadingSuggestions[argName]=!0;try{const result=await mcpStore.getPromptCompletions(get$3(selectedPrompt).serverName,get$3(selectedPrompt).name,argName, +value);if(result&&result.values.length>0){const filteredValues=result.values.filter(v=>v.trim()!=="");filteredValues.length>0?(suggestions[argName]=filteredValues,set$1(activeAutocomplete,argName,!0),set$1(autocompleteIndex,0)):suggestions[argName]=[]}else suggestions[argName]=[]}catch(error2){console.error("[ChatFormPromptPicker] Failed to fetch completions:",error2),suggestions[argName]=[]}finally{loadingSuggestions[argName]=!1}},200);function handleArgInput(argName,value){get$3(promptArgs)[argName]= +value,fetchCompletions(argName,value)}function selectSuggestion(argName,value){get$3(promptArgs)[argName]=value,suggestions[argName]=[],set$1(activeAutocomplete,null)}function handleArgKeydown(event2,argName){const argSuggestions=suggestions[argName]??[];if(event2.key===KeyboardKey.ESCAPE){event2.preventDefault(),event2.stopPropagation(),handleCancelArgumentForm();return}argSuggestions.length===0||get$3(activeAutocomplete)!==argName||(event2.key===KeyboardKey.ARROW_DOWN?(event2.preventDefault(), +set$1(autocompleteIndex,Math.min(get$3(autocompleteIndex)+1,argSuggestions.length-1),!0)):event2.key===KeyboardKey.ARROW_UP?(event2.preventDefault(),set$1(autocompleteIndex,Math.max(get$3(autocompleteIndex)-1,0),!0)):event2.key===KeyboardKey.ENTER&&argSuggestions[get$3(autocompleteIndex)]&&(event2.preventDefault(),event2.stopPropagation(),selectSuggestion(argName,argSuggestions[get$3(autocompleteIndex)])))}function handleArgBlur(argName){setTimeout(()=>{get$3(activeAutocomplete)===argName&&(suggestions[argName]= +[],set$1(activeAutocomplete,null))},150)}function handleArgFocus(argName){(suggestions[argName]?.length??0)>0&&set$1(activeAutocomplete,argName,!0)}function handleCancelArgumentForm(){get$3(selectedIndexBeforeArgumentForm)!==null&&(set$1(selectedIndex,get$3(selectedIndexBeforeArgumentForm),!0),set$1(selectedIndexBeforeArgumentForm,null)),set$1(selectedPrompt,null),set$1(promptArgs,{},!0),set$1(promptError,null)}function handleKeydown(event2){return isOpen()?event2.key===KeyboardKey.ESCAPE?(event2. +preventDefault(),get$3(selectedPrompt)?handleCancelArgumentForm():$$props.onClose?.(),!0):event2.key===KeyboardKey.ARROW_DOWN?(event2.preventDefault(),get$3(filteredPrompts).length>0&&set$1(selectedIndex,(get$3(selectedIndex)+1)%get$3(filteredPrompts).length),!0):event2.key===KeyboardKey.ARROW_UP?(event2.preventDefault(),get$3(filteredPrompts).length>0&&set$1(selectedIndex,get$3(selectedIndex)===0?get$3(filteredPrompts).length-1:get$3(selectedIndex)-1,!0),!0):event2.key===KeyboardKey.ENTER&&!get$3( +selectedPrompt)?(event2.preventDefault(),get$3(filteredPrompts)[get$3(selectedIndex)]&&handlePromptClick(get$3(filteredPrompts)[get$3(selectedIndex)]),!0):!1:!1}let filteredPrompts=user_derived(()=>{const sortedServers=mcpStore.getServersSorted(),serverOrderMap=new Map(sortedServers.map((server,index2)=>[server.id,index2])),sortedPrompts=[...get$3(prompts)].sort((a,b)=>{const orderA=serverOrderMap.get(a.serverName)??Number.MAX_SAFE_INTEGER,orderB=serverOrderMap.get(b.serverName)??Number.MAX_SAFE_INTEGER; +return orderA-orderB}),query=(searchQuery()||get$3(internalSearchQuery)).toLowerCase();return query?sortedPrompts.filter(prompt=>prompt.name.toLowerCase().includes(query)||prompt.title?.toLowerCase().includes(query)||prompt.description?.toLowerCase().includes(query)):sortedPrompts}),showSearchInput=user_derived(()=>get$3(prompts).length>3);var $$exports={handleKeydown};return ChatFormPickerPopover($$anchor,{get class(){return className()},srLabel:"Open prompt picker",get onClose(){return $$props. +onClose},onKeydown:handleKeydown,get isOpen(){return isOpen()},set isOpen($$value){isOpen($$value)},children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent_1=$$anchor3=>{const prompt=user_derived(()=>get$3(selectedPrompt)),server=user_derived(()=>get$3(serverSettingsMap).get(get$3(prompt).serverName)),serverLabel=user_derived(()=>get$3(server)?mcpStore.getServerLabel(get$3(server)):get$3(prompt).serverName);var div=root_2$D(),node_1=child(div); +{const titleExtra=$$anchor4=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);{var consequent=$$anchor5=>{Badge($$anchor5,{variant:"secondary",children:($$anchor6,$$slotProps2)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,`${get$3(prompt).arguments.length??""} arg${get$3(prompt).arguments.length>1?"s":""}`)),append($$anchor6,text2)},$$slots:{default:!0}})};if_block(node_2,$$render=>{get$3(prompt).arguments?.length&&$$render(consequent)})}append($$anchor4,fragment_2)}; +let $0=user_derived(()=>get$3(prompt).title||get$3(prompt).name);ChatFormPickerItemHeader(node_1,{get server(){return get$3(server)},get serverLabel(){return get$3(serverLabel)},get title(){return get$3($0)},get description(){return get$3(prompt).description},titleExtra,$$slots:{titleExtra:!0}})}var node_3=sibling(node_1,2);ChatFormPromptPickerArgumentForm(node_3,{get prompt(){return get$3(selectedPrompt)},get promptArgs(){return get$3(promptArgs)},get suggestions(){return suggestions},get loadingSuggestions(){ +return loadingSuggestions},get activeAutocomplete(){return get$3(activeAutocomplete)},get autocompleteIndex(){return get$3(autocompleteIndex)},get promptError(){return get$3(promptError)},onArgInput:handleArgInput,onArgKeydown:handleArgKeydown,onArgBlur:handleArgBlur,onArgFocus:handleArgFocus,onSelectSuggestion:selectSuggestion,onSubmit:handleArgumentSubmit,onCancel:handleCancelArgumentForm}),reset(div),append($$anchor3,div)},alternate=$$anchor3=>{ChatFormPickerList($$anchor3,{get items(){return get$3( +filteredPrompts)},get isLoading(){return get$3(isLoading2)},get selectedIndex(){return get$3(selectedIndex)},get showSearchInput(){return get$3(showSearchInput)},searchPlaceholder:"Search prompts...",emptyMessage:"No MCP prompts available",itemKey:prompt=>prompt.serverName+":"+prompt.name,get searchQuery(){return get$3(internalSearchQuery)},set searchQuery($$value){set$1(internalSearchQuery,$$value,!0)},item:($$anchor4,prompt=noop$3,index2=noop$3,isSelected=noop$3)=>{const server=user_derived(()=>get$3( +serverSettingsMap).get(prompt().serverName)),serverLabel=user_derived(()=>get$3(server)?mcpStore.getServerLabel(get$3(server)):prompt().serverName);ChatFormPickerListItem($$anchor4,{get dataIndex(){return index2()},get isSelected(){return isSelected()},onClick:()=>handlePromptClick(prompt()),children:($$anchor5,$$slotProps2)=>{{const titleExtra=$$anchor6=>{var fragment_8=comment$2(),node_4=first_child(fragment_8);{var consequent_2=$$anchor7=>{Badge($$anchor7,{variant:"secondary",children:($$anchor8,$$slotProps3)=>{ +next$1();var text_1=text$8();template_effect(()=>set_text(text_1,`${prompt().arguments.length??""} arg${prompt().arguments.length>1?"s":""}`)),append($$anchor8,text_1)},$$slots:{default:!0}})};if_block(node_4,$$render=>{prompt().arguments?.length&&$$render(consequent_2)})}append($$anchor6,fragment_8)};let $0=user_derived(()=>prompt().title||prompt().name);ChatFormPickerItemHeader($$anchor5,{get server(){return get$3(server)},get serverLabel(){return get$3(serverLabel)},get title(){return get$3($0)}, +get description(){return prompt().description},titleExtra,$$slots:{titleExtra:!0}})}},$$slots:{default:!0}})},skeleton:$$anchor4=>{ChatFormPickerListItemSkeleton($$anchor4,{titleWidth:"w-32",showBadge:!0})},$$slots:{item:!0,skeleton:!0}})};if_block(node2,$$render=>{get$3(selectedPrompt)?$$render(consequent_1):$$render(alternate,-1)})}append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop($$exports)}var root_2$C=from_html('<span class="text-destructive">*</span>'),root_3$p=from_html('<span clas\ +s="text-xs text-muted-foreground/50">...</span>'),root_1$v=from_html("<span> <!></span> <!>",1),root_5$m=from_html('<button type="button"> </button>'),root_4$i=from_html('<div class="absolute top-full right-0 left-0 z-10 mt-1 max-h-32 overflow-y-auto rounded-lg border border-border/50 bg-background shadow-lg"></div>'),root$Z=from_html('<div class="relative grid gap-1"><!> <!> <!></div>');function ChatFormPromptPickerArgumentInput($$anchor,$$props){push$1($$props,!0);let value=prop($$props,"value", +3,""),suggestions=prop($$props,"suggestions",19,()=>[]),isLoadingSuggestions=prop($$props,"isLoadingSuggestions",3,!1),isAutocompleteActive=prop($$props,"isAutocompleteActive",3,!1),autocompleteIndex=prop($$props,"autocompleteIndex",3,0);var div=root$Z(),node2=child(div);Label(node2,{get for(){return`arg-${$$props.argument.name??""}`},class:"mb-1 text-muted-foreground",children:($$anchor2,$$slotProps)=>{var fragment=root_1$v(),span=first_child(fragment),text2=child(span),node_1=sibling(text2);{var consequent=$$anchor3=>{ +var span_1=root_2$C();append($$anchor3,span_1)};if_block(node_1,$$render=>{$$props.argument.required&&$$render(consequent)})}reset(span);var node_2=sibling(span,2);{var consequent_1=$$anchor3=>{var span_2=root_3$p();append($$anchor3,span_2)};if_block(node_2,$$render=>{isLoadingSuggestions()&&$$render(consequent_1)})}template_effect(()=>set_text(text2,`${$$props.argument.name??""} `)),append($$anchor2,fragment)},$$slots:{default:!0}});var node_3=sibling(node2,2);{let $0=user_derived(()=>$$props.argument. +description||$$props.argument.name);Input(node_3,{get id(){return`arg-${$$props.argument.name??""}`},type:"text",get value(){return value()},oninput:e=>$$props.onInput(e.currentTarget.value),get onkeydown(){return $$props.onKeydown},get onblur(){return $$props.onBlur},get onfocus(){return $$props.onFocus},get placeholder(){return get$3($0)},get required(){return $$props.argument.required},autocomplete:"off"})}var node_4=sibling(node_3,2);{var consequent_2=$$anchor2=>{var div_1=root_4$i();each(div_1, +22,suggestions,suggestion=>suggestion,($$anchor3,suggestion,i)=>{var button=root_5$m(),text_1=child(button,!0);reset(button),template_effect(()=>{set_class(button,1,`w-full px-3 py-1.5 text-left text-sm hover:bg-accent ${get$3(i)===autocompleteIndex()?"bg-accent":""}`),set_text(text_1,suggestion)}),delegated("mousedown",button,()=>$$props.onSelectSuggestion(suggestion)),append($$anchor3,button)}),reset(div_1),transition(3,div_1,()=>fly,()=>({y:-5,duration:100})),append($$anchor2,div_1)};if_block( +node_4,$$render=>{isAutocompleteActive()&&suggestions().length>0&&$$render(consequent_2)})}reset(div),append($$anchor,div),pop()}delegate(["mousedown"]);var root_2$B=from_html('<div class="flex items-start gap-2 rounded-lg border border-destructive/50 bg-destructive/10 px-3 py-2 text-sm text-destructive" role="alert"><span class="shrink-0">⚠</span> <span> </span></div>'),root$Y=from_html('<form class="space-y-3 pt-4"><!> <!> <div class="mt-8 flex justify-end gap-2"><!> <!></div></form>');function ChatFormPromptPickerArgumentForm($$anchor,$$props){ +push$1($$props,!0);var form=root$Y(),node2=child(form);each(node2,17,()=>$$props.prompt.arguments??[],arg=>arg.name,($$anchor2,arg)=>{{let $0=user_derived(()=>$$props.promptArgs[get$3(arg).name]??""),$1=user_derived(()=>$$props.suggestions[get$3(arg).name]??[]),$2=user_derived(()=>$$props.loadingSuggestions[get$3(arg).name]??!1),$3=user_derived(()=>$$props.activeAutocomplete===get$3(arg).name),$4=user_derived(()=>$$props.activeAutocomplete===get$3(arg).name?$$props.autocompleteIndex:0);ChatFormPromptPickerArgumentInput( +$$anchor2,{get argument(){return get$3(arg)},get value(){return get$3($0)},get suggestions(){return get$3($1)},get isLoadingSuggestions(){return get$3($2)},get isAutocompleteActive(){return get$3($3)},get autocompleteIndex(){return get$3($4)},onInput:value=>$$props.onArgInput(get$3(arg).name,value),onKeydown:e=>$$props.onArgKeydown(e,get$3(arg).name),onBlur:()=>$$props.onArgBlur(get$3(arg).name),onFocus:()=>$$props.onArgFocus(get$3(arg).name),onSelectSuggestion:value=>$$props.onSelectSuggestion( +get$3(arg).name,value)})}});var node_1=sibling(node2,2);{var consequent=$$anchor2=>{var div=root_2$B(),span=sibling(child(div),2),text2=child(span,!0);reset(span),reset(div),template_effect(()=>set_text(text2,$$props.promptError)),append($$anchor2,div)};if_block(node_1,$$render=>{$$props.promptError&&$$render(consequent)})}var div_1=sibling(node_1,2),node_2=child(div_1);Button(node_2,{type:"button",size:"sm",get onclick(){return $$props.onCancel},variant:"secondary",children:($$anchor2,$$slotProps)=>{ +next$1();var text_1=text$8("Cancel");append($$anchor2,text_1)},$$slots:{default:!0}});var node_3=sibling(node_2,2);Button(node_3,{size:"sm",type:"submit",children:($$anchor2,$$slotProps)=>{next$1();var text_2=text$8("Use Prompt");append($$anchor2,text_2)},$$slots:{default:!0}}),reset(div_1),reset(form),event("submit",form,function(...$$args){$$props.onSubmit?.apply(this,$$args)}),append($$anchor,form),pop()}function Popover($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1), +restProps=rest_props($$props,["$$slots","$$events","$$legacy","open"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Popover$1,($$anchor2,PopoverPrimitive_Root)=>{PopoverPrimitive_Root($$anchor2,spread_props(()=>restProps,{get open(){return open2()},set open($$value){open2($$value)}}))}),append($$anchor,fragment),pop()}function Popover_portal($$anchor,$$props){let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]);var fragment=comment$2(),node2=first_child( +fragment);component(node2,()=>Portal$2,($$anchor2,PopoverPrimitive_Portal)=>{PopoverPrimitive_Portal($$anchor2,spread_props(()=>restProps))}),append($$anchor,fragment)}function Popover_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props,"sideOffset",3,4),align=prop($$props,"align",3,"center"),collisionPadding=prop($$props,"collisionPadding",3,8),avoidCollisions=prop($$props,"avoidCollisions",3,!0),restProps=rest_props($$props,["$$slots","$$ev\ +ents","$$legacy","ref","class","sideOffset","side","align","collisionPadding","avoidCollisions","portalProps"]);Popover_portal($$anchor,spread_props(()=>$$props.portalProps,{children:($$anchor2,$$slotProps)=>{var fragment_1=comment$2(),node2=first_child(fragment_1);{let $0=user_derived(()=>cn$1("z-50 w-72 origin-(--bits-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-\ +in-from-end-2 data-[side=right]:slide-in-from-start-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",$$props.class));component(node2,()=>Popover_content$1,($$anchor3,PopoverPrimitive_Content)=>{PopoverPrimitive_Content($$anchor3,spread_props({"data-slot":"popover-content",get sideOffset(){return sideOffset()},get side(){return $$props. +side},get align(){return align()},get collisionPadding(){return collisionPadding()},get avoidCollisions(){return avoidCollisions()},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor2,fragment_1)},$$slots:{default:!0}})),pop()}function Popover_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(), +node2=first_child(fragment);{let $0=user_derived(()=>cn$1("",$$props.class));component(node2,()=>Popover_trigger$1,($$anchor2,PopoverPrimitive_Trigger)=>{PopoverPrimitive_Trigger($$anchor2,spread_props({"data-slot":"popover-trigger",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))})}append($$anchor,fragment),pop()}var root_2$A=from_html('<span class="sr-only"> </span>'),root_1$u=from_html("<!> <!>",1);function ChatFormPickerPopover($$anchor,$$props){ +push$1($$props,!0);let className=prop($$props,"class",3,""),isOpen=prop($$props,"isOpen",15,!1),srLabel=prop($$props,"srLabel",3,"Open picker");var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Popover,($$anchor2,Popover_Root)=>{Popover_Root($$anchor2,{onOpenChange:open2=>{open2||$$props.onClose?.()},get open(){return isOpen()},set open($$value){isOpen($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$u(),node_1=first_child(fragment_1);component(node_1,()=>Popover_trigger, +($$anchor4,Popover_Trigger)=>{Popover_Trigger($$anchor4,{class:"pointer-events-none absolute inset-0 opacity-0",children:($$anchor5,$$slotProps2)=>{var span=root_2$A(),text2=child(span,!0);reset(span),template_effect(()=>set_text(text2,srLabel())),append($$anchor5,span)},$$slots:{default:!0}})});var node_2=sibling(node_1,2);component(node_2,()=>Popover_content,($$anchor4,Popover_Content)=>{Popover_Content($$anchor4,{side:"top",align:"start",sideOffset:12,get class(){return`w-[var(--bits-popover-\ +anchor-width)] max-w-none rounded-xl border-border/50 p-0 shadow-xl ${className()??""}`},get onkeydown(){return $$props.onKeydown},onOpenAutoFocus:e=>e.preventDefault(),children:($$anchor5,$$slotProps2)=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);snippet(node_3,()=>$$props.children),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_1$t=from_html("<!> <!>",1);function Scroll_area_scrollbar($$anchor,$$props){ +push$1($$props,!0);let ref2=prop($$props,"ref",15,null),orientation=prop($$props,"orientation",3,"vertical"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","orientation","children"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("flex touch-none p-px transition-colors select-none",orientation()==="vertical"&&"h-full w-2.5 border-l border-l-transparent",orientation()==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",$$props. +class));component(node2,()=>Scroll_area_scrollbar$1,($$anchor2,ScrollAreaPrimitive_Scrollbar)=>{ScrollAreaPrimitive_Scrollbar($$anchor2,spread_props({"data-slot":"scroll-area-scrollbar",get orientation(){return orientation()},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$t(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);component( +node_2,()=>Scroll_area_thumb,($$anchor4,ScrollAreaPrimitive_Thumb)=>{ScrollAreaPrimitive_Thumb($$anchor4,{"data-slot":"scroll-area-thumb",class:"relative flex-1 rounded-full bg-border"})}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_1$s=from_html("<!> <!> <!> <!>",1);function Scroll_area($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),orientation=prop($$props,"orientation",3,"vertical"),scrollbarXClasses=prop($$props, +"scrollbarXClasses",3,""),scrollbarYClasses=prop($$props,"scrollbarYClasses",3,""),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","orientation","scrollbarXClasses","scrollbarYClasses","children"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("relative",$$props.class));component(node2,()=>Scroll_area$1,($$anchor2,ScrollAreaPrimitive_Root)=>{ScrollAreaPrimitive_Root($$anchor2,spread_props({"data-slot":"scroll-area",get class(){return get$3( +$0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1$s(),node_1=first_child(fragment_1);component(node_1,()=>Scroll_area_viewport,($$anchor4,ScrollAreaPrimitive_Viewport)=>{ScrollAreaPrimitive_Viewport($$anchor4,{"data-slot":"scroll-area-viewport",class:"size-full rounded-[inherit] ring-ring/10 outline-ring/50 transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1 dark:ring-ring/20 dark:outline-\ +ring/40",children:($$anchor5,$$slotProps2)=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);snippet(node_2,()=>$$props.children??noop$3),append($$anchor5,fragment_2)},$$slots:{default:!0}})});var node_3=sibling(node_1,2);{var consequent=$$anchor4=>{Scroll_area_scrollbar($$anchor4,{orientation:"vertical",get class(){return scrollbarYClasses()}})};if_block(node_3,$$render=>{(orientation()==="vertical"||orientation()==="both")&&$$render(consequent)})}var node_4=sibling(node_3,2);{var consequent_1=$$anchor4=>{ +Scroll_area_scrollbar($$anchor4,{orientation:"horizontal",get class(){return scrollbarXClasses()}})};if_block(node_4,$$render=>{(orientation()==="horizontal"||orientation()==="both")&&$$render(consequent_1)})}var node_5=sibling(node_4,2);component(node_5,()=>Scroll_area_corner,($$anchor4,ScrollAreaPrimitive_Corner)=>{ScrollAreaPrimitive_Corner($$anchor4,{})}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_2$z=from_html('<div class="absolute top-0\ + right-0 left-0 z-10 p-2 pb-0"><!></div>'),root_5$l=from_html('<div class="py-6 text-center text-sm text-muted-foreground"> </div>'),root_1$r=from_html("<!> <div><!></div> <!>",1);function ChatFormPickerList($$anchor,$$props){push$1($$props,!0);let searchQuery=prop($$props,"searchQuery",15),searchPlaceholder=prop($$props,"searchPlaceholder",3,"Search..."),emptyMessage=prop($$props,"emptyMessage",3,"No items available"),listContainer=state$1(null);user_effect(()=>{if(get$3(listContainer)&&$$props. +selectedIndex>=0&&$$props.selectedIndex<$$props.items.length){const selectedElement=get$3(listContainer).querySelector(`[data-picker-index="${$$props.selectedIndex}"]`);selectedElement&&selectedElement.scrollIntoView({behavior:"smooth",block:"center",inline:"nearest"})}}),Scroll_area($$anchor,{children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$r(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{var div=root_2$z(),node_1=child(div);SearchInput(node_1,{get placeholder(){return searchPlaceholder()}, +get value(){return searchQuery()},set value($$value){searchQuery($$value)}}),reset(div),append($$anchor3,div)};if_block(node2,$$render=>{$$props.showSearchInput&&$$render(consequent)})}var div_1=sibling(node2,2);let classes;var node_2=child(div_1);{var consequent_2=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);{var consequent_1=$$anchor4=>{var fragment_3=comment$2(),node_4=first_child(fragment_3);snippet(node_4,()=>$$props.skeleton),append($$anchor4,fragment_3)};if_block( +node_3,$$render=>{$$props.skeleton&&$$render(consequent_1)})}append($$anchor3,fragment_2)},consequent_3=$$anchor3=>{var div_2=root_5$l(),text2=child(div_2,!0);reset(div_2),template_effect(()=>set_text(text2,emptyMessage())),append($$anchor3,div_2)},alternate=$$anchor3=>{var fragment_4=comment$2(),node_5=first_child(fragment_4);each(node_5,19,()=>$$props.items,(itemData,index2)=>$$props.itemKey(itemData,index2),($$anchor4,itemData,index2)=>{var fragment_5=comment$2(),node_6=first_child(fragment_5); +snippet(node_6,()=>$$props.item,()=>get$3(itemData),()=>get$3(index2),()=>get$3(index2)===$$props.selectedIndex),append($$anchor4,fragment_5)}),append($$anchor3,fragment_4)};if_block(node_2,$$render=>{$$props.isLoading?$$render(consequent_2):$$props.items.length===0?$$render(consequent_3,1):$$render(alternate,-1)})}reset(div_1),bind_this(div_1,$$value=>set$1(listContainer,$$value),()=>get$3(listContainer));var node_7=sibling(div_1,2);{var consequent_4=$$anchor3=>{var fragment_6=comment$2(),node_8=first_child( +fragment_6);snippet(node_8,()=>$$props.footer),append($$anchor3,fragment_6)};if_block(node_7,$$render=>{$$props.footer&&$$render(consequent_4)})}template_effect(()=>classes=set_class(div_1,1,`${CHAT_FORM_POPOVER_MAX_HEIGHT} p-2`,null,classes,{"pt-13":$$props.showSearchInput})),append($$anchor2,fragment_1)},$$slots:{default:!0}}),pop()}var root$X=from_html('<button type="button"><!></button>');function ChatFormPickerListItem($$anchor,$$props){let isSelected=prop($$props,"isSelected",3,!1);var button=root$X(), +node2=child(button);snippet(node2,()=>$$props.children),reset(button),template_effect(()=>{set_attribute(button,"data-picker-index",$$props.dataIndex),set_class(button,1,`flex w-full cursor-pointer items-start gap-3 rounded-lg px-3 py-2 text-left hover:bg-accent/50 ${isSelected()?"bg-accent/50":""}`)}),delegated("click",button,function(...$$args){$$props.onClick?.apply(this,$$args)}),append($$anchor,button)}delegate(["click"]);var root_1$q=from_html('<img alt="" class="h-3 w-3 shrink-0 rounded-s\ +m"/>'),root_3$o=from_html('<p class="mt-0.5 truncate text-sm text-muted-foreground"> </p>'),root$W=from_html('<div class="min-w-0 flex-1"><div class="mb-0.5 flex items-center gap-1.5 text-xs text-muted-foreground"><!> <span> </span></div> <div class="flex items-center gap-2"><span class="font-medium"> </span> <!></div> <!> <!></div>');function ChatFormPickerItemHeader($$anchor,$$props){push$1($$props,!0);let faviconUrl=user_derived(()=>$$props.server?mcpStore.getServerFavicon($$props.server.id): +null);var div=root$W(),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{var img=root_1$q();template_effect(()=>set_attribute(img,"src",get$3(faviconUrl))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor2,img)};if_block(node2,$$render=>{get$3(faviconUrl)&&$$render(consequent)})}var span=sibling(node2,2),text2=child(span,!0);reset(span),reset(div_1);var div_2=sibling(div_1,2),span_1=child(div_2),text_1=child(span_1,!0);reset(span_1);var node_1=sibling( +span_1,2);{var consequent_1=$$anchor2=>{var fragment=comment$2(),node_2=first_child(fragment);snippet(node_2,()=>$$props.titleExtra),append($$anchor2,fragment)};if_block(node_1,$$render=>{$$props.titleExtra&&$$render(consequent_1)})}reset(div_2);var node_3=sibling(div_2,2);{var consequent_2=$$anchor2=>{var p2=root_3$o(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,$$props.description)),append($$anchor2,p2)};if_block(node_3,$$render=>{$$props.description&&$$render(consequent_2)})} +var node_4=sibling(node_3,2);{var consequent_3=$$anchor2=>{var fragment_1=comment$2(),node_5=first_child(fragment_1);snippet(node_5,()=>$$props.subtitle),append($$anchor2,fragment_1)};if_block(node_4,$$render=>{$$props.subtitle&&$$render(consequent_3)})}reset(div),template_effect(()=>{set_text(text2,$$props.serverLabel),set_text(text_1,$$props.title)}),append($$anchor,div),pop()}var root_1$p=from_html('<div class="h-4 w-12 animate-pulse rounded-full bg-muted"></div>'),root$V=from_html('<div clas\ +s="flex w-full items-start gap-3 rounded-lg px-3 py-2"><div class="min-w-0 flex-1 space-y-2"><div class="mb-2 flex items-center gap-1.5"><div class="h-3 w-3 shrink-0 animate-pulse rounded-sm bg-muted"></div> <div class="h-3 w-24 animate-pulse rounded bg-muted"></div></div> <div class="flex items-center gap-2"><div></div> <!></div> <div class="h-3 w-full animate-pulse rounded bg-muted"></div></div></div>');function ChatFormPickerListItemSkeleton($$anchor,$$props){let titleWidth=prop($$props,"titl\ +eWidth",3,"w-48"),showBadge=prop($$props,"showBadge",3,!1);var div=root$V(),div_1=child(div),div_2=sibling(child(div_1),2),div_3=child(div_2),node2=sibling(div_3,2);{var consequent=$$anchor2=>{var div_4=root_1$p();append($$anchor2,div_4)};if_block(node2,$$render=>{showBadge()&&$$render(consequent)})}reset(div_2),next$1(2),reset(div_1),reset(div),template_effect(()=>set_class(div_3,1,`h-4 ${titleWidth()??""} animate-pulse rounded bg-muted`)),append($$anchor,div)}var root_5$k=from_html('<span clas\ +s="inline-flex items-center rounded-full bg-primary/10 px-1.5 py-0.5 text-[10px] font-medium text-primary">attached</span>'),root_6$e=from_html('<p class="mt-0.5 truncate text-xs text-muted-foreground/60"> </p>'),root_10$8=from_html("<!> Browse all",1);function ChatFormResourcePicker($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),isOpen=prop($$props,"isOpen",7,!1),searchQuery=prop($$props,"searchQuery",3,""),resources=state$1(proxy([])),isLoading2=state$1(!1),selectedIndex=state$1( +0),internalSearchQuery=state$1(""),serverSettingsMap=user_derived(()=>{const servers=mcpStore.getServers(),map2=new SvelteMap;for(const server of servers)map2.set(server.id,server);return map2});user_effect(()=>{isOpen()&&(loadResources(),set$1(selectedIndex,0))}),user_effect(()=>{get$3(filteredResources).length>0&&get$3(selectedIndex)>=get$3(filteredResources).length&&set$1(selectedIndex,0)});async function loadResources(){set$1(isLoading2,!0);try{const perChatOverrides=conversationsStore.getAllMcpServerOverrides(); +if(!await mcpStore.ensureInitialized(perChatOverrides)){set$1(resources,[],!0);return}await mcpStore.fetchAllResources(),set$1(resources,mcpResourceStore.getAllResourceInfos(),!0)}catch(error2){console.error("[ChatFormResourcePicker] Failed to load resources:",error2),set$1(resources,[],!0)}finally{set$1(isLoading2,!1)}}function handleResourceClick(resource){mcpStore.attachResource(resource.uri),$$props.onResourceSelect?.(resource),$$props.onClose?.()}function isResourceAttached(uri2){return mcpResourceStore. +isAttached(uri2)}function handleKeydown(event2){return isOpen()?event2.key===KeyboardKey.ESCAPE?(event2.preventDefault(),$$props.onClose?.(),!0):event2.key===KeyboardKey.ARROW_DOWN?(event2.preventDefault(),get$3(filteredResources).length>0&&set$1(selectedIndex,(get$3(selectedIndex)+1)%get$3(filteredResources).length),!0):event2.key===KeyboardKey.ARROW_UP?(event2.preventDefault(),get$3(filteredResources).length>0&&set$1(selectedIndex,get$3(selectedIndex)===0?get$3(filteredResources).length-1:get$3( +selectedIndex)-1,!0),!0):event2.key===KeyboardKey.ENTER?(event2.preventDefault(),get$3(filteredResources)[get$3(selectedIndex)]&&handleResourceClick(get$3(filteredResources)[get$3(selectedIndex)]),!0):!1:!1}let filteredResources=user_derived(()=>{const sortedServers=mcpStore.getServersSorted(),serverOrderMap=new Map(sortedServers.map((server,index2)=>[server.id,index2])),sortedResources=[...get$3(resources)].sort((a,b)=>{const orderA=serverOrderMap.get(a.serverName)??Number.MAX_SAFE_INTEGER,orderB=serverOrderMap. +get(b.serverName)??Number.MAX_SAFE_INTEGER;return orderA-orderB}),query=(searchQuery()||get$3(internalSearchQuery)).toLowerCase();return query?sortedResources.filter(resource=>resource.name.toLowerCase().includes(query)||resource.title?.toLowerCase().includes(query)||resource.description?.toLowerCase().includes(query)||resource.uri.toLowerCase().includes(query)):sortedResources}),showSearchInput=user_derived(()=>get$3(resources).length>3);var $$exports={handleKeydown};return ChatFormPickerPopover( +$$anchor,{get class(){return className()},srLabel:"Open resource picker",get onClose(){return $$props.onClose},onKeydown:handleKeydown,get isOpen(){return isOpen()},set isOpen($$value){isOpen($$value)},children:($$anchor2,$$slotProps)=>{ChatFormPickerList($$anchor2,{get items(){return get$3(filteredResources)},get isLoading(){return get$3(isLoading2)},get selectedIndex(){return get$3(selectedIndex)},get showSearchInput(){return get$3(showSearchInput)},searchPlaceholder:"Search resources...",emptyMessage:"\ +No MCP resources available",itemKey:resource=>resource.serverName+":"+resource.uri,get searchQuery(){return get$3(internalSearchQuery)},set searchQuery($$value){set$1(internalSearchQuery,$$value,!0)},item:($$anchor3,resource=noop$3,index2=noop$3,isSelected=noop$3)=>{const server=user_derived(()=>get$3(serverSettingsMap).get(resource().serverName)),serverLabel=user_derived(()=>get$3(server)?mcpStore.getServerLabel(get$3(server)):resource().serverName);ChatFormPickerListItem($$anchor3,{get dataIndex(){ +return index2()},get isSelected(){return isSelected()},onClick:()=>handleResourceClick(resource()),children:($$anchor4,$$slotProps2)=>{{const titleExtra=$$anchor5=>{var fragment_4=comment$2(),node2=first_child(fragment_4);{var consequent=$$anchor6=>{var span=root_5$k();append($$anchor6,span)},d2=user_derived(()=>isResourceAttached(resource().uri));if_block(node2,$$render=>{get$3(d2)&&$$render(consequent)})}append($$anchor5,fragment_4)},subtitle=$$anchor5=>{var p2=root_6$e(),text2=child(p2,!0);reset( +p2),template_effect(()=>set_text(text2,resource().uri)),append($$anchor5,p2)};let $0=user_derived(()=>resource().title||resource().name);ChatFormPickerItemHeader($$anchor4,{get server(){return get$3(server)},get serverLabel(){return get$3(serverLabel)},get title(){return get$3($0)},get description(){return resource().description},titleExtra,subtitle,$$slots:{titleExtra:!0,subtitle:!0}})}},$$slots:{default:!0}})},skeleton:$$anchor3=>{ChatFormPickerListItemSkeleton($$anchor3,{})},footer:$$anchor3=>{ +var fragment_6=comment$2(),node_1=first_child(fragment_6);{var consequent_1=$$anchor4=>{Button($$anchor4,{class:"fixed right-3 bottom-3",type:"button",get onclick(){return $$props.onBrowse},variant:"secondary",size:"sm",children:($$anchor5,$$slotProps2)=>{var fragment_8=root_10$8(),node_2=first_child(fragment_8);Folder_open(node_2,{class:"h-3 w-3"}),next$1(),append($$anchor5,fragment_8)},$$slots:{default:!0}})};if_block(node_1,$$render=>{$$props.onBrowse&&get$3(resources).length>3&&$$render(consequent_1)})} +append($$anchor3,fragment_6)},$$slots:{item:!0,skeleton:!0,footer:!0}})},$$slots:{default:!0}}),pop($$exports)}const MESSAGE_EDIT_KEY=Symbol.for(CONTEXT_KEY_MESSAGE_EDIT);function setMessageEditContext(ctx){return setContext(MESSAGE_EDIT_KEY,ctx)}function getMessageEditContext(){return getContext(MESSAGE_EDIT_KEY)}const CHAT_ACTIONS_KEY=Symbol.for(CONTEXT_KEY_CHAT_ACTIONS);function setChatActionsContext(ctx){return setContext(CHAT_ACTIONS_KEY,ctx)}function getChatActionsContext(){return getContext( +CHAT_ACTIONS_KEY)}const CHAT_SETTINGS_CONFIG_KEY=Symbol.for(CONTEXT_KEY_CHAT_SETTINGS_CONFIG);function setChatSettingsConfigContext(ctx){return setContext(CHAT_SETTINGS_CONFIG_KEY,ctx)}const PROCESSING_INFO_KEY=Symbol.for(CONTEXT_KEY_PROCESSING_INFO);function setProcessingInfoContext(ctx){return setContext(PROCESSING_INFO_KEY,ctx)}function getProcessingInfoContext(){return getContext(PROCESSING_INFO_KEY)}var root_1$o=from_html('<div class="flex items-center gap-2"><!> <label for="save-only-switc\ +h" class="cursor-pointer text-xs text-muted-foreground">Update without re-sending</label></div>'),root_2$y=from_html("<div></div>"),root_3$n=from_html("<!> Cancel",1),root$U=from_html('<div class="relative w-full max-w-[80%]"><!></div> <div class="mt-2 flex w-full max-w-[80%] items-center justify-between"><!> <!></div> <!>',1);function ChatMessageEditForm($$anchor,$$props){push$1($$props,!0);const editCtx=getMessageEditContext();let inputAreaRef=state$1(void 0),saveWithoutRegenerate=state$1(!1), +showDiscardDialog=state$1(!1),hasUnsavedChanges=user_derived(()=>!!(editCtx.editedContent!==editCtx.originalContent||editCtx.editedUploadedFiles.length>0||editCtx.editedExtras.length!==editCtx.originalExtras.length||editCtx.editedExtras.some((extra,i)=>extra!==editCtx.originalExtras[i]))),hasAttachments=user_derived(()=>editCtx.editedExtras&&editCtx.editedExtras.length>0||editCtx.editedUploadedFiles&&editCtx.editedUploadedFiles.length>0),canSubmit=user_derived(()=>editCtx.editedContent.trim().length> +0||get$3(hasAttachments));function handleGlobalKeydown(event2){event2.key===KeyboardKey.ESCAPE&&(event2.preventDefault(),attemptCancel())}function attemptCancel(){get$3(hasUnsavedChanges)?set$1(showDiscardDialog,!0):editCtx.cancel()}function handleSubmit(){get$3(canSubmit)&&(get$3(saveWithoutRegenerate)&&editCtx.showSaveOnlyOption?editCtx.saveOnly():editCtx.save(),set$1(saveWithoutRegenerate,!1))}function handleAttachmentRemove(index2){const newExtras=[...editCtx.editedExtras];newExtras.splice(index2, +1),editCtx.setExtras(newExtras)}function handleUploadedFileRemove(fileId){const newFiles=editCtx.editedUploadedFiles.filter(f=>f.id!==fileId);editCtx.setUploadedFiles(newFiles)}async function handleFilesAdd(files){const processed=await processFilesToChatUploaded(files);editCtx.setUploadedFiles([...editCtx.editedUploadedFiles,...processed])}function handleUploadedFilesChange(files){editCtx.setUploadedFiles(files)}user_effect(()=>(chatStore.setEditModeActive(handleFilesAdd),()=>{chatStore.clearEditMode()})); +var fragment=root$U();event("keydown",$window,handleGlobalKeydown);var div=first_child(fragment),node2=child(div);bind_this(ChatForm(node2,{get value(){return editCtx.editedContent},get attachments(){return editCtx.editedExtras},get uploadedFiles(){return editCtx.editedUploadedFiles},placeholder:"Edit your message...",showMcpPromptButton:!0,get onValueChange(){return editCtx.setContent},onAttachmentRemove:handleAttachmentRemove,onUploadedFileRemove:handleUploadedFileRemove,onUploadedFilesChange:handleUploadedFilesChange, +onFilesAdd:handleFilesAdd,onSubmit:handleSubmit}),$$value=>set$1(inputAreaRef,$$value,!0),()=>get$3(inputAreaRef)),reset(div);var div_1=sibling(div,2),node_1=child(div_1);{var consequent=$$anchor2=>{var div_2=root_1$o(),node_2=child(div_2);Switch(node_2,{id:"save-only-switch",class:"scale-75",get checked(){return get$3(saveWithoutRegenerate)},set checked($$value){set$1(saveWithoutRegenerate,$$value,!0)}}),next$1(2),reset(div_2),append($$anchor2,div_2)},alternate=$$anchor2=>{var div_3=root_2$y(); +append($$anchor2,div_3)};if_block(node_1,$$render=>{editCtx.showSaveOnlyOption?$$render(consequent):$$render(alternate,-1)})}var node_3=sibling(node_1,2);Button(node_3,{class:"h-7 px-3 text-xs",onclick:attemptCancel,size:"sm",variant:"ghost",children:($$anchor2,$$slotProps)=>{var fragment_1=root_3$n(),node_4=first_child(fragment_1);X(node_4,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor2,fragment_1)},$$slots:{default:!0}}),reset(div_1);var node_5=sibling(div_1,2);DialogConfirmation(node_5,{title:"\ +Discard changes?",description:"You have unsaved changes. Are you sure you want to discard them?",confirmText:"Discard",cancelText:"Keep editing",variant:"destructive",get icon(){return Triangle_alert},get onConfirm(){return editCtx.cancel},onCancel:()=>set$1(showDiscardDialog,!1),get open(){return get$3(showDiscardDialog)},set open($$value){set$1(showDiscardDialog,$$value,!0)}}),append($$anchor,fragment),pop()}function fadeInView(node2,options={}){const{duration:duration2=300,y=0,skipIfVisible=!1}=options; +if(skipIfVisible){const rect=node2.getBoundingClientRect();if(rect.top<window.innerHeight&&rect.bottom>0&&rect.left<window.innerWidth&&rect.right>0)return}node2.style.opacity="0",node2.style.transform=`translateY(${y}px)`,node2.style.transition=`opacity ${duration2}ms ease-out, transform ${duration2}ms ease-out`,user_effect(()=>{const observer=new IntersectionObserver(entries=>{for(const entry of entries)entry.isIntersecting&&(requestAnimationFrame(()=>{node2.style.opacity="1",node2.style.transform= +"translateY(0)"}),observer.disconnect())},{threshold:.05});return observer.observe(node2),()=>{observer.disconnect()}})}function useMessageEditContext(options){let isEditing2=state$1(!1),editedContent=state$1(""),editedExtras=state$1(proxy([])),editedUploadedFiles=state$1(proxy([]));function handleEdit(){set$1(editedContent,options.getContent(),!0),set$1(editedExtras,[...options.getExtras()],!0),set$1(editedUploadedFiles,[],!0),set$1(isEditing2,!0)}async function handleSaveEdit(){const trimmed=get$3( +editedContent).trim();if(!trimmed&&get$3(editedExtras).length===0&&get$3(editedUploadedFiles).length===0)return;let finalExtras=snapshot(get$3(editedExtras));if(get$3(editedUploadedFiles).length>0){const plainFiles=snapshot(get$3(editedUploadedFiles)),newExtras=(await parseFilesToMessageExtras(plainFiles))?.extras||[];finalExtras=[...finalExtras,...newExtras]}options.onSave(trimmed,finalExtras.length>0?finalExtras:void 0),set$1(isEditing2,!1)}function handleCancelEdit(){set$1(isEditing2,!1)}return setMessageEditContext( +{get isEditing(){return get$3(isEditing2)},get editedContent(){return get$3(editedContent)},get editedExtras(){return get$3(editedExtras)},get editedUploadedFiles(){return get$3(editedUploadedFiles)},get originalContent(){return options.getContent()},get originalExtras(){return options.getExtras()},get showSaveOnlyOption(){return options.showSaveOnlyOption??!1},setContent:c2=>{set$1(editedContent,c2,!0)},setExtras:e=>{set$1(editedExtras,e,!0)},setUploadedFiles:f=>{set$1(editedUploadedFiles,f,!0)}, +save:handleSaveEdit,saveOnly:handleSaveEdit,cancel:handleCancelEdit,startEdit:handleEdit}),{get isEditing(){return get$3(isEditing2)},handleEdit,handleSaveEdit,handleCancelEdit}}var root_1$n=from_html('<div class="mb-2 max-w-[80%]"><!></div>'),root_4$h=from_html("<div><!></div>"),root_5$j=from_html('<span class="text-md whitespace-pre-wrap"> </span>'),root$T=from_html("<!> <!>",1);function ChatMessageUserBubble($$anchor,$$props){push$1($$props,!0);let attachments=prop($$props,"attachments",19,()=>[]), +renderMarkdown=prop($$props,"renderMarkdown",3,!1),textColorClass=prop($$props,"textColorClass",3,"text-foreground"),cardBgClass=prop($$props,"cardBgClass",3,"dark:bg-primary/15"),maxHeightStyle=prop($$props,"maxHeightStyle",3,"max-height: var(--max-message-height);"),isMultiline=state$1(!1),messageElement=state$1(void 0);const currentConfig=config$1();user_effect(()=>{if(!get$3(messageElement)||!$$props.content.trim())return;if($$props.content.includes(` +`)){set$1(isMultiline,!0);return}const resizeObserver=new ResizeObserver(entries=>{for(const entry of entries){const element2=entry.target;set$1(isMultiline,element2.offsetHeight>24*1.5)}});return resizeObserver.observe(get$3(messageElement)),()=>{resizeObserver.disconnect()}});var fragment=root$T(),node2=first_child(fragment);{var consequent=$$anchor2=>{var div=root_1$n(),node_1=child(div);ChatAttachmentsList(node_1,{get attachments(){return attachments()},readonly:!0,imageHeight:"h-40"}),reset( +div),append($$anchor2,div)};if_block(node2,$$render=>{attachments()&&attachments().length>0&&$$render(consequent)})}var node_2=sibling(node2,2);{var consequent_2=$$anchor2=>{{let $0=user_derived(()=>get$3(isMultiline)?"":void 0);Card($$anchor2,{get class(){return`max-w-[80%] overflow-y-auto rounded-[1.125rem] border-none bg-primary/5 px-3.75 py-1.5 ${textColorClass()??""} backdrop-blur-md data-[multiline]:py-2.5 ${cardBgClass()??""}`},get"data-multiline"(){return get$3($0)},get style(){return`${maxHeightStyle()?? +""} overflow-wrap: anywhere; word-break: break-word;`},children:($$anchor3,$$slotProps)=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);{var consequent_1=$$anchor4=>{var div_1=root_4$h(),node_4=child(div_1);MarkdownContent(node_4,{class:"markdown-user-content -my-4",get content(){return $$props.content}}),reset(div_1),bind_this(div_1,$$value=>set$1(messageElement,$$value),()=>get$3(messageElement)),append($$anchor4,div_1)},alternate=$$anchor4=>{var span=root_5$j(),text2=child(span,!0); +reset(span),bind_this(span,$$value=>set$1(messageElement,$$value),()=>get$3(messageElement)),template_effect(()=>set_text(text2,$$props.content)),append($$anchor4,span)};if_block(node_3,$$render=>{renderMarkdown()&¤tConfig.renderUserContentAsMarkdown?$$render(consequent_1):$$render(alternate,-1)})}append($$anchor3,fragment_2)},$$slots:{default:!0}})}},d2=user_derived(()=>$$props.content.trim());if_block(node_2,$$render=>{get$3(d2)&&$$render(consequent_2)})}append($$anchor,fragment),pop()}var root_2$x=from_html( +'<!> <div class="max-w-[80%]"><div class="relative flex h-6 items-center justify-between"><div class="right-0 flex items-center gap-2 opacity-100 transition-opacity"><div class="pointer-events-auto inset-0 flex items-center gap-1 opacity-0 transition-all duration-150 group-hover:opacity-100"><!> <!> <!></div></div></div></div>',1),root$S=from_html('<div aria-label="Pending user message" role="group"><!></div>');function ChatMessageUserPending($$anchor,$$props){push$1($$props,!0);let className=prop( +$$props,"class",3,""),extras=prop($$props,"extras",19,()=>[]);const processingInfoCtx=getProcessingInfoContext();let showProcessingInfo=user_derived(()=>processingInfoCtx.showProcessingInfo);const editCtx=useMessageEditContext({getContent:()=>$$props.content,getExtras:()=>extras(),onSave:(content2,extras2)=>$$props.onEdit(content2,extras2)});var div=root$S(),node2=child(div);{var consequent=$$anchor2=>{ChatMessageEditForm($$anchor2,{})},alternate=$$anchor2=>{var fragment_1=root_2$x(),node_1=first_child( +fragment_1);ChatMessageUserBubble(node_1,{get content(){return $$props.content},get attachments(){return extras()},textColorClass:"text-muted-foreground",cardBgClass:"dark:bg-primary/8",maxHeightStyle:"overflow-wrap: anywhere; word-break: break-word;"});var div_1=sibling(node_1,2),div_2=child(div_1),div_3=child(div_2),div_4=child(div_3),node_2=child(div_4);ActionIcon(node_2,{get icon(){return Square_pen},tooltip:"Edit",get onclick(){return editCtx.handleEdit}});var node_3=sibling(node_2,2);ActionIcon( +node_3,{get icon(){return Trash_2},tooltip:"Delete",get onclick(){return $$props.onDelete}});var node_4=sibling(node_3,2);ActionIcon(node_4,{get icon(){return Arrow_up},tooltip:"Send immediately",get onclick(){return $$props.onSendImmediately}}),reset(div_4),reset(div_3),reset(div_2),reset(div_1),append($$anchor2,fragment_1)};if_block(node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate,-1)})}reset(div),action(div,$$node=>fadeInView?.($$node)),template_effect(()=>set_class( +div,1,`group flex flex-col items-end gap-3 transition-opacity hover:opacity-80 md:gap-2 ${className()??""} sticky ${get$3(showProcessingInfo)?"bottom-44":"bottom-32"}`)),append($$anchor,div),pop()}var root$R=from_html("<!> <!>",1);function ChatMessages($$anchor,$$props){push$1($$props,!0);let messages=prop($$props,"messages",19,()=>[]),allConversationMessages=state$1(proxy([]));const currentConfig=config$1();setChatActionsContext({copy:async message=>{const asPlainText=!!currentConfig.copyTextAttachmentsAsPlainText, +clipboardContent=formatMessageForClipboard(message.content,message.extra,asPlainText);await copyToClipboard(clipboardContent,"Message copied to clipboard")},delete:async message=>{await chatStore.deleteMessage(message.id),refreshAllMessages()},navigateToSibling:async siblingId=>{await conversationsStore.navigateToSibling(siblingId)},editWithBranching:async(message,newContent,newExtras)=>{$$props.onUserAction?.(),await chatStore.editMessageWithBranching(message.id,newContent,newExtras),refreshAllMessages()}, +editWithReplacement:async(message,newContent,shouldBranch)=>{$$props.onUserAction?.(),await chatStore.editAssistantMessage(message.id,newContent,shouldBranch),refreshAllMessages()},editUserMessagePreserveResponses:async(message,newContent,newExtras)=>{$$props.onUserAction?.(),await chatStore.editUserMessagePreserveResponses(message.id,newContent,newExtras),refreshAllMessages()},regenerateWithBranching:async(message,modelOverride)=>{$$props.onUserAction?.(),await chatStore.regenerateMessageWithBranching( +message.id,modelOverride),refreshAllMessages()},continueAssistantMessage:async message=>{$$props.onUserAction?.(),await chatStore.continueAssistantMessage(message.id),refreshAllMessages()},forkConversation:async(message,options)=>{await conversationsStore.forkConversation(message.id,options)}});function refreshAllMessages(){const conversation=activeConversation();conversation?conversationsStore.getConversationMessages(conversation.id).then(messages2=>{set$1(allConversationMessages,messages2,!0)}): +set$1(allConversationMessages,[],!0)}user_effect(()=>{activeConversation()&&refreshAllMessages()});let displayMessages=user_derived(()=>{if(!messages().length)return[];const filteredMessages=currentConfig.showSystemMessage?messages():messages().filter(msg=>msg.type!==MessageRole.SYSTEM),result=[];for(let i=0;i<filteredMessages.length;i++){const msg=filteredMessages[i];if(msg.role===MessageRole.TOOL)continue;const toolMessages=[];if(msg.role===MessageRole.ASSISTANT&&hasAgenticContent(msg)){let j=i+ +1;for(;j<filteredMessages.length;){const next2=filteredMessages[j];if(next2.role===MessageRole.TOOL)toolMessages.push(next2),j++;else if(next2.role===MessageRole.ASSISTANT)toolMessages.push(next2),j++;else break}i=j-1}else if(msg.role===MessageRole.ASSISTANT){let j=i+1;for(;j<filteredMessages.length&&filteredMessages[j].role===MessageRole.TOOL;)toolMessages.push(filteredMessages[j]),j++}const siblingInfo=getMessageSiblings(get$3(allConversationMessages),msg.id);result.push({message:msg,toolMessages, +isLastAssistantMessage:!1,siblingInfo:siblingInfo||{message:msg,siblingIds:[msg.id],currentIndex:0,totalSiblings:1}})}for(let i=result.length-1;i>=0;i--)if(result[i].message.role===MessageRole.ASSISTANT){result[i].isLastAssistantMessage=!0;break}return result});var fragment=root$R(),node2=first_child(fragment);each(node2,17,()=>get$3(displayMessages),({message,toolMessages,isLastAssistantMessage,siblingInfo})=>message.id,($$anchor2,$$item)=>{let message=()=>get$3($$item).message,toolMessages=()=>get$3( +$$item).toolMessages,isLastAssistantMessage=()=>get$3($$item).isLastAssistantMessage,siblingInfo=()=>get$3($$item).siblingInfo;ChatMessage($$anchor2,{class:"mx-auto mt-12 w-full max-w-[48rem]",get message(){return message()},get toolMessages(){return toolMessages()},get isLastAssistantMessage(){return isLastAssistantMessage()},get siblingInfo(){return siblingInfo()}})});var node_1=sibling(node2,2);{var consequent_1=$$anchor2=>{const convId=user_derived(()=>activeConversation().id),pendingContent=user_derived( +()=>agenticPendingSteeringMessageContent(get$3(convId)));var fragment_2=comment$2(),node_2=first_child(fragment_2);{var consequent=$$anchor3=>{{let $0=user_derived(()=>agenticPendingSteeringMessageExtras(get$3(convId)));ChatMessageUserPending($$anchor3,{class:"mx-auto mt-12 w-full max-w-[48rem]",get content(){return get$3(pendingContent)},get extras(){return get$3($0)},onSendImmediately:()=>chatStore.abortCurrentFlow(get$3(convId)),onEdit:(newContent,extras)=>agenticInjectSteeringMessage(get$3(convId), +newContent,extras),onDelete:()=>agenticClearSteeringMessage(get$3(convId))})}};if_block(node_2,$$render=>{get$3(pendingContent)&&$$render(consequent)})}append($$anchor2,fragment_2)},d2=user_derived(()=>activeConversation()&&agenticPendingSteeringMessageContent(activeConversation().id)),consequent_3=$$anchor2=>{const convId=user_derived(()=>activeConversation().id),pendingContent=user_derived(()=>chatPendingMessageContent(get$3(convId)));var fragment_4=comment$2(),node_3=first_child(fragment_4);{ +var consequent_2=$$anchor3=>{{let $0=user_derived(()=>chatPendingMessageExtras(get$3(convId)));ChatMessageUserPending($$anchor3,{class:"mx-auto mt-12 w-full max-w-[48rem]",get content(){return get$3(pendingContent)},get extras(){return get$3($0)},onSendImmediately:()=>chatStore.abortCurrentFlow(get$3(convId)),onEdit:(newContent,extras)=>chatInjectPendingMessage(get$3(convId),newContent,extras),onDelete:()=>chatClearPendingMessage(get$3(convId))})}};if_block(node_3,$$render=>{get$3(pendingContent)&& +$$render(consequent_2)})}append($$anchor2,fragment_4)},d_12=user_derived(()=>activeConversation()&&chatPendingMessageContent(activeConversation().id));if_block(node_1,$$render=>{get$3(d2)?$$render(consequent_1):get$3(d_12)&&$$render(consequent_3,1)})}append($$anchor,fragment),pop()}var root$Q=from_html("<div><!></div>");function ChatMessage($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),toolMessages=prop($$props,"toolMessages",19,()=>[]),isLastAssistantMessage=prop( +$$props,"isLastAssistantMessage",3,!1),siblingInfo=prop($$props,"siblingInfo",3,null);const chatActions=getChatActionsContext();let deletionInfo=state$1(null),editedContent=user_derived(()=>$$props.message.content),editedExtras=user_derived(()=>$$props.message.extra?[...$$props.message.extra]:[]),editedUploadedFiles=state$1(proxy([])),isEditing2=state$1(!1),showDeleteDialog=state$1(!1),shouldBranchAfterEdit=state$1(!1),textareaElement=state$1(void 0),showSaveOnlyOption=user_derived(()=>$$props.message. +role===MessageRole.USER);setMessageEditContext({get isEditing(){return get$3(isEditing2)},get editedContent(){return get$3(editedContent)},get editedExtras(){return get$3(editedExtras)},get editedUploadedFiles(){return get$3(editedUploadedFiles)},get originalContent(){return $$props.message.content},get originalExtras(){return $$props.message.extra||[]},get showSaveOnlyOption(){return get$3(showSaveOnlyOption)},setContent:content2=>{set$1(editedContent,content2)},setExtras:extras=>{set$1(editedExtras, +extras)},setUploadedFiles:files=>{set$1(editedUploadedFiles,files,!0)},save:handleSaveEdit,saveOnly:handleSaveEditOnly,cancel:handleCancelEdit,startEdit:handleEdit});let mcpPromptExtra=user_derived(()=>{if($$props.message.role!==MessageRole.USER||$$props.message.content.trim()||!$$props.message.extra||$$props.message.extra.length!==1)return null;const extra=$$props.message.extra[0];return extra.type===AttachmentType.MCP_PROMPT?extra:null});user_effect(()=>{const pendingId=pendingEditMessageId(); +pendingId&&pendingId===$$props.message.id&&!get$3(isEditing2)&&(handleEdit(),chatStore.clearPendingEditMessageId())});async function handleCancelEdit(){if(set$1(isEditing2,!1),$$props.message.role===MessageRole.SYSTEM){await chatStore.removeSystemPromptPlaceholder($$props.message.id)&&goto("#/");return}set$1(editedContent,$$props.message.content),set$1(editedExtras,$$props.message.extra?[...$$props.message.extra]:[]),set$1(editedUploadedFiles,[],!0)}function handleCopy(){chatActions.copy($$props. +message)}async function handleConfirmDelete(){$$props.message.role===MessageRole.SYSTEM?await chatStore.removeSystemPromptPlaceholder($$props.message.id)&&goto("#/"):chatActions.delete($$props.message),set$1(showDeleteDialog,!1)}async function handleDelete2(){set$1(deletionInfo,await chatStore.getDeletionInfo($$props.message.id),!0),set$1(showDeleteDialog,!0)}function handleEdit(){set$1(isEditing2,!0),set$1(editedContent,$$props.message.role===MessageRole.SYSTEM&&$$props.message.content===SYSTEM_MESSAGE_PLACEHOLDER? +"":$$props.message.content),get$3(textareaElement)?.focus(),set$1(editedExtras,$$props.message.extra?[...$$props.message.extra]:[]),set$1(editedUploadedFiles,[],!0),setTimeout(()=>{get$3(textareaElement)&&(get$3(textareaElement).focus(),get$3(textareaElement).setSelectionRange(get$3(textareaElement).value.length,get$3(textareaElement).value.length))},0)}function handleRegenerate(modelOverride){chatActions.regenerateWithBranching($$props.message,modelOverride)}function handleContinue(){chatActions. +continueAssistantMessage($$props.message)}function handleForkConversation(options){chatActions.forkConversation($$props.message,options)}function handleNavigateToSibling(siblingId){chatActions.navigateToSibling(siblingId)}async function handleSaveEdit(){if($$props.message.role===MessageRole.SYSTEM){const newContent=get$3(editedContent).trim();if(!newContent){const conversationDeleted=await chatStore.removeSystemPromptPlaceholder($$props.message.id);set$1(isEditing2,!1),conversationDeleted&&goto( +"#/");return}await DatabaseService.updateMessage($$props.message.id,{content:newContent});const index2=conversationsStore.findMessageIndex($$props.message.id);index2!==-1&&conversationsStore.updateMessageAtIndex(index2,{content:newContent})}else if($$props.message.role===MessageRole.USER){const finalExtras=await getMergedExtras();chatActions.editWithBranching($$props.message,get$3(editedContent).trim(),finalExtras)}else chatActions.editWithReplacement($$props.message,get$3(editedContent),get$3(shouldBranchAfterEdit)); +set$1(isEditing2,!1),set$1(shouldBranchAfterEdit,!1),set$1(editedUploadedFiles,[],!0)}async function handleSaveEditOnly(){if($$props.message.role===MessageRole.USER){const finalExtras=await getMergedExtras();chatActions.editUserMessagePreserveResponses($$props.message,get$3(editedContent).trim(),finalExtras)}set$1(isEditing2,!1),set$1(editedUploadedFiles,[],!0)}async function getMergedExtras(){if(get$3(editedUploadedFiles).length===0)return get$3(editedExtras);const plainFiles=snapshot(get$3(editedUploadedFiles)), +newExtras=(await parseFilesToMessageExtras(plainFiles))?.extras||[];return[...get$3(editedExtras),...newExtras]}function handleShowDeleteDialogChange(show){set$1(showDeleteDialog,show,!0)}var div=root$Q(),node2=child(div);{var consequent=$$anchor2=>{ChatMessageSystem($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)},get message(){return $$props.message},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onNavigateToSibling:handleNavigateToSibling, +onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()},get textareaElement(){return get$3(textareaElement)},set textareaElement($$value){set$1(textareaElement,$$value,!0)}})},consequent_1=$$anchor2=>{ChatMessageMcpPrompt($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)},get message(){return $$props.message},get mcpPrompt(){return get$3(mcpPromptExtra)},onConfirmDelete:handleConfirmDelete, +onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()}})},consequent_2=$$anchor2=>{ChatMessageUser($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)},get message(){return $$props.message},onConfirmDelete:handleConfirmDelete,onCopy:handleCopy,onDelete:handleDelete2, +onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()}})},alternate=$$anchor2=>{ChatMessageAssistant($$anchor2,{get class(){return className()},get deletionInfo(){return get$3(deletionInfo)},get isLastAssistantMessage(){return isLastAssistantMessage()},get message(){return $$props.message},get toolMessages(){ +return toolMessages()},get messageContent(){return $$props.message.content},onConfirmDelete:handleConfirmDelete,onContinue:handleContinue,onCopy:handleCopy,onDelete:handleDelete2,onEdit:handleEdit,onForkConversation:handleForkConversation,onNavigateToSibling:handleNavigateToSibling,onRegenerate:handleRegenerate,onShowDeleteDialogChange:handleShowDeleteDialogChange,get showDeleteDialog(){return get$3(showDeleteDialog)},get siblingInfo(){return siblingInfo()},get textareaElement(){return get$3(textareaElement)}, +set textareaElement($$value){set$1(textareaElement,$$value,!0)}})};if_block(node2,$$render=>{$$props.message.role===MessageRole.SYSTEM?$$render(consequent):get$3(mcpPromptExtra)?$$render(consequent_1,1):$$props.message.role===MessageRole.USER?$$render(consequent_2,2):$$render(alternate,-1)})}reset(div),action(div,$$node=>fadeInView?.($$node)),append($$anchor,div),pop()}var root_2$w=from_html('<div class="agentic-text svelte-1uhcmx5"><!></div>'),root_7$f=from_html('<div class="rounded bg-muted/30\ + p-2 text-xs text-muted-foreground italic">Receiving arguments...</div>'),root_8$e=from_html('<div class="rounded bg-yellow-500/10 p-2 text-xs text-yellow-600 italic dark:text-yellow-400">Response was truncated</div>'),root_4$g=from_html('<div class="pt-3"><div class="my-3 flex items-center gap-2 text-xs text-muted-foreground"><span>Arguments:</span> <!></div> <!></div>'),root_11$8=from_html('<div class="pt-3"><div class="my-3 text-xs text-muted-foreground">Arguments:</div> <!></div>'),root_13$6=from_html( +'<div class="rounded bg-muted/30 p-2 text-xs text-muted-foreground italic">Waiting for result...</div>'),root_16$2=from_html('<img class="mt-2 mb-2 h-auto max-w-full rounded-lg" loading="lazy"/>'),root_15$5=from_html('<div class="font-mono text-xs leading-relaxed whitespace-pre-wrap"> </div> <!>',1),root_14$4=from_html('<div class="overflow-auto rounded-lg border border-border bg-muted p-4"></div>'),root_17$5=from_html('<div class="rounded bg-muted/30 p-2 text-xs text-muted-foreground italic">No\ + output</div>'),root_10$7=from_html('<!> <div class="pt-3"><div class="my-3 flex items-center gap-2 text-xs text-muted-foreground"><span>Result:</span> <!></div> <!></div>',1),root_19$5=from_html('<div class="pt-3"><div class="text-xs leading-relaxed break-words whitespace-pre-wrap"> </div></div>'),root_21$2=from_html('<div class="pt-3"><div class="text-xs leading-relaxed break-words whitespace-pre-wrap"> </div></div>'),root_25$2=from_html('<div class="turn-stats svelte-1uhcmx5"><!></div>'),root_23$1=from_html( +'<div class="agentic-turn my-2 hover:bg-muted/80 dark:hover:bg-muted/30 svelte-1uhcmx5"><span class="agentic-turn-label svelte-1uhcmx5"></span> <!> <!></div>'),root$P=from_html('<div class="agentic-content svelte-1uhcmx5"><!> <!> <!></div>');function ChatMessageAgenticContent($$anchor,$$props){push$1($$props,!0);const renderSection=($$anchor2,section2=noop$3,index2=noop$3)=>{var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor3=>{var div=root_2$w(),node_1=child(div);{let $0=user_derived( +()=>$$props.message?.extra);MarkdownContent(node_1,{get content(){return section2().content},get attachments(){return get$3($0)}})}reset(div),append($$anchor3,div)},consequent_4=$$anchor3=>{const streamingIcon=user_derived(()=>(isStreaming(),Loader_circle)),streamingIconClass=user_derived(()=>isStreaming()?"h-4 w-4 animate-spin":"h-4 w-4");{let $0=user_derived(()=>isExpanded(index2(),section2())),$1=user_derived(()=>section2().toolName||"Tool call"),$2=user_derived(()=>isStreaming()?"":"incomple\ +te");CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return get$3(streamingIcon)},get iconClass(){return get$3(streamingIconClass)},get title(){return get$3($1)},get subtitle(){return get$3($2)},get isStreaming(){return isStreaming()},onToggle:()=>toggleExpanded(index2(),section2()),children:($$anchor4,$$slotProps)=>{var div_1=root_4$g(),div_2=child(div_1),node_2=sibling(child(div_2),2);{var consequent_1=$$anchor5=>{Loader_circle($$anchor5,{class:"h-3 w-3 \ +animate-spin"})};if_block(node_2,$$render=>{isStreaming()&&$$render(consequent_1)})}reset(div_2);var node_3=sibling(div_2,2);{var consequent_2=$$anchor5=>{{let $02=user_derived(()=>formatJsonPretty(section2().toolArgs));SyntaxHighlightedCode($$anchor5,{get code(){return get$3($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}},consequent_3=$$anchor5=>{var div_3=root_7$f();append($$anchor5,div_3)},alternate=$$anchor5=>{var div_4=root_8$e();append($$anchor5,div_4)}; +if_block(node_3,$$render=>{section2().toolArgs?$$render(consequent_2):isStreaming()?$$render(consequent_3,1):$$render(alternate,-1)})}reset(div_1),append($$anchor4,div_1)},$$slots:{default:!0}})}},consequent_10=$$anchor3=>{const isPending=user_derived(()=>section2().type===AgenticSectionType.TOOL_CALL_PENDING),toolIcon=user_derived(()=>get$3(isPending)?Loader_circle:Wrench),toolIconClass=user_derived(()=>get$3(isPending)?"h-4 w-4 animate-spin":"h-4 w-4");{let $0=user_derived(()=>isExpanded(index2(), +section2())),$1=user_derived(()=>section2().toolName||""),$2=user_derived(()=>get$3(isPending)?"executing...":void 0);CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return get$3(toolIcon)},get iconClass(){return get$3(toolIconClass)},get title(){return get$3($1)},get subtitle(){return get$3($2)},get isStreaming(){return get$3(isPending)},onToggle:()=>toggleExpanded(index2(),section2()),children:($$anchor4,$$slotProps)=>{var fragment_5=root_10$7(),node_4=first_child( +fragment_5);{var consequent_5=$$anchor5=>{var div_5=root_11$8(),node_5=sibling(child(div_5),2);{let $02=user_derived(()=>formatJsonPretty(section2().toolArgs));SyntaxHighlightedCode(node_5,{get code(){return get$3($02)},get language(){return FileTypeText.JSON},maxHeight:"20rem",class:"text-xs"})}reset(div_5),append($$anchor5,div_5)};if_block(node_4,$$render=>{section2().toolArgs&§ion2().toolArgs!=="{}"&&$$render(consequent_5)})}var div_6=sibling(node_4,2),div_7=child(div_6),node_6=sibling(child( +div_7),2);{var consequent_6=$$anchor5=>{Loader_circle($$anchor5,{class:"h-3 w-3 animate-spin"})};if_block(node_6,$$render=>{get$3(isPending)&&$$render(consequent_6)})}reset(div_7);var node_7=sibling(div_7,2);{var consequent_7=$$anchor5=>{var div_8=root_13$6();append($$anchor5,div_8)},consequent_9=$$anchor5=>{var div_9=root_14$4();each(div_9,21,()=>section2().parsedLines,index$2,($$anchor6,line)=>{var fragment_7=root_15$5(),div_10=first_child(fragment_7),text2=child(div_10,!0);reset(div_10);var node_8=sibling( +div_10,2);{var consequent_8=$$anchor7=>{var img=root_16$2();template_effect(()=>{set_attribute(img,"src",get$3(line).image.base64Url),set_attribute(img,"alt",get$3(line).image.name)}),append($$anchor7,img)};if_block(node_8,$$render=>{get$3(line).image&&$$render(consequent_8)})}template_effect(()=>set_text(text2,get$3(line).text)),append($$anchor6,fragment_7)}),reset(div_9),append($$anchor5,div_9)},alternate_1=$$anchor5=>{var div_11=root_17$5();append($$anchor5,div_11)};if_block(node_7,$$render=>{ +get$3(isPending)?$$render(consequent_7):section2().toolResult?$$render(consequent_9,1):$$render(alternate_1,-1)})}reset(div_6),append($$anchor4,fragment_5)},$$slots:{default:!0}})}},consequent_11=$$anchor3=>{{let $0=user_derived(()=>isExpanded(index2(),section2()));CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return Brain},title:"Reasoning",onToggle:()=>toggleExpanded(index2(),section2()),children:($$anchor4,$$slotProps)=>{var div_12=root_19$5(),div_13=child( +div_12),text_1=child(div_13,!0);reset(div_13),reset(div_12),template_effect(()=>set_text(text_1,section2().content)),append($$anchor4,div_12)},$$slots:{default:!0}})}},consequent_12=$$anchor3=>{const reasoningTitle=user_derived(()=>isStreaming()?"Reasoning...":"Reasoning"),reasoningSubtitle=user_derived(()=>isStreaming()?"":"incomplete");{let $0=user_derived(()=>isExpanded(index2(),section2()));CollapsibleContentBlock($$anchor3,{get open(){return get$3($0)},class:"my-2",get icon(){return Brain}, +get title(){return get$3(reasoningTitle)},get subtitle(){return get$3(reasoningSubtitle)},get isStreaming(){return isStreaming()},onToggle:()=>toggleExpanded(index2(),section2()),children:($$anchor4,$$slotProps)=>{var div_14=root_21$2(),div_15=child(div_14),text_2=child(div_15,!0);reset(div_15),reset(div_14),template_effect(()=>set_text(text_2,section2().content)),append($$anchor4,div_14)},$$slots:{default:!0}})}};if_block(node2,$$render=>{section2().type===AgenticSectionType.TEXT?$$render(consequent): +section2().type===AgenticSectionType.TOOL_CALL_STREAMING?$$render(consequent_4,1):section2().type===AgenticSectionType.TOOL_CALL||section2().type===AgenticSectionType.TOOL_CALL_PENDING?$$render(consequent_10,2):section2().type===AgenticSectionType.REASONING?$$render(consequent_11,3):section2().type===AgenticSectionType.REASONING_PENDING&&$$render(consequent_12,4)})}append($$anchor2,fragment)};let toolMessages=prop($$props,"toolMessages",19,()=>[]),isStreaming=prop($$props,"isStreaming",3,!1),isLastAssistantMessage=prop( +$$props,"isLastAssistantMessage",3,!1),highlightTurns=prop($$props,"highlightTurns",3,!1),expandedStates=proxy({});const showToolCallInProgress=user_derived(()=>config$1().showToolCallInProgress),showThoughtInProgress=user_derived(()=>config$1().showThoughtInProgress);let permissionDismissed=state$1(!1);const pendingPermission=user_derived(()=>isStreaming()&&isLastAssistantMessage()?agenticPendingPermissionRequest($$props.message.convId):null);let prevPendingRef=null;user_effect(()=>{get$3(pendingPermission)!== +prevPendingRef&&(prevPendingRef=get$3(pendingPermission),get$3(pendingPermission)&&set$1(permissionDismissed,!1))});function handlePermission(decision){set$1(permissionDismissed,!0),agenticResolvePermission($$props.message.convId,decision)}let continueDismissed=state$1(!1);const pendingContinue=user_derived(()=>isStreaming()&&isLastAssistantMessage()?agenticPendingContinueRequest($$props.message.convId):!1);let prevContinueRef=!1;user_effect(()=>{get$3(pendingContinue)!==prevContinueRef&&(prevContinueRef= +get$3(pendingContinue),get$3(pendingContinue)&&set$1(continueDismissed,!1))});function handleContinue(shouldContinue){set$1(continueDismissed,!0),agenticResolveContinue($$props.message.convId,shouldContinue)}const sections=user_derived(()=>deriveAgenticSections($$props.message,toolMessages(),[],isStreaming())),sectionsParsed=user_derived(()=>get$3(sections).map(section2=>({...section2,parsedLines:section2.toolResult?parseToolResultWithImages(section2.toolResult,section2.toolResultExtras||$$props. +message?.extra):[]}))),turnGroups=user_derived(()=>{const turns=[];let currentTurn=[],currentIndices=[],prevWasTool=!1;for(let i=0;i<get$3(sectionsParsed).length;i++){const section2=get$3(sectionsParsed)[i],isTool=section2.type===AgenticSectionType.TOOL_CALL||section2.type===AgenticSectionType.TOOL_CALL_PENDING||section2.type===AgenticSectionType.TOOL_CALL_STREAMING;!isTool&&prevWasTool&¤tTurn.length>0&&(turns.push({sections:currentTurn,flatIndices:currentIndices}),currentTurn=[],currentIndices= +[]),currentTurn.push(section2),currentIndices.push(i),prevWasTool=isTool}return currentTurn.length>0&&turns.push({sections:currentTurn,flatIndices:currentIndices}),turns});function getDefaultExpanded(section2){return section2.type===AgenticSectionType.TOOL_CALL_PENDING||section2.type===AgenticSectionType.TOOL_CALL_STREAMING?get$3(showToolCallInProgress):section2.type===AgenticSectionType.REASONING_PENDING?get$3(showThoughtInProgress):!1}function isExpanded(index2,section2){return expandedStates[index2]!== +void 0?expandedStates[index2]:getDefaultExpanded(section2)}function toggleExpanded(index2,section2){const currentState=isExpanded(index2,section2);expandedStates[index2]=!currentState}function buildTurnAgenticTimings(stats){return{turns:1,toolCallsCount:stats.toolCalls.length,toolsMs:stats.toolsMs,toolCalls:stats.toolCalls,llm:stats.llm}}var div_16=root$P(),node_9=child(div_16);{var consequent_14=$$anchor2=>{var fragment_10=comment$2(),node_10=first_child(fragment_10);each(node_10,17,()=>get$3(turnGroups), +index$2,($$anchor3,turn,turnIndex)=>{const turnStats=user_derived(()=>$$props.message?.timings?.agentic?.perTurn?.[turnIndex]);var div_17=root_23$1(),span=child(div_17);span.textContent=`Turn ${turnIndex+1}`;var node_11=sibling(span,2);each(node_11,19,()=>get$3(turn).sections,(section2,sIdx)=>get$3(turn).flatIndices[sIdx],($$anchor4,section2,sIdx)=>{renderSection($$anchor4,()=>get$3(section2),()=>get$3(turn).flatIndices[get$3(sIdx)])});var node_12=sibling(node_11,2);{var consequent_13=$$anchor4=>{ +var div_18=root_25$2(),node_13=child(div_18);{let $0=user_derived(()=>get$3(turnStats).toolCalls.length>0?buildTurnAgenticTimings(get$3(turnStats)):void 0);ChatMessageStatistics(node_13,{get promptTokens(){return get$3(turnStats).llm.prompt_n},get promptMs(){return get$3(turnStats).llm.prompt_ms},get predictedTokens(){return get$3(turnStats).llm.predicted_n},get predictedMs(){return get$3(turnStats).llm.predicted_ms},get agenticTimings(){return get$3($0)},get initialView(){return ChatMessageStatsView. +GENERATION},hideSummary:!0})}reset(div_18),append($$anchor4,div_18)};if_block(node_12,$$render=>{get$3(turnStats)&&$$render(consequent_13)})}reset(div_17),append($$anchor3,div_17)}),append($$anchor2,fragment_10)},alternate_2=$$anchor2=>{var fragment_12=comment$2(),node_14=first_child(fragment_12);each(node_14,17,()=>get$3(sectionsParsed),index$2,($$anchor3,section2,index2)=>{renderSection($$anchor3,()=>get$3(section2),()=>index2)}),append($$anchor2,fragment_12)};if_block(node_9,$$render=>{highlightTurns()&& +get$3(turnGroups).length>1?$$render(consequent_14):$$render(alternate_2,-1)})}var node_15=sibling(node_9,2);{var consequent_15=$$anchor2=>{ChatMessagePermissionRequest($$anchor2,{get toolName(){return get$3(pendingPermission).toolName},get serverLabel(){return get$3(pendingPermission).serverLabel},onDecision:handlePermission})};if_block(node_15,$$render=>{get$3(pendingPermission)&&!get$3(permissionDismissed)&&$$render(consequent_15)})}var node_16=sibling(node_15,2);{var consequent_16=$$anchor2=>{ +ChatMessageContinueRequest($$anchor2,{onDecision:handleContinue})};if_block(node_16,$$render=>{get$3(pendingContinue)&&!get$3(continueDismissed)&&$$render(consequent_16)})}reset(div_16),append($$anchor,div_16),pop()}var root$O=from_html("<div><!></div>");function Button_group_root($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy","class","children"]);var div=root$O();attribute_effect(div,$0=>({class:$0,...restProps}),[()=>cn$1("flex items-cent\ +er [&>*:first-child]:rounded-r-none [&>*:last-child]:rounded-l-none [&>*:not(:first-child):not(:last-child)]:rounded-none",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children),reset(div),append($$anchor,div),pop()}var root$N=from_html("<div></div>");function Button_group_separator($$anchor,$$props){push$1($$props,!0);let restProps=rest_props($$props,["$$slots","$$events","$$legacy"]);var div=root$N();attribute_effect(div,$0=>({class:$0,...restProps}),[()=>cn$1("shrink-0 self\ +-stretch bg-border","w-px")]),append($$anchor,div),pop()}var root$M=from_html('<div class="my-2 rounded-lg border border-border bg-card p-3"><div class="mb-3 flex items-center gap-2 text-sm"><!> <span><!></span></div> <div class="flex flex-wrap items-center gap-2"><!></div></div>');function ChatMessageActionCard($$anchor,$$props){var div=root$M(),div_1=child(div),node2=child(div_1);component(node2,()=>$$props.icon,($$anchor2,Icon_1)=>{Icon_1($$anchor2,{class:"h-4 w-4 shrink-0 text-muted-foregrou\ +nd"})});var span=sibling(node2,2),node_1=child(span);snippet(node_1,()=>$$props.message),reset(span),reset(div_1);var div_2=sibling(div_1,2),node_2=child(div_2);snippet(node_2,()=>$$props.actions),reset(div_2),reset(div),append($$anchor,div)}var root_2$v=from_html('from <span class="font-semibold"> </span>',1),root_1$m=from_html('Allow use of <span class="font-semibold"> </span> <!> ?',1),root_5$i=from_html("<!> <!> <!>",1),root_10$6=from_html("Always allow <pre> </pre> tool",1),root_9$c=from_html( +"<!> <!>",1),root_4$f=from_html("<!> <!>",1),root_3$m=from_html("<!> <!>",1);function ChatMessagePermissionRequest($$anchor,$$props){push$1($$props,!0),ChatMessageActionCard($$anchor,{get icon(){return Shield_question},message:$$anchor2=>{next$1();var fragment_1=root_1$m(),span=sibling(first_child(fragment_1)),text2=child(span,!0);reset(span);var node2=sibling(span,2);{var consequent=$$anchor3=>{var fragment_2=root_2$v(),span_1=sibling(first_child(fragment_2)),text_1=child(span_1,!0);reset(span_1), +template_effect(()=>set_text(text_1,$$props.serverLabel)),append($$anchor3,fragment_2)};if_block(node2,$$render=>{$$props.serverLabel&&$$render(consequent)})}next$1(),template_effect(()=>set_text(text2,$$props.toolName)),append($$anchor2,fragment_1)},actions:$$anchor2=>{var fragment_3=root_3$m(),node_1=first_child(fragment_3);component(node_1,()=>Root$2,($$anchor3,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_4=root_4$f(),node_2=first_child(fragment_4); +component(node_2,()=>Button_group_root,($$anchor5,ButtonGroup_Root)=>{ButtonGroup_Root($$anchor5,{class:"overflow-hidden rounded-md bg-foreground text-white shadow-sm dark:bg-secondary dark:text-foreground",children:($$anchor6,$$slotProps2)=>{var fragment_5=root_5$i(),node_3=first_child(fragment_5);Button(node_3,{class:"rounded-none! shadow-none!",size:"sm",onclick:()=>$$props.onDecision(ToolPermissionDecision.ONCE),children:($$anchor7,$$slotProps3)=>{next$1();var text_2=text$8("Allow once");append( +$$anchor7,text_2)},$$slots:{default:!0}});var node_4=sibling(node_3,2);component(node_4,()=>Button_group_separator,($$anchor7,ButtonGroup_Separator)=>{ButtonGroup_Separator($$anchor7,{})});var node_5=sibling(node_4,2);component(node_5,()=>Dropdown_menu_trigger,($$anchor7,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor7,{children:($$anchor8,$$slotProps3)=>{Button($$anchor8,{size:"sm",class:"rounded-none! !ps-2 shadow-none!",children:($$anchor9,$$slotProps4)=>{Chevron_down($$anchor9,{class:"\ +h-3.5 w-3.5"})},$$slots:{default:!0}})},$$slots:{default:!0}})}),append($$anchor6,fragment_5)},$$slots:{default:!0}})});var node_6=sibling(node_2,2);component(node_6,()=>Dropdown_menu_content,($$anchor5,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor5,{align:"start",class:"min-w-[8rem]",children:($$anchor6,$$slotProps2)=>{var fragment_8=root_9$c(),node_7=first_child(fragment_8);component(node_7,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor7,{onclick:()=>$$props. +onDecision(ToolPermissionDecision.ALWAYS),children:($$anchor8,$$slotProps3)=>{next$1();var fragment_9=root_10$6(),pre=sibling(first_child(fragment_9)),text_3=child(pre,!0);reset(pre),next$1(),template_effect(()=>set_text(text_3,$$props.toolName)),append($$anchor8,fragment_9)},$$slots:{default:!0}})});var node_8=sibling(node_7,2);{var consequent_1=$$anchor7=>{var fragment_10=comment$2(),node_9=first_child(fragment_10);component(node_9,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item_1)=>{DropdownMenu_Item_1( +$$anchor8,{onclick:()=>$$props.onDecision(ToolPermissionDecision.ALWAYS_SERVER),children:($$anchor9,$$slotProps3)=>{next$1();var text_4=text$8();template_effect(()=>set_text(text_4,`Always allow all tools from ${$$props.serverLabel??""}`)),append($$anchor9,text_4)},$$slots:{default:!0}})}),append($$anchor7,fragment_10)},alternate=$$anchor7=>{const source2=user_derived(()=>toolsStore.getToolSource($$props.toolName)),providerName=user_derived(()=>get$3(source2)===ToolSource.BUILTIN?TOOL_SERVER_LABELS[ToolSource. +BUILTIN]:get$3(source2)===ToolSource.CUSTOM?TOOL_SERVER_LABELS[ToolSource.CUSTOM]:"MCP Tools");var fragment_12=comment$2(),node_10=first_child(fragment_12);component(node_10,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item_2)=>{DropdownMenu_Item_2($$anchor8,{onclick:()=>$$props.onDecision(ToolPermissionDecision.ALWAYS_SERVER),children:($$anchor9,$$slotProps3)=>{next$1();var text_5=text$8();template_effect(()=>set_text(text_5,`Approve all tools from ${get$3(providerName)??""}`)),append($$anchor9, +text_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_12)};if_block(node_8,$$render=>{$$props.serverLabel?$$render(consequent_1):$$render(alternate,-1)})}append($$anchor6,fragment_8)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})});var node_11=sibling(node_1,2);Button(node_11,{variant:"destructive",size:"sm",class:"text-destructive hover:text-destructive",onclick:()=>$$props.onDecision(ToolPermissionDecision.DENY),children:($$anchor3,$$slotProps)=>{next$1(); +var text_6=text$8("Deny");append($$anchor3,text_6)},$$slots:{default:!0}}),append($$anchor2,fragment_3)}}),pop()}var root_2$u=from_html("<!> <!>",1);function ChatMessageContinueRequest($$anchor,$$props){push$1($$props,!0),ChatMessageActionCard($$anchor,{get icon(){return Rotate_cw},message:$$anchor2=>{next$1();var text2=text$8("Agentic turn limit reached. Continue?");append($$anchor2,text2)},actions:$$anchor2=>{var fragment_1=root_2$u(),node2=first_child(fragment_1);Button(node2,{size:"sm",onclick:()=>$$props. +onDecision(!0),children:($$anchor3,$$slotProps)=>{next$1();var text_1=text$8("Continue");append($$anchor3,text_1)},$$slots:{default:!0}});var node_1=sibling(node2,2);Button(node_1,{variant:"destructive",size:"sm",class:"text-destructive hover:text-destructive",onclick:()=>$$props.onDecision(!1),children:($$anchor3,$$slotProps)=>{next$1();var text_2=text$8("Stop");append($$anchor3,text_2)},$$slots:{default:!0}}),append($$anchor2,fragment_1)}}),pop()}var root_6$d=from_html('<div class="flex items-\ +center gap-2"><span class="text-xs text-muted-foreground">Show raw output</span> <!></div>'),root_7$e=from_html('<div class="flex flex-col gap-4 py-2"><div class="flex flex-col gap-2"><!> <!></div> <div class="flex items-center gap-2"><!> <!></div></div>'),root$L=from_html('<div><div><!> <div class="pointer-events-auto inset-0 flex items-center gap-1 opacity-100 transition-all duration-150"><!> <!> <!> <!> <!> <!></div></div> <!></div> <!> <!>',1);function ChatMessageActions($$anchor,$$props){push$1( +$$props,!0);let siblingInfo=prop($$props,"siblingInfo",3,null),showDeleteDialog=prop($$props,"showDeleteDialog",7),showRawOutputSwitch=prop($$props,"showRawOutputSwitch",3,!1),rawOutputEnabled=prop($$props,"rawOutputEnabled",3,!1),showForkDialog=state$1(!1),forkName=state$1(""),forkIncludeAttachments=state$1(!0);function handleConfirmDelete(){$$props.onConfirmDelete(),$$props.onShowDeleteDialogChange(!1)}function handleOpenForkDialog(){const conv=activeConversation();set$1(forkName,`Fork of ${conv?. +name??"Conversation"}`),set$1(forkIncludeAttachments,!0),set$1(showForkDialog,!0)}function handleConfirmFork(){$$props.onForkConversation?.({name:get$3(forkName).trim(),includeAttachments:get$3(forkIncludeAttachments)}),set$1(showForkDialog,!1)}var fragment=root$L(),div=first_child(fragment),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{ChatMessageBranchingControls($$anchor2,{get siblingInfo(){return siblingInfo()},get onNavigateToSibling(){return $$props.onNavigateToSibling}})}; +if_block(node2,$$render=>{siblingInfo()&&siblingInfo().totalSiblings>1&&$$render(consequent)})}var div_2=sibling(node2,2),node_1=child(div_2);ActionIcon(node_1,{get icon(){return Copy},tooltip:"Copy",get onclick(){return $$props.onCopy}});var node_2=sibling(node_1,2);{var consequent_1=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Square_pen},tooltip:"Edit",get onclick(){return $$props.onEdit}})};if_block(node_2,$$render=>{$$props.onEdit&&$$render(consequent_1)})}var node_3=sibling(node_2,2); +{var consequent_2=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Refresh_cw},tooltip:"Regenerate",onclick:()=>$$props.onRegenerate()})};if_block(node_3,$$render=>{$$props.role===MessageRole.ASSISTANT&&$$props.onRegenerate&&$$render(consequent_2)})}var node_4=sibling(node_3,2);{var consequent_3=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Arrow_right},tooltip:"Continue",get onclick(){return $$props.onContinue}})};if_block(node_4,$$render=>{$$props.role===MessageRole.ASSISTANT&&$$props. +onContinue&&$$render(consequent_3)})}var node_5=sibling(node_4,2);{var consequent_4=$$anchor2=>{ActionIcon($$anchor2,{get icon(){return Git_branch},tooltip:"Fork conversation",onclick:handleOpenForkDialog})};if_block(node_5,$$render=>{$$props.onForkConversation&&$$render(consequent_4)})}var node_6=sibling(node_5,2);ActionIcon(node_6,{get icon(){return Trash_2},tooltip:"Delete",get onclick(){return $$props.onDelete}}),reset(div_2),reset(div_1);var node_7=sibling(div_1,2);{var consequent_5=$$anchor2=>{ +var div_3=root_6$d(),node_8=sibling(child(div_3),2);Switch(node_8,{get checked(){return rawOutputEnabled()},onCheckedChange:checked=>$$props.onRawOutputToggle?.(checked)}),reset(div_3),append($$anchor2,div_3)};if_block(node_7,$$render=>{showRawOutputSwitch()&&$$render(consequent_5)})}reset(div);var node_9=sibling(div,2);{let $0=user_derived(()=>$$props.deletionInfo&&$$props.deletionInfo.totalCount>1?`This will delete ${$$props.deletionInfo.totalCount} messages including: ${$$props.deletionInfo.userMessages}\ + user message${$$props.deletionInfo.userMessages>1?"s":""} and ${$$props.deletionInfo.assistantMessages} assistant response${$$props.deletionInfo.assistantMessages>1?"s":""}. All messages in this branch and their responses will be permanently removed. This action cannot be undone.`:"Are you sure you want to delete this message? This action cannot be undone."),$1=user_derived(()=>$$props.deletionInfo&&$$props.deletionInfo.totalCount>1?`Delete ${$$props.deletionInfo.totalCount} Messages`:"Delete"); +DialogConfirmation(node_9,{title:"Delete Message",get description(){return get$3($0)},get confirmText(){return get$3($1)},cancelText:"Cancel",variant:"destructive",get icon(){return Trash_2},onConfirm:handleConfirmDelete,onCancel:()=>$$props.onShowDeleteDialogChange(!1),get open(){return showDeleteDialog()},set open($$value){showDeleteDialog($$value)}})}var node_10=sibling(node_9,2);DialogConfirmation(node_10,{title:"Fork Conversation",description:"Create a new conversation branching from this m\ +essage.",confirmText:"Fork",cancelText:"Cancel",get icon(){return Git_branch},onConfirm:handleConfirmFork,onCancel:()=>set$1(showForkDialog,!1),get open(){return get$3(showForkDialog)},set open($$value){set$1(showForkDialog,$$value,!0)},children:($$anchor2,$$slotProps)=>{var div_4=root_7$e(),div_5=child(div_4),node_11=child(div_5);Label(node_11,{for:"fork-name",children:($$anchor3,$$slotProps2)=>{next$1();var text2=text$8("Title");append($$anchor3,text2)},$$slots:{default:!0}});var node_12=sibling( +node_11,2);Input(node_12,{id:"fork-name",class:"text-foreground",placeholder:"Enter fork name",type:"text",get value(){return get$3(forkName)},set value($$value){set$1(forkName,$$value,!0)}}),reset(div_5);var div_6=sibling(div_5,2),node_13=child(div_6);Checkbox(node_13,{id:"fork-attachments",get checked(){return get$3(forkIncludeAttachments)},onCheckedChange:checked=>{set$1(forkIncludeAttachments,checked===!0)}});var node_14=sibling(node_13,2);Label(node_14,{for:"fork-attachments",class:"cursor-\ +pointer text-sm font-normal",children:($$anchor3,$$slotProps2)=>{next$1();var text_1=text$8("Include all attachments");append($$anchor3,text_1)},$$slots:{default:!0}}),reset(div_6),reset(div_4),append($$anchor2,div_4)},$$slots:{default:!0}}),template_effect(()=>{set_class(div,1,`relative ${$$props.justify==="start"?"mt-2":""} flex h-6 items-center justify-between`),set_class(div_1,1,`${$$props.actionsPosition==="left"?"left-0":"right-0"} flex items-center gap-2 opacity-100 transition-opacity`)}), +append($$anchor,fragment),pop()}var root_5$h=from_html("<p>Previous version</p>"),root_2$t=from_html("<!> <!>",1),root_9$b=from_html("<p>Next version</p>"),root_6$c=from_html("<!> <!>",1),root_1$l=from_html('<div role="navigation"><!> <span class="px-1 font-mono text-xs"> </span> <!></div>');function ChatMessageBranchingControls($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),hasPrevious=user_derived(()=>$$props.siblingInfo&&$$props.siblingInfo.currentIndex>0),hasNext=user_derived( +()=>$$props.siblingInfo&&$$props.siblingInfo.currentIndex<$$props.siblingInfo.totalSiblings-1),nextSiblingId=user_derived(()=>get$3(hasNext)?$$props.siblingInfo.siblingIds[$$props.siblingInfo.currentIndex+1]:null),previousSiblingId=user_derived(()=>get$3(hasPrevious)?$$props.siblingInfo.siblingIds[$$props.siblingInfo.currentIndex-1]:null);function handleNext(){get$3(nextSiblingId)&&$$props.onNavigateToSibling?.(get$3(nextSiblingId))}function handlePrevious(){get$3(previousSiblingId)&&$$props.onNavigateToSibling?.( +get$3(previousSiblingId))}var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var div=root_1$l(),node_1=child(div);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_1=root_2$t(),node_2=first_child(fragment_1);component(node_2,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{{let $0=user_derived(()=>get$3(hasPrevious)?"":"cursor-\ +not-allowed opacity-30"),$1=user_derived(()=>!get$3(hasPrevious));Button($$anchor6,{"aria-label":"Previous message version",get class(){return`h-5 w-5 p-0 ${get$3($0)??""}`},get disabled(){return get$3($1)},onclick:handlePrevious,size:"sm",variant:"ghost",children:($$anchor7,$$slotProps3)=>{Chevron_left($$anchor7,{class:"h-3 w-3"})},$$slots:{default:!0}})}},$$slots:{default:!0}})});var node_3=sibling(node_2,2);component(node_3,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5, +{children:($$anchor6,$$slotProps2)=>{var p2=root_5$h();append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_1)},$$slots:{default:!0}})});var span=sibling(node_1,2),text2=child(span);reset(span);var node_4=sibling(span,2);component(node_4,()=>Root$5,($$anchor3,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_4=root_6$c(),node_5=first_child(fragment_4);component(node_5,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger_1)=>{Tooltip_Trigger_1( +$$anchor5,{children:($$anchor6,$$slotProps2)=>{{let $0=user_derived(()=>get$3(hasNext)?"":"cursor-not-allowed opacity-30"),$1=user_derived(()=>!get$3(hasNext));Button($$anchor6,{"aria-label":"Next message version",get class(){return`h-5 w-5 p-0 ${get$3($0)??""}`},get disabled(){return get$3($1)},onclick:handleNext,size:"sm",variant:"ghost",children:($$anchor7,$$slotProps3)=>{Chevron_right($$anchor7,{class:"h-3 w-3"})},$$slots:{default:!0}})}},$$slots:{default:!0}})});var node_6=sibling(node_5,2); +component(node_6,()=>Tooltip_content,($$anchor5,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p_1=root_9$b();append($$anchor6,p_1)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})}),reset(div),template_effect(()=>{set_attribute(div,"aria-label",`Message version ${$$props.siblingInfo.currentIndex+1} of ${$$props.siblingInfo.totalSiblings??""}`),set_class(div,1,`flex items-center gap-1 text-xs text-muted-foreground ${className()?? +""}`),set_text(text2,`${$$props.siblingInfo.currentIndex+1}/${$$props.siblingInfo.totalSiblings??""}`)}),append($$anchor2,div)};if_block(node2,$$render=>{$$props.siblingInfo&&$$props.siblingInfo.totalSiblings>1&&$$render(consequent)})}append($$anchor,fragment),pop()}var root_3$l=from_html('<button type="button"><!> <span class="sr-only">Reading</span></button>'),root_4$e=from_html("<p>Reading (prompt processing)</p>"),root_2$s=from_html("<!> <!>",1),root_6$b=from_html('<button type="button"><!> \ +<span class="sr-only">Generation</span></button>'),root_7$d=from_html("<p> </p>"),root_5$g=from_html("<!> <!>",1),root_10$5=from_html('<button type="button"><!> <span class="sr-only">Tools</span></button>'),root_11$7=from_html("<p>Tool calls</p>"),root_9$a=from_html("<!> <!>",1),root_14$3=from_html('<button type="button"><!> <span class="sr-only">Summary</span></button>'),root_15$4=from_html("<p>Agentic summary</p>"),root_13$5=from_html("<!> <!>",1),root_8$d=from_html("<!> <!>",1),root_16$1=from_html( +"<!> <!> <!>",1),root_17$4=from_html("<!> <!> <!>",1),root_18$4=from_html("<!> <!> <!>",1),root_19$4=from_html("<!> <!> <!>",1),root$K=from_html('<div class="inline-flex items-center text-xs text-muted-foreground"><div class="inline-flex items-center rounded-sm bg-muted-foreground/15 p-0.5"><!> <!> <!></div> <div class="flex items-center gap-1 px-2"><!></div></div>');function ChatMessageStatistics($$anchor,$$props){push$1($$props,!0);let isLive=prop($$props,"isLive",3,!1),isProcessingPrompt=prop( +$$props,"isProcessingPrompt",3,!1),initialView=prop($$props,"initialView",19,()=>ChatMessageStatsView.GENERATION),hideSummary=prop($$props,"hideSummary",3,!1),activeView=user_derived(initialView),hasAutoSwitchedToGeneration=state$1(!1);user_effect(()=>{$$props.onActiveViewChange?.(get$3(activeView))}),user_effect(()=>{isLive()&&(!get$3(hasAutoSwitchedToGeneration)&&!isProcessingPrompt()&&$$props.predictedTokens&&$$props.predictedTokens>0?(set$1(activeView,ChatMessageStatsView.GENERATION),set$1(hasAutoSwitchedToGeneration, +!0)):get$3(hasAutoSwitchedToGeneration)||set$1(activeView,ChatMessageStatsView.READING))});let hasGenerationStats=user_derived(()=>$$props.predictedTokens!==void 0&&$$props.predictedTokens>0&&$$props.predictedMs!==void 0&&$$props.predictedMs>0),tokensPerSecond=user_derived(()=>get$3(hasGenerationStats)?$$props.predictedTokens/$$props.predictedMs*MS_PER_SECOND:0),formattedTime=user_derived(()=>$$props.predictedMs!==void 0?formatPerformanceTime($$props.predictedMs):DEFAULT_PERFORMANCE_TIME),promptTokensPerSecond=user_derived( +()=>$$props.promptTokens!==void 0&&$$props.promptMs!==void 0&&$$props.promptMs>0?$$props.promptTokens/$$props.promptMs*MS_PER_SECOND:void 0),formattedPromptTime=user_derived(()=>$$props.promptMs!==void 0?formatPerformanceTime($$props.promptMs):void 0),hasPromptStats=user_derived(()=>$$props.promptTokens!==void 0&&$$props.promptMs!==void 0&&get$3(promptTokensPerSecond)!==void 0&&get$3(formattedPromptTime)!==void 0),isGenerationDisabled=user_derived(()=>isLive()&&!get$3(hasGenerationStats)),hasAgenticStats=user_derived( +()=>$$props.agenticTimings!==void 0&&$$props.agenticTimings.toolCallsCount>0),agenticToolsPerSecond=user_derived(()=>get$3(hasAgenticStats)&&$$props.agenticTimings.toolsMs>0?$$props.agenticTimings.toolCallsCount/$$props.agenticTimings.toolsMs*MS_PER_SECOND:0),formattedAgenticToolsTime=user_derived(()=>get$3(hasAgenticStats)?formatPerformanceTime($$props.agenticTimings.toolsMs):DEFAULT_PERFORMANCE_TIME),agenticTotalTimeMs=user_derived(()=>get$3(hasAgenticStats)?$$props.agenticTimings.toolsMs+$$props. +agenticTimings.llm.predicted_ms+$$props.agenticTimings.llm.prompt_ms:0),formattedAgenticTotalTime=user_derived(()=>formatPerformanceTime(get$3(agenticTotalTimeMs)));var div=root$K(),div_1=child(div),node2=child(div_1);{var consequent=$$anchor2=>{var fragment=comment$2(),node_1=first_child(fragment);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_1=root_2$s(),node_2=first_child(fragment_1);component(node_2,()=>Tooltip_trigger, +($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{var button=root_3$l(),node_3=child(button);Book_open_text(node_3,{class:"h-3 w-3"}),next$1(2),reset(button),template_effect(()=>set_class(button,1,`inline-flex h-5 w-5 items-center justify-center rounded-sm transition-colors ${get$3(activeView)===ChatMessageStatsView.READING?"bg-background text-foreground shadow-sm":"hover:text-foreground"}`)),delegated("click",button,()=>set$1(activeView,ChatMessageStatsView. +READING)),append($$anchor6,button)},$$slots:{default:!0}})});var node_4=sibling(node_2,2);component(node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_4$e();append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_1)},$$slots:{default:!0}})}),append($$anchor2,fragment)};if_block(node2,$$render=>{(get$3(hasPromptStats)||isLive())&&$$render(consequent)})}var node_5=sibling(node2,2);component(node_5,()=>Root$5, +($$anchor2,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment_2=root_5$g(),node_6=first_child(fragment_2);component(node_6,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor4,{children:($$anchor5,$$slotProps2)=>{var button_1=root_6$b(),node_7=child(button_1);Sparkles(node_7,{class:"h-3 w-3"}),next$1(2),reset(button_1),template_effect(()=>{set_class(button_1,1,`inline-flex h-5 w-5 items-center justify-center rounded-sm transitio\ +n-colors ${get$3(activeView)===ChatMessageStatsView.GENERATION?"bg-background text-foreground shadow-sm":get$3(isGenerationDisabled)?"cursor-not-allowed opacity-40":"hover:text-foreground"}`),button_1.disabled=get$3(isGenerationDisabled)}),delegated("click",button_1,()=>!get$3(isGenerationDisabled)&&set$1(activeView,ChatMessageStatsView.GENERATION)),append($$anchor5,button_1)},$$slots:{default:!0}})});var node_8=sibling(node_6,2);component(node_8,()=>Tooltip_content,($$anchor4,Tooltip_Content_1)=>{ +Tooltip_Content_1($$anchor4,{children:($$anchor5,$$slotProps2)=>{var p_1=root_7$d(),text2=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text2,get$3(isGenerationDisabled)?"Generation (waiting for tokens...)":"Generation (token output)")),append($$anchor5,p_1)},$$slots:{default:!0}})}),append($$anchor3,fragment_2)},$$slots:{default:!0}})});var node_9=sibling(node_5,2);{var consequent_2=$$anchor2=>{var fragment_3=root_8$d(),node_10=first_child(fragment_3);component(node_10,()=>Root$5,($$anchor3,Tooltip_Root_2)=>{ +Tooltip_Root_2($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_4=root_9$a(),node_11=first_child(fragment_4);component(node_11,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger_2)=>{Tooltip_Trigger_2($$anchor5,{children:($$anchor6,$$slotProps2)=>{var button_2=root_10$5(),node_12=child(button_2);Wrench(node_12,{class:"h-3 w-3"}),next$1(2),reset(button_2),template_effect(()=>set_class(button_2,1,`inline-flex h-5 w-5 items-center justify-center rounded-sm transition-colors ${get$3(activeView)=== +ChatMessageStatsView.TOOLS?"bg-background text-foreground shadow-sm":"hover:text-foreground"}`)),delegated("click",button_2,()=>set$1(activeView,ChatMessageStatsView.TOOLS)),append($$anchor6,button_2)},$$slots:{default:!0}})});var node_13=sibling(node_11,2);component(node_13,()=>Tooltip_content,($$anchor5,Tooltip_Content_2)=>{Tooltip_Content_2($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p_2=root_11$7();append($$anchor6,p_2)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{ +default:!0}})});var node_14=sibling(node_10,2);{var consequent_1=$$anchor3=>{var fragment_5=comment$2(),node_15=first_child(fragment_5);component(node_15,()=>Root$5,($$anchor4,Tooltip_Root_3)=>{Tooltip_Root_3($$anchor4,{children:($$anchor5,$$slotProps)=>{var fragment_6=root_13$5(),node_16=first_child(fragment_6);component(node_16,()=>Tooltip_trigger,($$anchor6,Tooltip_Trigger_3)=>{Tooltip_Trigger_3($$anchor6,{children:($$anchor7,$$slotProps2)=>{var button_3=root_14$3(),node_17=child(button_3);Layers( +node_17,{class:"h-3 w-3"}),next$1(2),reset(button_3),template_effect(()=>set_class(button_3,1,`inline-flex h-5 w-5 items-center justify-center rounded-sm transition-colors ${get$3(activeView)===ChatMessageStatsView.SUMMARY?"bg-background text-foreground shadow-sm":"hover:text-foreground"}`)),delegated("click",button_3,()=>set$1(activeView,ChatMessageStatsView.SUMMARY)),append($$anchor7,button_3)},$$slots:{default:!0}})});var node_18=sibling(node_16,2);component(node_18,()=>Tooltip_content,($$anchor6,Tooltip_Content_3)=>{ +Tooltip_Content_3($$anchor6,{children:($$anchor7,$$slotProps2)=>{var p_3=root_15$4();append($$anchor7,p_3)},$$slots:{default:!0}})}),append($$anchor5,fragment_6)},$$slots:{default:!0}})}),append($$anchor3,fragment_5)};if_block(node_14,$$render=>{hideSummary()||$$render(consequent_1)})}append($$anchor2,fragment_3)};if_block(node_9,$$render=>{get$3(hasAgenticStats)&&$$render(consequent_2)})}reset(div_1);var div_2=sibling(div_1,2),node_19=child(div_2);{var consequent_3=$$anchor2=>{var fragment_7=root_16$1(), +node_20=first_child(fragment_7);{let $0=user_derived(()=>$$props.predictedTokens?.toLocaleString());BadgeChatStatistic(node_20,{class:"bg-transparent",get icon(){return Whole_word},get value(){return`${get$3($0)??""} tokens`},tooltipLabel:"Generated tokens"})}var node_21=sibling(node_20,2);BadgeChatStatistic(node_21,{class:"bg-transparent",get icon(){return Clock},get value(){return get$3(formattedTime)},tooltipLabel:"Generation time"});var node_22=sibling(node_21,2);{let $0=user_derived(()=>get$3( +tokensPerSecond).toFixed(2));BadgeChatStatistic(node_22,{class:"bg-transparent",get icon(){return Gauge},get value(){return`${get$3($0)??""} t/s`},tooltipLabel:"Generation speed"})}append($$anchor2,fragment_7)},consequent_4=$$anchor2=>{var fragment_8=root_17$4(),node_23=first_child(fragment_8);BadgeChatStatistic(node_23,{class:"bg-transparent",get icon(){return Wrench},get value(){return`${$$props.agenticTimings.toolCallsCount??""} calls`},tooltipLabel:"Tool calls executed"});var node_24=sibling( +node_23,2);BadgeChatStatistic(node_24,{class:"bg-transparent",get icon(){return Clock},get value(){return get$3(formattedAgenticToolsTime)},tooltipLabel:"Tool execution time"});var node_25=sibling(node_24,2);{let $0=user_derived(()=>get$3(agenticToolsPerSecond).toFixed(2));BadgeChatStatistic(node_25,{class:"bg-transparent",get icon(){return Gauge},get value(){return`${get$3($0)??""} calls/s`},tooltipLabel:"Tool execution rate"})}append($$anchor2,fragment_8)},consequent_5=$$anchor2=>{var fragment_9=root_18$4(), +node_26=first_child(fragment_9);BadgeChatStatistic(node_26,{class:"bg-transparent",get icon(){return Layers},get value(){return`${$$props.agenticTimings.turns??""} turns`},tooltipLabel:"Agentic turns (LLM calls)"});var node_27=sibling(node_26,2);{let $0=user_derived(()=>$$props.agenticTimings.llm.predicted_n.toLocaleString());BadgeChatStatistic(node_27,{class:"bg-transparent",get icon(){return Whole_word},get value(){return`${get$3($0)??""} tokens`},tooltipLabel:"Total tokens generated"})}var node_28=sibling( +node_27,2);BadgeChatStatistic(node_28,{class:"bg-transparent",get icon(){return Clock},get value(){return get$3(formattedAgenticTotalTime)},tooltipLabel:"Total time (LLM + tools)"}),append($$anchor2,fragment_9)},consequent_6=$$anchor2=>{var fragment_10=root_19$4(),node_29=first_child(fragment_10);BadgeChatStatistic(node_29,{class:"bg-transparent",get icon(){return Whole_word},get value(){return`${$$props.promptTokens??""} tokens`},tooltipLabel:"Prompt tokens"});var node_30=sibling(node_29,2);{let $0=user_derived( +()=>get$3(formattedPromptTime)??"0s");BadgeChatStatistic(node_30,{class:"bg-transparent",get icon(){return Clock},get value(){return get$3($0)},tooltipLabel:"Prompt processing time"})}var node_31=sibling(node_30,2);{let $0=user_derived(()=>get$3(promptTokensPerSecond).toFixed(2));BadgeChatStatistic(node_31,{class:"bg-transparent",get icon(){return Gauge},get value(){return`${get$3($0)??""} tokens/s`},tooltipLabel:"Prompt processing speed"})}append($$anchor2,fragment_10)};if_block(node_19,$$render=>{ +get$3(activeView)===ChatMessageStatsView.GENERATION&&get$3(hasGenerationStats)?$$render(consequent_3):get$3(activeView)===ChatMessageStatsView.TOOLS&&get$3(hasAgenticStats)?$$render(consequent_4,1):get$3(activeView)===ChatMessageStatsView.SUMMARY&&get$3(hasAgenticStats)?$$render(consequent_5,2):get$3(hasPromptStats)&&$$render(consequent_6,3)})}reset(div_2),reset(div),append($$anchor,div),pop()}delegate(["click"]);var root_3$k=from_html('<div class="max-w-[80%]"><!></div>'),root_2$r=from_html("<!\ +> <!>",1),root$J=from_html('<div aria-label="MCP Prompt message with actions" role="group"><!></div>');function ChatMessageMcpPrompt($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),siblingInfo=prop($$props,"siblingInfo",3,null);const editCtx=getMessageEditContext();var div=root$J(),node2=child(div);{var consequent=$$anchor2=>{ChatMessageEditForm($$anchor2,{})},alternate=$$anchor2=>{var fragment_1=root_2$r(),node_1=first_child(fragment_1);ChatMessageMcpPromptContent( +node_1,{get prompt(){return $$props.mcpPrompt},get variant(){return McpPromptVariant.MESSAGE},class:"w-full max-w-[80%]"});var node_2=sibling(node_1,2);{var consequent_1=$$anchor3=>{var div_1=root_3$k(),node_3=child(div_1);ChatMessageActions(node_3,{actionsPosition:"right",get deletionInfo(){return $$props.deletionInfo},justify:"end",get onConfirmDelete(){return $$props.onConfirmDelete},get onCopy(){return $$props.onCopy},get onDelete(){return $$props.onDelete},get onEdit(){return $$props.onEdit}, +get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get role(){return MessageRole.USER}}),reset(div_1),append($$anchor3,div_1)};if_block(node_2,$$render=>{$$props.message.timestamp&&$$render(consequent_1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate,-1)})} +reset(div),template_effect(()=>set_class(div,1,`group flex flex-col items-end gap-3 md:gap-2 ${className()??""}`)),append($$anchor,div),pop()}var root_3$j=from_html('<tr><td colspan="3" class="p-8 text-center text-sm text-muted-foreground"><!></td></tr>'),root_7$c=from_html('<tr class="cursor-pointer border-b transition-colors hover:bg-muted/50"><td class="p-3"><!></td><td class="p-3 text-sm"><div class="max-w-[17rem] truncate"> </div></td><td class="p-3 text-sm text-muted-foreground"> </td></tr\ +>'),root_2$q=from_html('<table class="w-full"><thead class="sticky top-0 z-10 bg-muted"><tr class="border-b"><th class="w-12 p-3 text-left"><!></th><th class="p-3 text-left text-sm font-medium">Conversation Name</th><th class="w-32 p-3 text-left text-sm font-medium">Messages</th></tr></thead><tbody><!></tbody></table>'),root$I=from_html('<div class="space-y-4"><!> <div class="flex items-center justify-between text-sm text-muted-foreground"><span> <!></span></div> <div class="overflow-hidden roun\ +ded-md border"><!></div> <div class="flex justify-end gap-2"><!> <!></div></div>');function ConversationSelection($$anchor,$$props){push$1($$props,!0);let messageCountMap=prop($$props,"messageCountMap",19,()=>new Map),searchQuery=state$1(""),selectedIds=state$1(getInitialSelectedIds()),lastClickedId=state$1(null);function getInitialSelectedIds(){return new SvelteSet($$props.conversations.map(c2=>c2.id))}let filteredConversations=user_derived(()=>$$props.conversations.filter(conv=>(conv.name||"Un\ +titled conversation").toLowerCase().includes(get$3(searchQuery).toLowerCase()))),allSelected=user_derived(()=>get$3(filteredConversations).length>0&&get$3(filteredConversations).every(conv=>get$3(selectedIds).has(conv.id))),someSelected=user_derived(()=>get$3(filteredConversations).some(conv=>get$3(selectedIds).has(conv.id))&&!get$3(allSelected));function toggleConversation(id2,shiftKey=!1){const newSet=new SvelteSet(get$3(selectedIds));if(shiftKey&&get$3(lastClickedId)!==null){const lastIndex=get$3( +filteredConversations).findIndex(c2=>c2.id===get$3(lastClickedId)),currentIndex=get$3(filteredConversations).findIndex(c2=>c2.id===id2);if(lastIndex!==-1&¤tIndex!==-1){const start2=Math.min(lastIndex,currentIndex),end=Math.max(lastIndex,currentIndex),shouldSelect=!newSet.has(id2);for(let i=start2;i<=end;i++)shouldSelect?newSet.add(get$3(filteredConversations)[i].id):newSet.delete(get$3(filteredConversations)[i].id);set$1(selectedIds,newSet);return}}newSet.has(id2)?newSet.delete(id2):newSet. +add(id2),set$1(selectedIds,newSet),set$1(lastClickedId,id2,!0)}function toggleAll(){if(get$3(allSelected)){const newSet=new SvelteSet(get$3(selectedIds));get$3(filteredConversations).forEach(conv=>newSet.delete(conv.id)),set$1(selectedIds,newSet)}else{const newSet=new SvelteSet(get$3(selectedIds));get$3(filteredConversations).forEach(conv=>newSet.add(conv.id)),set$1(selectedIds,newSet)}}function handleConfirm(){const selected=$$props.conversations.filter(conv=>get$3(selectedIds).has(conv.id));$$props. +onConfirm(selected)}function handleCancel(){set$1(selectedIds,getInitialSelectedIds()),set$1(searchQuery,""),set$1(lastClickedId,null),$$props.onCancel()}function reset$1(){set$1(selectedIds,getInitialSelectedIds()),set$1(searchQuery,""),set$1(lastClickedId,null)}var $$exports={reset:reset$1},div=root$I(),node2=child(div);SearchInput(node2,{placeholder:"Search conversations...",get value(){return get$3(searchQuery)},set value($$value){set$1(searchQuery,$$value,!0)}});var div_1=sibling(node2,2),span=child( +div_1),text2=child(span),node_1=sibling(text2);{var consequent=$$anchor2=>{var text_1=text$8();template_effect(()=>set_text(text_1,`(${get$3(filteredConversations).length??""} shown)`)),append($$anchor2,text_1)};if_block(node_1,$$render=>{get$3(searchQuery)&&$$render(consequent)})}reset(span),reset(div_1);var div_2=sibling(div_1,2),node_2=child(div_2);Scroll_area(node_2,{class:"h-[400px]",children:($$anchor2,$$slotProps)=>{var table2=root_2$q(),thead2=child(table2),tr2=child(thead2),th=child(tr2), +node_3=child(th);Checkbox(node_3,{get checked(){return get$3(allSelected)},get indeterminate(){return get$3(someSelected)},onCheckedChange:toggleAll}),reset(th),next$1(2),reset(tr2),reset(thead2);var tbody2=sibling(thead2),node_4=child(tbody2);{var consequent_2=$$anchor3=>{var tr_1=root_3$j(),td=child(tr_1),node_5=child(td);{var consequent_1=$$anchor4=>{var text_2=text$8();template_effect(()=>set_text(text_2,`No conversations found matching "${get$3(searchQuery)??""}"`)),append($$anchor4,text_2)}, +alternate=$$anchor4=>{var text_3=text$8("No conversations available");append($$anchor4,text_3)};if_block(node_5,$$render=>{get$3(searchQuery)?$$render(consequent_1):$$render(alternate,-1)})}reset(td),reset(tr_1),append($$anchor3,tr_1)},alternate_1=$$anchor3=>{var fragment_2=comment$2(),node_6=first_child(fragment_2);each(node_6,17,()=>get$3(filteredConversations),conv=>conv.id,($$anchor4,conv)=>{var tr_2=root_7$c(),td_1=child(tr_2),node_7=child(td_1);{let $0=user_derived(()=>get$3(selectedIds).has( +get$3(conv).id));Checkbox(node_7,{get checked(){return get$3($0)},onclick:e=>{e.preventDefault(),e.stopPropagation(),toggleConversation(get$3(conv).id,e.shiftKey)}})}reset(td_1);var td_2=sibling(td_1),div_3=child(td_2),text_4=child(div_3,!0);reset(div_3),reset(td_2);var td_3=sibling(td_2),text_5=child(td_3,!0);reset(td_3),reset(tr_2),template_effect($0=>{set_attribute(div_3,"title",get$3(conv).name||"Untitled conversation"),set_text(text_4,get$3(conv).name||"Untitled conversation"),set_text(text_5, +$0)},[()=>messageCountMap().get(get$3(conv).id)??0]),delegated("click",tr_2,e=>toggleConversation(get$3(conv).id,e.shiftKey)),append($$anchor4,tr_2)}),append($$anchor3,fragment_2)};if_block(node_4,$$render=>{get$3(filteredConversations).length===0?$$render(consequent_2):$$render(alternate_1,-1)})}reset(tbody2),reset(table2),append($$anchor2,table2)},$$slots:{default:!0}}),reset(div_2);var div_4=sibling(div_2,2),node_8=child(div_4);Button(node_8,{variant:"outline",onclick:handleCancel,children:($$anchor2,$$slotProps)=>{ +next$1();var text_6=text$8("Cancel");append($$anchor2,text_6)},$$slots:{default:!0}});var node_9=sibling(node_8,2);{let $0=user_derived(()=>get$3(selectedIds).size===0);Button(node_9,{onclick:handleConfirm,get disabled(){return get$3($0)},children:($$anchor2,$$slotProps)=>{next$1();var text_7=text$8();template_effect(()=>set_text(text_7,`${$$props.mode==="export"?"Export":"Import"} (${get$3(selectedIds).size??""})`)),append($$anchor2,text_7)},$$slots:{default:!0}})}return reset(div_4),reset(div), +template_effect(()=>set_text(text2,`${get$3(selectedIds).size??""} of ${$$props.conversations.length??""} selected `)),append($$anchor,div),pop($$exports)}delegate(["click"]);var root$H=from_html('<div><button aria-label="Scroll left"><!></button> <div><!></div> <button aria-label="Scroll right"><!></button></div>');function HorizontalScrollCarousel($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),gapSize=prop($$props,"gapSize",3,"3"),canScrollLeft=state$1(!1),canScrollRight=state$1( +!1),scrollContainer=state$1(void 0);function scrollLeft(event2){event2?.stopPropagation(),event2?.preventDefault(),get$3(scrollContainer)&&get$3(scrollContainer).scrollBy({left:get$3(scrollContainer).clientWidth*-.67,behavior:"smooth"})}function scrollRight(event2){event2?.stopPropagation(),event2?.preventDefault(),get$3(scrollContainer)&&get$3(scrollContainer).scrollBy({left:get$3(scrollContainer).clientWidth*.67,behavior:"smooth"})}function updateScrollButtons(){if(!get$3(scrollContainer))return; +const{scrollLeft:scrollLeft2,scrollWidth,clientWidth}=get$3(scrollContainer);set$1(canScrollLeft,scrollLeft2>0),set$1(canScrollRight,scrollLeft2<scrollWidth-clientWidth-1);const isScrollable=scrollWidth>clientWidth;$$props.onScrollableChange?.(isScrollable)}function resetScroll(){get$3(scrollContainer)&&(get$3(scrollContainer).scrollLeft=0,setTimeout(()=>{updateScrollButtons()},0))}user_effect(()=>{get$3(scrollContainer)&&setTimeout(()=>{updateScrollButtons()},0)});var $$exports={resetScroll},div=root$H(), +button=child(div),node2=child(button);Chevron_left(node2,{class:"h-4 w-4"}),reset(button);var div_1=sibling(button,2),node_1=child(div_1);snippet(node_1,()=>$$props.children??noop$3),reset(div_1),bind_this(div_1,$$value=>set$1(scrollContainer,$$value),()=>get$3(scrollContainer));var button_1=sibling(div_1,2),node_2=child(button_1);return Chevron_right(node_2,{class:"h-4 w-4"}),reset(button_1),reset(div),template_effect(()=>{set_class(div,1,`relative ${className()??""}`),set_class(button,1,`absol\ +ute top-1/2 left-4 z-10 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded-full bg-foreground/15 shadow-md backdrop-blur-xs transition-opacity hover:bg-foreground/35 ${get$3(canScrollLeft)?"opacity-100":"pointer-events-none opacity-0"}`),set_class(div_1,1,`scrollbar-hide flex items-start gap-${gapSize()??""} overflow-x-auto`),set_class(button_1,1,`absolute top-1/2 right-4 z-10 flex h-6 w-6 -translate-y-1/2 items-center justify-center rounded-full bg-foreground/15 shadow-md backdro\ +p-blur-xs transition-opacity hover:bg-foreground/35 ${get$3(canScrollRight)?"opacity-100":"pointer-events-none opacity-0"}`)}),delegated("click",button,scrollLeft),event("scroll",div_1,updateScrollButtons),delegated("click",button_1,scrollRight),append($$anchor,div),pop($$exports)}delegate(["click"]);var root_3$i=from_html('<span class="block truncate"> </span>'),root_4$d=from_html("<p> </p>"),root_2$p=from_html("<!> <!>",1),root_5$f=from_html("<span> </span>");function TruncatedText($$anchor,$$props){ +push$1($$props,!0);let className=prop($$props,"class",3,""),showTooltip=prop($$props,"showTooltip",3,!0),textElement=state$1(void 0),isTruncated=state$1(!1);function checkTruncation(){get$3(textElement)&&set$1(isTruncated,get$3(textElement).scrollWidth>get$3(textElement).clientWidth)}user_effect(()=>{if(get$3(textElement)){checkTruncation();const observer=new ResizeObserver(checkTruncation);return observer.observe(get$3(textElement)),()=>observer.disconnect()}});var fragment=comment$2(),node2=first_child( +fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_2=root_2$p(),node_2=first_child(fragment_2);component(node_2,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{get class(){return className()},children:($$anchor6,$$slotProps2)=>{var span=root_3$i(),text_1=child(span,!0);reset(span),bind_this(span,$$value=>set$1( +textElement,$$value),()=>get$3(textElement)),template_effect(()=>set_text(text_1,$$props.text)),append($$anchor6,span)},$$slots:{default:!0}})});var node_3=sibling(node_2,2);component(node_3,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{class:"z-[9999]",children:($$anchor6,$$slotProps2)=>{var p2=root_4$d(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,$$props.text)),append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{ +default:!0}})}),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var span_1=root_5$f(),text_3=child(span_1,!0);reset(span_1),bind_this(span_1,$$value=>set$1(textElement,$$value),()=>get$3(textElement)),template_effect(()=>{set_class(span_1,1,`${className()??""} block truncate`),set_text(text_3,$$props.text)}),append($$anchor2,span_1)};if_block(node2,$$render=>{get$3(isTruncated)&&showTooltip()?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_3$h=from_html( +"<span>⌘</span>"),root_5$e=from_html("<span></span>"),root_1$k=from_html("<!> <!>",1),root$G=from_html("<kbd></kbd>");function KeyboardShortcutInfo($$anchor,$$props){push$1($$props,!0);let variant=prop($$props,"variant",3,"default"),className=prop($$props,"class",3,""),variantClasses=user_derived(()=>variant()==="destructive"?"text-destructive":"text-muted-foreground");var kbd=root$G();each(kbd,21,()=>$$props.keys,index$2,($$anchor2,key2,index2)=>{var fragment=root_1$k(),node2=first_child(fragment); +{var consequent=$$anchor3=>{{let $0=user_derived(()=>variant()==="destructive"?"text-destructive":"");Arrow_big_up($$anchor3,{get class(){return`h-1 w-1 ${get$3($0)??""} -mr-1`}})}},consequent_1=$$anchor3=>{var span=root_3$h();template_effect(()=>set_class(span,1,clsx(variant()==="destructive"?"text-destructive":""))),append($$anchor3,span)},alternate=$$anchor3=>{var text2=text$8();template_effect($0=>set_text(text2,$0),[()=>get$3(key2).toUpperCase()]),append($$anchor3,text2)};if_block(node2,$$render=>{ +get$3(key2)==="shift"?$$render(consequent):get$3(key2)==="cmd"?$$render(consequent_1,1):$$render(alternate,-1)})}var node_1=sibling(node2,2);{var consequent_2=$$anchor3=>{var span_1=root_5$e();append($$anchor3,span_1)};if_block(node_1,$$render=>{index2<$$props.keys.length-1&&$$render(consequent_2)})}append($$anchor2,fragment)}),reset(kbd),template_effect(()=>set_class(kbd,1,`px-1 pointer-events-none inline-flex select-none items-center gap-0.5 font-sans text-md font-medium opacity-0 transition-o\ +pacity -my-1 ${get$3(variantClasses)??""} ${className()??""}`)),append($$anchor,kbd),pop()}var root_3$g=from_html('<img alt="" class="h-3.5 w-3.5 shrink-0 rounded-sm"/>'),root_4$c=from_html("<span> </span>"),root_1$j=from_html("<!> <!>",1),root_8$c=from_html("<span> </span>"),root_9$9=from_html('<span class="max-w-xs break-all"> </span>'),root_7$b=from_html("<!> <!>",1),root_5$d=from_html('<div class="flex flex-wrap justify-end gap-1"></div>'),root_11$6=from_html("<div><span> </span></div>"),root_13$4=from_html( +'<div><div class="space-y-2"><div class="h-3 w-3/4 animate-pulse rounded bg-foreground/20"></div> <div class="h-3 w-full animate-pulse rounded bg-foreground/20"></div> <div class="h-3 w-5/6 animate-pulse rounded bg-foreground/20"></div></div></div>'),root_17$3=from_html("<span> </span>"),root_18$3=from_html("<span> </span>"),root_15$3=from_html("<div><span></span></div>"),root$F=from_html('<div><div class="flex items-center justify-between gap-2"><div class="inline-flex flex-wrap items-center ga\ +p-1.25 text-xs text-muted-foreground"><!> <!></div> <!></div> <!></div>');function ChatMessageMcpPromptContent($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),variant=prop($$props,"variant",19,()=>McpPromptVariant.MESSAGE),isLoading2=prop($$props,"isLoading",3,!1),hoveredArgKey=state$1(null),argumentEntries=user_derived(()=>Object.entries($$props.prompt.arguments??{})),hasArguments=user_derived(()=>$$props.prompt.arguments&&Object.keys($$props.prompt.arguments).length> +0),hasContent=user_derived(()=>$$props.prompt.content&&$$props.prompt.content.trim().length>0),contentParts=user_derived(()=>{if(!$$props.prompt.content||!get$3(hasArguments))return[{text:$$props.prompt.content||"",argKey:null}];const parts=[];let remaining=$$props.prompt.content;const valueToKey=new SvelteMap;for(const[key2,value]of get$3(argumentEntries))value&&value.trim()&&valueToKey.set(value,key2);const sortedValues=[...valueToKey.keys()].sort((a,b)=>b.length-a.length);for(;remaining.length> +0;){let earliestMatch=null;for(const value of sortedValues){const index2=remaining.indexOf(value);index2!==-1&&(earliestMatch===null||index2<earliestMatch.index)&&(earliestMatch={index:index2,value,key:valueToKey.get(value)})}if(earliestMatch)earliestMatch.index>0&&parts.push({text:remaining.slice(0,earliestMatch.index),argKey:null}),parts.push({text:earliestMatch.value,argKey:earliestMatch.key}),remaining=remaining.slice(earliestMatch.index+earliestMatch.value.length);else{parts.push({text:remaining, +argKey:null});break}}return parts}),showArgBadges=user_derived(()=>get$3(hasArguments)&&!isLoading2()&&!$$props.loadError),isAttachment=user_derived(()=>variant()===McpPromptVariant.ATTACHMENT),textSizeClass=user_derived(()=>get$3(isAttachment)?"text-xs":"text-md"),paddingClass=user_derived(()=>get$3(isAttachment)?"px-3 py-2":"px-3.75 py-2.5"),maxHeightStyle=user_derived(()=>get$3(isAttachment)?"max-height: 6rem;":"max-height: var(--max-message-height);");const serverFavicon=user_derived(()=>mcpStore. +getServerFavicon($$props.prompt.serverName)),serverDisplayName=user_derived(()=>mcpStore.getServerDisplayName($$props.prompt.serverName));var div=root$F(),div_1=child(div),div_2=child(div_1),node2=child(div_2);component(node2,()=>Root$5,($$anchor2,Tooltip_Root)=>{Tooltip_Root($$anchor2,{children:($$anchor3,$$slotProps)=>{var fragment=root_1$j(),node_1=first_child(fragment);component(node_1,()=>Tooltip_trigger,($$anchor4,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor4,{children:($$anchor5,$$slotProps2)=>{ +var fragment_1=comment$2(),node_2=first_child(fragment_1);{var consequent=$$anchor6=>{var img=root_3$g();template_effect(()=>set_attribute(img,"src",get$3(serverFavicon))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor6,img)};if_block(node_2,$$render=>{get$3(serverFavicon)&&$$render(consequent)})}append($$anchor5,fragment_1)},$$slots:{default:!0}})});var node_3=sibling(node_1,2);component(node_3,()=>Tooltip_content,($$anchor4,Tooltip_Content)=>{Tooltip_Content( +$$anchor4,{children:($$anchor5,$$slotProps2)=>{var span=root_4$c(),text2=child(span,!0);reset(span),template_effect(()=>set_text(text2,get$3(serverDisplayName))),append($$anchor5,span)},$$slots:{default:!0}})}),append($$anchor3,fragment)},$$slots:{default:!0}})});var node_4=sibling(node2,2);TruncatedText(node_4,{get text(){return $$props.prompt.name}}),reset(div_2);var node_5=sibling(div_2,2);{var consequent_1=$$anchor2=>{var div_3=root_5$d();each(div_3,21,()=>get$3(argumentEntries),([key2,value])=>key2, +($$anchor3,$$item)=>{var $$array=user_derived(()=>to_array(get$3($$item),2));let key2=()=>get$3($$array)[0],value=()=>get$3($$array)[1];var fragment_2=comment$2(),node_6=first_child(fragment_2);component(node_6,()=>Root$5,($$anchor4,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor4,{children:($$anchor5,$$slotProps)=>{var fragment_3=root_7$b(),node_7=first_child(fragment_3);component(node_7,()=>Tooltip_trigger,($$anchor6,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor6,{children:($$anchor7,$$slotProps2)=>{ +var span_1=root_8$c(),text_1=child(span_1,!0);reset(span_1),template_effect(()=>{set_class(span_1,1,`rounded-sm bg-purple-200/60 px-1.5 py-0.5 text-[10px] leading-none text-purple-700 transition-opacity dark:bg-purple-800/40 dark:text-purple-300 ${get$3(hoveredArgKey)&&get$3(hoveredArgKey)!==key2()?"opacity-30":""}`),set_text(text_1,key2())}),event("mouseenter",span_1,()=>set$1(hoveredArgKey,key2(),!0)),event("mouseleave",span_1,()=>set$1(hoveredArgKey,null)),append($$anchor7,span_1)},$$slots:{default:!0}})}); +var node_8=sibling(node_7,2);component(node_8,()=>Tooltip_content,($$anchor6,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor6,{children:($$anchor7,$$slotProps2)=>{var span_2=root_9$9(),text_2=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_2,value())),append($$anchor7,span_2)},$$slots:{default:!0}})}),append($$anchor5,fragment_3)},$$slots:{default:!0}})}),append($$anchor3,fragment_2)}),reset(div_3),append($$anchor2,div_3)};if_block(node_5,$$render=>{get$3(showArgBadges)&&$$render( +consequent_1)})}reset(div_1);var node_9=sibling(div_1,2);{var consequent_2=$$anchor2=>{Card($$anchor2,{class:"relative overflow-hidden rounded-[1.125rem] border border-destructive/50 bg-destructive/10 backdrop-blur-md",children:($$anchor3,$$slotProps)=>{var div_4=root_11$6(),span_3=child(div_4),text_3=child(span_3,!0);reset(span_3),reset(div_4),template_effect(()=>{set_class(div_4,1,`overflow-y-auto ${get$3(paddingClass)??""}`),set_style(div_4,`${get$3(maxHeightStyle)??""} overflow-wrap: anywher\ +e; word-break: break-word;`),set_class(span_3,1,`${get$3(textSizeClass)??""} text-destructive`),set_text(text_3,$$props.loadError)}),append($$anchor3,div_4)},$$slots:{default:!0}})},consequent_3=$$anchor2=>{Card($$anchor2,{class:"relative overflow-hidden rounded-[1.125rem] border border-purple-200 bg-purple-500/10 px-1 py-2 backdrop-blur-md dark:border-purple-800 dark:bg-purple-500/20",children:($$anchor3,$$slotProps)=>{var div_5=root_13$4();template_effect(()=>{set_class(div_5,1,`overflow-y-aut\ +o ${get$3(paddingClass)??""}`),set_style(div_5,`${get$3(maxHeightStyle)??""} overflow-wrap: anywhere; word-break: break-word;`)}),append($$anchor3,div_5)},$$slots:{default:!0}})},consequent_5=$$anchor2=>{Card($$anchor2,{class:"relative overflow-hidden rounded-[1.125rem] border border-purple-200 bg-purple-500/10 py-0 text-foreground backdrop-blur-md dark:border-purple-800 dark:bg-purple-500/20",children:($$anchor3,$$slotProps)=>{var div_6=root_15$3(),span_4=child(div_6);each(span_4,21,()=>get$3(contentParts), +index$2,($$anchor4,part)=>{var fragment_7=comment$2(),node_10=first_child(fragment_7);{var consequent_4=$$anchor5=>{var span_5=root_17$3(),text_4=child(span_5,!0);reset(span_5),template_effect(()=>{set_class(span_5,1,`rounded-sm bg-purple-300/50 px-0.5 text-purple-900 transition-opacity dark:bg-purple-700/50 dark:text-purple-100 ${get$3(hoveredArgKey)&&get$3(hoveredArgKey)!==get$3(part).argKey?"opacity-30":""}`),set_text(text_4,get$3(part).text)}),event("mouseenter",span_5,()=>set$1(hoveredArgKey, +get$3(part).argKey,!0)),event("mouseleave",span_5,()=>set$1(hoveredArgKey,null)),append($$anchor5,span_5)},alternate=$$anchor5=>{var span_6=root_18$3(),text_5=child(span_6,!0);reset(span_6),template_effect(()=>{set_class(span_6,1,`transition-opacity ${get$3(hoveredArgKey)?"opacity-30":""}`),set_text(text_5,get$3(part).text)}),append($$anchor5,span_6)};if_block(node_10,$$render=>{get$3(part).argKey?$$render(consequent_4):$$render(alternate,-1)})}append($$anchor4,fragment_7)}),reset(span_4),reset( +div_6),template_effect(()=>{set_class(div_6,1,`overflow-y-auto ${get$3(paddingClass)??""}`),set_style(div_6,`${get$3(maxHeightStyle)??""} overflow-wrap: anywhere; word-break: break-word;`),set_class(span_4,1,`${get$3(textSizeClass)??""} whitespace-pre-wrap`)}),append($$anchor3,div_6)},$$slots:{default:!0}})};if_block(node_9,$$render=>{$$props.loadError?$$render(consequent_2):isLoading2()?$$render(consequent_3,1):get$3(hasContent)&&$$render(consequent_5,2)})}reset(div),template_effect(()=>set_class( +div,1,`flex flex-col gap-2 ${className()??""}`)),append($$anchor,div),pop()}var root_2$o=from_html("<!> Cancel",1),root_3$f=from_html("<!> Save",1),root_1$i=from_html('<div class="w-full max-w-[80%]"><textarea placeholder="Edit system message..."></textarea> <div class="mt-2 flex justify-end gap-2"><!> <!></div></div>'),root_7$a=from_html("<div><!></div>"),root_8$b=from_html("<span> </span>"),root_9$8=from_html('<div class="pointer-events-none absolute right-0 bottom-0 left-0 h-48 bg-gradient-to\ +-t from-muted to-transparent"></div> <div class="pointer-events-none absolute right-0 bottom-4 left-0 flex justify-center opacity-0 transition-opacity group-hover/expand:opacity-100"><!></div>',1),root_11$5=from_html('<div class="mb-2 flex justify-center"><!></div>'),root_6$a=from_html("<div><!> <!></div> <!>",1),root_5$c=from_html('<div class="relative max-w-[80%]"><button type="button"><!></button></div>'),root_13$3=from_html('<div class="max-w-[80%]"><!></div>'),root_4$b=from_html("<!> <!>",1), +root$E=from_html('<div aria-label="System message with actions" role="group"><!></div>');function ChatMessageSystem($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),siblingInfo=prop($$props,"siblingInfo",3,null),textareaElement=prop($$props,"textareaElement",15);const editCtx=getMessageEditContext();function handleEditKeydown(event2){event2.key===KeyboardKey.ENTER&&!event2.shiftKey&&!isIMEComposing(event2)?(event2.preventDefault(),editCtx.save()):event2.key===KeyboardKey. +ESCAPE&&(event2.preventDefault(),editCtx.cancel())}let isMultiline=state$1(!1),messageElement=state$1(void 0),isExpanded=state$1(!1),contentHeight=state$1(0);const MAX_HEIGHT=200,currentConfig=config$1();let showExpandButton=user_derived(()=>get$3(contentHeight)>MAX_HEIGHT);user_effect(()=>{if(!get$3(messageElement)||!$$props.message.content.trim())return;$$props.message.content.includes(` +`)&&set$1(isMultiline,!0);const resizeObserver=new ResizeObserver(entries=>{for(const entry of entries){const element2=entry.target;set$1(isMultiline,element2.offsetHeight>24*1.5),set$1(contentHeight,element2.scrollHeight,!0)}});return resizeObserver.observe(get$3(messageElement)),()=>{resizeObserver.disconnect()}});function toggleExpand(){set$1(isExpanded,!get$3(isExpanded))}var div=root$E(),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$i(),textarea=child(div_1);remove_textarea_child( +textarea),bind_this(textarea,$$value=>textareaElement($$value),()=>textareaElement());var div_2=sibling(textarea,2),node_1=child(div_2);Button(node_1,{class:"h-8 px-3",get onclick(){return editCtx.cancel},size:"sm",variant:"outline",children:($$anchor3,$$slotProps)=>{var fragment=root_2$o(),node_2=first_child(fragment);X(node_2,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor3,fragment)},$$slots:{default:!0}});var node_3=sibling(node_1,2);{let $0=user_derived(()=>!editCtx.editedContent.trim());Button( +node_3,{class:"h-8 px-3",get onclick(){return editCtx.save},get disabled(){return get$3($0)},size:"sm",children:($$anchor3,$$slotProps)=>{var fragment_1=root_3$f(),node_4=first_child(fragment_1);Check(node_4,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor3,fragment_1)},$$slots:{default:!0}})}reset(div_2),reset(div_1),template_effect(()=>{set_value(textarea,editCtx.editedContent),set_class(textarea,1,`min-h-[60px] w-full resize-none rounded-2xl px-3 py-2 text-sm ${INPUT_CLASSES??""}`)}),delegated( +"keydown",textarea,handleEditKeydown),delegated("input",textarea,e=>editCtx.setContent(e.currentTarget.value)),append($$anchor2,div_1)},alternate_1=$$anchor2=>{var fragment_2=root_4$b(),node_5=first_child(fragment_2);{var consequent_4=$$anchor3=>{var div_3=root_5$c(),button=child(div_3),node_6=child(button);{let $0=user_derived(()=>get$3(isMultiline)?"":void 0);Card(node_6,{class:"overflow-y-auto rounded-[1.125rem] !border-2 !border-dashed !border-border/50 bg-muted px-3.75 py-1.5 data-[multilin\ +e]:py-2.5",get"data-multiline"(){return get$3($0)},style:"border: 2px dashed hsl(var(--border)); max-height: var(--max-message-height); overflow-wrap: anywhere; word-break: break-word;",children:($$anchor4,$$slotProps)=>{var fragment_3=root_6$a(),div_4=first_child(fragment_3),node_7=child(div_4);{var consequent_1=$$anchor5=>{var div_5=root_7$a(),node_8=child(div_5);MarkdownContent(node_8,{class:"markdown-system-content -my-4",get content(){return $$props.message.content}}),reset(div_5),bind_this( +div_5,$$value=>set$1(messageElement,$$value),()=>get$3(messageElement)),template_effect(()=>set_class(div_5,1,clsx(get$3(isExpanded)?"cursor-text":""))),append($$anchor5,div_5)},alternate=$$anchor5=>{var span=root_8$b(),text2=child(span,!0);reset(span),bind_this(span,$$value=>set$1(messageElement,$$value),()=>get$3(messageElement)),template_effect(()=>{set_class(span,1,`text-md whitespace-pre-wrap ${get$3(isExpanded)?"cursor-text":""}`),set_text(text2,$$props.message.content)}),append($$anchor5, +span)};if_block(node_7,$$render=>{currentConfig.renderUserContentAsMarkdown?$$render(consequent_1):$$render(alternate,-1)})}var node_9=sibling(node_7,2);{var consequent_2=$$anchor5=>{var fragment_4=root_9$8(),div_6=sibling(first_child(fragment_4),2),node_10=child(div_6);Button(node_10,{class:"rounded-full px-4 py-1.5 text-xs shadow-md",size:"sm",variant:"outline",children:($$anchor6,$$slotProps2)=>{next$1();var text_1=text$8("Show full system message");append($$anchor6,text_1)},$$slots:{default:!0}}), +reset(div_6),append($$anchor5,fragment_4)};if_block(node_9,$$render=>{!get$3(isExpanded)&&get$3(showExpandButton)&&$$render(consequent_2)})}reset(div_4);var node_11=sibling(div_4,2);{var consequent_3=$$anchor5=>{var div_7=root_11$5(),node_12=child(div_7);Button(node_12,{class:"rounded-full px-4 py-1.5 text-xs",onclick:e=>{e.stopPropagation(),toggleExpand()},size:"sm",variant:"outline",children:($$anchor6,$$slotProps2)=>{next$1();var text_2=text$8("Collapse System Message");append($$anchor6,text_2)}, +$$slots:{default:!0}}),reset(div_7),append($$anchor5,div_7)};if_block(node_11,$$render=>{get$3(isExpanded)&&get$3(showExpandButton)&&$$render(consequent_3)})}template_effect(()=>{set_class(div_4,1,`relative transition-all duration-300 ${get$3(isExpanded)?"cursor-text select-text":"select-none"}`),set_style(div_4,!get$3(isExpanded)&&get$3(showExpandButton)?`max-height: ${MAX_HEIGHT}px;`:"max-height: none;")}),append($$anchor4,fragment_3)},$$slots:{default:!0}})}reset(button),reset(div_3),template_effect( +()=>set_class(button,1,`group/expand w-full text-left ${!get$3(isExpanded)&&get$3(showExpandButton)?"cursor-pointer":"cursor-auto"}`)),delegated("click",button,function(...$$args){(get$3(showExpandButton)&&!get$3(isExpanded)?toggleExpand:void 0)?.apply(this,$$args)}),append($$anchor3,div_3)},d2=user_derived(()=>$$props.message.content.trim());if_block(node_5,$$render=>{get$3(d2)&&$$render(consequent_4)})}var node_13=sibling(node_5,2);{var consequent_5=$$anchor3=>{var div_8=root_13$3(),node_14=child( +div_8);ChatMessageActions(node_14,{actionsPosition:"right",get deletionInfo(){return $$props.deletionInfo},justify:"end",get onConfirmDelete(){return $$props.onConfirmDelete},get onCopy(){return $$props.onCopy},get onDelete(){return $$props.onDelete},get onEdit(){return $$props.onEdit},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog}, +get role(){return MessageRole.USER}}),reset(div_8),append($$anchor3,div_8)};if_block(node_13,$$render=>{$$props.message.timestamp&&$$render(consequent_5)})}append($$anchor2,fragment_2)};if_block(node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate_1,-1)})}reset(div),template_effect(()=>set_class(div,1,`group flex flex-col items-end gap-3 md:gap-2 ${className()??""}`)),append($$anchor,div),pop()}delegate(["keydown","input","click"]);var root_3$e=from_html('<div class="max-w-\ +[80%]"><!></div>'),root_2$n=from_html("<!> <!>",1),root$D=from_html('<div aria-label="User message with actions" role="group"><!></div>');function ChatMessageUser($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),siblingInfo=prop($$props,"siblingInfo",3,null);const editCtx=getMessageEditContext();var div=root$D(),node2=child(div);{var consequent=$$anchor2=>{ChatMessageEditForm($$anchor2,{})},alternate=$$anchor2=>{var fragment_1=root_2$n(),node_1=first_child(fragment_1); +ChatMessageUserBubble(node_1,{get content(){return $$props.message.content},get attachments(){return $$props.message.extra},renderMarkdown:!0});var node_2=sibling(node_1,2);{var consequent_1=$$anchor3=>{var div_1=root_3$e(),node_3=child(div_1);ChatMessageActions(node_3,{actionsPosition:"right",get deletionInfo(){return $$props.deletionInfo},justify:"end",get onConfirmDelete(){return $$props.onConfirmDelete},get onCopy(){return $$props.onCopy},get onDelete(){return $$props.onDelete},get onEdit(){ +return $$props.onEdit},get onForkConversation(){return $$props.onForkConversation},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get role(){return MessageRole.USER}}),reset(div_1),append($$anchor3,div_1)};if_block(node_2,$$render=>{$$props.message.timestamp&&$$render(consequent_1)})}append($$anchor2,fragment_1)};if_block( +node2,$$render=>{editCtx.isEditing?$$render(consequent):$$render(alternate,-1)})}reset(div),template_effect(()=>set_class(div,1,`group flex flex-col items-end gap-3 md:gap-2 ${className()??""}`)),append($$anchor,div),pop()}function useProcessingState(){let isMonitoring=state$1(!1),lastKnownState=state$1(null),lastKnownProcessingStats=state$1(null);const processingState=user_derived(()=>get$3(isMonitoring)?activeProcessingState():get$3(lastKnownState));user_effect(()=>{get$3(processingState)&&get$3( +isMonitoring)&&set$1(lastKnownState,get$3(processingState),!0)}),user_effect(()=>{if(get$3(processingState)?.promptProgress){const{processed,total,time_ms,cache:cache2}=get$3(processingState).promptProgress,actualProcessed=processed-cache2,actualTotal=total-cache2;if(actualProcessed>0&&time_ms>0){const tokensPerSecond=actualProcessed/(time_ms/1e3);set$1(lastKnownProcessingStats,{tokensProcessed:actualProcessed,totalTokens:actualTotal,timeMs:time_ms,tokensPerSecond},!0)}}});function getETASecs(done,total,elapsedMs){ +const elapsedSecs=elapsedMs/1e3;return done===0||elapsedSecs<.5?void 0:elapsedSecs*(total/done-1)}function startMonitoring(){get$3(isMonitoring)||set$1(isMonitoring,!0)}function stopMonitoring(){if(!get$3(isMonitoring))return;set$1(isMonitoring,!1),config$1().keepStatsVisible||(set$1(lastKnownState,null),set$1(lastKnownProcessingStats,null))}function getProcessingMessage(){if(!get$3(processingState))return"Processing...";switch(get$3(processingState).status){case"initializing":return"Initializin\ +g...";case"preparing":return get$3(processingState).progressPercent!==void 0?`Processing (${get$3(processingState).progressPercent}%)`:"Preparing response...";case"generating":return"";default:return"Processing..."}}function getProcessingDetails(){const stateToUse=get$3(processingState)||get$3(lastKnownState);if(!stateToUse)return[];const details=[];if(stateToUse.promptProgress){const{processed,total,time_ms,cache:cache2}=stateToUse.promptProgress,actualProcessed=processed-cache2,actualTotal=total- +cache2;if(actualProcessed<actualTotal&&actualProcessed>0){const percent=Math.round(actualProcessed/actualTotal*100),eta=getETASecs(actualProcessed,actualTotal,time_ms);if(eta!==void 0){const etaSecs=Math.ceil(eta);details.push(`Processing ${percent}% (ETA: ${etaSecs}s)`)}else details.push(`Processing ${percent}%`)}}if(typeof stateToUse.contextTotal=="number"&&stateToUse.contextUsed>=0&&stateToUse.contextTotal>0){const contextPercent=Math.round(stateToUse.contextUsed/stateToUse.contextTotal*100); +details.push(`Context: ${stateToUse.contextUsed}/${stateToUse.contextTotal} (${contextPercent}%)`)}if(stateToUse.outputTokensUsed>0)if(stateToUse.outputTokensMax<=0)details.push(`Output: ${stateToUse.outputTokensUsed}/∞`);else{const outputPercent=Math.round(stateToUse.outputTokensUsed/stateToUse.outputTokensMax*100);details.push(`Output: ${stateToUse.outputTokensUsed}/${stateToUse.outputTokensMax} (${outputPercent}%)`)}return stateToUse.tokensPerSecond&&stateToUse.tokensPerSecond>0&&details.push( +`${stateToUse.tokensPerSecond.toFixed(1)} ${STATS_UNITS.TOKENS_PER_SECOND}`),stateToUse.speculative&&details.push("Speculative decoding enabled"),details}function getTechnicalDetails(){const stateToUse=get$3(processingState)||get$3(lastKnownState);if(!stateToUse)return[];const details=[];if(typeof stateToUse.contextTotal=="number"&&stateToUse.contextUsed>=0&&stateToUse.contextTotal>0){const contextPercent=Math.round(stateToUse.contextUsed/stateToUse.contextTotal*100);details.push(`Context: ${stateToUse. +contextUsed}/${stateToUse.contextTotal} (${contextPercent}%)`)}if(stateToUse.outputTokensUsed>0)if(stateToUse.outputTokensMax<=0)details.push(`Output: ${stateToUse.outputTokensUsed}/∞`);else{const outputPercent=Math.round(stateToUse.outputTokensUsed/stateToUse.outputTokensMax*100);details.push(`Output: ${stateToUse.outputTokensUsed}/${stateToUse.outputTokensMax} (${outputPercent}%)`)}return stateToUse.tokensPerSecond&&stateToUse.tokensPerSecond>0&&details.push(`${stateToUse.tokensPerSecond.toFixed( +1)} ${STATS_UNITS.TOKENS_PER_SECOND}`),stateToUse.speculative&&details.push("Speculative decoding enabled"),details}function shouldShowDetails(){return get$3(processingState)!==null&&get$3(processingState).status!=="idle"}function getPromptProgressText(){if(!get$3(processingState)?.promptProgress)return null;const{processed,total,cache:cache2}=get$3(processingState).promptProgress,actualProcessed=processed-cache2,actualTotal=total-cache2,percent=Math.round(actualProcessed/actualTotal*100),eta=getETASecs( +actualProcessed,actualTotal,get$3(processingState).promptProgress.time_ms);if(eta!==void 0){const etaSecs=Math.ceil(eta);return`Processing ${percent}% (ETA: ${etaSecs}s)`}return`Processing ${percent}%`}function getLiveProcessingStats(){if(get$3(processingState)?.promptProgress){const{processed,total,time_ms,cache:cache2}=get$3(processingState).promptProgress,actualProcessed=processed-cache2,actualTotal=total-cache2;if(actualProcessed>0&&time_ms>0){const tokensPerSecond=actualProcessed/(time_ms/1e3); +return{tokensProcessed:actualProcessed,totalTokens:actualTotal,timeMs:time_ms,tokensPerSecond}}}return get$3(lastKnownProcessingStats)}function getLiveGenerationStats(){if(!get$3(processingState))return null;const{tokensDecoded,tokensPerSecond}=get$3(processingState);if(tokensDecoded<=0)return null;const timeMs=tokensPerSecond&&tokensPerSecond>0?tokensDecoded/tokensPerSecond*1e3:0;return{tokensGenerated:tokensDecoded,timeMs,tokensPerSecond:tokensPerSecond||0}}return{get processingState(){return get$3( +processingState)},getProcessingDetails,getTechnicalDetails,getProcessingMessage,getPromptProgressText,getLiveProcessingStats,getLiveGenerationStats,shouldShowDetails,startMonitoring,stopMonitoring}}var root_1$h=from_html('<div class="mt-6 w-full max-w-[48rem]"><div class="processing-container svelte-14103tf"><span class="processing-text svelte-14103tf"> </span></div></div>'),root_4$a=from_html("<!> Cancel",1),root_5$b=from_html("<!> Save",1),root_2$m=from_html('<div class="w-full"><textarea plac\ +eholder="Edit assistant message..."></textarea> <div class="mt-2 flex items-center justify-between"><div class="flex items-center space-x-2"><!> <!></div> <div class="flex gap-2"><!> <!></div></div></div>'),root_7$9=from_html('<pre class="raw-output svelte-14103tf"> </pre>'),root_9$7=from_html('<div class="text-sm whitespace-pre-wrap"> </div>'),root_10$4=from_html('<div class="mt-4 w-full max-w-[48rem]"><div class="processing-container svelte-14103tf"><span class="processing-text svelte-14103tf"\ +> </span></div></div>'),root_11$4=from_html('<div class="inline-flex flex-wrap items-start gap-2 text-xs text-muted-foreground"><!> <!></div>'),root$C=from_html('<div role="group" aria-label="Assistant message with actions"><!> <!> <!> <div class="info my-6 grid gap-4 tabular-nums"><!></div> <!></div>');function ChatMessageAssistant($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),isLastAssistantMessage=prop($$props,"isLastAssistantMessage",3,!1),toolMessages=prop($$props, +"toolMessages",19,()=>[]),siblingInfo=prop($$props,"siblingInfo",3,null),textareaElement=prop($$props,"textareaElement",15);const editCtx=getMessageEditContext();let shouldBranchAfterEdit=state$1(!1);function handleEditKeydown(event2){event2.key===KeyboardKey.ENTER&&!event2.shiftKey&&!isIMEComposing(event2)?(event2.preventDefault(),editCtx.save()):event2.key===KeyboardKey.ESCAPE&&(event2.preventDefault(),editCtx.cancel())}const isAgentic=user_derived(()=>hasAgenticContent($$props.message,toolMessages())), +hasReasoning=user_derived(()=>!!$$props.message.reasoningContent),processingState=useProcessingState();let currentConfig=user_derived(config$1),isRouter=user_derived(isRouterMode),showRawOutput=state$1(!1),rawOutputContent=user_derived(()=>{const sections=deriveAgenticSections($$props.message,toolMessages(),[],!1),parts=[];for(const section2 of sections)switch(section2.type){case AgenticSectionType.REASONING:case AgenticSectionType.REASONING_PENDING:parts.push(`${REASONING_TAGS.START} +${section2.content} +${REASONING_TAGS.END}`);break;case AgenticSectionType.TEXT:parts.push(section2.content);break;case AgenticSectionType.TOOL_CALL:case AgenticSectionType.TOOL_CALL_PENDING:case AgenticSectionType.TOOL_CALL_STREAMING:{const callObj={name:section2.toolName};if(section2.toolArgs)try{callObj.arguments=JSON.parse(section2.toolArgs)}catch{callObj.arguments=section2.toolArgs}parts.push(JSON.stringify(callObj,null,2)),section2.toolResult&&parts.push(`[Tool Result] +${section2.toolResult}`);break}}return parts.join(` -`)}),activeStatsView=state$1(proxy(ChatMessageStatsView.GENERATION)),statsContainerEl=state$1(void 0);function getScrollParent(el){let parent=el.parentElement;for(;parent;){const style2=getComputedStyle(parent);if(/(auto|scroll)/.test(style2.overflowY))return parent;parent=parent.parentElement}return null}async function handleStatsViewChange(view){const el=get$4(statsContainerEl);if(!el){set$1(activeStatsView,view,!0);return}const scrollParent=getScrollParent(el);if(!scrollParent){set$1(activeStatsView, -view,!0);return}const yBefore=el.getBoundingClientRect().top;set$1(activeStatsView,view,!0),await tick();const delta=el.getBoundingClientRect().top-yBefore;delta!==0&&(scrollParent.scrollTop+=delta),requestAnimationFrame(()=>{const drift=el.getBoundingClientRect().top-yBefore;Math.abs(drift)>1&&(scrollParent.scrollTop+=drift)})}let highlightAgenticTurns=user_derived(()=>get$4(isAgentic)&&(get$4(currentConfig).alwaysShowAgenticTurns||get$4(activeStatsView)===ChatMessageStatsView.SUMMARY)),displayedModel=user_derived( -()=>$$props.message.model??null),isCurrentlyLoading=user_derived(isLoading),isStreaming=user_derived(isChatStreaming),hasNoContent=user_derived(()=>!$$props.message?.content?.trim()),isActivelyProcessing=user_derived(()=>get$4(isCurrentlyLoading)||get$4(isStreaming)),showProcessingInfoTop=user_derived(()=>$$props.message?.role===MessageRole.ASSISTANT&&get$4(isActivelyProcessing)&&get$4(hasNoContent)&&!get$4(isAgentic)&&isLastAssistantMessage()),showProcessingInfoBottom=user_derived(()=>$$props.message?. -role===MessageRole.ASSISTANT&&get$4(isActivelyProcessing)&&(!get$4(hasNoContent)||get$4(isAgentic))&&isLastAssistantMessage());function handleCopyModel(){copyToClipboard(get$4(displayedModel)??"")}user_effect(()=>{editCtx.isEditing&&textareaElement()&&autoResizeTextarea(textareaElement())}),user_effect(()=>{(get$4(showProcessingInfoTop)||get$4(showProcessingInfoBottom))&&processingState.startMonitoring()});var div=root$P(),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$t(),div_2=child( -div_1),span=child(div_2),text2=child(span,!0);reset(span),reset(div_2),reset(div_1),template_effect($0=>set_text(text2,$0),[()=>processingState.getPromptProgressText()??processingState.getProcessingMessage()??"Processing..."]),transition(1,div_1,()=>fade),append($$anchor2,div_1)};if_block(node2,$$render=>{get$4(showProcessingInfoTop)&&$$render(consequent)})}var node_1=sibling(node2,2);{var consequent_1=$$anchor2=>{var div_3=root_2$v(),textarea=child(div_3);remove_textarea_child(textarea),textarea. -__keydown=handleEditKeydown,textarea.__input=e=>{autoResizeTextarea(e.currentTarget),editCtx.setContent(e.currentTarget.value)},bind_this(textarea,$$value=>textareaElement($$value),()=>textareaElement());var div_4=sibling(textarea,2),div_5=child(div_4),node_2=child(div_5);Checkbox(node_2,{id:"branch-after-edit",onCheckedChange:checked=>set$1(shouldBranchAfterEdit,checked===!0),get checked(){return get$4(shouldBranchAfterEdit)},set checked($$value){set$1(shouldBranchAfterEdit,$$value,!0)}});var node_3=sibling( -node_2,2);Label(node_3,{for:"branch-after-edit",class:"cursor-pointer text-sm text-muted-foreground",children:($$anchor3,$$slotProps)=>{next$1();var text_1=text$8("Branch conversation after edit");append($$anchor3,text_1)},$$slots:{default:!0}}),reset(div_5);var div_6=sibling(div_5,2),node_4=child(div_6);Button(node_4,{class:"h-8 px-3",get onclick(){return editCtx.cancel},size:"sm",variant:"outline",children:($$anchor3,$$slotProps)=>{var fragment=root_4$d(),node_5=first_child(fragment);X(node_5, -{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor3,fragment)},$$slots:{default:!0}});var node_6=sibling(node_4,2);{let $0=user_derived(()=>!editCtx.editedContent?.trim());Button(node_6,{class:"h-8 px-3",get onclick(){return editCtx.save},get disabled(){return get$4($0)},size:"sm",children:($$anchor3,$$slotProps)=>{var fragment_1=root_5$i(),node_7=first_child(fragment_1);Check(node_7,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor3,fragment_1)},$$slots:{default:!0}})}reset(div_6),reset(div_4),reset( -div_3),template_effect(()=>{set_value(textarea,editCtx.editedContent),set_class(textarea,1,`min-h-[50vh] w-full resize-y rounded-2xl px-3 py-2 text-sm ${INPUT_CLASSES??""}`,"svelte-14103tf")}),append($$anchor2,div_3)},alternate_2=$$anchor2=>{var fragment_2=comment$2(),node_8=first_child(fragment_2);{var consequent_3=$$anchor3=>{var fragment_3=comment$2(),node_9=first_child(fragment_3);{var consequent_2=$$anchor4=>{var pre=root_8$c(),text_2=child(pre,!0);reset(pre),template_effect(()=>set_text(text_2, -get$4(rawOutputContent)||"")),append($$anchor4,pre)},alternate=$$anchor4=>{{let $0=user_derived(isChatStreaming);ChatMessageAgenticContent($$anchor4,{get message(){return $$props.message},get toolMessages(){return toolMessages()},get isStreaming(){return get$4($0)},get highlightTurns(){return get$4(highlightAgenticTurns)}})}};if_block(node_9,$$render=>{get$4(showRawOutput)?$$render(consequent_2):$$render(alternate,!1)})}append($$anchor3,fragment_3)},alternate_1=$$anchor3=>{var div_7=root_10$a(), -text_3=child(div_7,!0);reset(div_7),template_effect(()=>set_text(text_3,$$props.messageContent)),append($$anchor3,div_7)};if_block(node_8,$$render=>{$$props.message.role===MessageRole.ASSISTANT?$$render(consequent_3):$$render(alternate_1,!1)},!0)}append($$anchor2,fragment_2)};if_block(node_1,$$render=>{editCtx.isEditing?$$render(consequent_1):$$render(alternate_2,!1)})}var node_10=sibling(node_1,2);{var consequent_4=$$anchor2=>{var div_8=root_11$5(),div_9=child(div_8),span_1=child(div_9),text_4=child( -span_1,!0);reset(span_1),reset(div_9),reset(div_8),template_effect($0=>set_text(text_4,$0),[()=>processingState.getPromptProgressText()??processingState.getProcessingMessage()??"Processing..."]),transition(1,div_8,()=>fade),append($$anchor2,div_8)};if_block(node_10,$$render=>{get$4(showProcessingInfoBottom)&&$$render(consequent_4)})}var div_10=sibling(node_10,2),node_11=child(div_10);{var consequent_9=$$anchor2=>{var div_11=root_12$6(),node_12=child(div_11);{var consequent_5=$$anchor3=>{{let $0=user_derived( -isLoading);ModelsSelector($$anchor3,{get currentModel(){return get$4(displayedModel)},get disabled(){return get$4($0)},onModelChange:async(modelId,modelName)=>(modelsStore.getModelStatus(modelId)!==ServerModelStatus.LOADED&&await modelsStore.loadModel(modelId),$$props.onRegenerate(modelName),!0)})}},alternate_3=$$anchor3=>{{let $0=user_derived(()=>get$4(displayedModel)||void 0);ModelBadge($$anchor3,{get model(){return get$4($0)},onclick:handleCopyModel})}};if_block(node_12,$$render=>{get$4(isRouter)? -$$render(consequent_5):$$render(alternate_3,!1)})}var node_13=sibling(node_12,2);{var consequent_6=$$anchor3=>{const agentic=user_derived(()=>$$props.message.timings.agentic);{let $0=user_derived(()=>get$4(agentic)?get$4(agentic).llm.prompt_n:$$props.message.timings.prompt_n),$1=user_derived(()=>get$4(agentic)?get$4(agentic).llm.prompt_ms:$$props.message.timings.prompt_ms),$2=user_derived(()=>get$4(agentic)?get$4(agentic).llm.predicted_n:$$props.message.timings.predicted_n),$3=user_derived(()=>get$4( -agentic)?get$4(agentic).llm.predicted_ms:$$props.message.timings.predicted_ms);ChatMessageStatistics($$anchor3,{get promptTokens(){return get$4($0)},get promptMs(){return get$4($1)},get predictedTokens(){return get$4($2)},get predictedMs(){return get$4($3)},get agenticTimings(){return get$4(agentic)},onActiveViewChange:handleStatsViewChange})}},alternate_4=$$anchor3=>{var fragment_8=comment$2(),node_14=first_child(fragment_8);{var consequent_8=$$anchor4=>{const liveStats=user_derived(()=>processingState. -getLiveProcessingStats()),genStats=user_derived(()=>processingState.getLiveGenerationStats()),promptProgress=user_derived(()=>processingState.processingState?.promptProgress),isStillProcessingPrompt=user_derived(()=>get$4(promptProgress)&&get$4(promptProgress).processed<get$4(promptProgress).total);var fragment_9=comment$2(),node_15=first_child(fragment_9);{var consequent_7=$$anchor5=>{{let $0=user_derived(()=>!!get$4(isStillProcessingPrompt)),$1=user_derived(()=>get$4(liveStats)?.tokensProcessed), -$2=user_derived(()=>get$4(liveStats)?.timeMs),$3=user_derived(()=>get$4(genStats)?.tokensGenerated),$4=user_derived(()=>get$4(genStats)?.timeMs);ChatMessageStatistics($$anchor5,{isLive:!0,get isProcessingPrompt(){return get$4($0)},get promptTokens(){return get$4($1)},get promptMs(){return get$4($2)},get predictedTokens(){return get$4($3)},get predictedMs(){return get$4($4)}})}};if_block(node_15,$$render=>{(get$4(liveStats)||get$4(genStats))&&$$render(consequent_7)})}append($$anchor4,fragment_9)}; -if_block(node_14,$$render=>{isLoading()&&get$4(currentConfig).showMessageStats&&$$render(consequent_8)},!0)}append($$anchor3,fragment_8)};if_block(node_13,$$render=>{get$4(currentConfig).showMessageStats&&$$props.message.timings&&$$props.message.timings.predicted_n&&$$props.message.timings.predicted_ms?$$render(consequent_6):$$render(alternate_4,!1)})}reset(div_11),bind_this(div_11,$$value=>set$1(statsContainerEl,$$value),()=>get$4(statsContainerEl)),append($$anchor2,div_11)};if_block(node_11,$$render=>{ -get$4(displayedModel)&&$$render(consequent_9)})}reset(div_10);var node_16=sibling(div_10,2);{var consequent_10=$$anchor2=>{{let $0=user_derived(()=>get$4(currentConfig).enableContinueGeneration&&!get$4(hasReasoning)?$$props.onContinue:void 0);ChatMessageActions($$anchor2,{get role(){return MessageRole.ASSISTANT},justify:"start",actionsPosition:"left",get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get deletionInfo(){return $$props.deletionInfo},get onCopy(){ -return $$props.onCopy},get onEdit(){return $$props.onEdit},get onRegenerate(){return $$props.onRegenerate},get onContinue(){return get$4($0)},get onForkConversation(){return $$props.onForkConversation},get onDelete(){return $$props.onDelete},get onConfirmDelete(){return $$props.onConfirmDelete},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get showRawOutputSwitch(){return get$4(currentConfig).showRawOutputSwitch}, -get rawOutputEnabled(){return get$4(showRawOutput)},onRawOutputToggle:enabled=>set$1(showRawOutput,enabled,!0)})}};if_block(node_16,$$render=>{$$props.message.timestamp&&!editCtx.isEditing&&$$render(consequent_10)})}reset(div),template_effect(()=>set_class(div,1,`text-md group w-full leading-7.5 ${className()??""}`,"svelte-14103tf")),append($$anchor,div),pop()}delegate(["keydown","input"]);class AutoScrollController{#_autoScrollEnabled=state$1(!0);get _autoScrollEnabled(){return get$4(this.#_autoScrollEnabled)}set _autoScrollEnabled(value){ -set$1(this.#_autoScrollEnabled,value,!0)}#_userScrolledUp=state$1(!1);get _userScrolledUp(){return get$4(this.#_userScrolledUp)}set _userScrolledUp(value){set$1(this.#_userScrolledUp,value,!0)}#_lastScrollTop=state$1(0);get _lastScrollTop(){return get$4(this.#_lastScrollTop)}set _lastScrollTop(value){set$1(this.#_lastScrollTop,value,!0)}_scrollInterval;_scrollTimeout;_container;_disabled;_isColumnReverse;_mutationObserver=null;_rafPending=!1;_observerEnabled=!1;constructor(options={}){this._disabled= -options.disabled??!1,this._isColumnReverse=options.isColumnReverse??!1}get autoScrollEnabled(){return this._autoScrollEnabled}get userScrolledUp(){return this._userScrolledUp}setContainer(container2){this._doStopObserving(),this._container=container2,this._observerEnabled&&container2&&!this._disabled&&this._doStartObserving()}setDisabled(disabled){this._disabled=disabled,disabled?(this._autoScrollEnabled=!1,this.stopInterval(),this._doStopObserving()):this._observerEnabled&&this._container&&!this. -_mutationObserver&&this._doStartObserving()}handleScroll(){if(this._disabled||!this._container)return;const{scrollTop,scrollHeight,clientHeight}=this._container;let distanceFromBottom,isScrollingUp;this._isColumnReverse?(distanceFromBottom=Math.abs(scrollTop),isScrollingUp=scrollTop<this._lastScrollTop):(distanceFromBottom=scrollHeight-clientHeight-scrollTop,isScrollingUp=scrollTop<this._lastScrollTop);const isAtBottom=distanceFromBottom<AUTO_SCROLL_AT_BOTTOM_THRESHOLD;isScrollingUp&&!isAtBottom? -(this._userScrolledUp=!0,this._autoScrollEnabled=!1):isAtBottom&&this._userScrolledUp&&(this._userScrolledUp=!1,this._autoScrollEnabled=!0),this._scrollTimeout&&clearTimeout(this._scrollTimeout),this._scrollTimeout=setTimeout(()=>{isAtBottom&&(this._userScrolledUp=!1,this._autoScrollEnabled=!0)},AUTO_SCROLL_INTERVAL),this._lastScrollTop=scrollTop}scrollToBottom(behavior="smooth"){this._disabled||!this._container||(this._isColumnReverse?this._container.scrollTo({top:0,behavior}):this._container.scrollTo( -{top:this._container.scrollHeight,behavior}))}enable(){this._disabled||(this._userScrolledUp=!1,this._autoScrollEnabled=!0)}startInterval(){this._disabled||this._scrollInterval||(this._scrollInterval=setInterval(()=>{this.scrollToBottom()},AUTO_SCROLL_INTERVAL))}stopInterval(){this._scrollInterval&&(clearInterval(this._scrollInterval),this._scrollInterval=void 0)}updateInterval(isStreaming){if(this._disabled){this.stopInterval();return}isStreaming&&this._autoScrollEnabled?this._scrollInterval||this. -startInterval():this.stopInterval()}destroy(){this.stopInterval(),this._doStopObserving(),this._scrollTimeout&&(clearTimeout(this._scrollTimeout),this._scrollTimeout=void 0)}startObserving(){this._observerEnabled=!0,this._container&&!this._disabled&&!this._mutationObserver&&this._doStartObserving()}stopObserving(){this._observerEnabled=!1,this._doStopObserving()}_doStartObserving(){if(!this._container||this._mutationObserver)return;const isReverse=this._isColumnReverse;this._mutationObserver=new MutationObserver( -()=>{!this._autoScrollEnabled||this._rafPending||(this._rafPending=!0,requestAnimationFrame(()=>{this._rafPending=!1,this._autoScrollEnabled&&this._container&&(isReverse?this._container.scrollTop=0:this._container.scrollTop=this._container.scrollHeight)}))}),this._mutationObserver.observe(this._container,{childList:!0,subtree:!0,characterData:!0})}_doStopObserving(){this._mutationObserver&&(this._mutationObserver.disconnect(),this._mutationObserver=null),this._rafPending=!1}}function createAutoScrollController(options={}){ -return new AutoScrollController(options)}var root$O=from_html('<div class="pointer-events-none fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm"><div class="flex flex-col items-center justify-center rounded-2xl border-2 border-dashed border-border bg-background p-12 shadow-lg"><!> <p class="text-lg font-medium text-foreground">Attach a file</p> <p class="text-sm text-muted-foreground">Drop your files here to upload</p></div></div>');function ChatScreenDragOverlay($$anchor){ -var div=root$O(),div_1=child(div),node2=child(div_1);Upload(node2,{class:"mb-4 h-12 w-12 text-muted-foreground"}),next$1(4),reset(div_1),reset(div),append($$anchor,div)}var root_5$h=from_html('<span>Server unavailable</span> <button class="flex items-center gap-1.5 rounded-lg bg-destructive/20 px-2 py-1 text-xs font-medium hover:bg-destructive/30 disabled:opacity-50"><!> </button>',1),root_4$c=from_html("<!> <!> <!>",1),root_3$o=from_html('<div class="pointer-events-auto mx-auto mb-4 max-w-[48re\ -m] px-1"><!></div>'),root_2$u=from_html('<div aria-label="Chat interface with file drop zone" class="flex h-full flex-col-reverse overflow-y-auto px-4 md:px-6" role="main"><div class="flex flex-col"><!> <div class="pointer-events-none sticky right-0 bottom-4 left-0 mt-auto"><!> <!> <div class="conversation-chat-form pointer-events-auto rounded-t-3xl svelte-lwk0qk"><!></div></div></div></div>'),root_12$5=from_html('<span>Server unavailable</span> <button class="flex items-center gap-1.5 rounded-l\ -g bg-destructive/20 px-2 py-1 text-xs font-medium hover:bg-destructive/30 disabled:opacity-50"><!> </button>',1),root_11$4=from_html("<!> <!> <!>",1),root_10$9=from_html('<div class="mb-4"><!></div>'),root_9$c=from_html('<div aria-label="Welcome screen with file drop zone" class="flex h-full items-center justify-center" role="main"><div class="w-full max-w-[48rem] px-4"><div class="mb-10 text-center"><h1 class="mb-2 text-2xl font-semibold tracking-tight md:text-3xl">llama.cpp</h1> <p class="text\ --muted-foreground md:text-lg"> </p></div> <!> <div><!></div></div></div>'),root_17$2=from_html("<!> <!>",1),root_21$3=from_html('<div class="rounded-md bg-destructive/10 px-3 py-2"><p class="font-mono text-sm break-all text-destructive"> </p> <p class="mt-1 text-xs text-muted-foreground">File type not supported</p></div>'),root_20$4=from_html('<div class="space-y-2"><h4 class="text-sm font-medium text-destructive">Unsupported File Types</h4> <div class="space-y-1"></div></div>'),root_23$2=from_html( -'<div class="rounded-md bg-destructive/10 px-3 py-2"><p class="font-mono text-sm break-all text-destructive"> </p> <p class="mt-1 text-xs text-muted-foreground"> </p></div>'),root_22$3=from_html('<div class="space-y-2"><div class="space-y-1"></div></div>'),root_16$3=from_html('<!> <div class="!max-h-[50vh] min-h-0 flex-1 space-y-4 overflow-y-auto"><!> <!></div> <div class="rounded-md bg-muted/50 p-3"><h4 class="mb-2 text-sm font-medium">This model supports:</h4> <p class="text-sm text-muted-fore\ -ground"> </p></div> <!>',1),root_15$2=from_html("<!> <!>",1),root$N=from_html("<!> <!> <!> <!> <!> <!> <!>",1);function ChatScreen($$anchor,$$props){push$1($$props,!0);let showCenteredEmpty=prop($$props,"showCenteredEmpty",3,!1),disableAutoScroll=user_derived(()=>!!config$1().disableAutoScroll),chatScrollContainer=state$1(void 0),dragCounter=state$1(0),isDragOver=state$1(!1),showFileErrorDialog=state$1(!1),uploadedFiles=state$1(proxy([]));const autoScroll=createAutoScrollController({isColumnReverse:!0}); -let fileErrorData=state$1(proxy({generallyUnsupported:[],modalityUnsupported:[],modalityReasons:{},supportedTypes:[]})),showDeleteDialog=state$1(!1),showEmptyFileDialog=state$1(!1),emptyFileNames=state$1(proxy([])),initialMessage=state$1(""),isEmpty=user_derived(()=>showCenteredEmpty()&&!activeConversation()&&activeMessages().length===0&&!isLoading()),activeErrorDialog=user_derived(errorDialog),isServerLoading=user_derived(serverLoading),hasPropsError=user_derived(()=>!!serverError()),isCurrentConversationLoading=user_derived( -()=>isLoading()||isChatStreaming()),isRouter=user_derived(isRouterMode),conversationModel=user_derived(()=>chatStore.getConversationModel(activeMessages())),activeModelId=user_derived(()=>{const options=modelOptions();if(!get$4(isRouter))return options.length>0?options[0].model:null;const selectedId=selectedModelId();if(selectedId){const model=options.find(m=>m.id===selectedId);if(model)return model.model}if(get$4(conversationModel)){const model=options.find(m=>m.model===get$4(conversationModel)); -if(model)return model.model}return null}),modelPropsVersion=state$1(0);user_effect(()=>{get$4(activeModelId)&&(modelsStore.getModelProps(get$4(activeModelId))||modelsStore.fetchModelProps(get$4(activeModelId)).then(()=>{update$1(modelPropsVersion)}))});let hasAudioModality=user_derived(()=>get$4(activeModelId)?(get$4(modelPropsVersion),modelsStore.modelSupportsAudio(get$4(activeModelId))):!1),hasVisionModality=user_derived(()=>get$4(activeModelId)?(get$4(modelPropsVersion),modelsStore.modelSupportsVision( -get$4(activeModelId))):!1);async function handleDeleteConfirm(){const conversation=activeConversation();conversation&&await conversationsStore.deleteConversation(conversation.id),set$1(showDeleteDialog,!1)}function handleDragEnter(event2){event2.preventDefault(),update$1(dragCounter),event2.dataTransfer?.types.includes("Files")&&set$1(isDragOver,!0)}function handleDragLeave(event2){event2.preventDefault(),update$1(dragCounter,-1),get$4(dragCounter)===0&&set$1(isDragOver,!1)}function handleErrorDialogOpenChange(open2){ -open2||chatStore.dismissErrorDialog()}function handleDragOver(event2){event2.preventDefault()}function handleDrop(event2){if(event2.preventDefault(),set$1(isDragOver,!1),set$1(dragCounter,0),event2.dataTransfer?.files){const files=Array.from(event2.dataTransfer.files);if(isEditing()){const handler=getAddFilesHandler();if(handler){handler(files);return}}processFiles(files)}}function handleFileRemove(fileId){set$1(uploadedFiles,get$4(uploadedFiles).filter(f=>f.id!==fileId),!0)}function handleFileUpload(files){ -processFiles(files)}function handleKeydown(event2){(event2.ctrlKey||event2.metaKey)&&event2.shiftKey&&(event2.key===KeyboardKey.D_LOWER||event2.key===KeyboardKey.D_UPPER)&&(event2.preventDefault(),activeConversation()&&set$1(showDeleteDialog,!0))}async function handleSystemPromptAdd(draft){(draft.message||draft.files.length>0)&&chatStore.savePendingDraft(draft.message,draft.files),await chatStore.addSystemPrompt()}function handleScroll(){autoScroll.handleScroll()}async function handleSendMessage(message,files){ -const plainFiles=files?snapshot(files):void 0,result=plainFiles?await parseFilesToMessageExtras(plainFiles,get$4(activeModelId)??void 0):void 0;if(result?.emptyFiles&&result.emptyFiles.length>0){if(set$1(emptyFileNames,result.emptyFiles,!0),set$1(showEmptyFileDialog,!0),files){const emptyFileNamesSet=new Set(result.emptyFiles);set$1(uploadedFiles,get$4(uploadedFiles).filter(file=>!emptyFileNamesSet.has(file.name)),!0)}return!1}const extras=result?.extras;return autoScroll.enable(),await chatStore. -sendMessage(message,extras),autoScroll.scrollToBottom(),!0}async function processFiles(files){const generallySupported=[],generallyUnsupported=[];for(const file of files)isFileTypeSupported(file.name,file.type)?generallySupported.push(file):generallyUnsupported.push(file);const capabilities={hasVision:get$4(hasVisionModality),hasAudio:get$4(hasAudioModality)},{supportedFiles,unsupportedFiles,modalityReasons}=filterFilesByModalities(generallySupported,capabilities);if([...generallyUnsupported,...unsupportedFiles]. -length>0){const supportedTypes=["text files","PDFs"];get$4(hasVisionModality)&&supportedTypes.push("images"),get$4(hasAudioModality)&&supportedTypes.push("audio files"),set$1(fileErrorData,{generallyUnsupported,modalityUnsupported:unsupportedFiles,modalityReasons,supportedTypes},!0),set$1(showFileErrorDialog,!0)}if(supportedFiles.length>0){const processed=await processFilesToChatUploaded(supportedFiles,get$4(activeModelId)??void 0);set$1(uploadedFiles,[...get$4(uploadedFiles),...processed],!0)}} -afterNavigate(()=>{get$4(disableAutoScroll)||autoScroll.enable()}),onMount$1(()=>{autoScroll.startObserving(),get$4(disableAutoScroll)||autoScroll.enable();const pendingDraft=chatStore.consumePendingDraft();pendingDraft&&(set$1(initialMessage,pendingDraft.message,!0),set$1(uploadedFiles,pendingDraft.files,!0))}),user_effect(()=>{autoScroll.setContainer(get$4(chatScrollContainer))}),user_effect(()=>{autoScroll.setDisabled(get$4(disableAutoScroll))});var fragment=root$N();event("keydown",$window,handleKeydown); -var node2=first_child(fragment);{var consequent=$$anchor2=>{ChatScreenDragOverlay($$anchor2)};if_block(node2,$$render=>{get$4(isDragOver)&&$$render(consequent)})}var node_1=sibling(node2,2);ChatScreenHeader(node_1,{});var node_2=sibling(node_1,2);{var consequent_2=$$anchor2=>{var div=root_2$u(),div_1=child(div),node_3=child(div_1);{let $0=user_derived(activeMessages);ChatMessages(node_3,{class:"mb-16 md:mb-24",get messages(){return get$4($0)},onUserAction:()=>{autoScroll.enable(),autoScroll.scrollToBottom()}})} -var div_2=sibling(node_3,2),node_4=child(div_2);ChatScreenProcessingInfo(node_4,{});var node_5=sibling(node_4,2);{var consequent_1=$$anchor3=>{var div_3=root_3$o(),node_6=child(div_3);component(node_6,()=>Alert,($$anchor4,Alert_Root)=>{Alert_Root($$anchor4,{variant:"destructive",children:($$anchor5,$$slotProps)=>{var fragment_2=root_4$c(),node_7=first_child(fragment_2);Triangle_alert(node_7,{class:"h-4 w-4"});var node_8=sibling(node_7,2);component(node_8,()=>Alert_title,($$anchor6,Alert_Title)=>{ -Alert_Title($$anchor6,{class:"flex items-center justify-between",children:($$anchor7,$$slotProps2)=>{var fragment_3=root_5$h(),button=sibling(first_child(fragment_3),2);button.__click=()=>serverStore.fetch();var node_9=child(button);{let $0=user_derived(()=>get$4(isServerLoading)?"animate-spin":"");Refresh_cw(node_9,{get class(){return`h-3 w-3 ${get$4($0)??""}`}})}var text2=sibling(node_9);reset(button),template_effect(()=>{button.disabled=get$4(isServerLoading),set_text(text2,` ${get$4(isServerLoading)? -"Retrying...":"Retry"}`)}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_10=sibling(node_8,2);component(node_10,()=>Alert_description,($$anchor6,Alert_Description)=>{Alert_Description($$anchor6,{children:($$anchor7,$$slotProps2)=>{next$1();var text_1=text$8();template_effect($0=>set_text(text_1,$0),[serverError]),append($$anchor7,text_1)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),reset(div_3),transition(1,div_3,()=>fly,()=>({y:10,duration:250})), -append($$anchor3,div_3)};if_block(node_5,$$render=>{get$4(hasPropsError)&&$$render(consequent_1)})}var div_4=sibling(node_5,2),node_11=child(div_4);{let $0=user_derived(()=>get$4(hasPropsError)||isEditing());ChatScreenForm(node_11,{get disabled(){return get$4($0)},get initialMessage(){return get$4(initialMessage)},get isLoading(){return get$4(isCurrentConversationLoading)},onFileRemove:handleFileRemove,onFileUpload:handleFileUpload,onSend:handleSendMessage,onStop:()=>chatStore.stopGeneration(),onSystemPromptAdd:handleSystemPromptAdd, -showHelperText:!1,get uploadedFiles(){return get$4(uploadedFiles)},set uploadedFiles($$value){set$1(uploadedFiles,$$value,!0)}})}reset(div_4),reset(div_2),reset(div_1),reset(div),bind_this(div,$$value=>set$1(chatScrollContainer,$$value),()=>get$4(chatScrollContainer)),event("dragenter",div,handleDragEnter),event("dragleave",div,handleDragLeave),event("dragover",div,handleDragOver),event("drop",div,handleDrop),event("scroll",div,handleScroll),transition(1,div_2,()=>slide,()=>({duration:150,axis:"\ -y"})),append($$anchor2,div)},alternate_1=$$anchor2=>{var fragment_5=comment$2(),node_12=first_child(fragment_5);{var consequent_3=$$anchor3=>{ServerLoadingSplash($$anchor3,{})},alternate=$$anchor3=>{var div_5=root_9$c(),div_6=child(div_5),div_7=child(div_6),p2=sibling(child(div_7),2),text_2=child(p2);reset(p2),reset(div_7);var node_13=sibling(div_7,2);{var consequent_4=$$anchor4=>{var div_8=root_10$9(),node_14=child(div_8);component(node_14,()=>Alert,($$anchor5,Alert_Root_1)=>{Alert_Root_1($$anchor5, -{variant:"destructive",children:($$anchor6,$$slotProps)=>{var fragment_7=root_11$4(),node_15=first_child(fragment_7);Triangle_alert(node_15,{class:"h-4 w-4"});var node_16=sibling(node_15,2);component(node_16,()=>Alert_title,($$anchor7,Alert_Title_1)=>{Alert_Title_1($$anchor7,{class:"flex items-center justify-between",children:($$anchor8,$$slotProps2)=>{var fragment_8=root_12$5(),button_1=sibling(first_child(fragment_8),2);button_1.__click=()=>serverStore.fetch();var node_17=child(button_1);{let $0=user_derived( -()=>get$4(isServerLoading)?"animate-spin":"");Refresh_cw(node_17,{get class(){return`h-3 w-3 ${get$4($0)??""}`}})}var text_3=sibling(node_17);reset(button_1),template_effect(()=>{button_1.disabled=get$4(isServerLoading),set_text(text_3,` ${get$4(isServerLoading)?"Retrying...":"Retry"}`)}),append($$anchor8,fragment_8)},$$slots:{default:!0}})});var node_18=sibling(node_16,2);component(node_18,()=>Alert_description,($$anchor7,Alert_Description_1)=>{Alert_Description_1($$anchor7,{children:($$anchor8,$$slotProps2)=>{ -next$1();var text_4=text$8();template_effect($0=>set_text(text_4,$0),[serverError]),append($$anchor8,text_4)},$$slots:{default:!0}})}),append($$anchor6,fragment_7)},$$slots:{default:!0}})}),reset(div_8),transition(1,div_8,()=>fly,()=>({y:10,duration:250})),append($$anchor4,div_8)};if_block(node_13,$$render=>{get$4(hasPropsError)&&$$render(consequent_4)})}var div_9=sibling(node_13,2),node_19=child(div_9);ChatScreenForm(node_19,{get disabled(){return get$4(hasPropsError)},get initialMessage(){return get$4( -initialMessage)},get isLoading(){return get$4(isCurrentConversationLoading)},onFileRemove:handleFileRemove,onFileUpload:handleFileUpload,onSend:handleSendMessage,onStop:()=>chatStore.stopGeneration(),onSystemPromptAdd:handleSystemPromptAdd,showHelperText:!0,get uploadedFiles(){return get$4(uploadedFiles)},set uploadedFiles($$value){set$1(uploadedFiles,$$value,!0)}}),reset(div_9),reset(div_6),reset(div_5),template_effect(()=>set_text(text_2,`${serverStore.props?.modalities?.audio?"Record audio, t\ -ype a message ":"Type a message"} or upload files to get started`)),event("dragenter",div_5,handleDragEnter),event("dragleave",div_5,handleDragLeave),event("dragover",div_5,handleDragOver),event("drop",div_5,handleDrop),transition(1,div_7,()=>fade,()=>({duration:300})),transition(1,div_9,()=>fly,()=>({y:10,duration:250,delay:get$4(hasPropsError)?0:300})),append($$anchor3,div_5)};if_block(node_12,$$render=>{get$4(isServerLoading)?$$render(consequent_3):$$render(alternate,!1)},!0)}append($$anchor2, -fragment_5)};if_block(node_2,$$render=>{get$4(isEmpty)?$$render(alternate_1,!1):$$render(consequent_2)})}var node_20=sibling(node_2,2);component(node_20,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return get$4(showFileErrorDialog)},set open($$value){set$1(showFileErrorDialog,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment_10=comment$2(),node_21=first_child(fragment_10);component(node_21,()=>Portal,($$anchor4,AlertDialog_Portal)=>{AlertDialog_Portal( -$$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_11=root_15$2(),node_22=first_child(fragment_11);component(node_22,()=>Alert_dialog_overlay,($$anchor6,AlertDialog_Overlay)=>{AlertDialog_Overlay($$anchor6,{})});var node_23=sibling(node_22,2);component(node_23,()=>Alert_dialog_content,($$anchor6,AlertDialog_Content)=>{AlertDialog_Content($$anchor6,{class:"flex max-w-md flex-col",children:($$anchor7,$$slotProps3)=>{var fragment_12=root_16$3(),node_24=first_child(fragment_12);component(node_24, -()=>Alert_dialog_header,($$anchor8,AlertDialog_Header)=>{AlertDialog_Header($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_13=root_17$2(),node_25=first_child(fragment_13);component(node_25,()=>Alert_dialog_title,($$anchor10,AlertDialog_Title)=>{AlertDialog_Title($$anchor10,{children:($$anchor11,$$slotProps5)=>{next$1();var text_5=text$8("File Upload Error");append($$anchor11,text_5)},$$slots:{default:!0}})});var node_26=sibling(node_25,2);component(node_26,()=>Alert_dialog_description, -($$anchor10,AlertDialog_Description)=>{AlertDialog_Description($$anchor10,{class:"text-sm text-muted-foreground",children:($$anchor11,$$slotProps5)=>{next$1();var text_6=text$8("Some files cannot be uploaded with the current model.");append($$anchor11,text_6)},$$slots:{default:!0}})}),append($$anchor9,fragment_13)},$$slots:{default:!0}})});var div_10=sibling(node_24,2),node_27=child(div_10);{var consequent_5=$$anchor8=>{var div_11=root_20$4(),div_12=sibling(child(div_11),2);each(div_12,21,()=>get$4( -fileErrorData).generallyUnsupported,file=>file.name,($$anchor9,file)=>{var div_13=root_21$3(),p_1=child(div_13),text_7=child(p_1,!0);reset(p_1),next$1(2),reset(div_13),template_effect(()=>set_text(text_7,get$4(file).name)),append($$anchor9,div_13)}),reset(div_12),reset(div_11),append($$anchor8,div_11)};if_block(node_27,$$render=>{get$4(fileErrorData).generallyUnsupported.length>0&&$$render(consequent_5)})}var node_28=sibling(node_27,2);{var consequent_6=$$anchor8=>{var div_14=root_22$3(),div_15=child( -div_14);each(div_15,21,()=>get$4(fileErrorData).modalityUnsupported,file=>file.name,($$anchor9,file)=>{var div_16=root_23$2(),p_2=child(div_16),text_8=child(p_2,!0);reset(p_2);var p_3=sibling(p_2,2),text_9=child(p_3,!0);reset(p_3),reset(div_16),template_effect(()=>{set_text(text_8,get$4(file).name),set_text(text_9,get$4(fileErrorData).modalityReasons[get$4(file).name]||"Not supported by current model")}),append($$anchor9,div_16)}),reset(div_15),reset(div_14),append($$anchor8,div_14)};if_block(node_28, -$$render=>{get$4(fileErrorData).modalityUnsupported.length>0&&$$render(consequent_6)})}reset(div_10);var div_17=sibling(div_10,2),p_4=sibling(child(div_17),2),text_10=child(p_4,!0);reset(p_4),reset(div_17);var node_29=sibling(div_17,2);component(node_29,()=>Alert_dialog_footer,($$anchor8,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_14=comment$2(),node_30=first_child(fragment_14);component(node_30,()=>Alert_dialog_action,($$anchor10,AlertDialog_Action)=>{ -AlertDialog_Action($$anchor10,{onclick:()=>set$1(showFileErrorDialog,!1),children:($$anchor11,$$slotProps5)=>{next$1();var text_11=text$8("Got it");append($$anchor11,text_11)},$$slots:{default:!0}})}),append($$anchor9,fragment_14)},$$slots:{default:!0}})}),template_effect($0=>set_text(text_10,$0),[()=>get$4(fileErrorData).supportedTypes.join(", ")]),append($$anchor7,fragment_12)},$$slots:{default:!0}})}),append($$anchor5,fragment_11)},$$slots:{default:!0}})}),append($$anchor3,fragment_10)},$$slots:{ -default:!0}})});var node_31=sibling(node_20,2);DialogConfirmation(node_31,{title:"Delete Conversation",description:"Are you sure you want to delete this conversation? This action cannot be undone and will permanently remove all messages in this conversation.",confirmText:"Delete",cancelText:"Cancel",variant:"destructive",get icon(){return Trash_2},onConfirm:handleDeleteConfirm,onCancel:()=>set$1(showDeleteDialog,!1),get open(){return get$4(showDeleteDialog)},set open($$value){set$1(showDeleteDialog, -$$value,!0)}});var node_32=sibling(node_31,2);DialogEmptyFileAlert(node_32,{get emptyFiles(){return get$4(emptyFileNames)},onOpenChange:open2=>{open2||set$1(emptyFileNames,[],!0)},get open(){return get$4(showEmptyFileDialog)},set open($$value){set$1(showEmptyFileDialog,$$value,!0)}});var node_33=sibling(node_32,2);{let $0=user_derived(()=>get$4(activeErrorDialog)?.message??""),$1=user_derived(()=>get$4(activeErrorDialog)?.contextInfo),$2=user_derived(()=>!!get$4(activeErrorDialog)),$3=user_derived( -()=>get$4(activeErrorDialog)?.type??ErrorDialogType.SERVER);DialogChatError(node_33,{get message(){return get$4($0)},get contextInfo(){return get$4($1)},onOpenChange:handleErrorDialogOpenChange,get open(){return get$4($2)},get type(){return get$4($3)}})}append($$anchor,fragment),pop()}delegate(["click"]);var root$M=from_html('<div class="relative mx-auto max-w-[48rem]"><!></div> <!>',1);function ChatScreenForm($$anchor,$$props){push$1($$props,!0);let disabled=prop($$props,"disabled",3,!1),initialMessage=prop( -$$props,"initialMessage",3,""),isLoading2=prop($$props,"isLoading",3,!1),showHelperText=prop($$props,"showHelperText",3,!0),uploadedFiles=prop($$props,"uploadedFiles",31,()=>proxy([])),chatFormRef=state$1(void 0),message=user_derived(initialMessage),previousIsLoading=user_derived(isLoading2),previousInitialMessage=user_derived(initialMessage);user_effect(()=>{initialMessage()!==get$4(previousInitialMessage)&&(set$1(message,initialMessage()),set$1(previousInitialMessage,initialMessage()))});function handleSystemPromptClick(){ -$$props.onSystemPromptAdd?.({message:get$4(message),files:uploadedFiles()})}let hasLoadingAttachments=user_derived(()=>uploadedFiles().some(f=>f.isLoading));async function handleSubmit(){if(!get$4(message).trim()&&uploadedFiles().length===0||disabled()||isLoading2()||get$4(hasLoadingAttachments)||!get$4(chatFormRef)?.checkModelSelected())return;const messageToSend=get$4(message).trim(),filesToSend=[...uploadedFiles()];set$1(message,""),uploadedFiles([]),get$4(chatFormRef)?.resetTextareaHeight(), -await $$props.onSend?.(messageToSend,filesToSend)||(set$1(message,messageToSend),uploadedFiles(filesToSend))}function handleFilesAdd(files){$$props.onFileUpload?.(files)}function handleUploadedFileRemove(fileId){$$props.onFileRemove?.(fileId)}onMount$1(()=>{setTimeout(()=>get$4(chatFormRef)?.focus(),10)}),afterNavigate(()=>{setTimeout(()=>get$4(chatFormRef)?.focus(),10)}),user_effect(()=>{get$4(previousIsLoading)&&!isLoading2()&&setTimeout(()=>get$4(chatFormRef)?.focus(),10),set$1(previousIsLoading, -isLoading2())});var fragment=root$M(),div=first_child(fragment),node2=child(div);bind_this(ChatForm(node2,{get class(){return $$props.class},get disabled(){return disabled()},get isLoading(){return isLoading2()},showMcpPromptButton:!0,onFilesAdd:handleFilesAdd,get onStop(){return $$props.onStop},onSubmit:handleSubmit,onSystemPromptClick:handleSystemPromptClick,onUploadedFileRemove:handleUploadedFileRemove,get value(){return get$4(message)},set value($$value){set$1(message,$$value)},get uploadedFiles(){ -return uploadedFiles()},set uploadedFiles($$value){uploadedFiles($$value)}}),$$value=>set$1(chatFormRef,$$value,!0),()=>get$4(chatFormRef)),reset(div);var node_1=sibling(div,2);ChatFormHelperText(node_1,{get show(){return showHelperText()}}),append($$anchor,fragment),pop()}const SIDEBAR_COOKIE_NAME="sidebar:state",SIDEBAR_COOKIE_MAX_AGE=3600*24*7,SIDEBAR_WIDTH="18rem",SIDEBAR_WIDTH_MOBILE="18rem",SIDEBAR_WIDTH_ICON="3rem",SIDEBAR_KEYBOARD_SHORTCUT="b";class SidebarState{props;#open=user_derived( -()=>this.props.open());get open(){return get$4(this.#open)}set open(value){set$1(this.#open,value)}#openMobile=state$1(!1);get openMobile(){return get$4(this.#openMobile)}set openMobile(value){set$1(this.#openMobile,value,!0)}setOpen;#isMobile;#state=user_derived(()=>this.open?"expanded":"collapsed");get state(){return get$4(this.#state)}set state(value){set$1(this.#state,value)}constructor(props){this.setOpen=props.setOpen,this.#isMobile=new IsMobile,this.props=props}get isMobile(){return this.#isMobile. -current}handleShortcutKeydown=e=>{e.key===SIDEBAR_KEYBOARD_SHORTCUT&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),this.toggle())};setOpenMobile=value=>{this.openMobile=value};toggle=()=>this.#isMobile.current?this.openMobile=!this.openMobile:this.setOpen(!this.open)}const SYMBOL_KEY="scn-sidebar";function setSidebar(props){return setContext(Symbol.for(SYMBOL_KEY),new SidebarState(props))}function useSidebar(){return getContext(Symbol.for(SYMBOL_KEY))}var root$L=from_html("<div><!></div>");function Sidebar_group_content($$anchor,$$props){ -push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$L();attribute_effect(div,$0=>({"data-slot":"sidebar-group-content","data-sidebar":"group-content",class:$0,...restProps}),[()=>cn$1("w-full text-sm",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root_2$t=from_html("\ -<div><!></div>");function Sidebar_group_label($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","children","child","class"]);const mergedProps=user_derived(()=>({class:cn$1("text-sidebar-foreground/70 ring-sidebar-ring outline-hidden flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", -"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",$$props.class),"data-slot":"sidebar-group-label","data-sidebar":"group-label",...restProps}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$4(mergedProps)})),append($$anchor2,fragment_1)},alternate=$$anchor2=>{var div=root_2$t();attribute_effect(div,()=>({...get$4(mergedProps)})); -var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root$K=from_html("<div><!></div>");function Sidebar_group($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$K(); -attribute_effect(div,$0=>({"data-slot":"sidebar-group","data-sidebar":"group",class:$0,...restProps}),[()=>cn$1("relative flex w-full min-w-0 flex-col p-2",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$J=from_html("<div><!></div>");function Sidebar_header($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots", -"$$events","$$legacy","ref","class","children"]);var div=root$J();attribute_effect(div,$0=>({"data-slot":"sidebar-header","data-sidebar":"header",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-2 p-2",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$I=from_html("<main><!></main>");function Sidebar_inset($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"r\ -ef",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var main2=root$I();attribute_effect(main2,$0=>({"data-slot":"sidebar-inset",class:$0,...restProps}),[()=>cn$1("relative flex w-full flex-1 flex-col","md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",$$props.class)]);var node2=child(main2); -snippet(node2,()=>$$props.children??noop$3),reset(main2),bind_this(main2,$$value=>ref2($$value),()=>ref2()),append($$anchor,main2),pop()}tv({base:"peer/menu-button outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground group-has-data-[sidebar=menu-action]/menu-item:pr-8 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accen\ -t data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm transition-[width,height,padding] focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:font-medium [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",variants:{variant:{default:"hover:\ -bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_var(--sidebar-border)] hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"group-data-[collapsible=icon]:p-0! h-12 text-sm"}},defaultVariants:{variant:"default",size:"default"}});var root$H=from_html("<li><!></li>");function Sidebar_menu_item($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props, -"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var li2=root$H();attribute_effect(li2,$0=>({"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",class:$0,...restProps}),[()=>cn$1("group/menu-item relative",$$props.class)]);var node2=child(li2);snippet(node2,()=>$$props.children??noop$3),reset(li2),bind_this(li2,$$value=>ref2($$value),()=>ref2()),append($$anchor,li2),pop()}var root$G=from_html("<div></div>");function Skeleton($$anchor,$$props){ -push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var div=root$G();attribute_effect(div,$0=>({"data-slot":"skeleton",class:$0,...restProps}),[()=>cn$1("animate-pulse rounded-md bg-accent",$$props.class)]),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$F=from_html("<ul><!></ul>");function Sidebar_menu($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","ref","class","children"]);var ul=root$F();attribute_effect(ul,$0=>({"data-slot":"sidebar-menu","data-sidebar":"menu",class:$0,...restProps}),[()=>cn$1("flex w-full min-w-0 flex-col gap-1",$$props.class)]);var node2=child(ul);snippet(node2,()=>$$props.children??noop$3),reset(ul),bind_this(ul,$$value=>ref2($$value),()=>ref2()),append($$anchor,ul),pop()}var root$E=from_html("<div><!></div>");function Sidebar_provider($$anchor,$$props){push$1($$props,!0);let ref2=prop( -$$props,"ref",15,null),open2=prop($$props,"open",15,!0),onOpenChange=prop($$props,"onOpenChange",3,()=>{}),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","open","onOpenChange","class","style","children"]);const sidebar=setSidebar({open:()=>open2(),setOpen:value=>{open2(value),onOpenChange()(value),document.cookie=`${SIDEBAR_COOKIE_NAME}=${open2()}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`}});var div=root$E();event("keydown",$window,function(...$$args){sidebar.handleShortcutKeydown?. -apply(this,$$args)}),attribute_effect(div,$0=>({"data-slot":"sidebar-wrapper",style:`--sidebar-width: ${SIDEBAR_WIDTH}; --sidebar-width-icon: ${SIDEBAR_WIDTH_ICON}; ${$$props.style??""}`,class:$0,...restProps}),[()=>cn$1("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root_1$s=from_html('<!> \ -<span class="sr-only">Toggle Sidebar</span>',1);function Sidebar_trigger($$anchor,$$props){push$1($$props,!0),prop($$props,"ref",11,null);let restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","onclick"]);const sidebar=useSidebar();{let $0=user_derived(()=>$$props.class),$1=user_derived(()=>sidebar.open?"unset":"2");Button($$anchor,spread_props({"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-lg",get class(){return`rounded-full backdrop-\ -blur-lg ${get$4($0)??""} md:left-${get$4($1)??""} -top-2 -left-2 md:top-0`},type:"button",onclick:e=>{$$props.onclick?.(e),sidebar.toggle()}},()=>restProps,{children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$s(),node2=first_child(fragment_1);Panel_left(node2,{}),next$1(2),append($$anchor2,fragment_1)},$$slots:{default:!0}}))}pop()}var root_1$r=from_html("<div><!></div>"),root_6$g=from_html("<!> <!>",1),root_5$g=from_html('<!> <div class="flex h-full w-full flex-col"><!></div>',1),root_9$b=from_html( -'<div class="group peer hidden text-sidebar-foreground md:block" data-slot="sidebar"><div data-slot="sidebar-gap"></div> <div><div data-sidebar="sidebar" data-slot="sidebar-inner" class="flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm"><!></div></div></div>');function Sidebar($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"re\ -f",15,null),side=prop($$props,"side",3,"left"),variant=prop($$props,"variant",3,"sidebar"),collapsible=prop($$props,"collapsible",3,"offcanvas"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","side","variant","collapsible","class","children"]);const sidebar=useSidebar();var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var div=root_1$r();attribute_effect(div,$0=>({class:$0,...restProps}),[()=>cn$1("flex h-full w-(--sidebar-width) flex-col bg-si\ -debar text-sidebar-foreground",$$props.class)]);var node_1=child(div);snippet(node_1,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor2,div)},alternate_1=$$anchor2=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);{var consequent_1=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child(fragment_2),bind_get=()=>sidebar.openMobile,bind_set=v=>sidebar.setOpenMobile(v);component(node_3,()=>Root$1,($$anchor4,Sheet_Root)=>{Sheet_Root( -$$anchor4,spread_props({get open(){return bind_get()},set open($$value){bind_set($$value)}},()=>restProps,{children:($$anchor5,$$slotProps)=>{var fragment_3=comment$2(),node_4=first_child(fragment_3);component(node_4,()=>Sheet_content,($$anchor6,Sheet_Content)=>{Sheet_Content($$anchor6,{"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",class:"z-99999 w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:z-99 [&>button]:hidden",get style(){return`--sidebar-width: ${SIDEBAR_WIDTH_MOBILE}\ -;`},get side(){return side()},children:($$anchor7,$$slotProps2)=>{var fragment_4=root_5$g(),node_5=first_child(fragment_4);component(node_5,()=>Sheet_header,($$anchor8,Sheet_Header)=>{Sheet_Header($$anchor8,{class:"sr-only",children:($$anchor9,$$slotProps3)=>{var fragment_5=root_6$g(),node_6=first_child(fragment_5);component(node_6,()=>Sheet_title,($$anchor10,Sheet_Title)=>{Sheet_Title($$anchor10,{children:($$anchor11,$$slotProps4)=>{next$1();var text2=text$8("Sidebar");append($$anchor11,text2)}, -$$slots:{default:!0}})});var node_7=sibling(node_6,2);component(node_7,()=>Sheet_description,($$anchor10,Sheet_Description)=>{Sheet_Description($$anchor10,{children:($$anchor11,$$slotProps4)=>{next$1();var text_1=text$8("Displays the mobile sidebar.");append($$anchor11,text_1)},$$slots:{default:!0}})}),append($$anchor9,fragment_5)},$$slots:{default:!0}})});var div_1=sibling(node_5,2),node_8=child(div_1);snippet(node_8,()=>$$props.children??noop$3),reset(div_1),append($$anchor7,fragment_4)},$$slots:{ -default:!0}})}),append($$anchor5,fragment_3)},$$slots:{default:!0}}))}),append($$anchor3,fragment_2)},alternate=$$anchor3=>{var div_2=root_9$b(),div_3=child(div_2),div_4=sibling(div_3,2);attribute_effect(div_4,$0=>({"data-slot":"sidebar-container",class:$0,...restProps}),[()=>cn$1("fixed inset-y-0 z-999 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:z-0 md:flex",side()==="left"?"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*\ --1)]":"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",variant()==="floating"||variant()==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)",$$props.class)]);var div_5=child(div_4),node_9=child(div_5);snippet(node_9,()=>$$props.children??noop$3),reset(div_5),reset(div_4),reset(div_2),bind_this(div_2,$$value=>ref2($$value),()=>ref2()),template_effect($0=>{set_attribute( -div_2,"data-state",sidebar.state),set_attribute(div_2,"data-collapsible",sidebar.state==="collapsed"?collapsible():""),set_attribute(div_2,"data-variant",variant()),set_attribute(div_2,"data-side",side()),set_class(div_3,1,$0)},[()=>clsx(cn$1("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",variant()==="floating"||variant()==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--\ -sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)"))]),append($$anchor3,div_2)};if_block(node_2,$$render=>{sidebar.isMobile?$$render(consequent_1):$$render(alternate,!1)},!0)}append($$anchor2,fragment_1)};if_block(node2,$$render=>{collapsible()==="none"?$$render(consequent):$$render(alternate_1,!1)})}append($$anchor,fragment),pop()}var root$D=from_html('<header><div class="pointer-events-auto flex items-center space-x-2"><!></div></header>');function ChatScreenHeader($$anchor,$$props){ -push$1($$props,!1);const sidebar=useSidebar(),chatSettingsDialog=getChatSettingsDialogContext();init();var header=root$D(),div=child(header),node2=child(div);Button(node2,{variant:"ghost",size:"icon-lg",onclick:()=>chatSettingsDialog.open(),class:"rounded-full backdrop-blur-lg",children:($$anchor2,$$slotProps)=>{Settings$1($$anchor2,{class:"h-4 w-4"})},$$slots:{default:!0}}),reset(div),reset(header),template_effect(()=>set_class(header,1,`pointer-events-none fixed top-0 right-0 left-0 z-50 flex \ -items-center justify-end p-2 duration-200 ease-linear md:p-4 ${sidebar.open?"md:left-[var(--sidebar-width)]":""}`)),append($$anchor,header),pop()}var root_1$q=from_html('<span class="chat-processing-info-detail pointer-events-auto backdrop-blur-sm svelte-1ktvj8d"> </span>'),root$C=from_html('<div><div class="chat-processing-info-content svelte-1ktvj8d"></div></div>');function ChatScreenProcessingInfo($$anchor,$$props){push$1($$props,!0);const processingState=useProcessingState();let isCurrentConversationLoading=user_derived( -isLoading),isStreaming=user_derived(isChatStreaming),hasProcessingData=user_derived(()=>processingState.processingState!==null),processingDetails=user_derived(()=>processingState.getTechnicalDetails()),showProcessingInfo=user_derived(()=>get$4(isCurrentConversationLoading)||get$4(isStreaming)||config$1().keepStatsVisible||get$4(hasProcessingData));user_effect(()=>{const conversation=activeConversation();untrack$1(()=>chatStore.setActiveProcessingConversation(conversation?.id??null))}),user_effect( -()=>{const keepStatsVisible=config$1().keepStatsVisible;if((keepStatsVisible||get$4(isCurrentConversationLoading)||get$4(isStreaming))&&processingState.startMonitoring(),!get$4(isCurrentConversationLoading)&&!get$4(isStreaming)&&!keepStatsVisible){const timeout=setTimeout(()=>{!config$1().keepStatsVisible&&!isChatStreaming()&&processingState.stopMonitoring()},PROCESSING_INFO_TIMEOUT);return()=>clearTimeout(timeout)}}),user_effect(()=>{const conversation=activeConversation(),messages=activeMessages(); -if(config$1().keepStatsVisible&&conversation){if(messages.length===0){untrack$1(()=>chatStore.clearProcessingState(conversation.id));return}!get$4(isCurrentConversationLoading)&&!get$4(isStreaming)&&untrack$1(()=>chatStore.restoreProcessingStateFromMessages(messages,conversation.id))}});var div=root$C();let classes;var div_1=child(div);each(div_1,20,()=>get$4(processingDetails),detail=>detail,($$anchor2,detail)=>{var span=root_1$q(),text2=child(span,!0);reset(span),template_effect(()=>set_text(text2, -detail)),append($$anchor2,span)}),reset(div_1),reset(div),template_effect(()=>classes=set_class(div,1,"chat-processing-info-container pointer-events-none svelte-1ktvj8d",null,classes,{visible:get$4(showProcessingInfo)})),append($$anchor,div),pop()}var root_1$p=from_html('<button><!> <span class="ml-2"> </span></button>'),root_2$s=from_html("<button><!> <span> </span></button>"),root_6$f=from_html('<div class="space-y-6"><!> <div class="border-t border-border/30 pt-6"><!></div></div>'),root_7$f=from_html( -'<div class="space-y-6"><!></div>'),root_3$n=from_html(`<div class="space-y-6 p-4 md:p-6"><div class="grid"><div class="mb-6 flex hidden items-center gap-2 border-b border-border/30 pb-6 md:flex"><!> <h3 class="text-lg font-semibold"> </h3></div> <!></div> <div class="mt-8 border-t pt-6"><p class="text-xs text-muted-foreground">Settings are saved in browser's localStorage</p></div></div>`),root$B=from_html('<div class="flex h-full flex-col overflow-hidden md:flex-row"><div class="hidden w-64 bor\ -der-r border-border/30 p-6 md:block"><nav class="space-y-1 py-2"></nav></div> <div class="flex flex-col pt-6 md:hidden"><div class="border-b border-border/30 pt-4 md:py-4"><div class="relative flex items-center" style="scroll-padding: 1rem;"><button aria-label="Scroll left"><!></button> <div class="scrollbar-hide overflow-x-auto py-2"><div class="flex min-w-max gap-2"></div></div> <button aria-label="Scroll right"><!></button></div></div></div> <!></div> <!>',1);function ChatSettings($$anchor,$$props){ -push$1($$props,!0);const settingSections=[{title:SETTINGS_SECTION_TITLES.GENERAL,icon:Settings$1,fields:[{key:SETTINGS_KEYS.THEME,label:"Theme",type:SettingsFieldType.SELECT,options:SETTINGS_COLOR_MODES_CONFIG},{key:SETTINGS_KEYS.API_KEY,label:"API Key",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.SYSTEM_MESSAGE,label:"System Message",type:SettingsFieldType.TEXTAREA},{key:SETTINGS_KEYS.PASTE_LONG_TEXT_TO_FILE_LEN,label:"Paste long text to file length",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS. -SEND_ON_ENTER,label:"Send message on Enter",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.COPY_TEXT_ATTACHMENTS_AS_PLAIN_TEXT,label:"Copy text attachments as plain text",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.ENABLE_CONTINUE_GENERATION,label:'Enable "Continue" button',type:SettingsFieldType.CHECKBOX,isExperimental:!0},{key:SETTINGS_KEYS.PDF_AS_IMAGE,label:"Parse PDF as image",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.ASK_FOR_TITLE_CONFIRMATION,label:"Ask for confirma\ -tion before changing conversation title",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.TITLE_GENERATION_USE_FIRST_LINE,label:"Use first non-empty line for conversation title",type:SettingsFieldType.CHECKBOX}]},{title:SETTINGS_SECTION_TITLES.DISPLAY,icon:Monitor,fields:[{key:SETTINGS_KEYS.SHOW_MESSAGE_STATS,label:"Show message generation statistics",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.SHOW_THOUGHT_IN_PROGRESS,label:"Show thought in progress",type:SettingsFieldType.CHECKBOX}, -{key:SETTINGS_KEYS.KEEP_STATS_VISIBLE,label:"Keep stats visible after generation",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.AUTO_MIC_ON_EMPTY,label:"Show microphone on empty input",type:SettingsFieldType.CHECKBOX,isExperimental:!0},{key:SETTINGS_KEYS.RENDER_USER_CONTENT_AS_MARKDOWN,label:"Render user content as Markdown",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.FULL_HEIGHT_CODE_BLOCKS,label:"Use full height code blocks",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.DISABLE_AUTO_SCROLL, -label:"Disable automatic scroll",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.ALWAYS_SHOW_SIDEBAR_ON_DESKTOP,label:"Always show sidebar on desktop",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.AUTO_SHOW_SIDEBAR_ON_NEW_CHAT,label:"Auto-show sidebar on new chat",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.SHOW_RAW_MODEL_NAMES,label:"Show raw model names",type:SettingsFieldType.CHECKBOX}]},{title:SETTINGS_SECTION_TITLES.SAMPLING,icon:Funnel,fields:[{key:SETTINGS_KEYS.TEMPERATURE, -label:"Temperature",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DYNATEMP_RANGE,label:"Dynamic temperature range",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DYNATEMP_EXPONENT,label:"Dynamic temperature exponent",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.TOP_K,label:"Top K",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.TOP_P,label:"Top P",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.MIN_P,label:"Min P",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.XTC_PROBABILITY,label:"\ -XTC probability",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.XTC_THRESHOLD,label:"XTC threshold",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.TYP_P,label:"Typical P",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.MAX_TOKENS,label:"Max tokens",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.SAMPLERS,label:"Samplers",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.BACKEND_SAMPLING,label:"Backend sampling",type:SettingsFieldType.CHECKBOX}]},{title:SETTINGS_SECTION_TITLES.PENALTIES,icon:Triangle_alert, -fields:[{key:SETTINGS_KEYS.REPEAT_LAST_N,label:"Repeat last N",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.REPEAT_PENALTY,label:"Repeat penalty",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.PRESENCE_PENALTY,label:"Presence penalty",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.FREQUENCY_PENALTY,label:"Frequency penalty",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DRY_MULTIPLIER,label:"DRY multiplier",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DRY_BASE,label:"DRY base",type:SettingsFieldType. -INPUT},{key:SETTINGS_KEYS.DRY_ALLOWED_LENGTH,label:"DRY allowed length",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.DRY_PENALTY_LAST_N,label:"DRY penalty last N",type:SettingsFieldType.INPUT}]},{title:SETTINGS_SECTION_TITLES.IMPORT_EXPORT,icon:Database,fields:[]},{title:SETTINGS_SECTION_TITLES.MCP,icon:McpLogo,fields:[{key:SETTINGS_KEYS.AGENTIC_MAX_TURNS,label:"Agentic loop max turns",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.ALWAYS_SHOW_AGENTIC_TURNS,label:"Always show agentic turns\ - in conversation",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.AGENTIC_MAX_TOOL_PREVIEW_LINES,label:"Max lines per tool preview",type:SettingsFieldType.INPUT},{key:SETTINGS_KEYS.SHOW_TOOL_CALL_IN_PROGRESS,label:"Show tool call in progress",type:SettingsFieldType.CHECKBOX}]},{title:SETTINGS_SECTION_TITLES.DEVELOPER,icon:Code,fields:[{key:SETTINGS_KEYS.PRE_ENCODE_CONVERSATION,label:"Pre-fill KV cache after response",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.DISABLE_REASONING_PARSING, -label:"Disable server-side thinking extraction",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.EXCLUDE_REASONING_FROM_CONTEXT,label:"Strip thinking from message history",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.SHOW_RAW_OUTPUT_SWITCH,label:"Enable raw output toggle",type:SettingsFieldType.CHECKBOX},{key:SETTINGS_KEYS.CUSTOM,label:"Custom JSON",type:SettingsFieldType.TEXTAREA}]}];let activeSection=user_derived(()=>$$props.initialSection??SETTINGS_SECTION_TITLES.GENERAL),currentSection=user_derived( -()=>settingSections.find(section=>section.title===get$4(activeSection))||settingSections[0]),localConfig=state$1(proxy({...config$1()})),canScrollLeft=state$1(!1),canScrollRight=state$1(!1),scrollContainer=state$1(void 0);user_effect(()=>{$$props.initialSection&&set$1(activeSection,$$props.initialSection)});function handleThemeChange(newTheme){get$4(localConfig).theme=newTheme,setMode(newTheme)}function handleConfigChange(key2,value){get$4(localConfig)[key2]=value}function handleReset(){set$1(localConfig, -{...config$1()},!0),setMode(get$4(localConfig).theme)}function handleSave(){if(get$4(localConfig).custom&&typeof get$4(localConfig).custom=="string"&&get$4(localConfig).custom.trim())try{JSON.parse(get$4(localConfig).custom)}catch(error2){alert("Invalid JSON in custom parameters. Please check the format and try again."),console.error(error2);return}const processedConfig={...get$4(localConfig)};for(const field of NUMERIC_FIELDS)if(processedConfig[field]!==void 0&&processedConfig[field]!==""){const numValue=Number( -processedConfig[field]);if(!isNaN(numValue))POSITIVE_INTEGER_FIELDS.includes(field)?processedConfig[field]=Math.max(1,Math.round(numValue)):processedConfig[field]=numValue;else{alert(`Invalid numeric value for ${field}. Please enter a valid number.`);return}}settingsStore.updateMultipleConfig(processedConfig),$$props.onSave?.()}function scrollToCenter(element2){if(!get$4(scrollContainer))return;const containerRect=get$4(scrollContainer).getBoundingClientRect(),elementRect=element2.getBoundingClientRect(), -elementCenter=elementRect.left+elementRect.width/2,containerCenter=containerRect.left+containerRect.width/2,scrollOffset=elementCenter-containerCenter;get$4(scrollContainer).scrollBy({left:scrollOffset,behavior:"smooth"})}function scrollLeft(){get$4(scrollContainer)&&get$4(scrollContainer).scrollBy({left:-250,behavior:"smooth"})}function scrollRight(){get$4(scrollContainer)&&get$4(scrollContainer).scrollBy({left:250,behavior:"smooth"})}function updateScrollButtons(){if(!get$4(scrollContainer))return; -const{scrollLeft:scrollLeft2,scrollWidth,clientWidth}=get$4(scrollContainer);set$1(canScrollLeft,scrollLeft2>0),set$1(canScrollRight,scrollLeft2<scrollWidth-clientWidth-1)}function reset$1(){set$1(localConfig,{...config$1()},!0),setTimeout(updateScrollButtons,100)}user_effect(()=>{get$4(scrollContainer)&&updateScrollButtons()});var $$exports={reset:reset$1},fragment=root$B(),div=first_child(fragment),div_1=child(div),nav=child(div_1);each(nav,21,()=>settingSections,section=>section.title,($$anchor2,section)=>{ -var button=root_1$p();button.__click=()=>set$1(activeSection,get$4(section).title);var node2=child(button);component(node2,()=>get$4(section).icon,($$anchor3,section_icon)=>{section_icon($$anchor3,{class:"h-4 w-4"})});var span=sibling(node2,2),text2=child(span,!0);reset(span),reset(button),template_effect(()=>{set_class(button,1,`flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-left text-sm transition-colors hover:bg-accent ${get$4(activeSection)===get$4(section).title?"bg\ --accent text-accent-foreground":"text-muted-foreground"}`),set_text(text2,get$4(section).title)}),append($$anchor2,button)}),reset(nav),reset(div_1);var div_2=sibling(div_1,2),div_3=child(div_2),div_4=child(div_3),button_1=child(div_4);button_1.__click=scrollLeft;var node_1=child(button_1);Chevron_left(node_1,{class:"h-4 w-4"}),reset(button_1);var div_5=sibling(button_1,2),div_6=child(div_5);each(div_6,21,()=>settingSections,section=>section.title,($$anchor2,section)=>{var button_2=root_2$s();button_2. -__click=e=>{set$1(activeSection,get$4(section).title),scrollToCenter(e.currentTarget)};var node_2=child(button_2);component(node_2,()=>get$4(section).icon,($$anchor3,section_icon_1)=>{section_icon_1($$anchor3,{class:"h-4 w-4 flex-shrink-0"})});var span_1=sibling(node_2,2),text_1=child(span_1,!0);reset(span_1),reset(button_2),template_effect(()=>{set_class(button_2,1,`flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm whitespace-nowrap transition-colors first:ml-4 last:mr-4 hover\ -:bg-accent ${get$4(activeSection)===get$4(section).title?"bg-accent text-accent-foreground":"text-muted-foreground"}`),set_text(text_1,get$4(section).title)}),append($$anchor2,button_2)}),reset(div_6),reset(div_5),bind_this(div_5,$$value=>set$1(scrollContainer,$$value),()=>get$4(scrollContainer));var button_3=sibling(div_5,2);button_3.__click=scrollRight;var node_3=child(button_3);Chevron_right(node_3,{class:"h-4 w-4"}),reset(button_3),reset(div_4),reset(div_3),reset(div_2);var node_4=sibling(div_2, -2);Scroll_area(node_4,{class:"max-h-[calc(100dvh-13.5rem)] flex-1 md:max-h-[calc(100vh-13.5rem)]",children:($$anchor2,$$slotProps)=>{var div_7=root_3$n(),div_8=child(div_7),div_9=child(div_8),node_5=child(div_9);component(node_5,()=>get$4(currentSection).icon,($$anchor3,currentSection_icon)=>{currentSection_icon($$anchor3,{class:"h-5 w-5"})});var h3=sibling(node_5,2),text_2=child(h3,!0);reset(h3),reset(div_9);var node_6=sibling(div_9,2);{var consequent=$$anchor3=>{ChatSettingsImportExportTab($$anchor3, -{})},alternate_1=$$anchor3=>{var fragment_2=comment$2(),node_7=first_child(fragment_2);{var consequent_1=$$anchor4=>{var div_10=root_6$f(),node_8=child(div_10);ChatSettingsFields(node_8,{get fields(){return get$4(currentSection).fields},get localConfig(){return get$4(localConfig)},onConfigChange:handleConfigChange,onThemeChange:handleThemeChange});var div_11=sibling(node_8,2),node_9=child(div_11);McpServersSettings(node_9,{}),reset(div_11),reset(div_10),append($$anchor4,div_10)},alternate=$$anchor4=>{ -var div_12=root_7$f(),node_10=child(div_12);ChatSettingsFields(node_10,{get fields(){return get$4(currentSection).fields},get localConfig(){return get$4(localConfig)},onConfigChange:handleConfigChange,onThemeChange:handleThemeChange}),reset(div_12),append($$anchor4,div_12)};if_block(node_7,$$render=>{get$4(currentSection).title===SETTINGS_SECTION_TITLES.MCP?$$render(consequent_1):$$render(alternate,!1)},!0)}append($$anchor3,fragment_2)};if_block(node_6,$$render=>{get$4(currentSection).title===SETTINGS_SECTION_TITLES. -IMPORT_EXPORT?$$render(consequent):$$render(alternate_1,!1)})}reset(div_8),next$1(2),reset(div_7),template_effect(()=>set_text(text_2,get$4(currentSection).title)),append($$anchor2,div_7)},$$slots:{default:!0}}),reset(div);var node_11=sibling(div,2);return ChatSettingsFooter(node_11,{onReset:handleReset,onSave:handleSave}),template_effect(()=>{set_class(button_1,1,`absolute left-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted shadow-md backdrop-blur-sm transition-opacity ho\ -ver:bg-accent ${get$4(canScrollLeft)?"opacity-100":"pointer-events-none opacity-0"}`),set_class(button_3,1,`absolute right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted shadow-md backdrop-blur-sm transition-opacity hover:bg-accent ${get$4(canScrollRight)?"opacity-100":"pointer-events-none opacity-0"}`)}),event("scroll",div_5,updateScrollButtons),append($$anchor,fragment),pop($$exports)}delegate(["click"]);var root_1$o=from_html("<!> Reset to default",1),root_5$f=from_html( -"<!> <!>",1),root_8$b=from_html("<!> <!>",1),root_4$b=from_html("<!> <!>",1),root$A=from_html('<div class="flex justify-between border-t border-border/30 p-6"><div class="flex gap-2"><!></div> <!></div> <!>',1);function ChatSettingsFooter($$anchor,$$props){push$1($$props,!0);let showResetDialog=state$1(!1);function handleResetClick(){set$1(showResetDialog,!0)}function handleConfirmReset(){settingsStore.forceSyncWithServerDefaults(),$$props.onReset?.(),set$1(showResetDialog,!1)}function handleSave(){ -$$props.onSave?.()}var fragment=root$A(),div=first_child(fragment),div_1=child(div),node2=child(div_1);Button(node2,{variant:"outline",onclick:handleResetClick,children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$o(),node_1=first_child(fragment_1);Rotate_ccw(node_1,{class:"h-3 w-3"}),next$1(),append($$anchor2,fragment_1)},$$slots:{default:!0}}),reset(div_1);var node_2=sibling(div_1,2);Button(node_2,{onclick:handleSave,children:($$anchor2,$$slotProps)=>{next$1();var text2=text$8("Save setting\ -s");append($$anchor2,text2)},$$slots:{default:!0}}),reset(div);var node_3=sibling(div,2);component(node_3,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return get$4(showResetDialog)},set open($$value){set$1(showResetDialog,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment_2=comment$2(),node_4=first_child(fragment_2);component(node_4,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{ -var fragment_3=root_4$b(),node_5=first_child(fragment_3);component(node_5,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_4=root_5$f(),node_6=first_child(fragment_4);component(node_6,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8("Reset Settings to Default");append($$anchor9,text_1)},$$slots:{default:!0}})});var node_7=sibling( -node_6,2);component(node_7,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_2=text$8(`Are you sure you want to reset all settings to their default values? This will reset all +`)}),activeStatsView=state$1(proxy(ChatMessageStatsView.GENERATION)),statsContainerEl=state$1(void 0);function getScrollParent(el){let parent=el.parentElement;for(;parent;){const style2=getComputedStyle(parent);if(/(auto|scroll)/.test(style2.overflowY))return parent;parent=parent.parentElement}return null}async function handleStatsViewChange(view){const el=get$3(statsContainerEl);if(!el){set$1(activeStatsView,view,!0);return}const scrollParent=getScrollParent(el);if(!scrollParent){set$1(activeStatsView, +view,!0);return}const yBefore=el.getBoundingClientRect().top;set$1(activeStatsView,view,!0),await tick();const delta=el.getBoundingClientRect().top-yBefore;delta!==0&&(scrollParent.scrollTop+=delta),requestAnimationFrame(()=>{const drift=el.getBoundingClientRect().top-yBefore;Math.abs(drift)>1&&(scrollParent.scrollTop+=drift)})}let highlightAgenticTurns=user_derived(()=>get$3(isAgentic)&&(get$3(currentConfig).alwaysShowAgenticTurns||get$3(activeStatsView)===ChatMessageStatsView.SUMMARY)),displayedModel=user_derived( +()=>$$props.message.model??null),isCurrentlyLoading=user_derived(isLoading),isStreaming=user_derived(isChatStreaming),hasNoContent=user_derived(()=>!$$props.message?.content?.trim()),isActivelyProcessing=user_derived(()=>get$3(isCurrentlyLoading)||get$3(isStreaming)),showProcessingInfoTop=user_derived(()=>$$props.message?.role===MessageRole.ASSISTANT&&get$3(isActivelyProcessing)&&get$3(hasNoContent)&&!get$3(isAgentic)&&isLastAssistantMessage()),showProcessingInfoBottom=user_derived(()=>$$props.message?. +role===MessageRole.ASSISTANT&&get$3(isActivelyProcessing)&&(!get$3(hasNoContent)||get$3(isAgentic))&&isLastAssistantMessage());function handleCopyModel(){copyToClipboard(get$3(displayedModel)??"")}user_effect(()=>{editCtx.isEditing&&textareaElement()&&autoResizeTextarea(textareaElement())}),user_effect(()=>{(get$3(showProcessingInfoTop)||get$3(showProcessingInfoBottom))&&processingState.startMonitoring()});var div=root$C(),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$h(),div_2=child( +div_1),span=child(div_2),text2=child(span,!0);reset(span),reset(div_2),reset(div_1),template_effect($0=>set_text(text2,$0),[()=>processingState.getPromptProgressText()??processingState.getProcessingMessage()??"Processing..."]),transition(1,div_1,()=>fade),append($$anchor2,div_1)};if_block(node2,$$render=>{get$3(showProcessingInfoTop)&&$$render(consequent)})}var node_1=sibling(node2,2);{var consequent_1=$$anchor2=>{var div_3=root_2$m(),textarea=child(div_3);remove_textarea_child(textarea),bind_this( +textarea,$$value=>textareaElement($$value),()=>textareaElement());var div_4=sibling(textarea,2),div_5=child(div_4),node_2=child(div_5);Checkbox(node_2,{id:"branch-after-edit",onCheckedChange:checked=>set$1(shouldBranchAfterEdit,checked===!0),get checked(){return get$3(shouldBranchAfterEdit)},set checked($$value){set$1(shouldBranchAfterEdit,$$value,!0)}});var node_3=sibling(node_2,2);Label(node_3,{for:"branch-after-edit",class:"cursor-pointer text-sm text-muted-foreground",children:($$anchor3,$$slotProps)=>{ +next$1();var text_1=text$8("Branch conversation after edit");append($$anchor3,text_1)},$$slots:{default:!0}}),reset(div_5);var div_6=sibling(div_5,2),node_4=child(div_6);Button(node_4,{class:"h-8 px-3",get onclick(){return editCtx.cancel},size:"sm",variant:"outline",children:($$anchor3,$$slotProps)=>{var fragment=root_4$a(),node_5=first_child(fragment);X(node_5,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor3,fragment)},$$slots:{default:!0}});var node_6=sibling(node_4,2);{let $0=user_derived(()=>!editCtx. +editedContent?.trim());Button(node_6,{class:"h-8 px-3",get onclick(){return editCtx.save},get disabled(){return get$3($0)},size:"sm",children:($$anchor3,$$slotProps)=>{var fragment_1=root_5$b(),node_7=first_child(fragment_1);Check(node_7,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor3,fragment_1)},$$slots:{default:!0}})}reset(div_6),reset(div_4),reset(div_3),template_effect(()=>{set_value(textarea,editCtx.editedContent),set_class(textarea,1,`min-h-[50vh] w-full resize-y rounded-2xl px-3 py-2 t\ +ext-sm ${INPUT_CLASSES??""}`,"svelte-14103tf")}),delegated("keydown",textarea,handleEditKeydown),delegated("input",textarea,e=>{autoResizeTextarea(e.currentTarget),editCtx.setContent(e.currentTarget.value)}),append($$anchor2,div_3)},consequent_3=$$anchor2=>{var fragment_2=comment$2(),node_8=first_child(fragment_2);{var consequent_2=$$anchor3=>{var pre=root_7$9(),text_2=child(pre,!0);reset(pre),template_effect(()=>set_text(text_2,get$3(rawOutputContent)||"")),append($$anchor3,pre)},alternate=$$anchor3=>{ +{let $0=user_derived(isChatStreaming);ChatMessageAgenticContent($$anchor3,{get message(){return $$props.message},get toolMessages(){return toolMessages()},get isStreaming(){return get$3($0)},get isLastAssistantMessage(){return isLastAssistantMessage()},get highlightTurns(){return get$3(highlightAgenticTurns)}})}};if_block(node_8,$$render=>{get$3(showRawOutput)?$$render(consequent_2):$$render(alternate,-1)})}append($$anchor2,fragment_2)},alternate_1=$$anchor2=>{var div_7=root_9$7(),text_3=child(div_7, +!0);reset(div_7),template_effect(()=>set_text(text_3,$$props.messageContent)),append($$anchor2,div_7)};if_block(node_1,$$render=>{editCtx.isEditing?$$render(consequent_1):$$props.message.role===MessageRole.ASSISTANT?$$render(consequent_3,1):$$render(alternate_1,-1)})}var node_9=sibling(node_1,2);{var consequent_4=$$anchor2=>{var div_8=root_10$4(),div_9=child(div_8),span_1=child(div_9),text_4=child(span_1,!0);reset(span_1),reset(div_9),reset(div_8),template_effect($0=>set_text(text_4,$0),[()=>processingState. +getPromptProgressText()??processingState.getProcessingMessage()??"Processing..."]),transition(1,div_8,()=>fade),append($$anchor2,div_8)};if_block(node_9,$$render=>{get$3(showProcessingInfoBottom)&&$$render(consequent_4)})}var div_10=sibling(node_9,2),node_10=child(div_10);{var consequent_9=$$anchor2=>{var div_11=root_11$4(),node_11=child(div_11);{var consequent_5=$$anchor3=>{{let $0=user_derived(isLoading);ModelsSelectorDropdown($$anchor3,{get currentModel(){return get$3(displayedModel)},get disabled(){ +return get$3($0)},onModelChange:async(modelId,modelName)=>(modelsStore.getModelStatus(modelId)!==ServerModelStatus.LOADED&&await modelsStore.loadModel(modelId),$$props.onRegenerate(modelName),!0)})}},alternate_2=$$anchor3=>{{let $0=user_derived(()=>get$3(displayedModel)||void 0);ModelBadge($$anchor3,{get model(){return get$3($0)},onclick:handleCopyModel})}};if_block(node_11,$$render=>{get$3(isRouter)?$$render(consequent_5):$$render(alternate_2,-1)})}var node_12=sibling(node_11,2);{var consequent_6=$$anchor3=>{ +const agentic=user_derived(()=>$$props.message.timings.agentic);{let $0=user_derived(()=>get$3(agentic)?get$3(agentic).llm.prompt_n:$$props.message.timings.prompt_n),$1=user_derived(()=>get$3(agentic)?get$3(agentic).llm.prompt_ms:$$props.message.timings.prompt_ms),$2=user_derived(()=>get$3(agentic)?get$3(agentic).llm.predicted_n:$$props.message.timings.predicted_n),$3=user_derived(()=>get$3(agentic)?get$3(agentic).llm.predicted_ms:$$props.message.timings.predicted_ms);ChatMessageStatistics($$anchor3, +{get promptTokens(){return get$3($0)},get promptMs(){return get$3($1)},get predictedTokens(){return get$3($2)},get predictedMs(){return get$3($3)},get agenticTimings(){return get$3(agentic)},onActiveViewChange:handleStatsViewChange})}},consequent_8=$$anchor3=>{const liveStats=user_derived(()=>processingState.getLiveProcessingStats()),genStats=user_derived(()=>processingState.getLiveGenerationStats()),promptProgress=user_derived(()=>processingState.processingState?.promptProgress),isStillProcessingPrompt=user_derived( +()=>get$3(promptProgress)&&get$3(promptProgress).processed<get$3(promptProgress).total);var fragment_7=comment$2(),node_13=first_child(fragment_7);{var consequent_7=$$anchor4=>{{let $0=user_derived(()=>!!get$3(isStillProcessingPrompt)),$1=user_derived(()=>get$3(liveStats)?.tokensProcessed),$2=user_derived(()=>get$3(liveStats)?.timeMs),$3=user_derived(()=>get$3(genStats)?.tokensGenerated),$4=user_derived(()=>get$3(genStats)?.timeMs);ChatMessageStatistics($$anchor4,{isLive:!0,get isProcessingPrompt(){ +return get$3($0)},get promptTokens(){return get$3($1)},get promptMs(){return get$3($2)},get predictedTokens(){return get$3($3)},get predictedMs(){return get$3($4)}})}};if_block(node_13,$$render=>{(get$3(liveStats)||get$3(genStats))&&$$render(consequent_7)})}append($$anchor3,fragment_7)},d2=user_derived(()=>isLoading()&&get$3(currentConfig).showMessageStats);if_block(node_12,$$render=>{get$3(currentConfig).showMessageStats&&$$props.message.timings&&$$props.message.timings.predicted_n&&$$props.message. +timings.predicted_ms?$$render(consequent_6):get$3(d2)&&$$render(consequent_8,1)})}reset(div_11),bind_this(div_11,$$value=>set$1(statsContainerEl,$$value),()=>get$3(statsContainerEl)),append($$anchor2,div_11)};if_block(node_10,$$render=>{get$3(displayedModel)&&$$render(consequent_9)})}reset(div_10);var node_14=sibling(div_10,2);{var consequent_10=$$anchor2=>{{let $0=user_derived(()=>get$3(currentConfig).enableContinueGeneration&&!get$3(hasReasoning)?$$props.onContinue:void 0);ChatMessageActions($$anchor2, +{get role(){return MessageRole.ASSISTANT},justify:"start",actionsPosition:"left",get siblingInfo(){return siblingInfo()},get showDeleteDialog(){return $$props.showDeleteDialog},get deletionInfo(){return $$props.deletionInfo},get onCopy(){return $$props.onCopy},get onEdit(){return $$props.onEdit},get onRegenerate(){return $$props.onRegenerate},get onContinue(){return get$3($0)},get onForkConversation(){return $$props.onForkConversation},get onDelete(){return $$props.onDelete},get onConfirmDelete(){ +return $$props.onConfirmDelete},get onNavigateToSibling(){return $$props.onNavigateToSibling},get onShowDeleteDialogChange(){return $$props.onShowDeleteDialogChange},get showRawOutputSwitch(){return get$3(currentConfig).showRawOutputSwitch},get rawOutputEnabled(){return get$3(showRawOutput)},onRawOutputToggle:enabled=>set$1(showRawOutput,enabled,!0)})}};if_block(node_14,$$render=>{$$props.message.timestamp&&!editCtx.isEditing&&$$render(consequent_10)})}reset(div),template_effect(()=>set_class(div, +1,`text-md group w-full leading-7.5 ${className()??""}`,"svelte-14103tf")),append($$anchor,div),pop()}delegate(["keydown","input"]);class AutoScrollController{#_autoScrollEnabled=state$1(!0);get _autoScrollEnabled(){return get$3(this.#_autoScrollEnabled)}set _autoScrollEnabled(value){set$1(this.#_autoScrollEnabled,value,!0)}#_userScrolledUp=state$1(!1);get _userScrolledUp(){return get$3(this.#_userScrolledUp)}set _userScrolledUp(value){set$1(this.#_userScrolledUp,value,!0)}#_lastScrollTop=state$1( +0);get _lastScrollTop(){return get$3(this.#_lastScrollTop)}set _lastScrollTop(value){set$1(this.#_lastScrollTop,value,!0)}_scrollInterval;_scrollTimeout;_container;_disabled;_isColumnReverse;_mutationObserver=null;_rafPending=!1;_observerEnabled=!1;constructor(options={}){this._disabled=options.disabled??!1,this._isColumnReverse=options.isColumnReverse??!1}get autoScrollEnabled(){return this._autoScrollEnabled}get userScrolledUp(){return this._userScrolledUp}setContainer(container2){this._doStopObserving(), +this._container=container2,this._observerEnabled&&container2&&!this._disabled&&this._doStartObserving()}setDisabled(disabled){this._disabled=disabled,disabled?(this._autoScrollEnabled=!1,this.stopInterval(),this._doStopObserving()):this._observerEnabled&&this._container&&!this._mutationObserver&&this._doStartObserving()}handleScroll(){if(this._disabled||!this._container)return;const{scrollTop,scrollHeight,clientHeight}=this._container;let distanceFromBottom,isScrollingUp;this._isColumnReverse?(distanceFromBottom= +Math.abs(scrollTop),isScrollingUp=scrollTop<this._lastScrollTop):(distanceFromBottom=scrollHeight-clientHeight-scrollTop,isScrollingUp=scrollTop<this._lastScrollTop);const isAtBottom=distanceFromBottom<AUTO_SCROLL_AT_BOTTOM_THRESHOLD;isScrollingUp&&!isAtBottom?(this._userScrolledUp=!0,this._autoScrollEnabled=!1):isAtBottom&&this._userScrolledUp&&(this._userScrolledUp=!1,this._autoScrollEnabled=!0),this._scrollTimeout&&clearTimeout(this._scrollTimeout),this._scrollTimeout=setTimeout(()=>{isAtBottom&& +(this._userScrolledUp=!1,this._autoScrollEnabled=!0)},AUTO_SCROLL_INTERVAL),this._lastScrollTop=scrollTop}scrollToBottom(behavior="smooth"){this._disabled||!this._container||(this._isColumnReverse?this._container.scrollTo({top:0,behavior}):this._container.scrollTo({top:this._container.scrollHeight,behavior}))}enable(){this._disabled||(this._userScrolledUp=!1,this._autoScrollEnabled=!0)}startInterval(){this._disabled||this._scrollInterval||(this._scrollInterval=setInterval(()=>{this.scrollToBottom()}, +AUTO_SCROLL_INTERVAL))}stopInterval(){this._scrollInterval&&(clearInterval(this._scrollInterval),this._scrollInterval=void 0)}updateInterval(isStreaming){if(this._disabled){this.stopInterval();return}isStreaming&&this._autoScrollEnabled?this._scrollInterval||this.startInterval():this.stopInterval()}destroy(){this.stopInterval(),this._doStopObserving(),this._scrollTimeout&&(clearTimeout(this._scrollTimeout),this._scrollTimeout=void 0)}startObserving(){this._observerEnabled=!0,this._container&&!this. +_disabled&&!this._mutationObserver&&this._doStartObserving()}stopObserving(){this._observerEnabled=!1,this._doStopObserving()}_doStartObserving(){if(!this._container||this._mutationObserver)return;const isReverse=this._isColumnReverse;this._mutationObserver=new MutationObserver(()=>{!this._autoScrollEnabled||this._rafPending||(this._rafPending=!0,requestAnimationFrame(()=>{this._rafPending=!1,this._autoScrollEnabled&&this._container&&(isReverse?this._container.scrollTop=0:this._container.scrollTop= +this._container.scrollHeight)}))}),this._mutationObserver.observe(this._container,{childList:!0,subtree:!0,characterData:!0})}_doStopObserving(){this._mutationObserver&&(this._mutationObserver.disconnect(),this._mutationObserver=null),this._rafPending=!1}}function createAutoScrollController(options={}){return new AutoScrollController(options)}function useKeyboardShortcuts(callbacks){function handleKeydown(event2){const isCtrlOrCmd=event2.ctrlKey||event2.metaKey;isCtrlOrCmd&&event2.key===KeyboardKey. +K_LOWER&&(event2.preventDefault(),callbacks.activateSearchMode?.(),callbacks.onSearchActivated?.()),isCtrlOrCmd&&event2.shiftKey&&event2.key===KeyboardKey.O_UPPER&&(event2.preventDefault(),goto("?new_chat=true#/")),event2.shiftKey&&isCtrlOrCmd&&event2.key===KeyboardKey.E_UPPER&&(event2.preventDefault(),callbacks.editActiveConversation?.()),isCtrlOrCmd&&event2.shiftKey&&(event2.key===KeyboardKey.D_LOWER||event2.key===KeyboardKey.D_UPPER)&&(event2.preventDefault(),callbacks.deleteActiveConversation?.())} +return{handleKeydown}}var root$B=from_html('<div class="pointer-events-none fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm"><div class="flex flex-col items-center justify-center rounded-2xl border-2 border-dashed border-border bg-background p-12 shadow-lg"><!> <p class="text-lg font-medium text-foreground">Attach a file</p> <p class="text-sm text-muted-foreground">Drop your files here to upload</p></div></div>');function ChatScreenDragOverlay($$anchor){var div=root$B(), +div_1=child(div),node2=child(div_1);Upload(node2,{class:"mb-4 h-12 w-12 text-muted-foreground"}),next$1(4),reset(div_1),reset(div),append($$anchor,div)}var root_5$a=from_html('<div class="mb-8 px-4 text-center"><h1 class="mb-2 text-2xl font-semibold tracking-tight md:text-3xl">Hello there</h1> <p class="text-muted-foreground md:text-lg"> </p></div>'),root_9$6=from_html('<span>Server unavailable</span> <button class="flex items-center gap-1.5 rounded-lg bg-destructive/20 px-2 py-1 text-xs font-me\ +dium hover:bg-destructive/30 disabled:opacity-50"><!> </button>',1),root_8$a=from_html("<!> <!> <!>",1),root_7$8=from_html('<div class="pointer-events-auto mx-auto mb-4 max-w-[48rem] px-1"><!></div>'),root_3$d=from_html('<div aria-label="Chat interface with file drop zone" class="flex h-full flex-col-reverse overflow-y-auto px-4 md:px-6" role="main"><div class="flex grow flex-col pt-14"><!> <div><!> <!> <!> <div class="conversation-chat-form pointer-events-auto rounded-t-3xl"><!></div></div></di\ +v></div>'),root_14$2=from_html("<!> <!>",1),root_18$2=from_html('<div class="rounded-md bg-destructive/10 px-3 py-2"><p class="font-mono text-sm break-all text-destructive"> </p> <p class="mt-1 text-xs text-muted-foreground">File type not supported</p></div>'),root_17$2=from_html('<div class="space-y-2"><h4 class="text-sm font-medium text-destructive">Unsupported File Types</h4> <div class="space-y-1"></div></div>'),root_20$1=from_html('<div class="rounded-md bg-destructive/10 px-3 py-2"><p clas\ +s="font-mono text-sm break-all text-destructive"> </p> <p class="mt-1 text-xs text-muted-foreground"> </p></div>'),root_19$3=from_html('<div class="space-y-2"><div class="space-y-1"></div></div>'),root_13$2=from_html('<!> <div class="!max-h-[50vh] min-h-0 flex-1 space-y-4 overflow-y-auto"><!> <!></div> <div class="rounded-md bg-muted/50 p-3"><h4 class="mb-2 text-sm font-medium">This model supports:</h4> <p class="text-sm text-muted-foreground"> </p></div> <!>',1),root_12$3=from_html("<!> <!>",1), +root$A=from_html("<!> <!> <!> <!> <!> <!>",1);function ChatScreen($$anchor,$$props){push$1($$props,!0);let showCenteredEmpty=prop($$props,"showCenteredEmpty",3,!1),disableAutoScroll=user_derived(()=>!!config$1().disableAutoScroll),chatScrollContainer=state$1(void 0),dragCounter=state$1(0),isDragOver=state$1(!1),showFileErrorDialog=state$1(!1),uploadedFiles=state$1(proxy([]));const autoScroll=createAutoScrollController({isColumnReverse:!0});let fileErrorData=state$1(proxy({generallyUnsupported:[], +modalityUnsupported:[],modalityReasons:{},supportedTypes:[]})),showDeleteDialog=state$1(!1),showEmptyFileDialog=state$1(!1),emptyFileNames=state$1(proxy([])),initialMessage=state$1(""),isEmpty=user_derived(()=>showCenteredEmpty()&&!activeConversation()&&activeMessages().length===0&&!isLoading()),activeErrorDialog=user_derived(errorDialog),isServerLoading=user_derived(serverLoading),hasPropsError=user_derived(()=>!!serverError()),isCurrentConversationLoading=user_derived(()=>isLoading()||isChatStreaming()), +showProcessingInfo=user_derived(()=>get$3(isCurrentConversationLoading)||config$1().keepStatsVisible&&!!page$1.params.id||activeProcessingState()!==null);setProcessingInfoContext({get showProcessingInfo(){return get$3(showProcessingInfo)}});let isRouter=user_derived(isRouterMode),conversationModel=user_derived(()=>chatStore.getConversationModel(activeMessages())),activeModelId=user_derived(()=>{const options=modelOptions();if(!get$3(isRouter))return options.length>0?options[0].model:null;const selectedId=selectedModelId(); +if(selectedId){const model=options.find(m=>m.id===selectedId);if(model)return model.model}if(get$3(conversationModel)){const model=options.find(m=>m.model===get$3(conversationModel));if(model)return model.model}return null}),modelPropsVersion=state$1(0);user_effect(()=>{get$3(activeModelId)&&(modelsStore.getModelProps(get$3(activeModelId))||modelsStore.fetchModelProps(get$3(activeModelId)).then(()=>{update$1(modelPropsVersion)}))});let hasAudioModality=user_derived(()=>get$3(activeModelId)?(get$3( +modelPropsVersion),modelsStore.modelSupportsAudio(get$3(activeModelId))):!1),hasVisionModality=user_derived(()=>get$3(activeModelId)?(get$3(modelPropsVersion),modelsStore.modelSupportsVision(get$3(activeModelId))):!1);async function handleDeleteConfirm(){const conversation=activeConversation();conversation&&await conversationsStore.deleteConversation(conversation.id),set$1(showDeleteDialog,!1)}function handleDragEnter(event2){event2.preventDefault(),update$1(dragCounter),event2.dataTransfer?.types. +includes("Files")&&set$1(isDragOver,!0)}function handleDragLeave(event2){event2.preventDefault(),update$1(dragCounter,-1),get$3(dragCounter)===0&&set$1(isDragOver,!1)}function handleErrorDialogOpenChange(open2){open2||chatStore.dismissErrorDialog()}function handleDragOver(event2){event2.preventDefault()}function handleDrop(event2){if(event2.preventDefault(),set$1(isDragOver,!1),set$1(dragCounter,0),event2.dataTransfer?.files){const files=Array.from(event2.dataTransfer.files);if(isEditing()){const handler=getAddFilesHandler(); +if(handler){handler(files);return}}processFiles(files)}}function handleFileRemove(fileId){set$1(uploadedFiles,get$3(uploadedFiles).filter(f=>f.id!==fileId),!0)}function handleFileUpload(files){processFiles(files)}const{handleKeydown}=useKeyboardShortcuts({deleteActiveConversation:()=>{activeConversation()&&set$1(showDeleteDialog,!0)}});async function handleSystemPromptAdd(draft){(draft.message||draft.files.length>0)&&chatStore.savePendingDraft(draft.message,draft.files),await chatStore.addSystemPrompt()} +function handleScroll(){autoScroll.handleScroll()}async function handleSendMessage(message,files){const plainFiles=files?snapshot(files):void 0,result=plainFiles?await parseFilesToMessageExtras(plainFiles,get$3(activeModelId)??void 0):void 0;if(result?.emptyFiles&&result.emptyFiles.length>0){if(set$1(emptyFileNames,result.emptyFiles,!0),set$1(showEmptyFileDialog,!0),files){const emptyFileNamesSet=new Set(result.emptyFiles);set$1(uploadedFiles,get$3(uploadedFiles).filter(file=>!emptyFileNamesSet. +has(file.name)),!0)}return!1}const extras=result?.extras;return autoScroll.enable(),await chatStore.sendMessage(message,extras),autoScroll.scrollToBottom(),!0}async function processFiles(files){const generallySupported=[],generallyUnsupported=[];for(const file of files)isFileTypeSupported(file.name,file.type)?generallySupported.push(file):generallyUnsupported.push(file);const capabilities={hasVision:get$3(hasVisionModality),hasAudio:get$3(hasAudioModality)},{supportedFiles,unsupportedFiles,modalityReasons}=filterFilesByModalities( +generallySupported,capabilities);if([...generallyUnsupported,...unsupportedFiles].length>0){const supportedTypes=["text files","PDFs"];get$3(hasVisionModality)&&supportedTypes.push("images"),get$3(hasAudioModality)&&supportedTypes.push("audio files"),set$1(fileErrorData,{generallyUnsupported,modalityUnsupported:unsupportedFiles,modalityReasons,supportedTypes},!0),set$1(showFileErrorDialog,!0)}if(supportedFiles.length>0){const processed=await processFilesToChatUploaded(supportedFiles,get$3(activeModelId)?? +void 0);set$1(uploadedFiles,[...get$3(uploadedFiles),...processed],!0)}}afterNavigate(()=>{get$3(disableAutoScroll)||autoScroll.enable()}),onMount$1(()=>{autoScroll.startObserving(),get$3(disableAutoScroll)||autoScroll.enable();const pendingDraft=chatStore.consumePendingDraft();pendingDraft&&(set$1(initialMessage,pendingDraft.message,!0),set$1(uploadedFiles,pendingDraft.files,!0))}),user_effect(()=>{autoScroll.setContainer(get$3(chatScrollContainer))}),user_effect(()=>{autoScroll.setDisabled(get$3( +disableAutoScroll))});var fragment=root$A();event("keydown",$window,handleKeydown);var node2=first_child(fragment);{var consequent=$$anchor2=>{ChatScreenDragOverlay($$anchor2)};if_block(node2,$$render=>{get$3(isDragOver)&&$$render(consequent)})}var node_1=sibling(node2,2);{var consequent_1=$$anchor2=>{ServerLoadingSplash($$anchor2,{})},alternate=$$anchor2=>{var div=root_3$d(),div_1=child(div),node_2=child(div_1);{var consequent_2=$$anchor3=>{{let $0=user_derived(activeMessages);ChatMessages($$anchor3, +{get messages(){return get$3($0)},onUserAction:()=>{autoScroll.enable(),autoScroll.scrollToBottom()}})}};if_block(node_2,$$render=>{get$3(isEmpty)||$$render(consequent_2)})}var div_2=sibling(node_2,2),node_3=child(div_2);{var consequent_3=$$anchor3=>{var div_3=root_5$a(),p2=sibling(child(div_3),2),text2=child(p2);reset(p2),reset(div_3),action(div_3,($$node,$$action_arg)=>fadeInView?.($$node,$$action_arg),()=>({duration:300})),template_effect(()=>set_text(text2,`${serverStore.props?.modalities?.audio? +"Record audio, type a message ":"Type a message"} or upload files to get started`)),append($$anchor3,div_3)};if_block(node_3,$$render=>{get$3(isEmpty)&&$$render(consequent_3)})}var node_4=sibling(node_3,2);{var consequent_4=$$anchor3=>{ChatScreenProcessingInfo($$anchor3,{})};if_block(node_4,$$render=>{page$1.params.id&&$$render(consequent_4)})}var node_5=sibling(node_4,2);{var consequent_5=$$anchor3=>{var div_4=root_7$8(),node_6=child(div_4);component(node_6,()=>Alert,($$anchor4,Alert_Root)=>{Alert_Root( +$$anchor4,{variant:"destructive",children:($$anchor5,$$slotProps)=>{var fragment_5=root_8$a(),node_7=first_child(fragment_5);Triangle_alert(node_7,{class:"h-4 w-4"});var node_8=sibling(node_7,2);component(node_8,()=>Alert_title,($$anchor6,Alert_Title)=>{Alert_Title($$anchor6,{class:"flex items-center justify-between",children:($$anchor7,$$slotProps2)=>{var fragment_6=root_9$6(),button=sibling(first_child(fragment_6),2),node_9=child(button);{let $0=user_derived(()=>get$3(isServerLoading)?"animate\ +-spin":"");Refresh_cw(node_9,{get class(){return`h-3 w-3 ${get$3($0)??""}`}})}var text_1=sibling(node_9);reset(button),template_effect(()=>{button.disabled=get$3(isServerLoading),set_text(text_1,` ${get$3(isServerLoading)?"Retrying...":"Retry"}`)}),delegated("click",button,()=>serverStore.fetch()),append($$anchor7,fragment_6)},$$slots:{default:!0}})});var node_10=sibling(node_8,2);component(node_10,()=>Alert_description,($$anchor6,Alert_Description)=>{Alert_Description($$anchor6,{children:($$anchor7,$$slotProps2)=>{ +next$1();var text_2=text$8();template_effect($0=>set_text(text_2,$0),[()=>serverError()]),append($$anchor7,text_2)},$$slots:{default:!0}})}),append($$anchor5,fragment_5)},$$slots:{default:!0}})}),reset(div_4),action(div_4,($$node,$$action_arg)=>fadeInView?.($$node,$$action_arg),()=>({y:10,duration:250})),append($$anchor3,div_4)};if_block(node_5,$$render=>{get$3(hasPropsError)&&$$render(consequent_5)})}var div_5=sibling(node_5,2),node_11=child(div_5);{let $0=user_derived(()=>get$3(hasPropsError)|| +isEditing());ChatScreenForm(node_11,{get disabled(){return get$3($0)},get initialMessage(){return get$3(initialMessage)},get isLoading(){return get$3(isCurrentConversationLoading)},onFileRemove:handleFileRemove,onFileUpload:handleFileUpload,onSend:handleSendMessage,onStop:()=>chatStore.stopGeneration(),onSystemPromptAdd:handleSystemPromptAdd,showHelperText:!1,get uploadedFiles(){return get$3(uploadedFiles)},set uploadedFiles($$value){set$1(uploadedFiles,$$value,!0)}})}reset(div_5),reset(div_2),reset( +div_1),reset(div),bind_this(div,$$value=>set$1(chatScrollContainer,$$value),()=>get$3(chatScrollContainer)),template_effect(()=>set_class(div_2,1,`pointer-events-none ${get$3(isEmpty)?"absolute bottom-[calc(50dvh-7rem)]":"sticky bottom-4"} right-4 left-4 mt-auto pt-16 transition-all duration-200`)),event("dragenter",div,handleDragEnter),event("dragleave",div,handleDragLeave),event("dragover",div,handleDragOver),event("drop",div,handleDrop),event("scroll",div,handleScroll),append($$anchor2,div)}; +if_block(node_1,$$render=>{get$3(isServerLoading)?$$render(consequent_1):$$render(alternate,-1)})}var node_12=sibling(node_1,2);component(node_12,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return get$3(showFileErrorDialog)},set open($$value){set$1(showFileErrorDialog,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment_8=comment$2(),node_13=first_child(fragment_8);component(node_13,()=>Portal,($$anchor4,AlertDialog_Portal)=>{AlertDialog_Portal($$anchor4, +{children:($$anchor5,$$slotProps2)=>{var fragment_9=root_12$3(),node_14=first_child(fragment_9);component(node_14,()=>Alert_dialog_overlay,($$anchor6,AlertDialog_Overlay)=>{AlertDialog_Overlay($$anchor6,{})});var node_15=sibling(node_14,2);component(node_15,()=>Alert_dialog_content,($$anchor6,AlertDialog_Content)=>{AlertDialog_Content($$anchor6,{class:"flex max-w-md flex-col",children:($$anchor7,$$slotProps3)=>{var fragment_10=root_13$2(),node_16=first_child(fragment_10);component(node_16,()=>Alert_dialog_header, +($$anchor8,AlertDialog_Header)=>{AlertDialog_Header($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_11=root_14$2(),node_17=first_child(fragment_11);component(node_17,()=>Alert_dialog_title,($$anchor10,AlertDialog_Title)=>{AlertDialog_Title($$anchor10,{children:($$anchor11,$$slotProps5)=>{next$1();var text_3=text$8("File Upload Error");append($$anchor11,text_3)},$$slots:{default:!0}})});var node_18=sibling(node_17,2);component(node_18,()=>Alert_dialog_description,($$anchor10,AlertDialog_Description)=>{ +AlertDialog_Description($$anchor10,{class:"text-sm text-muted-foreground",children:($$anchor11,$$slotProps5)=>{next$1();var text_4=text$8("Some files cannot be uploaded with the current model.");append($$anchor11,text_4)},$$slots:{default:!0}})}),append($$anchor9,fragment_11)},$$slots:{default:!0}})});var div_6=sibling(node_16,2),node_19=child(div_6);{var consequent_6=$$anchor8=>{var div_7=root_17$2(),div_8=sibling(child(div_7),2);each(div_8,21,()=>get$3(fileErrorData).generallyUnsupported,file=>file. +name,($$anchor9,file)=>{var div_9=root_18$2(),p_1=child(div_9),text_5=child(p_1,!0);reset(p_1),next$1(2),reset(div_9),template_effect(()=>set_text(text_5,get$3(file).name)),append($$anchor9,div_9)}),reset(div_8),reset(div_7),append($$anchor8,div_7)};if_block(node_19,$$render=>{get$3(fileErrorData).generallyUnsupported.length>0&&$$render(consequent_6)})}var node_20=sibling(node_19,2);{var consequent_7=$$anchor8=>{var div_10=root_19$3(),div_11=child(div_10);each(div_11,21,()=>get$3(fileErrorData). +modalityUnsupported,file=>file.name,($$anchor9,file)=>{var div_12=root_20$1(),p_2=child(div_12),text_6=child(p_2,!0);reset(p_2);var p_3=sibling(p_2,2),text_7=child(p_3,!0);reset(p_3),reset(div_12),template_effect(()=>{set_text(text_6,get$3(file).name),set_text(text_7,get$3(fileErrorData).modalityReasons[get$3(file).name]||"Not supported by current model")}),append($$anchor9,div_12)}),reset(div_11),reset(div_10),append($$anchor8,div_10)};if_block(node_20,$$render=>{get$3(fileErrorData).modalityUnsupported. +length>0&&$$render(consequent_7)})}reset(div_6);var div_13=sibling(div_6,2),p_4=sibling(child(div_13),2),text_8=child(p_4,!0);reset(p_4),reset(div_13);var node_21=sibling(div_13,2);component(node_21,()=>Alert_dialog_footer,($$anchor8,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor8,{children:($$anchor9,$$slotProps4)=>{var fragment_12=comment$2(),node_22=first_child(fragment_12);component(node_22,()=>Alert_dialog_action,($$anchor10,AlertDialog_Action)=>{AlertDialog_Action($$anchor10,{onclick:()=>set$1( +showFileErrorDialog,!1),children:($$anchor11,$$slotProps5)=>{next$1();var text_9=text$8("Got it");append($$anchor11,text_9)},$$slots:{default:!0}})}),append($$anchor9,fragment_12)},$$slots:{default:!0}})}),template_effect($0=>set_text(text_8,$0),[()=>get$3(fileErrorData).supportedTypes.join(", ")]),append($$anchor7,fragment_10)},$$slots:{default:!0}})}),append($$anchor5,fragment_9)},$$slots:{default:!0}})}),append($$anchor3,fragment_8)},$$slots:{default:!0}})});var node_23=sibling(node_12,2);DialogConfirmation( +node_23,{title:"Delete Conversation",description:"Are you sure you want to delete this conversation? This action cannot be undone and will permanently remove all messages in this conversation.",confirmText:"Delete",cancelText:"Cancel",variant:"destructive",get icon(){return Trash_2},onConfirm:handleDeleteConfirm,onCancel:()=>set$1(showDeleteDialog,!1),get open(){return get$3(showDeleteDialog)},set open($$value){set$1(showDeleteDialog,$$value,!0)}});var node_24=sibling(node_23,2);DialogEmptyFileAlert( +node_24,{get emptyFiles(){return get$3(emptyFileNames)},onOpenChange:open2=>{open2||set$1(emptyFileNames,[],!0)},get open(){return get$3(showEmptyFileDialog)},set open($$value){set$1(showEmptyFileDialog,$$value,!0)}});var node_25=sibling(node_24,2);{let $0=user_derived(()=>get$3(activeErrorDialog)?.message??""),$1=user_derived(()=>get$3(activeErrorDialog)?.contextInfo),$2=user_derived(()=>!!get$3(activeErrorDialog)),$3=user_derived(()=>get$3(activeErrorDialog)?.type??ErrorDialogType.SERVER);DialogChatError( +node_25,{get message(){return get$3($0)},get contextInfo(){return get$3($1)},onOpenChange:handleErrorDialogOpenChange,get open(){return get$3($2)},get type(){return get$3($3)}})}append($$anchor,fragment),pop()}delegate(["click"]);class DraftMessagesStore{drafts=new Map;getDraftMessage(chatId){const key2=chatId??NEW_CHAT_DRAFT_KEY;return this.drafts.get(key2)??{message:"",files:[]}}saveDraftMessage(chatId,message,files){const key2=chatId??NEW_CHAT_DRAFT_KEY;message||files.length>0?this.drafts.set( +key2,{message,files:[...files]}):this.drafts.delete(key2)}clearDraftMessage(chatId){const key2=chatId??NEW_CHAT_DRAFT_KEY;this.drafts.delete(key2)}}const draftMessagesStore=new DraftMessagesStore;function useDraftMessages(options){onMount$1(()=>{const chatId=options.getChatId();if(!chatId)return;const draft=draftMessagesStore.getDraftMessage(chatId);(draft.message||draft.files.length>0)&&!options.getInitialMessage()&&(options.setMessage(draft.message),options.setFiles(draft.files))}),beforeNavigate( +()=>{const chatId=options.getChatId();chatId&&draftMessagesStore.saveDraftMessage(chatId,options.getMessage(),options.getFiles())}),afterNavigate(navigation=>{if(navigation?.from!=null){const chatId=options.getChatId();if(!chatId)return;const draft=draftMessagesStore.getDraftMessage(chatId);options.setMessage(draft.message),options.setFiles(draft.files)}});function clearDraft(){const chatId=options.getChatId();chatId&&draftMessagesStore.clearDraftMessage(chatId)}return{clearDraft}}var root$z=from_html( +'<div class="relative mx-auto max-w-[48rem]"><!></div> <!>',1);function ChatScreenForm($$anchor,$$props){push$1($$props,!0);let disabled=prop($$props,"disabled",3,!1),initialMessage=prop($$props,"initialMessage",3,""),isLoading2=prop($$props,"isLoading",3,!1),showHelperText=prop($$props,"showHelperText",3,!0),uploadedFiles=prop($$props,"uploadedFiles",31,()=>proxy([])),chatFormRef=state$1(void 0),chatId=user_derived(()=>page$1.params.id),message=user_derived(initialMessage),previousIsLoading=user_derived( +isLoading2),previousInitialMessage=user_derived(initialMessage);const{clearDraft}=useDraftMessages({getChatId:()=>get$3(chatId),getMessage:()=>get$3(message),getFiles:()=>uploadedFiles(),setMessage:m=>set$1(message,m),setFiles:f=>uploadedFiles(f),getInitialMessage:()=>initialMessage()});user_effect(()=>{initialMessage()!==get$3(previousInitialMessage)&&(set$1(message,initialMessage()),set$1(previousInitialMessage,initialMessage()))});function handleSystemPromptClick(){$$props.onSystemPromptAdd?.( +{message:get$3(message),files:uploadedFiles()})}let hasLoadingAttachments=user_derived(()=>uploadedFiles().some(f=>f.isLoading));async function handleSubmit(){if(!get$3(message).trim()&&uploadedFiles().length===0||disabled()||get$3(hasLoadingAttachments)||!get$3(chatFormRef)?.checkModelSelected())return;const messageToSend=get$3(message).trim(),filesToSend=[...uploadedFiles()];set$1(message,""),uploadedFiles([]),clearDraft(),get$3(chatFormRef)?.resetTextareaHeight(),await $$props.onSend?.(messageToSend, +filesToSend)||(set$1(message,messageToSend),uploadedFiles(filesToSend))}function handleFilesAdd(files){$$props.onFileUpload?.(files)}function handleUploadedFileRemove(fileId){$$props.onFileRemove?.(fileId)}onMount$1(()=>{setTimeout(()=>get$3(chatFormRef)?.focus(),10)}),afterNavigate(navigation=>{navigation?.from!=null&&setTimeout(()=>get$3(chatFormRef)?.focus(),10)}),user_effect(()=>{get$3(previousIsLoading)&&!isLoading2()&&setTimeout(()=>get$3(chatFormRef)?.focus(),10),set$1(previousIsLoading,isLoading2())}); +var fragment=root$z(),div=first_child(fragment),node2=child(div);bind_this(ChatForm(node2,{get class(){return $$props.class},get disabled(){return disabled()},get isLoading(){return isLoading2()},showMcpPromptButton:!0,onFilesAdd:handleFilesAdd,get onStop(){return $$props.onStop},onSubmit:handleSubmit,onSystemPromptClick:handleSystemPromptClick,onUploadedFileRemove:handleUploadedFileRemove,get value(){return get$3(message)},set value($$value){set$1(message,$$value)},get uploadedFiles(){return uploadedFiles()}, +set uploadedFiles($$value){uploadedFiles($$value)}}),$$value=>set$1(chatFormRef,$$value,!0),()=>get$3(chatFormRef)),reset(div);var node_1=sibling(div,2);ChatFormHelperText(node_1,{get show(){return showHelperText()}}),append($$anchor,fragment),pop()}var root_1$g=from_html('<span class="chat-processing-info-detail pointer-events-auto backdrop-blur-sm svelte-1ktvj8d"> </span>'),root$y=from_html('<div><div class="chat-processing-info-content svelte-1ktvj8d"></div></div>');function ChatScreenProcessingInfo($$anchor,$$props){ +push$1($$props,!0);const processingState=useProcessingState(),processingInfoCtx=getProcessingInfoContext();let showProcessingInfo=user_derived(()=>processingInfoCtx.showProcessingInfo),isCurrentConversationLoading=user_derived(isLoading),isStreaming=user_derived(isChatStreaming),processingDetails=user_derived(()=>processingState.getTechnicalDetails());user_effect(()=>{const conversation=activeConversation();untrack$1(()=>chatStore.setActiveProcessingConversation(conversation?.id??null))}),user_effect( +()=>{const keepStatsVisible=config$1().keepStatsVisible;if((keepStatsVisible||get$3(isCurrentConversationLoading)||get$3(isStreaming))&&processingState.startMonitoring(),!get$3(isCurrentConversationLoading)&&!get$3(isStreaming)&&!keepStatsVisible){const timeout=setTimeout(()=>{!config$1().keepStatsVisible&&!isChatStreaming()&&processingState.stopMonitoring()},PROCESSING_INFO_TIMEOUT);return()=>clearTimeout(timeout)}}),user_effect(()=>{const conversation=activeConversation(),messages=activeMessages(); +if(config$1().keepStatsVisible&&conversation){if(messages.length===0){untrack$1(()=>chatStore.clearProcessingState(conversation.id));return}!get$3(isCurrentConversationLoading)&&!get$3(isStreaming)&&untrack$1(()=>chatStore.restoreProcessingStateFromMessages(messages,conversation.id))}});var div=root$y();let classes;var div_1=child(div);each(div_1,20,()=>get$3(processingDetails),detail=>detail,($$anchor2,detail)=>{var span=root_1$g(),text2=child(span,!0);reset(span),template_effect(()=>set_text(text2, +detail)),append($$anchor2,span)}),reset(div_1),reset(div),template_effect(()=>classes=set_class(div,1,"chat-processing-info-container pointer-events-none svelte-1ktvj8d",null,classes,{visible:get$3(showProcessingInfo)})),append($$anchor,div),pop()}var root_1$f=from_html("<!> Reset to default",1),root_5$9=from_html("<!> <!>",1),root_8$9=from_html("<!> <!>",1),root_4$9=from_html("<!> <!>",1),root$x=from_html('<div class="sticky bottom-0 mx-auto mt-4 flex w-full justify-between p-6"><div class="fle\ +x gap-2"><!></div> <!></div> <!>',1);function ChatSettingsFooter($$anchor,$$props){push$1($$props,!0);let showResetDialog=state$1(!1);function handleResetClick(){set$1(showResetDialog,!0)}function handleConfirmReset(){settingsStore.forceSyncWithServerDefaults(),$$props.onReset?.(),set$1(showResetDialog,!1)}function handleSave(){$$props.onSave?.()}var fragment=root$x(),div=first_child(fragment),div_1=child(div),node2=child(div_1);Button(node2,{variant:"outline",onclick:handleResetClick,children:($$anchor2,$$slotProps)=>{ +var fragment_1=root_1$f(),node_1=first_child(fragment_1);Rotate_ccw(node_1,{class:"h-3 w-3"}),next$1(),append($$anchor2,fragment_1)},$$slots:{default:!0}}),reset(div_1);var node_2=sibling(div_1,2);Button(node_2,{onclick:handleSave,children:($$anchor2,$$slotProps)=>{next$1();var text2=text$8("Save settings");append($$anchor2,text2)},$$slots:{default:!0}}),reset(div);var node_3=sibling(div,2);component(node_3,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get open(){return get$3( +showResetDialog)},set open($$value){set$1(showResetDialog,$$value,!0)},children:($$anchor3,$$slotProps)=>{var fragment_2=comment$2(),node_4=first_child(fragment_2);component(node_4,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_3=root_4$9(),node_5=first_child(fragment_3);component(node_5,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{ +var fragment_4=root_5$9(),node_6=first_child(fragment_4);component(node_6,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{AlertDialog_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_1=text$8("Reset Settings to Default");append($$anchor9,text_1)},$$slots:{default:!0}})});var node_7=sibling(node_6,2);component(node_7,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text_2=text$8( +`Are you sure you want to reset all settings to their default values? This will reset all parameters to the values provided by the server's /props endpoint and remove all your custom - configurations.`);append($$anchor9,text_2)},$$slots:{default:!0}})}),append($$anchor7,fragment_4)},$$slots:{default:!0}})});var node_8=sibling(node_5,2);component(node_8,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_5=root_8$b(),node_9=first_child(fragment_5);component(node_9,()=>Alert_dialog_cancel,($$anchor8,AlertDialog_Cancel)=>{AlertDialog_Cancel($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1(); + configurations.`);append($$anchor9,text_2)},$$slots:{default:!0}})}),append($$anchor7,fragment_4)},$$slots:{default:!0}})});var node_8=sibling(node_5,2);component(node_8,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_5=root_8$9(),node_9=first_child(fragment_5);component(node_9,()=>Alert_dialog_cancel,($$anchor8,AlertDialog_Cancel)=>{AlertDialog_Cancel($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1(); var text_3=text$8("Cancel");append($$anchor9,text_3)},$$slots:{default:!0}})});var node_10=sibling(node_9,2);component(node_10,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{AlertDialog_Action($$anchor8,{onclick:handleConfirmReset,children:($$anchor9,$$slotProps4)=>{next$1();var text_4=text$8("Reset to Default");append($$anchor9,text_4)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)},$$slots:{default:!0}})}),append($$anchor5,fragment_3)},$$slots:{default:!0}})}),append($$anchor3, -fragment_2)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_1$n=from_html('<span class="absolute right-2 flex size-3.5 items-center justify-center"><!></span> <!>',1);function Select_item($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","value","label","children"]);var fragment=comment$2(),node2=first_child(fragment);{const children=($$anchor2,$$arg0)=>{let selected=()=>$$arg0?.(). -selected,highlighted=()=>$$arg0?.().highlighted;var fragment_1=root_1$n(),span=first_child(fragment_1),node_1=child(span);{var consequent=$$anchor3=>{Check($$anchor3,{class:"size-4"})};if_block(node_1,$$render=>{selected()&&$$render(consequent)})}reset(span);var node_2=sibling(span,2);{var consequent_1=$$anchor3=>{var fragment_3=comment$2(),node_3=first_child(fragment_3);snippet(node_3,()=>$$props.children,()=>({selected:selected(),highlighted:highlighted()})),append($$anchor3,fragment_3)},alternate=$$anchor3=>{ -var text2=text$8();template_effect(()=>set_text(text2,$$props.label||$$props.value)),append($$anchor3,text2)};if_block(node_2,$$render=>{$$props.children?$$render(consequent_1):$$render(alternate,!1)})}append($$anchor2,fragment_1)};let $0=user_derived(()=>cn$1("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-accent data-[highlighted]:text-acce\ -nt-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",$$props.class));component(node2,()=>Select_item$1,($$anchor2,SelectPrimitive_Item)=>{SelectPrimitive_Item($$anchor2,spread_props({get value(){return $$props.value},"data-slot":"select-item",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}, +fragment_2)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_1$e=from_html('<span class="absolute right-2 flex size-3.5 items-center justify-center"><!></span> <!>',1);function Select_item($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","value","label","children"]);var fragment=comment$2(),node2=first_child(fragment);{const children=($$anchor2,$$arg0)=>{let selected=()=>$$arg0?.(). +selected,highlighted=()=>$$arg0?.().highlighted;var fragment_1=root_1$e(),span=first_child(fragment_1),node_1=child(span);{var consequent=$$anchor3=>{Check($$anchor3,{class:"size-4"})};if_block(node_1,$$render=>{selected()&&$$render(consequent)})}reset(span);var node_2=sibling(span,2);{var consequent_1=$$anchor3=>{var fragment_3=comment$2(),node_3=first_child(fragment_3);snippet(node_3,()=>$$props.children,()=>({selected:selected(),highlighted:highlighted()})),append($$anchor3,fragment_3)},alternate=$$anchor3=>{ +var text2=text$8();template_effect(()=>set_text(text2,$$props.label||$$props.value)),append($$anchor3,text2)};if_block(node_2,$$render=>{$$props.children?$$render(consequent_1):$$render(alternate,-1)})}append($$anchor2,fragment_1)};let $0=user_derived(()=>cn$1("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-accent data-[highlighted]:text-acce\ +nt-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",$$props.class));component(node2,()=>Select_item$1,($$anchor2,SelectPrimitive_Item)=>{SelectPrimitive_Item($$anchor2,spread_props({get value(){return $$props.value},"data-slot":"select-item",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}, children,$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}function Select_scroll_up_button($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1("flex cursor-default items-center justify-center py-1",$$props.class));component(node2,()=>Select_scroll_up_button$1,($$anchor2,SelectPrimitive_ScrollUpButton)=>{SelectPrimitive_ScrollUpButton( -$$anchor2,spread_props({"data-slot":"select-scroll-up-button",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{Chevron_up($$anchor3,{class:"size-4"})},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}function Select_scroll_down_button($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(), -node2=first_child(fragment);{let $0=user_derived(()=>cn$1("flex cursor-default items-center justify-center py-1",$$props.class));component(node2,()=>Select_scroll_down_button$1,($$anchor2,SelectPrimitive_ScrollDownButton)=>{SelectPrimitive_ScrollDownButton($$anchor2,spread_props({"data-slot":"select-scroll-down-button",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{Chevron_down($$anchor3,{class:"size-4"})}, -$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_2$r=from_html("<!> <!> <!>",1);function Select_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props,"sideOffset",3,4),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","sideOffset","portalProps","children"]),cleanupInternalListeners;onMount$1(()=>{const listenerOptions={passive:!1},blockOutsideWheel=event2=>{if(!ref2())return;const target2=event2.target; +$$anchor2,spread_props({"data-slot":"select-scroll-up-button",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{Chevron_up($$anchor3,{class:"size-4"})},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}function Select_scroll_down_button($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class"]);var fragment=comment$2(), +node2=first_child(fragment);{let $0=user_derived(()=>cn$1("flex cursor-default items-center justify-center py-1",$$props.class));component(node2,()=>Select_scroll_down_button$1,($$anchor2,SelectPrimitive_ScrollDownButton)=>{SelectPrimitive_ScrollDownButton($$anchor2,spread_props({"data-slot":"select-scroll-down-button",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{Chevron_down($$anchor3,{class:"size-4"})}, +$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}var root_2$l=from_html("<!> <!> <!>",1);function Select_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),sideOffset=prop($$props,"sideOffset",3,4),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","sideOffset","portalProps","children"]),cleanupInternalListeners;onMount$1(()=>{const listenerOptions={passive:!1},blockOutsideWheel=event2=>{if(!ref2())return;const target2=event2.target; (!target2||!ref2().contains(target2))&&(event2.preventDefault(),event2.stopPropagation())},blockOutsideTouchMove=event2=>{if(!ref2())return;const target2=event2.target;(!target2||!ref2().contains(target2))&&(event2.preventDefault(),event2.stopPropagation())};return document.addEventListener("wheel",blockOutsideWheel,listenerOptions),document.addEventListener("touchmove",blockOutsideTouchMove,listenerOptions),()=>{document.removeEventListener("wheel",blockOutsideWheel,listenerOptions),document.removeEventListener( "touchmove",blockOutsideTouchMove,listenerOptions)}}),user_effect(()=>{const element2=ref2();if(cleanupInternalListeners?.(),!element2)return;const stopWheelPropagation=event2=>{event2.stopPropagation()},stopTouchPropagation=event2=>{event2.stopPropagation()};element2.addEventListener("wheel",stopWheelPropagation),element2.addEventListener("touchmove",stopTouchPropagation),cleanupInternalListeners=()=>{element2.removeEventListener("wheel",stopWheelPropagation),element2.removeEventListener("touch\ move",stopTouchPropagation)}}),onDestroy(()=>{cleanupInternalListeners?.()});var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Portal$2,($$anchor2,SelectPrimitive_Portal)=>{SelectPrimitive_Portal($$anchor2,spread_props(()=>$$props.portalProps,{children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);{let $0=user_derived(()=>cn$1("relative z-[var(--layer-popover,1000000)] max-h-(--bits-select-content-available-height) min-w-[8rem] origin-\ (--bits-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:translate-y-1 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:-translate-x-1 data-[side=left]:slide-in-from-right-2 data-[side=right]:translate-x-1 data-[side=right]:slide-in-from-left-2 data-[side=top]:-translate-y-1 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=clo\ -sed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",$$props.class));component(node_1,()=>Select_content$1,($$anchor4,SelectPrimitive_Content)=>{SelectPrimitive_Content($$anchor4,spread_props({get sideOffset(){return sideOffset()},"data-slot":"select-content",get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$r(),node_2=first_child(fragment_2); -Select_scroll_up_button(node_2,{});var node_3=sibling(node_2,2);{let $02=user_derived(()=>cn$1("h-(--bits-select-anchor-height) w-full min-w-(--bits-select-anchor-width) scroll-my-1 p-1"));component(node_3,()=>Select_viewport,($$anchor6,SelectPrimitive_Viewport)=>{SelectPrimitive_Viewport($$anchor6,{get class(){return get$4($02)},children:($$anchor7,$$slotProps3)=>{var fragment_3=comment$2(),node_4=first_child(fragment_3);snippet(node_4,()=>$$props.children??noop$3),append($$anchor7,fragment_3)}, -$$slots:{default:!0}})})}var node_5=sibling(node_3,2);Select_scroll_down_button(node_5,{}),append($$anchor5,fragment_2)},$$slots:{default:!0}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}var root_1$m=from_html("<!> <!>",1);function Select_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),size2=prop($$props,"size",3,"default"),variant=prop($$props,"variant",3,"default"),restProps=rest_props($$props,["$$slots","$$event\ +sed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",$$props.class));component(node_1,()=>Select_content$1,($$anchor4,SelectPrimitive_Content)=>{SelectPrimitive_Content($$anchor4,spread_props({get sideOffset(){return sideOffset()},"data-slot":"select-content",get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$l(),node_2=first_child(fragment_2); +Select_scroll_up_button(node_2,{});var node_3=sibling(node_2,2);{let $02=user_derived(()=>cn$1("h-(--bits-select-anchor-height) w-full min-w-(--bits-select-anchor-width) scroll-my-1 p-1"));component(node_3,()=>Select_viewport,($$anchor6,SelectPrimitive_Viewport)=>{SelectPrimitive_Viewport($$anchor6,{get class(){return get$3($02)},children:($$anchor7,$$slotProps3)=>{var fragment_3=comment$2(),node_4=first_child(fragment_3);snippet(node_4,()=>$$props.children??noop$3),append($$anchor7,fragment_3)}, +$$slots:{default:!0}})})}var node_5=sibling(node_3,2);Select_scroll_down_button(node_5,{}),append($$anchor5,fragment_2)},$$slots:{default:!0}}))})}append($$anchor3,fragment_1)},$$slots:{default:!0}}))}),append($$anchor,fragment),pop()}var root_1$d=from_html("<!> <!>",1);function Select_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),size2=prop($$props,"size",3,"default"),variant=prop($$props,"variant",3,"default"),restProps=rest_props($$props,["$$slots","$$event\ s","$$legacy","ref","class","children","size","variant"]);const baseClasses=user_derived(()=>variant()==="plain"?"group inline-flex w-full items-center justify-end gap-2 whitespace-nowrap px-0 py-0 text-sm font-medium text-muted-foreground transition-colors focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 [&_svg]:pointer-events-none [&_svg\ ]:shrink-0 [&_svg:not([class*='size-'])]:size-3 [&_svg:not([class*='text-'])]:text-muted-foreground":"flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placehol\ der]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground"),chevronClasses=user_derived(()=>variant()==="plain"?"size-3 opacity-60 \ -transition-transform group-data-[state=open]:-rotate-180":"size-4 opacity-50");var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1(get$4(baseClasses),$$props.class));component(node2,()=>Select_trigger$1,($$anchor2,SelectPrimitive_Trigger)=>{SelectPrimitive_Trigger($$anchor2,spread_props({"data-slot":"select-trigger",get"data-size"(){return size2()},get class(){return get$4($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{ -var fragment_1=root_1$m(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);Chevron_down(node_2,{get class(){return get$4(chevronClasses)}}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}const Root=Select;var root$z=from_html("<textarea></textarea>");function Textarea($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),value=prop($$props,"value",15),restProps=rest_props($$props, -["$$slots","$$events","$$legacy","ref","value","class"]);var textarea=root$z();remove_textarea_child(textarea),attribute_effect(textarea,$0=>({"data-slot":"textarea",class:$0,...restProps}),[()=>cn$1("flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowe\ -d disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40",$$props.class)]),bind_this(textarea,$$value=>ref2($$value),()=>ref2()),bind_value(textarea,value),append($$anchor,textarea),pop()}var root_3$m=from_html(" <!>",1),root_6$e=from_html('<button type="button" class="absolute top-1/2 right-2 inline-flex h-5 w-5 -translate-y-1/2 items-center justify-center rounded transition-colors hover:bg-muted" ar\ -ia-label="Reset to default" title="Reset to default"><!></button>'),root_7$e=from_html('<p class="mt-1 text-xs text-muted-foreground"><!></p>'),root_2$q=from_html('<div class="flex items-center gap-2"><!> <!></div> <div class="relative w-full md:max-w-md"><!> <!></div> <!>',1),root_10$8=from_html(" <!>",1),root_12$4=from_html('<p class="mt-1 text-xs text-muted-foreground"> </p>'),root_13$7=from_html('<div class="mt-3 flex items-center gap-2"><!> <!></div>'),root_9$a=from_html("<!> <!> <!> <!>",1), -root_17$1=from_html(" <!>",1),root_21$2=from_html('<div class="flex items-center gap-2"><!> </div>'),root_23$1=from_html('<button type="button" class="absolute top-1/2 right-8 inline-flex h-5 w-5 -translate-y-1/2 items-center justify-center rounded transition-colors hover:bg-muted" aria-label="Reset to default" title="Reset to default"><!></button>'),root_27$1=from_html('<div class="flex items-center gap-2"><!> </div>'),root_20$3=from_html('<div class="relative w-full md:w-auto md:max-w-md"><!> \ -<!></div> <!>',1),root_29=from_html('<p class="mt-1 text-xs text-muted-foreground"> </p>'),root_16$2=from_html('<div class="flex items-center gap-2"><!> <!></div> <!> <!>',1),root_33=from_html('<p class="text-xs text-muted-foreground"> </p>'),root_31=from_html('<div class="flex items-start space-x-3"><!> <div class="space-y-1"><label class="flex cursor-pointer items-center gap-1.5 pt-1 pb-0.5 text-sm leading-none font-medium"> <!></label> <!></div></div>'),root_1$l=from_html('<div class="space-y\ --2"><!></div>');function ChatSettingsFields($$anchor,$$props){push$1($$props,!0);let sp=user_derived(()=>{if(serverStore.isRouterMode){const m=selectedModelName();if(m)return modelsStore.getModelProps(m)?.default_generation_settings?.params??{}}return serverStore.defaultParams??{}});var fragment=comment$2(),node2=first_child(fragment);each(node2,17,()=>$$props.fields,field=>field.key,($$anchor2,field)=>{var div=root_1$l(),node_1=child(div);{var consequent_4=$$anchor3=>{const currentValue=user_derived( -()=>String($$props.localConfig[get$4(field).key]??"")),serverDefault=user_derived(()=>get$4(sp)[get$4(field).key]),isCustomRealTime=user_derived(()=>(()=>{if(get$4(serverDefault)==null||get$4(currentValue)==="")return!1;const numericInput=parseFloat(get$4(currentValue)),normalizedInput=isNaN(numericInput)?get$4(currentValue):Math.round(numericInput*1e6)/1e6,normalizedDefault=typeof get$4(serverDefault)=="number"?Math.round(get$4(serverDefault)*1e6)/1e6:get$4(serverDefault);return normalizedInput!== -normalizedDefault})());var fragment_1=root_2$q(),div_1=first_child(fragment_1),node_2=child(div_1);Label(node_2,{get for(){return get$4(field).key},class:"flex items-center gap-1.5 text-sm font-medium",children:($$anchor4,$$slotProps)=>{next$1();var fragment_2=root_3$m(),text2=first_child(fragment_2),node_3=sibling(text2);{var consequent=$$anchor5=>{Flask_conical($$anchor5,{class:"h-3.5 w-3.5 text-muted-foreground"})};if_block(node_3,$$render=>{get$4(field).isExperimental&&$$render(consequent)})} -template_effect(()=>set_text(text2,`${get$4(field).label??""} `)),append($$anchor4,fragment_2)},$$slots:{default:!0}});var node_4=sibling(node_2,2);{var consequent_1=$$anchor4=>{ChatSettingsParameterSourceIndicator($$anchor4,{})};if_block(node_4,$$render=>{get$4(isCustomRealTime)&&$$render(consequent_1)})}reset(div_1);var div_2=sibling(div_1,2),node_5=child(div_2);{let $0=user_derived(()=>get$4(sp)[get$4(field).key]!=null?`Default: ${normalizeFloatingPoint(get$4(sp)[get$4(field).key])}`:""),$1=user_derived( -()=>get$4(isCustomRealTime)?"pr-8":"");Input(node_5,{get id(){return get$4(field).key},get value(){return get$4(currentValue)},oninput:e=>{$$props.onConfigChange(get$4(field).key,e.currentTarget.value)},get placeholder(){return get$4($0)},get class(){return`w-full ${get$4($1)??""}`}})}var node_6=sibling(node_5,2);{var consequent_2=$$anchor4=>{var button=root_6$e();button.__click=()=>{settingsStore.resetParameterToServerDefault(get$4(field).key),$$props.onConfigChange(get$4(field).key,"")};var node_7=child( -button);Rotate_ccw(node_7,{class:"h-3 w-3"}),reset(button),append($$anchor4,button)};if_block(node_6,$$render=>{get$4(isCustomRealTime)&&$$render(consequent_2)})}reset(div_2);var node_8=sibling(div_2,2);{var consequent_3=$$anchor4=>{var p_1=root_7$e(),node_9=child(p_1);html$6(node_9,()=>get$4(field).help||SETTING_CONFIG_INFO[get$4(field).key]),reset(p_1),append($$anchor4,p_1)};if_block(node_8,$$render=>{(get$4(field).help||SETTING_CONFIG_INFO[get$4(field).key])&&$$render(consequent_3)})}append($$anchor3, -fragment_1)},alternate_2=$$anchor3=>{var fragment_5=comment$2(),node_10=first_child(fragment_5);{var consequent_8=$$anchor4=>{var fragment_6=root_9$a(),node_11=first_child(fragment_6);Label(node_11,{get for(){return get$4(field).key},class:"block flex items-center gap-1.5 text-sm font-medium",children:($$anchor5,$$slotProps)=>{next$1();var fragment_7=root_10$8(),text_1=first_child(fragment_7),node_12=sibling(text_1);{var consequent_5=$$anchor6=>{Flask_conical($$anchor6,{class:"h-3.5 w-3.5 text-m\ -uted-foreground"})};if_block(node_12,$$render=>{get$4(field).isExperimental&&$$render(consequent_5)})}template_effect(()=>set_text(text_1,`${get$4(field).label??""} `)),append($$anchor5,fragment_7)},$$slots:{default:!0}});var node_13=sibling(node_11,2);{let $0=user_derived(()=>String($$props.localConfig[get$4(field).key]??""));Textarea(node_13,{get id(){return get$4(field).key},get value(){return get$4($0)},onchange:e=>$$props.onConfigChange(get$4(field).key,e.currentTarget.value),placeholder:"", -class:"min-h-[10rem] w-full md:max-w-2xl"})}var node_14=sibling(node_13,2);{var consequent_6=$$anchor5=>{var p_2=root_12$4(),text_2=child(p_2,!0);reset(p_2),template_effect(()=>set_text(text_2,get$4(field).help||SETTING_CONFIG_INFO[get$4(field).key])),append($$anchor5,p_2)};if_block(node_14,$$render=>{(get$4(field).help||SETTING_CONFIG_INFO[get$4(field).key])&&$$render(consequent_6)})}var node_15=sibling(node_14,2);{var consequent_7=$$anchor5=>{var div_3=root_13$7(),node_16=child(div_3);{let $0=user_derived( -()=>!!($$props.localConfig.showSystemMessage??!0));Checkbox(node_16,{id:"showSystemMessage",get checked(){return get$4($0)},onCheckedChange:checked=>$$props.onConfigChange("showSystemMessage",!!checked)})}var node_17=sibling(node_16,2);Label(node_17,{for:"showSystemMessage",class:"cursor-pointer text-sm font-normal",children:($$anchor6,$$slotProps)=>{next$1();var text_3=text$8("Show system message in conversations");append($$anchor6,text_3)},$$slots:{default:!0}}),reset(div_3),append($$anchor5,div_3)}; -if_block(node_15,$$render=>{get$4(field).key===SETTINGS_KEYS.SYSTEM_MESSAGE&&$$render(consequent_7)})}append($$anchor4,fragment_6)},alternate_1=$$anchor4=>{var fragment_9=comment$2(),node_18=first_child(fragment_9);{var consequent_16=$$anchor5=>{const selectedOption=user_derived(()=>get$4(field).options?.find(opt=>opt.value===$$props.localConfig[get$4(field).key])),currentValue=user_derived(()=>$$props.localConfig[get$4(field).key]),serverDefault=user_derived(()=>get$4(sp)[get$4(field).key]),isCustomRealTime=user_derived( -()=>get$4(serverDefault)==null||get$4(currentValue)===""||get$4(currentValue)===void 0?!1:get$4(currentValue)!==get$4(serverDefault));var fragment_10=root_16$2(),div_4=first_child(fragment_10),node_19=child(div_4);Label(node_19,{get for(){return get$4(field).key},class:"flex items-center gap-1.5 text-sm font-medium",children:($$anchor6,$$slotProps)=>{next$1();var fragment_11=root_17$1(),text_4=first_child(fragment_11),node_20=sibling(text_4);{var consequent_9=$$anchor7=>{Flask_conical($$anchor7, -{class:"h-3.5 w-3.5 text-muted-foreground"})};if_block(node_20,$$render=>{get$4(field).isExperimental&&$$render(consequent_9)})}template_effect(()=>set_text(text_4,`${get$4(field).label??""} `)),append($$anchor6,fragment_11)},$$slots:{default:!0}});var node_21=sibling(node_19,2);{var consequent_10=$$anchor6=>{ChatSettingsParameterSourceIndicator($$anchor6,{})};if_block(node_21,$$render=>{get$4(isCustomRealTime)&&$$render(consequent_10)})}reset(div_4);var node_22=sibling(div_4,2);component(node_22, -()=>Root,($$anchor6,Select_Root)=>{Select_Root($$anchor6,{type:"single",get value(){return get$4(currentValue)},onValueChange:value=>{get$4(field).key===SETTINGS_KEYS.THEME&&value&&$$props.onThemeChange?$$props.onThemeChange(value):$$props.onConfigChange(get$4(field).key,value)},children:($$anchor7,$$slotProps)=>{var fragment_14=root_20$3(),div_5=first_child(fragment_14),node_23=child(div_5);component(node_23,()=>Select_trigger,($$anchor8,Select_Trigger)=>{Select_Trigger($$anchor8,{class:"w-full", -children:($$anchor9,$$slotProps2)=>{var div_6=root_21$2(),node_24=child(div_6);{var consequent_11=$$anchor10=>{const IconComponent=user_derived(()=>get$4(selectedOption).icon);var fragment_15=comment$2(),node_25=first_child(fragment_15);component(node_25,()=>get$4(IconComponent),($$anchor11,IconComponent_1)=>{IconComponent_1($$anchor11,{class:"h-4 w-4"})}),append($$anchor10,fragment_15)};if_block(node_24,$$render=>{get$4(selectedOption)?.icon&&$$render(consequent_11)})}var text_5=sibling(node_24); -reset(div_6),template_effect($0=>set_text(text_5,` ${$0??""}`),[()=>get$4(selectedOption)?.label||`Select ${get$4(field).label.toLowerCase()}`]),append($$anchor9,div_6)},$$slots:{default:!0}})});var node_26=sibling(node_23,2);{var consequent_12=$$anchor8=>{var button_1=root_23$1();button_1.__click=()=>{settingsStore.resetParameterToServerDefault(get$4(field).key),$$props.onConfigChange(get$4(field).key,"")};var node_27=child(button_1);Rotate_ccw(node_27,{class:"h-3 w-3"}),reset(button_1),append( -$$anchor8,button_1)};if_block(node_26,$$render=>{get$4(isCustomRealTime)&&$$render(consequent_12)})}reset(div_5);var node_28=sibling(div_5,2);component(node_28,()=>Select_content,($$anchor8,Select_Content)=>{Select_Content($$anchor8,{children:($$anchor9,$$slotProps2)=>{var fragment_16=comment$2(),node_29=first_child(fragment_16);{var consequent_14=$$anchor10=>{var fragment_17=comment$2(),node_30=first_child(fragment_17);each(node_30,17,()=>get$4(field).options,option2=>option2.value,($$anchor11,option2)=>{ -var fragment_18=comment$2(),node_31=first_child(fragment_18);component(node_31,()=>Select_item,($$anchor12,Select_Item)=>{Select_Item($$anchor12,{get value(){return get$4(option2).value},get label(){return get$4(option2).label},children:($$anchor13,$$slotProps3)=>{var div_7=root_27$1(),node_32=child(div_7);{var consequent_13=$$anchor14=>{const IconComponent=user_derived(()=>get$4(option2).icon);var fragment_19=comment$2(),node_33=first_child(fragment_19);component(node_33,()=>get$4(IconComponent), -($$anchor15,IconComponent_2)=>{IconComponent_2($$anchor15,{class:"h-4 w-4"})}),append($$anchor14,fragment_19)};if_block(node_32,$$render=>{get$4(option2).icon&&$$render(consequent_13)})}var text_6=sibling(node_32);reset(div_7),template_effect(()=>set_text(text_6,` ${get$4(option2).label??""}`)),append($$anchor13,div_7)},$$slots:{default:!0}})}),append($$anchor11,fragment_18)}),append($$anchor10,fragment_17)};if_block(node_29,$$render=>{get$4(field).options&&$$render(consequent_14)})}append($$anchor9, -fragment_16)},$$slots:{default:!0}})}),append($$anchor7,fragment_14)},$$slots:{default:!0}})});var node_34=sibling(node_22,2);{var consequent_15=$$anchor6=>{var p_3=root_29(),text_7=child(p_3,!0);reset(p_3),template_effect(()=>set_text(text_7,get$4(field).help||SETTING_CONFIG_INFO[get$4(field).key])),append($$anchor6,p_3)};if_block(node_34,$$render=>{(get$4(field).help||SETTING_CONFIG_INFO[get$4(field).key])&&$$render(consequent_15)})}append($$anchor5,fragment_10)},alternate=$$anchor5=>{var fragment_20=comment$2(), -node_35=first_child(fragment_20);{var consequent_19=$$anchor6=>{var div_8=root_31(),node_36=child(div_8);{let $0=user_derived(()=>!!$$props.localConfig[get$4(field).key]);Checkbox(node_36,{get id(){return get$4(field).key},get checked(){return get$4($0)},onCheckedChange:checked=>$$props.onConfigChange(get$4(field).key,checked),class:"mt-1"})}var div_9=sibling(node_36,2),label=child(div_9),text_8=child(label),node_37=sibling(text_8);{var consequent_17=$$anchor7=>{Flask_conical($$anchor7,{class:"h\ --3.5 w-3.5 text-muted-foreground"})};if_block(node_37,$$render=>{get$4(field).isExperimental&&$$render(consequent_17)})}reset(label);var node_38=sibling(label,2);{var consequent_18=$$anchor7=>{var p_4=root_33(),text_9=child(p_4,!0);reset(p_4),template_effect(()=>set_text(text_9,get$4(field).help||SETTING_CONFIG_INFO[get$4(field).key])),append($$anchor7,p_4)};if_block(node_38,$$render=>{(get$4(field).help||SETTING_CONFIG_INFO[get$4(field).key])&&$$render(consequent_18)})}reset(div_9),reset(div_8), -template_effect(()=>{set_attribute(label,"for",get$4(field).key),set_text(text_8,`${get$4(field).label??""} `)}),append($$anchor6,div_8)};if_block(node_35,$$render=>{get$4(field).type===SettingsFieldType.CHECKBOX&&$$render(consequent_19)},!0)}append($$anchor5,fragment_20)};if_block(node_18,$$render=>{get$4(field).type===SettingsFieldType.SELECT?$$render(consequent_16):$$render(alternate,!1)},!0)}append($$anchor4,fragment_9)};if_block(node_10,$$render=>{get$4(field).type===SettingsFieldType.TEXTAREA? -$$render(consequent_8):$$render(alternate_1,!1)},!0)}append($$anchor3,fragment_5)};if_block(node_1,$$render=>{get$4(field).type===SettingsFieldType.INPUT?$$render(consequent_4):$$render(alternate_2,!1)})}reset(div),append($$anchor2,div)}),append($$anchor,fragment),pop()}delegate(["click"]);var root_1$k=from_html("<!> Export conversations",1),root_3$l=from_html('<li class="truncate"> </li>'),root_4$a=from_html('<li class="italic"> </li>'),root_2$p=from_html('<div class="mt-4 grid overflow-x-auto \ -rounded-lg border border-border/50 bg-muted/30 p-4"><h5 class="mb-2 text-sm font-medium"> </h5> <ul class="space-y-1 text-sm text-muted-foreground"><!> <!></ul></div>'),root_5$e=from_html("<!> Import conversations",1),root_7$d=from_html('<li class="truncate"> </li>'),root_8$a=from_html('<li class="italic"> </li>'),root_6$d=from_html('<div class="mt-4 grid overflow-x-auto rounded-lg border border-border/50 bg-muted/30 p-4"><h5 class="mb-2 text-sm font-medium"> </h5> <ul class="space-y-1 text-sm t\ -ext-muted-foreground"><!> <!></ul></div>'),root_9$9=from_html("<!> Delete all conversations",1),root$y=from_html(`<div class="space-y-6"><div class="space-y-4"><div class="grid"><h4 class="mb-2 text-sm font-medium">Export Conversations</h4> <p class="mb-4 text-sm text-muted-foreground">Download all your conversations as a JSON file. This includes all messages, attachments, and - conversation history.</p> <!> <!></div> <div class="grid border-t border-border/30 pt-4"><h4 class="mb-2 text-sm font-medium">Import Conversations</h4> <p class="mb-4 text-sm text-muted-foreground">Import one or more conversations from a previously exported JSON file. This will merge with - your existing conversations.</p> <!> <!></div> <div class="grid border-t border-border/30 pt-4"><h4 class="mb-2 text-sm font-medium text-destructive">Delete All Conversations</h4> <p class="mb-4 text-sm text-muted-foreground">Permanently delete all conversations and their messages. This action cannot be undone. - Consider exporting your conversations first if you want to keep a backup.</p> <!></div></div></div> <!> <!> <!>`,1);function ChatSettingsImportExportTab($$anchor,$$props){push$1($$props,!0);let exportedConversations=state$1(proxy([])),importedConversations=state$1(proxy([])),showExportSummary=state$1(!1),showImportSummary=state$1(!1),showExportDialog=state$1(!1),showImportDialog=state$1(!1),availableConversations=state$1(proxy([])),messageCountMap=state$1(proxy(new Map)),fullImportData=state$1( -proxy([])),showDeleteDialog=state$1(!1);async function handleExportClick(){try{const allConversations=conversations();if(allConversations.length===0){toast.info("No conversations to export");return}const conversationsWithMessages=await Promise.all(allConversations.map(async conv=>{const messages=await conversationsStore.getConversationMessages(conv.id);return{conv,messages}}));set$1(messageCountMap,createMessageCountMap(conversationsWithMessages),!0),set$1(availableConversations,allConversations, -!0),set$1(showExportDialog,!0)}catch(err){console.error("Failed to load conversations:",err),alert("Failed to load conversations")}}async function handleExportConfirm(selectedConversations){try{const allData=await Promise.all(selectedConversations.map(async conv=>{const messages=await conversationsStore.getConversationMessages(conv.id);return{conv:snapshot(conv),messages:snapshot(messages)}}));conversationsStore.downloadConversationFile(allData,`${new Date().toISOString().split(ISO_DATE_TIME_SEPARATOR)[0]}\ -_conversations.json`),set$1(exportedConversations,selectedConversations,!0),set$1(showExportSummary,!0),set$1(showImportSummary,!1),set$1(showExportDialog,!1)}catch(err){console.error("Export failed:",err),alert("Failed to export conversations")}}async function handleImportClick(){try{const input=document.createElement("input");input.type="file",input.accept=".json",input.onchange=async e=>{const file=e.target?.files?.[0];if(file)try{const text2=await file.text(),parsedData=JSON.parse(text2);let importedData; -if(Array.isArray(parsedData))importedData=parsedData;else if(parsedData&&typeof parsedData=="object"&&"conv"in parsedData&&"messages"in parsedData)importedData=[parsedData];else throw new Error("Invalid file format: expected array of conversations or single conversation object");set$1(fullImportData,importedData,!0),set$1(availableConversations,importedData.map(item=>item.conv),!0),set$1(messageCountMap,createMessageCountMap(importedData),!0),set$1(showImportDialog,!0)}catch(err){const message=err instanceof -Error?err.message:"Unknown error";console.error("Failed to parse file:",err),alert(`Failed to parse file: ${message}`)}},input.click()}catch(err){console.error("Import failed:",err),alert("Failed to import conversations")}}async function handleImportConfirm(selectedConversations){try{const selectedIds=new Set(selectedConversations.map(c2=>c2.id)),selectedData=snapshot(get$4(fullImportData)).filter(item=>selectedIds.has(item.conv.id));await conversationsStore.importConversationsData(selectedData), -set$1(importedConversations,selectedConversations,!0),set$1(showImportSummary,!0),set$1(showExportSummary,!1),set$1(showImportDialog,!1)}catch(err){console.error("Import failed:",err),alert("Failed to import conversations. Please check the file format.")}}async function handleDeleteAllClick(){try{if(conversations().length===0){toast.info("No conversations to delete");return}set$1(showDeleteDialog,!0)}catch(err){console.error("Failed to load conversations for deletion:",err),toast.error("Failed t\ -o load conversations")}}async function handleDeleteAllConfirm(){try{await conversationsStore.deleteAll(),set$1(showDeleteDialog,!1)}catch(err){console.error("Failed to delete conversations:",err)}}function handleDeleteAllCancel(){set$1(showDeleteDialog,!1)}var fragment=root$y(),div=first_child(fragment),div_1=child(div),div_2=child(div_1),node2=sibling(child(div_2),4);Button(node2,{class:"w-full justify-start justify-self-start md:w-auto",onclick:handleExportClick,variant:"outline",children:($$anchor2,$$slotProps)=>{ -var fragment_1=root_1$k(),node_1=first_child(fragment_1);Download(node_1,{class:"mr-2 h-4 w-4"}),next$1(),append($$anchor2,fragment_1)},$$slots:{default:!0}});var node_2=sibling(node2,2);{var consequent_1=$$anchor2=>{var div_3=root_2$p(),h5=child(div_3),text_1=child(h5);reset(h5);var ul=sibling(h5,2),node_3=child(ul);each(node_3,17,()=>get$4(exportedConversations).slice(0,10),conv=>conv.id,($$anchor3,conv)=>{var li2=root_3$l(),text_2=child(li2);reset(li2),template_effect(()=>set_text(text_2,`• ${get$4( -conv).name||"Untitled conversation"}`)),append($$anchor3,li2)});var node_4=sibling(node_3,2);{var consequent=$$anchor3=>{var li_1=root_4$a(),text_3=child(li_1);reset(li_1),template_effect(()=>set_text(text_3,`... and ${get$4(exportedConversations).length-10} more`)),append($$anchor3,li_1)};if_block(node_4,$$render=>{get$4(exportedConversations).length>10&&$$render(consequent)})}reset(ul),reset(div_3),template_effect(()=>set_text(text_1,`Exported ${get$4(exportedConversations).length??""} convers\ -ation${get$4(exportedConversations).length===1?"":"s"}`)),append($$anchor2,div_3)};if_block(node_2,$$render=>{get$4(showExportSummary)&&get$4(exportedConversations).length>0&&$$render(consequent_1)})}reset(div_2);var div_4=sibling(div_2,2),node_5=sibling(child(div_4),4);Button(node_5,{class:"w-full justify-start justify-self-start md:w-auto",onclick:handleImportClick,variant:"outline",children:($$anchor2,$$slotProps)=>{var fragment_2=root_5$e(),node_6=first_child(fragment_2);Upload(node_6,{class:"\ -mr-2 h-4 w-4"}),next$1(),append($$anchor2,fragment_2)},$$slots:{default:!0}});var node_7=sibling(node_5,2);{var consequent_3=$$anchor2=>{var div_5=root_6$d(),h5_1=child(div_5),text_4=child(h5_1);reset(h5_1);var ul_1=sibling(h5_1,2),node_8=child(ul_1);each(node_8,17,()=>get$4(importedConversations).slice(0,10),conv=>conv.id,($$anchor3,conv)=>{var li_2=root_7$d(),text_5=child(li_2);reset(li_2),template_effect(()=>set_text(text_5,`• ${get$4(conv).name||"Untitled conversation"}`)),append($$anchor3, -li_2)});var node_9=sibling(node_8,2);{var consequent_2=$$anchor3=>{var li_3=root_8$a(),text_6=child(li_3);reset(li_3),template_effect(()=>set_text(text_6,`... and ${get$4(importedConversations).length-10} more`)),append($$anchor3,li_3)};if_block(node_9,$$render=>{get$4(importedConversations).length>10&&$$render(consequent_2)})}reset(ul_1),reset(div_5),template_effect(()=>set_text(text_4,`Imported ${get$4(importedConversations).length??""} conversation${get$4(importedConversations).length===1?"": -"s"}`)),append($$anchor2,div_5)};if_block(node_7,$$render=>{get$4(showImportSummary)&&get$4(importedConversations).length>0&&$$render(consequent_3)})}reset(div_4);var div_6=sibling(div_4,2),node_10=sibling(child(div_6),4);Button(node_10,{class:"text-destructive-foreground w-full justify-start justify-self-start bg-destructive hover:bg-destructive/80 md:w-auto",onclick:handleDeleteAllClick,variant:"destructive",children:($$anchor2,$$slotProps)=>{var fragment_3=root_9$9(),node_11=first_child(fragment_3); -Trash_2(node_11,{class:"mr-2 h-4 w-4"}),next$1(),append($$anchor2,fragment_3)},$$slots:{default:!0}}),reset(div_6),reset(div_1),reset(div);var node_12=sibling(div,2);DialogConversationSelection(node_12,{get conversations(){return get$4(availableConversations)},get messageCountMap(){return get$4(messageCountMap)},mode:"export",onCancel:()=>set$1(showExportDialog,!1),onConfirm:handleExportConfirm,get open(){return get$4(showExportDialog)},set open($$value){set$1(showExportDialog,$$value,!0)}});var node_13=sibling( -node_12,2);DialogConversationSelection(node_13,{get conversations(){return get$4(availableConversations)},get messageCountMap(){return get$4(messageCountMap)},mode:"import",onCancel:()=>set$1(showImportDialog,!1),onConfirm:handleImportConfirm,get open(){return get$4(showImportDialog)},set open($$value){set$1(showImportDialog,$$value,!0)}});var node_14=sibling(node_13,2);DialogConfirmation(node_14,{title:"Delete all conversations",description:"Are you sure you want to delete all conversations? Th\ -is action cannot be undone and will permanently remove all your conversations and messages.",confirmText:"Delete All",cancelText:"Cancel",variant:"destructive",get icon(){return Trash_2},onConfirm:handleDeleteAllConfirm,onCancel:handleDeleteAllCancel,get open(){return get$4(showDeleteDialog)},set open($$value){set$1(showDeleteDialog,$$value,!0)}}),append($$anchor,fragment),pop()}var root_1$j=from_html("<!> Custom",1);function ChatSettingsParameterSourceIndicator($$anchor,$$props){let className=prop( -$$props,"class",3,"");Badge($$anchor,{variant:"secondary",get class(){return`h-5 bg-orange-100 px-1.5 py-0.5 text-xs text-orange-800 dark:bg-orange-900 dark:text-orange-200 ${className()??""}`},children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$j(),node2=first_child(fragment_1);Wrench(node2,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor2,fragment_1)},$$slots:{default:!0}})}var root_1$i=from_html('<div class="relative"><!> <!> <!></div>'),root_3$k=from_html('<div class="flex items-center \ -gap-2"><!> New chat</div> <!>',1),root_4$9=from_html('<div class="flex items-center gap-2"><!> Search</div> <!>',1),root_5$d=from_html('<div class="flex items-center gap-2"><!> MCP Servers</div>'),root_2$o=from_html("<!> <!> <!>",1),root$x=from_html('<div class="my-1 space-y-1"><!></div>');function ChatSidebarActions($$anchor,$$props){push$1($$props,!0);let isSearchModeActive=prop($$props,"isSearchModeActive",15),searchQuery=prop($$props,"searchQuery",15),searchInput=state$1(null);const chatSettingsDialog=getChatSettingsDialogContext(); -function handleSearchModeDeactivate(){isSearchModeActive(!1),searchQuery("")}user_effect(()=>{isSearchModeActive()&&get$4(searchInput)?.focus()});var div=root$x(),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$i(),node_1=child(div_1);Search(node_1,{class:"absolute top-2.5 left-2 h-4 w-4 text-muted-foreground"});var node_2=sibling(node_1,2);Input(node_2,{onkeydown:e=>e.key==="Escape"&&handleSearchModeDeactivate(),placeholder:"Search conversations...",class:"pl-8",get ref(){return get$4( -searchInput)},set ref($$value){set$1(searchInput,$$value,!0)},get value(){return searchQuery()},set value($$value){searchQuery($$value)}});var node_3=sibling(node_2,2);X(node_3,{class:"cursor-pointertext-muted-foreground absolute top-2.5 right-2 h-4 w-4",onclick:handleSearchModeDeactivate}),reset(div_1),append($$anchor2,div_1)},alternate=$$anchor2=>{var fragment=root_2$o(),node_4=first_child(fragment);Button(node_4,{class:"w-full justify-between backdrop-blur-none! hover:[&>kbd]:opacity-100",href:"\ -?new_chat=true#/",get onclick(){return $$props.handleMobileSidebarItemClick},variant:"ghost",children:($$anchor3,$$slotProps)=>{var fragment_1=root_3$k(),div_2=first_child(fragment_1),node_5=child(div_2);Square_pen(node_5,{class:"h-4 w-4"}),next$1(),reset(div_2);var node_6=sibling(div_2,2);KeyboardShortcutInfo(node_6,{keys:["shift","cmd","o"]}),append($$anchor3,fragment_1)},$$slots:{default:!0}});var node_7=sibling(node_4,2);Button(node_7,{class:"w-full justify-between backdrop-blur-none! hover:\ -[&>kbd]:opacity-100",onclick:()=>{isSearchModeActive(!0)},variant:"ghost",children:($$anchor3,$$slotProps)=>{var fragment_2=root_4$9(),div_3=first_child(fragment_2),node_8=child(div_3);Search(node_8,{class:"h-4 w-4"}),next$1(),reset(div_3);var node_9=sibling(div_3,2);KeyboardShortcutInfo(node_9,{keys:["cmd","k"]}),append($$anchor3,fragment_2)},$$slots:{default:!0}});var node_10=sibling(node_7,2);Button(node_10,{class:"w-full justify-between backdrop-blur-none! hover:[&>kbd]:opacity-100",onclick:()=>{ -chatSettingsDialog.open(SETTINGS_SECTION_TITLES.MCP)},variant:"ghost",children:($$anchor3,$$slotProps)=>{var div_4=root_5$d(),node_11=child(div_4);McpLogo(node_11,{class:"h-4 w-4"}),next$1(),reset(div_4),append($$anchor3,div_4)},$$slots:{default:!0}}),append($$anchor2,fragment)};if_block(node2,$$render=>{isSearchModeActive()?$$render(consequent):$$render(alternate,!1)})}reset(div),append($$anchor,div),pop()}var root_2$n=from_html('<a href="#/"><h1 class="inline-flex items-center gap-1 px-2 text-\ -xl font-semibold">llama.cpp</h1></a> <!>',1),root_10$7=from_html('<div class="px-2 py-4 text-center"><p class="mb-4 p-4 text-sm text-muted-foreground"> </p></div>'),root_7$c=from_html("<!> <!>",1),root_3$j=from_html("<!> <!>",1),root_1$h=from_html("<!> <!>",1),root_12$3=from_html('<div class="flex items-center gap-2 py-2"><!> <!></div>'),root$w=from_html("<!> <!> <!>",1);function ChatSidebar($$anchor,$$props){push$1($$props,!0);const sidebar=useSidebar();let currentChatId=user_derived(()=>page$1. -params.id),isSearchModeActive=state$1(!1),searchQuery=state$1(""),showDeleteDialog=state$1(!1),deleteWithForks=state$1(!1),showEditDialog=state$1(!1),selectedConversation=state$1(null),editedName=state$1(""),selectedConversationNamePreview=user_derived(()=>get$4(selectedConversation)?getPreviewText(get$4(selectedConversation).name):""),filteredConversations=user_derived(()=>get$4(searchQuery).trim().length>0?conversations().filter(conversation=>conversation.name.toLowerCase().includes(get$4(searchQuery). -toLowerCase())):conversations()),conversationTree=user_derived(()=>buildConversationTree(get$4(filteredConversations))),selectedConversationHasDescendants=user_derived(()=>{if(!get$4(selectedConversation))return!1;const allConvs=conversations(),queue=[get$4(selectedConversation).id];for(;queue.length>0;){const parentId=queue.pop();for(const c2 of allConvs)if(c2.forkedFromConversationId===parentId)return!0}return!1});async function handleDeleteConversation(id2){const conversation=conversations(). -find(conv=>conv.id===id2);conversation&&(set$1(selectedConversation,conversation,!0),set$1(deleteWithForks,!1),set$1(showDeleteDialog,!0))}async function handleEditConversation(id2){const conversation=conversations().find(conv=>conv.id===id2);conversation&&(set$1(selectedConversation,conversation,!0),set$1(editedName,conversation.name,!0),set$1(showEditDialog,!0))}function handleConfirmDelete(){if(get$4(selectedConversation)){const convId=get$4(selectedConversation).id,withForks=get$4(deleteWithForks); -set$1(showDeleteDialog,!1),setTimeout(()=>{conversationsStore.deleteConversation(convId,{deleteWithForks:withForks})},100)}}function handleConfirmEdit(){!get$4(editedName).trim()||!get$4(selectedConversation)||(set$1(showEditDialog,!1),conversationsStore.updateConversationName(get$4(selectedConversation).id,get$4(editedName)),set$1(selectedConversation,null))}function handleMobileSidebarItemClick(){sidebar.isMobile&&sidebar.toggle()}function activateSearchMode(){set$1(isSearchModeActive,!0)}function editActiveConversation(){ -if(get$4(currentChatId)&&get$4(filteredConversations).find(conv=>conv.id===get$4(currentChatId))){const event2=new CustomEvent("edit-active-conversation",{detail:{conversationId:get$4(currentChatId)}});document.dispatchEvent(event2)}}async function selectConversation(id2){get$4(isSearchModeActive)&&(set$1(isSearchModeActive,!1),set$1(searchQuery,"")),await goto(`#/chat/${id2}`)}function handleStopGeneration(id2){chatStore.stopGenerationForChat(id2)}var $$exports={handleMobileSidebarItemClick,activateSearchMode, -editActiveConversation},fragment=root$w(),node2=first_child(fragment);Scroll_area(node2,{class:"h-[100vh]",children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$h(),node_1=first_child(fragment_1);component(node_1,()=>Sidebar_header,($$anchor3,Sidebar_Header)=>{Sidebar_Header($$anchor3,{class:" top-0 z-10 gap-4 bg-sidebar/50 p-4 pb-2 backdrop-blur-lg md:sticky",children:($$anchor4,$$slotProps2)=>{var fragment_2=root_2$n(),a=first_child(fragment_2);a.__click=handleMobileSidebarItemClick;var node_2=sibling( -a,2);ChatSidebarActions(node_2,{handleMobileSidebarItemClick,get isSearchModeActive(){return get$4(isSearchModeActive)},set isSearchModeActive($$value){set$1(isSearchModeActive,$$value,!0)},get searchQuery(){return get$4(searchQuery)},set searchQuery($$value){set$1(searchQuery,$$value,!0)}}),append($$anchor4,fragment_2)},$$slots:{default:!0}})});var node_3=sibling(node_1,2);component(node_3,()=>Sidebar_group,($$anchor3,Sidebar_Group)=>{Sidebar_Group($$anchor3,{class:"mt-2 space-y-2 p-0 px-4",children:($$anchor4,$$slotProps2)=>{ -var fragment_3=root_3$j(),node_4=first_child(fragment_3);{var consequent=$$anchor5=>{var fragment_4=comment$2(),node_5=first_child(fragment_4);component(node_5,()=>Sidebar_group_label,($$anchor6,Sidebar_GroupLabel)=>{Sidebar_GroupLabel($$anchor6,{children:($$anchor7,$$slotProps3)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,get$4(isSearchModeActive)?"Search results":"Conversations")),append($$anchor7,text2)},$$slots:{default:!0}})}),append($$anchor5,fragment_4)};if_block(node_4, -$$render=>{(get$4(filteredConversations).length>0&&get$4(isSearchModeActive)||!get$4(isSearchModeActive))&&$$render(consequent)})}var node_6=sibling(node_4,2);component(node_6,()=>Sidebar_group_content,($$anchor5,Sidebar_GroupContent)=>{Sidebar_GroupContent($$anchor5,{children:($$anchor6,$$slotProps3)=>{var fragment_6=comment$2(),node_7=first_child(fragment_6);component(node_7,()=>Sidebar_menu,($$anchor7,Sidebar_Menu)=>{Sidebar_Menu($$anchor7,{children:($$anchor8,$$slotProps4)=>{var fragment_7=root_7$c(), -node_8=first_child(fragment_7);each(node_8,17,()=>get$4(conversationTree),({conversation,depth})=>conversation.id,($$anchor9,$$item)=>{let conversation=()=>get$4($$item).conversation,depth=()=>get$4($$item).depth;var fragment_8=comment$2(),node_9=first_child(fragment_8);component(node_9,()=>Sidebar_menu_item,($$anchor10,Sidebar_MenuItem)=>{Sidebar_MenuItem($$anchor10,{class:"mb-1 p-0",children:($$anchor11,$$slotProps5)=>{{let $0=user_derived(()=>({id:conversation().id,name:conversation().name,lastModified:conversation(). -lastModified,currNode:conversation().currNode,forkedFromConversationId:conversation().forkedFromConversationId})),$1=user_derived(()=>get$4(currentChatId)===conversation().id);ChatSidebarConversationItem($$anchor11,{get conversation(){return get$4($0)},get depth(){return depth()},handleMobileSidebarItemClick,get isActive(){return get$4($1)},onSelect:selectConversation,onEdit:handleEditConversation,onDelete:handleDeleteConversation,onStop:handleStopGeneration})}},$$slots:{default:!0}})}),append($$anchor9, -fragment_8)});var node_10=sibling(node_8,2);{var consequent_1=$$anchor9=>{var div=root_10$7(),p2=child(div),text_1=child(p2,!0);reset(p2),reset(div),template_effect(()=>set_text(text_1,get$4(searchQuery).length>0?"No results found":get$4(isSearchModeActive)?"Start typing to see results":"No conversations yet")),append($$anchor9,div)};if_block(node_10,$$render=>{get$4(conversationTree).length===0&&$$render(consequent_1)})}append($$anchor8,fragment_7)},$$slots:{default:!0}})}),append($$anchor6,fragment_6)}, -$$slots:{default:!0}})}),append($$anchor4,fragment_3)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)},$$slots:{default:!0}});var node_11=sibling(node2,2);{let $0=user_derived(()=>get$4(selectedConversation)?`Are you sure you want to delete "${get$4(selectedConversationNamePreview)}"? This action cannot be undone and will permanently remove all messages in this conversation.`:"");DialogConfirmation(node_11,{title:"Delete Conversation",get description(){return get$4($0)},confirmText:"Delet\ -e",cancelText:"Cancel",variant:"destructive",get icon(){return Trash_2},onConfirm:handleConfirmDelete,onCancel:()=>{set$1(showDeleteDialog,!1),set$1(selectedConversation,null)},get open(){return get$4(showDeleteDialog)},set open($$value){set$1(showDeleteDialog,$$value,!0)},children:($$anchor2,$$slotProps)=>{var fragment_10=comment$2(),node_12=first_child(fragment_10);{var consequent_2=$$anchor3=>{var div_1=root_12$3(),node_13=child(div_1);Checkbox(node_13,{id:"delete-with-forks",get checked(){return get$4( -deleteWithForks)},set checked($$value){set$1(deleteWithForks,$$value,!0)}});var node_14=sibling(node_13,2);Label(node_14,{for:"delete-with-forks",class:"text-sm",children:($$anchor4,$$slotProps2)=>{next$1();var text_2=text$8("Also delete all forked conversations");append($$anchor4,text_2)},$$slots:{default:!0}}),reset(div_1),append($$anchor3,div_1)};if_block(node_12,$$render=>{get$4(selectedConversationHasDescendants)&&$$render(consequent_2)})}append($$anchor2,fragment_10)},$$slots:{default:!0}})} -var node_15=sibling(node_11,2);return DialogConfirmation(node_15,{title:"Edit Conversation Name",description:"",confirmText:"Save",cancelText:"Cancel",get icon(){return Pencil},onConfirm:handleConfirmEdit,onCancel:()=>{set$1(showEditDialog,!1),set$1(selectedConversation,null)},onKeydown:e=>{e.key==="Enter"&&(e.preventDefault(),e.stopImmediatePropagation(),handleConfirmEdit())},get open(){return get$4(showEditDialog)},set open($$value){set$1(showEditDialog,$$value,!0)},children:($$anchor2,$$slotProps)=>{ -Input($$anchor2,{class:"text-foreground",placeholder:"Enter a new name",type:"text",get value(){return get$4(editedName)},set value($$value){set$1(editedName,$$value,!0)}})},$$slots:{default:!0}}),append($$anchor,fragment),pop($$exports)}delegate(["click"]);var root_3$i=from_html('<a class="flex shrink-0 items-center text-muted-foreground transition-colors hover:text-foreground"><!></a>'),root_4$8=from_html("<p>See parent conversation</p>"),root_2$m=from_html("<!> <!>",1),root_7$b=from_html('<di\ -v class="stop-button flex h-4 w-4 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground transition-colors hover:text-foreground svelte-76ksb2" role="button" tabindex="0" aria-label="Stop generation"><!> <!></div>'),root_8$9=from_html("<p>Stop generation</p>"),root_6$c=from_html("<!> <!>",1),root_9$8=from_html('<div class="actions flex items-center"><!></div>'),root$v=from_html('<button><div class="flex min-w-0 flex-1 items-center gap-2"><!> <!> <span class="truncate \ -text-sm font-medium"> </span></div> <!></button>');function ChatSidebarConversationItem($$anchor,$$props){push$1($$props,!0);let isActive=prop($$props,"isActive",3,!1),depth=prop($$props,"depth",3,0),renderActionsDropdown=state$1(!1),dropdownOpen=state$1(!1),isLoading2=user_derived(()=>getAllLoadingChats().includes($$props.conversation.id));function handleEdit(event2){event2.stopPropagation(),$$props.onEdit?.($$props.conversation.id)}function handleDelete2(event2){event2.stopPropagation(),$$props. -onDelete?.($$props.conversation.id)}function handleStop(event2){event2.stopPropagation(),$$props.onStop?.($$props.conversation.id)}function handleGlobalEditEvent(event2){event2.detail.conversationId===$$props.conversation.id&&isActive()&&handleEdit(event2)}function handleMouseLeave(){get$4(dropdownOpen)||set$1(renderActionsDropdown,!1)}function handleMouseOver(){set$1(renderActionsDropdown,!0)}function handleSelect(){$$props.onSelect?.($$props.conversation.id)}user_effect(()=>{get$4(dropdownOpen)|| -set$1(renderActionsDropdown,!1)}),onMount$1(()=>(document.addEventListener("edit-active-conversation",handleGlobalEditEvent),()=>{document.removeEventListener("edit-active-conversation",handleGlobalEditEvent)}));var button=root$v();button.__click=handleSelect,button.__mouseover=handleMouseOver;var div=child(button);let styles2;var node2=child(div);{var consequent=$$anchor2=>{var fragment=comment$2(),node_1=first_child(fragment);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{Tooltip_Root( -$$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_1=root_2$m(),node_2=first_child(fragment_1);component(node_2,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{var a=root_3$i(),node_3=child(a);Git_branch(node_3,{class:"h-3.5 w-3.5"}),reset(a),template_effect(()=>set_attribute(a,"href",`#/chat/${$$props.conversation.forkedFromConversationId??""}`)),append($$anchor6,a)},$$slots:{default:!0}})});var node_4=sibling(node_2,2);component( -node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_4$8();append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_1)},$$slots:{default:!0}})}),append($$anchor2,fragment)};if_block(node2,$$render=>{depth()>0&&$$render(consequent)})}var node_5=sibling(node2,2);{var consequent_1=$$anchor2=>{var fragment_2=comment$2(),node_6=first_child(fragment_2);component(node_6,()=>Root$5,($$anchor3,Tooltip_Root_1)=>{ -Tooltip_Root_1($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_3=root_6$c(),node_7=first_child(fragment_3);component(node_7,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor5,{children:($$anchor6,$$slotProps2)=>{var div_1=root_7$b();div_1.__click=handleStop,div_1.__keydown=e=>e.key==="Enter"&&handleStop(e);var node_8=child(div_1);Loader_circle(node_8,{class:"loading-icon h-3.5 w-3.5 animate-spin"});var node_9=sibling(node_8,2);Square(node_9,{class:"stop-ic\ -on hidden h-3 w-3 fill-current text-destructive"}),reset(div_1),append($$anchor6,div_1)},$$slots:{default:!0}})});var node_10=sibling(node_7,2);component(node_10,()=>Tooltip_content,($$anchor5,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p_1=root_8$9();append($$anchor6,p_1)},$$slots:{default:!0}})}),append($$anchor4,fragment_3)},$$slots:{default:!0}})}),append($$anchor2,fragment_2)};if_block(node_5,$$render=>{get$4(isLoading2)&&$$render(consequent_1)})} -var span=sibling(node_5,2);span.__click=function(...$$args){$$props.handleMobileSidebarItemClick?.apply(this,$$args)};var text2=child(span,!0);reset(span),reset(div);var node_11=sibling(div,2);{var consequent_2=$$anchor2=>{var div_2=root_9$8(),node_12=child(div_2);{let $0=user_derived(()=>[{icon:Pencil,label:"Edit",onclick:handleEdit,shortcut:["shift","cmd","e"]},{icon:Download,label:"Export",onclick:e=>{e.stopPropagation(),conversationsStore.downloadConversation($$props.conversation.id)},shortcut:[ -"shift","cmd","s"]},{icon:Trash_2,label:"Delete",onclick:handleDelete2,variant:"destructive",shortcut:["shift","cmd","d"],separator:!0}]);DropdownMenuActions(node_12,{get triggerIcon(){return Ellipsis},triggerTooltip:"More actions",get actions(){return get$4($0)},get open(){return get$4(dropdownOpen)},set open($$value){set$1(dropdownOpen,$$value,!0)}})}reset(div_2),append($$anchor2,div_2)};if_block(node_11,$$render=>{get$4(renderActionsDropdown)&&$$render(consequent_2)})}reset(button),template_effect( -()=>{set_class(button,1,`group flex min-h-9 w-full cursor-pointer items-center justify-between space-x-3 rounded-lg py-1.5 text-left transition-colors hover:bg-foreground/10 ${isActive()?"bg-foreground/5 text-accent-foreground":""} px-3`,"svelte-76ksb2"),styles2=set_style(div,"",styles2,{"padding-left":`${depth()*FORK_TREE_DEPTH_PADDING}px`}),set_text(text2,$$props.conversation.name)}),event("mouseleave",button,handleMouseLeave),append($$anchor,button),pop()}delegate(["click","mouseover","keydow\ -n"]);const emptyOptions$7={};function toString$1(value,options){const settings=emptyOptions$7,includeImageAlt=typeof settings.includeImageAlt=="boolean"?settings.includeImageAlt:!0,includeHtml=typeof settings.includeHtml=="boolean"?settings.includeHtml:!0;return one$2(value,includeImageAlt,includeHtml)}function one$2(value,includeImageAlt,includeHtml){if(node(value)){if("value"in value)return value.type==="html"&&!includeHtml?"":value.value;if(includeImageAlt&&"alt"in value&&value.alt)return value. -alt;if("children"in value)return all$2(value.children,includeImageAlt,includeHtml)}return Array.isArray(value)?all$2(value,includeImageAlt,includeHtml):""}function all$2(values,includeImageAlt,includeHtml){const result=[];let index2=-1;for(;++index2<values.length;)result[index2]=one$2(values[index2],includeImageAlt,includeHtml);return result.join("")}function node(value){return!!(value&&typeof value=="object")}const element$3=document.createElement("i");function decodeNamedCharacterReference(value){ +transition-transform group-data-[state=open]:-rotate-180":"size-4 opacity-50");var fragment=comment$2(),node2=first_child(fragment);{let $0=user_derived(()=>cn$1(get$3(baseClasses),$$props.class));component(node2,()=>Select_trigger$1,($$anchor2,SelectPrimitive_Trigger)=>{SelectPrimitive_Trigger($$anchor2,spread_props({"data-slot":"select-trigger",get"data-size"(){return size2()},get class(){return get$3($0)}},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},children:($$anchor3,$$slotProps)=>{ +var fragment_1=root_1$d(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.children??noop$3);var node_2=sibling(node_1,2);Chevron_down(node_2,{get class(){return get$3(chevronClasses)}}),append($$anchor3,fragment_1)},$$slots:{default:!0}}))})}append($$anchor,fragment),pop()}const Root=Select;var root$w=from_html("<textarea></textarea>");function Textarea($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),value=prop($$props,"value",15),restProps=rest_props($$props, +["$$slots","$$events","$$legacy","ref","value","class"]);var textarea=root$w();remove_textarea_child(textarea),attribute_effect(textarea,$0=>({"data-slot":"textarea",class:$0,...restProps}),[()=>cn$1("flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowe\ +d disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40",$$props.class)]),bind_this(textarea,$$value=>ref2($$value),()=>ref2()),bind_value(textarea,value),append($$anchor,textarea),pop()}var root_3$c=from_html(" <!>",1),root_6$9=from_html('<button type="button" class="absolute top-1/2 right-2 inline-flex h-5 w-5 -translate-y-1/2 items-center justify-center rounded transition-colors hover:bg-muted" ar\ +ia-label="Reset to default" title="Reset to default"><!></button>'),root_7$7=from_html('<p class="mt-1 text-xs text-muted-foreground"></p>'),root_2$k=from_html('<div class="flex items-center gap-2"><!> <!></div> <div class="relative w-full"><!> <!></div> <!>',1),root_9$5=from_html(" <!>",1),root_11$3=from_html('<p class="mt-1 text-xs text-muted-foreground"> </p>'),root_12$2=from_html('<div class="mt-3 flex items-center gap-2"><!> <!></div>'),root_8$8=from_html("<!> <!> <!> <!>",1),root_15$2=from_html( +" <!>",1),root_19$2=from_html('<div class="flex items-center gap-2"><!> </div>'),root_21$1=from_html('<button type="button" class="absolute top-1/2 right-8 inline-flex h-5 w-5 -translate-y-1/2 items-center justify-center rounded transition-colors hover:bg-muted" aria-label="Reset to default" title="Reset to default"><!></button>'),root_25$1=from_html('<div class="flex items-center gap-2"><!> </div>'),root_18$1=from_html('<div class="relative w-full md:w-auto"><!> <!></div> <!>',1),root_27=from_html( +'<p class="mt-1 text-xs text-muted-foreground"> </p>'),root_14$1=from_html('<div class="flex items-center gap-2"><!> <!></div> <!> <!>',1),root_30=from_html('<p class="text-xs text-muted-foreground"> </p>'),root_28=from_html('<div class="flex items-start space-x-3"><!> <div class="space-y-1"><label class="flex cursor-pointer items-center gap-1.5 pt-1 pb-0.5 text-sm leading-none font-medium"> <!></label> <!></div></div>'),root_1$c=from_html('<div class="space-y-2"><!></div>');function ChatSettingsFields($$anchor,$$props){ +push$1($$props,!0);let sp=user_derived(()=>{if(serverStore.isRouterMode){const m=selectedModelName();if(m)return modelsStore.getModelProps(m)?.default_generation_settings?.params??{}}return serverStore.defaultParams??{}});var fragment=comment$2(),node2=first_child(fragment);each(node2,17,()=>$$props.fields,field=>field.key,($$anchor2,field)=>{var div=root_1$c(),node_1=child(div);{var consequent_4=$$anchor3=>{const currentValue=user_derived(()=>String($$props.localConfig[get$3(field).key]??"")),serverDefault=user_derived( +()=>get$3(sp)[get$3(field).key]),isCustomRealTime=user_derived(()=>(()=>{if(get$3(serverDefault)==null||get$3(currentValue)==="")return!1;const numericInput=parseFloat(get$3(currentValue)),normalizedInput=isNaN(numericInput)?get$3(currentValue):Math.round(numericInput*1e6)/1e6,normalizedDefault=typeof get$3(serverDefault)=="number"?Math.round(get$3(serverDefault)*1e6)/1e6:get$3(serverDefault);return normalizedInput!==normalizedDefault})());var fragment_1=root_2$k(),div_1=first_child(fragment_1), +node_2=child(div_1);Label(node_2,{get for(){return get$3(field).key},class:"flex items-center gap-1.5 text-sm font-medium",children:($$anchor4,$$slotProps)=>{next$1();var fragment_2=root_3$c(),text2=first_child(fragment_2),node_3=sibling(text2);{var consequent=$$anchor5=>{Flask_conical($$anchor5,{class:"h-3.5 w-3.5 text-muted-foreground"})};if_block(node_3,$$render=>{get$3(field).isExperimental&&$$render(consequent)})}template_effect(()=>set_text(text2,`${get$3(field).label??""} `)),append($$anchor4, +fragment_2)},$$slots:{default:!0}});var node_4=sibling(node_2,2);{var consequent_1=$$anchor4=>{ChatSettingsParameterSourceIndicator($$anchor4,{})};if_block(node_4,$$render=>{get$3(isCustomRealTime)&&$$render(consequent_1)})}reset(div_1);var div_2=sibling(div_1,2),node_5=child(div_2);{let $0=user_derived(()=>get$3(sp)[get$3(field).key]!=null?`Default: ${normalizeFloatingPoint(get$3(sp)[get$3(field).key])}`:""),$1=user_derived(()=>get$3(isCustomRealTime)?"pr-8":"");Input(node_5,{get id(){return get$3( +field).key},get value(){return get$3(currentValue)},oninput:e=>{$$props.onConfigChange(get$3(field).key,e.currentTarget.value)},get placeholder(){return get$3($0)},get class(){return`w-full ${get$3($1)??""}`}})}var node_6=sibling(node_5,2);{var consequent_2=$$anchor4=>{var button=root_6$9(),node_7=child(button);Rotate_ccw(node_7,{class:"h-3 w-3"}),reset(button),delegated("click",button,()=>{settingsStore.resetParameterToServerDefault(get$3(field).key),$$props.onConfigChange(get$3(field).key,"")}), +append($$anchor4,button)};if_block(node_6,$$render=>{get$3(isCustomRealTime)&&$$render(consequent_2)})}reset(div_2);var node_8=sibling(div_2,2);{var consequent_3=$$anchor4=>{var p_1=root_7$7();html$6(p_1,()=>get$3(field).help||SETTING_CONFIG_INFO[get$3(field).key],!0),reset(p_1),append($$anchor4,p_1)};if_block(node_8,$$render=>{(get$3(field).help||SETTING_CONFIG_INFO[get$3(field).key])&&$$render(consequent_3)})}append($$anchor3,fragment_1)},consequent_8=$$anchor3=>{var fragment_5=root_8$8(),node_9=first_child( +fragment_5);Label(node_9,{get for(){return get$3(field).key},class:"block flex items-center gap-1.5 text-sm font-medium",children:($$anchor4,$$slotProps)=>{next$1();var fragment_6=root_9$5(),text_1=first_child(fragment_6),node_10=sibling(text_1);{var consequent_5=$$anchor5=>{Flask_conical($$anchor5,{class:"h-3.5 w-3.5 text-muted-foreground"})};if_block(node_10,$$render=>{get$3(field).isExperimental&&$$render(consequent_5)})}template_effect(()=>set_text(text_1,`${get$3(field).label??""} `)),append( +$$anchor4,fragment_6)},$$slots:{default:!0}});var node_11=sibling(node_9,2);{let $0=user_derived(()=>String($$props.localConfig[get$3(field).key]??""));Textarea(node_11,{get id(){return get$3(field).key},get value(){return get$3($0)},onchange:e=>$$props.onConfigChange(get$3(field).key,e.currentTarget.value),placeholder:"",class:"min-h-[10rem] w-full md:max-w-3xl"})}var node_12=sibling(node_11,2);{var consequent_6=$$anchor4=>{var p_2=root_11$3(),text_2=child(p_2,!0);reset(p_2),template_effect(()=>set_text( +text_2,get$3(field).help||SETTING_CONFIG_INFO[get$3(field).key])),append($$anchor4,p_2)};if_block(node_12,$$render=>{(get$3(field).help||SETTING_CONFIG_INFO[get$3(field).key])&&$$render(consequent_6)})}var node_13=sibling(node_12,2);{var consequent_7=$$anchor4=>{var div_3=root_12$2(),node_14=child(div_3);{let $0=user_derived(()=>!!($$props.localConfig.showSystemMessage??!0));Checkbox(node_14,{id:"showSystemMessage",get checked(){return get$3($0)},onCheckedChange:checked=>$$props.onConfigChange("\ +showSystemMessage",!!checked)})}var node_15=sibling(node_14,2);Label(node_15,{for:"showSystemMessage",class:"cursor-pointer text-sm font-normal",children:($$anchor5,$$slotProps)=>{next$1();var text_3=text$8("Show system message in conversations");append($$anchor5,text_3)},$$slots:{default:!0}}),reset(div_3),append($$anchor4,div_3)};if_block(node_13,$$render=>{get$3(field).key===SETTINGS_KEYS.SYSTEM_MESSAGE&&$$render(consequent_7)})}append($$anchor3,fragment_5)},consequent_16=$$anchor3=>{const selectedOption=user_derived( +()=>get$3(field).options?.find(opt=>opt.value===$$props.localConfig[get$3(field).key])),currentValue=user_derived(()=>$$props.localConfig[get$3(field).key]),serverDefault=user_derived(()=>get$3(sp)[get$3(field).key]),isCustomRealTime=user_derived(()=>get$3(serverDefault)==null||get$3(currentValue)===""||get$3(currentValue)===void 0?!1:get$3(currentValue)!==get$3(serverDefault));var fragment_8=root_14$1(),div_4=first_child(fragment_8),node_16=child(div_4);Label(node_16,{get for(){return get$3(field). +key},class:"flex items-center gap-1.5 text-sm font-medium",children:($$anchor4,$$slotProps)=>{next$1();var fragment_9=root_15$2(),text_4=first_child(fragment_9),node_17=sibling(text_4);{var consequent_9=$$anchor5=>{Flask_conical($$anchor5,{class:"h-3.5 w-3.5 text-muted-foreground"})};if_block(node_17,$$render=>{get$3(field).isExperimental&&$$render(consequent_9)})}template_effect(()=>set_text(text_4,`${get$3(field).label??""} `)),append($$anchor4,fragment_9)},$$slots:{default:!0}});var node_18=sibling( +node_16,2);{var consequent_10=$$anchor4=>{ChatSettingsParameterSourceIndicator($$anchor4,{})};if_block(node_18,$$render=>{get$3(isCustomRealTime)&&$$render(consequent_10)})}reset(div_4);var node_19=sibling(div_4,2);component(node_19,()=>Root,($$anchor4,Select_Root)=>{Select_Root($$anchor4,{type:"single",get value(){return get$3(currentValue)},onValueChange:value=>{get$3(field).key===SETTINGS_KEYS.THEME&&value&&$$props.onThemeChange?$$props.onThemeChange(value):$$props.onConfigChange(get$3(field). +key,value)},children:($$anchor5,$$slotProps)=>{var fragment_12=root_18$1(),div_5=first_child(fragment_12),node_20=child(div_5);component(node_20,()=>Select_trigger,($$anchor6,Select_Trigger)=>{Select_Trigger($$anchor6,{class:"w-full",children:($$anchor7,$$slotProps2)=>{var div_6=root_19$2(),node_21=child(div_6);{var consequent_11=$$anchor8=>{const IconComponent=user_derived(()=>get$3(selectedOption).icon);var fragment_13=comment$2(),node_22=first_child(fragment_13);component(node_22,()=>get$3(IconComponent), +($$anchor9,IconComponent_1)=>{IconComponent_1($$anchor9,{class:"h-4 w-4"})}),append($$anchor8,fragment_13)};if_block(node_21,$$render=>{get$3(selectedOption)?.icon&&$$render(consequent_11)})}var text_5=sibling(node_21);reset(div_6),template_effect($0=>set_text(text_5,` ${$0??""}`),[()=>get$3(selectedOption)?.label||`Select ${get$3(field).label.toLowerCase()}`]),append($$anchor7,div_6)},$$slots:{default:!0}})});var node_23=sibling(node_20,2);{var consequent_12=$$anchor6=>{var button_1=root_21$1(), +node_24=child(button_1);Rotate_ccw(node_24,{class:"h-3 w-3"}),reset(button_1),delegated("click",button_1,()=>{settingsStore.resetParameterToServerDefault(get$3(field).key),$$props.onConfigChange(get$3(field).key,"")}),append($$anchor6,button_1)};if_block(node_23,$$render=>{get$3(isCustomRealTime)&&$$render(consequent_12)})}reset(div_5);var node_25=sibling(div_5,2);component(node_25,()=>Select_content,($$anchor6,Select_Content)=>{Select_Content($$anchor6,{children:($$anchor7,$$slotProps2)=>{var fragment_14=comment$2(), +node_26=first_child(fragment_14);{var consequent_14=$$anchor8=>{var fragment_15=comment$2(),node_27=first_child(fragment_15);each(node_27,17,()=>get$3(field).options,option2=>option2.value,($$anchor9,option2)=>{var fragment_16=comment$2(),node_28=first_child(fragment_16);component(node_28,()=>Select_item,($$anchor10,Select_Item)=>{Select_Item($$anchor10,{get value(){return get$3(option2).value},get label(){return get$3(option2).label},children:($$anchor11,$$slotProps3)=>{var div_7=root_25$1(),node_29=child( +div_7);{var consequent_13=$$anchor12=>{const IconComponent=user_derived(()=>get$3(option2).icon);var fragment_17=comment$2(),node_30=first_child(fragment_17);component(node_30,()=>get$3(IconComponent),($$anchor13,IconComponent_2)=>{IconComponent_2($$anchor13,{class:"h-4 w-4"})}),append($$anchor12,fragment_17)};if_block(node_29,$$render=>{get$3(option2).icon&&$$render(consequent_13)})}var text_6=sibling(node_29);reset(div_7),template_effect(()=>set_text(text_6,` ${get$3(option2).label??""}`)),append( +$$anchor11,div_7)},$$slots:{default:!0}})}),append($$anchor9,fragment_16)}),append($$anchor8,fragment_15)};if_block(node_26,$$render=>{get$3(field).options&&$$render(consequent_14)})}append($$anchor7,fragment_14)},$$slots:{default:!0}})}),append($$anchor5,fragment_12)},$$slots:{default:!0}})});var node_31=sibling(node_19,2);{var consequent_15=$$anchor4=>{var p_3=root_27(),text_7=child(p_3,!0);reset(p_3),template_effect(()=>set_text(text_7,get$3(field).help||SETTING_CONFIG_INFO[get$3(field).key])), +append($$anchor4,p_3)};if_block(node_31,$$render=>{(get$3(field).help||SETTING_CONFIG_INFO[get$3(field).key])&&$$render(consequent_15)})}append($$anchor3,fragment_8)},consequent_19=$$anchor3=>{var div_8=root_28(),node_32=child(div_8);{let $0=user_derived(()=>!!$$props.localConfig[get$3(field).key]);Checkbox(node_32,{get id(){return get$3(field).key},get checked(){return get$3($0)},onCheckedChange:checked=>$$props.onConfigChange(get$3(field).key,checked),class:"mt-1"})}var div_9=sibling(node_32,2), +label=child(div_9),text_8=child(label),node_33=sibling(text_8);{var consequent_17=$$anchor4=>{Flask_conical($$anchor4,{class:"h-3.5 w-3.5 text-muted-foreground"})};if_block(node_33,$$render=>{get$3(field).isExperimental&&$$render(consequent_17)})}reset(label);var node_34=sibling(label,2);{var consequent_18=$$anchor4=>{var p_4=root_30(),text_9=child(p_4,!0);reset(p_4),template_effect(()=>set_text(text_9,get$3(field).help||SETTING_CONFIG_INFO[get$3(field).key])),append($$anchor4,p_4)};if_block(node_34, +$$render=>{(get$3(field).help||SETTING_CONFIG_INFO[get$3(field).key])&&$$render(consequent_18)})}reset(div_9),reset(div_8),template_effect(()=>{set_attribute(label,"for",get$3(field).key),set_text(text_8,`${get$3(field).label??""} `)}),append($$anchor3,div_8)};if_block(node_1,$$render=>{get$3(field).type===SettingsFieldType.INPUT?$$render(consequent_4):get$3(field).type===SettingsFieldType.TEXTAREA?$$render(consequent_8,1):get$3(field).type===SettingsFieldType.SELECT?$$render(consequent_16,2):get$3( +field).type===SettingsFieldType.CHECKBOX&&$$render(consequent_19,3)})}reset(div),append($$anchor2,div)}),append($$anchor,fragment),pop()}delegate(["click"]);var root_1$b=from_html("<!> Custom",1);function ChatSettingsParameterSourceIndicator($$anchor,$$props){let className=prop($$props,"class",3,"");Badge($$anchor,{variant:"secondary",get class(){return`h-5 bg-orange-100 px-1.5 py-0.5 text-xs text-orange-800 dark:bg-orange-900 dark:text-orange-200 ${className()??""}`},children:($$anchor2,$$slotProps)=>{ +var fragment_1=root_1$b(),node2=first_child(fragment_1);Wrench(node2,{class:"mr-1 h-3 w-3"}),next$1(),append($$anchor2,fragment_1)},$$slots:{default:!0}})}var root_1$a=from_html('<div class="py-8 text-center text-sm text-muted-foreground">No tools available</div>'),root_8$7=from_html('<img alt="" class="h-4 w-4 shrink-0 rounded-sm"/>'),root_5$8=from_html('<!> <span class="inline-flex min-w-0 items-center gap-1.5 font-medium"><!> <span class="truncate"> </span></span> <span class="ml-auto shrink-\ +0 text-xs text-muted-foreground"> </span>',1),root_10$3=from_html('<div class="flex items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-muted/50"><!> <div class="flex w-16 shrink-0 justify-center"><!></div> <div class="flex w-20 shrink-0 justify-center"><!></div></div>'),root_9$4=from_html('<div class="ml-4 border-l border-border/50 pl-2"><div class="flex items-center gap-2 px-2 py-1 text-xs text-muted-foreground"><span class="min-w-0 flex-1">Tool</span> <span class="w-16 shrink-0 text-cente\ +r">Enabled</span> <span class="w-20 shrink-0 text-center">Always allow</span></div> <!></div>'),root_4$8=from_html("<!> <!>",1),root_2$j=from_html('<div class="space-y-2"></div>');function ChatSettingsToolsTab($$anchor,$$props){push$1($$props,!0);let expandedGroups=new SvelteSet,groups=user_derived(()=>toolsStore.toolGroups);function getFavicon(group){if(group.source!==ToolSource.MCP)return null;for(const server of mcpStore.getServersSorted())if(mcpStore.getServerLabel(server)===group.label)return mcpStore. +getServerFavicon(server.id);return null}function toggleExpanded(label){expandedGroups.has(label)?expandedGroups.delete(label):expandedGroups.add(label)}var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var div=root_1$a();append($$anchor2,div)},alternate_1=$$anchor2=>{var div_1=root_2$j();each(div_1,21,()=>get$3(groups),group=>group.label,($$anchor3,group)=>{const isExpanded=user_derived(()=>expandedGroups.has(get$3(group).label)),favicon=user_derived(()=>getFavicon( +get$3(group)));var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Collapsible,($$anchor4,Collapsible_Root)=>{Collapsible_Root($$anchor4,{get open(){return get$3(isExpanded)},onOpenChange:()=>toggleExpanded(get$3(group).label),children:($$anchor5,$$slotProps)=>{var fragment_2=root_4$8(),node_2=first_child(fragment_2);component(node_2,()=>Collapsible_trigger,($$anchor6,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor6,{class:"flex w-full items-center gap-2 rounded-lg\ + px-3 py-2 text-sm hover:bg-muted/50",children:($$anchor7,$$slotProps2)=>{var fragment_3=root_5$8(),node_3=first_child(fragment_3);{var consequent_1=$$anchor8=>{Chevron_down($$anchor8,{class:"h-3.5 w-3.5 shrink-0"})},alternate=$$anchor8=>{Chevron_right($$anchor8,{class:"h-3.5 w-3.5 shrink-0"})};if_block(node_3,$$render=>{get$3(isExpanded)?$$render(consequent_1):$$render(alternate,-1)})}var span=sibling(node_3,2),node_4=child(span);{var consequent_2=$$anchor8=>{var img=root_8$7();template_effect( +()=>set_attribute(img,"src",get$3(favicon))),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor8,img)};if_block(node_4,$$render=>{get$3(favicon)&&$$render(consequent_2)})}var span_1=sibling(node_4,2),text2=child(span_1,!0);reset(span_1),reset(span);var span_2=sibling(span,2),text_1=child(span_2);reset(span_2),template_effect(()=>{set_text(text2,get$3(group).label),set_text(text_1,`${get$3(group).tools.length??""} tool${get$3(group).tools.length!==1?"s": +""}`)}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_5=sibling(node_2,2);component(node_5,()=>Collapsible_content,($$anchor6,Collapsible_Content)=>{Collapsible_Content($$anchor6,{children:($$anchor7,$$slotProps2)=>{var div_2=root_9$4(),node_6=sibling(child(div_2),2);each(node_6,17,()=>get$3(group).tools,tool=>tool.function.name,($$anchor8,tool)=>{const toolName=user_derived(()=>get$3(tool).function.name),isEnabled=user_derived(()=>toolsStore.isToolEnabled(get$3(toolName))),permissionKey=user_derived( +()=>toolsStore.getPermissionKey(get$3(toolName))),isAlwaysAllowed=user_derived(()=>get$3(permissionKey)?permissionsStore.hasTool(get$3(permissionKey)):!1);var div_3=root_10$3(),node_7=child(div_3);TruncatedText(node_7,{get text(){return get$3(toolName)},class:"min-w-0 flex-1 truncate",showTooltip:!0});var div_4=sibling(node_7,2),node_8=child(div_4);Checkbox(node_8,{get checked(){return get$3(isEnabled)},onCheckedChange:()=>toolsStore.toggleTool(get$3(toolName)),class:"h-4 w-4"}),reset(div_4);var div_5=sibling( +div_4,2),node_9=child(div_5);Checkbox(node_9,{get checked(){return get$3(isAlwaysAllowed)},onCheckedChange:()=>{get$3(isAlwaysAllowed)?permissionsStore.revokeTool(get$3(permissionKey)):permissionsStore.allowTool(get$3(permissionKey))},class:"h-4 w-4"}),reset(div_5),reset(div_3),append($$anchor8,div_3)}),reset(div_2),append($$anchor7,div_2)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)}),reset(div_1),append($$anchor2,div_1)};if_block( +node2,$$render=>{get$3(groups).length===0?$$render(consequent):$$render(alternate_1,-1)})}append($$anchor,fragment),pop()}const SIDEBAR_COOKIE_NAME="sidebar:state",SIDEBAR_COOKIE_MAX_AGE=3600*24*7,SIDEBAR_MIN_WIDTH="18rem",SIDEBAR_MAX_WIDTH="32rem",SIDEBAR_WIDTH_ICON="3rem",SIDEBAR_KEYBOARD_SHORTCUT="b";class SidebarState{props;#open=user_derived(()=>this.props.open());get open(){return get$3(this.#open)}set open(value){set$1(this.#open,value)}#openMobile=state$1(!1);get openMobile(){return get$3( +this.#openMobile)}set openMobile(value){set$1(this.#openMobile,value,!0)}#sidebarWidth=state$1(proxy(SIDEBAR_MIN_WIDTH));get sidebarWidth(){return get$3(this.#sidebarWidth)}set sidebarWidth(value){set$1(this.#sidebarWidth,value,!0)}#isResizing=state$1(!1);get isResizing(){return get$3(this.#isResizing)}set isResizing(value){set$1(this.#isResizing,value,!0)}setOpen;#isMobile;#state=user_derived(()=>this.open?"expanded":"collapsed");get state(){return get$3(this.#state)}set state(value){set$1(this.#state, +value)}constructor(props){this.setOpen=props.setOpen,this.#isMobile=new IsMobile,this.props=props}get isMobile(){return this.#isMobile.current}handleShortcutKeydown=e=>{e.key===SIDEBAR_KEYBOARD_SHORTCUT&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),this.toggle())};setOpenMobile=value=>{this.openMobile=value};toggle=()=>{this.setOpen(!this.open)}}const SYMBOL_KEY="scn-sidebar";function setSidebar(props){return setContext(Symbol.for(SYMBOL_KEY),new SidebarState(props))}function useSidebar(){return getContext( +Symbol.for(SYMBOL_KEY))}var root$v=from_html("<div><!></div>");function Sidebar_group_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$v();attribute_effect(div,$0=>({"data-slot":"sidebar-group-content","data-sidebar":"group-content",class:$0,...restProps}),[()=>cn$1("w-full text-sm",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3), +reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root_2$i=from_html("<div><!></div>");function Sidebar_group_label($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","children","child","class"]);const mergedProps=user_derived(()=>({class:cn$1("text-sidebar-foreground/70 ring-sidebar-ring outline-hidden flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-med\ +ium transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0","group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",$$props.class),"data-slot":"sidebar-group-label","data-sidebar":"group-label",...restProps}));var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);snippet(node_1,()=>$$props.child,()=>({props:get$3(mergedProps)})),append($$anchor2, +fragment_1)},alternate=$$anchor2=>{var div=root_2$i();attribute_effect(div,()=>({...get$3(mergedProps)}));var node_2=child(div);snippet(node_2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor2,div)};if_block(node2,$$render=>{$$props.child?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root$u=from_html("<div><!></div>");function Sidebar_group($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref", +15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$u();attribute_effect(div,$0=>({"data-slot":"sidebar-group","data-sidebar":"group",class:$0,...restProps}),[()=>cn$1("relative flex w-full min-w-0 flex-col p-2",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$t=from_html("<div><!></div>");function Sidebar_header($$anchor,$$props){ +push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var div=root$t();attribute_effect(div,$0=>({"data-slot":"sidebar-header","data-sidebar":"header",class:$0,...restProps}),[()=>cn$1("flex flex-col gap-2 p-2",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root$s=from_html("<main><\ +!></main>");function Sidebar_inset($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var main2=root$s();attribute_effect(main2,$0=>({"data-slot":"sidebar-inset",class:$0,...restProps}),[()=>cn$1("relative flex w-full flex-1 flex-col","md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:pee\ +r-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",$$props.class)]);var node2=child(main2);snippet(node2,()=>$$props.children??noop$3),reset(main2),bind_this(main2,$$value=>ref2($$value),()=>ref2()),append($$anchor,main2),pop()}tv({base:"peer/menu-button outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground group-has-data-[sidebar=menu-action]/menu-item:pr-8 data-[active=true]:bg-sidebar-\ +accent data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! flex w-full items-center gap-2 overflow-hidden rounded-md py-2 px-1 text-left text-sm transition-[width,height,padding] focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:font-\ +medium [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_var(--sidebar-border)] hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"group-data-[collapsible=icon]:p-0! h-12 text-sm"}},defaultVariants:{variant:"default",size:"default"}});var root$r=from_html( +"<li><!></li>");function Sidebar_menu_item($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var li2=root$r();attribute_effect(li2,$0=>({"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",class:$0,...restProps}),[()=>cn$1("group/menu-item relative",$$props.class)]);var node2=child(li2);snippet(node2,()=>$$props.children??noop$3),reset(li2),bind_this(li2,$$value=>ref2($$value), +()=>ref2()),append($$anchor,li2),pop()}var root$q=from_html("<ul><!></ul>");function Sidebar_menu($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","class","children"]);var ul=root$q();attribute_effect(ul,$0=>({"data-slot":"sidebar-menu","data-sidebar":"menu",class:$0,...restProps}),[()=>cn$1("flex w-full min-w-0 flex-col gap-1",$$props.class)]);var node2=child(ul);snippet(node2,()=>$$props.children??noop$3), +reset(ul),bind_this(ul,$$value=>ref2($$value),()=>ref2()),append($$anchor,ul),pop()}var root$p=from_html("<div><!></div>");function Sidebar_provider($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),open2=prop($$props,"open",15,!0),onOpenChange=prop($$props,"onOpenChange",3,()=>{}),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","open","onOpenChange","class","style","children"]);const sidebar=setSidebar({open:()=>open2(),setOpen:value=>{open2(value),onOpenChange()( +value),document.cookie=`${SIDEBAR_COOKIE_NAME}=${open2()}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`}});var div=root$p();event("keydown",$window,function(...$$args){sidebar.handleShortcutKeydown?.apply(this,$$args)}),attribute_effect(div,$0=>({"data-slot":"sidebar-wrapper",style:`--sidebar-width: ${sidebar.sidebarWidth??""}; --sidebar-min-width: ${SIDEBAR_MIN_WIDTH}; --sidebar-max-width: ${SIDEBAR_MAX_WIDTH}; --sidebar-width-icon: ${SIDEBAR_WIDTH_ICON}; ${$$props.style??""}`,class:$0,...restProps}), +[()=>cn$1("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",$$props.class)]);var node2=child(div);snippet(node2,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor,div),pop()}var root_1$9=from_html('<!> <span class="sr-only">Toggle Sidebar</span>',1);function Sidebar_trigger($$anchor,$$props){push$1($$props,!0),prop($$props,"ref",11,null);let restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","\ +class","onclick"]);const sidebar=useSidebar();{let $0=user_derived(()=>$$props.class),$1=user_derived(()=>sidebar.open?"top-1.5":"top-0"),$2=user_derived(()=>sidebar.isResizing?"!duration-0":"");Button($$anchor,spread_props({"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon-lg",get class(){return`rounded-full backdrop-blur-lg ${get$3($0)??""} ${get$3($1)??""} md:left-[calc(var(--sidebar-width)-3.25rem)] ${get$3($2)??""}`},type:"button",onclick:e=>{$$props.onclick?.( +e),sidebar.toggle()}},()=>restProps,{children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$9(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{Panel_left_close($$anchor3,{})},alternate=$$anchor3=>{Panel_left($$anchor3,{})};if_block(node2,$$render=>{sidebar.open?$$render(consequent):$$render(alternate,-1)})}next$1(2),append($$anchor2,fragment_1)},$$slots:{default:!0}}))}pop()}var root_1$8=from_html("<div><!></div>"),root_3$b=from_html('<div data-slot="sidebar-resize-handle"></div>'), +root_4$7=from_html('<div data-slot="sidebar-resize-handle"></div>'),root_2$h=from_html('<div class="group peer block text-sidebar-foreground" data-slot="sidebar"><div data-slot="sidebar-gap"></div> <div><div data-sidebar="sidebar" data-slot="sidebar-inner" class="flex h-full w-full flex-col bg-sidebar"><!></div> <!></div></div>');function Sidebar($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),side=prop($$props,"side",3,"left"),variant=prop($$props,"variant",3,"sidebar"), +collapsible=prop($$props,"collapsible",3,"offcanvas"),restProps=rest_props($$props,["$$slots","$$events","$$legacy","ref","side","variant","collapsible","class","children"]);const sidebar=useSidebar();function handleResizePointerDown(e){if(sidebar.isMobile)return;e.preventDefault();const target2=e.currentTarget;target2.setPointerCapture(e.pointerId);const minPx=remToPx(SIDEBAR_MIN_WIDTH),maxPx=remToPx(SIDEBAR_MAX_WIDTH);sidebar.isResizing=!0;function onPointerMove(ev){const newWidth=side()==="le\ +ft"?ev.clientX:window.innerWidth-ev.clientX,clamped=Math.min(maxPx,Math.max(minPx,newWidth));sidebar.sidebarWidth=`${clamped}px`}function onPointerUp(){sidebar.isResizing=!1,target2.removeEventListener("pointermove",onPointerMove),target2.removeEventListener("pointerup",onPointerUp)}target2.addEventListener("pointermove",onPointerMove),target2.addEventListener("pointerup",onPointerUp)}var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{var div=root_1$8();attribute_effect( +div,$0=>({class:$0,...restProps}),[()=>cn$1("flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground",$$props.class)]);var node_1=child(div);snippet(node_1,()=>$$props.children??noop$3),reset(div),bind_this(div,$$value=>ref2($$value),()=>ref2()),append($$anchor2,div)},alternate_1=$$anchor2=>{var div_1=root_2$h(),div_2=child(div_1),div_3=sibling(div_2,2);attribute_effect(div_3,$0=>({"data-slot":"sidebar-container",class:$0,style:variant()==="floating"?"height: calc(100dvh - 1.\ +5rem);":void 0,...restProps}),[()=>cn$1("fixed inset-y-0 z-[900] flex w-[calc(100dvw-1.5rem)] duration-200 ease-linear md:z-0 md:w-(--sidebar-width)","group-data-[collapsible=offcanvas]:pointer-events-none md:group-data-[collapsible=offcanvas]:pointer-events-auto",sidebar.isResizing&&"!duration-0",variant()==="floating"?["transition-[left,right,width,opacity]",side()==="left"?"left-3 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-0.775)] group-data-[collapsible=offcanvas]:op\ +acity-0":"right-3 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-0.775)] group-data-[collapsible=offcanvas]:opacity-0","my-3 overflow-hidden rounded-3xl border border-sidebar-border shadow-md"]:["h-svh transition-[left,right,width]",side()==="left"?"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]":"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]"],variant()==="inset"?"p-2 group-data-[collapsible=icon]:w-[calc(v\ +ar(--sidebar-width-icon)+(--spacing(4))+2px)]":variant()==="floating"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)",$$props.class)]);var div_4=child(div_3),node_2=child(div_4);snippet(node_2,()=>$$props.children??noop$3),reset(div_4);var node_3=sibling(div_4,2);{var consequent_1=$$anchor3=>{var div_5=root_3$b();let classes;template_effect(()=>classes=set_class(div_5,1,"absolute inset-y-0 right-0 z-5\ +0 hidden w-1.5 cursor-ew-resize touch-none select-none hover:bg-sidebar-border/50 active:bg-sidebar-border md:block",null,classes,{"bg-sidebar-border":sidebar.isResizing})),delegated("pointerdown",div_5,handleResizePointerDown),append($$anchor3,div_5)},alternate=$$anchor3=>{var div_6=root_4$7();let classes_1;template_effect(()=>classes_1=set_class(div_6,1,"absolute inset-y-0 left-0 z-50 hidden w-1.5 cursor-ew-resize touch-none select-none hover:bg-sidebar-border/50 active:bg-sidebar-border md:bl\ +ock",null,classes_1,{"bg-sidebar-border":sidebar.isResizing})),delegated("pointerdown",div_6,handleResizePointerDown),append($$anchor3,div_6)};if_block(node_3,$$render=>{side()==="left"?$$render(consequent_1):$$render(alternate,-1)})}reset(div_3),reset(div_1),bind_this(div_1,$$value=>ref2($$value),()=>ref2()),template_effect($0=>{set_attribute(div_1,"data-state",sidebar.state),set_attribute(div_1,"data-collapsible",sidebar.state==="collapsed"?collapsible():""),set_attribute(div_1,"data-variant", +variant()),set_attribute(div_1,"data-side",side()),set_class(div_2,1,$0)},[()=>clsx(cn$1("relative bg-transparent transition-[width] duration-200 ease-linear",sidebar.isResizing&&"!duration-0","w-0",variant()==="floating"?"md:w-[calc(var(--sidebar-width)+0.75rem)]":"md:w-(--sidebar-width)","md:group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180",variant()==="floating"||variant()==="inset"?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)\ +]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)"))]),append($$anchor2,div_1)};if_block(node2,$$render=>{collapsible()==="none"?$$render(consequent):$$render(alternate_1,-1)})}append($$anchor,fragment),pop()}delegate(["pointerdown"]);const itemIcon=($$anchor,Icon2=noop$3)=>{var fragment=comment$2(),node2=first_child(fragment);component(node2,Icon2,($$anchor2,Icon_1)=>{Icon_1($$anchor2,{class:"h-4 w-4"})}),append($$anchor,fragment)};var root_6$8=from_html('<div class="flex items-center \ +gap-2"><!> </div> <!>',1),root_9$3=from_html('<div class="flex items-center gap-2"><!> </div> <!>',1),root$o=from_html('<div class="my-1 space-y-1"><!></div>');function ChatSidebarActions($$anchor,$$props){push$1($$props,!0);let isSearchModeActive=prop($$props,"isSearchModeActive",15),searchQuery=prop($$props,"searchQuery",15),isCancelAlwaysVisible=prop($$props,"isCancelAlwaysVisible",3,!1),searchInputRef=state$1(null);function handleSearchModeDeactivate(){isSearchModeActive(!1),searchQuery(""), +$$props.onSearchDeactivated?.()}function activateSearch(){isSearchModeActive(!0),queueMicrotask(()=>get$3(searchInputRef)?.focus())}var $$exports={activateSearch},div=root$o(),node_1=child(div);{var consequent=$$anchor2=>{SearchInput($$anchor2,{onClose:handleSearchModeDeactivate,onKeyDown:e=>e.key==="Escape"&&handleSearchModeDeactivate(),placeholder:"Search conversations...",get isCancelAlwaysVisible(){return isCancelAlwaysVisible()},get value(){return searchQuery()},set value($$value){searchQuery( +$$value)},get ref(){return get$3(searchInputRef)},set ref($$value){set$1(searchInputRef,$$value,!0)}})},alternate_1=$$anchor2=>{var fragment_2=comment$2(),node_2=first_child(fragment_2);each(node_2,17,()=>SIDEBAR_ACTIONS_ITEMS,item=>item.route,($$anchor3,item)=>{var fragment_3=comment$2(),node_3=first_child(fragment_3);{var consequent_2=$$anchor4=>{Button($$anchor4,{class:"w-full justify-between px-2 backdrop-blur-none! hover:[&>kbd]:opacity-100",onclick:activateSearch,variant:"ghost",children:($$anchor5,$$slotProps)=>{ +var fragment_5=root_6$8(),div_1=first_child(fragment_5),node_4=child(div_1);itemIcon(node_4,()=>get$3(item).icon);var text2=sibling(node_4);reset(div_1);var node_5=sibling(div_1,2);{var consequent_1=$$anchor6=>{KeyboardShortcutInfo($$anchor6,{get keys(){return get$3(item).keys}})};if_block(node_5,$$render=>{get$3(item).keys&&$$render(consequent_1)})}template_effect(()=>set_text(text2,` ${get$3(item).tooltip??""}`)),append($$anchor5,fragment_5)},$$slots:{default:!0}})},alternate=$$anchor4=>{{let $0=user_derived( +()=>get$3(item).activeRouteId&&page$1.route.id===get$3(item).activeRouteId||get$3(item).activeRoutePrefix&&page$1.route.id?.startsWith(get$3(item).activeRoutePrefix)?"bg-accent text-accent-foreground":"");Button($$anchor4,{get class(){return`w-full justify-between px-2 backdrop-blur-none! hover:[&>kbd]:opacity-100 ${get$3($0)??""}`},get href(){return get$3(item).route},get onclick(){return $$props.handleMobileSidebarItemClick},variant:"ghost",children:($$anchor5,$$slotProps)=>{var fragment_8=root_9$3(), +div_2=first_child(fragment_8),node_6=child(div_2);itemIcon(node_6,()=>get$3(item).icon);var text_1=sibling(node_6);reset(div_2);var node_7=sibling(div_2,2);{var consequent_3=$$anchor6=>{KeyboardShortcutInfo($$anchor6,{get keys(){return get$3(item).keys}})};if_block(node_7,$$render=>{get$3(item).keys&&$$render(consequent_3)})}template_effect(()=>set_text(text_1,` ${get$3(item).tooltip??""}`)),append($$anchor5,fragment_8)},$$slots:{default:!0}})}};if_block(node_3,$$render=>{get$3(item).route?$$render( +alternate,-1):$$render(consequent_2)})}append($$anchor3,fragment_3)}),append($$anchor2,fragment_2)};if_block(node_1,$$render=>{isSearchModeActive()?$$render(consequent):$$render(alternate_1,-1)})}return reset(div),append($$anchor,div),pop($$exports)}var root_3$a=from_html('<!> <span class="sr-only">Close sidebar</span>',1),root_2$g=from_html('<div class="flex items-center justify-between"><a href="#/"><h1 class="inline-flex items-center gap-1 px-2 text-xl font-semibold"> </h1></a> <!></div> <!>', +1),root_11$2=from_html('<div class="px-2 py-4 text-center"><p class="mb-4 p-4 text-sm text-muted-foreground"> </p></div>'),root_8$6=from_html("<!> <!>",1),root_4$6=from_html("<!> <!>",1),root_1$7=from_html("<!> <!>",1),root_13$1=from_html('<div class="flex items-center gap-2 py-2"><!> <!></div>'),root$n=from_html('<div class="flex h-full flex-col"><!></div> <!> <!>',1);function ChatSidebar($$anchor,$$props){push$1($$props,!0);const sidebar=useSidebar();let currentChatId=user_derived(()=>page$1.params. +id),isSearchModeActive=state$1(!1),searchQuery=state$1(""),showDeleteDialog=state$1(!1),deleteWithForks=state$1(!1),showEditDialog=state$1(!1),selectedConversation=state$1(null),editedName=state$1(""),selectedConversationNamePreview=user_derived(()=>get$3(selectedConversation)?getPreviewText(get$3(selectedConversation).name):""),filteredConversations=user_derived(()=>get$3(isSearchModeActive)?get$3(searchQuery).trim().length>0?conversations().filter(conversation=>conversation.name.toLowerCase(). +includes(get$3(searchQuery).toLowerCase())):[]:conversations()),conversationTree=user_derived(()=>buildConversationTree(get$3(filteredConversations))),selectedConversationHasDescendants=user_derived(()=>{if(!get$3(selectedConversation))return!1;const allConvs=conversations(),queue=[get$3(selectedConversation).id];for(;queue.length>0;){const parentId=queue.pop();for(const c2 of allConvs)if(c2.forkedFromConversationId===parentId)return!0}return!1});async function handleDeleteConversation(id2){const conversation=conversations(). +find(conv=>conv.id===id2);conversation&&(set$1(selectedConversation,conversation,!0),set$1(deleteWithForks,!1),set$1(showDeleteDialog,!0))}async function handleEditConversation(id2){const conversation=conversations().find(conv=>conv.id===id2);conversation&&(set$1(selectedConversation,conversation,!0),set$1(editedName,conversation.name,!0),set$1(showEditDialog,!0))}function handleConfirmDelete(){if(get$3(selectedConversation)){const convId=get$3(selectedConversation).id,withForks=get$3(deleteWithForks); +set$1(showDeleteDialog,!1),setTimeout(()=>{conversationsStore.deleteConversation(convId,{deleteWithForks:withForks})},100)}}function handleConfirmEdit(){!get$3(editedName).trim()||!get$3(selectedConversation)||(set$1(showEditDialog,!1),conversationsStore.updateConversationName(get$3(selectedConversation).id,get$3(editedName)),set$1(selectedConversation,null))}function handleMobileSidebarItemClick(){sidebar.isMobile&&sidebar.toggle()}let chatSidebarActions=state$1(void 0),openedForSearch=state$1( +!1);function activateSearchMode(){sidebar.open||set$1(openedForSearch,!0),get$3(chatSidebarActions)?.activateSearch?.()}function handleSearchDeactivated(){get$3(openedForSearch)&&(set$1(openedForSearch,!1),sidebar.toggle())}user_effect(()=>{sidebar.open||(set$1(isSearchModeActive,!1),set$1(searchQuery,""),set$1(openedForSearch,!1))});function editActiveConversation(){if(get$3(currentChatId)&&get$3(filteredConversations).find(conv=>conv.id===get$3(currentChatId))){const event2=new CustomEvent("ed\ +it-active-conversation",{detail:{conversationId:get$3(currentChatId)}});document.dispatchEvent(event2)}}async function selectConversation(id2){get$3(isSearchModeActive)&&(set$1(isSearchModeActive,!1),set$1(searchQuery,"")),handleMobileSidebarItemClick(),await goto(`#/chat/${id2}`)}function handleStopGeneration(id2){chatStore.stopGenerationForChat(id2)}var $$exports={handleMobileSidebarItemClick,activateSearchMode,editActiveConversation},fragment=root$n(),div=first_child(fragment),node2=child(div); +Scroll_area(node2,{class:"h-full flex-1",children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$7(),node_1=first_child(fragment_1);component(node_1,()=>Sidebar_header,($$anchor3,Sidebar_Header)=>{Sidebar_Header($$anchor3,{class:"gap-4 bg-sidebar/50 p-3 backdrop-blur-lg md:pt-4 md:pb-2",children:($$anchor4,$$slotProps2)=>{var fragment_2=root_2$g(),div_1=first_child(fragment_2),a=child(div_1),h1=child(a),text2=child(h1,!0);reset(h1),reset(a);var node_2=sibling(a,2);Button(node_2,{class:"rounded-\ +full md:hidden",variant:"ghost",size:"icon",onclick:()=>sidebar.toggle(),children:($$anchor5,$$slotProps3)=>{var fragment_3=root_3$a(),node_3=first_child(fragment_3);X(node_3,{class:"h-4 w-4"}),next$1(2),append($$anchor5,fragment_3)},$$slots:{default:!0}}),reset(div_1);var node_4=sibling(div_1,2);bind_this(ChatSidebarActions(node_4,{handleMobileSidebarItemClick,onSearchDeactivated:handleSearchDeactivated,get isSearchModeActive(){return get$3(isSearchModeActive)},set isSearchModeActive($$value){set$1( +isSearchModeActive,$$value,!0)},get searchQuery(){return get$3(searchQuery)},set searchQuery($$value){set$1(searchQuery,$$value,!0)}}),$$value=>set$1(chatSidebarActions,$$value,!0),()=>get$3(chatSidebarActions)),template_effect(()=>set_text(text2,APP_NAME)),delegated("click",a,handleMobileSidebarItemClick),append($$anchor4,fragment_2)},$$slots:{default:!0}})});var node_5=sibling(node_1,2);component(node_5,()=>Sidebar_group,($$anchor3,Sidebar_Group)=>{Sidebar_Group($$anchor3,{class:"mt-2 h-[calc(\ +100vh-21rem)] space-y-2 p-0 px-3",children:($$anchor4,$$slotProps2)=>{var fragment_4=root_4$6(),node_6=first_child(fragment_4);{var consequent=$$anchor5=>{var fragment_5=comment$2(),node_7=first_child(fragment_5);component(node_7,()=>Sidebar_group_label,($$anchor6,Sidebar_GroupLabel)=>{Sidebar_GroupLabel($$anchor6,{children:($$anchor7,$$slotProps3)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,get$3(isSearchModeActive)?"Search results":"Recent conversations")),append($$anchor7, +text_1)},$$slots:{default:!0}})}),append($$anchor5,fragment_5)};if_block(node_6,$$render=>{(get$3(filteredConversations).length>0&&get$3(isSearchModeActive)||!get$3(isSearchModeActive))&&$$render(consequent)})}var node_8=sibling(node_6,2);component(node_8,()=>Sidebar_group_content,($$anchor5,Sidebar_GroupContent)=>{Sidebar_GroupContent($$anchor5,{children:($$anchor6,$$slotProps3)=>{var fragment_7=comment$2(),node_9=first_child(fragment_7);component(node_9,()=>Sidebar_menu,($$anchor7,Sidebar_Menu)=>{ +Sidebar_Menu($$anchor7,{children:($$anchor8,$$slotProps4)=>{var fragment_8=root_8$6(),node_10=first_child(fragment_8);each(node_10,17,()=>get$3(conversationTree),({conversation,depth})=>conversation.id,($$anchor9,$$item)=>{let conversation=()=>get$3($$item).conversation,depth=()=>get$3($$item).depth;var fragment_9=comment$2(),node_11=first_child(fragment_9);component(node_11,()=>Sidebar_menu_item,($$anchor10,Sidebar_MenuItem)=>{Sidebar_MenuItem($$anchor10,{class:"mb-1 p-0",children:($$anchor11,$$slotProps5)=>{ +{let $0=user_derived(()=>({id:conversation().id,name:conversation().name,lastModified:conversation().lastModified,currNode:conversation().currNode,forkedFromConversationId:conversation().forkedFromConversationId})),$1=user_derived(()=>get$3(currentChatId)===conversation().id);ChatSidebarConversationItem($$anchor11,{get conversation(){return get$3($0)},get depth(){return depth()},get isActive(){return get$3($1)},onSelect:selectConversation,onEdit:handleEditConversation,onDelete:handleDeleteConversation, +onStop:handleStopGeneration})}},$$slots:{default:!0}})}),append($$anchor9,fragment_9)});var node_12=sibling(node_10,2);{var consequent_1=$$anchor9=>{var div_2=root_11$2(),p2=child(div_2),text_2=child(p2,!0);reset(p2),reset(div_2),template_effect(()=>set_text(text_2,get$3(searchQuery).length>0?"No results found":get$3(isSearchModeActive)?"Start typing to see results":"No conversations yet")),append($$anchor9,div_2)};if_block(node_12,$$render=>{get$3(conversationTree).length===0&&$$render(consequent_1)})} +append($$anchor8,fragment_8)},$$slots:{default:!0}})}),append($$anchor6,fragment_7)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)},$$slots:{default:!0}}),reset(div);var node_13=sibling(div,2);{let $0=user_derived(()=>get$3(selectedConversation)?`Are you sure you want to delete "${get$3(selectedConversationNamePreview)}"? This action cannot be undone and will permanently remove all messages in this conversation.`:"");DialogConfirmation( +node_13,{title:"Delete Conversation",get description(){return get$3($0)},confirmText:"Delete",cancelText:"Cancel",variant:"destructive",get icon(){return Trash_2},onConfirm:handleConfirmDelete,onCancel:()=>{set$1(showDeleteDialog,!1),set$1(selectedConversation,null)},get open(){return get$3(showDeleteDialog)},set open($$value){set$1(showDeleteDialog,$$value,!0)},children:($$anchor2,$$slotProps)=>{var fragment_11=comment$2(),node_14=first_child(fragment_11);{var consequent_2=$$anchor3=>{var div_3=root_13$1(), +node_15=child(div_3);Checkbox(node_15,{id:"delete-with-forks",get checked(){return get$3(deleteWithForks)},set checked($$value){set$1(deleteWithForks,$$value,!0)}});var node_16=sibling(node_15,2);Label(node_16,{for:"delete-with-forks",class:"text-sm",children:($$anchor4,$$slotProps2)=>{next$1();var text_3=text$8("Also delete all forked conversations");append($$anchor4,text_3)},$$slots:{default:!0}}),reset(div_3),append($$anchor3,div_3)};if_block(node_14,$$render=>{get$3(selectedConversationHasDescendants)&& +$$render(consequent_2)})}append($$anchor2,fragment_11)},$$slots:{default:!0}})}var node_17=sibling(node_13,2);return DialogConfirmation(node_17,{title:"Edit Conversation Name",description:"",confirmText:"Save",cancelText:"Cancel",get icon(){return Pencil},onConfirm:handleConfirmEdit,onCancel:()=>{set$1(showEditDialog,!1),set$1(selectedConversation,null)},onKeydown:e=>{e.key==="Enter"&&(e.preventDefault(),e.stopImmediatePropagation(),handleConfirmEdit())},get open(){return get$3(showEditDialog)}, +set open($$value){set$1(showEditDialog,$$value,!0)},children:($$anchor2,$$slotProps)=>{Input($$anchor2,{class:"text-foreground",placeholder:"Enter a new name",type:"text",get value(){return get$3(editedName)},set value($$value){set$1(editedName,$$value,!0)}})},$$slots:{default:!0}}),append($$anchor,fragment),pop($$exports)}delegate(["click"]);var root_3$9=from_html('<a class="flex shrink-0 items-center text-muted-foreground transition-colors hover:text-foreground"><!></a>'),root_4$5=from_html("<\ +p>See parent conversation</p>"),root_2$f=from_html("<!> <!>",1),root_7$6=from_html('<div class="stop-button flex h-4 w-4 shrink-0 cursor-pointer items-center justify-center rounded text-muted-foreground transition-colors hover:text-foreground svelte-76ksb2" role="button" tabindex="0" aria-label="Stop generation"><!> <!></div>'),root_8$5=from_html("<p>Stop generation</p>"),root_6$7=from_html("<!> <!>",1),root_9$2=from_html('<div class="actions flex items-center"><!></div>'),root$m=from_html('<but\ +ton><div class="flex min-w-0 flex-1 items-center gap-2"><!> <!> <span class="truncate text-sm font-medium"> </span></div> <!></button>');function ChatSidebarConversationItem($$anchor,$$props){push$1($$props,!0);let isActive=prop($$props,"isActive",3,!1),depth=prop($$props,"depth",3,0),renderActionsDropdown=state$1(!1),dropdownOpen=state$1(!1),isLoading2=user_derived(()=>getAllLoadingChats().includes($$props.conversation.id));function handleEdit(event2){event2.stopPropagation(),$$props.onEdit?.($$props. +conversation.id)}function handleDelete2(event2){event2.stopPropagation(),$$props.onDelete?.($$props.conversation.id)}function handleStop(event2){event2.stopPropagation(),$$props.onStop?.($$props.conversation.id)}function handleGlobalEditEvent(event2){event2.detail.conversationId===$$props.conversation.id&&isActive()&&handleEdit(event2)}function handleMouseLeave(){get$3(dropdownOpen)||set$1(renderActionsDropdown,!1)}function handleMouseOver(){set$1(renderActionsDropdown,!0)}function handleSelect(){ +$$props.onSelect?.($$props.conversation.id)}user_effect(()=>{get$3(dropdownOpen)||set$1(renderActionsDropdown,!1)}),onMount$1(()=>(document.addEventListener("edit-active-conversation",handleGlobalEditEvent),()=>{document.removeEventListener("edit-active-conversation",handleGlobalEditEvent)}));var button=root$m(),div=child(button);let styles2;var node2=child(div);{var consequent=$$anchor2=>{var fragment=comment$2(),node_1=first_child(fragment);component(node_1,()=>Root$5,($$anchor3,Tooltip_Root)=>{ +Tooltip_Root($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_1=root_2$f(),node_2=first_child(fragment_1);component(node_2,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor5,{children:($$anchor6,$$slotProps2)=>{var a=root_3$9(),node_3=child(a);Git_branch(node_3,{class:"h-3.5 w-3.5"}),reset(a),template_effect(()=>set_attribute(a,"href",`#/chat/${$$props.conversation.forkedFromConversationId??""}`)),append($$anchor6,a)},$$slots:{default:!0}})});var node_4=sibling( +node_2,2);component(node_4,()=>Tooltip_content,($$anchor5,Tooltip_Content)=>{Tooltip_Content($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p2=root_4$5();append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_1)},$$slots:{default:!0}})}),append($$anchor2,fragment)};if_block(node2,$$render=>{depth()>0&&$$render(consequent)})}var node_5=sibling(node2,2);{var consequent_1=$$anchor2=>{var fragment_2=comment$2(),node_6=first_child(fragment_2);component(node_6,()=>Root$5,($$anchor3,Tooltip_Root_1)=>{ +Tooltip_Root_1($$anchor3,{children:($$anchor4,$$slotProps)=>{var fragment_3=root_6$7(),node_7=first_child(fragment_3);component(node_7,()=>Tooltip_trigger,($$anchor5,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor5,{children:($$anchor6,$$slotProps2)=>{var div_1=root_7$6(),node_8=child(div_1);Loader_circle(node_8,{class:"loading-icon h-3.5 w-3.5 animate-spin"});var node_9=sibling(node_8,2);Square(node_9,{class:"stop-icon hidden h-3 w-3 fill-current text-destructive"}),reset(div_1),delegated("clic\ +k",div_1,handleStop),delegated("keydown",div_1,e=>e.key==="Enter"&&handleStop(e)),append($$anchor6,div_1)},$$slots:{default:!0}})});var node_10=sibling(node_7,2);component(node_10,()=>Tooltip_content,($$anchor5,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor5,{children:($$anchor6,$$slotProps2)=>{var p_1=root_8$5();append($$anchor6,p_1)},$$slots:{default:!0}})}),append($$anchor4,fragment_3)},$$slots:{default:!0}})}),append($$anchor2,fragment_2)};if_block(node_5,$$render=>{get$3(isLoading2)&&$$render( +consequent_1)})}var span=sibling(node_5,2),text2=child(span,!0);reset(span),reset(div);var node_11=sibling(div,2);{var consequent_2=$$anchor2=>{var div_2=root_9$2(),node_12=child(div_2);{let $0=user_derived(()=>[{icon:Pencil,label:"Edit",onclick:handleEdit,shortcut:["shift","cmd","e"]},{icon:Download,label:"Export",onclick:e=>{e.stopPropagation(),conversationsStore.downloadConversation($$props.conversation.id)},shortcut:["shift","cmd","s"]},{icon:Trash_2,label:"Delete",onclick:handleDelete2,variant:"\ +destructive",shortcut:["shift","cmd","d"],separator:!0}]);DropdownMenuActions(node_12,{get triggerIcon(){return Ellipsis},triggerTooltip:"More actions",get actions(){return get$3($0)},get open(){return get$3(dropdownOpen)},set open($$value){set$1(dropdownOpen,$$value,!0)}})}reset(div_2),append($$anchor2,div_2)};if_block(node_11,$$render=>{get$3(renderActionsDropdown)&&$$render(consequent_2)})}reset(button),template_effect(()=>{set_class(button,1,`group flex min-h-9 w-full cursor-pointer items-ce\ +nter justify-between space-x-3 rounded-lg py-1.5 text-left transition-colors hover:bg-foreground/10 ${isActive()?"bg-foreground/5 text-accent-foreground":""} px-3`,"svelte-76ksb2"),styles2=set_style(div,"",styles2,{"padding-left":`${depth()*FORK_TREE_DEPTH_PADDING}px`}),set_text(text2,$$props.conversation.name)}),delegated("click",button,handleSelect),delegated("mouseover",button,handleMouseOver),event("mouseleave",button,handleMouseLeave),append($$anchor,button),pop()}delegate(["click","mouseov\ +er","keydown"]);const emptyOptions$7={};function toString$1(value,options){const settings=emptyOptions$7,includeImageAlt=typeof settings.includeImageAlt=="boolean"?settings.includeImageAlt:!0,includeHtml=typeof settings.includeHtml=="boolean"?settings.includeHtml:!0;return one$2(value,includeImageAlt,includeHtml)}function one$2(value,includeImageAlt,includeHtml){if(node(value)){if("value"in value)return value.type==="html"&&!includeHtml?"":value.value;if(includeImageAlt&&"alt"in value&&value.alt) +return value.alt;if("children"in value)return all$2(value.children,includeImageAlt,includeHtml)}return Array.isArray(value)?all$2(value,includeImageAlt,includeHtml):""}function all$2(values,includeImageAlt,includeHtml){const result=[];let index2=-1;for(;++index2<values.length;)result[index2]=one$2(values[index2],includeImageAlt,includeHtml);return result.join("")}function node(value){return!!(value&&typeof value=="object")}const element$3=document.createElement("i");function decodeNamedCharacterReference(value){ const characterReference2="&"+value+";";element$3.innerHTML=characterReference2;const character=element$3.textContent;return character.charCodeAt(character.length-1)===59&&value!=="semi"||character===characterReference2?!1:character}function splice(list2,start2,remove2,items2){const end=list2.length;let chunkStart=0,parameters;if(start2<0?start2=-start2>end?0:end+start2:start2=start2>end?end:start2,remove2=remove2>0?remove2:0,items2.length<1e4)parameters=Array.from(items2),parameters.unshift(start2, remove2),list2.splice(...parameters);else for(remove2&&list2.splice(start2,remove2);chunkStart<items2.length;)parameters=items2.slice(chunkStart,chunkStart+1e4),parameters.unshift(start2,0),list2.splice(...parameters),chunkStart+=1e4,start2+=1e4}function push(list2,items2){return list2.length>0?(splice(list2,list2.length,0,items2),list2):items2}const hasOwnProperty={}.hasOwnProperty;function combineExtensions(extensions){const all2={};let index2=-1;for(;++index2<extensions.length;)syntaxExtension( all2,extensions[index2]);return all2}function syntaxExtension(all2,extension2){let hook;for(hook in extension2){const left=(hasOwnProperty.call(all2,hook)?all2[hook]:void 0)||(all2[hook]={}),right=extension2[hook];let code2;if(right)for(code2 in right){hasOwnProperty.call(left,code2)||(left[code2]=[]);const value=right[code2];constructs(left[code2],Array.isArray(value)?value:value?[value]:[])}}}function constructs(existing,list2){let index2=-1;const before=[];for(;++index2<list2.length;)(list2[index2]. @@ -7411,8 +7691,8 @@ node2.url,{before:value,after:node2.title?" ":` `,...tracker.current()}))),subexit(),node2.title&&(subexit=state2.enter(`title${suffix}`),value+=tracker.move(" "+quote),value+=tracker.move(state2.safe(node2.title,{before:value,after:quote,...tracker.current()})),value+=tracker.move(quote),subexit()),exit2(),value}function checkEmphasis(state2){const marker=state2.options.emphasis||"*";if(marker!=="*"&&marker!=="_")throw new Error("Cannot serialize emphasis with `"+marker+"` for `options.emphasis`, expected `*`, or `_`");return marker}function encodeCharacterReference(code2){ return"&#x"+code2.toString(16).toUpperCase()+";"}function encodeInfo(outside,inside,marker){const outsideKind=classifyCharacter(outside),insideKind=classifyCharacter(inside);return outsideKind===void 0?insideKind===void 0?marker==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:insideKind===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:outsideKind===1?insideKind===void 0?{inside:!1,outside:!1}:insideKind===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:insideKind===void 0?{inside:!1,outside:!1}: insideKind===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}emphasis$1.peek=emphasisPeek;function emphasis$1(node2,_,state2,info2){const marker=checkEmphasis(state2),exit2=state2.enter("emphasis"),tracker=state2.createTracker(info2),before=tracker.move(marker);let between2=tracker.move(state2.containerPhrasing(node2,{after:marker,before,...tracker.current()}));const betweenHead=between2.charCodeAt(0),open2=encodeInfo(info2.before.charCodeAt(info2.before.length-1),betweenHead,marker);open2.inside&& -(between2=encodeCharacterReference(betweenHead)+between2.slice(1));const betweenTail=between2.charCodeAt(between2.length-1),close2=encodeInfo(info2.after.charCodeAt(0),betweenTail,marker);close2.inside&&(between2=between2.slice(0,-1)+encodeCharacterReference(betweenTail));const after=tracker.move(marker);return exit2(),state2.attentionEncodeSurroundingInfo={after:close2.outside,before:open2.outside},before+between2+after}function emphasisPeek(_,_12,state2){return state2.options.emphasis||"*"}const convert=function(test){ -if(test==null)return ok$1;if(typeof test=="function")return castFactory$1(test);if(typeof test=="object")return Array.isArray(test)?anyFactory$1(test):propsFactory(test);if(typeof test=="string")return typeFactory(test);throw new Error("Expected function, string, or object as test")};function anyFactory$1(tests){const checks2=[];let index2=-1;for(;++index2<tests.length;)checks2[index2]=convert(tests[index2]);return castFactory$1(any2);function any2(...parameters){let index3=-1;for(;++index3<checks2. +(between2=encodeCharacterReference(betweenHead)+between2.slice(1));const betweenTail=between2.charCodeAt(between2.length-1),close2=encodeInfo(info2.after.charCodeAt(0),betweenTail,marker);close2.inside&&(between2=between2.slice(0,-1)+encodeCharacterReference(betweenTail));const after=tracker.move(marker);return exit2(),state2.attentionEncodeSurroundingInfo={after:close2.outside,before:open2.outside},before+between2+after}function emphasisPeek(_,_12,state2){return state2.options.emphasis||"*"}const convert=(function(test){ +if(test==null)return ok$1;if(typeof test=="function")return castFactory$1(test);if(typeof test=="object")return Array.isArray(test)?anyFactory$1(test):propsFactory(test);if(typeof test=="string")return typeFactory(test);throw new Error("Expected function, string, or object as test")});function anyFactory$1(tests){const checks2=[];let index2=-1;for(;++index2<tests.length;)checks2[index2]=convert(tests[index2]);return castFactory$1(any2);function any2(...parameters){let index3=-1;for(;++index3<checks2. length;)if(checks2[index3].apply(this,parameters))return!0;return!1}}function propsFactory(check){const checkAsRecord=check;return castFactory$1(all2);function all2(node2){const nodeAsRecord=node2;let key2;for(key2 in check)if(nodeAsRecord[key2]!==checkAsRecord[key2])return!1;return!0}}function typeFactory(check){return castFactory$1(type2);function type2(node2){return node2&&node2.type===check}}function castFactory$1(testFunction){return check;function check(value,index2,parent){return!!(looksLikeANode( value)&&testFunction.call(this,value,typeof index2=="number"?index2:void 0,parent||void 0))}}function ok$1(){return!0}function looksLikeANode(value){return value!==null&&typeof value=="object"&&"type"in value}const empty$1=[],CONTINUE=!0,EXIT=!1,SKIP="skip";function visitParents(tree,test,visitor,reverse){let check;typeof test=="function"&&typeof visitor!="function"?(reverse=visitor,visitor=test):check=test;const is2=convert(check),step=reverse?-1:1;factory(tree,void 0,[])();function factory(node2,index2,parents){const value=node2&&typeof node2=="object"?node2:{};if(typeof value.type=="string"){const name=typeof value.tagName=="string"?value.tagName:typeof value.name=="string"?value.name:void 0;Object. defineProperty(visit2,"name",{value:"node ("+(node2.type+(name?"<"+name+">":""))+")"})}return visit2;function visit2(){let result=empty$1,subresult,offset2,grandparents;if((!test||is2(node2,index2,parents[parents.length-1]||void 0))&&(result=toResult(visitor(node2,parents)),result[0]===EXIT))return result;if("children"in node2&&node2.children){const nodeAsParent=node2;if(nodeAsParent.children&&result[0]!==SKIP)for(offset2=(reverse?nodeAsParent.children.length:-1)+step,grandparents=parents.concat( @@ -7442,11 +7722,11 @@ length-3]===0&&(useDifferentMarker=!0),checkRule(state2)===bullet&&firstListItem value}function checkListItemIndent(state2){const style2=state2.options.listItemIndent||"one";if(style2!=="tab"&&style2!=="one"&&style2!=="mixed")throw new Error("Cannot serialize items with `"+style2+"` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`");return style2}function listItem$1(node2,parent,state2,info2){const listItemIndent=checkListItemIndent(state2);let bullet=state2.bulletCurrent||checkBullet(state2);parent&&parent.type==="list"&&parent.ordered&&(bullet=(typeof parent. start=="number"&&parent.start>-1?parent.start:1)+(state2.options.incrementListMarker===!1?0:parent.children.indexOf(node2))+bullet);let size2=bullet.length+1;(listItemIndent==="tab"||listItemIndent==="mixed"&&(parent&&parent.type==="list"&&parent.spread||node2.spread))&&(size2=Math.ceil(size2/4)*4);const tracker=state2.createTracker(info2);tracker.move(bullet+" ".repeat(size2-bullet.length)),tracker.shift(size2);const exit2=state2.enter("listItem"),value=state2.indentLines(state2.containerFlow(node2, tracker.current()),map2);return exit2(),value;function map2(line,index2,blank){return index2?(blank?"":" ".repeat(size2))+line:(blank?bullet:bullet+" ".repeat(size2-bullet.length))+line}}function paragraph$1(node2,_,state2,info2){const exit2=state2.enter("paragraph"),subexit=state2.enter("phrasing"),value=state2.containerPhrasing(node2,info2);return subexit(),exit2(),value}const phrasing=convert(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","in\ -lineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function root$u(node2,_,state2,info2){return(node2.children.some(function(d2){return phrasing(d2)})?state2.containerPhrasing:state2.containerFlow).call(state2,node2,info2)}function checkStrong(state2){const marker=state2.options.strong||"*";if(marker!=="*"&&marker!=="_")throw new Error("Cannot serialize strong with `"+marker+"` for `options.strong`, expected `*`, or `_`");return marker}strong$1. +lineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function root$l(node2,_,state2,info2){return(node2.children.some(function(d2){return phrasing(d2)})?state2.containerPhrasing:state2.containerFlow).call(state2,node2,info2)}function checkStrong(state2){const marker=state2.options.strong||"*";if(marker!=="*"&&marker!=="_")throw new Error("Cannot serialize strong with `"+marker+"` for `options.strong`, expected `*`, or `_`");return marker}strong$1. peek=strongPeek;function strong$1(node2,_,state2,info2){const marker=checkStrong(state2),exit2=state2.enter("strong"),tracker=state2.createTracker(info2),before=tracker.move(marker+marker);let between2=tracker.move(state2.containerPhrasing(node2,{after:marker,before,...tracker.current()}));const betweenHead=between2.charCodeAt(0),open2=encodeInfo(info2.before.charCodeAt(info2.before.length-1),betweenHead,marker);open2.inside&&(between2=encodeCharacterReference(betweenHead)+between2.slice(1));const betweenTail=between2. charCodeAt(between2.length-1),close2=encodeInfo(info2.after.charCodeAt(0),betweenTail,marker);close2.inside&&(between2=between2.slice(0,-1)+encodeCharacterReference(betweenTail));const after=tracker.move(marker+marker);return exit2(),state2.attentionEncodeSurroundingInfo={after:close2.outside,before:open2.outside},before+between2+after}function strongPeek(_,_12,state2){return state2.options.strong||"*"}function text$5(node2,_,state2,info2){return state2.safe(node2.value,info2)}function checkRuleRepetition(state2){ const repetition=state2.options.ruleRepetition||3;if(repetition<3)throw new Error("Cannot serialize rules with repetition `"+repetition+"` for `options.ruleRepetition`, expected `3` or more");return repetition}function thematicBreak$1(_,_12,state2){const value=(checkRule(state2)+(state2.options.ruleSpaces?" ":"")).repeat(checkRuleRepetition(state2));return state2.options.ruleSpaces?value.slice(0,-1):value}const handle$1={blockquote:blockquote$1,break:hardBreak$1,code:code$2,definition,emphasis:emphasis$1, -hardBreak:hardBreak$1,heading:heading$1,html:html$5,image:image$1,imageReference:imageReference$1,inlineCode:inlineCode$1,link:link$1,linkReference:linkReference$1,list:list$1,listItem:listItem$1,paragraph:paragraph$1,root:root$u,strong:strong$1,text:text$5,thematicBreak:thematicBreak$1},join$1=[joinDefaults];function joinDefaults(left,right,parent,state2){if(right.type==="code"&&formatCodeAsIndented(right,state2)&&(left.type==="list"||left.type===right.type&&formatCodeAsIndented(left,state2)))return!1; +hardBreak:hardBreak$1,heading:heading$1,html:html$5,image:image$1,imageReference:imageReference$1,inlineCode:inlineCode$1,link:link$1,linkReference:linkReference$1,list:list$1,listItem:listItem$1,paragraph:paragraph$1,root:root$l,strong:strong$1,text:text$5,thematicBreak:thematicBreak$1},join$1=[joinDefaults];function joinDefaults(left,right,parent,state2){if(right.type==="code"&&formatCodeAsIndented(right,state2)&&(left.type==="list"||left.type===right.type&&formatCodeAsIndented(left,state2)))return!1; if("spread"in parent&&typeof parent.spread=="boolean")return left.type==="paragraph"&&(left.type===right.type||right.type==="definition"||right.type==="heading"&&formatHeadingAsSetext(right,state2))?void 0:parent.spread?1:0}const fullPhrasingSpans=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"],unsafe=[{character:" ",after:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",before:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",inConstruct:["codeFenc\ edLangGraveAccent","codeFencedLangTilde"]},{character:"\r",inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde","codeFencedMetaGraveAccent","codeFencedMetaTilde","destinationLiteral","headingAtx"]},{character:` `,inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde","codeFencedMetaGraveAccent","codeFencedMetaTilde","destinationLiteral","headingAtx"]},{character:" ",after:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",before:"[\\r\\n]",inConstruct:"phrasing"},{character:" ",inConstruct:["codeFencedLangGraveAccent","codeFencedLangTilde"]},{character:"!",after:"\\[",inConstruct:"phrasing",notInConstruct:fullPhrasingSpans},{character:'"',inConstruct:"titleQuote"},{atBreak:!0,character:"#"},{character:"\ @@ -7508,7 +7788,7 @@ scheme file");throw error2.code="ERR_INVALID_URL_SCHEME",error2}return getPathFr start with `.`");if(extname2.includes(".",1))throw new Error("`extname` cannot contain multiple dots")}this.path=minpath.join(this.dirname,this.stem+(extname2||""))}get path(){return this.history[this.history.length-1]}set path(path2){isUrl(path2)&&(path2=urlToPath(path2)),assertNonEmpty(path2,"path"),this.path!==path2&&this.history.push(path2)}get stem(){return typeof this.path=="string"?minpath.basename(this.path,this.extname):void 0}set stem(stem){assertNonEmpty(stem,"stem"),assertPart(stem, "stem"),this.path=minpath.join(this.dirname||"",stem+(this.extname||""))}fail(causeOrReason,optionsOrParentOrPlace,origin2){const message=this.message(causeOrReason,optionsOrParentOrPlace,origin2);throw message.fatal=!0,message}info(causeOrReason,optionsOrParentOrPlace,origin2){const message=this.message(causeOrReason,optionsOrParentOrPlace,origin2);return message.fatal=void 0,message}message(causeOrReason,optionsOrParentOrPlace,origin2){const message=new VFileMessage(causeOrReason,optionsOrParentOrPlace, origin2);return this.path&&(message.name=this.path+":"+message.name,message.file=this.path),message.fatal=!1,this.messages.push(message),message}toString(encoding){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(encoding||void 0).decode(this.value)}}function assertPart(part,name){if(part&&part.includes(minpath.sep))throw new Error("`"+name+"` cannot be a path: did not expect `"+minpath.sep+"`")}function assertNonEmpty(part,name){if(!part)throw new Error("`"+name+ -"` cannot be empty")}function assertPath(path2,name){if(!path2)throw new Error("Setting `"+name+"` requires `path` to be set too")}function isUint8Array$1(value){return!!(value&&typeof value=="object"&&"byteLength"in value&&"byteOffset"in value)}const CallableInstance=function(property){const proto=this.constructor.prototype,value=proto[property],apply=function(){return value.apply(apply,arguments)};return Object.setPrototypeOf(apply,proto),apply},own$3={}.hasOwnProperty;class Processor extends CallableInstance{constructor(){ +"` cannot be empty")}function assertPath(path2,name){if(!path2)throw new Error("Setting `"+name+"` requires `path` to be set too")}function isUint8Array$1(value){return!!(value&&typeof value=="object"&&"byteLength"in value&&"byteOffset"in value)}const CallableInstance=(function(property){const proto=this.constructor.prototype,value=proto[property],apply=function(){return value.apply(apply,arguments)};return Object.setPrototypeOf(apply,proto),apply}),own$3={}.hasOwnProperty;class Processor extends CallableInstance{constructor(){ super("copy"),this.Compiler=void 0,this.Parser=void 0,this.attachers=[],this.compiler=void 0,this.freezeIndex=-1,this.frozen=void 0,this.namespace={},this.parser=void 0,this.transformers=trough()}copy(){const destination=new Processor;let index2=-1;for(;++index2<this.attachers.length;){const attacher=this.attachers[index2];destination.use(...attacher)}return destination.data(extend(!0,{},this.namespace)),destination}data(key2,value){return typeof key2=="string"?arguments.length===2?(assertUnfrozen( "data",this.frozen),this.namespace[key2]=value,this):own$3.call(this.namespace,key2)&&this.namespace[key2]||void 0:key2?(assertUnfrozen("data",this.frozen),this.namespace=key2,this):this.namespace}freeze(){if(this.frozen)return this;const self2=this;for(;++this.freezeIndex<this.attachers.length;){const[attacher,...options]=this.attachers[this.freezeIndex];if(options[0]===!1)continue;options[0]===!0&&(options[0]=void 0);const transformer=attacher.call(self2,...options);typeof transformer=="functi\ on"&&this.transformers.use(transformer)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(file){this.freeze();const realFile=vfile(file),parser=this.parser||this.Parser;return assertParser("parse",parser),parser(String(realFile),realFile)}process(file,done){const self2=this;return this.freeze(),assertParser("process",this.parser||this.Parser),assertCompiler("process",this.compiler||this.Compiler),done?executor(void 0,done):new Promise(executor);function executor(resolve2,reject){ @@ -8532,9 +8812,9 @@ if(this.consume(),match)for(var i=0;i<match[0].length;i++){var accent2=match[0][ "KaTeX doesn't work in quirks mode.")});var renderToString=function(expression,options){var markup=renderToDomTree(expression,options).toMarkup();return markup},generateParseTree=function(expression,options){var settings=new Settings(options);return parseTree(expression,settings)},renderError=function(error2,expression,options){if(options.throwOnError||!(error2 instanceof ParseError2))throw error2;var node2=buildCommon.makeSpan(["katex-error"],[new SymbolNode(expression)]);return node2.setAttribute( "title",error2.toString()),node2.setAttribute("style","color:"+options.errorColor),node2},renderToDomTree=function(expression,options){var settings=new Settings(options);try{var tree=parseTree(expression,settings);return buildTree(tree,expression,settings)}catch(error2){return renderError(error2,expression,settings)}},renderToHTMLTree=function(expression,options){var settings=new Settings(options);try{var tree=parseTree(expression,settings);return buildHTMLTree(tree,expression,settings)}catch(error2){ return renderError(error2,expression,settings)}},version="0.16.22",__domTree={Span,Anchor,SymbolNode,SvgNode,PathNode,LineNode},katex={version,render,renderToString,ParseError:ParseError2,SETTINGS_SCHEMA,__parse:generateParseTree,__renderToDomTree:renderToDomTree,__renderToHTMLTree:renderToHTMLTree,__setFontMetrics:setFontMetrics,__defineSymbol:defineSymbol,__defineFunction:defineFunction,__defineMacro:defineMacro,__domTree};const emptyOptions$5={};function remarkMath(options){const self2=this,settings=options|| -emptyOptions$5,data=self2.data(),micromarkExtensions=data.micromarkExtensions||(data.micromarkExtensions=[]),fromMarkdownExtensions=data.fromMarkdownExtensions||(data.fromMarkdownExtensions=[]),toMarkdownExtensions=data.toMarkdownExtensions||(data.toMarkdownExtensions=[]);micromarkExtensions.push(math$1(settings)),fromMarkdownExtensions.push(mathFromMarkdown()),toMarkdownExtensions.push(mathToMarkdown(settings))}const findAfter=function(parent,index2,test){const is2=convert(test);if(!parent||!parent. -type||!parent.children)throw new Error("Expected parent node");if(typeof index2=="number"){if(index2<0||index2===Number.POSITIVE_INFINITY)throw new Error("Expected positive finite number as index")}else if(index2=parent.children.indexOf(index2),index2<0)throw new Error("Expected child node or index");for(;++index2<parent.children.length;)if(is2(parent.children[index2],index2,parent))return parent.children[index2]},convertElement=function(test){if(test==null)return element$2;if(typeof test=="stri\ -ng")return tagNameFactory(test);if(typeof test=="object")return anyFactory(test);if(typeof test=="function")return castFactory(test);throw new Error("Expected function, string, or array as `test`")};function anyFactory(tests){const checks2=[];let index2=-1;for(;++index2<tests.length;)checks2[index2]=convertElement(tests[index2]);return castFactory(any2);function any2(...parameters){let index3=-1;for(;++index3<checks2.length;)if(checks2[index3].apply(this,parameters))return!0;return!1}}function tagNameFactory(check){ +emptyOptions$5,data=self2.data(),micromarkExtensions=data.micromarkExtensions||(data.micromarkExtensions=[]),fromMarkdownExtensions=data.fromMarkdownExtensions||(data.fromMarkdownExtensions=[]),toMarkdownExtensions=data.toMarkdownExtensions||(data.toMarkdownExtensions=[]);micromarkExtensions.push(math$1(settings)),fromMarkdownExtensions.push(mathFromMarkdown()),toMarkdownExtensions.push(mathToMarkdown(settings))}const findAfter=(function(parent,index2,test){const is2=convert(test);if(!parent||!parent. +type||!parent.children)throw new Error("Expected parent node");if(typeof index2=="number"){if(index2<0||index2===Number.POSITIVE_INFINITY)throw new Error("Expected positive finite number as index")}else if(index2=parent.children.indexOf(index2),index2<0)throw new Error("Expected child node or index");for(;++index2<parent.children.length;)if(is2(parent.children[index2],index2,parent))return parent.children[index2]}),convertElement=(function(test){if(test==null)return element$2;if(typeof test=="st\ +ring")return tagNameFactory(test);if(typeof test=="object")return anyFactory(test);if(typeof test=="function")return castFactory(test);throw new Error("Expected function, string, or array as `test`")});function anyFactory(tests){const checks2=[];let index2=-1;for(;++index2<tests.length;)checks2[index2]=convertElement(tests[index2]);return castFactory(any2);function any2(...parameters){let index3=-1;for(;++index3<checks2.length;)if(checks2[index3].apply(this,parameters))return!0;return!1}}function tagNameFactory(check){ return castFactory(tagName);function tagName(element2){return element2.tagName===check}}function castFactory(testFunction){return check;function check(value,index2,parent){return!!(looksLikeAnElement(value)&&testFunction.call(this,value,typeof index2=="number"?index2:void 0,parent||void 0))}}function element$2(element2){return!!(element2&&typeof element2=="object"&&"type"in element2&&element2.type==="element"&&"tagName"in element2&&typeof element2.tagName=="string")}function looksLikeAnElement(value){ return value!==null&&typeof value=="object"&&"type"in value&&"tagName"in value}const searchLineFeeds=/\n/g,searchTabOrSpaces=/[\t ]+/g,br=convertElement("br"),cell=convertElement(isCell),p$1=convertElement("p"),row=convertElement("tr"),notRendered=convertElement(["datalist","head","noembed","noframes","noscript","rp","script","style","template","title",hidden,closedDialog]),blockOrCaption=convertElement(["address","article","aside","blockquote","body","caption","center","dd","dialog","dir","dl", "dt","div","figure","figcaption","footer","form,","h1","h2","h3","h4","h5","h6","header","hgroup","hr","html","legend","li","listing","main","menu","nav","ol","p","plaintext","pre","section","ul","xmp"]);function toText(tree,options){const options_=options||{},children="children"in tree?tree.children:[],block2=blockOrCaption(tree),whitespace2=inferWhitespace(tree,{whitespace:options_.whitespace||"normal"}),results=[];(tree.type==="text"||tree.type==="comment")&&results.push(...collectText(tree,{ @@ -10479,7 +10759,7 @@ unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:node `}),child2.type==="element"&&child2.tagName==="p"&&!loose?children.push(...child2.children):children.push(child2)}const tail=results[results.length-1];tail&&(loose||tail.type!=="element"||tail.tagName!=="p")&&children.push({type:"text",value:` `});const result={type:"element",tagName:"li",properties:properties2,children};return state2.patch(node2,result),state2.applyData(node2,result)}function listLoose(node2){let loose=!1;if(node2.type==="list"){loose=node2.spread||!1;const children=node2.children;let index2=-1;for(;!loose&&++index2<children.length;)loose=listItemLoose(children[index2])}return loose}function listItemLoose(node2){const spread=node2.spread;return spread??node2.children.length>1}function list(state2,node2){const properties2={}, results=state2.all(node2);let index2=-1;for(typeof node2.start=="number"&&node2.start!==1&&(properties2.start=node2.start);++index2<results.length;){const child2=results[index2];if(child2.type==="element"&&child2.tagName==="li"&&child2.properties&&Array.isArray(child2.properties.className)&&child2.properties.className.includes("task-list-item")){properties2.className=["contains-task-list"];break}}const result={type:"element",tagName:node2.ordered?"ol":"ul",properties:properties2,children:state2. -wrap(results,!0)};return state2.patch(node2,result),state2.applyData(node2,result)}function paragraph(state2,node2){const result={type:"element",tagName:"p",properties:{},children:state2.all(node2)};return state2.patch(node2,result),state2.applyData(node2,result)}function root$t(state2,node2){const result={type:"root",children:state2.wrap(state2.all(node2))};return state2.patch(node2,result),state2.applyData(node2,result)}function strong(state2,node2){const result={type:"element",tagName:"strong", +wrap(results,!0)};return state2.patch(node2,result),state2.applyData(node2,result)}function paragraph(state2,node2){const result={type:"element",tagName:"p",properties:{},children:state2.all(node2)};return state2.patch(node2,result),state2.applyData(node2,result)}function root$k(state2,node2){const result={type:"root",children:state2.wrap(state2.all(node2))};return state2.patch(node2,result),state2.applyData(node2,result)}function strong(state2,node2){const result={type:"element",tagName:"strong", properties:{},children:state2.all(node2)};return state2.patch(node2,result),state2.applyData(node2,result)}const pointEnd=point("end"),pointStart=point("start");function point(type2){return point2;function point2(node2){const point3=node2&&node2.position&&node2.position[type2]||{};if(typeof point3.line=="number"&&point3.line>0&&typeof point3.column=="number"&&point3.column>0)return{line:point3.line,column:point3.column,offset:typeof point3.offset=="number"&&point3.offset>-1?point3.offset:void 0}}} function position(node2){const start2=pointStart(node2),end=pointEnd(node2);if(start2&&end)return{start:start2,end}}function table(state2,node2){const rows=state2.all(node2),firstRow=rows.shift(),tableContent=[];if(firstRow){const head2={type:"element",tagName:"thead",properties:{},children:state2.wrap([firstRow],!0)};state2.patch(node2.children[0],head2),tableContent.push(head2)}if(rows.length>0){const body2={type:"element",tagName:"tbody",properties:{},children:state2.wrap(rows,!0)},start2=pointStart( node2.children[1]),end=pointEnd(node2.children[node2.children.length-1]);start2&&end&&(body2.position={start:start2,end}),tableContent.push(body2)}const result={type:"element",tagName:"table",properties:{},children:state2.wrap(tableContent,!0)};return state2.patch(node2,result),state2.applyData(node2,result)}function tableRow(state2,node2,parent){const siblings2=parent?parent.children:void 0,tagName=(siblings2?siblings2.indexOf(node2):1)===0?"th":"td",align=parent&&parent.type==="table"?parent.align: @@ -10487,7 +10767,7 @@ void 0,length=align?align.length:node2.children.length;let cellIndex=-1;const ce children:state2.wrap(cells2,!0)};return state2.patch(node2,result),state2.applyData(node2,result)}function tableCell(state2,node2){const result={type:"element",tagName:"td",properties:{},children:state2.all(node2)};return state2.patch(node2,result),state2.applyData(node2,result)}const tab=9,space=32;function trimLines(value){const source2=String(value),search2=/\r?\n|\r/g;let match=search2.exec(source2),last=0;const lines=[];for(;match;)lines.push(trimLine(source2.slice(last,match.index),last>0, !0),match[0]),last=match.index+match[0].length,match=search2.exec(source2);return lines.push(trimLine(source2.slice(last),last>0,!1)),lines.join("")}function trimLine(value,start2,end){let startIndex=0,endIndex=value.length;if(start2){let code2=value.codePointAt(startIndex);for(;code2===tab||code2===space;)startIndex++,code2=value.codePointAt(startIndex)}if(end){let code2=value.codePointAt(endIndex-1);for(;code2===tab||code2===space;)endIndex--,code2=value.codePointAt(endIndex-1)}return endIndex> startIndex?value.slice(startIndex,endIndex):""}function text$2(state2,node2){const result={type:"text",value:trimLines(String(node2.value))};return state2.patch(node2,result),state2.applyData(node2,result)}function thematicBreak(state2,node2){const result={type:"element",tagName:"hr",properties:{},children:[]};return state2.patch(node2,result),state2.applyData(node2,result)}const handlers={blockquote,break:hardBreak,code,delete:strikethrough,emphasis,footnoteReference,heading,html:html$4,imageReference, -image,inlineCode,linkReference,link,listItem,list,paragraph,root:root$t,strong,table,tableCell,tableRow,text:text$2,thematicBreak,toml:ignore,yaml:ignore,definition:ignore,footnoteDefinition:ignore};function ignore(){}const VOID=-1,PRIMITIVE=0,ARRAY=1,OBJECT=2,DATE=3,REGEXP=4,MAP=5,SET=6,ERROR=7,BIGINT=8,env=typeof self=="object"?self:globalThis,deserializer=($,_)=>{const as=(out,index2)=>($.set(index2,out),out),unpair=index2=>{if($.has(index2))return $.get(index2);const[type2,value]=_[index2];switch(type2){case PRIMITIVE:case VOID: +image,inlineCode,linkReference,link,listItem,list,paragraph,root:root$k,strong,table,tableCell,tableRow,text:text$2,thematicBreak,toml:ignore,yaml:ignore,definition:ignore,footnoteDefinition:ignore};function ignore(){}const VOID=-1,PRIMITIVE=0,ARRAY=1,OBJECT=2,DATE=3,REGEXP=4,MAP=5,SET=6,ERROR=7,BIGINT=8,env=typeof self=="object"?self:globalThis,deserializer=($,_)=>{const as=(out,index2)=>($.set(index2,out),out),unpair=index2=>{if($.has(index2))return $.get(index2);const[type2,value]=_[index2];switch(type2){case PRIMITIVE:case VOID: return as(value,index2);case ARRAY:{const arr=as([],index2);for(const index3 of value)arr.push(unpair(index3));return arr}case OBJECT:{const object2=as({},index2);for(const[key2,index3]of value)object2[unpair(key2)]=unpair(index3);return object2}case DATE:return as(new Date(value),index2);case REGEXP:{const{source:source2,flags:flags2}=value;return as(new RegExp(source2,flags2),index2)}case MAP:{const map2=as(new Map,index2);for(const[key2,index3]of value)map2.set(unpair(key2),unpair(index3));return map2}case SET:{ const set2=as(new Set,index2);for(const index3 of value)set2.add(unpair(index3));return set2}case ERROR:{const{name,message}=value;return as(new env[name](message),index2)}case BIGINT:return as(BigInt(value),index2);case"BigInt":return as(Object(BigInt(value)),index2);case"ArrayBuffer":return as(new Uint8Array(value).buffer,value);case"DataView":{const{buffer}=new Uint8Array(value);return as(new DataView(buffer),value)}}return as(new env[type2](value),index2)};return unpair},deserialize=serialized=>deserializer( new Map,serialized)(0),EMPTY="",{toString}={},{keys}=Object,typeOf=value=>{const type2=typeof value;if(type2!=="object"||!value)return[PRIMITIVE,type2];const asString=toString.call(value).slice(8,-1);switch(asString){case"Array":return[ARRAY,EMPTY];case"Object":return[OBJECT,EMPTY];case"Date":return[DATE,EMPTY];case"RegExp":return[REGEXP,EMPTY];case"Map":return[MAP,EMPTY];case"Set":return[SET,EMPTY];case"DataView":return[ARRAY,asString]}return asString.includes("Array")?[ARRAY,asString]:asString. @@ -10564,7 +10844,7 @@ parsePrimitive(info2,info2.property,value):Array.isArray(value)?result=[...value boolean||info2.overloadedBoolean)&&(value===""||normalize(value)===normalize(name)))return!0}return value}function style(styles2){const result=[];for(const[key2,value]of Object.entries(styles2))result.push([key2,value].join(": "));return result.join("; ")}function createAdjustMap(values){const result=new Map;for(const value of values)result.set(value.toLowerCase(),value);return result}const svgCaseSensitiveTagNames=["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateT\ ransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","solidColor","textArea","textPath"],h=createH(html$2,"div"),s=createH( svg,"g",svgCaseSensitiveTagNames),webNamespaces={html:"http://www.w3.org/1999/xhtml",svg:"http://www.w3.org/2000/svg"};function fromDom(tree,options){return transform(tree,{})||{type:"root",children:[]}}function transform(node2,options){const transformed=one$1(node2,options);return transformed&&options.afterTransform&&options.afterTransform(node2,transformed),transformed}function one$1(node2,options){switch(node2.nodeType){case 1:return element$1(node2,options);case 3:return text$1(node2);case 8: -return comment$1(node2);case 9:return root$s(node2,options);case 10:return doctype$1();case 11:return root$s(node2,options);default:return}}function root$s(node2,options){return{type:"root",children:all$1(node2,options)}}function doctype$1(){return{type:"doctype"}}function text$1(node2){return{type:"text",value:node2.nodeValue||""}}function comment$1(node2){return{type:"comment",value:node2.nodeValue||""}}function element$1(node2,options){const space2=node2.namespaceURI,x=space2===webNamespaces. +return comment$1(node2);case 9:return root$j(node2,options);case 10:return doctype$1();case 11:return root$j(node2,options);default:return}}function root$j(node2,options){return{type:"root",children:all$1(node2,options)}}function doctype$1(){return{type:"doctype"}}function text$1(node2){return{type:"text",value:node2.nodeValue||""}}function comment$1(node2){return{type:"comment",value:node2.nodeValue||""}}function element$1(node2,options){const space2=node2.namespaceURI,x=space2===webNamespaces. svg?s:h,tagName=space2===webNamespaces.html?node2.tagName.toLowerCase():node2.tagName,content2=space2===webNamespaces.html&&tagName==="template"?node2.content:node2,attributes=node2.getAttributeNames(),properties2={};let index2=-1;for(;++index2<attributes.length;)properties2[attributes[index2]]=node2.getAttribute(attributes[index2])||"";return x(tagName,properties2,all$1(content2,options))}function all$1(node2,options){const nodes2=node2.childNodes,children=[];let index2=-1;for(;++index2<nodes2. length;){const child2=transform(nodes2[index2],options);child2!==void 0&&children.push(child2)}return children}new DOMParser;function fromHtmlIsomorphic(value,options){const node2=parseFragment(value);return fromDom(node2)}function parseFragment(value){const template=document.createElement("template");return template.innerHTML=value,template.content}const emptyOptions$1={},emptyClasses=[];function rehypeKatex(options){const settings=options||emptyOptions$1;return function(tree,file){visitParents( tree,"element",function(element2,parents){const classes=Array.isArray(element2.properties.className)?element2.properties.className:emptyClasses,languageMath=classes.includes("language-math"),mathDisplay=classes.includes("math-display"),mathInline=classes.includes("math-inline");let displayMode=mathDisplay;if(!languageMath&&!mathDisplay&&!mathInline)return;let parent=parents[parents.length-1],scope2=element2;if(element2.tagName==="code"&&languageMath&&parent&&parent.type==="element"&&parent.tagName=== @@ -10609,8 +10889,8 @@ tightSelfClosing||last==="/"||last&&last!=='"'&&last!=="'")&&parts.push(" "),par for(;++index2<values.length;){const last=state2.settings.tightAttributes?values[index2].charAt(values[index2].length-1):void 0;index2!==values.length-1&&last!=='"'&&last!=="'"&&(values[index2]+=" ")}return values.join("")}function serializeAttribute(state2,key2,value){const info2=find(state2.schema,key2),x=state2.settings.allowParseErrors&&state2.schema.space==="html"?0:1,y=state2.settings.allowDangerousCharacters?0:1;let quote=state2.quote,result;if(info2.overloadedBoolean&&(value===info2.attribute|| value==="")?value=!0:(info2.boolean||info2.overloadedBoolean)&&(typeof value!="string"||value===info2.attribute||value==="")&&(value=!!value),value==null||value===!1||typeof value=="number"&&Number.isNaN(value))return"";const name=stringifyEntities(info2.attribute,Object.assign({},state2.settings.characterReferences,{subset:constants.name[x][y]}));return value===!0||(value=Array.isArray(value)?(info2.commaSeparated?stringify$1:stringify)(value,{padLeft:!state2.settings.tightCommaSeparatedLists}): String(value),state2.settings.collapseEmptyAttributes&&!value)?name:(state2.settings.preferUnquoted&&(result=stringifyEntities(value,Object.assign({},state2.settings.characterReferences,{attribute:!0,subset:constants.unquoted[x][y]}))),result!==value&&(state2.settings.quoteSmart&&ccount(value,quote)>ccount(value,state2.alternative)&&(quote=state2.alternative),result=quote+stringifyEntities(value,Object.assign({},state2.settings.characterReferences,{subset:(quote==="'"?constants.single:constants. -double)[x][y],attribute:!0}))+quote),name+(result&&"="+result))}const textEntitySubset=["<","&"];function text(node2,_,parent,state2){return parent&&parent.type==="element"&&(parent.tagName==="script"||parent.tagName==="style")?node2.value:stringifyEntities(node2.value,Object.assign({},state2.settings.characterReferences,{subset:textEntitySubset}))}function raw(node2,index2,parent,state2){return state2.settings.allowDangerousHtml?node2.value:text(node2,index2,parent,state2)}function root$r(node2,_12,_22,state2){ -return state2.all(node2)}const handle=zwitch("type",{invalid,unknown,handlers:{comment,doctype,element,raw,root:root$r,text}});function invalid(node2){throw new Error("Expected node, not `"+node2+"`")}function unknown(node_){const node2=node_;throw new Error("Cannot compile unknown node `"+node2.type+"`")}const emptyOptions={},emptyCharacterReferences={},emptyChildren=[];function toHtml(tree,options){const options_=options||emptyOptions,quote=options_.quote||'"',alternative=quote==='"'?"'":'"';if(quote!== +double)[x][y],attribute:!0}))+quote),name+(result&&"="+result))}const textEntitySubset=["<","&"];function text(node2,_,parent,state2){return parent&&parent.type==="element"&&(parent.tagName==="script"||parent.tagName==="style")?node2.value:stringifyEntities(node2.value,Object.assign({},state2.settings.characterReferences,{subset:textEntitySubset}))}function raw(node2,index2,parent,state2){return state2.settings.allowDangerousHtml?node2.value:text(node2,index2,parent,state2)}function root$i(node2,_12,_22,state2){ +return state2.all(node2)}const handle=zwitch("type",{invalid,unknown,handlers:{comment,doctype,element,raw,root:root$i,text}});function invalid(node2){throw new Error("Expected node, not `"+node2+"`")}function unknown(node_){const node2=node_;throw new Error("Cannot compile unknown node `"+node2.type+"`")}const emptyOptions={},emptyCharacterReferences={},emptyChildren=[];function toHtml(tree,options){const options_=options||emptyOptions,quote=options_.quote||'"',alternative=quote==='"'?"'":'"';if(quote!== '"'&"e!=="'")throw new Error("Invalid quote `"+quote+"`, expected `'` or `\"`");return{one,all,settings:{omitOptionalTags:options_.omitOptionalTags||!1,allowParseErrors:options_.allowParseErrors||!1,allowDangerousCharacters:options_.allowDangerousCharacters||!1,quoteSmart:options_.quoteSmart||!1,preferUnquoted:options_.preferUnquoted||!1,tightAttributes:options_.tightAttributes||!1,upperDoctype:options_.upperDoctype||!1,tightDoctype:options_.tightDoctype||!1,bogusComments:options_.bogusComments|| !1,tightCommaSeparatedLists:options_.tightCommaSeparatedLists||!1,tightSelfClosing:options_.tightSelfClosing||!1,collapseEmptyAttributes:options_.collapseEmptyAttributes||!1,allowDangerousHtml:options_.allowDangerousHtml||!1,voids:options_.voids||htmlVoidElements,characterReferences:options_.characterReferences||emptyCharacterReferences,closeSelfClosing:options_.closeSelfClosing||!1,closeEmptyElements:options_.closeEmptyElements||!1},schema:options_.space==="svg"?svg:html$2,quote,alternative}.one( Array.isArray(tree)?{type:"root",children:tree}:tree,void 0,void 0)}function one(node2,index2,parent){return handle(node2,index2,parent,this)}function all(parent){const results=[],children=parent&&parent.children||emptyChildren;let index2=-1;for(;++index2<children.length;)results[index2]=this.one(children[index2],index2,parent);return results.join("")}function rehypeStringify(options){const self2=this,settings={...self2.data("settings"),...options};self2.compiler=compiler2;function compiler2(tree){ @@ -10632,2457 +10912,2318 @@ index2,1),index2}}return index2+1}return parent.children.splice(index2,1,...repl js-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.\ hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}",githubLightCss="pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-titl\ e.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#\ -24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}";var root_1$g=from_html('<div class="markdown-block svelte-15eq738"><!></div>'),root_2$l=from_html('<div class="markdown-block markdown-block--unstable svelte-15eq738" data-block-id="unstable"><!></div>'),root_3$h=from_html( -'<div class="code-block-wrapper streaming-code-block relative svelte-15eq738"><div class="code-block-header svelte-15eq738"><span class="code-language"> </span> <!></div> <div class="streaming-code-scroll-container svelte-15eq738"><pre class="streaming-code-pre svelte-15eq738"><code><!></code></pre></div></div>'),root$q=from_html("<div><!> <!> <!></div> <!>",1);function MarkdownContent($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disableMath=prop($$props,"disable\ -Math",3,!1),containerRef=state$1(void 0),renderedBlocks=state$1(proxy([])),unstableBlockHtml=state$1(""),incompleteCodeBlock=state$1(null),previewDialogOpen=state$1(!1),previewCode=state$1(""),previewLanguage=state$1("text"),streamingCodeScrollContainer=state$1(void 0);const streamingAutoScroll=createAutoScrollController();let pendingMarkdown=null,isProcessing=!1;const transformCache=new SvelteMap;let previousContent="";const themeStyleId=`highlight-theme-${window.idxThemeStyle=(window.idxThemeStyle?? -0)+1}`;let processor=user_derived(()=>()=>{$$props.attachments;let proc=remark().use(remarkGfm);return disableMath()||(proc=proc.use(remarkMath)),proc=proc.use(remarkBreaks).use(remarkLiteralHtml).use(remarkRehype),disableMath()||(proc=proc.use(rehypeKatex)),proc.use(rehypeHighlight,{languages:grammars,aliases:{[FileTypeText.XML]:[FileTypeText.SVELTE,FileTypeText.VUE]}}).use(rehypeRestoreTableHtml).use(rehypeEnhanceLinks).use(rehypeEnhanceCodeBlocks).use(rehypeResolveAttachmentImages,{attachments:$$props. -attachments}).use(rehypeRtlSupport).use(rehypeStringify,{allowDangerousHtml:!0})});function cleanupEventListeners(){if(!get$4(containerRef))return;const copyButtons=get$4(containerRef).querySelectorAll(".copy-code-btn"),previewButtons=get$4(containerRef).querySelectorAll(".preview-code-btn");for(const button of copyButtons)button.removeEventListener("click",handleCopyClick);for(const button of previewButtons)button.removeEventListener("click",handlePreviewClick)}function cleanupHighlightTheme(){ +24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}";var root_1$6=from_html('<div class="markdown-block svelte-15eq738"></div>'),root_2$e=from_html('<div class="markdown-block markdown-block--unstable svelte-15eq738" data-block-id="unstable"></div>'),root_3$8=from_html('<div\ + class="code-block-wrapper streaming-code-block relative svelte-15eq738"><div class="code-block-header svelte-15eq738"><span class="code-language"> </span> <!></div> <div class="streaming-code-scroll-container svelte-15eq738"><pre class="streaming-code-pre svelte-15eq738"><code></code></pre></div></div>'),root$h=from_html("<div><!> <!> <!></div> <!>",1);function MarkdownContent($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disableMath=prop($$props,"disableMath",3, +!1),containerRef=state$1(void 0),renderedBlocks=state$1(proxy([])),unstableBlockHtml=state$1(""),incompleteCodeBlock=state$1(null),previewDialogOpen=state$1(!1),previewCode=state$1(""),previewLanguage=state$1("text"),streamingCodeScrollContainer=state$1(void 0);const streamingAutoScroll=createAutoScrollController();let pendingMarkdown=null,isProcessing=!1;const transformCache=new SvelteMap;let previousContent="";const themeStyleId=`highlight-theme-${window.idxThemeStyle=(window.idxThemeStyle??0)+ +1}`;let processor=user_derived(()=>()=>{$$props.attachments;let proc=remark().use(remarkGfm);return disableMath()||(proc=proc.use(remarkMath)),proc=proc.use(remarkBreaks).use(remarkLiteralHtml).use(remarkRehype),disableMath()||(proc=proc.use(rehypeKatex)),proc.use(rehypeHighlight,{languages:grammars,aliases:{[FileTypeText.XML]:[FileTypeText.SVELTE,FileTypeText.VUE]}}).use(rehypeRestoreTableHtml).use(rehypeEnhanceLinks).use(rehypeEnhanceCodeBlocks).use(rehypeResolveAttachmentImages,{attachments:$$props. +attachments}).use(rehypeRtlSupport).use(rehypeStringify,{allowDangerousHtml:!0})});function cleanupEventListeners(){if(!get$3(containerRef))return;const copyButtons=get$3(containerRef).querySelectorAll(".copy-code-btn"),previewButtons=get$3(containerRef).querySelectorAll(".preview-code-btn");for(const button of copyButtons)button.removeEventListener("click",handleCopyClick);for(const button of previewButtons)button.removeEventListener("click",handlePreviewClick)}function cleanupHighlightTheme(){ document.getElementById(themeStyleId)?.remove()}function loadHighlightTheme(isDark){document.getElementById(themeStyleId)?.remove();const style2=document.createElement("style");style2.id=themeStyleId,style2.textContent=isDark?githubDarkCss:githubLightCss,document.head.appendChild(style2)}function getCodeInfoFromTarget(target2){const wrapper=target2.closest(".code-block-wrapper");if(!wrapper)return console.error("No wrapper found"),null;const codeElement=wrapper.querySelector("code[data-code-id]"); if(!codeElement)return console.error("No code element found in wrapper"),null;const rawCode=codeElement.textContent??"",language2=wrapper.querySelector(".code-language")?.textContent?.trim()||"text";return{rawCode,language:language2}}function getHastNodeId(node2,indexFallback){const position2=node2.position;return position2?.start?.offset!=null&&position2?.end?.offset!=null?`hast-${position2.start.offset}-${position2.end.offset}`:`${node2.type}-${indexFallback}`}function getMdastNodeHash(node2,index2){ const n=node2;return n.position?.start?.offset!=null&&n.position?.end?.offset!=null?`${n.type}-${n.position.start.offset}-${n.position.end.offset}`:`${n.type}-idx${index2}`}function isAppendMode(newContent){return previousContent.length>0&&newContent.startsWith(previousContent)}async function transformMdastNode(processorInstance,node2,index2){const hash2=getMdastNodeHash(node2,index2),cached2=transformCache.get(hash2);if(cached2)return{html:cached2,hash:hash2};const singleNodeRoot={type:"root",children:[ node2]},transformedRoot=await processorInstance.run(singleNodeRoot),html2=processorInstance.stringify(transformedRoot);return transformCache.set(hash2,html2),{html:html2,hash:hash2}}async function handleCopyClick(event2){event2.preventDefault(),event2.stopPropagation();const target2=event2.currentTarget;if(!target2)return;const info2=getCodeInfoFromTarget(target2);if(info2)try{await copyCodeToClipboard(info2.rawCode)}catch(error2){console.error("Failed to copy code:",error2)}}function handlePreviewDialogOpenChange(open2){ set$1(previewDialogOpen,open2,!0),open2||(set$1(previewCode,""),set$1(previewLanguage,"text"))}function handlePreviewClick(event2){event2.preventDefault(),event2.stopPropagation();const target2=event2.currentTarget;if(!target2)return;const info2=getCodeInfoFromTarget(target2);info2&&(set$1(previewCode,info2.rawCode,!0),set$1(previewLanguage,info2.language,!0),set$1(previewDialogOpen,!0))}async function processMarkdown(markdown2){if(markdown2===previousContent)return;if(!markdown2){set$1(renderedBlocks, -[],!0),set$1(unstableBlockHtml,""),set$1(incompleteCodeBlock,null),previousContent="";return}const incompleteBlock=detectIncompleteCodeBlock(markdown2);if(incompleteBlock){const prefixMarkdown=markdown2.slice(0,incompleteBlock.openingIndex);if(prefixMarkdown.trim()){const normalizedPrefix=preprocessLaTeX(prefixMarkdown),processorInstance2=get$4(processor)(),mdastChildren2=processorInstance2.parse(normalizedPrefix).children??[],nextBlocks2=[],appendMode2=isAppendMode(prefixMarkdown),previousBlockCount2=appendMode2? -get$4(renderedBlocks).length:0;for(let index2=0;index2<mdastChildren2.length;index2++){const child2=mdastChildren2[index2];if(appendMode2&&index2<previousBlockCount2){const prevBlock=get$4(renderedBlocks)[index2],currentHash=getMdastNodeHash(child2,index2);if(prevBlock?.contentHash===currentHash){nextBlocks2.push(prevBlock);continue}}const{html:html2,hash:hash2}=await transformMdastNode(processorInstance2,child2,index2),id2=getHastNodeId({position:child2.position},index2);nextBlocks2.push({id:id2, -html:html2,contentHash:hash2})}set$1(renderedBlocks,nextBlocks2,!0)}else set$1(renderedBlocks,[],!0);previousContent=prefixMarkdown,set$1(unstableBlockHtml,""),set$1(incompleteCodeBlock,incompleteBlock,!0);return}set$1(incompleteCodeBlock,null);const normalized=preprocessLaTeX(markdown2),processorInstance=get$4(processor)(),mdastChildren=processorInstance.parse(normalized).children??[],stableCount=Math.max(mdastChildren.length-1,0),nextBlocks=[],appendMode=isAppendMode(markdown2),previousBlockCount=appendMode? -get$4(renderedBlocks).length:0;for(let index2=0;index2<stableCount;index2++){const child2=mdastChildren[index2];if(appendMode&&index2<previousBlockCount){const prevBlock=get$4(renderedBlocks)[index2],currentHash=getMdastNodeHash(child2,index2);if(prevBlock?.contentHash===currentHash){nextBlocks.push(prevBlock);continue}}const{html:html2,hash:hash2}=await transformMdastNode(processorInstance,child2,index2),id2=getHastNodeId({position:child2.position},index2);nextBlocks.push({id:id2,html:html2,contentHash:hash2})} -let unstableHtml="";if(mdastChildren.length>stableCount){const singleNodeRoot={type:"root",children:[mdastChildren[stableCount]]},transformedRoot=await processorInstance.run(singleNodeRoot);unstableHtml=processorInstance.stringify(transformedRoot)}set$1(renderedBlocks,nextBlocks,!0),previousContent=markdown2,await tick(),set$1(unstableBlockHtml,unstableHtml,!0)}function setupCodeBlockActions(){if(!get$4(containerRef))return;const wrappers=get$4(containerRef).querySelectorAll(".code-block-wrapper"); -for(const wrapper of wrappers){const copyButton=wrapper.querySelector(".copy-code-btn"),previewButton=wrapper.querySelector(".preview-code-btn");copyButton&©Button.dataset.listenerBound!=="true"&&(copyButton.dataset.listenerBound="true",copyButton.addEventListener("click",handleCopyClick)),previewButton&&previewButton.dataset.listenerBound!=="true"&&(previewButton.dataset.listenerBound="true",previewButton.addEventListener("click",handlePreviewClick))}}function setupImageErrorHandlers(){if(!get$4( -containerRef))return;const images=get$4(containerRef).querySelectorAll(IMAGE_NOT_ERROR_BOUND_SELECTOR);for(const img of images)img.dataset[DATA_ERROR_BOUND_ATTR]=BOOL_TRUE_STRING,img.addEventListener("error",handleImageError)}function handleImageError(event2){const img=event2.target;if(!img||!img.src||img.src.startsWith(UrlProtocol.DATA)||img.dataset[DATA_ERROR_HANDLED_ATTR]===BOOL_TRUE_STRING)return;img.dataset[DATA_ERROR_HANDLED_ATTR]=BOOL_TRUE_STRING;const src=img.src,fallback2=document.createElement( +[],!0),set$1(unstableBlockHtml,""),set$1(incompleteCodeBlock,null),previousContent="";return}const incompleteBlock=detectIncompleteCodeBlock(markdown2);if(incompleteBlock){const prefixMarkdown=markdown2.slice(0,incompleteBlock.openingIndex);if(prefixMarkdown.trim()){const normalizedPrefix=preprocessLaTeX(prefixMarkdown),processorInstance2=get$3(processor)(),mdastChildren2=processorInstance2.parse(normalizedPrefix).children??[],nextBlocks2=[],appendMode2=isAppendMode(prefixMarkdown),previousBlockCount2=appendMode2? +get$3(renderedBlocks).length:0;for(let index2=0;index2<mdastChildren2.length;index2++){const child2=mdastChildren2[index2];if(appendMode2&&index2<previousBlockCount2){const prevBlock=get$3(renderedBlocks)[index2],currentHash=getMdastNodeHash(child2,index2);if(prevBlock?.contentHash===currentHash){nextBlocks2.push(prevBlock);continue}}const{html:html2,hash:hash2}=await transformMdastNode(processorInstance2,child2,index2),id2=getHastNodeId({position:child2.position},index2);nextBlocks2.push({id:id2, +html:html2,contentHash:hash2})}set$1(renderedBlocks,nextBlocks2,!0)}else set$1(renderedBlocks,[],!0);previousContent=prefixMarkdown,set$1(unstableBlockHtml,""),set$1(incompleteCodeBlock,incompleteBlock,!0);return}set$1(incompleteCodeBlock,null);const normalized=preprocessLaTeX(markdown2),processorInstance=get$3(processor)(),mdastChildren=processorInstance.parse(normalized).children??[],stableCount=Math.max(mdastChildren.length-1,0),nextBlocks=[],appendMode=isAppendMode(markdown2),previousBlockCount=appendMode? +get$3(renderedBlocks).length:0;for(let index2=0;index2<stableCount;index2++){const child2=mdastChildren[index2];if(appendMode&&index2<previousBlockCount){const prevBlock=get$3(renderedBlocks)[index2],currentHash=getMdastNodeHash(child2,index2);if(prevBlock?.contentHash===currentHash){nextBlocks.push(prevBlock);continue}}const{html:html2,hash:hash2}=await transformMdastNode(processorInstance,child2,index2),id2=getHastNodeId({position:child2.position},index2);nextBlocks.push({id:id2,html:html2,contentHash:hash2})} +let unstableHtml="";if(mdastChildren.length>stableCount){const singleNodeRoot={type:"root",children:[mdastChildren[stableCount]]},transformedRoot=await processorInstance.run(singleNodeRoot);unstableHtml=processorInstance.stringify(transformedRoot)}set$1(renderedBlocks,nextBlocks,!0),previousContent=markdown2,await tick(),set$1(unstableBlockHtml,unstableHtml,!0)}function setupCodeBlockActions(){if(!get$3(containerRef))return;const wrappers=get$3(containerRef).querySelectorAll(".code-block-wrapper"); +for(const wrapper of wrappers){const copyButton=wrapper.querySelector(".copy-code-btn"),previewButton=wrapper.querySelector(".preview-code-btn");copyButton&©Button.dataset.listenerBound!=="true"&&(copyButton.dataset.listenerBound="true",copyButton.addEventListener("click",handleCopyClick)),previewButton&&previewButton.dataset.listenerBound!=="true"&&(previewButton.dataset.listenerBound="true",previewButton.addEventListener("click",handlePreviewClick))}}function setupImageErrorHandlers(){if(!get$3( +containerRef))return;const images=get$3(containerRef).querySelectorAll(IMAGE_NOT_ERROR_BOUND_SELECTOR);for(const img of images)img.dataset[DATA_ERROR_BOUND_ATTR]=BOOL_TRUE_STRING,img.addEventListener("error",handleImageError)}function handleImageError(event2){const img=event2.target;if(!img||!img.src||img.src.startsWith(UrlProtocol.DATA)||img.dataset[DATA_ERROR_HANDLED_ATTR]===BOOL_TRUE_STRING)return;img.dataset[DATA_ERROR_HANDLED_ATTR]=BOOL_TRUE_STRING;const src=img.src,fallback2=document.createElement( "div");fallback2.className="image-load-error",fallback2.innerHTML=getImageErrorFallbackHtml(src),img.parentNode?.replaceChild(fallback2,img)}async function updateRenderedBlocks(markdown2){if(pendingMarkdown=markdown2,!isProcessing){isProcessing=!0;try{for(;pendingMarkdown!==null;){const nextMarkdown=pendingMarkdown;pendingMarkdown=null,await processMarkdown(nextMarkdown),pendingMarkdown!==null&&await new Promise(resolve2=>requestAnimationFrame(resolve2))}}catch(error2){console.error("Failed to p\ -rocess markdown:",error2),set$1(renderedBlocks,[],!0),set$1(unstableBlockHtml,markdown2.replace(/\n/g,"<br>"),!0)}finally{isProcessing=!1}}}user_effect(()=>{const isDark=derivedMode.current===ColorMode.DARK;loadHighlightTheme(isDark)}),user_effect(()=>{updateRenderedBlocks($$props.content)}),user_effect(()=>{const hasRenderedBlocks=get$4(renderedBlocks).length>0,hasUnstableBlock=!!get$4(unstableBlockHtml);(hasRenderedBlocks||hasUnstableBlock)&&get$4(containerRef)&&(setupCodeBlockActions(),setupImageErrorHandlers())}), -user_effect(()=>{streamingAutoScroll.setContainer(get$4(streamingCodeScrollContainer))}),user_effect(()=>{streamingAutoScroll.updateInterval(get$4(incompleteCodeBlock)!==null)}),onDestroy(()=>{cleanupEventListeners(),cleanupHighlightTheme(),streamingAutoScroll.destroy()});var fragment=root$q(),div=first_child(fragment),node_1=child(div);each(node_1,17,()=>get$4(renderedBlocks),block2=>block2.id,($$anchor2,block2)=>{var div_1=root_1$g(),node_2=child(div_1);html$6(node_2,()=>get$4(block2).html),reset( -div_1),action(div_1,($$node,$$action_arg)=>fadeInView?.($$node,$$action_arg),()=>({skipIfVisible:!0})),template_effect(()=>set_attribute(div_1,"data-block-id",get$4(block2).id)),append($$anchor2,div_1)});var node_3=sibling(node_1,2);{var consequent=$$anchor2=>{var div_2=root_2$l(),node_4=child(div_2);html$6(node_4,()=>get$4(unstableBlockHtml)),reset(div_2),append($$anchor2,div_2)};if_block(node_3,$$render=>{get$4(unstableBlockHtml)&&$$render(consequent)})}var node_5=sibling(node_3,2);{var consequent_1=$$anchor2=>{ -var div_3=root_3$h(),div_4=child(div_3),span=child(div_4),text2=child(span,!0);reset(span);var node_6=sibling(span,2);{let $0=user_derived(()=>get$4(incompleteCodeBlock).language||"text");ActionIconsCodeBlock(node_6,{get code(){return get$4(incompleteCodeBlock).code},get language(){return get$4($0)},disabled:!0,onPreview:(code2,lang)=>{set$1(previewCode,code2,!0),set$1(previewLanguage,lang,!0),set$1(previewDialogOpen,!0)}})}reset(div_4);var div_5=sibling(div_4,2),pre=child(div_5),code_1=child(pre), -node_7=child(code_1);html$6(node_7,()=>highlightCode(get$4(incompleteCodeBlock).code,get$4(incompleteCodeBlock).language||"text")),reset(code_1),reset(pre),reset(div_5),bind_this(div_5,$$value=>set$1(streamingCodeScrollContainer,$$value),()=>get$4(streamingCodeScrollContainer)),reset(div_3),template_effect(()=>{set_text(text2,get$4(incompleteCodeBlock).language||"text"),set_class(code_1,1,`hljs language-${get$4(incompleteCodeBlock).language||"text"}`,"svelte-15eq738")}),event("scroll",div_5,()=>streamingAutoScroll. -handleScroll()),append($$anchor2,div_3)};if_block(node_5,$$render=>{get$4(incompleteCodeBlock)&&$$render(consequent_1)})}reset(div),bind_this(div,$$value=>set$1(containerRef,$$value),()=>get$4(containerRef));var node_8=sibling(div,2);DialogCodePreview(node_8,{get open(){return get$4(previewDialogOpen)},get code(){return get$4(previewCode)},get language(){return get$4(previewLanguage)},onOpenChange:handlePreviewDialogOpenChange}),template_effect($0=>set_class(div,1,`${className()??""}${$0??""}`,"\ -svelte-15eq738"),[()=>config$1()[SETTINGS_KEYS.FULL_HEIGHT_CODE_BLOCKS]?" full-height-code-blocks":""]),append($$anchor,fragment),pop()}var root$p=from_html('<div><pre class="m-0 svelte-hp0zxr"><code class="hljs text-sm leading-relaxed svelte-hp0zxr"><!></code></pre></div>');function SyntaxHighlightedCode($$anchor,$$props){push$1($$props,!0);let language2=prop($$props,"language",3,"text"),className=prop($$props,"class",3,""),maxHeight=prop($$props,"maxHeight",3,"60vh"),maxWidth=prop($$props,"max\ -Width",3,""),highlightedHtml=state$1("");function loadHighlightTheme(isDark){document.querySelectorAll("style[data-highlight-theme-preview]").forEach(style3=>style3.remove());const style2=document.createElement("style");style2.setAttribute("data-highlight-theme-preview","true"),style2.textContent=isDark?githubDarkCss:githubLightCss,document.head.appendChild(style2)}user_effect(()=>{const isDark=derivedMode.current===ColorMode.DARK;loadHighlightTheme(isDark)}),user_effect(()=>{if(!$$props.code){set$1( -highlightedHtml,"");return}try{const lang=language2().toLowerCase();if(HighlightJS$1.getLanguage(lang)){const result=HighlightJS$1.highlight($$props.code,{language:lang});set$1(highlightedHtml,result.value,!0)}else{const result=HighlightJS$1.highlightAuto($$props.code);set$1(highlightedHtml,result.value,!0)}}catch{set$1(highlightedHtml,$$props.code.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),!0)}});var div=root$p(),pre=child(div),code_1=child(pre),node2=child(code_1);html$6(node2, -()=>get$4(highlightedHtml)),reset(code_1),reset(pre),reset(div),template_effect(()=>{set_class(div,1,`code-preview-wrapper rounded-lg border border-border bg-muted ${className()??""}`,"svelte-hp0zxr"),set_style(div,`max-height: ${maxHeight()??""}; max-width: ${maxWidth()??""};`)}),append($$anchor,div),pop()}function Collapsible($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),open2=prop($$props,"open",15,!1),restProps=rest_props($$props,["$$slots","$$events","$$legacy","\ -ref","open"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Collapsible$1,($$anchor2,CollapsiblePrimitive_Root)=>{CollapsiblePrimitive_Root($$anchor2,spread_props({"data-slot":"collapsible"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)},get open(){return open2()},set open($$value){open2($$value)}}))}),append($$anchor,fragment),pop()}function Collapsible_trigger($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Collapsible_trigger$1,($$anchor2,CollapsiblePrimitive_Trigger)=>{CollapsiblePrimitive_Trigger($$anchor2,spread_props({"data-slot":"collapsible-trigger"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}function Collapsible_content($$anchor,$$props){push$1($$props,!0);let ref2=prop($$props,"ref",15,null),restProps=rest_props( -$$props,["$$slots","$$events","$$legacy","ref"]);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Collapsible_content$1,($$anchor2,CollapsiblePrimitive_Content)=>{CollapsiblePrimitive_Content($$anchor2,spread_props({"data-slot":"collapsible-content"},()=>restProps,{get ref(){return ref2()},set ref($$value){ref2($$value)}}))}),append($$anchor,fragment),pop()}var root_5$c=from_html('<span class="text-xs italic"> </span>'),root_3$g=from_html('<div class="flex items-center ga\ -p-2 text-muted-foreground"><!> <span class="font-mono text-sm font-medium"> </span> <!></div> <div><!> <span class="sr-only">Toggle content</span></div>',1),root_6$b=from_html('<div class="overflow-y-auto border-t border-muted px-3 pb-3" style="min-height: var(--min-message-height); max-height: var(--max-message-height);"><!></div>'),root_2$k=from_html("<!> <!>",1);function CollapsibleContentBlock($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),className=prop($$props,"c\ -lass",3,""),iconClass=prop($$props,"iconClass",3,"h-4 w-4"),isStreaming=prop($$props,"isStreaming",3,!1),contentContainer=state$1(void 0);const autoScroll=createAutoScrollController();user_effect(()=>{autoScroll.setContainer(get$4(contentContainer))}),user_effect(()=>{autoScroll.updateInterval(open2()&&isStreaming())});function handleScroll(){autoScroll.handleScroll()}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Collapsible,($$anchor2,Collapsible_Root)=>{Collapsible_Root( -$$anchor2,{get open(){return open2()},onOpenChange:value=>{open2(value),$$props.onToggle?.()},get class(){return className()},children:($$anchor3,$$slotProps)=>{Card($$anchor3,{class:"gap-0 border-muted bg-muted/30 py-0",children:($$anchor4,$$slotProps2)=>{var fragment_2=root_2$k(),node_1=first_child(fragment_2);component(node_1,()=>Collapsible_trigger,($$anchor5,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor5,{class:"flex w-full cursor-pointer items-center justify-between p-3",children:($$anchor6,$$slotProps3)=>{ -var fragment_3=root_3$g(),div=first_child(fragment_3),node_2=child(div);{var consequent=$$anchor7=>{var fragment_4=comment$2(),node_3=first_child(fragment_4);component(node_3,()=>$$props.icon,($$anchor8,Icon_1)=>{Icon_1($$anchor8,{get class(){return iconClass()}})}),append($$anchor7,fragment_4)};if_block(node_2,$$render=>{$$props.icon&&$$render(consequent)})}var span=sibling(node_2,2),text2=child(span,!0);reset(span);var node_4=sibling(span,2);{var consequent_1=$$anchor7=>{var span_1=root_5$c(), -text_1=child(span_1,!0);reset(span_1),template_effect(()=>set_text(text_1,$$props.subtitle)),append($$anchor7,span_1)};if_block(node_4,$$render=>{$$props.subtitle&&$$render(consequent_1)})}reset(div);var div_1=sibling(div,2),node_5=child(div_1);Chevrons_up_down(node_5,{class:"h-4 w-4"}),next$1(2),reset(div_1),template_effect($0=>{set_text(text2,$$props.title),set_class(div_1,1,$0)},[()=>clsx(buttonVariants({variant:"ghost",size:"sm",class:"h-6 w-6 p-0 text-muted-foreground hover:text-foreground"}))]), -append($$anchor6,fragment_3)},$$slots:{default:!0}})});var node_6=sibling(node_1,2);component(node_6,()=>Collapsible_content,($$anchor5,Collapsible_Content)=>{Collapsible_Content($$anchor5,{children:($$anchor6,$$slotProps3)=>{var div_2=root_6$b(),node_7=child(div_2);snippet(node_7,()=>$$props.children),reset(div_2),bind_this(div_2,$$value=>set$1(contentContainer,$$value),()=>get$4(contentContainer)),event("scroll",div_2,handleScroll),append($$anchor6,div_2)},$$slots:{default:!0}})}),append($$anchor4, -fragment_2)},$$slots:{default:!0}})},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_2$j=from_html('<span class="text-xs text-muted-foreground/50">...</span>'),root_1$f=from_html('<span> <span class="text-destructive">*</span></span> <!>',1),root_4$7=from_html('<button type="button"> </button>'),root_3$f=from_html('<div class="absolute top-full right-0 left-0 z-10 mt-1 max-h-32 overflow-y-auto rounded-lg border border-border/50 bg-background shadow-lg"></div>'),root$o=from_html( -'<div class="relative grid gap-1"><!> <!> <!></div>');function InputWithSuggestions($$anchor,$$props){push$1($$props,!0);let value=prop($$props,"value",3,""),suggestions=prop($$props,"suggestions",19,()=>[]),isLoadingSuggestions=prop($$props,"isLoadingSuggestions",3,!1),isAutocompleteActive=prop($$props,"isAutocompleteActive",3,!1),autocompleteIndex=prop($$props,"autocompleteIndex",3,0);var div=root$o(),node2=child(div);Label(node2,{get for(){return`tpl-arg-${$$props.name??""}`},class:"mb-1 text\ --muted-foreground",children:($$anchor2,$$slotProps)=>{var fragment=root_1$f(),span=first_child(fragment),text2=child(span);next$1(),reset(span);var node_1=sibling(span,2);{var consequent=$$anchor3=>{var span_1=root_2$j();append($$anchor3,span_1)};if_block(node_1,$$render=>{isLoadingSuggestions()&&$$render(consequent)})}template_effect(()=>set_text(text2,`${$$props.name??""} `)),append($$anchor2,fragment)},$$slots:{default:!0}});var node_2=sibling(node2,2);Input(node_2,{get id(){return`tpl-arg-${$$props. -name??""}`},type:"text",get value(){return value()},oninput:e=>$$props.onInput(e.currentTarget.value),get onkeydown(){return $$props.onKeydown},get onblur(){return $$props.onBlur},get onfocus(){return $$props.onFocus},get placeholder(){return`Enter ${$$props.name??""}`},autocomplete:"off"});var node_3=sibling(node_2,2);{var consequent_1=$$anchor2=>{var div_1=root_3$f();each(div_1,22,suggestions,suggestion=>suggestion,($$anchor3,suggestion,i)=>{var button=root_4$7();button.__mousedown=()=>$$props. -onSelectSuggestion(suggestion);var text_1=child(button,!0);reset(button),template_effect(()=>{set_class(button,1,`w-full px-3 py-1.5 text-left text-sm hover:bg-accent ${get$4(i)===autocompleteIndex()?"bg-accent":""}`),set_text(text_1,suggestion)}),append($$anchor3,button)}),reset(div_1),transition(3,div_1,()=>fly,()=>({y:-5,duration:100})),append($$anchor2,div_1)};if_block(node_3,$$render=>{isAutocompleteActive()&&suggestions().length>0&&$$render(consequent_1)})}reset(div),append($$anchor,div),pop()} -delegate(["mousedown"]);var root_2$i=from_html('<span class="text-muted-foreground">(optional)</span>'),root_1$e=from_html('<span class="text-xs font-medium"> <!></span>'),root_4$6=from_html('<div class="flex items-start gap-2"><!> <textarea class="flex-1 resize-none rounded-md border border-input bg-transparent px-3 py-2 text-sm leading-5 placeholder:text-muted-foreground focus-visible:ring-1 focus-visible:ring-ring focus-visible:outline-none" rows="1"></textarea> <button type="button" class="m\ -t-1.5 shrink-0 cursor-pointer rounded-md p-1 text-muted-foreground hover:bg-destructive/10 hover:text-destructive" aria-label="Remove item"><!></button></div>'),root_3$e=from_html('<div class="space-y-3"></div>'),root_5$b=from_html('<p class="text-xs text-muted-foreground"> </p>'),root$n=from_html('<div><div class="mb-2 flex items-center justify-between"><!> <button type="button" class="inline-flex cursor-pointer items-center gap-1 rounded-md px-1.5 py-1 text-xs text-muted-foreground hover:bg-mu\ -ted hover:text-foreground"><!> </button></div> <!></div>');function KeyValuePairs($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),keyPlaceholder=prop($$props,"keyPlaceholder",3,"Key"),valuePlaceholder=prop($$props,"valuePlaceholder",3,"Value"),addButtonLabel=prop($$props,"addButtonLabel",3,"Add"),emptyMessage=prop($$props,"emptyMessage",3,"No items configured."),sectionLabelOptional=prop($$props,"sectionLabelOptional",3,!0);function addPair(){$$props.onPairsChange([ -...$$props.pairs,{key:"",value:""}])}function removePair(index2){$$props.onPairsChange($$props.pairs.filter((_,i)=>i!==index2))}function updatePairKey(index2,rawKey){const key2=sanitizeKeyValuePairKey(rawKey),newPairs=[...$$props.pairs];newPairs[index2]={...newPairs[index2],key:key2},$$props.onPairsChange(newPairs)}function trimPairKey(index2,key2){const trimmed=key2.trim();if(trimmed===key2)return;const newPairs=[...$$props.pairs];newPairs[index2]={...newPairs[index2],key:trimmed},$$props.onPairsChange( -newPairs)}function updatePairValue(index2,rawValue){const value=sanitizeKeyValuePairValue(rawValue),newPairs=[...$$props.pairs];newPairs[index2]={...newPairs[index2],value},$$props.onPairsChange(newPairs)}function trimPairValue(index2,value){const trimmed=value.trim();if(trimmed===value)return;const newPairs=[...$$props.pairs];newPairs[index2]={...newPairs[index2],value:trimmed},$$props.onPairsChange(newPairs)}var div=root$n(),div_1=child(div),node2=child(div_1);{var consequent_1=$$anchor2=>{var span=root_1$e(), -text2=child(span),node_1=sibling(text2);{var consequent=$$anchor3=>{var span_1=root_2$i();append($$anchor3,span_1)};if_block(node_1,$$render=>{sectionLabelOptional()&&$$render(consequent)})}reset(span),template_effect(()=>set_text(text2,`${$$props.sectionLabel??""} `)),append($$anchor2,span)};if_block(node2,$$render=>{$$props.sectionLabel&&$$render(consequent_1)})}var button=sibling(node2,2);button.__click=addPair;var node_2=child(button);Plus(node_2,{class:"h-3 w-3"});var text_1=sibling(node_2); -reset(button),reset(div_1);var node_3=sibling(div_1,2);{var consequent_2=$$anchor2=>{var div_2=root_3$e();each(div_2,21,()=>$$props.pairs,index$2,($$anchor3,pair,index2)=>{var div_3=root_4$6(),node_4=child(div_3);Input(node_4,{type:"text",get placeholder(){return keyPlaceholder()},get value(){return get$4(pair).key},get maxlength(){return KEY_VALUE_PAIR_KEY_MAX_LENGTH},oninput:e=>updatePairKey(index2,e.currentTarget.value),onblur:e=>trimPairKey(index2,e.currentTarget.value),class:"flex-1"});var textarea=sibling( -node_4,2);remove_textarea_child(textarea),textarea.__input=e=>{updatePairValue(index2,e.currentTarget.value),autoResizeTextarea(e.currentTarget)},action(textarea,$$node=>autoResizeTextarea?.($$node));var button_1=sibling(textarea,2);button_1.__click=()=>removePair(index2);var node_5=child(button_1);Trash_2(node_5,{class:"h-3.5 w-3.5"}),reset(button_1),reset(div_3),template_effect(()=>{set_attribute(textarea,"placeholder",valuePlaceholder()),set_value(textarea,get$4(pair).value),set_attribute(textarea, -"maxlength",KEY_VALUE_PAIR_VALUE_MAX_LENGTH)}),event("blur",textarea,e=>trimPairValue(index2,e.currentTarget.value)),append($$anchor3,div_3)}),reset(div_2),append($$anchor2,div_2)},alternate=$$anchor2=>{var p2=root_5$b(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,emptyMessage())),append($$anchor2,p2)};if_block(node_3,$$render=>{$$props.pairs.length>0?$$render(consequent_2):$$render(alternate,!1)})}reset(div),template_effect(()=>{set_class(div,1,clsx(className())),set_text( -text_1,` ${addButtonLabel()??""}`)}),append($$anchor,div),pop()}delegate(["click","input"]);var root_1$d=from_html('<button type="button" class="absolute top-1/2 right-3 -translate-y-1/2 transform text-muted-foreground transition-colors hover:text-foreground"><!></button>'),root$m=from_html("<div><!> <!> <!></div>");function SearchInput($$anchor,$$props){push$1($$props,!0);let value=prop($$props,"value",15,""),placeholder=prop($$props,"placeholder",3,"Search..."),ref2=prop($$props,"ref",15,null), -showClearButton=user_derived(()=>!!value()||!!$$props.onClose);function handleInput(event2){const target2=event2.target;value(target2.value),$$props.onInput?.(target2.value)}function handleClear(){value()?(value(""),$$props.onInput?.(""),ref2()?.focus()):$$props.onClose?.()}var div=root$m(),node2=child(div);Search(node2,{class:"absolute top-1/2 left-3 z-10 h-4 w-4 -translate-y-1/2 transform text-muted-foreground"});var node_1=sibling(node2,2);{let $0=user_derived(()=>get$4(showClearButton)?"pr-9": -"");Input(node_1,{get id(){return $$props.id},get class(){return`pl-9 ${get$4($0)??""}`},oninput:handleInput,get onkeydown(){return $$props.onKeyDown},get placeholder(){return placeholder()},type:"search",get value(){return value()},set value($$value){value($$value)},get ref(){return ref2()},set ref($$value){ref2($$value)}})}var node_2=sibling(node_1,2);{var consequent=$$anchor2=>{var button=root_1$d();button.__click=handleClear;var node_3=child(button);X(node_3,{class:"h-4 w-4"}),reset(button), -template_effect(()=>set_attribute(button,"aria-label",value()?"Clear search":"Close")),append($$anchor2,button)};if_block(node_2,$$render=>{get$4(showClearButton)&&$$render(consequent)})}reset(div),template_effect(()=>set_class(div,1,`relative ${$$props.class??""}`)),append($$anchor,div),pop()}delegate(["click"]);var root_2$h=from_html("<!> Add New Server",1),root_4$5=from_html('<div class="space-y-4"><p class="font-medium">Add New Server</p> <!> <div class="flex items-center justify-end gap-2">\ -<!> <!></div></div>'),root_7$a=from_html('<div class="rounded-md border border-dashed p-4 text-sm text-muted-foreground">No MCP Servers configured yet. Add one to enable agentic features.</div>'),root_8$8=from_html('<div class="space-y-3"></div>'),root$l=from_html('<div class="space-y-5 md:space-y-4"><div class="flex items-start justify-between gap-4"><div><h4 class="text-base font-semibold">Manage Servers</h4></div> <!></div> <!> <!> <!></div>');function McpServersSettings($$anchor,$$props){push$1( -$$props,!0);let servers=user_derived(()=>mcpStore.getServersSorted()),initialLoadComplete=state$1(!1);user_effect(()=>{if(get$4(initialLoadComplete))return;get$4(servers).length>0&&get$4(servers).every(server=>{const state2=mcpStore.getHealthCheckState(server.id);return state2.status===HealthCheckStatus.SUCCESS||state2.status===HealthCheckStatus.ERROR})&&set$1(initialLoadComplete,!0)});let isAddingServer=state$1(!1),newServerUrl=state$1(""),newServerHeaders=state$1(""),newServerUrlError=user_derived( -()=>{if(!get$4(newServerUrl).trim())return"URL is required";try{return new URL(get$4(newServerUrl)),null}catch{return"Invalid URL format"}});function showAddServerForm(){set$1(isAddingServer,!0),set$1(newServerUrl,""),set$1(newServerHeaders,"")}function cancelAddServer(){set$1(isAddingServer,!1),set$1(newServerUrl,""),set$1(newServerHeaders,"")}function saveNewServer(){if(get$4(newServerUrlError))return;const newServerId=uuid$1()??`${MCP_SERVER_ID_PREFIX}-${Date.now()}`;mcpStore.addServer({id:newServerId, -enabled:!0,url:get$4(newServerUrl).trim(),headers:get$4(newServerHeaders).trim()||void 0}),conversationsStore.setMcpServerOverride(newServerId,!0),set$1(isAddingServer,!1),set$1(newServerUrl,""),set$1(newServerHeaders,"")}var div=root$l(),div_1=child(div),node2=sibling(child(div_1),2);{var consequent=$$anchor2=>{Button($$anchor2,{variant:"outline",size:"sm",class:"shrink-0",onclick:showAddServerForm,children:($$anchor3,$$slotProps)=>{var fragment_1=root_2$h(),node_1=first_child(fragment_1);Plus( -node_1,{class:"h-4 w-4"}),next$1(),append($$anchor3,fragment_1)},$$slots:{default:!0}})};if_block(node2,$$render=>{get$4(isAddingServer)||$$render(consequent)})}reset(div_1);var node_2=sibling(div_1,2);{var consequent_1=$$anchor2=>{var fragment_2=comment$2(),node_3=first_child(fragment_2);component(node_3,()=>Card,($$anchor3,Card_Root)=>{Card_Root($$anchor3,{class:"bg-muted/30 p-4",children:($$anchor4,$$slotProps)=>{var div_2=root_4$5(),node_4=sibling(child(div_2),2);{let $0=user_derived(()=>get$4( -newServerUrl)?get$4(newServerUrlError):null);McpServerForm(node_4,{get url(){return get$4(newServerUrl)},get headers(){return get$4(newServerHeaders)},onUrlChange:v=>set$1(newServerUrl,v,!0),onHeadersChange:v=>set$1(newServerHeaders,v,!0),get urlError(){return get$4($0)},id:"new-server"})}var div_3=sibling(node_4,2),node_5=child(div_3);Button(node_5,{variant:"secondary",size:"sm",onclick:cancelAddServer,children:($$anchor5,$$slotProps2)=>{next$1();var text2=text$8("Cancel");append($$anchor5,text2)}, -$$slots:{default:!0}});var node_6=sibling(node_5,2);{let $0=user_derived(()=>!!get$4(newServerUrlError));Button(node_6,{variant:"default",size:"sm",onclick:saveNewServer,get disabled(){return get$4($0)},"aria-label":"Save",children:($$anchor5,$$slotProps2)=>{next$1();var text_1=text$8("Add");append($$anchor5,text_1)},$$slots:{default:!0}})}reset(div_3),reset(div_2),append($$anchor4,div_2)},$$slots:{default:!0}})}),append($$anchor2,fragment_2)};if_block(node_2,$$render=>{get$4(isAddingServer)&&$$render( -consequent_1)})}var node_7=sibling(node_2,2);{var consequent_2=$$anchor2=>{var div_4=root_7$a();append($$anchor2,div_4)};if_block(node_7,$$render=>{get$4(servers).length===0&&!get$4(isAddingServer)&&$$render(consequent_2)})}var node_8=sibling(node_7,2);{var consequent_4=$$anchor2=>{var div_5=root_8$8();each(div_5,21,()=>get$4(servers),server=>server.id,($$anchor3,server)=>{var fragment_3=comment$2(),node_9=first_child(fragment_3);{var consequent_3=$$anchor4=>{McpServerCardSkeleton($$anchor4)},alternate=$$anchor4=>{ -{let $0=user_derived(()=>mcpStore.getServerFavicon(get$4(server).id)),$1=user_derived(()=>conversationsStore.isMcpServerEnabledForChat(get$4(server).id));McpServerCard($$anchor4,{get server(){return get$4(server)},get faviconUrl(){return get$4($0)},get enabled(){return get$4($1)},onToggle:async()=>await conversationsStore.toggleMcpServerForChat(get$4(server).id),onUpdate:updates=>mcpStore.updateServer(get$4(server).id,updates),onDelete:()=>mcpStore.removeServer(get$4(server).id)})}};if_block(node_9, -$$render=>{get$4(initialLoadComplete)?$$render(alternate,!1):$$render(consequent_3)})}append($$anchor3,fragment_3)}),reset(div_5),append($$anchor2,div_5)};if_block(node_8,$$render=>{get$4(servers).length>0&&$$render(consequent_4)})}reset(div),append($$anchor,div),pop()}var root_2$g=from_html('<div class="box-shadow-lg overflow-hidden rounded-full bg-muted ring-1 ring-muted"><img alt="" class="h-4 w-4"/></div>'),root_3$d=from_html('<span class="text-xs text-muted-foreground"> </span>'),root_1$c=from_html( -'<div><div class="flex -space-x-1"></div> <!></div>');function McpActiveServersAvatars($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),mcpServers=user_derived(()=>mcpStore.getServersSorted().filter(s2=>s2.enabled)),enabledMcpServersForChat=user_derived(()=>get$4(mcpServers).filter(s2=>conversationsStore.isMcpServerEnabledForChat(s2.id)&&s2.url.trim())),healthyEnabledMcpServers=user_derived(()=>get$4(enabledMcpServersForChat).filter(s2=>mcpStore.getHealthCheckState(s2. -id).status!==HealthCheckStatus.ERROR)),hasEnabledMcpServers=user_derived(()=>get$4(enabledMcpServersForChat).length>0),extraServersCount=user_derived(()=>Math.max(0,get$4(healthyEnabledMcpServers).length-MAX_DISPLAYED_MCP_AVATARS)),mcpFavicons=user_derived(()=>get$4(healthyEnabledMcpServers).slice(0,MAX_DISPLAYED_MCP_AVATARS).map(s2=>({id:s2.id,url:mcpStore.getServerFavicon(s2.id)})).filter(f=>f.url!==null));var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{var div=root_1$c(), -div_1=child(div);each(div_1,21,()=>get$4(mcpFavicons),favicon=>favicon.id,($$anchor3,favicon)=>{var div_2=root_2$g(),img=child(div_2);reset(div_2),template_effect(()=>set_attribute(img,"src",get$4(favicon).url)),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor3,div_2)}),reset(div_1);var node_1=sibling(div_1,2);{var consequent=$$anchor3=>{var span=root_3$d(),text2=child(span);reset(span),template_effect(()=>set_text(text2,`+${get$4(extraServersCount)?? -""}`)),append($$anchor3,span)};if_block(node_1,$$render=>{get$4(extraServersCount)>0&&$$render(consequent)})}reset(div),template_effect($0=>set_class(div,1,$0),[()=>clsx(cn$1("inline-flex items-center gap-1.5",className()))]),append($$anchor2,div)};if_block(node2,$$render=>{get$4(hasEnabledMcpServers)&&get$4(mcpFavicons).length>0&&$$render(consequent_1)})}append($$anchor,fragment),pop()}var root_3$c=from_html('<button type="button" class="inline-flex cursor-pointer items-center rounded-sm py-1 d\ -isabled:cursor-not-allowed disabled:opacity-60" aria-label="MCP Servers"><!></button>'),root_6$a=from_html("<!> <span>Manage MCP Servers</span>",1),root_9$7=from_html('<img alt="" class="h-4 w-4 shrink-0 rounded-sm"/>'),root_10$6=from_html('<span class="shrink-0 rounded bg-destructive/15 px-1.5 py-0.5 text-xs text-destructive">Error</span>'),root_8$7=from_html('<button type="button" class="flex w-full items-center justify-between gap-2 px-2 py-2 text-left transition-colors hover:bg-accent disabl\ -ed:cursor-not-allowed disabled:opacity-50"><div class="flex min-w-0 flex-1 items-center gap-2"><!> <span class="truncate text-sm"> </span> <!></div> <!></button>'),root_7$9=from_html('<div class="max-h-64 overflow-y-auto"></div>'),root_2$f=from_html("<!> <!>",1);function McpServersSelector($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),disabled=prop($$props,"disabled",3,!1),searchQuery=state$1(""),mcpServers=user_derived(()=>mcpStore.getServersSorted().filter(s2=>s2. -enabled)),hasMcpServers=user_derived(()=>get$4(mcpServers).length>0),enabledMcpServersForChat=user_derived(()=>get$4(mcpServers).filter(s2=>conversationsStore.isMcpServerEnabledForChat(s2.id)&&s2.url.trim())),healthyEnabledMcpServers=user_derived(()=>get$4(enabledMcpServersForChat).filter(s2=>mcpStore.getHealthCheckState(s2.id).status!==HealthCheckStatus.ERROR)),hasEnabledMcpServers=user_derived(()=>get$4(enabledMcpServersForChat).length>0),mcpFavicons=user_derived(()=>get$4(healthyEnabledMcpServers). -slice(0,3).map(s2=>({id:s2.id,url:mcpStore.getServerFavicon(s2.id)})).filter(f=>f.url!==null)),filteredMcpServers=user_derived(()=>{const query=get$4(searchQuery).toLowerCase().trim();return query?get$4(mcpServers).filter(s2=>{const name=getServerLabel(s2).toLowerCase(),url2=s2.url.toLowerCase();return name.includes(query)||url2.includes(query)}):get$4(mcpServers)});function getServerLabel(server){return mcpStore.getServerLabel(server)}function handleDropdownOpen(open2){open2&&mcpStore.runHealthChecksForServers( -get$4(mcpServers))}function isServerEnabledForChat(serverId){return conversationsStore.isMcpServerEnabledForChat(serverId)}async function toggleServerForChat(serverId){await conversationsStore.toggleMcpServerForChat(serverId)}var fragment=comment$2(),node2=first_child(fragment);{var consequent_2=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Root$2,($$anchor3,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor3,{onOpenChange:open2=>{open2||set$1(searchQuery, -""),handleDropdownOpen(open2)},children:($$anchor4,$$slotProps)=>{var fragment_2=root_2$f(),node_2=first_child(fragment_2);component(node_2,()=>Dropdown_menu_trigger,($$anchor5,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor5,{get disabled(){return disabled()},onclick:e=>{e.preventDefault(),e.stopPropagation()},children:($$anchor6,$$slotProps2)=>{var button=root_3$c(),node_3=child(button);McpActiveServersAvatars(node_3,{get class(){return className()}}),reset(button),template_effect(()=>button. -disabled=disabled()),append($$anchor6,button)},$$slots:{default:!0}})});var node_4=sibling(node_2,2);component(node_4,()=>Dropdown_menu_content,($$anchor5,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor5,{align:"start",class:"w-72 pt-0",children:($$anchor6,$$slotProps2)=>{{const footer2=$$anchor7=>{var fragment_4=comment$2(),node_5=first_child(fragment_4);component(node_5,()=>Dropdown_menu_item,($$anchor8,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor8,{class:"flex cursor-pointer items-ce\ -nter gap-2",get onclick(){return $$props.onSettingsClick},children:($$anchor9,$$slotProps3)=>{var fragment_5=root_6$a(),node_6=first_child(fragment_5);Settings$1(node_6,{class:"h-4 w-4"}),next$1(2),append($$anchor9,fragment_5)},$$slots:{default:!0}})}),append($$anchor7,fragment_4)};let $0=user_derived(()=>get$4(filteredMcpServers).length===0);DropdownMenuSearchable($$anchor6,{placeholder:"Search servers...",emptyMessage:"No servers found",get isEmpty(){return get$4($0)},get searchValue(){return get$4( -searchQuery)},set searchValue($$value){set$1(searchQuery,$$value,!0)},footer:footer2,children:($$anchor7,$$slotProps3)=>{var div=root_7$9();each(div,21,()=>get$4(filteredMcpServers),server=>server.id,($$anchor8,server)=>{const healthState=user_derived(()=>mcpStore.getHealthCheckState(get$4(server).id)),hasError=user_derived(()=>get$4(healthState).status===HealthCheckStatus.ERROR),isEnabledForChat=user_derived(()=>isServerEnabledForChat(get$4(server).id));var button_1=root_8$7();button_1.__click= -()=>!get$4(hasError)&&toggleServerForChat(get$4(server).id);var div_1=child(button_1),node_7=child(div_1);{var consequent=$$anchor9=>{var img=root_9$7();template_effect($02=>set_attribute(img,"src",$02),[()=>mcpStore.getServerFavicon(get$4(server).id)]),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor9,img)};if_block(node_7,$$render=>{mcpStore.getServerFavicon(get$4(server).id)&&$$render(consequent)})}var span=sibling(node_7,2),text2=child(span,!0); -reset(span);var node_8=sibling(span,2);{var consequent_1=$$anchor9=>{var span_1=root_10$6();append($$anchor9,span_1)};if_block(node_8,$$render=>{get$4(hasError)&&$$render(consequent_1)})}reset(div_1);var node_9=sibling(div_1,2);Switch(node_9,{get checked(){return get$4(isEnabledForChat)},get disabled(){return get$4(hasError)},onclick:e=>e.stopPropagation(),onCheckedChange:()=>toggleServerForChat(get$4(server).id)}),reset(button_1),template_effect($02=>{button_1.disabled=get$4(hasError),set_text( -text2,$02)},[()=>getServerLabel(get$4(server))]),append($$anchor8,button_1)}),reset(div),append($$anchor7,div)},$$slots:{footer:!0,default:!0}})}},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)};if_block(node2,$$render=>{get$4(hasMcpServers)&&get$4(hasEnabledMcpServers)&&get$4(mcpFavicons).length>0&&$$render(consequent_2)})}append($$anchor,fragment),pop()}delegate(["click"]);var root_3$b=from_html("<!> Tools",1),root_5$a=from_html("<!\ -> Resources",1),root_7$8=from_html("<!> Prompts",1),root_9$6=from_html("<!> Logging",1),root_11$3=from_html("<!> Completions",1),root_13$6=from_html("<!> Tasks",1),root_1$b=from_html("<!> <!> <!> <!> <!> <!>",1);function McpCapabilitiesBadges($$anchor,$$props){push$1($$props,!0);var fragment=comment$2(),node2=first_child(fragment);{var consequent_6=$$anchor2=>{var fragment_1=root_1$b(),node_1=first_child(fragment_1);{var consequent=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 \ -bg-green-50 px-1.5 text-[10px] dark:bg-green-950",children:($$anchor4,$$slotProps)=>{var fragment_3=root_3$b(),node_2=first_child(fragment_3);Wrench(node_2,{class:"h-3 w-3 text-green-600 dark:text-green-400"}),next$1(),append($$anchor4,fragment_3)},$$slots:{default:!0}})};if_block(node_1,$$render=>{$$props.capabilities.server.tools&&$$render(consequent)})}var node_3=sibling(node_1,2);{var consequent_1=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-blue-50 px-1.5 text-[10px] d\ -ark:bg-blue-950",children:($$anchor4,$$slotProps)=>{var fragment_5=root_5$a(),node_4=first_child(fragment_5);Database(node_4,{class:"h-3 w-3 text-blue-600 dark:text-blue-400"}),next$1(),append($$anchor4,fragment_5)},$$slots:{default:!0}})};if_block(node_3,$$render=>{$$props.capabilities.server.resources&&$$render(consequent_1)})}var node_5=sibling(node_3,2);{var consequent_2=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-purple-50 px-1.5 text-[10px] dark:bg-purple-950",children:($$anchor4,$$slotProps)=>{ -var fragment_7=root_7$8(),node_6=first_child(fragment_7);Message_square(node_6,{class:"h-3 w-3 text-purple-600 dark:text-purple-400"}),next$1(),append($$anchor4,fragment_7)},$$slots:{default:!0}})};if_block(node_5,$$render=>{$$props.capabilities.server.prompts&&$$render(consequent_2)})}var node_7=sibling(node_5,2);{var consequent_3=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-orange-50 px-1.5 text-[10px] dark:bg-orange-950",children:($$anchor4,$$slotProps)=>{var fragment_9=root_9$6(), -node_8=first_child(fragment_9);File_text(node_8,{class:"h-3 w-3 text-orange-600 dark:text-orange-400"}),next$1(),append($$anchor4,fragment_9)},$$slots:{default:!0}})};if_block(node_7,$$render=>{$$props.capabilities.server.logging&&$$render(consequent_3)})}var node_9=sibling(node_7,2);{var consequent_4=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-cyan-50 px-1.5 text-[10px] dark:bg-cyan-950",children:($$anchor4,$$slotProps)=>{var fragment_11=root_11$3(),node_10=first_child(fragment_11); -Sparkles(node_10,{class:"h-3 w-3 text-cyan-600 dark:text-cyan-400"}),next$1(),append($$anchor4,fragment_11)},$$slots:{default:!0}})};if_block(node_9,$$render=>{$$props.capabilities.server.completions&&$$render(consequent_4)})}var node_11=sibling(node_9,2);{var consequent_5=$$anchor3=>{Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 bg-pink-50 px-1.5 text-[10px] dark:bg-pink-950",children:($$anchor4,$$slotProps)=>{var fragment_13=root_13$6(),node_12=first_child(fragment_13);List_checks(node_12, -{class:"h-3 w-3 text-pink-600 dark:text-pink-400"}),next$1(),append($$anchor4,fragment_13)},$$slots:{default:!0}})};if_block(node_11,$$render=>{$$props.capabilities.server.tasks&&$$render(consequent_5)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{$$props.capabilities&&$$render(consequent_6)})}append($$anchor,fragment),pop()}var root_6$9=from_html('<span class="ml-1"> </span>'),root_3$a=from_html("<!> <span> </span> <!>",1),root_9$5=from_html('<details class="ml-11"><summary class="c\ -ursor-pointer text-[10px] text-muted-foreground">details</summary> <pre class="mt-1 overflow-x-auto rounded bg-background/70 p-2 text-[10px] break-all whitespace-pre-wrap text-foreground/80"> </pre></details>'),root_8$6=from_html('<div><span class="shrink-0 text-muted-foreground"> </span> <!> <span class="break-all"> </span></div> <!>',1),root_7$7=from_html('<div class="max-h-64 space-y-0.5 overflow-y-auto rounded bg-muted/50 p-2 font-mono text-[10px]"></div>'),root_2$e=from_html('<div class="sp\ -ace-y-2"><!></div> <!>',1);function McpConnectionLogs($$anchor,$$props){push$1($$props,!0);let defaultExpanded=prop($$props,"defaultExpanded",3,!1),isExpanded=user_derived(defaultExpanded);function formatLogDetails(details){if(details==null)return"";try{return JSON.stringify(details,null,2)}catch{return String(details)}}var fragment=comment$2(),node2=first_child(fragment);{var consequent_3=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Collapsible,($$anchor3,Collapsible_Root)=>{ -Collapsible_Root($$anchor3,{get class(){return $$props.class},get open(){return get$4(isExpanded)},set open($$value){set$1(isExpanded,$$value)},children:($$anchor4,$$slotProps)=>{var fragment_2=root_2$e(),div=first_child(fragment_2),node_2=child(div);component(node_2,()=>Collapsible_trigger,($$anchor5,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor5,{class:"flex w-full items-center gap-1 text-xs text-muted-foreground hover:text-foreground",children:($$anchor6,$$slotProps2)=>{var fragment_3=root_3$a(), -node_3=first_child(fragment_3);{var consequent=$$anchor7=>{Chevron_down($$anchor7,{class:"h-3.5 w-3.5"})},alternate=$$anchor7=>{Chevron_right($$anchor7,{class:"h-3.5 w-3.5"})};if_block(node_3,$$render=>{get$4(isExpanded)?$$render(consequent):$$render(alternate,!1)})}var span=sibling(node_3,2),text2=child(span);reset(span);var node_4=sibling(span,2);{var consequent_1=$$anchor7=>{var span_1=root_6$9(),text_1=child(span_1);reset(span_1),template_effect(()=>set_text(text_1,`· Connected in ${$$props. -connectionTimeMs??""}ms`)),append($$anchor7,span_1)};if_block(node_4,$$render=>{$$props.connectionTimeMs!==void 0&&$$render(consequent_1)})}template_effect(()=>set_text(text2,`Connection Log (${$$props.logs.length??""})`)),append($$anchor6,fragment_3)},$$slots:{default:!0}})}),reset(div);var node_5=sibling(div,2);component(node_5,()=>Collapsible_content,($$anchor5,Collapsible_Content)=>{Collapsible_Content($$anchor5,{class:"mt-2",children:($$anchor6,$$slotProps2)=>{var div_1=root_7$7();each(div_1, -21,()=>$$props.logs,log=>log.timestamp.getTime()+log.message,($$anchor7,log)=>{const Icon2=user_derived(()=>getMcpLogLevelIcon(get$4(log).level));var fragment_6=root_8$6(),div_2=first_child(fragment_6),span_2=child(div_2),text_2=child(span_2,!0);reset(span_2);var node_6=sibling(span_2,2);component(node_6,()=>get$4(Icon2),($$anchor8,Icon_1)=>{Icon_1($$anchor8,{class:"mt-0.5 h-3 w-3 shrink-0"})});var span_3=sibling(node_6,2),text_3=child(span_3,!0);reset(span_3),reset(div_2);var node_7=sibling(div_2, -2);{var consequent_2=$$anchor8=>{var details_1=root_9$5(),pre=sibling(child(details_1),2),text_4=child(pre,!0);reset(pre),reset(details_1),template_effect($0=>set_text(text_4,$0),[()=>formatLogDetails(get$4(log).details)]),append($$anchor8,details_1)};if_block(node_7,$$render=>{get$4(log).details!==void 0&&$$render(consequent_2)})}template_effect(($0,$1)=>{set_class(div_2,1,$0),set_text(text_2,$1),set_text(text_3,get$4(log).message)},[()=>clsx(cn$1("flex items-start gap-1.5",getMcpLogLevelClass( -get$4(log).level))),()=>formatTime(get$4(log).timestamp)]),append($$anchor7,fragment_6)}),reset(div_1),append($$anchor6,div_1)},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)};if_block(node2,$$render=>{$$props.logs.length>0&&$$render(consequent_3)})}append($$anchor,fragment),pop()}var root_1$a=from_html('<p class="mt-1.5 text-xs text-destructive"> </p>'),root_3$9=from_html('<span class="inline-flex gap-0.75 text-xs text-muted-foregrou\ -nd/60">(Run <pre>llama-server</pre> with <pre>--webui-mcp-proxy</pre> flag)</span>'),root_2$d=from_html('<label><!> <span><span class="text-xs text-muted-foreground">Use llama-server proxy</span> <br/> <!></span></label>'),root$k=from_html('<div class="grid gap-3"><div><label class="mb-2 block text-xs font-medium">Server URL <span class="text-destructive">*</span></label> <!> <!> <!></div> <!></div>');function McpServerForm($$anchor,$$props){push$1($$props,!0);let useProxy=prop($$props,"useProxy", -3,!1),urlError=prop($$props,"urlError",3,null),id2=prop($$props,"id",3,"server"),isWebSocket=user_derived(()=>$$props.url.toLowerCase().startsWith(UrlProtocol.WEBSOCKET)||$$props.url.toLowerCase().startsWith(UrlProtocol.WEBSOCKET_SECURE)),headerPairs=user_derived(()=>parseHeadersToArray($$props.headers));function updateHeaderPairs(newPairs){set$1(headerPairs,newPairs),$$props.onHeadersChange(serializeHeaders(newPairs))}var div=root$k(),div_1=child(div),label=child(div_1),node2=sibling(label,2);{ -let $0=user_derived(()=>urlError()?"border-destructive":"");Input(node2,{get id(){return`server-url-${id2()??""}`},type:"url",get placeholder(){return MCP_SERVER_URL_PLACEHOLDER},get value(){return $$props.url},oninput:e=>$$props.onUrlChange(e.currentTarget.value),get class(){return get$4($0)}})}var node_1=sibling(node2,2);{var consequent=$$anchor2=>{var p2=root_1$a(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,urlError())),append($$anchor2,p2)};if_block(node_1,$$render=>{urlError()&& -$$render(consequent)})}var node_2=sibling(node_1,2);{var consequent_2=$$anchor2=>{var label_1=root_2$d();let classes;var node_3=child(label_1);{let $0=user_derived(()=>!mcpStore.isProxyAvailable);Switch(node_3,{class:"mt-1",get id(){return`use-proxy-${id2()??""}`},get checked(){return useProxy()},get disabled(){return get$4($0)},onCheckedChange:checked=>$$props.onUseProxyChange?.(checked)})}var span=sibling(node_3,2),node_4=sibling(child(span),4);{var consequent_1=$$anchor3=>{var span_1=root_3$9(); -append($$anchor3,span_1)};if_block(node_4,$$render=>{mcpStore.isProxyAvailable||$$render(consequent_1)})}reset(span),reset(label_1),template_effect(()=>classes=set_class(label_1,1,"mt-3 flex items-start gap-2",null,classes,{"cursor-pointer":mcpStore.isProxyAvailable,"opacity-80":!mcpStore.isProxyAvailable})),append($$anchor2,label_1)};if_block(node_2,$$render=>{!get$4(isWebSocket)&&$$props.onUseProxyChange&&$$render(consequent_2)})}reset(div_1);var node_5=sibling(div_1,2);KeyValuePairs(node_5,{class:"\ -mt-2",get pairs(){return get$4(headerPairs)},onPairsChange:updateHeaderPairs,keyPlaceholder:"Header name",valuePlaceholder:"Value",addButtonLabel:"Add",emptyMessage:"No custom headers configured.",sectionLabel:"Custom Headers",sectionLabelOptional:!0}),reset(div),template_effect(()=>set_attribute(label,"for",`server-url-${id2()??""}`)),append($$anchor,div),pop()}var root$j=from_svg('<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 174 174" xmlns:xlink="http://www.w3.org/1999/xlink" fill="non\ -e" version="1.1"><g id="shape-320b5b95-d08d-8089-8007-585a8e498184"><defs><clipPath id="frame-clip-320b5b95-d08d-8089-8007-585a8e498184-render-1" class="frame-clip frame-clip-def"><rect rx="0" ry="0" x="0" y="0" width="174.00000000000045" height="174" transform="matrix(1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000)"></rect></clipPath></defs><g class="frame-container-wrapper"><g class="frame-container-blur"><g class="frame-container-shadows"><g clip-path="url(#frame-clip-320b5b95-d08\ -d-8089-8007-585a8e498184-render-1)" fill="none"><g class="fills" id="fills-320b5b95-d08d-8089-8007-585a8e498184"><rect rx="0" ry="0" x="0" y="0" width="174.00000000000045" height="174" transform="matrix(1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000)" class="frame-background"></rect></g><g class="frame-children"><g id="shape-320b5b95-d08d-8089-8007-585a974337b1"><g class="fills" id="fills-320b5b95-d08d-8089-8007-585a974337b1"><path d="M15.5587158203125,81.5927734375L83.44091796875,13\ -.7105712890625C92.813720703125,4.3380126953125,108.0096435546875,4.3380126953125,117.3817138671875,13.7105712890625L117.3817138671875,13.7105712890625C126.7547607421875,23.08306884765625,126.7547607421875,38.27911376953125,117.3817138671875,47.65167236328125L66.1168212890625,98.9169921875" fill="none" stroke-linecap="round" style="fill: none;"></path></g><g fill="none" stroke-linecap="round" id="strokes-b954dcef-3e3e-8015-8007-585acd4382b6-320b5b95-d08d-8089-8007-585a974337b1" class="strokes"><g\ - class="stroke-shape"><path d="M15.5587158203125,81.5927734375L83.44091796875,13.7105712890625C92.813720703125,4.3380126953125,108.0096435546875,4.3380126953125,117.3817138671875,13.7105712890625L117.3817138671875,13.7105712890625C126.7547607421875,23.08306884765625,126.7547607421875,38.27911376953125,117.3817138671875,47.65167236328125L66.1168212890625,98.9169921875" style="fill: none; stroke-width: 12; stroke: currentColor; stroke-opacity: 1;"></path></g></g></g><g id="shape-320b5b95-d08d-8089\ --8007-585a974337b2"><g class="fills" id="fills-320b5b95-d08d-8089-8007-585a974337b2"><path d="M66.5587158203125,98.26885986328125L117.1165771484375,47.7105712890625C126.489501953125,38.3380126953125,141.6854248046875,38.3380126953125,151.0584716796875,47.7105712890625L151.4114990234375,48.0640869140625C160.7845458984375,57.43670654296875,160.7845458984375,72.6326904296875,151.4114990234375,82.00518798828125L90.018310546875,143.39886474609375C86.8941650390625,146.52288818359375,86.8941650390625,1\ -51.587890625,90.018310546875,154.71185302734375L102.62451171875,167.31890869140625" fill="none" stroke-linecap="round" style="fill: none;"></path></g><g fill="none" stroke-linecap="round" id="strokes-b954dcef-3e3e-8015-8007-585acd447743-320b5b95-d08d-8089-8007-585a974337b2" class="strokes"><g class="stroke-shape"><path d="M66.5587158203125,98.26885986328125L117.1165771484375,47.7105712890625C126.489501953125,38.3380126953125,141.6854248046875,38.3380126953125,151.0584716796875,47.7105712890625L1\ -51.4114990234375,48.0640869140625C160.7845458984375,57.43670654296875,160.7845458984375,72.6326904296875,151.4114990234375,82.00518798828125L90.018310546875,143.39886474609375C86.8941650390625,146.52288818359375,86.8941650390625,151.587890625,90.018310546875,154.71185302734375L102.62451171875,167.31890869140625" style="fill: none; stroke-width: 12; stroke: currentColor; stroke-opacity: 1;"></path></g></g></g><g id="shape-320b5b95-d08d-8089-8007-585a974337b3"><g class="fills" id="fills-320b5b95-d\ -08d-8089-8007-585a974337b3"><path d="M99.79296875,30.68115234375L49.588134765625,80.8857421875C40.215576171875,90.258056640625,40.215576171875,105.45404052734375,49.588134765625,114.82708740234375L49.588134765625,114.82708740234375C58.9608154296875,124.19903564453125,74.1566162109375,124.19903564453125,83.529296875,114.82708740234375L133.7340087890625,64.62225341796875" fill="none" stroke-linecap="round" style="fill: none;"></path></g><g fill="none" stroke-linecap="round" id="strokes-b954dcef-3e\ -3e-8015-8007-585acd44c5c9-320b5b95-d08d-8089-8007-585a974337b3" class="strokes"><g class="stroke-shape"><path d="M99.79296875,30.68115234375L49.588134765625,80.8857421875C40.215576171875,90.258056640625,40.215576171875,105.45404052734375,49.588134765625,114.82708740234375L49.588134765625,114.82708740234375C58.9608154296875,124.19903564453125,74.1566162109375,124.19903564453125,83.529296875,114.82708740234375L133.7340087890625,64.62225341796875" style="fill: none; stroke-width: 12; stroke: curren\ -tColor; stroke-opacity: 1;"></path></g></g></g></g></g></g></g></g></g></svg>');function McpLogo($$anchor,$$props){let className=prop($$props,"class",3,""),style2=prop($$props,"style",3,"");var svg2=root$j();template_effect(()=>{set_class(svg2,0,clsx(className())),set_style(svg2,style2())}),append($$anchor,svg2)}var root_4$4=from_html('<p class="text-xs text-destructive"> </p>'),root_5$9=from_html('<p class="line-clamp-2 text-xs text-muted-foreground"> </p>'),root_6$8=from_html('<div class="spac\ -e-y-2"><div class="flex items-center gap-2"><!> <!></div> <div class="flex flex-wrap gap-1.5"><!> <!> <!></div></div> <div class="space-y-1.5"><div class="flex items-center gap-2"><!> <!></div></div>',1),root_7$6=from_html("<!> <!> <!>",1),root_13$5=from_html('<div class="flex flex-wrap items-center gap-1"><span class="text-[10px] text-muted-foreground"> </span></div>'),root_3$8=from_html('<!> <!> <!> <div class="grid gap-3"><!></div> <div class="flex justify-between gap-4"><!> <!></div>',1),root$i=from_html( -"<!> <!>",1);function McpServerCard($$anchor,$$props){push$1($$props,!0);let healthState=user_derived(()=>mcpStore.getHealthCheckState($$props.server.id)),displayName=user_derived(()=>mcpStore.getServerLabel($$props.server)),isIdle=user_derived(()=>get$4(healthState).status===HealthCheckStatus.IDLE),isHealthChecking=user_derived(()=>get$4(healthState).status===HealthCheckStatus.CONNECTING),isConnected=user_derived(()=>get$4(healthState).status===HealthCheckStatus.SUCCESS),isError=user_derived(()=>get$4( -healthState).status===HealthCheckStatus.ERROR),showSkeleton=user_derived(()=>get$4(isIdle)||get$4(isHealthChecking)),errorMessage=user_derived(()=>get$4(healthState).status===HealthCheckStatus.ERROR?get$4(healthState).message:void 0),tools=user_derived(()=>get$4(healthState).status===HealthCheckStatus.SUCCESS?get$4(healthState).tools:[]),connectionLogs=user_derived(()=>get$4(healthState).status===HealthCheckStatus.CONNECTING||get$4(healthState).status===HealthCheckStatus.SUCCESS||get$4(healthState). -status===HealthCheckStatus.ERROR?get$4(healthState).logs:[]),successState=user_derived(()=>get$4(healthState).status===HealthCheckStatus.SUCCESS?get$4(healthState):null),serverInfo=user_derived(()=>get$4(successState)?.serverInfo),capabilities=user_derived(()=>get$4(successState)?.capabilities),transportType=user_derived(()=>get$4(successState)?.transportType),protocolVersion=user_derived(()=>get$4(successState)?.protocolVersion),connectionTimeMs=user_derived(()=>get$4(successState)?.connectionTimeMs), -instructions=user_derived(()=>get$4(successState)?.instructions),isEditing2=user_derived(()=>!$$props.server.url.trim()),showDeleteDialog=state$1(!1),editFormRef=state$1(null);function handleHealthCheck(){mcpStore.runHealthCheck($$props.server)}async function startEditing(){set$1(isEditing2,!0),await tick(),get$4(editFormRef)?.setInitialValues($$props.server.url,$$props.server.headers||"",$$props.server.useProxy||!1)}function cancelEditing(){$$props.server.url.trim()?set$1(isEditing2,!1):$$props. -onDelete()}function saveEditing(url2,headers,useProxy){$$props.onUpdate({url:url2,headers:headers||void 0,useProxy}),set$1(isEditing2,!1),$$props.server.enabled&&url2&&setTimeout(()=>mcpStore.runHealthCheck({...$$props.server,url:url2,useProxy}),100)}function handleDeleteClick(){set$1(showDeleteDialog,!0)}var fragment=root$i(),node2=first_child(fragment);component(node2,()=>Card,($$anchor2,Card_Root)=>{Card_Root($$anchor2,{class:"!gap-3 bg-muted/30 p-4",children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(), -node_1=first_child(fragment_1);{var consequent=$$anchor4=>{bind_this(McpServerCardEditForm($$anchor4,{get serverId(){return $$props.server.id},get serverUrl(){return $$props.server.url},get serverUseProxy(){return $$props.server.useProxy},onSave:saveEditing,onCancel:cancelEditing}),$$value=>set$1(editFormRef,$$value,!0),()=>get$4(editFormRef))},alternate_2=$$anchor4=>{var fragment_3=root_3$8(),node_2=first_child(fragment_3);{let $0=user_derived(()=>$$props.enabled??$$props.server.enabled);McpServerCardHeader( -node_2,{get displayName(){return get$4(displayName)},get faviconUrl(){return $$props.faviconUrl},get enabled(){return get$4($0)},get disabled(){return get$4(isError)},get onToggle(){return $$props.onToggle},get serverInfo(){return get$4(serverInfo)},get capabilities(){return get$4(capabilities)},get transportType(){return get$4(transportType)}})}var node_3=sibling(node_2,2);{var consequent_1=$$anchor5=>{var p2=root_4$4(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,get$4(errorMessage))), -append($$anchor5,p2)};if_block(node_3,$$render=>{get$4(isError)&&get$4(errorMessage)&&$$render(consequent_1)})}var node_4=sibling(node_3,2);{var consequent_2=$$anchor5=>{var p_1=root_5$9(),text_1=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text_1,get$4(serverInfo).description)),append($$anchor5,p_1)};if_block(node_4,$$render=>{get$4(isConnected)&&get$4(serverInfo)?.description&&$$render(consequent_2)})}var div=sibling(node_4,2),node_5=child(div);{var consequent_3=$$anchor5=>{var fragment_4=root_6$8(), -div_1=first_child(fragment_4),div_2=child(div_1),node_6=child(div_2);Skeleton(node_6,{class:"h-4 w-4 rounded"});var node_7=sibling(node_6,2);Skeleton(node_7,{class:"h-3 w-24"}),reset(div_2);var div_3=sibling(div_2,2),node_8=child(div_3);Skeleton(node_8,{class:"h-5 w-16 rounded-full"});var node_9=sibling(node_8,2);Skeleton(node_9,{class:"h-5 w-20 rounded-full"});var node_10=sibling(node_9,2);Skeleton(node_10,{class:"h-5 w-14 rounded-full"}),reset(div_3),reset(div_1);var div_4=sibling(div_1,2),div_5=child( -div_4),node_11=child(div_5);Skeleton(node_11,{class:"h-4 w-4 rounded"});var node_12=sibling(node_11,2);Skeleton(node_12,{class:"h-3 w-32"}),reset(div_5),reset(div_4),append($$anchor5,fragment_4)},alternate=$$anchor5=>{var fragment_5=root_7$6(),node_13=first_child(fragment_5);{var consequent_4=$$anchor6=>{McpServerInfo($$anchor6,{get instructions(){return get$4(instructions)}})};if_block(node_13,$$render=>{get$4(isConnected)&&get$4(instructions)&&$$render(consequent_4)})}var node_14=sibling(node_13, -2);{var consequent_5=$$anchor6=>{McpServerCardToolsList($$anchor6,{get tools(){return get$4(tools)}})};if_block(node_14,$$render=>{get$4(tools).length>0&&$$render(consequent_5)})}var node_15=sibling(node_14,2);{var consequent_6=$$anchor6=>{McpConnectionLogs($$anchor6,{get logs(){return get$4(connectionLogs)},get connectionTimeMs(){return get$4(connectionTimeMs)}})};if_block(node_15,$$render=>{get$4(connectionLogs).length>0&&$$render(consequent_6)})}append($$anchor5,fragment_5)};if_block(node_5,$$render=>{ -get$4(showSkeleton)?$$render(consequent_3):$$render(alternate,!1)})}reset(div);var div_6=sibling(div,2),node_16=child(div_6);{var consequent_7=$$anchor5=>{Skeleton($$anchor5,{class:"h-3 w-28"})},alternate_1=$$anchor5=>{var fragment_10=comment$2(),node_17=first_child(fragment_10);{var consequent_8=$$anchor6=>{var div_7=root_13$5(),span=child(div_7),text_2=child(span);reset(span),reset(div_7),template_effect(()=>set_text(text_2,`Protocol version: ${get$4(protocolVersion)??""}`)),append($$anchor6,div_7)}; -if_block(node_17,$$render=>{get$4(protocolVersion)&&$$render(consequent_8)},!0)}append($$anchor5,fragment_10)};if_block(node_16,$$render=>{get$4(showSkeleton)?$$render(consequent_7):$$render(alternate_1,!1)})}var node_18=sibling(node_16,2);McpServerCardActions(node_18,{get isHealthChecking(){return get$4(isHealthChecking)},onEdit:startEditing,onRefresh:handleHealthCheck,onDelete:handleDeleteClick}),reset(div_6),append($$anchor4,fragment_3)};if_block(node_1,$$render=>{get$4(isEditing2)?$$render(consequent): -$$render(alternate_2,!1)})}append($$anchor3,fragment_1)},$$slots:{default:!0}})});var node_19=sibling(node2,2);McpServerCardDeleteDialog(node_19,{get displayName(){return get$4(displayName)},onOpenChange:open2=>set$1(showDeleteDialog,open2,!0),get onConfirm(){return $$props.onDelete},get open(){return get$4(showDeleteDialog)},set open($$value){set$1(showDeleteDialog,$$value,!0)}}),append($$anchor,fragment),pop()}var root_1$9=from_html('<img alt="" class="h-5 w-5 shrink-0 rounded"/>'),root_2$c=from_html( -'<div class="flex h-5 w-5 shrink-0 items-center justify-center rounded bg-muted"><!></div>'),root_5$8=from_html('<a target="_blank" rel="noopener noreferrer" class="shrink-0 text-muted-foreground hover:text-foreground" aria-label="Open website"><!></a>'),root_8$5=from_html("<!> ",1),root_6$7=from_html('<div class="flex flex-wrap items-center gap-1"><!> <!></div>'),root$h=from_html('<div class="space-y-3"><div class="flex items-start justify-between gap-3"><div class="grid min-w-0 gap-3"><div cla\ -ss="flex items-center gap-2 overflow-hidden"><!> <p class="min-w-0 shrink-0 truncate leading-none font-medium"> </p> <!> <!></div> <!></div> <div class="flex shrink-0 items-center pl-2"><!></div></div></div>');function McpServerCardHeader($$anchor,$$props){push$1($$props,!0);let disabled=prop($$props,"disabled",3,!1);var div=root$h(),div_1=child(div),div_2=child(div_1),div_3=child(div_2),node2=child(div_3);{var consequent=$$anchor2=>{var img=root_1$9();template_effect(()=>set_attribute(img,"src", -$$props.faviconUrl)),event("error",img,e=>{e.currentTarget.style.display="none"}),replay_events(img),append($$anchor2,img)},alternate=$$anchor2=>{var div_4=root_2$c(),node_1=child(div_4);Cable(node_1,{class:"h-3 w-3 text-muted-foreground"}),reset(div_4),append($$anchor2,div_4)};if_block(node2,$$render=>{$$props.faviconUrl?$$render(consequent):$$render(alternate,!1)})}var p2=sibling(node2,2),text2=child(p2,!0);reset(p2);var node_2=sibling(p2,2);{var consequent_1=$$anchor2=>{Badge($$anchor2,{variant:"\ -secondary",class:"h-4 min-w-0 truncate px-1 text-[10px]",children:($$anchor3,$$slotProps)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,`v${$$props.serverInfo.version??""}`)),append($$anchor3,text_1)},$$slots:{default:!0}})};if_block(node_2,$$render=>{$$props.serverInfo?.version&&$$render(consequent_1)})}var node_3=sibling(node_2,2);{var consequent_2=$$anchor2=>{var a=root_5$8(),node_4=child(a);External_link(node_4,{class:"h-3 w-3"}),reset(a),template_effect(()=>set_attribute( -a,"href",$$props.serverInfo.websiteUrl)),append($$anchor2,a)};if_block(node_3,$$render=>{$$props.serverInfo?.websiteUrl&&$$render(consequent_2)})}reset(div_3);var node_5=sibling(div_3,2);{var consequent_6=$$anchor2=>{var div_5=root_6$7(),node_6=child(div_5);{var consequent_4=$$anchor3=>{const TransportIcon=user_derived(()=>MCP_TRANSPORT_ICONS[$$props.transportType]);Badge($$anchor3,{variant:"outline",class:"h-5 gap-1 px-1.5 text-[10px]",children:($$anchor4,$$slotProps)=>{var fragment_3=root_8$5(), -node_7=first_child(fragment_3);{var consequent_3=$$anchor5=>{var fragment_4=comment$2(),node_8=first_child(fragment_4);component(node_8,()=>get$4(TransportIcon),($$anchor6,TransportIcon_1)=>{TransportIcon_1($$anchor6,{class:"h-3 w-3"})}),append($$anchor5,fragment_4)};if_block(node_7,$$render=>{get$4(TransportIcon)&&$$render(consequent_3)})}var text_2=sibling(node_7);template_effect(()=>set_text(text_2,` ${(MCP_TRANSPORT_LABELS[$$props.transportType]||$$props.transportType)??""}`)),append($$anchor4, -fragment_3)},$$slots:{default:!0}})};if_block(node_6,$$render=>{$$props.transportType&&$$render(consequent_4)})}var node_9=sibling(node_6,2);{var consequent_5=$$anchor3=>{McpCapabilitiesBadges($$anchor3,{get capabilities(){return $$props.capabilities}})};if_block(node_9,$$render=>{$$props.capabilities&&$$render(consequent_5)})}reset(div_5),append($$anchor2,div_5)};if_block(node_5,$$render=>{($$props.capabilities||$$props.transportType)&&$$render(consequent_6)})}reset(div_2);var div_6=sibling(div_2, -2),node_10=child(div_6);Switch(node_10,{get checked(){return $$props.enabled},get disabled(){return disabled()},get onCheckedChange(){return $$props.onToggle}}),reset(div_6),reset(div_1),reset(div),template_effect(()=>set_text(text2,$$props.displayName)),append($$anchor,div),pop()}var root$g=from_html('<div class="flex shrink-0 items-center gap-1"><!> <!> <!></div>');function McpServerCardActions($$anchor,$$props){var div=root$g(),node2=child(div);Button(node2,{variant:"ghost",size:"icon",class:"\ -h-7 w-7",get onclick(){return $$props.onEdit},"aria-label":"Edit",children:($$anchor2,$$slotProps)=>{Pencil($$anchor2,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}});var node_1=sibling(node2,2);Button(node_1,{variant:"ghost",size:"icon",class:"h-7 w-7",get onclick(){return $$props.onRefresh},get disabled(){return $$props.isHealthChecking},"aria-label":"Refresh",children:($$anchor2,$$slotProps)=>{Refresh_cw($$anchor2,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}});var node_2=sibling(node_1,2);Button( -node_2,{variant:"ghost",size:"icon",class:"hover:text-destructive-foreground h-7 w-7 text-destructive hover:bg-destructive/10",get onclick(){return $$props.onDelete},"aria-label":"Delete",children:($$anchor2,$$slotProps)=>{Trash_2($$anchor2,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}}),reset(div),append($$anchor,div)}var root_2$b=from_html("<!> <span> </span>",1),root_8$4=from_html('<p class="mt-1 text-xs text-muted-foreground"> </p>'),root_6$6=from_html("<div><!> <!></div>"),root_5$7=from_html( -'<div class="max-h-64 space-y-3 overflow-y-auto"></div>'),root_1$8=from_html("<!> <!>",1);function McpServerCardToolsList($$anchor,$$props){push$1($$props,!0);let isExpanded=state$1(!1),toolsCount=user_derived(()=>$$props.tools.length);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Collapsible,($$anchor2,Collapsible_Root)=>{Collapsible_Root($$anchor2,{get open(){return get$4(isExpanded)},set open($$value){set$1(isExpanded,$$value,!0)},children:($$anchor3,$$slotProps)=>{ -var fragment_1=root_1$8(),node_1=first_child(fragment_1);component(node_1,()=>Collapsible_trigger,($$anchor4,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor4,{class:"flex w-full items-center gap-1 text-xs text-muted-foreground hover:text-foreground",children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$b(),node_2=first_child(fragment_2);{var consequent=$$anchor6=>{Chevron_down($$anchor6,{class:"h-3.5 w-3.5"})},alternate=$$anchor6=>{Chevron_right($$anchor6,{class:"h-3.5 w-3.5"})};if_block( -node_2,$$render=>{get$4(isExpanded)?$$render(consequent):$$render(alternate,!1)})}var span=sibling(node_2,2),text2=child(span);reset(span),template_effect(()=>set_text(text2,`${get$4(toolsCount)??""} tools available · Show details`)),append($$anchor5,fragment_2)},$$slots:{default:!0}})});var node_3=sibling(node_1,2);component(node_3,()=>Collapsible_content,($$anchor4,Collapsible_Content)=>{Collapsible_Content($$anchor4,{class:"mt-2",children:($$anchor5,$$slotProps2)=>{var div=root_5$7();each(div, -21,()=>$$props.tools,tool=>tool.name,($$anchor6,tool)=>{var div_1=root_6$6(),node_4=child(div_1);Badge(node_4,{variant:"secondary",children:($$anchor7,$$slotProps3)=>{next$1();var text_1=text$8();template_effect(()=>set_text(text_1,get$4(tool).name)),append($$anchor7,text_1)},$$slots:{default:!0}});var node_5=sibling(node_4,2);{var consequent_1=$$anchor7=>{var p2=root_8$4(),text_2=child(p2,!0);reset(p2),template_effect(()=>set_text(text_2,get$4(tool).description)),append($$anchor7,p2)};if_block( -node_5,$$render=>{get$4(tool).description&&$$render(consequent_1)})}reset(div_1),append($$anchor6,div_1)}),reset(div),append($$anchor5,div)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root$f=from_html('<div class="space-y-4"><p class="font-medium">Configure Server</p> <!> <div class="flex items-center justify-end gap-2"><!> <!></div></div>');function McpServerCardEditForm($$anchor,$$props){push$1($$props,!0);let serverUseProxy=prop( -$$props,"serverUseProxy",3,!1),editUrl=user_derived(()=>$$props.serverUrl),editHeaders=state$1(""),editUseProxy=user_derived(serverUseProxy),urlError=user_derived(()=>{if(!get$4(editUrl).trim())return"URL is required";try{return new URL(get$4(editUrl)),null}catch{return"Invalid URL format"}}),canSave=user_derived(()=>!get$4(urlError));function handleSave(){get$4(canSave)&&$$props.onSave(get$4(editUrl).trim(),get$4(editHeaders).trim(),get$4(editUseProxy))}function setInitialValues(url2,headers,useProxy){ -set$1(editUrl,url2),set$1(editHeaders,headers,!0),set$1(editUseProxy,useProxy)}var $$exports={setInitialValues},div=root$f(),node2=sibling(child(div),2);{let $0=user_derived(()=>get$4(editUrl)?get$4(urlError):null);McpServerForm(node2,{get url(){return get$4(editUrl)},get headers(){return get$4(editHeaders)},get useProxy(){return get$4(editUseProxy)},onUrlChange:v=>set$1(editUrl,v),onHeadersChange:v=>set$1(editHeaders,v,!0),onUseProxyChange:v=>set$1(editUseProxy,v),get urlError(){return get$4($0)}, -get id(){return $$props.serverId}})}var div_1=sibling(node2,2),node_1=child(div_1);Button(node_1,{variant:"secondary",size:"sm",get onclick(){return $$props.onCancel},children:($$anchor2,$$slotProps)=>{next$1();var text2=text$8("Cancel");append($$anchor2,text2)},$$slots:{default:!0}});var node_2=sibling(node_1,2);{let $0=user_derived(()=>!get$4(canSave));Button(node_2,{size:"sm",onclick:handleSave,get disabled(){return get$4($0)},children:($$anchor2,$$slotProps)=>{next$1();var text_1=text$8();template_effect( -$02=>set_text(text_1,$02),[()=>$$props.serverUrl.trim()?"Update":"Add"]),append($$anchor2,text_1)},$$slots:{default:!0}})}return reset(div_1),reset(div),append($$anchor,div),pop($$exports)}var root_5$6=from_html(`Are you sure you want to delete <strong> </strong>? This action cannot be - undone.`,1),root_3$7=from_html("<!> <!>",1),root_6$5=from_html("<!> <!>",1),root_2$a=from_html("<!> <!>",1);function McpServerCardDeleteDialog($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15);var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Root$3,($$anchor2,AlertDialog_Root)=>{AlertDialog_Root($$anchor2,{get onOpenChange(){return $$props.onOpenChange},get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{ -var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Alert_dialog_content,($$anchor4,AlertDialog_Content)=>{AlertDialog_Content($$anchor4,{children:($$anchor5,$$slotProps2)=>{var fragment_2=root_2$a(),node_2=first_child(fragment_2);component(node_2,()=>Alert_dialog_header,($$anchor6,AlertDialog_Header)=>{AlertDialog_Header($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_3=root_3$7(),node_3=first_child(fragment_3);component(node_3,()=>Alert_dialog_title,($$anchor8,AlertDialog_Title)=>{ -AlertDialog_Title($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var text2=text$8("Delete Server");append($$anchor9,text2)},$$slots:{default:!0}})});var node_4=sibling(node_3,2);component(node_4,()=>Alert_dialog_description,($$anchor8,AlertDialog_Description)=>{AlertDialog_Description($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1();var fragment_4=root_5$6(),strong2=sibling(first_child(fragment_4)),text_1=child(strong2,!0);reset(strong2),next$1(),template_effect(()=>set_text(text_1, -$$props.displayName)),append($$anchor9,fragment_4)},$$slots:{default:!0}})}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_5=sibling(node_2,2);component(node_5,()=>Alert_dialog_footer,($$anchor6,AlertDialog_Footer)=>{AlertDialog_Footer($$anchor6,{children:($$anchor7,$$slotProps3)=>{var fragment_5=root_6$5(),node_6=first_child(fragment_5);component(node_6,()=>Alert_dialog_cancel,($$anchor8,AlertDialog_Cancel)=>{AlertDialog_Cancel($$anchor8,{children:($$anchor9,$$slotProps4)=>{next$1(); -var text_2=text$8("Cancel");append($$anchor9,text_2)},$$slots:{default:!0}})});var node_7=sibling(node_6,2);component(node_7,()=>Alert_dialog_action,($$anchor8,AlertDialog_Action)=>{AlertDialog_Action($$anchor8,{class:"text-destructive-foreground bg-destructive hover:bg-destructive/90",get onclick(){return $$props.onConfirm},children:($$anchor9,$$slotProps4)=>{next$1();var text_3=text$8("Delete");append($$anchor9,text_3)},$$slots:{default:!0}})}),append($$anchor7,fragment_5)},$$slots:{default:!0}})}), -append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}var root_1$7=from_html('<div class="flex items-center justify-between gap-4"><div class="flex items-center gap-2"><!> <!> <!></div> <!></div> <div class="flex flex-wrap gap-1.5"><!> <!> <!></div> <div class="space-y-1.5"><!> <!></div> <!> <div class="flex justify-end gap-2"><!> <!> <!></div>',1);function McpServerCardSkeleton($$anchor){Card($$anchor,{class:"\ -grid gap-3 p-4",children:($$anchor2,$$slotProps)=>{var fragment_1=root_1$7(),div=first_child(fragment_1),div_1=child(div),node2=child(div_1);Skeleton(node2,{class:"h-5 w-5 rounded"});var node_1=sibling(node2,2);Skeleton(node_1,{class:"h-5 w-28"});var node_2=sibling(node_1,2);Skeleton(node_2,{class:"h-5 w-12 rounded-full"}),reset(div_1);var node_3=sibling(div_1,2);Skeleton(node_3,{class:"h-6 w-11 rounded-full"}),reset(div);var div_2=sibling(div,2),node_4=child(div_2);Skeleton(node_4,{class:"h-5 w\ --14 rounded-full"});var node_5=sibling(node_4,2);Skeleton(node_5,{class:"h-5 w-12 rounded-full"});var node_6=sibling(node_5,2);Skeleton(node_6,{class:"h-5 w-16 rounded-full"}),reset(div_2);var div_3=sibling(div_2,2),node_7=child(div_3);Skeleton(node_7,{class:"h-4 w-40"});var node_8=sibling(node_7,2);Skeleton(node_8,{class:"h-4 w-52"}),reset(div_3);var node_9=sibling(div_3,2);Skeleton(node_9,{class:"h-3.5 w-36"});var div_4=sibling(node_9,2),node_10=child(div_4);Skeleton(node_10,{class:"h-8 w-8 ro\ -unded"});var node_11=sibling(node_10,2);Skeleton(node_11,{class:"h-8 w-8 rounded"});var node_12=sibling(node_11,2);Skeleton(node_12,{class:"h-8 w-8 rounded"}),reset(div_4),append($$anchor2,fragment_1)},$$slots:{default:!0}})}var root_3$6=from_html("<!> <span>Server instructions</span>",1),root_6$4=from_html('<p class="rounded bg-muted/50 p-2 text-xs text-muted-foreground"> </p>'),root_2$9=from_html("<!> <!>",1);function McpServerInfo($$anchor,$$props){let isExpanded=state$1(!1);var fragment=comment$2(), -node2=first_child(fragment);{var consequent_1=$$anchor2=>{var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Collapsible,($$anchor3,Collapsible_Root)=>{Collapsible_Root($$anchor3,{get class(){return $$props.class},get open(){return get$4(isExpanded)},set open($$value){set$1(isExpanded,$$value,!0)},children:($$anchor4,$$slotProps)=>{var fragment_2=root_2$9(),node_2=first_child(fragment_2);component(node_2,()=>Collapsible_trigger,($$anchor5,Collapsible_Trigger)=>{Collapsible_Trigger( -$$anchor5,{class:"flex w-full items-center gap-1 text-xs text-muted-foreground hover:text-foreground",children:($$anchor6,$$slotProps2)=>{var fragment_3=root_3$6(),node_3=first_child(fragment_3);{var consequent=$$anchor7=>{Chevron_down($$anchor7,{class:"h-3.5 w-3.5"})},alternate=$$anchor7=>{Chevron_right($$anchor7,{class:"h-3.5 w-3.5"})};if_block(node_3,$$render=>{get$4(isExpanded)?$$render(consequent):$$render(alternate,!1)})}next$1(2),append($$anchor6,fragment_3)},$$slots:{default:!0}})});var node_4=sibling( -node_2,2);component(node_4,()=>Collapsible_content,($$anchor5,Collapsible_Content)=>{Collapsible_Content($$anchor5,{class:"mt-2",children:($$anchor6,$$slotProps2)=>{var p2=root_6$4(),text2=child(p2,!0);reset(p2),template_effect(()=>set_text(text2,$$props.instructions)),append($$anchor6,p2)},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{default:!0}})}),append($$anchor2,fragment_1)};if_block(node2,$$render=>{$$props.instructions&&$$render(consequent_1)})}append($$anchor,fragment)} -var root$e=from_html('<div class="flex flex-col gap-2"><div class="mb-2 flex items-center gap-4"><!> <!></div> <h3 class="text-sm font-medium">Available resources</h3></div>');function McpResourceBrowserHeader($$anchor,$$props){push$1($$props,!0);let searchQuery=prop($$props,"searchQuery",3,"");var div=root$e(),div_1=child(div),node2=child(div_1);SearchInput(node2,{placeholder:"Search resources...",get value(){return searchQuery()},onInput:value=>$$props.onSearch?.(value)});var node_1=sibling(node2, -2);Button(node_1,{variant:"ghost",size:"sm",class:"h-8 w-8 p-0",get onclick(){return $$props.onRefresh},get disabled(){return $$props.isLoading},title:"Refresh resources",children:($$anchor2,$$slotProps)=>{var fragment=comment$2(),node_2=first_child(fragment);{var consequent=$$anchor3=>{Loader_circle($$anchor3,{class:"h-4 w-4 animate-spin"})},alternate=$$anchor3=>{Refresh_cw($$anchor3,{class:"h-4 w-4"})};if_block(node_2,$$render=>{$$props.isLoading?$$render(consequent):$$render(alternate,!1)})}append( -$$anchor2,fragment)},$$slots:{default:!0}}),reset(div_1),next$1(2),reset(div),append($$anchor,div),pop()}var root$d=from_html('<div class="py-4 text-center text-sm text-muted-foreground"><!></div>');function McpResourceBrowserEmptyState($$anchor,$$props){var div=root$d(),node2=child(div);{var consequent=$$anchor2=>{var text2=text$8("Loading resources...");append($$anchor2,text2)},alternate=$$anchor2=>{var text_1=text$8("No resources available");append($$anchor2,text_1)};if_block(node2,$$render=>{ -$$props.isLoading?$$render(consequent):$$render(alternate,!1)})}reset(div),append($$anchor,div)}function resourceMatchesSearch(resource,query){return resource.title?.toLowerCase().includes(query)||resource.uri.toLowerCase().includes(query)}function buildResourceTree(resourceList,serverName,searchQuery){const root2={name:"root",children:new Map};if(!searchQuery||!searchQuery.trim()){for(const resource of resourceList){const pathParts=parseResourcePath(resource.uri);let current2=root2;for(let i=0;i< -pathParts.length-1;i++){const part=pathParts[i];current2.children.has(part)||current2.children.set(part,{name:part,children:new Map}),current2=current2.children.get(part)}const fileName=pathParts[pathParts.length-1]||resource.name;current2.children.set(resource.uri,{name:fileName,resource:{...resource,serverName},children:new Map})}return root2}const query=searchQuery.toLowerCase();for(const resource of resourceList){if(!resourceMatchesSearch(resource,query))continue;const pathParts=parseResourcePath( -resource.uri);let current2=root2;for(let i=0;i<pathParts.length-1;i++){const part=pathParts[i];current2.children.has(part)||current2.children.set(part,{name:part,children:new Map,isFiltered:!0}),current2=current2.children.get(part)}const fileName=pathParts[pathParts.length-1]||resource.name;current2.children.set(resource.uri,{name:fileName,resource:{...resource,serverName},children:new Map,isFiltered:!0})}function cleanupEmptyFolders(node2){if(node2.resource)return!0;const toDelete=[];for(const[ -name,child2]of node2.children.entries())cleanupEmptyFolders(child2)||toDelete.push(name);for(const name of toDelete)node2.children.delete(name);return node2.children.size>0}return cleanupEmptyFolders(root2),root2}function countTreeResources(node2){if(node2.resource)return 1;let count=0;for(const child2 of node2.children.values())count+=countTreeResources(child2);return count}function sortTreeChildren(children){return children.sort((a,b)=>{const aIsFolder=!a.resource&&a.children.size>0,bIsFolder=!b. -resource&&b.children.size>0;return aIsFolder&&!bIsFolder?-1:!aIsFolder&&bIsFolder?1:a.name.localeCompare(b.name)})}var root_4$3=from_html('<!> <!> <span class="font-medium"> </span> <span class="text-xs text-muted-foreground"> </span>',1),root_7$5=from_html('<div class="ml-4 flex flex-col gap-0.5 border-l border-border/50 pl-2"></div>'),root_3$5=from_html("<!> <!>",1),root_10$5=from_html('<div class="group flex w-full items-center gap-2"><!> <button><!> <span class="min-w-0 flex-1 truncate text-\ -left"> </span></button></div>'),root_16$1=from_html('<img alt="" class="h-4 w-4 shrink-0 rounded-sm"/>'),root_13$4=from_html('<!> <span class="inline-flex flex-col items-start text-left"><span class="inline-flex items-center justify-start gap-1.5 font-medium"><!> </span> <span class="text-xs text-muted-foreground"> <!>)</span></span> <!>',1),root_20$2=from_html('<div class="py-1 text-xs text-red-500"> </div>'),root_22$2=from_html('<div class="py-1 text-xs text-muted-foreground">No resources</div\ ->'),root_27=from_html('<div class="my-1 border-t border-border/30"></div>'),root_28=from_html('<button><!> <span class="min-w-0 flex-1 truncate text-left"> </span></button>'),root_26$1=from_html('<!> <div class="py-0.5 text-[11px] font-medium tracking-wide text-muted-foreground/70 uppercase">Templates</div> <!>',1),root_23=from_html("<!> <!>",1),root_19=from_html('<div class="ml-4 flex flex-col gap-0.5 border-l border-border/50 pl-2"><!></div>'),root_12$2=from_html("<!> <!>",1);function McpResourceBrowserServerItem($$anchor,$$props){ -push$1($$props,!0);const renderTreeNode=($$anchor2,node2=noop$3,depth=noop$3,parentPath=noop$3)=>{const isFolder=user_derived(()=>!node2().resource&&node2().children.size>0),folderId=user_derived(()=>`${$$props.serverName}:${parentPath()}/${node2().name}`),isFolderExpanded=user_derived(()=>$$props.expandedFolders.has(get$4(folderId)));var fragment=comment$2(),node_1=first_child(fragment);{var consequent_1=$$anchor3=>{const folderCount=user_derived(()=>countTreeResources(node2()));var fragment_1=comment$2(), -node_2=first_child(fragment_1);component(node_2,()=>Collapsible,($$anchor4,Collapsible_Root)=>{Collapsible_Root($$anchor4,{get open(){return get$4(isFolderExpanded)},onOpenChange:()=>$$props.onToggleFolder(get$4(folderId)),children:($$anchor5,$$slotProps)=>{var fragment_2=root_3$5(),node_3=first_child(fragment_2);component(node_3,()=>Collapsible_trigger,($$anchor6,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor6,{class:"flex w-full items-center gap-2 rounded px-2 py-1 text-sm hover:bg-muted/\ -50",children:($$anchor7,$$slotProps2)=>{var fragment_3=root_4$3(),node_4=first_child(fragment_3);{var consequent=$$anchor8=>{Chevron_down($$anchor8,{class:"h-3 w-3"})},alternate=$$anchor8=>{Chevron_right($$anchor8,{class:"h-3 w-3"})};if_block(node_4,$$render=>{get$4(isFolderExpanded)?$$render(consequent):$$render(alternate,!1)})}var node_5=sibling(node_4,2);Folder_open(node_5,{class:"h-3.5 w-3.5 text-muted-foreground"});var span=sibling(node_5,2),text2=child(span,!0);reset(span);var span_1=sibling( -span,2),text_1=child(span_1);reset(span_1),template_effect(()=>{set_text(text2,node2().name),set_text(text_1,`(${get$4(folderCount)??""})`)}),append($$anchor7,fragment_3)},$$slots:{default:!0}})});var node_6=sibling(node_3,2);component(node_6,()=>Collapsible_content,($$anchor6,Collapsible_Content)=>{Collapsible_Content($$anchor6,{children:($$anchor7,$$slotProps2)=>{var div=root_7$5();each(div,21,()=>sortTreeChildren([...node2().children.values()]),child2=>child2.resource?.uri||`${$$props.serverName}\ -:${parentPath()}/${node2().name}/${child2.name}`,($$anchor8,child2)=>{renderTreeNode($$anchor8,()=>get$4(child2),()=>depth()+1,()=>`${parentPath()}/${node2().name}`)}),reset(div),append($$anchor7,div)},$$slots:{default:!0}})}),append($$anchor5,fragment_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},alternate_1=$$anchor3=>{var fragment_7=comment$2(),node_7=first_child(fragment_7);{var consequent_3=$$anchor4=>{const resource=user_derived(()=>node2().resource),ResourceIcon=user_derived( -()=>getResourceIcon(get$4(resource).mimeType,get$4(resource).uri)),isSelected=user_derived(()=>isResourceSelected(get$4(resource))),resourceDisplayName=user_derived(()=>get$4(resource).title||getDisplayName(node2().name));var div_1=root_10$5(),node_8=child(div_1);{var consequent_2=$$anchor5=>{Checkbox($$anchor5,{get checked(){return get$4(isSelected)},onCheckedChange:checked=>handleCheckboxChange(get$4(resource),checked===!0),class:"h-4 w-4"})};if_block(node_8,$$render=>{$$props.onToggle&&$$render( -consequent_2)})}var button=sibling(node_8,2);button.__click=e=>handleResourceClick(get$4(resource),e);var node_9=child(button);component(node_9,()=>get$4(ResourceIcon),($$anchor5,ResourceIcon_1)=>{ResourceIcon_1($$anchor5,{class:"h-3.5 w-3.5 shrink-0 text-muted-foreground"})});var span_2=sibling(node_9,2),text_2=child(span_2,!0);reset(span_2),reset(button),reset(div_1),template_effect($0=>{set_class(button,1,$0),set_attribute(button,"title",get$4(resourceDisplayName)),set_text(text_2,get$4(resourceDisplayName))}, -[()=>clsx(cn$1("flex flex-1 items-center gap-2 rounded px-2 py-1 text-left text-sm transition-colors","hover:bg-muted/50",get$4(isSelected)&&"bg-muted"))]),append($$anchor4,div_1)};if_block(node_7,$$render=>{node2().resource&&$$render(consequent_3)},!0)}append($$anchor3,fragment_7)};if_block(node_1,$$render=>{get$4(isFolder)?$$render(consequent_1):$$render(alternate_1,!1)})}append($$anchor2,fragment)};let searchQuery=prop($$props,"searchQuery",3,"");const hasResources=user_derived(()=>$$props.serverRes. -resources.length>0),hasTemplates=user_derived(()=>$$props.serverRes.templates.length>0),hasContent=user_derived(()=>get$4(hasResources)||get$4(hasTemplates)),displayName=user_derived(()=>mcpStore.getServerDisplayName($$props.serverName)),favicon=user_derived(()=>mcpStore.getServerFavicon($$props.serverName)),resourceTree=user_derived(()=>buildResourceTree($$props.serverRes.resources,$$props.serverName,searchQuery())),templateInfos=user_derived(()=>$$props.serverRes.templates.map(t=>({uriTemplate:t. -uriTemplate,name:t.name,title:t.title,description:t.description,mimeType:t.mimeType,serverName:$$props.serverName,annotations:t.annotations,icons:t.icons})));function handleResourceClick(resource,event2){$$props.onSelect?.(resource,event2.shiftKey)}function handleCheckboxChange(resource,checked){$$props.onToggle?.(resource,checked)}function isResourceSelected(resource){return $$props.selectedUris.has(resource.uri)}var fragment_9=comment$2(),node_10=first_child(fragment_9);component(node_10,()=>Collapsible, -($$anchor2,Collapsible_Root_1)=>{Collapsible_Root_1($$anchor2,{get open(){return $$props.isExpanded},get onOpenChange(){return $$props.onToggleServer},children:($$anchor3,$$slotProps)=>{var fragment_10=root_12$2(),node_11=first_child(fragment_10);component(node_11,()=>Collapsible_trigger,($$anchor4,Collapsible_Trigger_1)=>{Collapsible_Trigger_1($$anchor4,{class:"flex w-full items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-muted/50",children:($$anchor5,$$slotProps2)=>{var fragment_11=root_13$4(), -node_12=first_child(fragment_11);{var consequent_4=$$anchor6=>{Chevron_down($$anchor6,{class:"h-3.5 w-3.5"})},alternate_2=$$anchor6=>{Chevron_right($$anchor6,{class:"h-3.5 w-3.5"})};if_block(node_12,$$render=>{$$props.isExpanded?$$render(consequent_4):$$render(alternate_2,!1)})}var span_3=sibling(node_12,2),span_4=child(span_3),node_13=child(span_4);{var consequent_5=$$anchor6=>{var img=root_16$1();template_effect(()=>set_attribute(img,"src",get$4(favicon))),event("error",img,e=>{e.currentTarget. -style.display="none"}),replay_events(img),append($$anchor6,img)};if_block(node_13,$$render=>{get$4(favicon)&&$$render(consequent_5)})}var text_3=sibling(node_13);reset(span_4);var span_5=sibling(span_4,2),text_4=child(span_5),node_14=sibling(text_4);{var consequent_6=$$anchor6=>{var text_5=text$8();template_effect(()=>set_text(text_5,`, ${$$props.serverRes.templates.length??""} template${$$props.serverRes.templates.length!==1?"s":""}`)),append($$anchor6,text_5)};if_block(node_14,$$render=>{get$4( -hasTemplates)&&$$render(consequent_6)})}next$1(),reset(span_5),reset(span_3);var node_15=sibling(span_3,2);{var consequent_7=$$anchor6=>{Loader_circle($$anchor6,{class:"ml-auto h-3 w-3 animate-spin text-muted-foreground"})};if_block(node_15,$$render=>{$$props.serverRes.loading&&$$render(consequent_7)})}template_effect(()=>{set_text(text_3,` ${get$4(displayName)??""}`),set_text(text_4,`(${$$props.serverRes.resources.length??""} resource${$$props.serverRes.resources.length!==1?"s":""}`)}),append($$anchor5, -fragment_11)},$$slots:{default:!0}})});var node_16=sibling(node_11,2);component(node_16,()=>Collapsible_content,($$anchor4,Collapsible_Content_1)=>{Collapsible_Content_1($$anchor4,{children:($$anchor5,$$slotProps2)=>{var div_2=root_19(),node_17=child(div_2);{var consequent_8=$$anchor6=>{var div_3=root_20$2(),text_6=child(div_3);reset(div_3),template_effect(()=>set_text(text_6,`Error: ${$$props.serverRes.error??""}`)),append($$anchor6,div_3)},alternate_4=$$anchor6=>{var fragment_16=comment$2(),node_18=first_child( -fragment_16);{var consequent_9=$$anchor7=>{var div_4=root_22$2();append($$anchor7,div_4)},alternate_3=$$anchor7=>{var fragment_17=root_23(),node_19=first_child(fragment_17);{var consequent_10=$$anchor8=>{var fragment_18=comment$2(),node_20=first_child(fragment_18);each(node_20,17,()=>sortTreeChildren([...get$4(resourceTree).children.values()]),child2=>child2.resource?.uri||`${$$props.serverName}:${child2.name}`,($$anchor9,child2)=>{renderTreeNode($$anchor9,()=>get$4(child2),()=>1,()=>"")}),append( -$$anchor8,fragment_18)};if_block(node_19,$$render=>{get$4(hasResources)&&$$render(consequent_10)})}var node_21=sibling(node_19,2);{var consequent_12=$$anchor8=>{var fragment_20=root_26$1(),node_22=first_child(fragment_20);{var consequent_11=$$anchor9=>{var div_5=root_27();append($$anchor9,div_5)};if_block(node_22,$$render=>{get$4(hasResources)&&$$render(consequent_11)})}var node_23=sibling(node_22,4);each(node_23,17,()=>get$4(templateInfos),template=>template.uriTemplate,($$anchor9,template)=>{var button_1=root_28(); -button_1.__click=()=>$$props.onTemplateSelect(get$4(template));var node_24=child(button_1);Braces(node_24,{class:"h-3.5 w-3.5 shrink-0 text-muted-foreground"});var span_6=sibling(node_24,2),text_7=child(span_6,!0);reset(span_6),reset(button_1),template_effect($0=>{set_class(button_1,1,$0),set_attribute(button_1,"title",get$4(template).uriTemplate),set_text(text_7,get$4(template).title||get$4(template).name)},[()=>clsx(cn$1("flex w-full items-center gap-2 rounded px-2 py-1 text-left text-sm trans\ -ition-colors","hover:bg-muted/50",$$props.selectedTemplateUri===get$4(template).uriTemplate&&"bg-muted"))]),append($$anchor9,button_1)}),append($$anchor8,fragment_20)};if_block(node_21,$$render=>{get$4(hasTemplates)&&$$props.onTemplateSelect&&$$render(consequent_12)})}append($$anchor7,fragment_17)};if_block(node_18,$$render=>{get$4(hasContent)?$$render(alternate_3,!1):$$render(consequent_9)},!0)}append($$anchor6,fragment_16)};if_block(node_17,$$render=>{$$props.serverRes.error?$$render(consequent_8): -$$render(alternate_4,!1)})}reset(div_2),append($$anchor5,div_2)},$$slots:{default:!0}})}),append($$anchor3,fragment_10)},$$slots:{default:!0}})}),append($$anchor,fragment_9),pop()}delegate(["click"]);var root$c=from_html('<div><!> <div class="flex flex-col gap-1"><!></div></div>');function McpResourceBrowser($$anchor,$$props){push$1($$props,!0);let selectedUris=prop($$props,"selectedUris",19,()=>new Set),expandedServers=new SvelteSet,expandedFolders=new SvelteSet,searchQuery=state$1("");const resources=user_derived( -mcpResources),isLoading2=user_derived(mcpResourcesLoading),filteredResources=user_derived(()=>{if(!get$4(searchQuery).trim())return get$4(resources);const query=get$4(searchQuery).toLowerCase(),filtered=new SvelteMap;for(const[serverName,serverRes]of get$4(resources).entries()){const filteredResources2=serverRes.resources.filter(r2=>r2.title?.toLowerCase().includes(query)||r2.uri.toLowerCase().includes(query)||serverName.toLowerCase().includes(query)),filteredTemplates=serverRes.templates.filter( -t=>t.name?.toLowerCase().includes(query)||t.title?.toLowerCase().includes(query)||t.uriTemplate.toLowerCase().includes(query)||serverName.toLowerCase().includes(query));(filteredResources2.length>0||filteredTemplates.length>0||query.trim())&&filtered.set(serverName,{...serverRes,resources:filteredResources2,templates:filteredTemplates})}return filtered});user_effect(()=>{$$props.expandToUri&&get$4(resources).size>0&&autoExpandToResource($$props.expandToUri)});function autoExpandToResource(uri2){ -for(const[serverName,serverRes]of get$4(resources).entries())if(serverRes.resources.find(r2=>r2.uri===uri2)){expandedServers.add(serverName);const pathParts=parseResourcePath(uri2);if(pathParts.length>1){let currentPath="";for(let i=0;i<pathParts.length-1;i++){currentPath=`${currentPath}/${pathParts[i]}`;const folderId=`${serverName}:${currentPath}`;expandedFolders.add(folderId)}}break}}function toggleServer(serverName){expandedServers.has(serverName)?expandedServers.delete(serverName):expandedServers. -add(serverName)}function toggleFolder(folderId){expandedFolders.has(folderId)?expandedFolders.delete(folderId):expandedFolders.add(folderId)}function handleRefresh(){mcpStore.fetchAllResources()}var div=root$c(),node2=child(div);McpResourceBrowserHeader(node2,{get isLoading(){return get$4(isLoading2)},onRefresh:handleRefresh,onSearch:q2=>set$1(searchQuery,q2,!0),get searchQuery(){return get$4(searchQuery)}});var div_1=sibling(node2,2),node_1=child(div_1);{var consequent=$$anchor2=>{McpResourceBrowserEmptyState( -$$anchor2,{get isLoading(){return get$4(isLoading2)}})},alternate=$$anchor2=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);each(node_2,17,()=>[...get$4(filteredResources).entries()],([serverName,serverRes])=>serverName,($$anchor3,$$item)=>{var $$array=user_derived(()=>to_array(get$4($$item),2));let serverName=()=>get$4($$array)[0],serverRes=()=>get$4($$array)[1];{let $0=user_derived(()=>expandedServers.has(serverName()));McpResourceBrowserServerItem($$anchor3,{get serverName(){return serverName()}, -get serverRes(){return serverRes()},get isExpanded(){return get$4($0)},get selectedUris(){return selectedUris()},get selectedTemplateUri(){return $$props.selectedTemplateUri},get expandedFolders(){return expandedFolders},onToggleServer:()=>toggleServer(serverName()),onToggleFolder:toggleFolder,get onSelect(){return $$props.onSelect},get onToggle(){return $$props.onToggle},get onTemplateSelect(){return $$props.onTemplateSelect},get searchQuery(){return get$4(searchQuery)}})}}),append($$anchor2,fragment_1)}; -if_block(node_1,$$render=>{get$4(filteredResources).size===0?$$render(consequent):$$render(alternate,!1)})}reset(div_1),reset(div),template_effect($0=>set_class(div,1,$0),[()=>clsx(cn$1("flex flex-col gap-2",$$props.class))]),append($$anchor,div),pop()}var root_1$6=from_html('<div class="flex flex-col items-center justify-center gap-2 py-8 text-muted-foreground"><!> <span class="text-sm">Select a resource to preview</span></div>'),root_3$4=from_html('<p class="mt-1 text-sm text-muted-foreground"\ -> </p>'),root_5$5=from_html('<div class="flex items-center justify-center py-8"><!></div>'),root_7$4=from_html('<div class="flex flex-col items-center justify-center gap-2 py-8 text-red-500"><!> <span class="text-sm"> </span></div>'),root_10$4=from_html('<pre class="font-mono text-xs break-words whitespace-pre-wrap"> </pre>'),root_12$1=from_html('<img alt="Resource content" class="max-w-full rounded"/>'),root_13$3=from_html('<div class="flex items-center gap-2 rounded bg-muted p-2 text-sm text-m\ -uted-foreground"><!> <span> </span></div>'),root_14$2=from_html('<div class="py-4 text-center text-sm text-muted-foreground">No content available</div>'),root_9$4=from_html("<!> <!> <!>",1),root_16=from_html('<span class="rounded bg-muted px-1.5 py-0.5"> </span>'),root_17=from_html('<span class="rounded bg-muted px-1.5 py-0.5"> </span>'),root_15$1=from_html('<div class="flex flex-wrap gap-2 text-xs text-muted-foreground"><!> <!> <span class="rounded bg-muted px-1.5 py-0.5"> </span></div>'),root_2$8=from_html( -'<div class="flex items-start justify-between gap-2"><div class="min-w-0 flex-1"><h3 class="truncate font-medium"> </h3> <p class="truncate text-xs text-muted-foreground"> </p> <!></div> <div class="flex items-center gap-1"><!> <!></div></div> <div class="min-h-[200px] overflow-auto rounded-md border bg-muted/30 p-3 break-all"><!></div> <!>',1),root$b=from_html("<div><!></div>");function McpResourcePreview($$anchor,$$props){push$1($$props,!0);let content2=state$1(null),isLoading2=state$1(!1),error2=state$1( -null);user_effect(()=>{$$props.resource?$$props.preloadedContent?(set$1(content2,$$props.preloadedContent,!0),set$1(isLoading2,!1),set$1(error2,null)):loadContent($$props.resource.uri):(set$1(content2,null),set$1(error2,null))});async function loadContent(uri2){set$1(isLoading2,!0),set$1(error2,null);try{const result=await mcpStore.readResource(uri2);result?set$1(content2,result,!0):set$1(error2,"Failed to load resource content")}catch(e){set$1(error2,e instanceof Error?e.message:"Unknown error", -!0)}finally{set$1(isLoading2,!1)}}function handleDownload(){const text2=getResourceTextContent(get$4(content2));!text2||!$$props.resource||downloadResourceContent(text2,$$props.resource.mimeType||MimeTypeText.PLAIN,$$props.resource.name||"resource.txt")}var div=root$b(),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$6(),node_1=child(div_1);File_text(node_1,{class:"h-8 w-8 opacity-50"}),next$1(2),reset(div_1),append($$anchor2,div_1)},alternate_3=$$anchor2=>{var fragment=root_2$8(), -div_2=first_child(fragment),div_3=child(div_2),h3=child(div_3),text_1=child(h3,!0);reset(h3);var p2=sibling(h3,2),text_2=child(p2,!0);reset(p2);var node_2=sibling(p2,2);{var consequent_1=$$anchor3=>{var p_1=root_3$4(),text_3=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text_3,$$props.resource.description)),append($$anchor3,p_1)};if_block(node_2,$$render=>{$$props.resource.description&&$$render(consequent_1)})}reset(div_3);var div_4=sibling(div_3,2),node_3=child(div_4);{let $0=user_derived( -()=>getResourceTextContent(get$4(content2))),$1=user_derived(()=>!get$4(isLoading2)&&!!getResourceTextContent(get$4(content2)));ActionIconCopyToClipboard(node_3,{get text(){return get$4($0)},get canCopy(){return get$4($1)},ariaLabel:"Copy content"})}var node_4=sibling(node_3,2);{let $0=user_derived(()=>get$4(isLoading2)||!getResourceTextContent(get$4(content2)));Button(node_4,{variant:"ghost",size:"sm",class:"h-7 w-7 p-0",onclick:handleDownload,get disabled(){return get$4($0)},title:"Download co\ -ntent",children:($$anchor3,$$slotProps)=>{Download($$anchor3,{class:"h-3.5 w-3.5"})},$$slots:{default:!0}})}reset(div_4),reset(div_2);var div_5=sibling(div_2,2),node_5=child(div_5);{var consequent_2=$$anchor3=>{var div_6=root_5$5(),node_6=child(div_6);Loader_circle(node_6,{class:"h-6 w-6 animate-spin text-muted-foreground"}),reset(div_6),append($$anchor3,div_6)},alternate_2=$$anchor3=>{var fragment_2=comment$2(),node_7=first_child(fragment_2);{var consequent_3=$$anchor4=>{var div_7=root_7$4(),node_8=child( -div_7);Circle_alert(node_8,{class:"h-6 w-6"});var span=sibling(node_8,2),text_4=child(span,!0);reset(span),reset(div_7),template_effect(()=>set_text(text_4,get$4(error2))),append($$anchor4,div_7)},alternate_1=$$anchor4=>{var fragment_3=comment$2(),node_9=first_child(fragment_3);{var consequent_7=$$anchor5=>{const textContent=user_derived(()=>getResourceTextContent(get$4(content2))),blobContent=user_derived(()=>getResourceBlobContent(get$4(content2)));var fragment_4=root_9$4(),node_10=first_child( -fragment_4);{var consequent_4=$$anchor6=>{var pre=root_10$4(),text_5=child(pre,!0);reset(pre),template_effect(()=>set_text(text_5,get$4(textContent))),append($$anchor6,pre)};if_block(node_10,$$render=>{get$4(textContent)&&$$render(consequent_4)})}var node_11=sibling(node_10,2);each(node_11,17,()=>get$4(blobContent),blob=>blob.uri,($$anchor6,blob)=>{var fragment_5=comment$2(),node_12=first_child(fragment_5);{var consequent_5=$$anchor7=>{var img=root_12$1();template_effect($0=>set_attribute(img,"s\ -rc",$0),[()=>createBase64DataUrl(get$4(blob).mimeType??MimeTypeApplication.OCTET_STREAM,get$4(blob).blob)]),append($$anchor7,img)},alternate=$$anchor7=>{var div_8=root_13$3(),node_13=child(div_8);File_text(node_13,{class:"h-4 w-4"});var span_1=sibling(node_13,2),text_6=child(span_1);reset(span_1),reset(div_8),template_effect(()=>set_text(text_6,`Binary content (${get$4(blob).mimeType||"unknown type"})`)),append($$anchor7,div_8)};if_block(node_12,$$render=>{isImageMimeType(get$4(blob).mimeType??MimeTypeApplication. -OCTET_STREAM)?$$render(consequent_5):$$render(alternate,!1)})}append($$anchor6,fragment_5)});var node_14=sibling(node_11,2);{var consequent_6=$$anchor6=>{var div_9=root_14$2();append($$anchor6,div_9)};if_block(node_14,$$render=>{!get$4(textContent)&&get$4(blobContent).length===0&&$$render(consequent_6)})}append($$anchor5,fragment_4)};if_block(node_9,$$render=>{get$4(content2)&&$$render(consequent_7)},!0)}append($$anchor4,fragment_3)};if_block(node_7,$$render=>{get$4(error2)?$$render(consequent_3): -$$render(alternate_1,!1)},!0)}append($$anchor3,fragment_2)};if_block(node_5,$$render=>{get$4(isLoading2)?$$render(consequent_2):$$render(alternate_2,!1)})}reset(div_5);var node_15=sibling(div_5,2);{var consequent_10=$$anchor3=>{var div_10=root_15$1(),node_16=child(div_10);{var consequent_8=$$anchor4=>{var span_2=root_16(),text_7=child(span_2,!0);reset(span_2),template_effect(()=>set_text(text_7,$$props.resource.mimeType)),append($$anchor4,span_2)};if_block(node_16,$$render=>{$$props.resource.mimeType&& -$$render(consequent_8)})}var node_17=sibling(node_16,2);{var consequent_9=$$anchor4=>{var span_3=root_17(),text_8=child(span_3);reset(span_3),template_effect(()=>set_text(text_8,`Priority: ${$$props.resource.annotations.priority??""}`)),append($$anchor4,span_3)};if_block(node_17,$$render=>{$$props.resource.annotations?.priority!==void 0&&$$render(consequent_9)})}var span_4=sibling(node_17,2),text_9=child(span_4);reset(span_4),reset(div_10),template_effect(()=>set_text(text_9,`Server: ${$$props.resource. -serverName??""}`)),append($$anchor3,div_10)};if_block(node_15,$$render=>{($$props.resource.mimeType||$$props.resource.annotations)&&$$render(consequent_10)})}template_effect(()=>{set_text(text_1,$$props.resource.title||$$props.resource.name),set_text(text_2,$$props.resource.uri)}),append($$anchor2,fragment)};if_block(node2,$$render=>{$$props.resource?$$render(alternate_3,!1):$$render(consequent)})}reset(div),template_effect($0=>set_class(div,1,$0),[()=>clsx(cn$1("flex flex-col gap-3",$$props.class))]), -append($$anchor,div),pop()}var root_2$7=from_html('<div class="rounded-md bg-muted/50 px-3 py-2"><p class="text-xs text-muted-foreground">Resolved URI:</p> <p class="mt-0.5 font-mono text-xs break-all"> </p></div>'),root$a=from_html('<form class="space-y-3"><!> <!> <div class="flex justify-end gap-2 pt-1"><!> <!></div></form>');function McpResourceTemplateForm($$anchor,$$props){push$1($$props,!0);const variables=user_derived(()=>extractTemplateVariables($$props.template.uriTemplate));let values=proxy( -{}),suggestions=proxy({}),loadingSuggestions=proxy({}),activeAutocomplete=state$1(null),autocompleteIndex=state$1(0);const expandedUri=user_derived(()=>expandTemplate($$props.template.uriTemplate,values)),isComplete=user_derived(()=>isTemplateComplete($$props.template.uriTemplate,values)),fetchCompletions=debounce(async(argName,value)=>{if(value.length<1){suggestions[argName]=[];return}loadingSuggestions[argName]=!0;try{const result=await mcpStore.getResourceCompletions($$props.template.serverName, -$$props.template.uriTemplate,argName,value);if(result&&result.values.length>0){const filteredValues=result.values.filter(v=>v.trim()!=="");filteredValues.length>0?(suggestions[argName]=filteredValues,set$1(activeAutocomplete,argName,!0),set$1(autocompleteIndex,0)):suggestions[argName]=[]}else suggestions[argName]=[]}catch(error2){console.error("[McpResourceTemplateForm] Failed to fetch completions:",error2),suggestions[argName]=[]}finally{loadingSuggestions[argName]=!1}},200);function handleArgInput(argName,value){ -values[argName]=value,fetchCompletions(argName,value)}function selectSuggestion(argName,value){values[argName]=value,suggestions[argName]=[],set$1(activeAutocomplete,null)}function handleArgKeydown(event2,argName){const argSuggestions=suggestions[argName]??[];if(event2.key===KeyboardKey.ESCAPE){event2.preventDefault(),event2.stopPropagation(),argSuggestions.length>0&&get$4(activeAutocomplete)===argName?(suggestions[argName]=[],set$1(activeAutocomplete,null)):$$props.onCancel();return}argSuggestions. -length===0||get$4(activeAutocomplete)!==argName||(event2.key===KeyboardKey.ARROW_DOWN?(event2.preventDefault(),set$1(autocompleteIndex,Math.min(get$4(autocompleteIndex)+1,argSuggestions.length-1),!0)):event2.key===KeyboardKey.ARROW_UP?(event2.preventDefault(),set$1(autocompleteIndex,Math.max(get$4(autocompleteIndex)-1,0),!0)):event2.key===KeyboardKey.ENTER&&argSuggestions[get$4(autocompleteIndex)]&&(event2.preventDefault(),event2.stopPropagation(),selectSuggestion(argName,argSuggestions[get$4(autocompleteIndex)])))} -function handleArgBlur(argName){setTimeout(()=>{get$4(activeAutocomplete)===argName&&(suggestions[argName]=[],set$1(activeAutocomplete,null))},150)}function handleArgFocus(argName){const value=values[argName]??"";value.length>=MIN_AUTOCOMPLETE_INPUT_LENGTH&&fetchCompletions(argName,value)}function handleSubmit(event2){event2.preventDefault(),get$4(isComplete)&&$$props.onResolve(get$4(expandedUri),$$props.template.serverName)}var form=root$a(),node2=child(form);each(node2,17,()=>get$4(variables), -variable=>variable.name,($$anchor2,variable)=>{{let $0=user_derived(()=>values[get$4(variable).name]??""),$1=user_derived(()=>suggestions[get$4(variable).name]??[]),$2=user_derived(()=>loadingSuggestions[get$4(variable).name]??!1),$3=user_derived(()=>get$4(activeAutocomplete)===get$4(variable).name),$4=user_derived(()=>get$4(activeAutocomplete)===get$4(variable).name?get$4(autocompleteIndex):0);InputWithSuggestions($$anchor2,{get name(){return get$4(variable).name},get value(){return get$4($0)}, -get suggestions(){return get$4($1)},get isLoadingSuggestions(){return get$4($2)},get isAutocompleteActive(){return get$4($3)},get autocompleteIndex(){return get$4($4)},onInput:value=>handleArgInput(get$4(variable).name,value),onKeydown:e=>handleArgKeydown(e,get$4(variable).name),onBlur:()=>handleArgBlur(get$4(variable).name),onFocus:()=>handleArgFocus(get$4(variable).name),onSelectSuggestion:value=>selectSuggestion(get$4(variable).name,value)})}});var node_1=sibling(node2,2);{var consequent=$$anchor2=>{ -var div=root_2$7(),p2=sibling(child(div),2),text2=child(p2,!0);reset(p2),reset(div),template_effect(()=>set_text(text2,get$4(expandedUri))),append($$anchor2,div)};if_block(node_1,$$render=>{get$4(isComplete)&&$$render(consequent)})}var div_1=sibling(node_1,2),node_2=child(div_1);Button(node_2,{type:"button",size:"sm",variant:"secondary",get onclick(){return $$props.onCancel},children:($$anchor2,$$slotProps)=>{next$1();var text_1=text$8("Cancel");append($$anchor2,text_1)},$$slots:{default:!0}});var node_3=sibling( -node_2,2);{let $0=user_derived(()=>!get$4(isComplete));Button(node_3,{size:"sm",type:"submit",get disabled(){return get$4($0)},children:($$anchor2,$$slotProps)=>{next$1();var text_2=text$8("Read Resource");append($$anchor2,text_2)},$$slots:{default:!0}})}reset(div_1),reset(form),event("submit",form,handleSubmit),append($$anchor,form),pop()}function filterModelOptions(options,searchTerm){const term=searchTerm.trim().toLowerCase();return term?options.filter(option2=>option2.model.toLowerCase().includes( -term)||option2.name?.toLowerCase().includes(term)||option2.aliases?.some(alias=>alias.toLowerCase().includes(term))||option2.tags?.some(tag=>tag.toLowerCase().includes(term))):options}function groupModelOptions(filteredOptions,favoriteIds,isModelLoaded){const loaded=[];for(let i=0;i<filteredOptions.length;i++)isModelLoaded(filteredOptions[i].model)&&loaded.push({option:filteredOptions[i],flatIndex:i});const loadedModelIds=new Set(loaded.map(item=>item.option.model)),favorites=[];for(let i=0;i<filteredOptions. -length;i++)favoriteIds.has(filteredOptions[i].model)&&!loadedModelIds.has(filteredOptions[i].model)&&favorites.push({option:filteredOptions[i],flatIndex:i});const available=[],orgGroups=new SvelteMap;for(let i=0;i<filteredOptions.length;i++){const option2=filteredOptions[i];if(loadedModelIds.has(option2.model)||favoriteIds.has(option2.model))continue;const key2=option2.parsedId?.orgName??"";orgGroups.has(key2)||orgGroups.set(key2,[]),orgGroups.get(key2).push({option:option2,flatIndex:i})}for(const[ -orgName,items2]of orgGroups)available.push({orgName:orgName||null,items:items2});return{loaded,favorites,available}}var root_1$5=from_html('<div class="flex items-center gap-2 text-xs text-muted-foreground"><!> Loading models…</div>'),root_4$2=from_html('<span style="max-width: min(calc(100cqw - 9rem), 20rem)"><!> <!></span>'),root_5$4=from_html('<p class="text-xs text-muted-foreground">No models available.</p>'),root_13$2=from_html('<p class="font-mono"> </p>'),root_11$2=from_html("<!> <!>",1), -root_14$1=from_html('<span class="min-w-0 font-medium">Select model</span>'),root_9$3=from_html("<!> <!> <!>",1),root_20$1=from_html('<button type="button" class="flex w-full cursor-not-allowed items-center bg-red-400/10 p-2 text-left text-sm text-red-400" role="option" aria-selected="true" aria-disabled="true" disabled><!> <span class="ml-2 text-xs whitespace-nowrap opacity-70">(not available)</span></button>'),root_21$1=from_html('<p class="px-4 py-3 text-sm text-muted-foreground">No models fo\ -und.</p>'),root_18$1=from_html('<div class="models-list"><!> <!> <!></div>'),root_8$3=from_html("<!> <!>",1),root_26=from_html('<p class="font-mono"> </p>'),root_24=from_html("<!> <!>",1),root_22$1=from_html('<button style="max-width: min(calc(100cqw - 6.5rem), 32rem)"><!> <!> <!></button>'),root$9=from_html("<div><!></div> <!>",1);function ModelsSelector($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),currentModel=prop($$props,"currentModel",3,null),disabled=prop($$props, -"disabled",3,!1),forceForegroundText=prop($$props,"forceForegroundText",3,!1),useGlobalSelection=prop($$props,"useGlobalSelection",3,!1),options=user_derived(()=>modelOptions().filter(option2=>modelsStore.getModelProps(option2.model)?.webui!==!1)),loading=user_derived(modelsLoading),updating=user_derived(modelsUpdating),activeId=user_derived(selectedModelId),isRouter=user_derived(isRouterMode),serverModel=user_derived(singleModelName),isHighlightedCurrentModelActive=user_derived(()=>{if(!get$4(isRouter)|| -!currentModel())return!1;const currentOption=get$4(options).find(option2=>option2.model===currentModel());return currentOption?currentOption.id===get$4(activeId):!1}),isCurrentModelInCache=user_derived(()=>!get$4(isRouter)||!currentModel()?!0:get$4(options).some(option2=>option2.model===currentModel())),isLoadingModel=state$1(!1),searchTerm=state$1(""),highlightedIndex=state$1(-1),filteredOptions=user_derived(()=>filterModelOptions(get$4(options),get$4(searchTerm))),groupedFilteredOptions=user_derived( -()=>groupModelOptions(get$4(filteredOptions),modelsStore.favoriteModelIds,m=>modelsStore.isModelLoaded(m)));user_effect(()=>{get$4(searchTerm),set$1(highlightedIndex,-1)});let isOpen=state$1(!1),showModelDialog=state$1(!1),infoModelId=state$1(null);function handleInfoClick(modelName){set$1(infoModelId,modelName,!0),set$1(showModelDialog,!0)}onMount$1(()=>{modelsStore.fetch().catch(error2=>{console.error("Unable to load models:",error2)})});function handleOpenChange(open3){get$4(loading)||get$4(updating)|| -(get$4(isRouter)?open3?(set$1(isOpen,!0),set$1(searchTerm,""),set$1(highlightedIndex,-1),modelsStore.fetchRouterModels().then(()=>{modelsStore.fetchModalitiesForLoadedModels()})):(set$1(isOpen,!1),set$1(searchTerm,""),set$1(highlightedIndex,-1)):set$1(showModelDialog,open3,!0))}function open2(){handleOpenChange(!0)}function handleSearchKeyDown(event2){if(!event2.isComposing){if(event2.key===KeyboardKey.ARROW_DOWN){if(event2.preventDefault(),get$4(filteredOptions).length===0)return;get$4(highlightedIndex)=== --1||get$4(highlightedIndex)===get$4(filteredOptions).length-1?set$1(highlightedIndex,0):set$1(highlightedIndex,get$4(highlightedIndex)+1)}else if(event2.key===KeyboardKey.ARROW_UP){if(event2.preventDefault(),get$4(filteredOptions).length===0)return;get$4(highlightedIndex)===-1||get$4(highlightedIndex)===0?set$1(highlightedIndex,get$4(filteredOptions).length-1):set$1(highlightedIndex,get$4(highlightedIndex)-1)}else if(event2.key===KeyboardKey.ENTER)if(event2.preventDefault(),get$4(highlightedIndex)>= -0&&get$4(highlightedIndex)<get$4(filteredOptions).length){const option2=get$4(filteredOptions)[get$4(highlightedIndex)];handleSelect(option2.id)}else get$4(filteredOptions).length>0&&set$1(highlightedIndex,0)}}async function handleSelect(modelId){const option2=get$4(options).find(opt=>opt.id===modelId);if(!option2)return;let shouldCloseMenu=!0;$$props.onModelChange?await $$props.onModelChange(option2.id,option2.model)===!1&&(shouldCloseMenu=!1):await modelsStore.selectModelById(option2.id),shouldCloseMenu&& -(handleOpenChange(!1),requestAnimationFrame(()=>{document.querySelector('[data-slot="chat-form"] textarea')?.focus()})),!$$props.onModelChange&&get$4(isRouter)&&!modelsStore.isModelLoaded(option2.model)&&(set$1(isLoadingModel,!0),modelsStore.loadModel(option2.model).catch(error2=>console.error("Failed to load model:",error2)).finally(()=>set$1(isLoadingModel,!1)))}function getDisplayOption(){if(!get$4(isRouter)){const displayModel=get$4(serverModel)||currentModel();return displayModel?{id:get$4( -serverModel)?"current":"offline-current",model:displayModel,name:displayModel.split("/").pop()||displayModel,capabilities:[]}:void 0}if(useGlobalSelection()&&get$4(activeId)){const selected=get$4(options).find(option2=>option2.id===get$4(activeId));if(selected)return selected}if(currentModel())return get$4(isCurrentModelInCache)?get$4(options).find(option2=>option2.model===currentModel()):{id:"not-in-cache",model:currentModel(),name:currentModel().split("/").pop()||currentModel(),capabilities:[]}; -if(get$4(activeId))return get$4(options).find(option2=>option2.id===get$4(activeId))}var $$exports={open:open2},fragment=root$9(),div=first_child(fragment),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$5(),node_1=child(div_1);Loader_circle(node_1,{class:"h-3.5 w-3.5 animate-spin"}),next$1(),reset(div_1),append($$anchor2,div_1)},alternate_5=$$anchor2=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);{var consequent_2=$$anchor3=>{var fragment_2=comment$2(),node_3=first_child( -fragment_2);{var consequent_1=$$anchor4=>{var span=root_4$2(),node_4=child(span);Package(node_4,{class:"h-3.5 w-3.5"});var node_5=sibling(node_4,2);ModelId(node_5,{get modelId(){return currentModel()},class:"min-w-0",showOrgName:!0}),reset(span),template_effect($0=>set_class(span,1,$0),[()=>clsx(cn$1("inline-flex items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs text-muted-foreground",className()))]),append($$anchor4,span)},alternate=$$anchor4=>{var p2=root_5$4();append( -$$anchor4,p2)};if_block(node_3,$$render=>{currentModel()?$$render(consequent_1):$$render(alternate,!1)})}append($$anchor3,fragment_2)},alternate_4=$$anchor3=>{const selectedOption=user_derived(getDisplayOption);var fragment_3=comment$2(),node_6=first_child(fragment_3);{var consequent_7=$$anchor4=>{var fragment_4=comment$2(),node_7=first_child(fragment_4);component(node_7,()=>Root$2,($$anchor5,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor5,{onOpenChange:handleOpenChange,get open(){return get$4( -isOpen)},set open($$value){set$1(isOpen,$$value,!0)},children:($$anchor6,$$slotProps)=>{var fragment_5=root_8$3(),node_8=first_child(fragment_5);{let $0=user_derived(()=>cn$1("inline-grid cursor-pointer grid-cols-[1fr_auto_1fr] items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60",get$4(isCurrentModelInCache)? -forceForegroundText()||get$4(isHighlightedCurrentModelActive)?"text-foreground":"text-muted-foreground":"bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400",get$4(isOpen)?"text-foreground":"")),$1=user_derived(()=>disabled()||get$4(updating));component(node_8,()=>Dropdown_menu_trigger,($$anchor7,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor7,{get class(){return get$4($0)},style:"max-width: min(calc(100cqw - 9rem), 20rem)",get disabled(){return get$4($1)},children:($$anchor8,$$slotProps2)=>{ -var fragment_6=root_9$3(),node_9=first_child(fragment_6);Package(node_9,{class:"h-3.5 w-3.5"});var node_10=sibling(node_9,2);{var consequent_3=$$anchor9=>{var fragment_7=comment$2(),node_11=first_child(fragment_7);component(node_11,()=>Root$5,($$anchor10,Tooltip_Root)=>{Tooltip_Root($$anchor10,{children:($$anchor11,$$slotProps3)=>{var fragment_8=root_11$2(),node_12=first_child(fragment_8);{const child2=($$anchor12,$$arg0)=>{ModelId($$anchor12,spread_props({get modelId(){return get$4(selectedOption). -model},class:"min-w-0 overflow-hidden",showOrgName:!0},()=>$$arg0?.().props))};component(node_12,()=>Tooltip_trigger,($$anchor12,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor12,{child:child2,$$slots:{child:!0}})})}var node_13=sibling(node_12,2);component(node_13,()=>Tooltip_content,($$anchor12,Tooltip_Content)=>{Tooltip_Content($$anchor12,{children:($$anchor13,$$slotProps4)=>{var p_1=root_13$2(),text2=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text2,get$4(selectedOption).model)),append( -$$anchor13,p_1)},$$slots:{default:!0}})}),append($$anchor11,fragment_8)},$$slots:{default:!0}})}),append($$anchor9,fragment_7)},alternate_1=$$anchor9=>{var span_1=root_14$1();append($$anchor9,span_1)};if_block(node_10,$$render=>{get$4(selectedOption)?$$render(consequent_3):$$render(alternate_1,!1)})}var node_14=sibling(node_10,2);{var consequent_4=$$anchor9=>{Loader_circle($$anchor9,{class:"h-3 w-3.5 animate-spin"})},alternate_2=$$anchor9=>{Chevron_down($$anchor9,{class:"h-3 w-3.5"})};if_block(node_14, -$$render=>{get$4(updating)||get$4(isLoadingModel)?$$render(consequent_4):$$render(alternate_2,!1)})}append($$anchor8,fragment_6)},$$slots:{default:!0}})})}var node_15=sibling(node_8,2);component(node_15,()=>Dropdown_menu_content,($$anchor7,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor7,{align:"end",class:"w-full max-w-[100vw] pt-0 sm:w-max sm:max-w-[calc(100vw-2rem)]",children:($$anchor8,$$slotProps2)=>{{let $0=user_derived(()=>get$4(filteredOptions).length===0&&get$4(isCurrentModelInCache)); -DropdownMenuSearchable($$anchor8,{placeholder:"Search models...",onSearchKeyDown:handleSearchKeyDown,emptyMessage:"No models found.",get isEmpty(){return get$4($0)},get searchValue(){return get$4(searchTerm)},set searchValue($$value){set$1(searchTerm,$$value,!0)},children:($$anchor9,$$slotProps3)=>{var div_2=root_18$1();{const modelOption=($$anchor10,item=noop$3,showOrgName=noop$3)=>{const computed_const=user_derived(()=>{const{option:option2,flatIndex}=item();return{option:option2,flatIndex}}), -isSelected=user_derived(()=>currentModel()===get$4(computed_const).option.model||get$4(activeId)===get$4(computed_const).option.id),isHighlighted=user_derived(()=>get$4(computed_const).flatIndex===get$4(highlightedIndex)),isFav=user_derived(()=>modelsStore.favoriteModelIds.has(get$4(computed_const).option.model));ModelsSelectorOption($$anchor10,{get option(){return get$4(computed_const).option},get isSelected(){return get$4(isSelected)},get isHighlighted(){return get$4(isHighlighted)},get isFav(){ -return get$4(isFav)},get showOrgName(){return showOrgName()},onSelect:handleSelect,onInfoClick:handleInfoClick,onMouseEnter:()=>set$1(highlightedIndex,get$4(computed_const).flatIndex,!0),onKeyDown:e=>{(e.key===KeyboardKey.ENTER||e.key===KeyboardKey.SPACE)&&(e.preventDefault(),handleSelect(get$4(computed_const).option.id))}})};var node_16=child(div_2);{var consequent_5=$$anchor10=>{var button=root_20$1(),node_17=child(button);ModelId(node_17,{get modelId(){return currentModel()},class:"flex-1",showOrgName:!0}), -next$1(2),reset(button),append($$anchor10,button)};if_block(node_16,$$render=>{!get$4(isCurrentModelInCache)&¤tModel()&&$$render(consequent_5)})}var node_18=sibling(node_16,2);{var consequent_6=$$anchor10=>{var p_2=root_21$1();append($$anchor10,p_2)};if_block(node_18,$$render=>{get$4(filteredOptions).length===0&&$$render(consequent_6)})}var node_19=sibling(node_18,2);ModelsSelectorList(node_19,{get groups(){return get$4(groupedFilteredOptions)},get currentModel(){return currentModel()},get activeId(){ -return get$4(activeId)},sectionHeaderClass:"my-1.5 px-2 py-2 text-[13px] font-semibold text-muted-foreground/70 select-none",onSelect:handleSelect,onInfoClick:handleInfoClick,get renderOption(){return modelOption}}),reset(div_2)}append($$anchor9,div_2)},$$slots:{default:!0}})}},$$slots:{default:!0}})}),append($$anchor6,fragment_5)},$$slots:{default:!0}})}),append($$anchor4,fragment_4)},alternate_3=$$anchor4=>{var button_1=root_22$1();button_1.__click=()=>handleOpenChange(!0);var node_20=child(button_1); -Package(node_20,{class:"h-3.5 w-3.5"});var node_21=sibling(node_20,2);{var consequent_8=$$anchor5=>{var fragment_14=comment$2(),node_22=first_child(fragment_14);component(node_22,()=>Root$5,($$anchor6,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor6,{children:($$anchor7,$$slotProps)=>{var fragment_15=root_24(),node_23=first_child(fragment_15);{const child2=($$anchor8,$$arg0)=>{ModelId($$anchor8,spread_props({get modelId(){return get$4(selectedOption).model},class:"min-w-0 overflow-hidden",showOrgName:!0}, -()=>$$arg0?.().props))};component(node_23,()=>Tooltip_trigger,($$anchor8,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor8,{child:child2,$$slots:{child:!0}})})}var node_24=sibling(node_23,2);component(node_24,()=>Tooltip_content,($$anchor8,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor8,{children:($$anchor9,$$slotProps2)=>{var p_3=root_26(),text_1=child(p_3,!0);reset(p_3),template_effect(()=>set_text(text_1,get$4(selectedOption).model)),append($$anchor9,p_3)},$$slots:{default:!0}})}),append($$anchor7, -fragment_15)},$$slots:{default:!0}})}),append($$anchor5,fragment_14)};if_block(node_21,$$render=>{get$4(selectedOption)&&$$render(consequent_8)})}var node_25=sibling(node_21,2);{var consequent_9=$$anchor5=>{Loader_circle($$anchor5,{class:"h-3 w-3.5 animate-spin"})};if_block(node_25,$$render=>{get$4(updating)&&$$render(consequent_9)})}reset(button_1),template_effect($0=>{set_class(button_1,1,$0),button_1.disabled=disabled()||get$4(updating)},[()=>clsx(cn$1("inline-flex cursor-pointer items-center\ - gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60",get$4(isCurrentModelInCache)?forceForegroundText()||get$4(isHighlightedCurrentModelActive)?"text-foreground":"text-muted-foreground":"bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400",get$4(isOpen)?"text-foreground":""))]),append($$anchor4,button_1)}; -if_block(node_6,$$render=>{get$4(isRouter)?$$render(consequent_7):$$render(alternate_3,!1)})}append($$anchor3,fragment_3)};if_block(node_2,$$render=>{get$4(options).length===0&&get$4(isRouter)?$$render(consequent_2):$$render(alternate_4,!1)},!0)}append($$anchor2,fragment_1)};if_block(node2,$$render=>{get$4(loading)&&get$4(options).length===0&&get$4(isRouter)?$$render(consequent):$$render(alternate_5,!1)})}reset(div);var node_26=sibling(div,2);{var consequent_10=$$anchor2=>{DialogModelInformation( -$$anchor2,{get modelId(){return get$4(infoModelId)},get open(){return get$4(showModelDialog)},set open($$value){set$1(showModelDialog,$$value,!0)}})};if_block(node_26,$$render=>{get$4(showModelDialog)&&$$render(consequent_10)})}return template_effect($0=>set_class(div,1,$0),[()=>clsx(cn$1("relative inline-flex flex-col items-end gap-1",className()))]),append($$anchor,fragment),pop($$exports)}delegate(["click"]);var root_2$6=from_html("<p>Loaded models</p> <!>",1),root_4$1=from_html("<p>Favorite \ -models</p> <!>",1),root_8$2=from_html("<p> </p>"),root_7$3=from_html("<!> <!>",1),root_6$3=from_html("<p>Available models</p> <!>",1),root$8=from_html("<!> <!> <!>",1);function ModelsSelectorList($$anchor,$$props){push$1($$props,!0);const defaultOption=($$anchor2,item=noop$3,showOrgName=noop$3)=>{const computed_const=user_derived(()=>{const{option:option2}=item();return{option:option2}}),isSelected=user_derived(()=>$$props.currentModel===get$4(computed_const).option.model||$$props.activeId===get$4( -computed_const).option.id),isFav=user_derived(()=>modelsStore.favoriteModelIds.has(get$4(computed_const).option.model));ModelsSelectorOption($$anchor2,{get option(){return get$4(computed_const).option},get isSelected(){return get$4(isSelected)},isHighlighted:!1,get isFav(){return get$4(isFav)},get showOrgName(){return showOrgName()},get onSelect(){return $$props.onSelect},get onInfoClick(){return $$props.onInfoClick},onMouseEnter:()=>{},onKeyDown:()=>{}})};let sectionHeaderClass=prop($$props,"se\ -ctionHeaderClass",3,"my-1 px-2 py-2 text-[13px] font-semibold text-muted-foreground/70 select-none"),orgHeaderClass=prop($$props,"orgHeaderClass",3,"px-2 py-2 text-[11px] font-semibold text-muted-foreground/50 select-none [&:not(:first-child)]:mt-1"),render3=user_derived(()=>$$props.renderOption??defaultOption);var fragment_1=root$8(),node2=first_child(fragment_1);{var consequent=$$anchor2=>{var fragment_2=root_2$6(),p2=first_child(fragment_2),node_1=sibling(p2,2);each(node_1,17,()=>$$props.groups. -loaded,item=>`loaded-${item.option.id}`,($$anchor3,item)=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);snippet(node_2,()=>get$4(render3),()=>get$4(item),()=>!0),append($$anchor3,fragment_3)}),template_effect(()=>set_class(p2,1,clsx(sectionHeaderClass()))),append($$anchor2,fragment_2)};if_block(node2,$$render=>{$$props.groups.loaded.length>0&&$$render(consequent)})}var node_3=sibling(node2,2);{var consequent_1=$$anchor2=>{var fragment_4=root_4$1(),p_1=first_child(fragment_4),node_4=sibling( -p_1,2);each(node_4,17,()=>$$props.groups.favorites,item=>`fav-${item.option.id}`,($$anchor3,item)=>{var fragment_5=comment$2(),node_5=first_child(fragment_5);snippet(node_5,()=>get$4(render3),()=>get$4(item),()=>!0),append($$anchor3,fragment_5)}),template_effect(()=>set_class(p_1,1,clsx(sectionHeaderClass()))),append($$anchor2,fragment_4)};if_block(node_3,$$render=>{$$props.groups.favorites.length>0&&$$render(consequent_1)})}var node_6=sibling(node_3,2);{var consequent_3=$$anchor2=>{var fragment_6=root_6$3(), -p_2=first_child(fragment_6),node_7=sibling(p_2,2);each(node_7,17,()=>$$props.groups.available,group=>group.orgName,($$anchor3,group)=>{var fragment_7=root_7$3(),node_8=first_child(fragment_7);{var consequent_2=$$anchor4=>{var p_3=root_8$2(),text2=child(p_3,!0);reset(p_3),template_effect(()=>{set_class(p_3,1,clsx(orgHeaderClass())),set_text(text2,get$4(group).orgName)}),append($$anchor4,p_3)};if_block(node_8,$$render=>{get$4(group).orgName&&$$render(consequent_2)})}var node_9=sibling(node_8,2);each( -node_9,17,()=>get$4(group).items,item=>item.option.id,($$anchor4,item)=>{var fragment_8=comment$2(),node_10=first_child(fragment_8);snippet(node_10,()=>get$4(render3),()=>get$4(item),()=>!1),append($$anchor4,fragment_8)}),append($$anchor3,fragment_7)}),template_effect(()=>set_class(p_2,1,clsx(sectionHeaderClass()))),append($$anchor2,fragment_6)};if_block(node_6,$$render=>{$$props.groups.available.length>0&&$$render(consequent_3)})}append($$anchor,fragment_1),pop()}var root_6$2=from_html('<div cl\ -ass="flex w-4 items-center justify-center"><!> <div class="hidden group-hover:flex"><!></div></div>'),root_8$1=from_html('<div class="flex w-4 items-center justify-center"><span class="h-2 w-2 rounded-full bg-orange-400 group-hover:hidden"></span> <div class="hidden group-hover:flex"><!></div></div>'),root_10$3=from_html('<div class="flex w-4 items-center justify-center"><span class="h-2 w-2 rounded-full bg-green-500 group-hover:hidden"></span> <div class="hidden group-hover:flex"><!></div></d\ -iv>'),root_11$1=from_html('<div class="flex w-4 items-center justify-center"><span class="h-2 w-2 rounded-full bg-muted-foreground/50 group-hover:hidden"></span> <div class="hidden group-hover:flex"><!></div></div>'),root$7=from_html('<div role="option" tabindex="0"><!> <div class="flex shrink-0 items-center gap-1"><div class="pointer-events-none flex items-center justify-center gap-0.75 pl-2 opacity-0 group-hover:pointer-events-auto group-hover:opacity-100"><!> <!></div> <!></div></div>');function ModelsSelectorOption($$anchor,$$props){ -push$1($$props,!0);let showOrgName=prop($$props,"showOrgName",3,!1),currentRouterModels=user_derived(routerModels),serverStatus=user_derived(()=>get$4(currentRouterModels).find(m=>m.id===$$props.option.model)?.status?.value??null),isOperationInProgress=user_derived(()=>modelsStore.isModelOperationInProgress($$props.option.model)),isFailed=user_derived(()=>get$4(serverStatus)===ServerModelStatus.FAILED),isSleeping=user_derived(()=>get$4(serverStatus)===ServerModelStatus.SLEEPING),isLoaded=user_derived( -()=>(get$4(serverStatus)===ServerModelStatus.LOADED||get$4(isSleeping))&&!get$4(isOperationInProgress)),isLoading2=user_derived(()=>get$4(serverStatus)===ServerModelStatus.LOADING||get$4(isOperationInProgress));var div=root$7();div.__click=()=>$$props.onSelect($$props.option.id),div.__keydown=function(...$$args){$$props.onKeyDown?.apply(this,$$args)};var node2=child(div);ModelId(node2,{get modelId(){return $$props.option.model},get showOrgName(){return showOrgName()},get aliases(){return $$props. -option.aliases},get tags(){return $$props.option.tags},class:"flex-1"});var div_1=sibling(node2,2),div_2=child(div_1);div_2.__click=e=>e.stopPropagation();var node_1=child(div_2);{var consequent=$$anchor2=>{ActionIcon($$anchor2,{iconSize:"h-2.5 w-2.5",get icon(){return Heart_off},tooltip:"Remove from favorites",class:"h-3 w-3 hover:text-foreground",onclick:()=>modelsStore.toggleFavorite($$props.option.model)})},alternate=$$anchor2=>{ActionIcon($$anchor2,{iconSize:"h-2.5 w-2.5",get icon(){return Heart}, -tooltip:"Add to favorites",class:"h-3 w-3 hover:text-foreground",onclick:()=>modelsStore.toggleFavorite($$props.option.model)})};if_block(node_1,$$render=>{$$props.isFav?$$render(consequent):$$render(alternate,!1)})}var node_2=sibling(node_1,2);{var consequent_1=$$anchor2=>{ActionIcon($$anchor2,{iconSize:"h-2.5 w-2.5",get icon(){return Info$1},tooltip:"Model information",class:"h-3 w-3 hover:text-foreground",onclick:()=>$$props.onInfoClick($$props.option.model)})};if_block(node_2,$$render=>{get$4( -isLoaded)&&$$props.onInfoClick&&$$render(consequent_1)})}reset(div_2);var node_3=sibling(div_2,2);{var consequent_2=$$anchor2=>{Loader_circle($$anchor2,{class:"h-4 w-4 animate-spin text-muted-foreground"})},alternate_4=$$anchor2=>{var fragment_4=comment$2(),node_4=first_child(fragment_4);{var consequent_3=$$anchor3=>{var div_3=root_6$2(),node_5=child(div_3);Circle_alert(node_5,{class:"h-3.5 w-3.5 text-red-500 group-hover:hidden"});var div_4=sibling(node_5,2);div_4.__click=e=>e.stopPropagation(); -var node_6=child(div_4);ActionIcon(node_6,{iconSize:"h-2.5 w-2.5",get icon(){return Rotate_cw},tooltip:"Retry loading model",class:"h-3 w-3 text-red-500 hover:text-foreground",onclick:()=>modelsStore.loadModel($$props.option.model)}),reset(div_4),reset(div_3),append($$anchor3,div_3)},alternate_3=$$anchor3=>{var fragment_5=comment$2(),node_7=first_child(fragment_5);{var consequent_4=$$anchor4=>{var div_5=root_8$1(),div_6=sibling(child(div_5),2),node_8=child(div_6);ActionIcon(node_8,{iconSize:"h-2\ -.5 w-2.5",get icon(){return Power_off},tooltip:"Unload model",class:"h-3 w-3 text-red-500 hover:text-red-600",onclick:e=>{e?.stopPropagation(),modelsStore.unloadModel($$props.option.model)}}),reset(div_6),reset(div_5),append($$anchor4,div_5)},alternate_2=$$anchor4=>{var fragment_6=comment$2(),node_9=first_child(fragment_6);{var consequent_5=$$anchor5=>{var div_7=root_10$3(),div_8=sibling(child(div_7),2);div_8.__click=e=>e.stopPropagation();var node_10=child(div_8);ActionIcon(node_10,{iconSize:"h\ --2.5 w-2.5",get icon(){return Power_off},tooltip:"Unload model",class:"h-3 w-3 text-red-500 hover:text-red-600",onclick:()=>modelsStore.unloadModel($$props.option.model)}),reset(div_8),reset(div_7),append($$anchor5,div_7)},alternate_1=$$anchor5=>{var div_9=root_11$1(),div_10=sibling(child(div_9),2);div_10.__click=e=>e.stopPropagation();var node_11=child(div_10);ActionIcon(node_11,{iconSize:"h-2.5 w-2.5",get icon(){return Power},tooltip:"Load model",class:"h-3 w-3",onclick:()=>modelsStore.loadModel( -$$props.option.model)}),reset(div_10),reset(div_9),append($$anchor5,div_9)};if_block(node_9,$$render=>{get$4(isLoaded)?$$render(consequent_5):$$render(alternate_1,!1)},!0)}append($$anchor4,fragment_6)};if_block(node_7,$$render=>{get$4(isSleeping)?$$render(consequent_4):$$render(alternate_2,!1)},!0)}append($$anchor3,fragment_5)};if_block(node_4,$$render=>{get$4(isFailed)?$$render(consequent_3):$$render(alternate_3,!1)},!0)}append($$anchor2,fragment_4)};if_block(node_3,$$render=>{get$4(isLoading2)? -$$render(consequent_2):$$render(alternate_4,!1)})}reset(div_1),reset(div),template_effect($0=>{set_class(div,1,$0),set_attribute(div,"aria-selected",$$props.isSelected||$$props.isHighlighted)},[()=>clsx(cn$1("group flex w-full items-center gap-2 rounded-sm p-2 text-left text-sm transition focus:outline-none","cursor-pointer hover:bg-muted focus:bg-muted",$$props.isSelected||$$props.isHighlighted?"bg-accent text-accent-foreground":"hover:bg-accent hover:text-accent-foreground",get$4(isLoaded)?"te\ -xt-popover-foreground":"text-muted-foreground"))]),event("mouseenter",div,function(...$$args){$$props.onMouseEnter?.apply(this,$$args)}),append($$anchor,div),pop()}delegate(["click","keydown"]);var root_1$4=from_html('<div class="flex items-center gap-2 text-xs text-muted-foreground"><!> Loading models…</div>'),root_3$3=from_html('<p class="text-xs text-muted-foreground">No models available.</p>'),root_10$2=from_html("<!> <!>",1),root_13$1=from_html('<button type="button" class="flex w-full cu\ -rsor-not-allowed items-center rounded-md bg-red-400/10 px-3 py-2.5 text-left text-sm text-red-400" disabled><span class="min-w-0 flex-1 truncate"> </span> <span class="ml-2 text-xs whitespace-nowrap opacity-70">(not available)</span></button> <div class="my-1 h-px bg-border"></div>',1),root_14=from_html('<p class="px-3 py-3 text-center text-sm text-muted-foreground">No models found.</p>'),root_9$2=from_html('<!> <div class="flex flex-col gap-1 pb-4"><div class="mb-3 px-4"><!></div> <div class="m\ -ax-h-[60vh] overflow-y-auto px-2"><!> <!> <!></div></div>',1),root_5$3=from_html('<button type="button" style="max-width: min(calc(100cqw - 9rem), 20rem)"><!> <!> <!></button> <!>',1),root_15=from_html('<button style="max-width: min(calc(100cqw - 6.5rem), 32rem)"><!> <!> <!></button>'),root$6=from_html("<div><!></div> <!>",1);function ModelsSelectorSheet($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),currentModel=prop($$props,"currentModel",3,null),disabled=prop($$props, -"disabled",3,!1),forceForegroundText=prop($$props,"forceForegroundText",3,!1),useGlobalSelection=prop($$props,"useGlobalSelection",3,!1),options=user_derived(()=>modelOptions().filter(option2=>modelsStore.getModelProps(option2.model)?.webui!==!1)),loading=user_derived(modelsLoading),updating=user_derived(modelsUpdating),activeId=user_derived(selectedModelId),isRouter=user_derived(isRouterMode),serverModel=user_derived(singleModelName),isLoadingModel=state$1(!1),isHighlightedCurrentModelActive=user_derived( -()=>!get$4(isRouter)||!currentModel()?!1:(()=>{const currentOption=get$4(options).find(option2=>option2.model===currentModel());return currentOption?currentOption.id===get$4(activeId):!1})()),isCurrentModelInCache=user_derived(()=>!get$4(isRouter)||!currentModel()?!0:get$4(options).some(option2=>option2.model===currentModel())),searchTerm=state$1(""),filteredOptions=user_derived(()=>filterModelOptions(get$4(options),get$4(searchTerm))),groupedFilteredOptions=user_derived(()=>groupModelOptions(get$4( -filteredOptions),modelsStore.favoriteModelIds,m=>modelsStore.isModelLoaded(m))),sheetOpen=state$1(!1),showModelDialog=state$1(!1),infoModelId=state$1(null);function handleInfoClick(modelName){set$1(infoModelId,modelName,!0),set$1(showModelDialog,!0)}onMount$1(()=>{modelsStore.fetch().catch(error2=>{console.error("Unable to load models:",error2)})});function handleOpenChange(open3){get$4(loading)||get$4(updating)||(get$4(isRouter)?open3?(set$1(sheetOpen,!0),set$1(searchTerm,""),modelsStore.fetchRouterModels(). -then(()=>{modelsStore.fetchModalitiesForLoadedModels()})):(set$1(sheetOpen,!1),set$1(searchTerm,"")):set$1(showModelDialog,open3,!0))}function open2(){handleOpenChange(!0)}function handleSheetOpenChange(open3){open3||handleOpenChange(!1)}async function handleSelect(modelId){const option2=get$4(options).find(opt=>opt.id===modelId);if(!option2)return;let shouldCloseMenu=!0;$$props.onModelChange?await $$props.onModelChange(option2.id,option2.model)===!1&&(shouldCloseMenu=!1):await modelsStore.selectModelById( -option2.id),shouldCloseMenu&&(handleOpenChange(!1),requestAnimationFrame(()=>{document.querySelector('[data-slot="chat-form"] textarea')?.focus()})),!$$props.onModelChange&&get$4(isRouter)&&!modelsStore.isModelLoaded(option2.model)&&(set$1(isLoadingModel,!0),modelsStore.loadModel(option2.model).catch(error2=>console.error("Failed to load model:",error2)).finally(()=>set$1(isLoadingModel,!1)))}function getDisplayOption(){if(!get$4(isRouter))return get$4(serverModel)?{id:"current",model:get$4(serverModel), -name:get$4(serverModel).split("/").pop()||get$4(serverModel),capabilities:[]}:void 0;if(useGlobalSelection()&&get$4(activeId)){const selected=get$4(options).find(option2=>option2.id===get$4(activeId));if(selected)return selected}if(currentModel())return get$4(isCurrentModelInCache)?get$4(options).find(option2=>option2.model===currentModel()):{id:"not-in-cache",model:currentModel(),name:currentModel().split("/").pop()||currentModel(),capabilities:[]};if(get$4(activeId))return get$4(options).find( -option2=>option2.id===get$4(activeId))}var $$exports={open:open2},fragment=root$6(),div=first_child(fragment),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$4(),node_1=child(div_1);Loader_circle(node_1,{class:"h-3.5 w-3.5 animate-spin"}),next$1(),reset(div_1),append($$anchor2,div_1)},alternate_3=$$anchor2=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);{var consequent_1=$$anchor3=>{var p2=root_3$3();append($$anchor3,p2)},alternate_2=$$anchor3=>{const selectedOption=user_derived( -getDisplayOption);var fragment_2=comment$2(),node_3=first_child(fragment_2);{var consequent_5=$$anchor4=>{var fragment_3=root_5$3(),button=first_child(fragment_3);button.__click=()=>handleOpenChange(!0);var node_4=child(button);Package(node_4,{class:"h-3.5 w-3.5"});var node_5=sibling(node_4,2);{let $0=user_derived(()=>get$4(selectedOption)?.model||"Select model");TruncatedText(node_5,{get text(){return get$4($0)},class:"min-w-0 font-medium"})}var node_6=sibling(node_5,2);{var consequent_2=$$anchor5=>{ -Loader_circle($$anchor5,{class:"h-3 w-3.5 animate-spin"})},alternate=$$anchor5=>{Chevron_down($$anchor5,{class:"h-3 w-3.5"})};if_block(node_6,$$render=>{get$4(updating)||get$4(isLoadingModel)?$$render(consequent_2):$$render(alternate,!1)})}reset(button);var node_7=sibling(button,2);component(node_7,()=>Root$1,($$anchor5,Sheet_Root)=>{Sheet_Root($$anchor5,{onOpenChange:handleSheetOpenChange,get open(){return get$4(sheetOpen)},set open($$value){set$1(sheetOpen,$$value,!0)},children:($$anchor6,$$slotProps)=>{ -var fragment_6=comment$2(),node_8=first_child(fragment_6);component(node_8,()=>Sheet_content,($$anchor7,Sheet_Content)=>{Sheet_Content($$anchor7,{side:"bottom",class:"max-h-[85vh] gap-1",children:($$anchor8,$$slotProps2)=>{var fragment_7=root_9$2(),node_9=first_child(fragment_7);component(node_9,()=>Sheet_header,($$anchor9,Sheet_Header)=>{Sheet_Header($$anchor9,{children:($$anchor10,$$slotProps3)=>{var fragment_8=root_10$2(),node_10=first_child(fragment_8);component(node_10,()=>Sheet_title,($$anchor11,Sheet_Title)=>{ -Sheet_Title($$anchor11,{children:($$anchor12,$$slotProps4)=>{next$1();var text2=text$8("Select Model");append($$anchor12,text2)},$$slots:{default:!0}})});var node_11=sibling(node_10,2);component(node_11,()=>Sheet_description,($$anchor11,Sheet_Description)=>{Sheet_Description($$anchor11,{class:"sr-only",children:($$anchor12,$$slotProps4)=>{next$1();var text_1=text$8("Choose a model to use for the conversation");append($$anchor12,text_1)},$$slots:{default:!0}})}),append($$anchor10,fragment_8)},$$slots:{ -default:!0}})});var div_2=sibling(node_9,2),div_3=child(div_2),node_12=child(div_3);SearchInput(node_12,{placeholder:"Search models...",get value(){return get$4(searchTerm)},set value($$value){set$1(searchTerm,$$value,!0)}}),reset(div_3);var div_4=sibling(div_3,2),node_13=child(div_4);{var consequent_3=$$anchor9=>{var fragment_9=root_13$1(),button_1=first_child(fragment_9),span=child(button_1),text_2=child(span,!0);reset(span),next$1(2),reset(button_1),next$1(2),template_effect(()=>set_text(text_2, -get$4(selectedOption)?.name||currentModel())),append($$anchor9,fragment_9)};if_block(node_13,$$render=>{!get$4(isCurrentModelInCache)&¤tModel()&&$$render(consequent_3)})}var node_14=sibling(node_13,2);{var consequent_4=$$anchor9=>{var p_1=root_14();append($$anchor9,p_1)};if_block(node_14,$$render=>{get$4(filteredOptions).length===0&&$$render(consequent_4)})}var node_15=sibling(node_14,2);ModelsSelectorList(node_15,{get groups(){return get$4(groupedFilteredOptions)},get currentModel(){return currentModel()}, -get activeId(){return get$4(activeId)},sectionHeaderClass:"px-2 py-2 text-xs font-semibold text-muted-foreground/60 select-none",orgHeaderClass:"px-2 py-2 text-xs font-semibold text-muted-foreground/60 select-none [&:not(:first-child)]:mt-2",onSelect:handleSelect,onInfoClick:handleInfoClick}),reset(div_4),reset(div_2),append($$anchor8,fragment_7)},$$slots:{default:!0}})}),append($$anchor6,fragment_6)},$$slots:{default:!0}})}),template_effect($0=>{set_class(button,1,$0),button.disabled=disabled()|| -get$4(updating)},[()=>clsx(cn$1("inline-grid cursor-pointer grid-cols-[1fr_auto_1fr] items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60",get$4(isCurrentModelInCache)?forceForegroundText()||get$4(isHighlightedCurrentModelActive)?"text-foreground":"text-muted-foreground":"bg-red-400/10 !text-red-400 hove\ -r:bg-red-400/20 hover:text-red-400",get$4(sheetOpen)?"text-foreground":""))]),append($$anchor4,fragment_3)},alternate_1=$$anchor4=>{var button_2=root_15();button_2.__click=()=>handleOpenChange(!0);var node_16=child(button_2);Package(node_16,{class:"h-3.5 w-3.5"});var node_17=sibling(node_16,2);{let $0=user_derived(()=>get$4(selectedOption)?.model||"");TruncatedText(node_17,{get text(){return get$4($0)},class:"min-w-0 font-medium"})}var node_18=sibling(node_17,2);{var consequent_6=$$anchor5=>{Loader_circle( -$$anchor5,{class:"h-3 w-3.5 animate-spin"})};if_block(node_18,$$render=>{get$4(updating)&&$$render(consequent_6)})}reset(button_2),template_effect($0=>{set_class(button_2,1,$0),button_2.disabled=disabled()||get$4(updating)},[()=>clsx(cn$1("inline-flex cursor-pointer items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disab\ -led:opacity-60",get$4(isCurrentModelInCache)?forceForegroundText()||get$4(isHighlightedCurrentModelActive)?"text-foreground":"text-muted-foreground":"bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400"))]),append($$anchor4,button_2)};if_block(node_3,$$render=>{get$4(isRouter)?$$render(consequent_5):$$render(alternate_1,!1)})}append($$anchor3,fragment_2)};if_block(node_2,$$render=>{get$4(options).length===0&&get$4(isRouter)?$$render(consequent_1):$$render(alternate_2,!1)},!0)}append( -$$anchor2,fragment_1)};if_block(node2,$$render=>{get$4(loading)&&get$4(options).length===0&&get$4(isRouter)?$$render(consequent):$$render(alternate_3,!1)})}reset(div);var node_19=sibling(div,2);{var consequent_7=$$anchor2=>{DialogModelInformation($$anchor2,{get modelId(){return get$4(infoModelId)},get open(){return get$4(showModelDialog)},set open($$value){set$1(showModelDialog,$$value,!0)}})};if_block(node_19,$$render=>{get$4(showModelDialog)&&$$render(consequent_7)})}return template_effect($0=>set_class( -div,1,$0),[()=>clsx(cn$1("relative inline-flex flex-col items-end gap-1",className()))]),append($$anchor,fragment),pop($$exports)}delegate(["click"]);var root_4=from_html("<span> </span>"),root_5$2=from_html("<span> </span>"),root_7$2=from_html("<span> </span>"),root_9$1=from_html("<span> </span>"),root_2$5=from_html('<span><span class="min-w-0 truncate font-medium"><!> </span> <!> <!> <!> <!></span>');function ModelId($$anchor,$$props){push$1($$props,!0);let showOrgName=prop($$props,"showOrgNam\ -e",3,!1),showRaw=prop($$props,"showRaw",3,void 0),className=prop($$props,"class",3,""),rest=rest_props($$props,["$$slots","$$events","$$legacy","modelId","showOrgName","showRaw","aliases","tags","class"]);const badgeClass="inline-flex w-fit shrink-0 items-center justify-center whitespace-nowrap rounded-md border border-border/50 px-1 py-0 text-[10px] font-mono bg-foreground/15 dark:bg-foreground/10 text-foreground [a&]:hover:bg-foreground/25",tagBadgeClass="inline-flex w-fit shrink-0 items-cente\ -r justify-center whitespace-nowrap rounded-md border border-border/50 px-1 py-0 text-[10px] font-mono text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground";let parsed=user_derived(()=>ModelsService.parseModelId($$props.modelId)),resolvedShowRaw=user_derived(()=>showRaw()??config$1().showRawModelNames??!1),displayName=user_derived(()=>$$props.aliases&&$$props.aliases.length>0?$$props.aliases[0]:get$4(parsed).modelName??$$props.modelId),remainingAliases=user_derived(()=>$$props.aliases&& -$$props.aliases.length>1?$$props.aliases.slice(1):[]),allTags=user_derived(()=>[...get$4(parsed).tags??[],...$$props.tags??[]]);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{TruncatedText($$anchor2,spread_props({get class(){return`font-medium ${className()??""}`},showTooltip:!1,get text(){return $$props.modelId}},()=>rest))},alternate=$$anchor2=>{var span=root_2$5();attribute_effect(span,()=>({class:`flex min-w-0 flex-wrap items-center gap-1 ${className()??""}`, -...rest}));var span_1=child(span),node_1=child(span_1);{var consequent_1=$$anchor3=>{var text2=text$8();template_effect(()=>set_text(text2,`${get$4(parsed).orgName??""}/`)),append($$anchor3,text2)};if_block(node_1,$$render=>{showOrgName()&&get$4(parsed).orgName&&!($$props.aliases&&$$props.aliases.length>0)&&$$render(consequent_1)})}var text_1=sibling(node_1,1,!0);reset(span_1);var node_2=sibling(span_1,2);{var consequent_2=$$anchor3=>{var span_2=root_4();set_class(span_2,1,clsx(badgeClass));var text_2=child( -span_2);reset(span_2),template_effect(()=>set_text(text_2,`${get$4(parsed).params??""}${get$4(parsed).activatedParams?`-${get$4(parsed).activatedParams}`:""}`)),append($$anchor3,span_2)};if_block(node_2,$$render=>{get$4(parsed).params&&$$render(consequent_2)})}var node_3=sibling(node_2,2);{var consequent_3=$$anchor3=>{var span_3=root_5$2();set_class(span_3,1,clsx(badgeClass));var text_3=child(span_3,!0);reset(span_3),template_effect(()=>set_text(text_3,get$4(parsed).quantization)),append($$anchor3, -span_3)};if_block(node_3,$$render=>{get$4(parsed).quantization&&$$render(consequent_3)})}var node_4=sibling(node_3,2);{var consequent_4=$$anchor3=>{var fragment_3=comment$2(),node_5=first_child(fragment_3);each(node_5,16,()=>get$4(remainingAliases),alias=>alias,($$anchor4,alias)=>{var span_4=root_7$2();set_class(span_4,1,clsx(badgeClass));var text_4=child(span_4,!0);reset(span_4),template_effect(()=>set_text(text_4,alias)),append($$anchor4,span_4)}),append($$anchor3,fragment_3)};if_block(node_4, -$$render=>{get$4(remainingAliases).length>0&&$$render(consequent_4)})}var node_6=sibling(node_4,2);{var consequent_5=$$anchor3=>{var fragment_4=comment$2(),node_7=first_child(fragment_4);each(node_7,16,()=>get$4(allTags),tag=>tag,($$anchor4,tag)=>{var span_5=root_9$1();set_class(span_5,1,clsx(tagBadgeClass));var text_5=child(span_5,!0);reset(span_5),template_effect(()=>set_text(text_5,tag)),append($$anchor4,span_5)}),append($$anchor3,fragment_4)};if_block(node_6,$$render=>{get$4(allTags).length> -0&&$$render(consequent_5)})}reset(span),template_effect(()=>set_text(text_1,get$4(displayName))),append($$anchor2,span)};if_block(node2,$$render=>{get$4(resolvedShowRaw)?$$render(consequent):$$render(alternate,!1)})}append($$anchor,fragment),pop()}var root_3$2=from_html("<!> <!>",1),root_8=from_html("<!> <!>",1);function ModelBadge($$anchor,$$props){push$1($$props,!0);const badgeContent=$$anchor2=>{BadgeInfo($$anchor2,{get class(){return className()},get onclick(){return $$props.onclick},icon:$$anchor3=>{ -Package($$anchor3,{class:"h-3 w-3"})},children:($$anchor3,$$slotProps)=>{var fragment_2=root_3$2(),node2=first_child(fragment_2);{var consequent=$$anchor4=>{ModelId($$anchor4,{get modelId(){return get$4(model)}})};if_block(node2,$$render=>{get$4(model)&&$$render(consequent)})}var node_1=sibling(node2,2);{var consequent_1=$$anchor4=>{{let $0=user_derived(()=>get$4(model)||"");ActionIconCopyToClipboard($$anchor4,{get text(){return get$4($0)},ariaLabel:"Copy model name"})}};if_block(node_1,$$render=>{ -showCopyIcon()&&$$render(consequent_1)})}append($$anchor3,fragment_2)},$$slots:{icon:!0,default:!0}})};let className=prop($$props,"class",3,""),showCopyIcon=prop($$props,"showCopyIcon",3,!1),showTooltip=prop($$props,"showTooltip",3,!1),model=user_derived(()=>$$props.model||modelsStore.singleModelName),isModelMode=user_derived(()=>serverStore.isModelMode),shouldShow=user_derived(()=>get$4(model)&&($$props.model!==void 0||get$4(isModelMode)));var fragment_5=comment$2(),node_2=first_child(fragment_5); -{var consequent_3=$$anchor2=>{var fragment_6=comment$2(),node_3=first_child(fragment_6);{var consequent_2=$$anchor3=>{var fragment_7=comment$2(),node_4=first_child(fragment_7);component(node_4,()=>Root$5,($$anchor4,Tooltip_Root)=>{Tooltip_Root($$anchor4,{children:($$anchor5,$$slotProps)=>{var fragment_8=root_8(),node_5=first_child(fragment_8);component(node_5,()=>Tooltip_trigger,($$anchor6,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor6,{children:($$anchor7,$$slotProps2)=>{badgeContent($$anchor7)}, -$$slots:{default:!0}})});var node_6=sibling(node_5,2);component(node_6,()=>Tooltip_content,($$anchor6,Tooltip_Content)=>{Tooltip_Content($$anchor6,{children:($$anchor7,$$slotProps2)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,$$props.onclick?"Click for model details":get$4(model))),append($$anchor7,text2)},$$slots:{default:!0}})}),append($$anchor5,fragment_8)},$$slots:{default:!0}})}),append($$anchor3,fragment_7)},alternate=$$anchor3=>{badgeContent($$anchor3)};if_block(node_3, -$$render=>{showTooltip()?$$render(consequent_2):$$render(alternate,!1)})}append($$anchor2,fragment_6)};if_block(node_2,$$render=>{get$4(shouldShow)&&$$render(consequent_3)})}append($$anchor,fragment_5),pop()}var root_1$3=from_html('<div class="px-2 py-3 text-center text-sm text-muted-foreground"> </div>'),root_2$4=from_html("<!> <!>",1),root$5=from_html('<div class="sticky top-0 z-10 mb-2 bg-popover p-1 pt-2"><!></div> <div class="overflow-y-auto"><!> <!></div> <!>',1);function DropdownMenuSearchable($$anchor,$$props){ -push$1($$props,!0);let placeholder=prop($$props,"placeholder",3,"Search..."),searchValue=prop($$props,"searchValue",15,""),emptyMessage=prop($$props,"emptyMessage",3,"No items found"),isEmpty=prop($$props,"isEmpty",3,!1);var fragment=root$5(),div=first_child(fragment),node2=child(div);SearchInput(node2,{get placeholder(){return placeholder()},get onInput(){return $$props.onSearchChange},get onKeyDown(){return $$props.onSearchKeyDown},get value(){return searchValue()},set value($$value){searchValue( -$$value)}}),reset(div);var div_1=sibling(div,2),node_1=child(div_1);snippet(node_1,()=>$$props.children);var node_2=sibling(node_1,2);{var consequent=$$anchor2=>{var div_2=root_1$3(),text2=child(div_2,!0);reset(div_2),template_effect(()=>set_text(text2,emptyMessage())),append($$anchor2,div_2)};if_block(node_2,$$render=>{isEmpty()&&$$render(consequent)})}reset(div_1);var node_3=sibling(div_1,2);{var consequent_1=$$anchor2=>{var fragment_1=root_2$4(),node_4=first_child(fragment_1);component(node_4, +rocess markdown:",error2),set$1(renderedBlocks,[],!0),set$1(unstableBlockHtml,markdown2.replace(/\n/g,"<br>"),!0)}finally{isProcessing=!1}}}user_effect(()=>{const isDark=derivedMode.current===ColorMode.DARK;loadHighlightTheme(isDark)}),user_effect(()=>{updateRenderedBlocks($$props.content)}),user_effect(()=>{const hasRenderedBlocks=get$3(renderedBlocks).length>0,hasUnstableBlock=!!get$3(unstableBlockHtml);(hasRenderedBlocks||hasUnstableBlock)&&get$3(containerRef)&&(setupCodeBlockActions(),setupImageErrorHandlers())}), +user_effect(()=>{streamingAutoScroll.setContainer(get$3(streamingCodeScrollContainer))}),user_effect(()=>{streamingAutoScroll.updateInterval(get$3(incompleteCodeBlock)!==null)}),onDestroy(()=>{cleanupEventListeners(),cleanupHighlightTheme(),streamingAutoScroll.destroy()});var fragment=root$h(),div=first_child(fragment),node_1=child(div);each(node_1,17,()=>get$3(renderedBlocks),block2=>block2.id,($$anchor2,block2)=>{var div_1=root_1$6();html$6(div_1,()=>get$3(block2).html,!0),reset(div_1),action( +div_1,($$node,$$action_arg)=>fadeInView?.($$node,$$action_arg),()=>({skipIfVisible:!0})),template_effect(()=>set_attribute(div_1,"data-block-id",get$3(block2).id)),append($$anchor2,div_1)});var node_2=sibling(node_1,2);{var consequent=$$anchor2=>{var div_2=root_2$e();html$6(div_2,()=>get$3(unstableBlockHtml),!0),reset(div_2),append($$anchor2,div_2)};if_block(node_2,$$render=>{get$3(unstableBlockHtml)&&$$render(consequent)})}var node_3=sibling(node_2,2);{var consequent_1=$$anchor2=>{var div_3=root_3$8(), +div_4=child(div_3),span=child(div_4),text2=child(span,!0);reset(span);var node_4=sibling(span,2);{let $0=user_derived(()=>get$3(incompleteCodeBlock).language||"text");ActionIconsCodeBlock(node_4,{get code(){return get$3(incompleteCodeBlock).code},get language(){return get$3($0)},disabled:!0,onPreview:(code2,lang)=>{set$1(previewCode,code2,!0),set$1(previewLanguage,lang,!0),set$1(previewDialogOpen,!0)}})}reset(div_4);var div_5=sibling(div_4,2),pre=child(div_5),code_1=child(pre);html$6(code_1,()=>highlightCode( +get$3(incompleteCodeBlock).code,get$3(incompleteCodeBlock).language||"text"),!0),reset(code_1),reset(pre),reset(div_5),bind_this(div_5,$$value=>set$1(streamingCodeScrollContainer,$$value),()=>get$3(streamingCodeScrollContainer)),reset(div_3),template_effect(()=>{set_text(text2,get$3(incompleteCodeBlock).language||"text"),set_class(code_1,1,`hljs language-${(get$3(incompleteCodeBlock).language||"text")??""}`,"svelte-15eq738")}),event("scroll",div_5,()=>streamingAutoScroll.handleScroll()),append($$anchor2, +div_3)};if_block(node_3,$$render=>{get$3(incompleteCodeBlock)&&$$render(consequent_1)})}reset(div),bind_this(div,$$value=>set$1(containerRef,$$value),()=>get$3(containerRef));var node_5=sibling(div,2);DialogCodePreview(node_5,{get open(){return get$3(previewDialogOpen)},get code(){return get$3(previewCode)},get language(){return get$3(previewLanguage)},onOpenChange:handlePreviewDialogOpenChange}),template_effect($0=>set_class(div,1,`${className()??""}${$0??""}`,"svelte-15eq738"),[()=>config$1()[SETTINGS_KEYS. +FULL_HEIGHT_CODE_BLOCKS]?" full-height-code-blocks":""]),append($$anchor,fragment),pop()}var root$g=from_html('<div><pre class="m-0 svelte-hp0zxr"><code class="hljs text-sm leading-relaxed svelte-hp0zxr"></code></pre></div>');function SyntaxHighlightedCode($$anchor,$$props){push$1($$props,!0);let language2=prop($$props,"language",3,"text"),className=prop($$props,"class",3,""),maxHeight=prop($$props,"maxHeight",3,"60vh"),maxWidth=prop($$props,"maxWidth",3,""),highlightedHtml=state$1("");function loadHighlightTheme(isDark){ +document.querySelectorAll("style[data-highlight-theme-preview]").forEach(style3=>style3.remove());const style2=document.createElement("style");style2.setAttribute("data-highlight-theme-preview","true"),style2.textContent=isDark?githubDarkCss:githubLightCss,document.head.appendChild(style2)}user_effect(()=>{const isDark=derivedMode.current===ColorMode.DARK;loadHighlightTheme(isDark)}),user_effect(()=>{if(!$$props.code){set$1(highlightedHtml,"");return}try{const lang=language2().toLowerCase();if(HighlightJS$1. +getLanguage(lang)){const result=HighlightJS$1.highlight($$props.code,{language:lang});set$1(highlightedHtml,result.value,!0)}else{const result=HighlightJS$1.highlightAuto($$props.code);set$1(highlightedHtml,result.value,!0)}}catch{set$1(highlightedHtml,$$props.code.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),!0)}});var div=root$g(),pre=child(div),code_1=child(pre);html$6(code_1,()=>get$3(highlightedHtml),!0),reset(code_1),reset(pre),reset(div),template_effect(()=>{set_class(div, +1,`code-preview-wrapper rounded-lg border border-border bg-muted ${className()??""}`,"svelte-hp0zxr"),set_style(div,`max-height: ${maxHeight()??""}; max-width: ${maxWidth()??""};`)}),append($$anchor,div),pop()}var root_5$7=from_html('<span class="text-xs italic"> </span>'),root_3$7=from_html('<div class="flex items-center gap-2 text-muted-foreground"><!> <span class="font-mono text-sm font-medium"> </span> <!></div> <div><!> <span class="sr-only">Toggle content</span></div>',1),root_6$6=from_html( +'<div class="overflow-y-auto border-t border-muted px-3 pb-3" style="min-height: var(--min-message-height); max-height: var(--max-message-height);"><!></div>'),root_2$d=from_html("<!> <!>",1);function CollapsibleContentBlock($$anchor,$$props){push$1($$props,!0);let open2=prop($$props,"open",15,!1),className=prop($$props,"class",3,""),iconClass=prop($$props,"iconClass",3,"h-4 w-4"),isStreaming=prop($$props,"isStreaming",3,!1),contentContainer=state$1(void 0);const autoScroll=createAutoScrollController(); +user_effect(()=>{autoScroll.setContainer(get$3(contentContainer))}),user_effect(()=>{autoScroll.updateInterval(open2()&&isStreaming())});function handleScroll(){autoScroll.handleScroll()}var fragment=comment$2(),node2=first_child(fragment);component(node2,()=>Collapsible,($$anchor2,Collapsible_Root)=>{Collapsible_Root($$anchor2,{get open(){return open2()},onOpenChange:value=>{open2(value),$$props.onToggle?.()},get class(){return className()},children:($$anchor3,$$slotProps)=>{Card($$anchor3,{class:"\ +gap-0 border-muted bg-muted/30 py-0",children:($$anchor4,$$slotProps2)=>{var fragment_2=root_2$d(),node_1=first_child(fragment_2);component(node_1,()=>Collapsible_trigger,($$anchor5,Collapsible_Trigger)=>{Collapsible_Trigger($$anchor5,{class:"flex w-full cursor-pointer items-center justify-between p-3",children:($$anchor6,$$slotProps3)=>{var fragment_3=root_3$7(),div=first_child(fragment_3),node_2=child(div);{var consequent=$$anchor7=>{var fragment_4=comment$2(),node_3=first_child(fragment_4);component( +node_3,()=>$$props.icon,($$anchor8,Icon_1)=>{Icon_1($$anchor8,{get class(){return iconClass()}})}),append($$anchor7,fragment_4)};if_block(node_2,$$render=>{$$props.icon&&$$render(consequent)})}var span=sibling(node_2,2),text2=child(span,!0);reset(span);var node_4=sibling(span,2);{var consequent_1=$$anchor7=>{var span_1=root_5$7(),text_1=child(span_1,!0);reset(span_1),template_effect(()=>set_text(text_1,$$props.subtitle)),append($$anchor7,span_1)};if_block(node_4,$$render=>{$$props.subtitle&&$$render( +consequent_1)})}reset(div);var div_1=sibling(div,2),node_5=child(div_1);Chevrons_up_down(node_5,{class:"h-4 w-4"}),next$1(2),reset(div_1),template_effect($0=>{set_text(text2,$$props.title),set_class(div_1,1,$0)},[()=>clsx(buttonVariants({variant:"ghost",size:"sm",class:"h-6 w-6 p-0 text-muted-foreground hover:text-foreground"}))]),append($$anchor6,fragment_3)},$$slots:{default:!0}})});var node_6=sibling(node_1,2);component(node_6,()=>Collapsible_content,($$anchor5,Collapsible_Content)=>{Collapsible_Content( +$$anchor5,{children:($$anchor6,$$slotProps3)=>{var div_2=root_6$6(),node_7=child(div_2);snippet(node_7,()=>$$props.children),reset(div_2),bind_this(div_2,$$value=>set$1(contentContainer,$$value),()=>get$3(contentContainer)),event("scroll",div_2,handleScroll),append($$anchor6,div_2)},$$slots:{default:!0}})}),append($$anchor4,fragment_2)},$$slots:{default:!0}})},$$slots:{default:!0}})}),append($$anchor,fragment),pop()}let _url=state$1("#/");const settingsReferrer={get url(){return get$3(_url)},set url(value){ +set$1(_url,value,!0)}};var root_2$c=from_html('<div class="space-y-6"><!></div>'),root$f=from_html(`<div class="mx-auto flex h-full max-h-[100dvh] w-full flex-col overflow-y-auto md:pl-8"><div class="flex flex-1 flex-col gap-4 md:flex-row"><!> <!> <div class="mx-auto max-w-3xl flex-1"><div class="space-y-6 p-4 md:p-6 md:pt-28"><div class="grid"><div class="mb-6 flex items-center gap-2 border-b border-border/30 pb-6 md:flex"><!> <h3 class="text-lg font-semibold"> </h3></div> <!></div> <div class=\ +"mt-8 border-t border-border/30 pt-6"><p class="text-xs text-muted-foreground">Settings are saved in browser's localStorage</p></div></div> <!></div></div></div>`);function SettingsChat($$anchor,$$props){push$1($$props,!0);let activeSlug=user_derived(()=>$$props.initialSection??page$1.params.section??"general"),currentSection=user_derived(()=>SETTINGS_CHAT_SECTIONS.find(section2=>section2.slug===get$3(activeSlug))||SETTINGS_CHAT_SECTIONS[0]),localConfig=state$1(proxy({...config$1()})),mobileHeader; +function handleThemeChange(newTheme){get$3(localConfig).theme=newTheme,setMode(newTheme)}function handleConfigChange(key2,value){get$3(localConfig)[key2]=value}function handleReset(){set$1(localConfig,{...config$1()},!0),setMode(get$3(localConfig).theme),mobileHeader?.updateCarousel()}function handleSave(){if(get$3(localConfig).custom&&typeof get$3(localConfig).custom=="string"&&get$3(localConfig).custom.trim())try{JSON.parse(get$3(localConfig).custom)}catch(error2){alert("Invalid JSON in custom\ + parameters. Please check the format and try again."),console.error(error2);return}const processedConfig={...get$3(localConfig)};for(const field of NUMERIC_FIELDS)if(processedConfig[field]!==void 0&&processedConfig[field]!==""){const numValue=Number(processedConfig[field]);if(!isNaN(numValue))POSITIVE_INTEGER_FIELDS.includes(field)?processedConfig[field]=Math.max(1,Math.round(numValue)):processedConfig[field]=numValue;else{alert(`Invalid numeric value for ${field}. Please enter a valid number.`); +return}}settingsStore.updateMultipleConfig(processedConfig),goto(settingsReferrer.url)}function reset$1(){set$1(localConfig,{...config$1()},!0)}setChatSettingsConfigContext({get localConfig(){return get$3(localConfig)},handleConfigChange,handleThemeChange});var $$exports={reset:reset$1},div=root$f(),div_1=child(div),node2=child(div_1);{let $0=user_derived(()=>$$props.getSectionHref??(section2=>`#/settings/chat/${section2.slug}`));SettingsChatDesktopSidebar(node2,{get sections(){return SETTINGS_CHAT_SECTIONS}, +isActive:section2=>section2.slug===get$3(activeSlug),get getHref(){return get$3($0)}})}var node_1=sibling(node2,2);{let $0=user_derived(()=>$$props.getSectionHref??(section2=>`#/settings/chat/${section2.slug}`));bind_this(SettingsChatMobileHeader(node_1,{get sections(){return SETTINGS_CHAT_SECTIONS},isActive:section2=>section2.slug===get$3(activeSlug),get getHref(){return get$3($0)}}),$$value=>mobileHeader=$$value,()=>mobileHeader)}var div_2=sibling(node_1,2),div_3=child(div_2),div_4=child(div_3), +div_5=child(div_4),node_2=child(div_5);component(node_2,()=>get$3(currentSection).icon,($$anchor2,currentSection_icon)=>{currentSection_icon($$anchor2,{class:"h-5 w-5"})});var h3=sibling(node_2,2),text2=child(h3,!0);reset(h3),reset(div_5);var node_3=sibling(div_5,2);{var consequent=$$anchor2=>{ChatSettingsToolsTab($$anchor2,{})},consequent_1=$$anchor2=>{var div_6=root_2$c(),node_4=child(div_6);ChatSettingsFields(node_4,{get fields(){return get$3(currentSection).fields},get localConfig(){return get$3( +localConfig)},onConfigChange:handleConfigChange,onThemeChange:handleThemeChange}),reset(div_6),append($$anchor2,div_6)};if_block(node_3,$$render=>{get$3(currentSection).title===SETTINGS_SECTION_TITLES.TOOLS?$$render(consequent):get$3(currentSection).fields&&$$render(consequent_1,1)})}reset(div_4),next$1(2),reset(div_3);var node_5=sibling(div_3,2);return ChatSettingsFooter(node_5,{onReset:handleReset,onSave:handleSave}),reset(div_2),reset(div_1),reset(div),template_effect(()=>set_text(text2,get$3( +currentSection).title)),transition(1,div,()=>fade,()=>({duration:150})),append($$anchor,div),pop($$exports)}var root_2$b=from_html('<a><!> <span class="ml-2"> </span></a>'),root_3$6=from_html('<button><!> <span class="ml-2"> </span></button>'),root$e=from_html('<div class="sticky top-0 hidden w-64 flex-col self-start bg-background pt-10 pb-4 md:flex"><div class="flex items-center gap-2 pb-10"><!> <h1 class="text-2xl font-semibold">Settings</h1></div> <nav class="space-y-1"></nav></div>');function SettingsChatDesktopSidebar($$anchor,$$props){ +push$1($$props,!0);var div=root$e(),div_1=child(div),node2=child(div_1);Settings$1(node2,{class:"h-6 w-6"}),next$1(2),reset(div_1);var nav=sibling(div_1,2);each(nav,21,()=>$$props.sections,section2=>section2.title,($$anchor2,section2)=>{var fragment=comment$2(),node_1=first_child(fragment);{var consequent=$$anchor3=>{var a=root_2$b(),node_2=child(a);component(node_2,()=>get$3(section2).icon,($$anchor4,section_icon)=>{section_icon($$anchor4,{class:"h-4 w-4"})});var span=sibling(node_2,2),text2=child( +span,!0);reset(span),reset(a),template_effect(($0,$1)=>{set_class(a,1,`flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-left text-sm no-underline transition-colors hover:bg-accent ${$0??""}`),set_attribute(a,"href",$1),set_text(text2,get$3(section2).title)},[()=>$$props.isActive(get$3(section2))?"bg-accent text-accent-foreground":"text-muted-foreground",()=>$$props.getHref(get$3(section2))]),append($$anchor3,a)},alternate=$$anchor3=>{var button=root_3$6(),node_3=child(button); +component(node_3,()=>get$3(section2).icon,($$anchor4,section_icon_1)=>{section_icon_1($$anchor4,{class:"h-4 w-4"})});var span_1=sibling(node_3,2),text_1=child(span_1,!0);reset(span_1),reset(button),template_effect($0=>{set_class(button,1,`flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-left text-sm transition-colors hover:bg-accent ${$0??""}`),set_text(text_1,get$3(section2).title)},[()=>$$props.isActive(get$3(section2))?"bg-accent text-accent-foreground":"text-muted-fore\ +ground"]),delegated("click",button,()=>$$props.onSectionChange?.(get$3(section2).title)),append($$anchor3,button)};if_block(node_1,$$render=>{$$props.getHref?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment)}),reset(nav),reset(div),append($$anchor,div),pop()}delegate(["click"]);function useScrollCarousel(){let canScrollLeft=state$1(!1),canScrollRight=state$1(!1),scrollContainer=state$1(void 0);function scrollToCenter(element2){if(!get$3(scrollContainer))return;const containerRect=get$3( +scrollContainer).getBoundingClientRect(),elementRect=element2.getBoundingClientRect(),elementCenter=elementRect.left+elementRect.width/2,containerCenter=containerRect.left+containerRect.width/2,scrollOffset=elementCenter-containerCenter;get$3(scrollContainer).scrollBy({left:scrollOffset,behavior:"smooth"})}function scrollLeft(){get$3(scrollContainer)&&get$3(scrollContainer).scrollBy({left:-250,behavior:"smooth"})}function scrollRight(){get$3(scrollContainer)&&get$3(scrollContainer).scrollBy({left:250, +behavior:"smooth"})}function updateScrollButtons(){if(!get$3(scrollContainer))return;const{scrollLeft:sl,scrollWidth,clientWidth}=get$3(scrollContainer);set$1(canScrollLeft,sl>0),set$1(canScrollRight,sl<scrollWidth-clientWidth-1)}return user_effect(()=>{get$3(scrollContainer)&&updateScrollButtons()}),{get canScrollLeft(){return get$3(canScrollLeft)},get canScrollRight(){return get$3(canScrollRight)},get scrollContainer(){return get$3(scrollContainer)},set scrollContainer(el){set$1(scrollContainer, +el,!0)},scrollToCenter,scrollLeft,scrollRight,updateScrollButtons}}var root_2$a=from_html("<a><!> <span> </span></a>"),root_3$5=from_html("<button><!> <span> </span></button>"),root$d=from_html('<div class="sticky top-0 z-10 flex flex-col bg-background md:hidden"><div class="flex items-center gap-2 px-4 pt-4 pb-2 md:pt-6"><!> <h1 class="text-xl font-semibold md:text-2xl">Settings</h1></div> <div class="border-b border-border/30 py-2"><div class="relative flex items-center" style="scroll-padding:\ + 1rem;"><button aria-label="Scroll left"><!></button> <div class="scrollbar-hide overflow-x-auto py-2"><div class="flex min-w-max gap-2"></div></div> <button aria-label="Scroll right"><!></button></div></div></div>');function SettingsChatMobileHeader($$anchor,$$props){push$1($$props,!0);const carousel=useScrollCarousel();onMount$1(async()=>{if(await tick(),carousel.scrollContainer){const activeTab=carousel.scrollContainer.querySelector('[data-active="true"]');activeTab instanceof HTMLElement&&carousel. +scrollToCenter(activeTab)}});function updateCarousel(){setTimeout(carousel.updateScrollButtons,100)}var $$exports={updateCarousel},div=root$d(),div_1=child(div),node2=child(div_1);Settings$1(node2,{class:"h-5 w-5 md:h-6 md:w-6"}),next$1(2),reset(div_1);var div_2=sibling(div_1,2),div_3=child(div_2),button=child(div_3),node_1=child(button);Chevron_left(node_1,{class:"h-4 w-4"}),reset(button);var div_4=sibling(button,2),div_5=child(div_4);each(div_5,21,()=>$$props.sections,section2=>section2.title, +($$anchor2,section2)=>{var fragment=comment$2(),node_2=first_child(fragment);{var consequent=$$anchor3=>{var a=root_2$a(),node_3=child(a);component(node_3,()=>get$3(section2).icon,($$anchor4,section_icon)=>{section_icon($$anchor4,{class:"h-4 w-4 flex-shrink-0"})});var span=sibling(node_3,2),text2=child(span,!0);reset(span),reset(a),template_effect(($0,$1,$2)=>{set_class(a,1,`flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm whitespace-nowrap no-underline transition-colors first\ +:ml-4 last:mr-4 hover:bg-accent ${$0??""}`),set_attribute(a,"data-active",$1),set_attribute(a,"href",$2),set_text(text2,get$3(section2).title)},[()=>$$props.isActive(get$3(section2))?"bg-accent text-accent-foreground":"text-muted-foreground",()=>$$props.isActive(get$3(section2)),()=>$$props.getHref(get$3(section2))]),delegated("click",a,e=>{carousel.scrollToCenter(e.currentTarget)}),append($$anchor3,a)},alternate=$$anchor3=>{var button_1=root_3$5(),node_4=child(button_1);component(node_4,()=>get$3( +section2).icon,($$anchor4,section_icon_1)=>{section_icon_1($$anchor4,{class:"h-4 w-4 flex-shrink-0"})});var span_1=sibling(node_4,2),text_1=child(span_1,!0);reset(span_1),reset(button_1),template_effect(($0,$1)=>{set_class(button_1,1,`flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm whitespace-nowrap transition-colors first:ml-4 last:mr-4 hover:bg-accent ${$0??""}`),set_attribute(button_1,"data-active",$1),set_text(text_1,get$3(section2).title)},[()=>$$props.isActive(get$3(section2))? +"bg-accent text-accent-foreground":"text-muted-foreground",()=>$$props.isActive(get$3(section2))]),delegated("click",button_1,e=>{$$props.onSectionChange?.(get$3(section2).title),carousel.scrollToCenter(e.currentTarget)}),append($$anchor3,button_1)};if_block(node_2,$$render=>{$$props.getHref?$$render(consequent):$$render(alternate,-1)})}append($$anchor2,fragment)}),reset(div_5),reset(div_4),bind_this(div_4,$$value=>carousel.scrollContainer=$$value,()=>carousel?.scrollContainer);var button_2=sibling( +div_4,2),node_5=child(button_2);return Chevron_right(node_5,{class:"h-4 w-4"}),reset(button_2),reset(div_3),reset(div_2),reset(div),template_effect(()=>{set_class(button,1,`absolute left-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted shadow-md backdrop-blur-sm transition-opacity hover:bg-accent ${carousel.canScrollLeft?"opacity-100":"pointer-events-none opacity-0"}`),set_class(button_2,1,`absolute right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted \ +shadow-md backdrop-blur-sm transition-opacity hover:bg-accent ${carousel.canScrollRight?"opacity-100":"pointer-events-none opacity-0"}`)}),delegated("click",button,function(...$$args){carousel.scrollLeft?.apply(this,$$args)}),event("scroll",div_4,function(...$$args){carousel.updateScrollButtons?.apply(this,$$args)}),delegated("click",button_2,function(...$$args){carousel.scrollRight?.apply(this,$$args)}),append($$anchor,div),pop($$exports)}delegate(["click"]);const summaryList=($$anchor,show=noop$3,verb=noop$3,items2=noop$3)=>{ +var fragment=comment$2(),node2=first_child(fragment);{var consequent_1=$$anchor2=>{var div=root_2$9(),h5=child(div),text_1=child(h5);reset(h5);var ul=sibling(h5,2),node_1=child(ul);each(node_1,17,()=>items2().slice(0,10),conv=>conv.id,($$anchor3,conv)=>{var li2=root_3$4(),text_2=child(li2);reset(li2),template_effect(()=>set_text(text_2,`• ${(get$3(conv).name||"Untitled conversation")??""}`)),append($$anchor3,li2)});var node_2=sibling(node_1,2);{var consequent=$$anchor3=>{var li_1=root_4$4(),text_3=child( +li_1);reset(li_1),template_effect(()=>set_text(text_3,`... and ${items2().length-10} more`)),append($$anchor3,li_1)};if_block(node_2,$$render=>{items2().length>10&&$$render(consequent)})}reset(ul),reset(div),template_effect(()=>set_text(text_1,`${verb()??""} + ${items2().length??""} conversation${items2().length===1?"":"s"}`)),append($$anchor2,div)};if_block(node2,$$render=>{show()&&items2().length>0&&$$render(consequent_1)})}append($$anchor,fragment)},section=($$anchor,title2=noop$3,description2=noop$3,Icon2=noop$3,buttonText=noop$3,onclick=noop$3,opts=noop$3)=>{const buttonClass=user_derived(()=>opts()?.buttonClass??"justify-start justify-self-start md:w-auto"),buttonVariant=user_derived(()=>opts()?.buttonVariant??"outline");var div_1=root_5$6(), +h4=child(div_1),text_4=child(h4,!0);reset(h4);var p2=sibling(h4,2),text_5=child(p2,!0);reset(p2);var node_3=sibling(p2,2);Button(node_3,{get class(){return get$3(buttonClass)},get onclick(){return onclick()},get variant(){return get$3(buttonVariant)},children:($$anchor2,$$slotProps)=>{var fragment_1=root_6$5(),node_4=first_child(fragment_1);component(node_4,Icon2,($$anchor3,Icon_1)=>{Icon_1($$anchor3,{class:"mr-2 h-4 w-4"})});var text_6=sibling(node_4);template_effect(()=>set_text(text_6,` ${buttonText()?? +""}`)),append($$anchor2,fragment_1)},$$slots:{default:!0}});var node_5=sibling(node_3,2);{var consequent_2=$$anchor2=>{summaryList($$anchor2,()=>opts().summary.show,()=>opts().summary.verb,()=>opts().summary.items)};if_block(node_5,$$render=>{opts()?.summary&&$$render(consequent_2)})}reset(div_1),template_effect(()=>{set_class(div_1,1,`grid gap-1 ${opts()?.wrapperClass??""??""}`),set_class(h4,1,`mt-0 mb-2 text-sm font-medium ${opts()?.titleClass??""??""}`),set_text(text_4,title2()),set_text(text_5, +description2())}),append($$anchor,div_1)};var root_3$4=from_html('<li class="truncate"> </li>'),root_4$4=from_html('<li class="italic"> </li>'),root_2$9=from_html('<div class="mt-4 grid overflow-x-auto rounded-lg border border-border/50 bg-muted/30 p-4"><h5 class="mb-2 text-sm font-medium"> </h5> <ul class="space-y-1 text-sm text-muted-foreground"><!> <!></ul></div>'),root_6$5=from_html("<!> ",1),root_5$6=from_html('<div><h4> </h4> <p class="mb-4 text-sm text-muted-foreground"> </p> <!> <!></div\ +>'),root$c=from_html('<div class="space-y-6"><div class="flex items-center gap-2 pb-4"><!> <h1 class="text-xl font-semibold md:text-2xl">Import / Export</h1></div> <div class="space-y-6"><!> <!> <!></div></div> <!> <!> <!>',1);function SettingsImportExport($$anchor,$$props){push$1($$props,!0);let exportedConversations=state$1(proxy([])),importedConversations=state$1(proxy([])),showExportSummary=state$1(!1),showImportSummary=state$1(!1),showExportDialog=state$1(!1),showImportDialog=state$1(!1),availableConversations=state$1( +proxy([])),messageCountMap=state$1(proxy(new Map)),fullImportData=state$1(proxy([])),showDeleteDialog=state$1(!1);async function handleExportClick(){try{const allConversations=conversations();if(allConversations.length===0){toast.info("No conversations to export");return}const conversationsWithMessages=await Promise.all(allConversations.map(async conv=>{const messages=await conversationsStore.getConversationMessages(conv.id);return{conv,messages}}));set$1(messageCountMap,createMessageCountMap(conversationsWithMessages), +!0),set$1(availableConversations,allConversations,!0),set$1(showExportDialog,!0)}catch(err){console.error("Failed to load conversations:",err),alert("Failed to load conversations")}}async function handleExportConfirm(selectedConversations){try{const allData=await Promise.all(selectedConversations.map(async conv=>{const messages=await conversationsStore.getConversationMessages(conv.id);return{conv:snapshot(conv),messages:snapshot(messages)}}));conversationsStore.downloadConversationFile(allData), +set$1(exportedConversations,selectedConversations,!0),set$1(showExportSummary,!0),set$1(showImportSummary,!1),set$1(showExportDialog,!1)}catch(err){console.error("Export failed:",err),alert("Failed to export conversations")}}async function handleImportClick(){try{const input=document.createElement("input");input.type=HtmlInputType.FILE,input.accept=FileExtensionText.JSON,input.onchange=async e=>{const file=e.target?.files?.[0];if(file)try{const text2=await file.text(),parsedData=JSON.parse(text2); +let importedData;if(Array.isArray(parsedData))importedData=parsedData;else if(parsedData&&typeof parsedData=="object"&&"conv"in parsedData&&"messages"in parsedData)importedData=[parsedData];else throw new Error("Invalid file format: expected array of conversations or single conversation object");set$1(fullImportData,importedData,!0),set$1(availableConversations,importedData.map(item=>item.conv),!0),set$1(messageCountMap,createMessageCountMap(importedData),!0),set$1(showImportDialog,!0)}catch(err){ +const message=err instanceof Error?err.message:"Unknown error";console.error("Failed to parse file:",err),alert(`Failed to parse file: ${message}`)}},input.click()}catch(err){console.error("Import failed:",err),alert("Failed to import conversations")}}async function handleImportConfirm(selectedConversations){try{const selectedIds=new Set(selectedConversations.map(c2=>c2.id)),selectedData=snapshot(get$3(fullImportData)).filter(item=>selectedIds.has(item.conv.id));await conversationsStore.importConversationsData( +selectedData),set$1(importedConversations,selectedConversations,!0),set$1(showImportSummary,!0),set$1(showExportSummary,!1),set$1(showImportDialog,!1)}catch(err){console.error("Import failed:",err),alert("Failed to import conversations. Please check the file format.")}}async function handleDeleteAllClick(){try{if(conversations().length===0){toast.info("No conversations to delete");return}set$1(showDeleteDialog,!0)}catch(err){console.error("Failed to load conversations for deletion:",err),toast.error( +"Failed to load conversations")}}async function handleDeleteAllConfirm(){try{await conversationsStore.deleteAll(),set$1(showDeleteDialog,!1)}catch(err){console.error("Failed to delete conversations:",err)}}function handleDeleteAllCancel(){set$1(showDeleteDialog,!1)}var fragment_3=root$c(),div_2=first_child(fragment_3),div_3=child(div_2),node_6=child(div_3);Database(node_6,{class:"h-5 w-5 md:h-6 md:w-6"}),next$1(2),reset(div_3);var div_4=sibling(div_3,2),node_7=child(div_4);section(node_7,()=>"Ex\ +port Conversations",()=>"Download all your conversations as a JSON file. This includes all messages, attachments, and conversation history.",()=>Download,()=>"Export conversations",()=>handleExportClick,()=>({summary:{show:get$3(showExportSummary),verb:"Exported",items:get$3(exportedConversations)}}));var node_8=sibling(node_7,2);section(node_8,()=>"Import Conversations",()=>"Import one or more conversations from a previously exported JSON file. This will merge with your existing conversations.", +()=>Upload,()=>"Import conversations",()=>handleImportClick,()=>({wrapperClass:"border-t border-border/30 pt-6",summary:{show:get$3(showImportSummary),verb:"Imported",items:get$3(importedConversations)}}));var node_9=sibling(node_8,2);section(node_9,()=>"Delete All Conversations",()=>"Permanently delete all conversations and their messages. This action cannot be undone. Consider exporting your conversations first if you want to keep a backup.",()=>Trash_2,()=>"Delete all conversations",()=>handleDeleteAllClick, +()=>({wrapperClass:"border-t border-border/30 pt-4",titleClass:"text-destructive",buttonVariant:"destructive",buttonClass:"text-destructive-foreground justify-start justify-self-start bg-destructive hover:bg-destructive/80 md:w-auto"})),reset(div_4),reset(div_2);var node_10=sibling(div_2,2);DialogConversationSelection(node_10,{get conversations(){return get$3(availableConversations)},get messageCountMap(){return get$3(messageCountMap)},get mode(){return ConversationSelectionMode.EXPORT},onCancel:()=>set$1( +showExportDialog,!1),onConfirm:handleExportConfirm,get open(){return get$3(showExportDialog)},set open($$value){set$1(showExportDialog,$$value,!0)}});var node_11=sibling(node_10,2);DialogConversationSelection(node_11,{get conversations(){return get$3(availableConversations)},get messageCountMap(){return get$3(messageCountMap)},get mode(){return ConversationSelectionMode.IMPORT},onCancel:()=>set$1(showImportDialog,!1),onConfirm:handleImportConfirm,get open(){return get$3(showImportDialog)},set open($$value){ +set$1(showImportDialog,$$value,!0)}});var node_12=sibling(node_11,2);DialogConfirmation(node_12,{title:"Delete all conversations",description:"Are you sure you want to delete all conversations? This action cannot be undone and will permanently remove all your conversations and messages.",confirmText:"Delete All",cancelText:"Cancel",variant:"destructive",get icon(){return Trash_2},onConfirm:handleDeleteAllConfirm,onCancel:handleDeleteAllCancel,get open(){return get$3(showDeleteDialog)},set open($$value){ +set$1(showDeleteDialog,$$value,!0)}}),transition(1,div_2,()=>fade,()=>({duration:150})),append($$anchor,fragment_3),pop()}function filterModelOptions(options,searchTerm){const term=searchTerm.trim().toLowerCase();return term?options.filter(option2=>option2.model.toLowerCase().includes(term)||option2.name?.toLowerCase().includes(term)||option2.aliases?.some(alias=>alias.toLowerCase().includes(term))||option2.tags?.some(tag=>tag.toLowerCase().includes(term))):options}function groupModelOptions(filteredOptions,favoriteIds,isModelLoaded){ +const loaded=[];for(let i=0;i<filteredOptions.length;i++)isModelLoaded(filteredOptions[i].model)&&loaded.push({option:filteredOptions[i],flatIndex:i});const loadedModelIds=new Set(loaded.map(item=>item.option.model)),favorites=[];for(let i=0;i<filteredOptions.length;i++)favoriteIds.has(filteredOptions[i].model)&&!loadedModelIds.has(filteredOptions[i].model)&&favorites.push({option:filteredOptions[i],flatIndex:i});const available=[],orgGroups=new SvelteMap;for(let i=0;i<filteredOptions.length;i++){ +const option2=filteredOptions[i];if(loadedModelIds.has(option2.model)||favoriteIds.has(option2.model))continue;const key2=option2.parsedId?.orgName??"";orgGroups.has(key2)||orgGroups.set(key2,[]),orgGroups.get(key2).push({option:option2,flatIndex:i})}for(const[orgName,items2]of orgGroups)available.push({orgName:orgName||null,items:items2});return{loaded,favorites,available}}function useModelsSelector(opts){const options=user_derived(()=>modelOptions().filter(option2=>modelsStore.getModelProps(option2. +model)?.webui!==!1)),loading=user_derived(modelsLoading),updating=user_derived(modelsUpdating),activeId=user_derived(selectedModelId),isRouter=user_derived(isRouterMode),serverModel=user_derived(singleModelName),currentModel=user_derived(()=>opts.currentModel()),useGlobalSelection=user_derived(()=>opts.useGlobalSelection?.()??!1),onModelChange=user_derived(()=>opts.onModelChange?.()),isHighlightedCurrentModelActive=user_derived(()=>{if(!get$3(isRouter)||!get$3(currentModel))return!1;const currentOption=get$3( +options).find(option2=>option2.model===get$3(currentModel));return currentOption?currentOption.id===get$3(activeId):!1}),isCurrentModelInCache=user_derived(()=>!get$3(isRouter)||!get$3(currentModel)?!0:get$3(options).some(option2=>option2.model===get$3(currentModel)));let isLoadingModel=state$1(!1),searchTerm=state$1(""),showModelDialog=state$1(!1),infoModelId=state$1(null);const filteredOptions=user_derived(()=>filterModelOptions(get$3(options),get$3(searchTerm))),groupedFilteredOptions=user_derived( +()=>groupModelOptions(get$3(filteredOptions),modelsStore.favoriteModelIds,m=>modelsStore.isModelLoaded(m)));function handleInfoClick(modelName){set$1(infoModelId,modelName,!0),set$1(showModelDialog,!0)}onMount$1(()=>{modelsStore.fetch().catch(error2=>{console.error("Unable to load models:",error2)})});function handleOpenChange(open2){get$3(loading)||get$3(updating)||(get$3(isRouter)?(set$1(searchTerm,""),open2&&modelsStore.fetchRouterModels().then(()=>{modelsStore.fetchModalitiesForLoadedModels()}), +opts.onOpenChange?.(open2)):set$1(showModelDialog,open2,!0))}async function handleSelect(modelId){const option2=get$3(options).find(opt=>opt.id===modelId);if(!option2)return;let shouldCloseMenu=!0;get$3(onModelChange)?await get$3(onModelChange)(option2.id,option2.model)===!1&&(shouldCloseMenu=!1):await modelsStore.selectModelById(option2.id),shouldCloseMenu&&(handleOpenChange(!1),requestAnimationFrame(()=>{document.querySelector('[data-slot="chat-form"] textarea')?.focus()})),!get$3(onModelChange)&& +get$3(isRouter)&&!modelsStore.isModelLoaded(option2.model)&&(set$1(isLoadingModel,!0),modelsStore.loadModel(option2.model).catch(error2=>console.error("Failed to load model:",error2)).finally(()=>set$1(isLoadingModel,!1)))}function getDisplayOption(){if(!get$3(isRouter)){const displayModel=get$3(serverModel)||get$3(currentModel);return displayModel?{id:get$3(serverModel)?"current":"offline-current",model:displayModel,name:displayModel.split("/").pop()||displayModel,capabilities:[]}:void 0}if(get$3( +useGlobalSelection)&&get$3(activeId)){const selected=get$3(options).find(option2=>option2.id===get$3(activeId));if(selected)return selected}if(get$3(currentModel))return get$3(isCurrentModelInCache)?get$3(options).find(option2=>option2.model===get$3(currentModel)):{id:"not-in-cache",model:get$3(currentModel),name:get$3(currentModel).split("/").pop()||get$3(currentModel),capabilities:[]};if(get$3(activeId))return get$3(options).find(option2=>option2.id===get$3(activeId))}return{get options(){return get$3( +options)},get loading(){return get$3(loading)},get updating(){return get$3(updating)},get activeId(){return get$3(activeId)},get isRouter(){return get$3(isRouter)},get serverModel(){return get$3(serverModel)},get isHighlightedCurrentModelActive(){return get$3(isHighlightedCurrentModelActive)},get isCurrentModelInCache(){return get$3(isCurrentModelInCache)},get filteredOptions(){return get$3(filteredOptions)},get groupedFilteredOptions(){return get$3(groupedFilteredOptions)},get isLoadingModel(){ +return get$3(isLoadingModel)},get searchTerm(){return get$3(searchTerm)},get showModelDialog(){return get$3(showModelDialog)},get infoModelId(){return get$3(infoModelId)},setSearchTerm(value){set$1(searchTerm,value,!0)},setShowModelDialog(value){set$1(showModelDialog,value,!0)},handleInfoClick,handleSelect,handleOpenChange,isFavorite(model){return modelsStore.favoriteModelIds.has(model)},getDisplayOption}}var root_1$5=from_html('<div class="flex items-center gap-2 text-xs text-muted-foreground">\ +<!> Loading models…</div>'),root_3$3=from_html('<span style="max-width: min(calc(100cqw - 10rem), 20rem)"><!> <!></span>'),root_4$3=from_html('<p class="text-xs text-muted-foreground">No models available.</p>'),root_12$1=from_html('<p class="font-mono"> </p>'),root_10$2=from_html("<!> <!>",1),root_13=from_html('<span class="min-w-0 font-medium">Select model</span>'),root_8$4=from_html("<!> <!> <!>",1),root_19$1=from_html('<button type="button" class="flex w-full cursor-not-allowed items-center\ + bg-red-400/10 p-2 text-left text-sm text-red-400" role="option" aria-selected="true" aria-disabled="true" disabled=""><!> <span class="ml-2 text-xs whitespace-nowrap opacity-70">(not available)</span></button>'),root_20=from_html('<p class="px-4 py-3 text-sm text-muted-foreground">No models found.</p>'),root_17$1=from_html('<div class="models-list"><!> <!> <!></div>'),root_7$5=from_html("<!> <!>",1),root_25=from_html('<p class="font-mono"> </p>'),root_23=from_html("<!> <!>",1),root_21=from_html( +'<button style="max-width: min(calc(100cqw - 6.5rem), 32rem)"><!> <!> <!></button>'),root$b=from_html("<div><!></div> <!>",1);function ModelsSelectorDropdown($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),currentModel=prop($$props,"currentModel",3,null),disabled=prop($$props,"disabled",3,!1),forceForegroundText=prop($$props,"forceForegroundText",3,!1),useGlobalSelection=prop($$props,"useGlobalSelection",3,!1),isOpen=state$1(!1),highlightedIndex=state$1(-1);const ms=useModelsSelector( +{currentModel:()=>currentModel(),useGlobalSelection:()=>useGlobalSelection(),onModelChange:()=>$$props.onModelChange,onOpenChange:open3=>{set$1(isOpen,open3,!0),set$1(highlightedIndex,-1)}});user_effect(()=>{ms.searchTerm,set$1(highlightedIndex,-1)});function open2(){ms.handleOpenChange(!0)}function handleSearchKeyDown(event2){if(!event2.isComposing){if(event2.key===KeyboardKey.ARROW_DOWN){if(event2.preventDefault(),ms.filteredOptions.length===0)return;get$3(highlightedIndex)===-1||get$3(highlightedIndex)=== +ms.filteredOptions.length-1?set$1(highlightedIndex,0):set$1(highlightedIndex,get$3(highlightedIndex)+1)}else if(event2.key===KeyboardKey.ARROW_UP){if(event2.preventDefault(),ms.filteredOptions.length===0)return;get$3(highlightedIndex)===-1||get$3(highlightedIndex)===0?set$1(highlightedIndex,ms.filteredOptions.length-1):set$1(highlightedIndex,get$3(highlightedIndex)-1)}else if(event2.key===KeyboardKey.ENTER)if(event2.preventDefault(),get$3(highlightedIndex)>=0&&get$3(highlightedIndex)<ms.filteredOptions. +length){const option2=ms.filteredOptions[get$3(highlightedIndex)];ms.handleSelect(option2.id)}else ms.filteredOptions.length>0&&set$1(highlightedIndex,0)}}var $$exports={open:open2},fragment=root$b(),div=first_child(fragment),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$5(),node_1=child(div_1);Loader_circle(node_1,{class:"h-3.5 w-3.5 animate-spin"}),next$1(),reset(div_1),append($$anchor2,div_1)},consequent_2=$$anchor2=>{var fragment_1=comment$2(),node_2=first_child(fragment_1);{ +var consequent_1=$$anchor3=>{var span=root_3$3(),node_3=child(span);Package(node_3,{class:"h-3.5 w-3.5"});var node_4=sibling(node_3,2);ModelId(node_4,{get modelId(){return currentModel()},class:"min-w-0",hideQuantization:!0}),reset(span),template_effect($0=>set_class(span,1,$0),[()=>clsx(cn$1("inline-flex items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs text-muted-foreground",className()))]),append($$anchor3,span)},alternate=$$anchor3=>{var p2=root_4$3();append($$anchor3, +p2)};if_block(node_2,$$render=>{currentModel()?$$render(consequent_1):$$render(alternate,-1)})}append($$anchor2,fragment_1)},alternate_4=$$anchor2=>{const selectedOption=user_derived(()=>ms.getDisplayOption());var fragment_2=comment$2(),node_5=first_child(fragment_2);{var consequent_7=$$anchor3=>{var fragment_3=comment$2(),node_6=first_child(fragment_3);component(node_6,()=>Root$2,($$anchor4,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor4,{get onOpenChange(){return ms.handleOpenChange},get open(){ +return get$3(isOpen)},set open($$value){set$1(isOpen,$$value,!0)},children:($$anchor5,$$slotProps)=>{var fragment_4=root_7$5(),node_7=first_child(fragment_4);{let $0=user_derived(()=>cn$1("inline-grid cursor-pointer grid-cols-[1fr_auto_1fr] items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60",ms.isCurrentModelInCache? +forceForegroundText()||ms.isHighlightedCurrentModelActive?"text-foreground":"text-muted-foreground":"bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400",get$3(isOpen)?"text-foreground":"","max-w-[min(calc(100vw-4rem) md:max-w-[min(calc(100cqw-9rem),25rem)]")),$1=user_derived(()=>disabled()||ms.updating);component(node_7,()=>Dropdown_menu_trigger,($$anchor6,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor6,{get class(){return get$3($0)},get disabled(){return get$3($1)},children:($$anchor7,$$slotProps2)=>{ +var fragment_5=root_8$4(),node_8=first_child(fragment_5);Package(node_8,{class:"h-3.5 w-3.5"});var node_9=sibling(node_8,2);{var consequent_3=$$anchor8=>{var fragment_6=comment$2(),node_10=first_child(fragment_6);component(node_10,()=>Root$5,($$anchor9,Tooltip_Root)=>{Tooltip_Root($$anchor9,{children:($$anchor10,$$slotProps3)=>{var fragment_7=root_10$2(),node_11=first_child(fragment_7);{const child2=($$anchor11,$$arg0)=>{ModelId($$anchor11,spread_props({get modelId(){return get$3(selectedOption). +model},class:"min-w-0 overflow-hidden",hideOrgName:!1},()=>$$arg0?.().props))};component(node_11,()=>Tooltip_trigger,($$anchor11,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor11,{child:child2,$$slots:{child:!0}})})}var node_12=sibling(node_11,2);component(node_12,()=>Tooltip_content,($$anchor11,Tooltip_Content)=>{Tooltip_Content($$anchor11,{children:($$anchor12,$$slotProps4)=>{var p_1=root_12$1(),text2=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text2,get$3(selectedOption).model)),append( +$$anchor12,p_1)},$$slots:{default:!0}})}),append($$anchor10,fragment_7)},$$slots:{default:!0}})}),append($$anchor8,fragment_6)},alternate_1=$$anchor8=>{var span_1=root_13();append($$anchor8,span_1)};if_block(node_9,$$render=>{get$3(selectedOption)?$$render(consequent_3):$$render(alternate_1,-1)})}var node_13=sibling(node_9,2);{var consequent_4=$$anchor8=>{Loader_circle($$anchor8,{class:"h-3 w-3.5 animate-spin"})},alternate_2=$$anchor8=>{Chevron_down($$anchor8,{class:"h-3 w-3.5"})};if_block(node_13, +$$render=>{ms.updating||ms.isLoadingModel?$$render(consequent_4):$$render(alternate_2,-1)})}append($$anchor7,fragment_5)},$$slots:{default:!0}})})}var node_14=sibling(node_7,2);component(node_14,()=>Dropdown_menu_content,($$anchor6,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor6,{align:"end",class:"w-full max-w-[100vw] pt-0 sm:w-max sm:max-w-[calc(100vw-2rem)]",children:($$anchor7,$$slotProps2)=>{{let $0=user_derived(()=>ms.filteredOptions.length===0&&ms.isCurrentModelInCache);DropdownMenuSearchable( +$$anchor7,{get searchValue(){return ms.searchTerm},onSearchChange:v=>ms.setSearchTerm(v),placeholder:"Search models...",onSearchKeyDown:handleSearchKeyDown,emptyMessage:"No models found.",get isEmpty(){return get$3($0)},children:($$anchor8,$$slotProps3)=>{var div_2=root_17$1();{const modelOption=($$anchor9,item=noop$3,hideOrgName=noop$3)=>{const computed_const=user_derived(()=>{const{option:option2,flatIndex}=item();return{option:option2,flatIndex}}),isSelected=user_derived(()=>currentModel()=== +get$3(computed_const).option.model||ms.activeId===get$3(computed_const).option.id),isHighlighted=user_derived(()=>get$3(computed_const).flatIndex===get$3(highlightedIndex)),isFav=user_derived(()=>ms.isFavorite(get$3(computed_const).option.model));ModelsSelectorOption($$anchor9,{get option(){return get$3(computed_const).option},get isSelected(){return get$3(isSelected)},get isHighlighted(){return get$3(isHighlighted)},get isFav(){return get$3(isFav)},get hideOrgName(){return hideOrgName()},get onSelect(){ +return ms.handleSelect},get onInfoClick(){return ms.handleInfoClick},onMouseEnter:()=>set$1(highlightedIndex,get$3(computed_const).flatIndex,!0),onKeyDown:e=>{(e.key===KeyboardKey.ENTER||e.key===KeyboardKey.SPACE)&&(e.preventDefault(),ms.handleSelect(get$3(computed_const).option.id))}})};var node_15=child(div_2);{var consequent_5=$$anchor9=>{var button=root_19$1(),node_16=child(button);ModelId(node_16,{get modelId(){return currentModel()},class:"flex-1",hideQuantization:!0}),next$1(2),reset(button), +append($$anchor9,button)};if_block(node_15,$$render=>{!ms.isCurrentModelInCache&¤tModel()&&$$render(consequent_5)})}var node_17=sibling(node_15,2);{var consequent_6=$$anchor9=>{var p_2=root_20();append($$anchor9,p_2)};if_block(node_17,$$render=>{ms.filteredOptions.length===0&&$$render(consequent_6)})}var node_18=sibling(node_17,2);ModelsSelectorList(node_18,{get groups(){return ms.groupedFilteredOptions},get currentModel(){return currentModel()},get activeId(){return ms.activeId},sectionHeaderClass:"\ +my-1.5 px-2 py-2 text-[13px] font-semibold text-muted-foreground/70 select-none",get onSelect(){return ms.handleSelect},get onInfoClick(){return ms.handleInfoClick},get renderOption(){return modelOption}}),reset(div_2)}append($$anchor8,div_2)},$$slots:{default:!0}})}},$$slots:{default:!0}})}),append($$anchor5,fragment_4)},$$slots:{default:!0}})}),append($$anchor3,fragment_3)},alternate_3=$$anchor3=>{var button_1=root_21(),node_19=child(button_1);Package(node_19,{class:"h-3.5 w-3.5"});var node_20=sibling( +node_19,2);{var consequent_8=$$anchor4=>{var fragment_13=comment$2(),node_21=first_child(fragment_13);component(node_21,()=>Root$5,($$anchor5,Tooltip_Root_1)=>{Tooltip_Root_1($$anchor5,{children:($$anchor6,$$slotProps)=>{var fragment_14=root_23(),node_22=first_child(fragment_14);{const child2=($$anchor7,$$arg0)=>{ModelId($$anchor7,spread_props({get modelId(){return get$3(selectedOption).model},class:"min-w-0 overflow-hidden",hideOrgName:!1},()=>$$arg0?.().props))};component(node_22,()=>Tooltip_trigger, +($$anchor7,Tooltip_Trigger_1)=>{Tooltip_Trigger_1($$anchor7,{child:child2,$$slots:{child:!0}})})}var node_23=sibling(node_22,2);component(node_23,()=>Tooltip_content,($$anchor7,Tooltip_Content_1)=>{Tooltip_Content_1($$anchor7,{children:($$anchor8,$$slotProps2)=>{var p_3=root_25(),text_1=child(p_3,!0);reset(p_3),template_effect(()=>set_text(text_1,get$3(selectedOption).model)),append($$anchor8,p_3)},$$slots:{default:!0}})}),append($$anchor6,fragment_14)},$$slots:{default:!0}})}),append($$anchor4, +fragment_13)};if_block(node_20,$$render=>{get$3(selectedOption)&&$$render(consequent_8)})}var node_24=sibling(node_20,2);{var consequent_9=$$anchor4=>{Loader_circle($$anchor4,{class:"h-3 w-3.5 animate-spin"})};if_block(node_24,$$render=>{ms.updating&&$$render(consequent_9)})}reset(button_1),template_effect($0=>{set_class(button_1,1,$0),button_1.disabled=disabled()||ms.updating},[()=>clsx(cn$1("inline-flex cursor-pointer items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs t\ +ransition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60",ms.isCurrentModelInCache?forceForegroundText()||ms.isHighlightedCurrentModelActive?"text-foreground":"text-muted-foreground":"bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400",get$3(isOpen)?"text-foreground":""))]),delegated("click",button_1,()=>ms.handleOpenChange(!0)),append($$anchor3,button_1)};if_block(node_5, +$$render=>{ms.isRouter?$$render(consequent_7):$$render(alternate_3,-1)})}append($$anchor2,fragment_2)};if_block(node2,$$render=>{ms.loading&&ms.options.length===0&&ms.isRouter?$$render(consequent):ms.options.length===0&&ms.isRouter?$$render(consequent_2,1):$$render(alternate_4,-1)})}reset(div);var node_25=sibling(div,2);{var consequent_10=$$anchor2=>{DialogModelInformation($$anchor2,{get open(){return ms.showModelDialog},onOpenChange:v=>ms.setShowModelDialog(v),get modelId(){return ms.infoModelId}})}; +if_block(node_25,$$render=>{ms.showModelDialog&&$$render(consequent_10)})}return template_effect($0=>set_class(div,1,$0),[()=>clsx(cn$1("relative inline-flex flex-col items-end gap-1",className()))]),append($$anchor,fragment),pop($$exports)}delegate(["click"]);var root_2$8=from_html("<p>Loaded models</p> <!>",1),root_4$2=from_html("<p>Favorite models</p> <!>",1),root_8$3=from_html("<p> </p>"),root_7$4=from_html("<!> <!>",1),root_6$4=from_html("<p>Available models</p> <!>",1),root$a=from_html("<!\ +> <!> <!>",1);function ModelsSelectorList($$anchor,$$props){push$1($$props,!0);const defaultOption=($$anchor2,item=noop$3,hideOrgName=noop$3)=>{const computed_const=user_derived(()=>{const{option:option2}=item();return{option:option2}}),isSelected=user_derived(()=>$$props.currentModel===get$3(computed_const).option.model||$$props.activeId===get$3(computed_const).option.id),isFav=user_derived(()=>modelsStore.favoriteModelIds.has(get$3(computed_const).option.model));ModelsSelectorOption($$anchor2, +{get option(){return get$3(computed_const).option},get isSelected(){return get$3(isSelected)},isHighlighted:!1,get isFav(){return get$3(isFav)},get hideOrgName(){return hideOrgName()},get onSelect(){return $$props.onSelect},get onInfoClick(){return $$props.onInfoClick},onMouseEnter:()=>{},onKeyDown:()=>{}})};let sectionHeaderClass=prop($$props,"sectionHeaderClass",3,"my-1 px-2 py-2 text-[13px] font-semibold text-muted-foreground/70 select-none"),orgHeaderClass=prop($$props,"orgHeaderClass",3,"px\ +-2 py-2 text-[11px] font-semibold text-muted-foreground/50 select-none [&:not(:first-child)]:mt-1"),render3=user_derived(()=>$$props.renderOption??defaultOption);var fragment_1=root$a(),node2=first_child(fragment_1);{var consequent=$$anchor2=>{var fragment_2=root_2$8(),p2=first_child(fragment_2),node_1=sibling(p2,2);each(node_1,17,()=>$$props.groups.loaded,item=>`loaded-${item.option.id}`,($$anchor3,item)=>{var fragment_3=comment$2(),node_2=first_child(fragment_3);snippet(node_2,()=>get$3(render3), +()=>get$3(item),()=>!1),append($$anchor3,fragment_3)}),template_effect(()=>set_class(p2,1,clsx(sectionHeaderClass()))),append($$anchor2,fragment_2)};if_block(node2,$$render=>{$$props.groups.loaded.length>0&&$$render(consequent)})}var node_3=sibling(node2,2);{var consequent_1=$$anchor2=>{var fragment_4=root_4$2(),p_1=first_child(fragment_4),node_4=sibling(p_1,2);each(node_4,17,()=>$$props.groups.favorites,item=>`fav-${item.option.id}`,($$anchor3,item)=>{var fragment_5=comment$2(),node_5=first_child( +fragment_5);snippet(node_5,()=>get$3(render3),()=>get$3(item),()=>!0),append($$anchor3,fragment_5)}),template_effect(()=>set_class(p_1,1,clsx(sectionHeaderClass()))),append($$anchor2,fragment_4)};if_block(node_3,$$render=>{$$props.groups.favorites.length>0&&$$render(consequent_1)})}var node_6=sibling(node_3,2);{var consequent_3=$$anchor2=>{var fragment_6=root_6$4(),p_2=first_child(fragment_6),node_7=sibling(p_2,2);each(node_7,17,()=>$$props.groups.available,group=>group.orgName,($$anchor3,group)=>{ +var fragment_7=root_7$4(),node_8=first_child(fragment_7);{var consequent_2=$$anchor4=>{var p_3=root_8$3(),text2=child(p_3,!0);reset(p_3),template_effect(()=>{set_class(p_3,1,clsx(orgHeaderClass())),set_text(text2,get$3(group).orgName)}),append($$anchor4,p_3)};if_block(node_8,$$render=>{get$3(group).orgName&&$$render(consequent_2)})}var node_9=sibling(node_8,2);each(node_9,17,()=>get$3(group).items,item=>item.option.id,($$anchor4,item)=>{var fragment_8=comment$2(),node_10=first_child(fragment_8); +snippet(node_10,()=>get$3(render3),()=>get$3(item),()=>!0),append($$anchor4,fragment_8)}),append($$anchor3,fragment_7)}),template_effect(()=>set_class(p_2,1,clsx(sectionHeaderClass()))),append($$anchor2,fragment_6)};if_block(node_6,$$render=>{$$props.groups.available.length>0&&$$render(consequent_3)})}append($$anchor,fragment_1),pop()}var root_5$5=from_html('<div class="flex w-4 items-center justify-center"><!> <div class="hidden group-hover:flex"><!></div></div>'),root_6$3=from_html('<div clas\ +s="flex w-4 items-center justify-center"><span class="h-2 w-2 rounded-full bg-orange-400 group-hover:hidden"></span> <div class="hidden group-hover:flex"><!></div></div>'),root_7$3=from_html('<div class="flex w-4 items-center justify-center"><span class="h-2 w-2 rounded-full bg-green-500 group-hover:hidden"></span> <div class="hidden group-hover:flex"><!></div></div>'),root_8$2=from_html('<div class="flex w-4 items-center justify-center"><span class="h-2 w-2 rounded-full bg-muted-foreground/50 \ +group-hover:hidden"></span> <div class="hidden group-hover:flex"><!></div></div>'),root$9=from_html('<div role="option" tabindex="0"><!> <div class="flex shrink-0 items-center gap-1"><div class="pointer-events-none flex items-center justify-center gap-0.75 pl-2 opacity-0 group-hover:pointer-events-auto group-hover:opacity-100"><!> <!></div> <!></div></div>');function ModelsSelectorOption($$anchor,$$props){push$1($$props,!0);let hideOrgName=prop($$props,"hideOrgName",3,!1),currentRouterModels=user_derived( +routerModels),serverStatus=user_derived(()=>get$3(currentRouterModels).find(m=>m.id===$$props.option.model)?.status?.value??null),isOperationInProgress=user_derived(()=>modelsStore.isModelOperationInProgress($$props.option.model)),isFailed=user_derived(()=>get$3(serverStatus)===ServerModelStatus.FAILED),isSleeping=user_derived(()=>get$3(serverStatus)===ServerModelStatus.SLEEPING),isLoaded=user_derived(()=>(get$3(serverStatus)===ServerModelStatus.LOADED||get$3(isSleeping))&&!get$3(isOperationInProgress)), +isLoading2=user_derived(()=>get$3(serverStatus)===ServerModelStatus.LOADING||get$3(isOperationInProgress));var div=root$9(),node2=child(div);ModelId(node2,{get modelId(){return $$props.option.model},get hideOrgName(){return hideOrgName()},get aliases(){return $$props.option.aliases},get tags(){return $$props.option.tags},class:"flex-1"});var div_1=sibling(node2,2),div_2=child(div_1),node_1=child(div_2);{var consequent=$$anchor2=>{ActionIcon($$anchor2,{iconSize:"h-2.5 w-2.5",get icon(){return Heart_off}, +tooltip:"Remove from favorites",class:"h-3 w-3 hover:text-foreground",onclick:()=>modelsStore.toggleFavorite($$props.option.model)})},alternate=$$anchor2=>{ActionIcon($$anchor2,{iconSize:"h-2.5 w-2.5",get icon(){return Heart},tooltip:"Add to favorites",class:"h-3 w-3 hover:text-foreground",onclick:()=>modelsStore.toggleFavorite($$props.option.model)})};if_block(node_1,$$render=>{$$props.isFav?$$render(consequent):$$render(alternate,-1)})}var node_2=sibling(node_1,2);{var consequent_1=$$anchor2=>{ +ActionIcon($$anchor2,{iconSize:"h-2.5 w-2.5",get icon(){return Info$1},tooltip:"Model information",class:"h-3 w-3 hover:text-foreground",onclick:()=>$$props.onInfoClick($$props.option.model)})};if_block(node_2,$$render=>{get$3(isLoaded)&&$$props.onInfoClick&&$$render(consequent_1)})}reset(div_2);var node_3=sibling(div_2,2);{var consequent_2=$$anchor2=>{Loader_circle($$anchor2,{class:"h-4 w-4 animate-spin text-muted-foreground"})},consequent_3=$$anchor2=>{var div_3=root_5$5(),node_4=child(div_3); +Circle_alert(node_4,{class:"h-3.5 w-3.5 text-red-500 group-hover:hidden"});var div_4=sibling(node_4,2),node_5=child(div_4);ActionIcon(node_5,{iconSize:"h-2.5 w-2.5",get icon(){return Rotate_cw},tooltip:"Retry loading model",class:"h-3 w-3 text-red-500 hover:text-foreground",onclick:()=>modelsStore.loadModel($$props.option.model)}),reset(div_4),reset(div_3),delegated("click",div_4,e=>e.stopPropagation()),append($$anchor2,div_3)},consequent_4=$$anchor2=>{var div_5=root_6$3(),div_6=sibling(child(div_5), +2),node_6=child(div_6);ActionIcon(node_6,{iconSize:"h-2.5 w-2.5",get icon(){return Power_off},tooltip:"Unload model",class:"h-3 w-3 text-red-500 hover:text-red-600",onclick:e=>{e?.stopPropagation(),modelsStore.unloadModel($$props.option.model)}}),reset(div_6),reset(div_5),append($$anchor2,div_5)},consequent_5=$$anchor2=>{var div_7=root_7$3(),div_8=sibling(child(div_7),2),node_7=child(div_8);ActionIcon(node_7,{iconSize:"h-2.5 w-2.5",get icon(){return Power_off},tooltip:"Unload model",class:"h-3 w\ +-3 text-red-500 hover:text-red-600",onclick:()=>modelsStore.unloadModel($$props.option.model)}),reset(div_8),reset(div_7),delegated("click",div_8,e=>e.stopPropagation()),append($$anchor2,div_7)},alternate_1=$$anchor2=>{var div_9=root_8$2(),div_10=sibling(child(div_9),2),node_8=child(div_10);ActionIcon(node_8,{iconSize:"h-2.5 w-2.5",get icon(){return Power},tooltip:"Load model",class:"h-3 w-3",onclick:()=>modelsStore.loadModel($$props.option.model)}),reset(div_10),reset(div_9),delegated("click",div_10, +e=>e.stopPropagation()),append($$anchor2,div_9)};if_block(node_3,$$render=>{get$3(isLoading2)?$$render(consequent_2):get$3(isFailed)?$$render(consequent_3,1):get$3(isSleeping)?$$render(consequent_4,2):get$3(isLoaded)?$$render(consequent_5,3):$$render(alternate_1,-1)})}reset(div_1),reset(div),template_effect($0=>{set_class(div,1,$0),set_attribute(div,"aria-selected",$$props.isSelected||$$props.isHighlighted)},[()=>clsx(cn$1("group flex w-full items-center gap-2 rounded-sm p-2 text-left text-sm tr\ +ansition focus:outline-none","cursor-pointer hover:bg-muted focus:bg-muted",$$props.isSelected||$$props.isHighlighted?"bg-accent text-accent-foreground":"hover:bg-accent hover:text-accent-foreground",get$3(isLoaded)?"text-popover-foreground":"text-muted-foreground"))]),delegated("click",div,()=>$$props.onSelect($$props.option.id)),event("mouseenter",div,function(...$$args){$$props.onMouseEnter?.apply(this,$$args)}),delegated("keydown",div,function(...$$args){$$props.onKeyDown?.apply(this,$$args)}), +delegated("click",div_2,e=>e.stopPropagation()),append($$anchor,div),pop()}delegate(["click","keydown"]);var root_1$4=from_html('<div class="flex items-center gap-2 text-xs text-muted-foreground"><!> Loading models…</div>'),root_2$7=from_html('<p class="text-xs text-muted-foreground">No models available.</p>'),root_5$4=from_html('<span class="min-w-0 font-medium">Select model</span>'),root_11$1=from_html("<!> <!>",1),root_14=from_html('<button type="button" class="flex w-full cursor-not-allowe\ +d items-center rounded-md bg-red-400/10 px-3 py-2.5 text-left text-sm text-red-400" disabled=""><span class="min-w-0 flex-1 truncate"> </span> <span class="ml-2 text-xs whitespace-nowrap opacity-70">(not available)</span></button> <div class="my-1 h-px bg-border"></div>',1),root_15$1=from_html('<p class="px-3 py-3 text-center text-sm text-muted-foreground">No models found.</p>'),root_10$1=from_html('<!> <div class="flex flex-col gap-1 pb-4"><div class="mb-3 px-4"><!></div> <div class="max-h-[60v\ +h] overflow-y-auto px-2"><!> <!> <!></div></div>',1),root_4$1=from_html('<button type="button" style="max-width: min(calc(100cqw - 9rem), 20rem)"><!> <!> <!></button> <!>',1),root_16=from_html('<button style="max-width: min(calc(100cqw - 6.5rem), 32rem)"><!> <!> <!></button>'),root$8=from_html("<div><!></div> <!>",1);function ModelsSelectorSheet($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),currentModel=prop($$props,"currentModel",3,null),disabled=prop($$props,"di\ +sabled",3,!1),forceForegroundText=prop($$props,"forceForegroundText",3,!1),useGlobalSelection=prop($$props,"useGlobalSelection",3,!1),sheetOpen=state$1(!1);const ms=useModelsSelector({currentModel:()=>currentModel(),useGlobalSelection:()=>useGlobalSelection(),onModelChange:()=>$$props.onModelChange,onOpenChange:open3=>{set$1(sheetOpen,open3,!0)}});function open2(){ms.handleOpenChange(!0)}function handleSheetOpenChange(open3){open3||ms.handleOpenChange(!1)}var $$exports={open:open2},fragment=root$8(), +div=first_child(fragment),node2=child(div);{var consequent=$$anchor2=>{var div_1=root_1$4(),node_1=child(div_1);Loader_circle(node_1,{class:"h-3.5 w-3.5 animate-spin"}),next$1(),reset(div_1),append($$anchor2,div_1)},consequent_1=$$anchor2=>{var p2=root_2$7();append($$anchor2,p2)},alternate_3=$$anchor2=>{const selectedOption=user_derived(()=>ms.getDisplayOption());var fragment_1=comment$2(),node_2=first_child(fragment_1);{var consequent_6=$$anchor3=>{var fragment_2=root_4$1(),button=first_child(fragment_2), +node_3=child(button);Package(node_3,{class:"h-3.5 w-3.5"});var node_4=sibling(node_3,2);{var consequent_2=$$anchor4=>{var span=root_5$4();append($$anchor4,span)},alternate=$$anchor4=>{{let $0=user_derived(()=>get$3(selectedOption)?.model||"");ModelId($$anchor4,{class:"text-xs",get modelId(){return get$3($0)},hideQuantization:!0,hideOrgName:!0})}};if_block(node_4,$$render=>{get$3(selectedOption)?$$render(alternate,-1):$$render(consequent_2)})}var node_5=sibling(node_4,2);{var consequent_3=$$anchor4=>{ +Loader_circle($$anchor4,{class:"h-3 w-3.5 animate-spin"})},alternate_1=$$anchor4=>{Chevron_down($$anchor4,{class:"h-3 w-3.5"})};if_block(node_5,$$render=>{ms.updating||ms.isLoadingModel?$$render(consequent_3):$$render(alternate_1,-1)})}reset(button);var node_6=sibling(button,2);component(node_6,()=>Root$1,($$anchor4,Sheet_Root)=>{Sheet_Root($$anchor4,{onOpenChange:handleSheetOpenChange,get open(){return get$3(sheetOpen)},set open($$value){set$1(sheetOpen,$$value,!0)},children:($$anchor5,$$slotProps)=>{ +var fragment_6=comment$2(),node_7=first_child(fragment_6);component(node_7,()=>Sheet_content,($$anchor6,Sheet_Content)=>{Sheet_Content($$anchor6,{side:"bottom",class:"max-h-[85vh] gap-1",children:($$anchor7,$$slotProps2)=>{var fragment_7=root_10$1(),node_8=first_child(fragment_7);component(node_8,()=>Sheet_header,($$anchor8,Sheet_Header)=>{Sheet_Header($$anchor8,{children:($$anchor9,$$slotProps3)=>{var fragment_8=root_11$1(),node_9=first_child(fragment_8);component(node_9,()=>Sheet_title,($$anchor10,Sheet_Title)=>{ +Sheet_Title($$anchor10,{children:($$anchor11,$$slotProps4)=>{next$1();var text2=text$8("Select Model");append($$anchor11,text2)},$$slots:{default:!0}})});var node_10=sibling(node_9,2);component(node_10,()=>Sheet_description,($$anchor10,Sheet_Description)=>{Sheet_Description($$anchor10,{class:"sr-only",children:($$anchor11,$$slotProps4)=>{next$1();var text_1=text$8("Choose a model to use for the conversation");append($$anchor11,text_1)},$$slots:{default:!0}})}),append($$anchor9,fragment_8)},$$slots:{ +default:!0}})});var div_2=sibling(node_8,2),div_3=child(div_2),node_11=child(div_3);SearchInput(node_11,{placeholder:"Search models...",get value(){return ms.searchTerm},onInput:v=>ms.setSearchTerm(v)}),reset(div_3);var div_4=sibling(div_3,2),node_12=child(div_4);{var consequent_4=$$anchor8=>{var fragment_9=root_14(),button_1=first_child(fragment_9),span_1=child(button_1),text_2=child(span_1,!0);reset(span_1),next$1(2),reset(button_1),next$1(2),template_effect(()=>set_text(text_2,get$3(selectedOption)?. +name||currentModel())),append($$anchor8,fragment_9)};if_block(node_12,$$render=>{!ms.isCurrentModelInCache&¤tModel()&&$$render(consequent_4)})}var node_13=sibling(node_12,2);{var consequent_5=$$anchor8=>{var p_1=root_15$1();append($$anchor8,p_1)};if_block(node_13,$$render=>{ms.filteredOptions.length===0&&$$render(consequent_5)})}var node_14=sibling(node_13,2);ModelsSelectorList(node_14,{get groups(){return ms.groupedFilteredOptions},get currentModel(){return currentModel()},get activeId(){ +return ms.activeId},sectionHeaderClass:"px-2 py-2 text-xs font-semibold text-muted-foreground/60 select-none",orgHeaderClass:"px-2 py-2 text-xs font-semibold text-muted-foreground/60 select-none [&:not(:first-child)]:mt-2",get onSelect(){return ms.handleSelect},get onInfoClick(){return ms.handleInfoClick}}),reset(div_4),reset(div_2),append($$anchor7,fragment_7)},$$slots:{default:!0}})}),append($$anchor5,fragment_6)},$$slots:{default:!0}})}),template_effect($0=>{set_class(button,1,$0),button.disabled= +disabled()||ms.updating},[()=>clsx(cn$1("inline-grid cursor-pointer grid-cols-[1fr_auto_1fr] items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60",ms.isCurrentModelInCache?forceForegroundText()||ms.isHighlightedCurrentModelActive?"text-foreground":"text-muted-foreground":"bg-red-400/10 !text-red-400 hove\ +r:bg-red-400/20 hover:text-red-400",get$3(sheetOpen)?"text-foreground":""))]),delegated("click",button,()=>ms.handleOpenChange(!0)),append($$anchor3,fragment_2)},alternate_2=$$anchor3=>{var button_2=root_16(),node_15=child(button_2);Package(node_15,{class:"h-3.5 w-3.5"});var node_16=sibling(node_15,2);{let $0=user_derived(()=>get$3(selectedOption)?.model||"");TruncatedText(node_16,{get text(){return get$3($0)},class:"min-w-0 font-medium"})}var node_17=sibling(node_16,2);{var consequent_7=$$anchor4=>{ +Loader_circle($$anchor4,{class:"h-3 w-3.5 animate-spin"})};if_block(node_17,$$render=>{ms.updating&&$$render(consequent_7)})}reset(button_2),template_effect($0=>{set_class(button_2,1,$0),button_2.disabled=disabled()||ms.updating},[()=>clsx(cn$1("inline-flex cursor-pointer items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed\ + disabled:opacity-60",ms.isCurrentModelInCache?forceForegroundText()||ms.isHighlightedCurrentModelActive?"text-foreground":"text-muted-foreground":"bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400"))]),delegated("click",button_2,()=>ms.handleOpenChange(!0)),append($$anchor3,button_2)};if_block(node_2,$$render=>{ms.isRouter?$$render(consequent_6):$$render(alternate_2,-1)})}append($$anchor2,fragment_1)};if_block(node2,$$render=>{ms.loading&&ms.options.length===0&&ms.isRouter?$$render( +consequent):ms.options.length===0&&ms.isRouter?$$render(consequent_1,1):$$render(alternate_3,-1)})}reset(div);var node_18=sibling(div,2);{var consequent_8=$$anchor2=>{DialogModelInformation($$anchor2,{get open(){return ms.showModelDialog},onOpenChange:v=>ms.setShowModelDialog(v),get modelId(){return ms.infoModelId}})};if_block(node_18,$$render=>{ms.showModelDialog&&$$render(consequent_8)})}return template_effect($0=>set_class(div,1,$0),[()=>clsx(cn$1("relative inline-flex flex-col items-end gap-\ +1",className()))]),append($$anchor,fragment),pop($$exports)}delegate(["click"]);var root_4=from_html("<span> </span>"),root_5$3=from_html("<span> </span>"),root_7$2=from_html("<span> </span>"),root_9$1=from_html("<span> </span>"),root_2$6=from_html('<span><span class="min-w-0 truncate font-medium"><!> </span> <!> <!> <!> <!></span>');function ModelId($$anchor,$$props){push$1($$props,!0);let hideOrgName=prop($$props,"hideOrgName",3,!1),showRaw=prop($$props,"showRaw",3,void 0),hideQuantization=prop( +$$props,"hideQuantization",3,!1),className=prop($$props,"class",3,""),rest=rest_props($$props,["$$slots","$$events","$$legacy","modelId","hideOrgName","showRaw","hideQuantization","aliases","tags","class"]);const badgeClass="inline-flex w-fit shrink-0 items-center justify-center whitespace-nowrap rounded-md border border-border/50 px-1 py-0 text-[10px] font-mono bg-foreground/15 dark:bg-foreground/10 text-foreground [a&]:hover:bg-foreground/25",tagBadgeClass="inline-flex w-fit shrink-0 items-cen\ +ter justify-center whitespace-nowrap rounded-md border border-border/50 px-1 py-0 text-[10px] font-mono text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground";let parsed=user_derived(()=>ModelsService.parseModelId($$props.modelId)),resolvedShowRaw=user_derived(()=>showRaw()??config$1().showRawModelNames??!1),displayName=user_derived(()=>$$props.aliases&&$$props.aliases.length>0?$$props.aliases[0]:get$3(parsed).modelName??$$props.modelId),remainingAliases=user_derived(()=>$$props. +aliases&&$$props.aliases.length>1?$$props.aliases.slice(1):[]),allTags=user_derived(()=>[...get$3(parsed).tags??[],...$$props.tags??[]]);var fragment=comment$2(),node2=first_child(fragment);{var consequent=$$anchor2=>{TruncatedText($$anchor2,spread_props({get class(){return`font-medium ${className()??""}`},showTooltip:!1,get text(){return $$props.modelId}},()=>rest))},alternate=$$anchor2=>{var span=root_2$6();attribute_effect(span,()=>({class:`flex min-w-0 flex-wrap items-center gap-1 ${className()?? +""}`,...rest}));var span_1=child(span),node_1=child(span_1);{var consequent_1=$$anchor3=>{var text2=text$8();template_effect(()=>set_text(text2,`${get$3(parsed).orgName??""}/`)),append($$anchor3,text2)};if_block(node_1,$$render=>{!hideOrgName()&&get$3(parsed).orgName&&!($$props.aliases&&$$props.aliases.length>0)&&$$render(consequent_1)})}var text_1=sibling(node_1,1,!0);reset(span_1);var node_2=sibling(span_1,2);{var consequent_2=$$anchor3=>{var span_2=root_4();set_class(span_2,1,clsx(badgeClass)); +var text_2=child(span_2);reset(span_2),template_effect(()=>set_text(text_2,`${get$3(parsed).params??""}${get$3(parsed).activatedParams?`-${get$3(parsed).activatedParams}`:""}`)),append($$anchor3,span_2)};if_block(node_2,$$render=>{get$3(parsed).params&&$$render(consequent_2)})}var node_3=sibling(node_2,2);{var consequent_3=$$anchor3=>{var span_3=root_5$3();set_class(span_3,1,clsx(badgeClass));var text_3=child(span_3,!0);reset(span_3),template_effect(()=>set_text(text_3,get$3(parsed).quantization)), +append($$anchor3,span_3)};if_block(node_3,$$render=>{get$3(parsed).quantization&&!hideQuantization()&&$$render(consequent_3)})}var node_4=sibling(node_3,2);{var consequent_4=$$anchor3=>{var fragment_3=comment$2(),node_5=first_child(fragment_3);each(node_5,16,()=>get$3(remainingAliases),alias=>alias,($$anchor4,alias)=>{var span_4=root_7$2();set_class(span_4,1,clsx(badgeClass));var text_4=child(span_4,!0);reset(span_4),template_effect(()=>set_text(text_4,alias)),append($$anchor4,span_4)}),append($$anchor3, +fragment_3)};if_block(node_4,$$render=>{get$3(remainingAliases).length>0&&$$render(consequent_4)})}var node_6=sibling(node_4,2);{var consequent_5=$$anchor3=>{var fragment_4=comment$2(),node_7=first_child(fragment_4);each(node_7,16,()=>get$3(allTags),tag=>tag,($$anchor4,tag)=>{var span_5=root_9$1();set_class(span_5,1,clsx(tagBadgeClass));var text_5=child(span_5,!0);reset(span_5),template_effect(()=>set_text(text_5,tag)),append($$anchor4,span_5)}),append($$anchor3,fragment_4)};if_block(node_6,$$render=>{ +get$3(allTags).length>0&&$$render(consequent_5)})}reset(span),template_effect(()=>set_text(text_1,get$3(displayName))),append($$anchor2,span)};if_block(node2,$$render=>{get$3(resolvedShowRaw)?$$render(consequent):$$render(alternate,-1)})}append($$anchor,fragment),pop()}var root_3$2=from_html("<!> <!>",1),root_8$1=from_html("<!> <!>",1);function ModelBadge($$anchor,$$props){push$1($$props,!0);const badgeContent=$$anchor2=>{BadgeInfo($$anchor2,{get class(){return className()},get onclick(){return $$props. +onclick},icon:$$anchor3=>{Package($$anchor3,{class:"h-3 w-3"})},children:($$anchor3,$$slotProps)=>{var fragment_2=root_3$2(),node2=first_child(fragment_2);{var consequent=$$anchor4=>{ModelId($$anchor4,{get modelId(){return get$3(model)}})};if_block(node2,$$render=>{get$3(model)&&$$render(consequent)})}var node_1=sibling(node2,2);{var consequent_1=$$anchor4=>{{let $0=user_derived(()=>get$3(model)||"");ActionIconCopyToClipboard($$anchor4,{get text(){return get$3($0)},ariaLabel:"Copy model name"})}}; +if_block(node_1,$$render=>{showCopyIcon()&&$$render(consequent_1)})}append($$anchor3,fragment_2)},$$slots:{icon:!0,default:!0}})};let className=prop($$props,"class",3,""),showCopyIcon=prop($$props,"showCopyIcon",3,!1),showTooltip=prop($$props,"showTooltip",3,!1),model=user_derived(()=>$$props.model||modelsStore.singleModelName),isModelMode=user_derived(()=>serverStore.isModelMode),shouldShow=user_derived(()=>get$3(model)&&($$props.model!==void 0||get$3(isModelMode)));var fragment_5=comment$2(),node_2=first_child( +fragment_5);{var consequent_3=$$anchor2=>{var fragment_6=comment$2(),node_3=first_child(fragment_6);{var consequent_2=$$anchor3=>{var fragment_7=comment$2(),node_4=first_child(fragment_7);component(node_4,()=>Root$5,($$anchor4,Tooltip_Root)=>{Tooltip_Root($$anchor4,{children:($$anchor5,$$slotProps)=>{var fragment_8=root_8$1(),node_5=first_child(fragment_8);component(node_5,()=>Tooltip_trigger,($$anchor6,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor6,{children:($$anchor7,$$slotProps2)=>{badgeContent( +$$anchor7)},$$slots:{default:!0}})});var node_6=sibling(node_5,2);component(node_6,()=>Tooltip_content,($$anchor6,Tooltip_Content)=>{Tooltip_Content($$anchor6,{children:($$anchor7,$$slotProps2)=>{next$1();var text2=text$8();template_effect(()=>set_text(text2,$$props.onclick?"Click for model details":get$3(model))),append($$anchor7,text2)},$$slots:{default:!0}})}),append($$anchor5,fragment_8)},$$slots:{default:!0}})}),append($$anchor3,fragment_7)},alternate=$$anchor3=>{badgeContent($$anchor3)};if_block( +node_3,$$render=>{showTooltip()?$$render(consequent_2):$$render(alternate,-1)})}append($$anchor2,fragment_6)};if_block(node_2,$$render=>{get$3(shouldShow)&&$$render(consequent_3)})}append($$anchor,fragment_5),pop()}var root_1$3=from_html('<div class="px-2 py-3 text-center text-sm text-muted-foreground"> </div>'),root_2$5=from_html("<!> <!>",1),root$7=from_html('<div class="sticky top-0 z-10 mb-2 bg-popover p-1 pt-2"><!></div> <div class="overflow-y-auto"><!> <!></div> <!>',1);function DropdownMenuSearchable($$anchor,$$props){ +push$1($$props,!0);let placeholder=prop($$props,"placeholder",3,"Search..."),searchValue=prop($$props,"searchValue",15,""),emptyMessage=prop($$props,"emptyMessage",3,"No items found"),isEmpty=prop($$props,"isEmpty",3,!1);var fragment=root$7(),div=first_child(fragment),node2=child(div);SearchInput(node2,{get placeholder(){return placeholder()},get onInput(){return $$props.onSearchChange},get onKeyDown(){return $$props.onSearchKeyDown},get value(){return searchValue()},set value($$value){searchValue( +$$value)}}),reset(div);var div_1=sibling(div,2),node_1=child(div_1);snippet(node_1,()=>$$props.children);var node_2=sibling(node_1,2);{var consequent=$$anchor2=>{var div_2=root_1$3(),text2=child(div_2,!0);reset(div_2),template_effect(()=>set_text(text2,emptyMessage())),append($$anchor2,div_2)};if_block(node_2,$$render=>{isEmpty()&&$$render(consequent)})}reset(div_1);var node_3=sibling(div_1,2);{var consequent_1=$$anchor2=>{var fragment_1=root_2$5(),node_4=first_child(fragment_1);component(node_4, ()=>Dropdown_menu_separator,($$anchor3,DropdownMenu_Separator)=>{DropdownMenu_Separator($$anchor3,{})});var node_5=sibling(node_4,2);snippet(node_5,()=>$$props.footer),append($$anchor2,fragment_1)};if_block(node_3,$$render=>{$$props.footer&&$$render(consequent_1)})}append($$anchor,fragment),pop()}const iconComponent=($$anchor,IconComponent=noop$3,className=noop$3)=>{var fragment=comment$2(),node2=first_child(fragment);component(node2,IconComponent,($$anchor2,IconComponent_1)=>{IconComponent_1($$anchor2, -{get class(){return className()}})}),append($$anchor,fragment)};var root_6$1=from_html('<!> <span class="sr-only"> </span>',1),root_7$1=from_html("<p> </p>"),root_5$1=from_html("<!> <!>",1),root_12=from_html('<div class="flex items-center gap-2"><!> </div> <!>',1),root_10$1=from_html("<!> <!>",1),root_2$3=from_html("<!> <!>",1);function DropdownMenuActions($$anchor,$$props){push$1($$props,!0);let triggerClass=prop($$props,"triggerClass",3,""),align=prop($$props,"align",3,"end"),open2=prop($$props, -"open",15,!1);var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Root$2,($$anchor2,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor2,{get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_2=root_2$3(),node_2=first_child(fragment_2);component(node_2,()=>Dropdown_menu_trigger,($$anchor4,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor4,{get class(){return`flex h-6 w-6 cursor-pointer items-center justify-center r\ +{get class(){return className()}})}),append($$anchor,fragment)};var root_6$2=from_html('<!> <span class="sr-only"> </span>',1),root_7$1=from_html("<p> </p>"),root_5$2=from_html("<!> <!>",1),root_12=from_html('<div class="flex items-center gap-2"><!> </div> <!>',1),root_10=from_html("<!> <!>",1),root_2$4=from_html("<!> <!>",1);function DropdownMenuActions($$anchor,$$props){push$1($$props,!0);let triggerClass=prop($$props,"triggerClass",3,""),align=prop($$props,"align",3,"end"),open2=prop($$props, +"open",15,!1);var fragment_1=comment$2(),node_1=first_child(fragment_1);component(node_1,()=>Root$2,($$anchor2,DropdownMenu_Root)=>{DropdownMenu_Root($$anchor2,{get open(){return open2()},set open($$value){open2($$value)},children:($$anchor3,$$slotProps)=>{var fragment_2=root_2$4(),node_2=first_child(fragment_2);component(node_2,()=>Dropdown_menu_trigger,($$anchor4,DropdownMenu_Trigger)=>{DropdownMenu_Trigger($$anchor4,{get class(){return`flex h-6 w-6 cursor-pointer items-center justify-center r\ ounded-md p-0 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground ${triggerClass()??""}`},onclick:e=>e.stopPropagation(),children:($$anchor5,$$slotProps2)=>{var fragment_3=comment$2(),node_3=first_child(fragment_3);{var consequent=$$anchor6=>{var fragment_4=comment$2(),node_4=first_child( -fragment_4);component(node_4,()=>Root$5,($$anchor7,Tooltip_Root)=>{Tooltip_Root($$anchor7,{children:($$anchor8,$$slotProps3)=>{var fragment_5=root_5$1(),node_5=first_child(fragment_5);component(node_5,()=>Tooltip_trigger,($$anchor9,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor9,{children:($$anchor10,$$slotProps4)=>{var fragment_6=root_6$1(),node_6=first_child(fragment_6);iconComponent(node_6,()=>$$props.triggerIcon,()=>"h-3 w-3");var span=sibling(node_6,2),text2=child(span,!0);reset(span),template_effect( +fragment_4);component(node_4,()=>Root$5,($$anchor7,Tooltip_Root)=>{Tooltip_Root($$anchor7,{children:($$anchor8,$$slotProps3)=>{var fragment_5=root_5$2(),node_5=first_child(fragment_5);component(node_5,()=>Tooltip_trigger,($$anchor9,Tooltip_Trigger)=>{Tooltip_Trigger($$anchor9,{children:($$anchor10,$$slotProps4)=>{var fragment_6=root_6$2(),node_6=first_child(fragment_6);iconComponent(node_6,()=>$$props.triggerIcon,()=>"h-3 w-3");var span=sibling(node_6,2),text2=child(span,!0);reset(span),template_effect( ()=>set_text(text2,$$props.triggerTooltip)),append($$anchor10,fragment_6)},$$slots:{default:!0}})});var node_7=sibling(node_5,2);component(node_7,()=>Tooltip_content,($$anchor9,Tooltip_Content)=>{Tooltip_Content($$anchor9,{children:($$anchor10,$$slotProps4)=>{var p2=root_7$1(),text_1=child(p2,!0);reset(p2),template_effect(()=>set_text(text_1,$$props.triggerTooltip)),append($$anchor10,p2)},$$slots:{default:!0}})}),append($$anchor8,fragment_5)},$$slots:{default:!0}})}),append($$anchor6,fragment_4)}, -alternate=$$anchor6=>{iconComponent($$anchor6,()=>$$props.triggerIcon,()=>"h-3 w-3")};if_block(node_3,$$render=>{$$props.triggerTooltip?$$render(consequent):$$render(alternate,!1)})}append($$anchor5,fragment_3)},$$slots:{default:!0}})});var node_8=sibling(node_2,2);component(node_8,()=>Dropdown_menu_content,($$anchor4,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor4,{get align(){return align()},class:"z-[999999] w-48",children:($$anchor5,$$slotProps2)=>{var fragment_8=comment$2(),node_9=first_child( -fragment_8);each(node_9,19,()=>$$props.actions,action2=>action2.label,($$anchor6,action2,index2)=>{var fragment_9=root_10$1(),node_10=first_child(fragment_9);{var consequent_1=$$anchor7=>{var fragment_10=comment$2(),node_11=first_child(fragment_10);component(node_11,()=>Dropdown_menu_separator,($$anchor8,DropdownMenu_Separator)=>{DropdownMenu_Separator($$anchor8,{})}),append($$anchor7,fragment_10)};if_block(node_10,$$render=>{get$4(action2).separator&&get$4(index2)>0&&$$render(consequent_1)})}var node_12=sibling( -node_10,2);component(node_12,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor7,{get onclick(){return get$4(action2).onclick},get variant(){return get$4(action2).variant},get disabled(){return get$4(action2).disabled},class:"flex items-center justify-between hover:[&>kbd]:opacity-100",children:($$anchor8,$$slotProps3)=>{var fragment_11=root_12(),div=first_child(fragment_11),node_13=child(div);iconComponent(node_13,()=>get$4(action2).icon,()=>`h-4 w-4 ${get$4(action2). -variant==="destructive"?"text-destructive":""}`);var text_2=sibling(node_13);reset(div);var node_14=sibling(div,2);{var consequent_2=$$anchor9=>{KeyboardShortcutInfo($$anchor9,{get keys(){return get$4(action2).shortcut},get variant(){return get$4(action2).variant}})};if_block(node_14,$$render=>{get$4(action2).shortcut&&$$render(consequent_2)})}template_effect(()=>set_text(text_2,` ${get$4(action2).label??""}`)),append($$anchor8,fragment_11)},$$slots:{default:!0}})}),append($$anchor6,fragment_9)}), -append($$anchor5,fragment_8)},$$slots:{default:!0}})}),append($$anchor3,fragment_2)},$$slots:{default:!0}})}),append($$anchor,fragment_1),pop()}var root_2$2=from_html("<!> ",1),root_1$2=from_html("<!> <!>",1),root_6=from_html("<!> ",1),root$4=from_html('<div><div class="flex items-center space-x-2"><div></div> <span class="text-sm text-muted-foreground"> </span></div> <!> <!></div>');function ServerStatus($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),showActions=prop( -$$props,"showActions",3,!1),error2=user_derived(serverError),loading=user_derived(serverLoading),model=user_derived(singleModelName),serverData=user_derived(serverProps);function getStatusColor(){return get$4(loading)?"bg-yellow-500":get$4(error2)?"bg-red-500":get$4(serverData)?"bg-green-500":"bg-gray-500"}function getStatusText(){return get$4(loading)?"Connecting...":get$4(error2)?"Connection Error":get$4(serverData)?"Connected":"Unknown"}var div=root$4(),div_1=child(div),div_2=child(div_1),span=sibling( -div_2,2),text2=child(span,!0);reset(span),reset(div_1);var node2=sibling(div_1,2);{var consequent_1=$$anchor2=>{var fragment=root_1$2(),node_1=first_child(fragment);Badge(node_1,{variant:"outline",class:"text-xs",children:($$anchor3,$$slotProps)=>{var fragment_1=root_2$2(),node_2=first_child(fragment_1);Server(node_2,{class:"mr-1 h-3 w-3"});var text_1=sibling(node_2);template_effect(()=>set_text(text_1,` ${get$4(model)||"Unknown Model"}`)),append($$anchor3,fragment_1)},$$slots:{default:!0}});var node_3=sibling( -node_1,2);{var consequent=$$anchor3=>{Badge($$anchor3,{variant:"secondary",class:"text-xs",children:($$anchor4,$$slotProps)=>{next$1();var text_2=text$8();template_effect($0=>set_text(text_2,`ctx: ${$0??""}`),[()=>get$4(serverData).default_generation_settings.n_ctx.toLocaleString()]),append($$anchor4,text_2)},$$slots:{default:!0}})};if_block(node_3,$$render=>{get$4(serverData)?.default_generation_settings?.n_ctx&&$$render(consequent)})}append($$anchor2,fragment)};if_block(node2,$$render=>{get$4( -serverData)&&!get$4(error2)&&$$render(consequent_1)})}var node_4=sibling(node2,2);{var consequent_2=$$anchor2=>{Button($$anchor2,{variant:"outline",size:"sm",class:"text-destructive",children:($$anchor3,$$slotProps)=>{var fragment_5=root_6(),node_5=first_child(fragment_5);Triangle_alert(node_5,{class:"h-4 w-4"});var text_3=sibling(node_5);template_effect(()=>set_text(text_3,` ${get$4(error2)??""}`)),append($$anchor3,fragment_5)},$$slots:{default:!0}})};if_block(node_4,$$render=>{showActions()&&get$4( -error2)&&$$render(consequent_2)})}reset(div),template_effect(($0,$1)=>{set_class(div,1,`flex items-center space-x-3 ${className()??""}`),set_class(div_2,1,`h-2 w-2 rounded-full ${$0??""}`),set_text(text2,$1)},[getStatusColor,getStatusText]),append($$anchor,div),pop()}var root_2$1=from_html("<!> Enter API Key",1),root_1$1=from_html('<div class="mb-4"><!></div>'),root_5=from_html('<div class="absolute top-1/2 right-3 -translate-y-1/2"><!></div>'),root_7=from_html('<div class="absolute top-1/2 righ\ -t-3 -translate-y-1/2"><!></div>'),root_9=from_html('<div class="absolute top-1/2 right-3 -translate-y-1/2"><!></div>'),root_10=from_html('<p class="text-sm text-destructive"> </p>'),root_11=from_html('<p class="text-sm text-green-600">✓ API key validated successfully! Connecting...</p>'),root_13=from_html("<!> Validating...",1),root_3$1=from_html('<div class="mb-4 space-y-3 text-left"><div class="space-y-2"><!> <div class="relative"><!> <!></div> <!> <!></div> <div class="flex gap-2"><!> <!></\ -div></div>'),root_20=from_html("<!> Connecting...",1),root_21=from_html("<!> Retry Connection",1),root_18=from_html("<div><!></div>"),root_22=from_html('<div class="mt-4 text-left"><details class="text-sm"><summary class="cursor-pointer text-muted-foreground hover:text-foreground">Troubleshooting</summary> <div class="mt-2 space-y-3 text-xs text-muted-foreground"><div class="space-y-2"><p class="mb-4 font-medium">Start the llama-server:</p> <div class="rounded bg-muted/50 px-2 py-1 font-mono tex\ -t-xs"><p>llama-server -hf ggml-org/gemma-3-4b-it-GGUF</p></div> <p>or</p> <div class="rounded bg-muted/50 px-2 py-1 font-mono text-xs"><p class="mt-1">llama-server -m locally-stored-model.gguf</p></div></div> <ul class="list-disc space-y-1 pl-4"><li>Check that the server is accessible at the correct URL</li> <li>Verify your network connection</li> <li>Check server logs for any error messages</li></ul></div></details></div>'),root$3=from_html('<div><div class="w-full max-w-md px-4 text-center"><d\ -iv class="mb-6"><div class="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-destructive/10"><!></div> <h2 class="mb-2 text-xl font-semibold">Server Connection Error</h2> <p class="mb-4 text-sm text-muted-foreground"> </p></div> <!> <!> <!> <!></div></div>');function ServerErrorSplash($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),showRetry=prop($$props,"showRetry",3,!0),showTroubleshooting=prop($$props,"showTroubleshooting",3,!1),isServerLoading=user_derived( -serverLoading),isAccessDeniedError=user_derived(()=>$$props.error.toLowerCase().includes("access denied")||$$props.error.toLowerCase().includes("invalid api key")||$$props.error.toLowerCase().includes("unauthorized")||$$props.error.toLowerCase().includes("401")||$$props.error.toLowerCase().includes("403")),apiKeyInput=state$1(""),showApiKeyInput=state$1(!1),apiKeyState=state$1("idle"),apiKeyError=state$1("");function handleRetryConnection(){$$props.onRetry?$$props.onRetry():serverStore.fetch()}function handleShowApiKeyInput(){ -set$1(showApiKeyInput,!0);const currentConfig=config$1();set$1(apiKeyInput,currentConfig.apiKey?.toString()||"",!0)}async function handleSaveApiKey(){if(get$4(apiKeyInput).trim()){set$1(apiKeyState,"validating"),set$1(apiKeyError,"");try{settingsStore.updateConfig("apiKey",get$4(apiKeyInput).trim());const response=await fetch(`${base}/props`,{headers:{"Content-Type":"application/json",Authorization:`Bearer ${get$4(apiKeyInput).trim()}`}});response.ok?(set$1(apiKeyState,"success"),setTimeout(()=>{ +alternate=$$anchor6=>{iconComponent($$anchor6,()=>$$props.triggerIcon,()=>"h-3 w-3")};if_block(node_3,$$render=>{$$props.triggerTooltip?$$render(consequent):$$render(alternate,-1)})}append($$anchor5,fragment_3)},$$slots:{default:!0}})});var node_8=sibling(node_2,2);component(node_8,()=>Dropdown_menu_content,($$anchor4,DropdownMenu_Content)=>{DropdownMenu_Content($$anchor4,{get align(){return align()},class:"z-[999999] w-48",children:($$anchor5,$$slotProps2)=>{var fragment_8=comment$2(),node_9=first_child( +fragment_8);each(node_9,19,()=>$$props.actions,action2=>action2.label,($$anchor6,action2,index2)=>{var fragment_9=root_10(),node_10=first_child(fragment_9);{var consequent_1=$$anchor7=>{var fragment_10=comment$2(),node_11=first_child(fragment_10);component(node_11,()=>Dropdown_menu_separator,($$anchor8,DropdownMenu_Separator)=>{DropdownMenu_Separator($$anchor8,{})}),append($$anchor7,fragment_10)};if_block(node_10,$$render=>{get$3(action2).separator&&get$3(index2)>0&&$$render(consequent_1)})}var node_12=sibling( +node_10,2);component(node_12,()=>Dropdown_menu_item,($$anchor7,DropdownMenu_Item)=>{DropdownMenu_Item($$anchor7,{get onclick(){return get$3(action2).onclick},get variant(){return get$3(action2).variant},get disabled(){return get$3(action2).disabled},class:"flex items-center justify-between hover:[&>kbd]:opacity-100",children:($$anchor8,$$slotProps3)=>{var fragment_11=root_12(),div=first_child(fragment_11),node_13=child(div);iconComponent(node_13,()=>get$3(action2).icon,()=>`h-4 w-4 ${get$3(action2). +variant==="destructive"?"text-destructive":""}`);var text_2=sibling(node_13);reset(div);var node_14=sibling(div,2);{var consequent_2=$$anchor9=>{KeyboardShortcutInfo($$anchor9,{get keys(){return get$3(action2).shortcut},get variant(){return get$3(action2).variant}})};if_block(node_14,$$render=>{get$3(action2).shortcut&&$$render(consequent_2)})}template_effect(()=>set_text(text_2,` ${get$3(action2).label??""}`)),append($$anchor8,fragment_11)},$$slots:{default:!0}})}),append($$anchor6,fragment_9)}), +append($$anchor5,fragment_8)},$$slots:{default:!0}})}),append($$anchor3,fragment_2)},$$slots:{default:!0}})}),append($$anchor,fragment_1),pop()}function circIn(t){return 1-Math.sqrt(1-t*t)}var root_2$3=from_html("<div><!></div>"),root$6=from_html('<div></div> <aside><div class="mt-12 flex flex-col items-center gap-1"></div></aside>',1);function DesktopIconStrip($$anchor,$$props){push$1($$props,!0);let sidebarOpen=prop($$props,"sidebarOpen",3,!1);const{handleKeydown}=useKeyboardShortcuts({activateSearchMode:()=>$$props. +onSearchClick()});let initialized=state$1(!1),showIcons=user_derived(()=>!sidebarOpen());set$1(showIcons,!1),onMount$1(()=>{set$1(showIcons,!sidebarOpen()),setTimeout(()=>{set$1(initialized,!0)},ICON_STRIP_TRANSITION_DELAY_MULTIPLIER*SIDEBAR_ACTIONS_ITEMS.length)});var fragment=root$6();event("keydown",$window,handleKeydown);var div=first_child(fragment),aside=sibling(div,2),div_1=child(aside);each(div_1,23,()=>SIDEBAR_ACTIONS_ITEMS,item=>item.tooltip,($$anchor2,item,i)=>{const onclick=user_derived( +()=>get$3(item).route?()=>goto(get$3(item).route):$$props.onSearchClick),isActive=user_derived(()=>get$3(item).activeRouteId?page$1.route.id===get$3(item).activeRouteId:get$3(item).activeRoutePrefix?!!page$1.route.id?.startsWith(get$3(item).activeRoutePrefix):!1);var fragment_1=comment$2(),node2=first_child(fragment_1);{var consequent=$$anchor3=>{var div_2=root_2$3(),node_1=child(div_2);{let $0=user_derived(()=>get$3(isActive)?"bg-accent text-accent-foreground":"");ActionIcon(node_1,{get icon(){ +return get$3(item).icon},get tooltip(){return get$3(item).tooltip},get tooltipSide(){return TooltipSide.RIGHT},size:"lg",iconSize:"h-4 w-4",get class(){return`h-9 w-9 rounded-full hover:bg-accent! ${get$3($0)??""}`},get onclick(){return get$3(onclick)}})}reset(div_2),transition(1,div_2,()=>fade,()=>({duration:ICON_STRIP_TRANSITION_DURATION,delay:get$3(initialized)?0:ICON_STRIP_TRANSITION_DELAY_MULTIPLIER+get$3(i)*ICON_STRIP_TRANSITION_DELAY_MULTIPLIER,easing:circIn})),append($$anchor3,div_2)};if_block( +node2,$$render=>{get$3(showIcons)&&$$render(consequent)})}append($$anchor2,fragment_1)}),reset(div_1),reset(aside),template_effect(()=>{set_class(div,1,`hidden shrink-0 transition-[width] duration-200 ease-linear md:block ${sidebarOpen()?"w-0":"w-[calc(var(--sidebar-width-icon)+1.5rem)]"}`),set_class(aside,1,`fixed top-0 bottom-0 left-0 z-10 hidden w-[calc(var(--sidebar-width-icon)+1.5rem)] flex-col items-center justify-between py-3 transition-opacity duration-200 ease-linear md:flex ${sidebarOpen()? +"pointer-events-none opacity-0":"opacity-100"}`)}),append($$anchor,fragment),pop()}var root_2$2=from_html("<!> ",1),root_1$2=from_html("<!> <!>",1),root_6$1=from_html("<!> ",1),root$5=from_html('<div><div class="flex items-center space-x-2"><div></div> <span class="text-sm text-muted-foreground"> </span></div> <!> <!></div>');function ServerStatus($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),showActions=prop($$props,"showActions",3,!1),error2=user_derived(serverError), +loading=user_derived(serverLoading),model=user_derived(singleModelName),serverData=user_derived(serverProps);function getStatusColor(){return get$3(loading)?"bg-yellow-500":get$3(error2)?"bg-red-500":get$3(serverData)?"bg-green-500":"bg-gray-500"}function getStatusText(){return get$3(loading)?"Connecting...":get$3(error2)?"Connection Error":get$3(serverData)?"Connected":"Unknown"}var div=root$5(),div_1=child(div),div_2=child(div_1),span=sibling(div_2,2),text2=child(span,!0);reset(span),reset(div_1); +var node2=sibling(div_1,2);{var consequent_1=$$anchor2=>{var fragment=root_1$2(),node_1=first_child(fragment);Badge(node_1,{variant:"outline",class:"text-xs",children:($$anchor3,$$slotProps)=>{var fragment_1=root_2$2(),node_2=first_child(fragment_1);Server(node_2,{class:"mr-1 h-3 w-3"});var text_1=sibling(node_2);template_effect(()=>set_text(text_1,` ${(get$3(model)||"Unknown Model")??""}`)),append($$anchor3,fragment_1)},$$slots:{default:!0}});var node_3=sibling(node_1,2);{var consequent=$$anchor3=>{ +Badge($$anchor3,{variant:"secondary",class:"text-xs",children:($$anchor4,$$slotProps)=>{next$1();var text_2=text$8();template_effect($0=>set_text(text_2,`ctx: ${$0??""}`),[()=>get$3(serverData).default_generation_settings.n_ctx.toLocaleString()]),append($$anchor4,text_2)},$$slots:{default:!0}})};if_block(node_3,$$render=>{get$3(serverData)?.default_generation_settings?.n_ctx&&$$render(consequent)})}append($$anchor2,fragment)};if_block(node2,$$render=>{get$3(serverData)&&!get$3(error2)&&$$render( +consequent_1)})}var node_4=sibling(node2,2);{var consequent_2=$$anchor2=>{Button($$anchor2,{variant:"outline",size:"sm",class:"text-destructive",children:($$anchor3,$$slotProps)=>{var fragment_5=root_6$1(),node_5=first_child(fragment_5);Triangle_alert(node_5,{class:"h-4 w-4"});var text_3=sibling(node_5);template_effect(()=>set_text(text_3,` ${get$3(error2)??""}`)),append($$anchor3,fragment_5)},$$slots:{default:!0}})};if_block(node_4,$$render=>{showActions()&&get$3(error2)&&$$render(consequent_2)})} +reset(div),template_effect(($0,$1)=>{set_class(div,1,`flex items-center space-x-3 ${className()??""}`),set_class(div_2,1,`h-2 w-2 rounded-full ${$0??""}`),set_text(text2,$1)},[()=>getStatusColor(),()=>getStatusText()]),append($$anchor,div),pop()}var root_2$1=from_html("<!> Enter API Key",1),root_1$1=from_html('<div class="mb-4"><!></div>'),root_5$1=from_html('<div class="absolute top-1/2 right-3 -translate-y-1/2"><!></div>'),root_6=from_html('<div class="absolute top-1/2 right-3 -translate-y-1/2\ +"><!></div>'),root_7=from_html('<div class="absolute top-1/2 right-3 -translate-y-1/2"><!></div>'),root_8=from_html('<p class="text-sm text-destructive"> </p>'),root_9=from_html('<p class="text-sm text-green-600">✓ API key validated successfully! Connecting...</p>'),root_11=from_html("<!> Validating...",1),root_3$1=from_html('<div class="mb-4 space-y-3 text-left"><div class="space-y-2"><!> <div class="relative"><!> <!></div> <!> <!></div> <div class="flex gap-2"><!> <!></div></div>'),root_17=from_html( +"<!> Connecting...",1),root_18=from_html("<!> Retry Connection",1),root_15=from_html("<div><!></div>"),root_19=from_html('<div class="mt-4 text-left"><details class="text-sm"><summary class="cursor-pointer text-muted-foreground hover:text-foreground">Troubleshooting</summary> <div class="mt-2 space-y-3 text-xs text-muted-foreground"><div class="space-y-2"><p class="mb-4 font-medium">Start the llama-server:</p> <div class="rounded bg-muted/50 px-2 py-1 font-mono text-xs"><p>llama-server -hf ggml-\ +org/gemma-3-4b-it-GGUF</p></div> <p>or</p> <div class="rounded bg-muted/50 px-2 py-1 font-mono text-xs"><p class="mt-1">llama-server -m locally-stored-model.gguf</p></div></div> <ul class="list-disc space-y-1 pl-4"><li>Check that the server is accessible at the correct URL</li> <li>Verify your network connection</li> <li>Check server logs for any error messages</li></ul></div></details></div>'),root$4=from_html('<div><div class="w-full max-w-md px-4 text-center"><div class="mb-6"><div class="mx-\ +auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-destructive/10"><!></div> <h2 class="mb-2 text-xl font-semibold">Server Connection Error</h2> <p class="mb-4 text-sm text-muted-foreground"> </p></div> <!> <!> <!> <!></div></div>');function ServerErrorSplash($$anchor,$$props){push$1($$props,!0);let className=prop($$props,"class",3,""),showRetry=prop($$props,"showRetry",3,!0),showTroubleshooting=prop($$props,"showTroubleshooting",3,!1),isServerLoading=user_derived(serverLoading), +isAccessDeniedError=user_derived(()=>$$props.error.toLowerCase().includes("access denied")||$$props.error.toLowerCase().includes("invalid api key")||$$props.error.toLowerCase().includes("unauthorized")||$$props.error.toLowerCase().includes("401")||$$props.error.toLowerCase().includes("403")),apiKeyInput=state$1(""),showApiKeyInput=state$1(!1),apiKeyState=state$1("idle"),apiKeyError=state$1("");function handleRetryConnection(){$$props.onRetry?$$props.onRetry():serverStore.fetch()}function handleShowApiKeyInput(){ +set$1(showApiKeyInput,!0);const currentConfig=config$1();set$1(apiKeyInput,currentConfig.apiKey?.toString()||"",!0)}async function handleSaveApiKey(){if(get$3(apiKeyInput).trim()){set$1(apiKeyState,"validating"),set$1(apiKeyError,"");try{settingsStore.updateConfig("apiKey",get$3(apiKeyInput).trim());const response=await fetch(`${base}/props`,{headers:{"Content-Type":"application/json",Authorization:`Bearer ${get$3(apiKeyInput).trim()}`}});response.ok?(set$1(apiKeyState,"success"),setTimeout(()=>{ goto("#/")},1e3)):(set$1(apiKeyState,"error"),response.status===401||response.status===403?set$1(apiKeyError,"Invalid API key - please check and try again"):set$1(apiKeyError,`Authentication failed (${response.status})`),setTimeout(()=>{set$1(apiKeyState,"idle")},3e3))}catch(error2){set$1(apiKeyState,"error"),error2 instanceof Error?error2.message.includes("fetch")?set$1(apiKeyError,"Cannot connect to server - check if server is running"):set$1(apiKeyError,error2.message,!0):set$1(apiKeyError,"C\ -onnection error - please try again"),setTimeout(()=>{set$1(apiKeyState,"idle")},3e3)}}}function handleApiKeyKeydown(event2){event2.key===KeyboardKey.ENTER&&handleSaveApiKey()}var div=root$3(),div_1=child(div),div_2=child(div_1),div_3=child(div_2),node2=child(div_3);Triangle_alert(node2,{class:"h-8 w-8 text-destructive"}),reset(div_3);var p2=sibling(div_3,4),text2=child(p2,!0);reset(p2),reset(div_2);var node_1=sibling(div_2,2);{var consequent=$$anchor2=>{var div_4=root_1$1(),node_2=child(div_4);Button( -node_2,{onclick:handleShowApiKeyInput,variant:"outline",class:"w-full",children:($$anchor3,$$slotProps)=>{var fragment=root_2$1(),node_3=first_child(fragment);Key(node_3,{class:"h-4 w-4"}),next$1(),append($$anchor3,fragment)},$$slots:{default:!0}}),reset(div_4),transition(1,div_4,()=>fly,()=>({y:10,duration:300,delay:200})),append($$anchor2,div_4)};if_block(node_1,$$render=>{get$4(isAccessDeniedError)&&!get$4(showApiKeyInput)&&$$render(consequent)})}var node_4=sibling(node_1,2);{var consequent_8=$$anchor2=>{ -var div_5=root_3$1(),div_6=child(div_5),node_5=child(div_6);Label(node_5,{for:"api-key-input",class:"text-sm font-medium",children:($$anchor3,$$slotProps)=>{next$1();var text_1=text$8("API Key");append($$anchor3,text_1)},$$slots:{default:!0}});var div_7=sibling(node_5,2),node_6=child(div_7);{let $0=user_derived(()=>get$4(apiKeyState)==="error"?"border-destructive":get$4(apiKeyState)==="success"?"border-green-500":""),$1=user_derived(()=>get$4(apiKeyState)==="validating");Input(node_6,{id:"api-ke\ -y-input",placeholder:"Enter your API key...",onkeydown:handleApiKeyKeydown,get class(){return`w-full pr-10 ${get$4($0)??""}`},get disabled(){return get$4($1)},get value(){return get$4(apiKeyInput)},set value($$value){set$1(apiKeyInput,$$value,!0)}})}var node_7=sibling(node_6,2);{var consequent_1=$$anchor3=>{var div_8=root_5(),node_8=child(div_8);Refresh_cw(node_8,{class:"h-4 w-4 animate-spin text-muted-foreground"}),reset(div_8),append($$anchor3,div_8)},alternate_1=$$anchor3=>{var fragment_1=comment$2(), -node_9=first_child(fragment_1);{var consequent_2=$$anchor4=>{var div_9=root_7(),node_10=child(div_9);Circle_check_big(node_10,{class:"h-4 w-4 text-green-500"}),reset(div_9),transition(1,div_9,()=>scale,()=>({duration:200,start:.8})),append($$anchor4,div_9)},alternate=$$anchor4=>{var fragment_2=comment$2(),node_11=first_child(fragment_2);{var consequent_3=$$anchor5=>{var div_10=root_9(),node_12=child(div_10);Circle_x(node_12,{class:"h-4 w-4 text-destructive"}),reset(div_10),transition(1,div_10,()=>scale, -()=>({duration:200,start:.8})),append($$anchor5,div_10)};if_block(node_11,$$render=>{get$4(apiKeyState)==="error"&&$$render(consequent_3)},!0)}append($$anchor4,fragment_2)};if_block(node_9,$$render=>{get$4(apiKeyState)==="success"?$$render(consequent_2):$$render(alternate,!1)},!0)}append($$anchor3,fragment_1)};if_block(node_7,$$render=>{get$4(apiKeyState)==="validating"?$$render(consequent_1):$$render(alternate_1,!1)})}reset(div_7);var node_13=sibling(div_7,2);{var consequent_4=$$anchor3=>{var p_1=root_10(), -text_2=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text_2,get$4(apiKeyError))),transition(1,p_1,()=>fly,()=>({y:-10,duration:200})),append($$anchor3,p_1)};if_block(node_13,$$render=>{get$4(apiKeyError)&&$$render(consequent_4)})}var node_14=sibling(node_13,2);{var consequent_5=$$anchor3=>{var p_2=root_11();transition(1,p_2,()=>fly,()=>({y:-10,duration:200})),append($$anchor3,p_2)};if_block(node_14,$$render=>{get$4(apiKeyState)==="success"&&$$render(consequent_5)})}reset(div_6);var div_11=sibling( -div_6,2),node_15=child(div_11);{let $0=user_derived(()=>!get$4(apiKeyInput).trim()||get$4(apiKeyState)==="validating"||get$4(apiKeyState)==="success");Button(node_15,{onclick:handleSaveApiKey,get disabled(){return get$4($0)},class:"flex-1",children:($$anchor3,$$slotProps)=>{var fragment_3=comment$2(),node_16=first_child(fragment_3);{var consequent_6=$$anchor4=>{var fragment_4=root_13(),node_17=first_child(fragment_4);Refresh_cw(node_17,{class:"h-4 w-4 animate-spin"}),next$1(),append($$anchor4,fragment_4)}, -alternate_3=$$anchor4=>{var fragment_5=comment$2(),node_18=first_child(fragment_5);{var consequent_7=$$anchor5=>{var text_3=text$8("Success!");append($$anchor5,text_3)},alternate_2=$$anchor5=>{var text_4=text$8("Save & Retry");append($$anchor5,text_4)};if_block(node_18,$$render=>{get$4(apiKeyState)==="success"?$$render(consequent_7):$$render(alternate_2,!1)},!0)}append($$anchor4,fragment_5)};if_block(node_16,$$render=>{get$4(apiKeyState)==="validating"?$$render(consequent_6):$$render(alternate_3, -!1)})}append($$anchor3,fragment_3)},$$slots:{default:!0}})}var node_19=sibling(node_15,2);{let $0=user_derived(()=>get$4(apiKeyState)==="validating");Button(node_19,{onclick:()=>{set$1(showApiKeyInput,!1),set$1(apiKeyState,"idle"),set$1(apiKeyError,"")},variant:"outline",class:"flex-1",get disabled(){return get$4($0)},children:($$anchor3,$$slotProps)=>{next$1();var text_5=text$8("Cancel");append($$anchor3,text_5)},$$slots:{default:!0}})}reset(div_11),reset(div_5),transition(1,div_5,()=>fly,()=>({ -y:10,duration:300,delay:200})),append($$anchor2,div_5)};if_block(node_4,$$render=>{get$4(showApiKeyInput)&&$$render(consequent_8)})}var node_20=sibling(node_4,2);{var consequent_10=$$anchor2=>{var div_12=root_18(),node_21=child(div_12);Button(node_21,{onclick:handleRetryConnection,get disabled(){return get$4(isServerLoading)},class:"w-full",children:($$anchor3,$$slotProps)=>{var fragment_6=comment$2(),node_22=first_child(fragment_6);{var consequent_9=$$anchor4=>{var fragment_7=root_20(),node_23=first_child( -fragment_7);Refresh_cw(node_23,{class:"h-4 w-4 animate-spin"}),next$1(),append($$anchor4,fragment_7)},alternate_4=$$anchor4=>{var fragment_8=root_21(),node_24=first_child(fragment_8);Refresh_cw(node_24,{class:"h-4 w-4"}),next$1(),append($$anchor4,fragment_8)};if_block(node_22,$$render=>{get$4(isServerLoading)?$$render(consequent_9):$$render(alternate_4,!1)})}append($$anchor3,fragment_6)},$$slots:{default:!0}}),reset(div_12),transition(1,div_12,()=>fly,()=>({y:10,duration:300,delay:200})),append( -$$anchor2,div_12)};if_block(node_20,$$render=>{showRetry()&&$$render(consequent_10)})}var node_25=sibling(node_20,2);{var consequent_11=$$anchor2=>{var div_13=root_22();transition(1,div_13,()=>fly,()=>({y:10,duration:300,delay:400})),append($$anchor2,div_13)};if_block(node_25,$$render=>{showTroubleshooting()&&$$render(consequent_11)})}reset(div_1),reset(div),template_effect(()=>{set_class(div,1,`flex h-full items-center justify-center ${className()??""}`),set_text(text2,$$props.error)}),transition( -1,div_2,()=>fade,()=>({duration:300})),append($$anchor,div),pop()}var root$2=from_html('<div><div class="text-center"><div class="mb-4"><div class="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-muted"><!></div> <h2 class="mb-2 text-xl font-semibold">Connecting to Server</h2> <p class="text-sm text-muted-foreground"> </p></div> <div class="mt-4"><!></div></div></div>');function ServerLoadingSplash($$anchor,$$props){let className=prop($$props,"class",3,""),message=prop($$props, -"message",3,"Initializing connection to llama.cpp server...");var div=root$2(),div_1=child(div),div_2=child(div_1),div_3=child(div_2),node2=child(div_3);Server(node2,{class:"h-8 w-8 animate-pulse text-muted-foreground"}),reset(div_3);var p2=sibling(div_3,4),text2=child(p2,!0);reset(p2),reset(div_2);var div_4=sibling(div_2,2),node_1=child(div_4);ServerStatus(node_1,{class:"justify-center"}),reset(div_4),reset(div_1),reset(div),template_effect(()=>{set_class(div,1,`flex h-full items-center justify\ --center ${className()??""}`),set_text(text2,message())}),transition(1,div_2,()=>fade,()=>({duration:300})),append($$anchor,div)}var root_2=from_html('<div class="flex h-screen w-full"><!> <!> <!></div>'),root_1=from_html("<!> <!> <!> <!> <!>",1);function _layout($$anchor,$$props){push$1($$props,!0);let isChatRoute=user_derived(()=>page$1.route.id==="/chat/[id]"),isHomeRoute=user_derived(()=>page$1.route.id==="/"),isNewChatMode=user_derived(()=>page$1.url.searchParams.get("new_chat")==="true"),showSidebarByDefault=user_derived( -()=>activeMessages().length>0||isLoading()),alwaysShowSidebarOnDesktop=user_derived(()=>config$1().alwaysShowSidebarOnDesktop),autoShowSidebarOnNewChat=user_derived(()=>config$1().autoShowSidebarOnNewChat),isMobile=new IsMobile,isDesktop=user_derived(()=>!isMobile.current),sidebarOpen=state$1(!1),innerHeight=state$1(void 0),chatSidebar=state$1(void 0),titleUpdateDialogOpen=state$1(!1),titleUpdateCurrentTitle=state$1(""),titleUpdateNewTitle=state$1(""),titleUpdateResolve=null,chatSettingsDialogOpen=state$1( -!1),chatSettingsDialogInitialSection=state$1(void 0);setChatSettingsDialogContext({open:initialSection=>{set$1(chatSettingsDialogInitialSection,initialSection,!0),set$1(chatSettingsDialogOpen,!0)}});function handleKeydown(event2){const isCtrlOrCmd=event2.ctrlKey||event2.metaKey;isCtrlOrCmd&&event2.key===KeyboardKey.K_LOWER&&(event2.preventDefault(),get$4(chatSidebar)?.activateSearchMode&&(get$4(chatSidebar).activateSearchMode(),set$1(sidebarOpen,!0))),isCtrlOrCmd&&event2.shiftKey&&event2.key===KeyboardKey. -O_UPPER&&(event2.preventDefault(),goto("?new_chat=true#/")),event2.shiftKey&&isCtrlOrCmd&&event2.key===KeyboardKey.E_UPPER&&(event2.preventDefault(),get$4(chatSidebar)?.editActiveConversation&&get$4(chatSidebar).editActiveConversation())}function handleTitleUpdateCancel(){set$1(titleUpdateDialogOpen,!1),titleUpdateResolve&&(titleUpdateResolve(!1),titleUpdateResolve=null)}function handleTitleUpdateConfirm(){set$1(titleUpdateDialogOpen,!1),titleUpdateResolve&&(titleUpdateResolve(!0),titleUpdateResolve= -null)}user_effect(()=>{if(get$4(alwaysShowSidebarOnDesktop)&&get$4(isDesktop)){set$1(sidebarOpen,!0);return}get$4(isHomeRoute)&&!get$4(isNewChatMode)?set$1(sidebarOpen,!1):get$4(isHomeRoute)&&get$4(isNewChatMode)?set$1(sidebarOpen,!0):get$4(isChatRoute)?get$4(autoShowSidebarOnNewChat)&&set$1(sidebarOpen,!0):set$1(sidebarOpen,get$4(showSidebarByDefault),!0)}),user_effect(()=>{serverStore.props||untrack$1(()=>{serverStore.fetch()})}),user_effect(()=>{serverStore.props&&settingsStore.syncWithServerDefaults()}); -let routerModelsFetched=!1;user_effect(()=>{const isRouter=isRouterMode(),modelsCount=modelsStore.models.length;isRouter&&modelsCount>0&&!routerModelsFetched&&(routerModelsFetched=!0,untrack$1(()=>{modelsStore.fetchRouterModels()}))}),user_effect(()=>{const enabledServers=mcpStore.getServers().filter(s2=>s2.enabled&&s2.url.trim());enabledServers.length>0&&untrack$1(()=>{mcpStore.runHealthChecksForServers(enabledServers,!1).catch(error2=>{console.warn("[layout] MCP health checks failed:",error2)})})}), -user_effect(()=>{const apiKey=config$1().apiKey;if((page$1.route.id==="/"||page$1.route.id==="/chat/[id]")&&page$1.status!==401&&page$1.status!==403){const headers={"Content-Type":"application/json"};apiKey&&apiKey.trim()!==""&&(headers.Authorization=`Bearer ${apiKey.trim()}`),fetch(`${base}/props`,{headers}).then(response=>{(response.status===401||response.status===403)&&window.location.reload()}).catch(e=>{console.error("Error checking API key:",e)})}}),user_effect(()=>{conversationsStore.setTitleUpdateConfirmationCallback( -async(currentTitle,newTitle)=>new Promise(resolve2=>{set$1(titleUpdateCurrentTitle,currentTitle,!0),set$1(titleUpdateNewTitle,newTitle,!0),titleUpdateResolve=resolve2,set$1(titleUpdateDialogOpen,!0)}))});var fragment=comment$2();event("keydown",$window,handleKeydown);var node2=first_child(fragment);component(node2,()=>Provider,($$anchor2,Tooltip_Provider)=>{Tooltip_Provider($$anchor2,{get delayDuration(){return TOOLTIP_DELAY_DURATION},children:($$anchor3,$$slotProps)=>{var fragment_1=root_1(),node_1=first_child( -fragment_1);Mode_watcher(node_1,{});var node_2=sibling(node_1,2);Toaster(node_2,{richColors:!0});var node_3=sibling(node_2,2);DialogChatSettings(node_3,{get open(){return get$4(chatSettingsDialogOpen)},onOpenChange:open2=>set$1(chatSettingsDialogOpen,open2,!0),get initialSection(){return get$4(chatSettingsDialogInitialSection)}});var node_4=sibling(node_3,2);DialogConversationTitleUpdate(node_4,{get currentTitle(){return get$4(titleUpdateCurrentTitle)},get newTitle(){return get$4(titleUpdateNewTitle)}, -onConfirm:handleTitleUpdateConfirm,onCancel:handleTitleUpdateCancel,get open(){return get$4(titleUpdateDialogOpen)},set open($$value){set$1(titleUpdateDialogOpen,$$value,!0)}});var node_5=sibling(node_4,2);component(node_5,()=>Sidebar_provider,($$anchor4,Sidebar_Provider)=>{Sidebar_Provider($$anchor4,{get open(){return get$4(sidebarOpen)},set open($$value){set$1(sidebarOpen,$$value,!0)},children:($$anchor5,$$slotProps2)=>{var div=root_2();let styles2;var node_6=child(div);component(node_6,()=>Sidebar, -($$anchor6,Sidebar_Root)=>{Sidebar_Root($$anchor6,{class:"h-full",children:($$anchor7,$$slotProps3)=>{bind_this(ChatSidebar($$anchor7,{}),$$value=>set$1(chatSidebar,$$value,!0),()=>get$4(chatSidebar))},$$slots:{default:!0}})});var node_7=sibling(node_6,2);{var consequent=$$anchor6=>{var fragment_3=comment$2(),node_8=first_child(fragment_3);{let $0=user_derived(()=>get$4(sidebarOpen)?"md:left-[var(--sidebar-width)]":"md:left-0!");component(node_8,()=>Sidebar_trigger,($$anchor7,Sidebar_Trigger)=>{ -Sidebar_Trigger($$anchor7,{get class(){return`transition-left absolute left-0 z-[900] duration-200 ease-linear ${get$4($0)??""}`},style:"translate: 1rem 1rem;"})})}append($$anchor6,fragment_3)};if_block(node_7,$$render=>{get$4(alwaysShowSidebarOnDesktop)&&get$4(isDesktop)||$$render(consequent)})}var node_9=sibling(node_7,2);component(node_9,()=>Sidebar_inset,($$anchor6,Sidebar_Inset)=>{Sidebar_Inset($$anchor6,{class:"flex flex-1 flex-col overflow-hidden",children:($$anchor7,$$slotProps3)=>{var fragment_4=comment$2(), -node_10=first_child(fragment_4);snippet(node_10,()=>$$props.children??noop$3),append($$anchor7,fragment_4)},$$slots:{default:!0}})}),reset(div),template_effect(()=>styles2=set_style(div,"",styles2,{height:`${get$4(innerHeight)??""}px`})),append($$anchor5,div)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),bind_window_size("innerHeight",$$value=>set$1(innerHeight,$$value,!0)),append($$anchor,fragment),pop()}const _0=Object.freeze(Object.defineProperty({__proto__:null, -component:_layout},Symbol.toStringTag,{value:"Module"})),getStores=()=>{const stores$1=stores;return{page:{subscribe:stores$1.page.subscribe},navigating:{subscribe:stores$1.navigating.subscribe},updated:stores$1.updated}},page={subscribe(fn){return getStores().page.subscribe(fn)}};var root_3=from_html('<div class="flex h-full items-center justify-center"><div class="w-full max-w-md px-4 text-center"><div class="mb-6"><div class="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-ful\ -l bg-destructive/10"><svg class="h-8 w-8 text-destructive" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"></path></svg></div> <h1 class="mb-2 text-2xl font-bold"> </h1> <p class="text-muted-foreground"> </p></div> <button class="rounded-md bg-primary px-4 py-2 text-primary-foregro\ -und hover:bg-primary/90">Go Home</button></div></div>');function _error($$anchor,$$props){push$1($$props,!0);const $page=()=>store_get(page,"$page",$$stores),[$$stores,$$cleanup]=setup_stores();let error2=user_derived(()=>$page().error),status=user_derived(()=>$page().status),isApiKeyError=user_derived(()=>get$4(status)===401||get$4(status)===403||get$4(error2)?.message?.toLowerCase().includes("access denied")||get$4(error2)?.message?.toLowerCase().includes("unauthorized")||get$4(error2)?.message?. -toLowerCase().includes("invalid api key"));function handleRetry(){goto("#/")}var fragment=comment$2();head$1("1j96wlh",$$anchor2=>{deferred_template_effect(()=>{$document.title=`Error ${get$4(status)??""} - WebUI`})});var node2=first_child(fragment);{var consequent=$$anchor2=>{{let $0=user_derived(()=>get$4(error2)?.message||"Access denied - check server permissions");ServerErrorSplash($$anchor2,{get error(){return get$4($0)},onRetry:handleRetry,showRetry:!1,showTroubleshooting:!1})}},alternate=$$anchor2=>{ -var div=root_3(),div_1=child(div),div_2=child(div_1),h1=sibling(child(div_2),2),text2=child(h1);reset(h1);var p2=sibling(h1,2),text_1=child(p2,!0);reset(p2),reset(div_2);var button=sibling(div_2,2);button.__click=()=>goto("#/"),reset(div_1),reset(div),template_effect(()=>{set_text(text2,`Error ${get$4(status)??""}`),set_text(text_1,get$4(error2)?.message||"Something went wrong")}),append($$anchor2,div)};if_block(node2,$$render=>{get$4(isApiKeyError)?$$render(consequent):$$render(alternate,!1)})} -append($$anchor,fragment),pop(),$$cleanup()}delegate(["click"]);const _1=Object.freeze(Object.defineProperty({__proto__:null,component:_error},Symbol.toStringTag,{value:"Module"})),load$1=async({fetch:fetch2})=>{await validateApiKey(fetch2)},_page$3=Object.freeze(Object.defineProperty({__proto__:null,load:load$1},Symbol.toStringTag,{value:"Module"}));var root$1=from_html("<!> <!>",1);function _page$2($$anchor,$$props){push$1($$props,!0);let qParam=user_derived(()=>page$1.url.searchParams.get("q")), -modelParam=user_derived(()=>page$1.url.searchParams.get("model")),newChatParam=user_derived(()=>page$1.url.searchParams.get("new_chat")),showModelNotAvailable=state$1(!1),requestedModelName=state$1(""),availableModelNames=user_derived(()=>modelOptions().map(m=>m.model));function clearUrlParams(){const url2=new URL(page$1.url);url2.searchParams.delete("q"),url2.searchParams.delete("model"),url2.searchParams.delete("new_chat"),replaceState(url2.toString(),{})}async function handleUrlParams(){if(await modelsStore. -fetch(),get$4(modelParam)){const model=modelsStore.findModelByName(get$4(modelParam));if(model)try{await modelsStore.selectModelById(model.id)}catch(error2){console.error("Failed to select model:",error2),set$1(requestedModelName,get$4(modelParam),!0),set$1(showModelNotAvailable,!0);return}else{set$1(requestedModelName,get$4(modelParam),!0),set$1(showModelNotAvailable,!0);return}}get$4(qParam)!==null?(await conversationsStore.createConversation(),clearUrlParams()):(get$4(modelParam)||get$4(newChatParam)=== -"true")&&clearUrlParams()}onMount$1(async()=>{if(isConversationsInitialized()||await conversationsStore.initialize(),conversationsStore.clearActiveConversation(),chatStore.clearUIState(),isRouterMode()&&modelsStore.selectedModelName&&!modelsStore.isModelLoaded(modelsStore.selectedModelName)){modelsStore.clearSelection();const first=modelOptions().find(m=>modelsStore.loadedModelIds.includes(m.model));first&&await modelsStore.selectModelById(first.id)}(get$4(qParam)!==null||get$4(modelParam)!==null|| -get$4(newChatParam)==="true")&&await handleUrlParams()});var fragment=root$1();head$1("1uha8ag",$$anchor2=>{effect(()=>{$document.title="llama.cpp - AI Chat Interface"})});var node2=first_child(fragment);ChatScreen(node2,{showCenteredEmpty:!0});var node_1=sibling(node2,2);DialogModelNotAvailable(node_1,{get modelName(){return get$4(requestedModelName)},get availableModels(){return get$4(availableModelNames)},get open(){return get$4(showModelNotAvailable)},set open($$value){set$1(showModelNotAvailable, -$$value,!0)}}),append($$anchor,fragment),pop()}const _2=Object.freeze(Object.defineProperty({__proto__:null,component:_page$2,universal:_page$3},Symbol.toStringTag,{value:"Module"})),load=async({fetch:fetch2})=>{await validateApiKey(fetch2)},_page$1=Object.freeze(Object.defineProperty({__proto__:null,load},Symbol.toStringTag,{value:"Module"}));var root=from_html("<!> <!>",1);function _page($$anchor,$$props){push$1($$props,!0);let chatId=user_derived(()=>page$1.params.id),currentChatId,qParam=user_derived( -()=>page$1.url.searchParams.get("q")),modelParam=user_derived(()=>page$1.url.searchParams.get("model")),showModelNotAvailable=state$1(!1),requestedModelName=state$1(""),availableModelNames=user_derived(()=>modelOptions().map(m=>m.model)),urlParamsProcessed=state$1(!1);function clearUrlParams(){const url2=new URL(page$1.url);url2.searchParams.delete("q"),url2.searchParams.delete("model"),replaceState(url2.toString(),{})}async function handleUrlParams(){if(await modelsStore.fetch(),get$4(modelParam)){ -const model=modelsStore.findModelByName(get$4(modelParam));if(model)try{await modelsStore.selectModelById(model.id)}catch(error2){console.error("Failed to select model:",error2),set$1(requestedModelName,get$4(modelParam),!0),set$1(showModelNotAvailable,!0);return}else{set$1(requestedModelName,get$4(modelParam),!0),set$1(showModelNotAvailable,!0);return}}get$4(qParam)!==null?(await chatStore.sendMessage(get$4(qParam)),clearUrlParams()):get$4(modelParam)&&clearUrlParams(),set$1(urlParamsProcessed, -!0)}async function selectModelFromLastAssistantResponse(){const messages=activeMessages();if(messages.length===0)return;let lastMessageWithModel;for(let i=messages.length-1;i>=0;i--)if(messages[i].model){lastMessageWithModel=messages[i];break}if(!lastMessageWithModel)return;const currentModelId=selectedModelId();if(modelOptions().find(m=>m.id===currentModelId)?.model===lastMessageWithModel.model)return;const matchingModel=modelOptions().find(option2=>option2.model===lastMessageWithModel.model);if(matchingModel&& -modelsStore.isModelLoaded(matchingModel.model))try{await modelsStore.selectModelById(matchingModel.id),console.log(`Automatically selected model: ${lastMessageWithModel.model} from last message`)}catch(error2){console.warn("Failed to automatically select model from last message:",error2)}}afterNavigate(()=>{setTimeout(()=>{selectModelFromLastAssistantResponse()},100)}),user_effect(()=>{if(get$4(chatId)&&get$4(chatId)!==currentChatId){if(currentChatId=get$4(chatId),set$1(urlParamsProcessed,!1),activeConversation()?. -id===get$4(chatId)){(get$4(qParam)!==null||get$4(modelParam)!==null)&&!get$4(urlParamsProcessed)&&handleUrlParams();return}(async()=>await conversationsStore.loadConversation(get$4(chatId))?(chatStore.syncLoadingStateForChat(get$4(chatId)),(get$4(qParam)!==null||get$4(modelParam)!==null)&&!get$4(urlParamsProcessed)&&await handleUrlParams()):await goto("#/"))()}}),user_effect(()=>{if(typeof window<"u"){const handleBeforeUnload=()=>{isLoading()&&(console.log("Page unload detected while streaming -\ - aborting stream"),chatStore.stopGeneration())};return window.addEventListener("beforeunload",handleBeforeUnload),()=>{window.removeEventListener("beforeunload",handleBeforeUnload)}}});var fragment=root();head$1("gz601r",$$anchor2=>{deferred_template_effect($0=>{$document.title=`${$0??""} - llama.cpp`},[()=>activeConversation()?.name||"Chat"])});var node2=first_child(fragment);ChatScreen(node2,{});var node_1=sibling(node2,2);DialogModelNotAvailable(node_1,{get modelName(){return get$4(requestedModelName)}, -get availableModels(){return get$4(availableModelNames)},get open(){return get$4(showModelNotAvailable)},set open($$value){set$1(showModelNotAvailable,$$value,!0)}}),append($$anchor,fragment),pop()}const _3=Object.freeze(Object.defineProperty({__proto__:null,component:_page,universal:_page$1},Symbol.toStringTag,{value:"Module"})),pdf_worker_min='/**\n * @licstart The following is the entire license notice for the\n * JavaScript code in this page\n *\n * Copyright 2024 Mozilla Foundation\n *\n * Licens\ -ed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing perm\ -issions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * JavaScript code in this page\n */\n/**\n * pdfjsVersion = 5.4.54\n * pdfjsBuild = 295fb3ec4\n */\nconst e=!("object"!=typeof process||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type),t=[.001,0,0,.001,0,0],a=1.35,r=.35,i=.25925925925925924,n=1,s=2,o=4,c=8,l=16,h=64,u=128,d=256,f="pdfjs_internal_editor_",g=3,p=9,m=13,b=15,y=1\ -01,w={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},x=0,S=4,k=1,C=2,v=3,F=1,T=2,O=3,M=4,D=5,R=6,N=7,E=8,L=9,j=10,_=11,U=12,X=13,q=14,H=15,W=16,z=17,$=20,G="Group",V="R",K=1,J=2,Y=4,Z=16,Q=32,ee=128,te=512,ae=1,re=2,ie=4096,ne=8192,se=32768,oe=65536,ce=131072,le=1048576,he=2097152,ue=8388608,de=16777216,fe=1,ge=2,pe=3,me=4,be=5,ye={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"F\ -ocus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"},we={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},xe={O:"PageOpen",C:"PageClose"},Se=1,Ae=5,ke=1,Ce=2,ve=3,Fe=4,Ie=5,Te=6,Oe=7,Me=8,De=9,Be=10,Re=11,Ne=12,Ee=13,Pe=14,Le=15,je=16,_e=17,Ue=18,Xe=19,qe=20,He=21,We=22,ze=23,$e=24,Ge=25,Ve=26,Ke=27,Je=28,Ye=29,Ze=30,Qe=31,et=32,tt=33,at=34,rt=35,it=36,nt=37,st=38,ot=39,ct=40,lt=41,ht=42,ut=43\ -,dt=44,ft=45,gt=46,pt=47,mt=48,bt=49,yt=50,wt=51,xt=52,St=53,At=54,kt=55,Ct=56,vt=57,Ft=58,It=59,Tt=60,Ot=61,Mt=62,Dt=63,Bt=64,Rt=65,Nt=66,Et=67,Pt=68,Lt=69,jt=70,_t=71,Ut=72,Xt=73,qt=74,Ht=75,Wt=76,zt=77,$t=80,Gt=81,Vt=83,Kt=84,Jt=85,Yt=86,Zt=87,Qt=88,ea=89,ta=90,aa=91,ra=92,ia=93,na=94,sa=0,oa=1,ca=2,la=3,ha=1,ua=2;let da=Se;function getVerbosityLevel(){return da}function info(e){da>=Ae&&console.log(`Info: ${e}`)}function warn(e){da>=Se&&console.log(`Warning: ${e}`)}function unreachable(e){thr\ -ow new Error(e)}function assert(e,t){e||unreachable(t)}function createValidAbsoluteUrl(e,t=null,a=null){if(!e)return null;if(a&&"string"==typeof e){if(a.addDefaultProtocol&&e.startsWith("www.")){const t=e.match(/\\./g);t?.length>=2&&(e=`http://${e}`)}if(a.tryConvertEncoding)try{e=stringToUTF8String(e)}catch{}}const r=t?URL.parse(e,t):URL.parse(e);return function _isValidProtocol(e){switch(e?.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(r)?r:nu\ -ll}function shadow(e,t,a,r=!1){Object.defineProperty(e,t,{value:a,enumerable:!r,configurable:!0,writable:!1});return a}const fa=function BaseExceptionClosure(){function BaseException(e,t){this.message=e;this.name=t}BaseException.prototype=new Error;BaseException.constructor=BaseException;return BaseException}();class PasswordException extends fa{constructor(e,t){super(e,"PasswordException");this.code=t}}class UnknownErrorException extends fa{constructor(e,t){super(e,"UnknownErrorException");this\ -.details=t}}class InvalidPDFException extends fa{constructor(e){super(e,"InvalidPDFException")}}class ResponseException extends fa{constructor(e,t,a){super(e,"ResponseException");this.status=t;this.missing=a}}class FormatError extends fa{constructor(e){super(e,"FormatError")}}class AbortException extends fa{constructor(e){super(e,"AbortException")}}function bytesToString(e){"object"==typeof e&&void 0!==e?.length||unreachable("Invalid argument for bytesToString");const t=e.length,a=8192;if(t<a)re\ -turn String.fromCharCode.apply(null,e);const r=[];for(let i=0;i<t;i+=a){const n=Math.min(i+a,t),s=e.subarray(i,n);r.push(String.fromCharCode.apply(null,s))}return r.join("")}function stringToBytes(e){"string"!=typeof e&&unreachable("Invalid argument for stringToBytes");const t=e.length,a=new Uint8Array(t);for(let r=0;r<t;++r)a[r]=255&e.charCodeAt(r);return a}function string32(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)}function objectSize(e){return Object.keys(e).length}cla\ -ss FeatureTest{static get isLittleEndian(){return shadow(this,"isLittleEndian",function isLittleEndian(){const e=new Uint8Array(4);e[0]=1;return 1===new Uint32Array(e.buffer,0,1)[0]}())}static get isEvalSupported(){return shadow(this,"isEvalSupported",function isEvalSupported(){try{new Function("");return!0}catch{return!1}}())}static get isOffscreenCanvasSupported(){return shadow(this,"isOffscreenCanvasSupported","undefined"!=typeof OffscreenCanvas)}static get isImageDecoderSupported(){return sh\ -adow(this,"isImageDecoderSupported","undefined"!=typeof ImageDecoder)}static get platform(){const{platform:e,userAgent:t}=navigator;return shadow(this,"platform",{isAndroid:t.includes("Android"),isLinux:e.includes("Linux"),isMac:e.includes("Mac"),isWindows:e.includes("Win"),isFirefox:t.includes("Firefox")})}static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupported",globalThis.CSS?.supports?.("width: round(1.5px, 1px)"))}}const ga=Array.from(Array(256).keys(),(e=>e.toString(16).pad\ -Start(2,"0")));class Util{static makeHexColor(e,t,a){return`#${ga[e]}${ga[t]}${ga[a]}`}static scaleMinMax(e,t){let a;if(e[0]){if(e[0]<0){a=t[0];t[0]=t[2];t[2]=a}t[0]*=e[0];t[2]*=e[0];if(e[3]<0){a=t[1];t[1]=t[3];t[3]=a}t[1]*=e[3];t[3]*=e[3]}else{a=t[0];t[0]=t[1];t[1]=a;a=t[2];t[2]=t[3];t[3]=a;if(e[1]<0){a=t[1];t[1]=t[3];t[3]=a}t[1]*=e[1];t[3]*=e[1];if(e[2]<0){a=t[0];t[0]=t[2];t[2]=a}t[0]*=e[2];t[2]*=e[2]}t[0]+=e[4];t[1]+=e[5];t[2]+=e[4];t[3]+=e[5]}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],\ -e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static applyTransform(e,t,a=0){const r=e[a],i=e[a+1];e[a]=r*t[0]+i*t[2]+t[4];e[a+1]=r*t[1]+i*t[3]+t[5]}static applyTransformToBezier(e,t,a=0){const r=t[0],i=t[1],n=t[2],s=t[3],o=t[4],c=t[5];for(let t=0;t<6;t+=2){const l=e[a+t],h=e[a+t+1];e[a+t]=l*r+h*n+o;e[a+t+1]=l*i+h*s+c}}static applyInverseTransform(e,t){const a=e[0],r=e[1],i=t[0]*t[3]-t[1]*t[2];e[0]=(a*t[3]-r*t[2]+t[2]*t[5]-t[4]*t[3\ -])/i;e[1]=(-a*t[1]+r*t[0]+t[4]*t[1]-t[5]*t[0])/i}static axialAlignedBoundingBox(e,t,a){const r=t[0],i=t[1],n=t[2],s=t[3],o=t[4],c=t[5],l=e[0],h=e[1],u=e[2],d=e[3];let f=r*l+o,g=f,p=r*u+o,m=p,b=s*h+c,y=b,w=s*d+c,x=w;if(0!==i||0!==n){const e=i*l,t=i*u,a=n*h,r=n*d;f+=a;m+=a;p+=r;g+=r;b+=e;x+=e;w+=t;y+=t}a[0]=Math.min(a[0],f,p,g,m);a[1]=Math.min(a[1],b,w,y,x);a[2]=Math.max(a[2],f,p,g,m);a[3]=Math.max(a[3],b,w,y,x)}static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e\ -[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e,t){const a=e[0],r=e[1],i=e[2],n=e[3],s=a**2+r**2,o=a*i+r*n,c=i**2+n**2,l=(s+c)/2,h=Math.sqrt(l**2-(s*c-o**2));t[0]=Math.sqrt(l+h||1);t[1]=Math.sqrt(l-h||1)}static normalizeRect(e){const t=e.slice(0);if(e[0]>e[2]){t[0]=e[2];t[2]=e[0]}if(e[1]>e[3]){t[1]=e[3];t[3]=e[1]}return t}static intersect(e,t){const a=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),r=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2])\ -);if(a>r)return null;const i=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),n=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return i>n?null:[a,i,r,n]}static pointBoundingBox(e,t,a){a[0]=Math.min(a[0],e);a[1]=Math.min(a[1],t);a[2]=Math.max(a[2],e);a[3]=Math.max(a[3],t)}static rectBoundingBox(e,t,a,r,i){i[0]=Math.min(i[0],e,a);i[1]=Math.min(i[1],t,r);i[2]=Math.max(i[2],e,a);i[3]=Math.max(i[3],t,r)}static#e(e,t,a,r,i,n,s,o,c,l){if(c<=0||c>=1)return;const h=1-c,u=c*c,d=u*c,f=h*(h*(h*e+3*c*t)+\ -3*u*a)+d*r,g=h*(h*(h*i+3*c*n)+3*u*s)+d*o;l[0]=Math.min(l[0],f);l[1]=Math.min(l[1],g);l[2]=Math.max(l[2],f);l[3]=Math.max(l[3],g)}static#t(e,t,a,r,i,n,s,o,c,l,h,u){if(Math.abs(c)<1e-12){Math.abs(l)>=1e-12&&this.#e(e,t,a,r,i,n,s,o,-h/l,u);return}const d=l**2-4*h*c;if(d<0)return;const f=Math.sqrt(d),g=2*c;this.#e(e,t,a,r,i,n,s,o,(-l+f)/g,u);this.#e(e,t,a,r,i,n,s,o,(-l-f)/g,u)}static bezierBoundingBox(e,t,a,r,i,n,s,o,c){c[0]=Math.min(c[0],e,s);c[1]=Math.min(c[1],t,o);c[2]=Math.max(c[2],e,s);c[3]=Mat\ -h.max(c[3],t,o);this.#t(e,a,i,s,t,r,n,o,3*(3*(a-i)-e+s),6*(e-2*a+i),3*(a-e),c);this.#t(e,a,i,s,t,r,n,o,3*(3*(r-n)-t+o),6*(t-2*r+n),3*(r-t),c)}}const pa=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8\ -216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function stringToPDFString(e,t=!1){if(e[0]>="ï"){let a;if("þ"===e[0]&&"ÿ"===e[1]){a="utf-16be";e.length%2==1&&(e=e.slice(0,-1))}else if("ÿ"===e[0]&&"þ"===e[1]){a="utf-16le";e.length%2==1&&(e=e.slice(0,-1))}else"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(a="utf-8");if(a)try{const r=new TextDecoder(a,{fatal:!0}),i=stringToBytes(e),n=r.decode(i);return t||!n.includes("\x1B")?n:n.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g,"")}catch(e){wa\ -rn(`stringToPDFString: "${e}".`)}}const a=[];for(let r=0,i=e.length;r<i;r++){const n=e.charCodeAt(r);if(!t&&27===n){for(;++r<i&&27!==e.charCodeAt(r););continue}const s=pa[n];a.push(s?String.fromCharCode(s):e.charAt(r))}return a.join("")}function stringToUTF8String(e){return decodeURIComponent(escape(e))}function utf8StringToString(e){return unescape(encodeURIComponent(e))}function isArrayEqual(e,t){if(e.length!==t.length)return!1;for(let a=0,r=e.length;a<r;a++)if(e[a]!==t[a])return!1;return!0}fu\ -nction getModificationDate(e=new Date){e instanceof Date||(e=new Date(e));return[e.getUTCFullYear().toString(),(e.getUTCMonth()+1).toString().padStart(2,"0"),e.getUTCDate().toString().padStart(2,"0"),e.getUTCHours().toString().padStart(2,"0"),e.getUTCMinutes().toString().padStart(2,"0"),e.getUTCSeconds().toString().padStart(2,"0")].join("")}let ma=null,ba=null;function MathClamp(e,t,a){return Math.min(Math.max(e,t),a)}function toHexUtil(e){return Uint8Array.prototype.toHex?e.toHex():Array.from(e\ -,(e=>ga[e])).join("")}"function"!=typeof Promise.try&&(Promise.try=function(e,...t){return new Promise((a=>{a(e(...t))}))});"function"!=typeof Math.sumPrecise&&(Math.sumPrecise=function(e){return e.reduce(((e,t)=>e+t),0)});const ya=Symbol("CIRCULAR_REF"),wa=Symbol("EOF");let xa=Object.create(null),Sa=Object.create(null),Aa=Object.create(null);class Name{constructor(e){this.name=e}static get(e){return Sa[e]||=new Name(e)}}class Cmd{constructor(e){this.cmd=e}static get(e){return xa[e]||=new Cmd(e)\ -}}const ka=function nonSerializableClosure(){return ka};class Dict{constructor(e=null){this._map=new Map;this.xref=e;this.objId=null;this.suppressEncryption=!1;this.__nonSerializable__=ka}assignXref(e){this.xref=e}get size(){return this._map.size}get(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}return r instanceof Ref&&this.xref?this.xref.fetch(r,this.suppressEncryption):r}async getAsync(e,t,a){let r=this._map.get(e);if(\ -void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}return r instanceof Ref&&this.xref?this.xref.fetchAsync(r,this.suppressEncryption):r}getArray(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}r instanceof Ref&&this.xref&&(r=this.xref.fetch(r,this.suppressEncryption));if(Array.isArray(r)){r=r.slice();for(let e=0,t=r.length;e<t;e++)r[e]instanceof Ref&&this.xref&&(r[e]=this.xref.fetch(r[e]\ -,this.suppressEncryption))}return r}getRaw(e){return this._map.get(e)}getKeys(){return[...this._map.keys()]}getRawValues(){return[...this._map.values()]}set(e,t){this._map.set(e,t)}setIfNotExists(e,t){this.has(e)||this.set(e,t)}setIfNumber(e,t){"number"==typeof t&&this.set(e,t)}setIfArray(e,t){(Array.isArray(t)||ArrayBuffer.isView(t))&&this.set(e,t)}setIfDefined(e,t){null!=t&&this.set(e,t)}setIfName(e,t){"string"==typeof t?this.set(e,Name.get(t)):t instanceof Name&&this.set(e,t)}has(e){return th\ -is._map.has(e)}*[Symbol.iterator](){for(const[e,t]of this._map)yield[e,t instanceof Ref&&this.xref?this.xref.fetch(t,this.suppressEncryption):t]}static get empty(){const e=new Dict(null);e.set=(e,t)=>{unreachable("Should not call `set` on the empty dictionary.")};return shadow(this,"empty",e)}static merge({xref:e,dictArray:t,mergeSubDicts:a=!1}){const r=new Dict(e),i=new Map;for(const e of t)if(e instanceof Dict)for(const[t,r]of e._map){let e=i.get(t);if(void 0===e){e=[];i.set(t,e)}else if(!(a&&\ -r instanceof Dict))continue;e.push(r)}for(const[t,a]of i){if(1===a.length||!(a[0]instanceof Dict)){r._map.set(t,a[0]);continue}const i=new Dict(e);for(const e of a)for(const[t,a]of e._map)i._map.has(t)||i._map.set(t,a);i.size>0&&r._map.set(t,i)}i.clear();return r.size>0?r:Dict.empty}clone(){const e=new Dict(this.xref);for(const t of this.getKeys())e.set(t,this.getRaw(t));return e}delete(e){delete this._map[e]}}class Ref{constructor(e,t){this.num=e;this.gen=t}toString(){return 0===this.gen?`${thi\ -s.num}R`:`${this.num}R${this.gen}`}static fromString(e){const t=Aa[e];if(t)return t;const a=/^(\\d+)R(\\d*)$/.exec(e);return a&&"0"!==a[1]?Aa[e]=new Ref(parseInt(a[1]),a[2]?parseInt(a[2]):0):null}static get(e,t){const a=0===t?`${e}R`:`${e}R${t}`;return Aa[a]||=new Ref(e,t)}}class RefSet{constructor(e=null){this._set=new Set(e?._set)}has(e){return this._set.has(e.toString())}put(e){this._set.add(e.toString())}remove(e){this._set.delete(e.toString())}[Symbol.iterator](){return this._set.values()}cle\ -ar(){this._set.clear()}}class RefSetCache{constructor(){this._map=new Map}get size(){return this._map.size}get(e){return this._map.get(e.toString())}has(e){return this._map.has(e.toString())}put(e,t){this._map.set(e.toString(),t)}putAlias(e,t){this._map.set(e.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*values(){yield*this._map.values()}*items(){for(const[e,t]of this._map)yield[Ref.fromString(e),t]}}function isName(e,t){return e instanceof Name\ -&&(void 0===t||e.name===t)}function isCmd(e,t){return e instanceof Cmd&&(void 0===t||e.cmd===t)}function isDict(e,t){return e instanceof Dict&&(void 0===t||isName(e.get("Type"),t))}function isRefsEqual(e,t){return e.num===t.num&&e.gen===t.gen}class BaseStream{get length(){unreachable("Abstract getter `length` accessed")}get isEmpty(){unreachable("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return shadow(this,"isDataLoaded",!0)}getByte(){unreachable("Abstract method `getByte` called")\ -}getBytes(e){unreachable("Abstract method `getBytes` called")}async getImageData(e,t){return this.getBytes(e,t)}async asyncGetBytes(){unreachable("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get isAsyncDecoder(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}async getTransferableImage(){return null}peekByte(){const e=this.getByte();-1!==e&&this.pos--;return e}peekBytes(e){const t=this.getBytes(e);this.pos-=t.length;return t}getUint16(){const e=this.getByte(),t=this.get\ -Byte();return-1===e||-1===t?-1:(e<<8)+t}getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()}getByteRange(e,t){unreachable("Abstract method `getByteRange` called")}getString(e){return bytesToString(this.getBytes(e))}skip(e){this.pos+=e||1}reset(){unreachable("Abstract method `reset` called")}moveStart(){unreachable("Abstract method `moveStart` called")}makeSubStream(e,t,a=null){unreachable("Abstract method `makeSubStream` called")}getBaseStreams(){return \ -null}}const Ca=/^[1-9]\\.\\d$/,va=2**31-1,Fa=[1,0,0,1,0,0],Ia=["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"],Ta=["ExtGState","Font","Properties","XObject"];function getLookupTableFactory(e){let t;return function(){if(e){t=Object.create(null);e(t);e=null}return t}}class MissingDataException extends fa{constructor(e,t){super(`Missing data [${e}, ${t})`,"MissingDataException");this.begin=e;this.end=t}}class ParserEOFException extends fa{constructor(e){super(e,"ParserEOFE\ -xception")}}class XRefEntryException extends fa{constructor(e){super(e,"XRefEntryException")}}class XRefParseException extends fa{constructor(e){super(e,"XRefParseException")}}function arrayBuffersToBytes(e){const t=e.length;if(0===t)return new Uint8Array(0);if(1===t)return new Uint8Array(e[0]);let a=0;for(let r=0;r<t;r++)a+=e[r].byteLength;const r=new Uint8Array(a);let i=0;for(let a=0;a<t;a++){const t=new Uint8Array(e[a]);r.set(t,i);i+=t.byteLength}return r}async function fetchBinaryData(e){con\ -st t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch file "${e}" with "${t.statusText}".`);return new Uint8Array(await t.arrayBuffer())}function getInheritableProperty({dict:e,key:t,getArray:a=!1,stopWhenFound:r=!0}){let i;const n=new RefSet;for(;e instanceof Dict&&(!e.objId||!n.has(e.objId));){e.objId&&n.put(e.objId);const s=a?e.getArray(t):e.get(t);if(void 0!==s){if(r)return s;(i||=[]).push(s)}e=e.get("Parent")}return i}const Oa=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","","X\ -","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV","V","VI","VII","VIII","IX"];function toRomanNumerals(e,t=!1){assert(Number.isInteger(e)&&e>0,"The number should be a positive integer.");const a="M".repeat(e/1e3|0)+Oa[e%1e3/100|0]+Oa[10+(e%100/10|0)]+Oa[20+e%10];return t?a.toLowerCase():a}function log2(e){return e>0?Math.ceil(Math.log2(e)):0}function readInt8(e,t){return e[t]<<24>>24}function readInt16(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function readUint16(e,t){return e[t]<<8\ -|e[t+1]}function readUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function isWhiteSpace(e){return 32===e||9===e||13===e||10===e}function isNumberArray(e,t){return Array.isArray(e)?(null===t||e.length===t)&&e.every((e=>"number"==typeof e)):ArrayBuffer.isView(e)&&!(e instanceof BigInt64Array||e instanceof BigUint64Array)&&(null===t||e.length===t)}function lookupMatrix(e,t){return isNumberArray(e,6)?e:t}function lookupRect(e,t){return isNumberArray(e,4)?e:t}function lookupNormalRect\ -(e,t){return isNumberArray(e,4)?Util.normalizeRect(e):t}function parseXFAPath(e){const t=/(.+)\\[(\\d+)\\]$/;return e.split(".").map((e=>{const a=e.match(t);return a?{name:a[1],pos:parseInt(a[2],10)}:{name:e,pos:0}}))}function escapePDFName(e){const t=[];let a=0;for(let r=0,i=e.length;r<i;r++){const i=e.charCodeAt(r);if(i<33||i>126||35===i||40===i||41===i||60===i||62===i||91===i||93===i||123===i||125===i||47===i||37===i){a<r&&t.push(e.substring(a,r));t.push(`#${i.toString(16)}`);a=r+1}}if(0===t.len\ -gth)return e;a<e.length&&t.push(e.substring(a,e.length));return t.join("")}function escapeString(e){return e.replaceAll(/([()\\\\\\n\\r])/g,(e=>"\\n"===e?"\\\\n":"\\r"===e?"\\\\r":`\\\\${e}`))}function _collectJS(e,t,a,r){if(!e)return;let i=null;if(e instanceof Ref){if(r.has(e))return;i=e;r.put(i);e=t.fetch(e)}if(Array.isArray(e))for(const i of e)_collectJS(i,t,a,r);else if(e instanceof Dict){if(isName(e.get("S"),"JavaScript")){const t=e.get("JS");let r;t instanceof BaseStream?r=t.getString():"string"==type\ -of t&&(r=t);r&&=stringToPDFString(r,!0).replaceAll("\\0","");r&&a.push(r.trim())}_collectJS(e.getRaw("Next"),t,a,r)}i&&r.remove(i)}function collectActions(e,t,a){const r=Object.create(null),i=getInheritableProperty({dict:t,key:"AA",stopWhenFound:!1});if(i)for(let t=i.length-1;t>=0;t--){const n=i[t];if(n instanceof Dict)for(const t of n.getKeys()){const i=a[t];if(!i)continue;const s=[];_collectJS(n.getRaw(t),e,s,new RefSet);s.length>0&&(r[i]=s)}}if(t.has("A")){const a=[];_collectJS(t.get("A"),e,a,\ -new RefSet);a.length>0&&(r.Action=a)}return objectSize(r)>0?r:null}const Ma={60:"<",62:">",38:"&",34:""",39:"'"};function*codePointIter(e){for(let t=0,a=e.length;t<a;t++){const a=e.codePointAt(t);a>55295&&(a<57344||a>65533)&&t++;yield a}}function encodeToXmlString(e){const t=[];let a=0;for(let r=0,i=e.length;r<i;r++){const i=e.codePointAt(r);if(32<=i&&i<=126){const n=Ma[i];if(n){a<r&&t.push(e.substring(a,r));t.push(n);a=r+1}}else{a<r&&t.push(e.substring(a,r));t.push(`&#x${i.t\ -oString(16).toUpperCase()};`);i>55295&&(i<57344||i>65533)&&r++;a=r+1}}if(0===t.length)return e;a<e.length&&t.push(e.substring(a,e.length));return t.join("")}function validateFontName(e,t=!1){const a=/^("|\').*("|\')$/.exec(e);if(a&&a[1]===a[2]){if(new RegExp(`[^\\\\\\\\]${a[1]}`).test(e.slice(1,-1))){t&&warn(`FontFamily contains unescaped ${a[1]}: ${e}.`);return!1}}else for(const a of e.split(/[ \\t]+/))if(/^(\\d|(-(\\d|-)))/.test(a)||!/^[\\w-\\\\]+$/.test(a)){t&&warn(`FontFamily contains invalid <custom-id\ -ent>: ${e}.`);return!1}return!0}function validateCSSFont(e){const t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:a,fontWeight:r,italicAngle:i}=e;if(!validateFontName(a,!0))return!1;const n=r?r.toString():"";e.fontWeight=t.has(n)?n:"400";const s=parseFloat(i);e.italicAngle=isNaN(s)||s<-90||s>90?"14":i.toString();return!0}function recoverJsURL(e){const t=new RegExp("^\\\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].\ -join("|").replaceAll(".","\\\\.")+")\\\\((?:\'|\\")([^\'\\"]*)(?:\'|\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))","i").exec(e);return t?.[2]?{url:t[2],newWindow:"app.launchURL"===t[1]&&"true"===t[3]}:null}function numberToString(e){if(Number.isInteger(e))return e.toString();const t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)}function getNewAnnotationsMap(e){if(!e)return null;const t=new Map;for(const[a,r]of e){if(!a.startsWith(f))continue;let e=t.get(r.pageIndex);if(!e){e=[];t.set\ -(r.pageIndex,e)}e.push(r)}return t.size>0?t:null}function stringToAsciiOrUTF16BE(e){return null==e||function isAscii(e){if("string"!=typeof e)return!1;return!e||/^[\\x00-\\x7F]*$/.test(e)}(e)?e:stringToUTF16String(e,!0)}function stringToUTF16HexString(e){const t=[];for(let a=0,r=e.length;a<r;a++){const r=e.charCodeAt(a);t.push(ga[r>>8&255],ga[255&r])}return t.join("")}function stringToUTF16String(e,t=!1){const a=[];t&&a.push("þÿ");for(let t=0,r=e.length;t<r;t++){const r=e.charCodeAt(t);a.push(Stri\ -ng.fromCharCode(r>>8&255),String.fromCharCode(255&r))}return a.join("")}function getRotationMatrix(e,t,a){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,a];case 270:return[0,-1,1,0,0,a];default:throw new Error("Invalid rotation")}}function getSizeInBytes(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}class QCMS{static#a=null;static _memory=null;static _mustAddAlpha=!1;static _destBuffer=null;static _destOffset=0;static _destLength=0;static _cssColor="";static _makeHexColor=\ -null;static get _memoryArray(){const e=this.#a;return e?.byteLength?e:this.#a=new Uint8Array(this._memory.buffer)}}let Da;const Ba="undefined"!=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&Ba.decode();let Ra=null;function getUint8ArrayMemory0(){null!==Ra&&0!==Ra.byteLength||(Ra=new Uint8Array(Da.memory.buffer));return Ra}let Na=0;function passArray8ToWasm0(e,t){const a=t(1*e.length,1)>\ ->>0;getUint8ArrayMemory0().set(e,a/1);Na=e.length;return a}const Ea=Object.freeze({RGB8:0,0:"RGB8",RGBA8:1,1:"RGBA8",BGRA8:2,2:"BGRA8",Gray8:3,3:"Gray8",GrayA8:4,4:"GrayA8",CMYK:5,5:"CMYK"}),Pa=Object.freeze({Perceptual:0,0:"Perceptual",RelativeColorimetric:1,1:"RelativeColorimetric",Saturation:2,2:"Saturation",AbsoluteColorimetric:3,3:"AbsoluteColorimetric"});function __wbg_get_imports(){const e={wbg:{}};e.wbg.__wbg_copyresult_b08ee7d273f295dd=function(e,t){!function copy_result(e,t){const{_mus\ -tAddAlpha:a,_destBuffer:r,_destOffset:i,_destLength:n,_memoryArray:s}=QCMS;if(t!==n)if(a)for(let a=e,n=e+t,o=i;a<n;a+=3,o+=4){r[o]=s[a];r[o+1]=s[a+1];r[o+2]=s[a+2];r[o+3]=255}else for(let a=e,n=e+t,o=i;a<n;a+=3,o+=4){r[o]=s[a];r[o+1]=s[a+1];r[o+2]=s[a+2]}else r.set(s.subarray(e,e+t),i)}(e>>>0,t>>>0)};e.wbg.__wbg_copyrgb_d60ce17bb05d9b67=function(e){!function copy_rgb(e){const{_destBuffer:t,_destOffset:a,_memoryArray:r}=QCMS;t[a]=r[e];t[a+1]=r[e+1];t[a+2]=r[e+2]}(e>>>0)};e.wbg.__wbg_makecssRGB_89\ -3bf0cd9fdb302d=function(e){!function make_cssRGB(e){const{_memoryArray:t}=QCMS;QCMS._cssColor=QCMS._makeHexColor(t[e],t[e+1],t[e+2])}(e>>>0)};e.wbg.__wbindgen_init_externref_table=function(){const e=Da.__wbindgen_export_0,t=e.grow(4);e.set(0,void 0);e.set(t+0,void 0);e.set(t+1,null);e.set(t+2,!0);e.set(t+3,!1)};e.wbg.__wbindgen_throw=function(e,t){throw new Error(function getStringFromWasm0(e,t){e>>>=0;return Ba.decode(getUint8ArrayMemory0().subarray(e,e+t))}(e,t))};return e}function __wbg_final\ -ize_init(e,t){Da=e.exports;__wbg_init.__wbindgen_wasm_module=t;Ra=null;Da.__wbindgen_start();return Da}async function __wbg_init(e){if(void 0!==Da)return Da;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?({module_or_path:e}=e):console.warn("using deprecated parameters for the initialization function; pass a single object instead"));const t=__wbg_get_imports();("string"==typeof e||"function"==typeof Request&&e instanceof Request||"function"==typeof URL&&e instanceof URL)&&(e=fetch(e));c\ -onst{instance:a,module:r}=await async function __wbg_load(e,t){if("function"==typeof Response&&e instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if("application/wasm"==e.headers.get("Content-Type"))throw t;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original err\ -or:\\n",t)}const a=await e.arrayBuffer();return await WebAssembly.instantiate(a,t)}{const a=await WebAssembly.instantiate(e,t);return a instanceof WebAssembly.Instance?{instance:a,module:e}:a}}(await e,t);return __wbg_finalize_init(a,r)}class ColorSpace{static#r=new Uint8ClampedArray(3);constructor(e,t){this.name=e;this.numComps=t}getRgb(e,t,a=new Uint8ClampedArray(3)){this.getRgbItem(e,t,a,0);return a}getRgbHex(e,t){const a=this.getRgb(e,t,ColorSpace.#r);return Util.makeHexColor(a[0],a[1],a[2])}\ -getRgbItem(e,t,a,r){unreachable("Should not call ColorSpace.getRgbItem")}getRgbBuffer(e,t,a,r,i,n,s){unreachable("Should not call ColorSpace.getRgbBuffer")}getOutputLength(e,t){unreachable("Should not call ColorSpace.getOutputLength")}isPassthrough(e){return!1}isDefaultDecode(e,t){return ColorSpace.isDefaultDecode(e,this.numComps)}fillRgb(e,t,a,r,i,n,s,o,c){const l=t*a;let h=null;const u=1<<s,d=a!==i||t!==r;if(this.isPassthrough(s))h=o;else if(1===this.numComps&&l>u&&"DeviceGray"!==this.name&&"D\ -eviceRGB"!==this.name){const t=s<=8?new Uint8Array(u):new Uint16Array(u);for(let e=0;e<u;e++)t[e]=e;const a=new Uint8ClampedArray(3*u);this.getRgbBuffer(t,0,u,a,0,s,0);if(d){h=new Uint8Array(3*l);let e=0;for(let t=0;t<l;++t){const r=3*o[t];h[e++]=a[r];h[e++]=a[r+1];h[e++]=a[r+2]}}else{let t=0;for(let r=0;r<l;++r){const i=3*o[r];e[t++]=a[i];e[t++]=a[i+1];e[t++]=a[i+2];t+=c}}}else if(d){h=new Uint8ClampedArray(3*l);this.getRgbBuffer(o,0,l,h,0,s,0)}else this.getRgbBuffer(o,0,r*n,e,0,s,c);if(h)if(d)\ -!function resizeRgbImage(e,t,a,r,i,n,s){s=1!==s?0:s;const o=a/i,c=r/n;let l,h=0;const u=new Uint16Array(i),d=3*a;for(let e=0;e<i;e++)u[e]=3*Math.floor(e*o);for(let a=0;a<n;a++){const r=Math.floor(a*c)*d;for(let a=0;a<i;a++){l=r+u[a];t[h++]=e[l++];t[h++]=e[l++];t[h++]=e[l++];h+=s}}}(h,e,t,a,r,i,c);else{let t=0,a=0;for(let i=0,s=r*n;i<s;i++){e[t++]=h[a++];e[t++]=h[a++];e[t++]=h[a++];t+=c}}}get usesZeroToOneRange(){return shadow(this,"usesZeroToOneRange",!0)}static isDefaultDecode(e,t){if(!Array.is\ -Array(e))return!0;if(2*t!==e.length){warn("The decode map is not the correct length");return!0}for(let t=0,a=e.length;t<a;t+=2)if(0!==e[t]||1!==e[t+1])return!1;return!0}}class AlternateCS extends ColorSpace{constructor(e,t,a){super("Alternate",e);this.base=t;this.tintFn=a;this.tmpBuf=new Float32Array(t.numComps)}getRgbItem(e,t,a,r){const i=this.tmpBuf;this.tintFn(e,t,i,0);this.base.getRgbItem(i,0,a,r)}getRgbBuffer(e,t,a,r,i,n,s){const o=this.tintFn,c=this.base,l=1/((1<<n)-1),h=c.numComps,u=c.use\ -sZeroToOneRange,d=(c.isPassthrough(8)||!u)&&0===s;let f=d?i:0;const g=d?r:new Uint8ClampedArray(h*a),p=this.numComps,m=new Float32Array(p),b=new Float32Array(h);let y,w;for(y=0;y<a;y++){for(w=0;w<p;w++)m[w]=e[t++]*l;o(m,0,b,0);if(u)for(w=0;w<h;w++)g[f++]=255*b[w];else{c.getRgbItem(b,0,g,f);f+=h}}d||c.getRgbBuffer(g,0,a,r,i,8,s)}getOutputLength(e,t){return this.base.getOutputLength(e*this.base.numComps/this.numComps,t)}}class PatternCS extends ColorSpace{constructor(e){super("Pattern",null);this.\ -base=e}isDefaultDecode(e,t){unreachable("Should not call PatternCS.isDefaultDecode")}}class IndexedCS extends ColorSpace{constructor(e,t,a){super("Indexed",1);this.base=e;this.highVal=t;const r=e.numComps*(t+1);this.lookup=new Uint8Array(r);if(a instanceof BaseStream){const e=a.getBytes(r);this.lookup.set(e)}else{if("string"!=typeof a)throw new FormatError(`IndexedCS - unrecognized lookup table: ${a}`);for(let e=0;e<r;++e)this.lookup[e]=255&a.charCodeAt(e)}}getRgbItem(e,t,a,r){const{base:i,highV\ -al:n,lookup:s}=this,o=MathClamp(Math.round(e[t]),0,n)*i.numComps;i.getRgbBuffer(s,o,1,a,r,8,0)}getRgbBuffer(e,t,a,r,i,n,s){const{base:o,highVal:c,lookup:l}=this,{numComps:h}=o,u=o.getOutputLength(h,s);for(let n=0;n<a;++n){const a=MathClamp(Math.round(e[t++]),0,c)*h;o.getRgbBuffer(l,a,1,r,i,8,s);i+=u}}getOutputLength(e,t){return this.base.getOutputLength(e*this.base.numComps,t)}isDefaultDecode(e,t){if(!Array.isArray(e))return!0;if(2!==e.length){warn("Decode map length is not correct");return!0}if\ -(!Number.isInteger(t)||t<1){warn("Bits per component is not correct");return!0}return 0===e[0]&&e[1]===(1<<t)-1}}class DeviceGrayCS extends ColorSpace{constructor(){super("DeviceGray",1)}getRgbItem(e,t,a,r){const i=255*e[t];a[r]=a[r+1]=a[r+2]=i}getRgbBuffer(e,t,a,r,i,n,s){const o=255/((1<<n)-1);let c=t,l=i;for(let t=0;t<a;++t){const t=o*e[c++];r[l++]=t;r[l++]=t;r[l++]=t;l+=s}}getOutputLength(e,t){return e*(3+t)}}class DeviceRgbCS extends ColorSpace{constructor(){super("DeviceRGB",3)}getRgbItem(e\ -,t,a,r){a[r]=255*e[t];a[r+1]=255*e[t+1];a[r+2]=255*e[t+2]}getRgbBuffer(e,t,a,r,i,n,s){if(8===n&&0===s){r.set(e.subarray(t,t+3*a),i);return}const o=255/((1<<n)-1);let c=t,l=i;for(let t=0;t<a;++t){r[l++]=o*e[c++];r[l++]=o*e[c++];r[l++]=o*e[c++];l+=s}}getOutputLength(e,t){return e*(3+t)/3|0}isPassthrough(e){return 8===e}}class DeviceRgbaCS extends ColorSpace{constructor(){super("DeviceRGBA",4)}getOutputLength(e,t){return 4*e}isPassthrough(e){return 8===e}fillRgb(e,t,a,r,i,n,s,o,c){a!==i||t!==r?func\ -tion resizeRgbaImage(e,t,a,r,i,n,s){const o=a/i,c=r/n;let l=0;const h=new Uint16Array(i);if(1===s){for(let e=0;e<i;e++)h[e]=Math.floor(e*o);const r=new Uint32Array(e.buffer),s=new Uint32Array(t.buffer),u=FeatureTest.isLittleEndian?16777215:4294967040;for(let e=0;e<n;e++){const t=r.subarray(Math.floor(e*c)*a);for(let e=0;e<i;e++)s[l++]|=t[h[e]]&u}}else{const r=4,s=a*r;for(let e=0;e<i;e++)h[e]=Math.floor(e*o)*r;for(let a=0;a<n;a++){const r=e.subarray(Math.floor(a*c)*s);for(let e=0;e<i;e++){const a\ -=h[e];t[l++]=r[a];t[l++]=r[a+1];t[l++]=r[a+2]}}}}(o,e,t,a,r,i,c):function copyRgbaImage(e,t,a){if(1===a){const a=new Uint32Array(e.buffer),r=new Uint32Array(t.buffer),i=FeatureTest.isLittleEndian?16777215:4294967040;for(let e=0,t=a.length;e<t;e++)r[e]|=a[e]&i}else{let a=0;for(let r=0,i=e.length;r<i;r+=4){t[a++]=e[r];t[a++]=e[r+1];t[a++]=e[r+2]}}}(o,e,c)}}class DeviceCmykCS extends ColorSpace{constructor(){super("DeviceCMYK",4)}#i(e,t,a,r,i){const n=e[t]*a,s=e[t+1]*a,o=e[t+2]*a,c=e[t+3]*a;r[i]=25\ -5+n*(-4.387332384609988*n+54.48615194189176*s+18.82290502165302*o+212.25662451639585*c-285.2331026137004)+s*(1.7149763477362134*s-5.6096736904047315*o+-17.873870861415444*c-5.497006427196366)+o*(-2.5217340131683033*o-21.248923337353073*c+17.5119270841813)+c*(-21.86122147463605*c-189.48180835922747);r[i+1]=255+n*(8.841041422036149*n+60.118027045597366*s+6.871425592049007*o+31.159100130055922*c-79.2970844816548)+s*(-15.310361306967817*s+17.575251261109482*o+131.35250912493976*c-190.9453302588951)+\ -o*(4.444339102852739*o+9.8632861493405*c-24.86741582555878)+c*(-20.737325471181034*c-187.80453709719578);r[i+2]=255+n*(.8842522430003296*n+8.078677503112928*s+30.89978309703729*o-.23883238689178934*c-14.183576799673286)+s*(10.49593273432072*s+63.02378494754052*o+50.606957656360734*c-112.23884253719248)+o*(.03296041114873217*o+115.60384449646641*c-193.58209356861505)+c*(-22.33816807309886*c-180.12613974708367)}getRgbItem(e,t,a,r){this.#i(e,t,1,a,r)}getRgbBuffer(e,t,a,r,i,n,s){const o=1/((1<<n)-1)\ -;for(let n=0;n<a;n++){this.#i(e,t,o,r,i);t+=4;i+=3+s}}getOutputLength(e,t){return e/4*(3+t)|0}}class CalGrayCS extends ColorSpace{constructor(e,t,a){super("CalGray",1);if(!e)throw new FormatError("WhitePoint missing - required for color space CalGray");[this.XW,this.YW,this.ZW]=e;[this.XB,this.YB,this.ZB]=t||[0,0,0];this.G=a||1;if(this.XW<0||this.ZW<0||1!==this.YW)throw new FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);if(this.XB<0||this.YB<0||this.ZB<0){in\ -fo(`Invalid BlackPoint for ${this.name}, falling back to default.`);this.XB=this.YB=this.ZB=0}0===this.XB&&0===this.YB&&0===this.ZB||warn(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ZB: ${this.ZB}, only default values are supported.`);if(this.G<1){info(`Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`);this.G=1}}#i(e,t,a,r,i){const n=(e[t]*i)**this.G,s=this.YW*n,o=Math.max(295.8*s**.3333333333333333-40.8,0);a[r]=o;a[r+1]=o;a[r+2]=o}getRgbItem(e,t,a,r){this.#i(e\ -,t,a,r,1)}getRgbBuffer(e,t,a,r,i,n,s){const o=1/((1<<n)-1);for(let n=0;n<a;++n){this.#i(e,t,r,i,o);t+=1;i+=3+s}}getOutputLength(e,t){return e*(3+t)}}class CalRGBCS extends ColorSpace{static#n=new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296]);static#s=new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867]);static#o=new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252]);s\ -tatic#c=new Float32Array([1,1,1]);static#l=new Float32Array(3);static#h=new Float32Array(3);static#u=new Float32Array(3);static#d=(24/116)**3/8;constructor(e,t,a,r){super("CalRGB",3);if(!e)throw new FormatError("WhitePoint missing - required for color space CalRGB");const[i,n,s]=this.whitePoint=e,[o,c,l]=this.blackPoint=t||new Float32Array(3);[this.GR,this.GG,this.GB]=a||new Float32Array([1,1,1]);[this.MXA,this.MYA,this.MZA,this.MXB,this.MYB,this.MZB,this.MXC,this.MYC,this.MZC]=r||new Float32Arr\ -ay([1,0,0,0,1,0,0,0,1]);if(i<0||s<0||1!==n)throw new FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);if(o<0||c<0||l<0){info(`Invalid BlackPoint for ${this.name} [${o}, ${c}, ${l}], falling back to default.`);this.blackPoint=new Float32Array(3)}if(this.GR<0||this.GG<0||this.GB<0){info(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ${this.name}, falling back to default.`);this.GR=this.GG=this.GB=1}}#f(e,t,a){a[0]=e[0]*t[0]+e[1]*t[1]+e[2]*t[2];a[1]=e[3]\ -*t[0]+e[4]*t[1]+e[5]*t[2];a[2]=e[6]*t[0]+e[7]*t[1]+e[8]*t[2]}#g(e,t,a){a[0]=1*t[0]/e[0];a[1]=1*t[1]/e[1];a[2]=1*t[2]/e[2]}#p(e,t,a){a[0]=.95047*t[0]/e[0];a[1]=1*t[1]/e[1];a[2]=1.08883*t[2]/e[2]}#m(e){return e<=.0031308?MathClamp(12.92*e,0,1):e>=.99554525?1:MathClamp(1.055*e**(1/2.4)-.055,0,1)}#b(e){return e<0?-this.#b(-e):e>8?((e+16)/116)**3:e*CalRGBCS.#d}#y(e,t,a){if(0===e[0]&&0===e[1]&&0===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const r=this.#b(0),i=(1-r)/(1-this.#b(e[0])),n=1-i,s=(1-r)/(1-\ -this.#b(e[1])),o=1-s,c=(1-r)/(1-this.#b(e[2])),l=1-c;a[0]=t[0]*i+n;a[1]=t[1]*s+o;a[2]=t[2]*c+l}#w(e,t,a){if(1===e[0]&&1===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const r=a;this.#f(CalRGBCS.#n,t,r);const i=CalRGBCS.#l;this.#g(e,r,i);this.#f(CalRGBCS.#s,i,a)}#x(e,t,a){const r=a;this.#f(CalRGBCS.#n,t,r);const i=CalRGBCS.#l;this.#p(e,r,i);this.#f(CalRGBCS.#s,i,a)}#i(e,t,a,r,i){const n=MathClamp(e[t]*i,0,1),s=MathClamp(e[t+1]*i,0,1),o=MathClamp(e[t+2]*i,0,1),c=1===n?1:n**this.GR,l=1===s?1:s**this.\ -GG,h=1===o?1:o**this.GB,u=this.MXA*c+this.MXB*l+this.MXC*h,d=this.MYA*c+this.MYB*l+this.MYC*h,f=this.MZA*c+this.MZB*l+this.MZC*h,g=CalRGBCS.#h;g[0]=u;g[1]=d;g[2]=f;const p=CalRGBCS.#u;this.#w(this.whitePoint,g,p);const m=CalRGBCS.#h;this.#y(this.blackPoint,p,m);const b=CalRGBCS.#u;this.#x(CalRGBCS.#c,m,b);const y=CalRGBCS.#h;this.#f(CalRGBCS.#o,b,y);a[r]=255*this.#m(y[0]);a[r+1]=255*this.#m(y[1]);a[r+2]=255*this.#m(y[2])}getRgbItem(e,t,a,r){this.#i(e,t,a,r,1)}getRgbBuffer(e,t,a,r,i,n,s){const o=\ -1/((1<<n)-1);for(let n=0;n<a;++n){this.#i(e,t,r,i,o);t+=3;i+=3+s}}getOutputLength(e,t){return e*(3+t)/3|0}}class LabCS extends ColorSpace{constructor(e,t,a){super("Lab",3);if(!e)throw new FormatError("WhitePoint missing - required for color space Lab");[this.XW,this.YW,this.ZW]=e;[this.amin,this.amax,this.bmin,this.bmax]=a||[-100,100,-100,100];[this.XB,this.YB,this.ZB]=t||[0,0,0];if(this.XW<0||this.ZW<0||1!==this.YW)throw new FormatError("Invalid WhitePoint components, no fallback available");if\ -(this.XB<0||this.YB<0||this.ZB<0){info("Invalid BlackPoint, falling back to default");this.XB=this.YB=this.ZB=0}if(this.amin>this.amax||this.bmin>this.bmax){info("Invalid Range, falling back to defaults");this.amin=-100;this.amax=100;this.bmin=-100;this.bmax=100}}#S(e){return e>=6/29?e**3:108/841*(e-4/29)}#A(e,t,a,r){return a+e*(r-a)/t}#i(e,t,a,r,i){let n=e[t],s=e[t+1],o=e[t+2];if(!1!==a){n=this.#A(n,a,0,100);s=this.#A(s,a,this.amin,this.amax);o=this.#A(o,a,this.bmin,this.bmax)}s>this.amax?s=thi\ -s.amax:s<this.amin&&(s=this.amin);o>this.bmax?o=this.bmax:o<this.bmin&&(o=this.bmin);const c=(n+16)/116,l=c+s/500,h=c-o/200,u=this.XW*this.#S(l),d=this.YW*this.#S(c),f=this.ZW*this.#S(h);let g,p,m;if(this.ZW<1){g=3.1339*u+-1.617*d+-.4906*f;p=-.9785*u+1.916*d+.0333*f;m=.072*u+-.229*d+1.4057*f}else{g=3.2406*u+-1.5372*d+-.4986*f;p=-.9689*u+1.8758*d+.0415*f;m=.0557*u+-.204*d+1.057*f}r[i]=255*Math.sqrt(g);r[i+1]=255*Math.sqrt(p);r[i+2]=255*Math.sqrt(m)}getRgbItem(e,t,a,r){this.#i(e,t,!1,a,r)}getRgbBu\ -ffer(e,t,a,r,i,n,s){const o=(1<<n)-1;for(let n=0;n<a;n++){this.#i(e,t,o,r,i);t+=3;i+=3+s}}getOutputLength(e,t){return e*(3+t)/3|0}isDefaultDecode(e,t){return!0}get usesZeroToOneRange(){return shadow(this,"usesZeroToOneRange",!1)}}function fetchSync(e){const t=new XMLHttpRequest;t.open("GET",e,!1);t.responseType="arraybuffer";t.send(null);return t.response}class IccColorSpace extends ColorSpace{#k;#C;static#v=!0;static#F=null;static#I=new FinalizationRegistry((e=>{!function qcms_drop_transformer(\ -e){Da.qcms_drop_transformer(e)}(e)}));constructor(e,t,a){if(!IccColorSpace.isUsable)throw new Error("No ICC color space support");super(t,a);let r;switch(a){case 1:r=Ea.Gray8;this.#C=(e,t,a)=>function qcms_convert_one(e,t,a){Da.qcms_convert_one(e,t,a)}(this.#k,255*e[t],a);break;case 3:r=Ea.RGB8;this.#C=(e,t,a)=>function qcms_convert_three(e,t,a,r,i){Da.qcms_convert_three(e,t,a,r,i)}(this.#k,255*e[t],255*e[t+1],255*e[t+2],a);break;case 4:r=Ea.CMYK;this.#C=(e,t,a)=>function qcms_convert_four(e,t,a\ -,r,i,n){Da.qcms_convert_four(e,t,a,r,i,n)}(this.#k,255*e[t],255*e[t+1],255*e[t+2],255*e[t+3],a);break;default:throw new Error(`Unsupported number of components: ${a}`)}this.#k=function qcms_transformer_from_memory(e,t,a){const r=passArray8ToWasm0(e,Da.__wbindgen_malloc),i=Na;return Da.qcms_transformer_from_memory(r,i,t,a)>>>0}(e,r,Pa.Perceptual);if(!this.#k)throw new Error("Failed to create ICC color space");IccColorSpace.#I.register(this,this.#k)}getRgbHex(e,t){this.#C(e,t,!0);return QCMS._cssC\ -olor}getRgbItem(e,t,a,r){QCMS._destBuffer=a;QCMS._destOffset=r;QCMS._destLength=3;this.#C(e,t,!1);QCMS._destBuffer=null}getRgbBuffer(e,t,a,r,i,n,s){e=e.subarray(t,t+a*this.numComps);if(8!==n){const t=255/((1<<n)-1);for(let a=0,r=e.length;a<r;a++)e[a]*=t}QCMS._mustAddAlpha=s&&r.buffer===e.buffer;QCMS._destBuffer=r;QCMS._destOffset=i;QCMS._destLength=a*(3+s);!function qcms_convert_array(e,t){const a=passArray8ToWasm0(t,Da.__wbindgen_malloc),r=Na;Da.qcms_convert_array(e,a,r)}(this.#k,e);QCMS._mustA\ -ddAlpha=!1;QCMS._destBuffer=null}getOutputLength(e,t){return e/this.numComps*(3+t)|0}static setOptions({useWasm:e,useWorkerFetch:t,wasmUrl:a}){if(t){this.#v=e;this.#F=a}else this.#v=!1}static get isUsable(){let e=!1;if(this.#v)if(this.#F)try{this._module=function initSync(e){if(void 0!==Da)return Da;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?({module:e}=e):console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const t=__wbg_get_imports();e insta\ -nceof WebAssembly.Module||(e=new WebAssembly.Module(e));return __wbg_finalize_init(new WebAssembly.Instance(e,t),e)}({module:fetchSync(`${this.#F}qcms_bg.wasm`)});e=!!this._module;QCMS._memory=this._module.memory;QCMS._makeHexColor=Util.makeHexColor}catch(e){warn(`ICCBased color space: "${e}".`)}else warn("No ICC color space support due to missing `wasmUrl` API option");return shadow(this,"isUsable",e)}}class CmykICCBasedCS extends IccColorSpace{static#T;constructor(){super(new Uint8Array(fetchS\ -ync(`${CmykICCBasedCS.#T}CGATS001Compat-v2-micro.icc`)),"DeviceCMYK",4)}static setOptions({iccUrl:e}){this.#T=e}static get isUsable(){let e=!1;IccColorSpace.isUsable&&(this.#T?e=!0:warn("No CMYK ICC profile support due to missing `iccUrl` API option"));return shadow(this,"isUsable",e)}}class Stream extends BaseStream{constructor(e,t,a,r){super();this.bytes=e instanceof Uint8Array?e:new Uint8Array(e);this.start=t||0;this.pos=this.start;this.end=t+a||this.bytes.length;this.dict=r}get length(){retu\ -rn this.end-this.start}get isEmpty(){return 0===this.length}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(e){const t=this.bytes,a=this.pos,r=this.end;if(!e)return t.subarray(a,r);let i=a+e;i>r&&(i=r);this.pos=i;return t.subarray(a,i)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);return this.bytes.subarray(e,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(e,t,a=null){return new Stream(this.bytes.buffer,e,t,a)}}class StringStream extend\ -s Stream{constructor(e){super(stringToBytes(e))}}class NullStream extends Stream{constructor(){super(new Uint8Array(0))}}class ChunkedStream extends Stream{constructor(e,t,a){super(new Uint8Array(e),0,e,null);this.chunkSize=t;this._loadedChunks=new Set;this.numChunks=Math.ceil(e/t);this.manager=a;this.progressiveDataLength=0;this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){const e=[];for(let t=0,a=this.numChunks;t<a;++t)this._loadedChunks.has(t)||e.push(t);return e}get numChunksLoaded(){\ -return this._loadedChunks.size}get isDataLoaded(){return this.numChunksLoaded===this.numChunks}onReceiveData(e,t){const a=this.chunkSize;if(e%a!=0)throw new Error(`Bad begin offset: ${e}`);const r=e+t.byteLength;if(r%a!=0&&r!==this.bytes.length)throw new Error(`Bad end offset: ${r}`);this.bytes.set(new Uint8Array(t),e);const i=Math.floor(e/a),n=Math.floor((r-1)/a)+1;for(let e=i;e<n;++e)this._loadedChunks.add(e)}onReceiveProgressiveData(e){let t=this.progressiveDataLength;const a=Math.floor(t/thi\ -s.chunkSize);this.bytes.set(new Uint8Array(e),t);t+=e.byteLength;this.progressiveDataLength=t;const r=t>=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let e=a;e<r;++e)this._loadedChunks.add(e)}ensureByte(e){if(e<this.progressiveDataLength)return;const t=Math.floor(e/this.chunkSize);if(!(t>this.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(e,t){if(e>=t)return;if(t\ -<=this.progressiveDataLength)return;const a=Math.floor(e/this.chunkSize);if(a>this.numChunks)return;const r=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let i=a;i<r;++i)if(!this._loadedChunks.has(i))throw new MissingDataException(e,t)}nextEmptyChunk(e){const t=this.numChunks;for(let a=0;a<t;++a){const r=(e+a)%t;if(!this._loadedChunks.has(r))return r}return null}hasChunk(e){return this._loadedChunks.has(e)}getByte(){const e=this.pos;if(e>=this.end)return-1;e>=this.progressiveDa\ -taLength&&this.ensureByte(e);return this.bytes[this.pos++]}getBytes(e){const t=this.bytes,a=this.pos,r=this.end;if(!e){r>this.progressiveDataLength&&this.ensureRange(a,r);return t.subarray(a,r)}let i=a+e;i>r&&(i=r);i>this.progressiveDataLength&&this.ensureRange(a,i);this.pos=i;return t.subarray(a,i)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);t>this.progressiveDataLength&&this.ensureRange(e,t);return this.bytes.subarray(e,t)}makeSubStream(e,t,a=null){t?e+t>this.progressiveDataLength&&t\ -his.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e);function ChunkedStreamSubstream(){}ChunkedStreamSubstream.prototype=Object.create(this);ChunkedStreamSubstream.prototype.getMissingChunks=function(){const e=this.chunkSize,t=Math.floor(this.start/e),a=Math.floor((this.end-1)/e)+1,r=[];for(let e=t;e<a;++e)this._loadedChunks.has(e)||r.push(e);return r};Object.defineProperty(ChunkedStreamSubstream.prototype,"isDataLoaded",{get(){return this.numChunksLoaded===this.numChunks||0=\ -==this.getMissingChunks().length},configurable:!0});const r=new ChunkedStreamSubstream;r.pos=r.start=e;r.end=e+t||this.end;r.dict=a;return r}getBaseStreams(){return[this]}}class ChunkedStreamManager{constructor(e,t){this.length=t.length;this.chunkSize=t.rangeChunkSize;this.stream=new ChunkedStream(this.length,this.chunkSize,this);this.pdfNetworkStream=e;this.disableAutoFetch=t.disableAutoFetch;this.msgHandler=t.msgHandler;this.currRequestId=0;this._chunksNeededByRequest=new Map;this._requestsByC\ -hunk=new Map;this._promisesByRequest=new Map;this.progressiveDataLength=0;this.aborted=!1;this._loadedStreamCapability=Promise.withResolvers()}sendRequest(e,t){const a=this.pdfNetworkStream.getRangeReader(e,t);a.isStreamingSupported||(a.onProgress=this.onProgress.bind(this));let r=[],i=0;return new Promise(((e,t)=>{const readChunk=({value:n,done:s})=>{try{if(s){const t=arrayBuffersToBytes(r);r=null;e(t);return}i+=n.byteLength;a.isStreamingSupported&&this.onProgress({loaded:i});r.push(n);a.read()\ -.then(readChunk,t)}catch(e){t(e)}};a.read().then(readChunk,t)})).then((t=>{this.aborted||this.onReceiveData({chunk:t,begin:e})}))}requestAllChunks(e=!1){if(!e){const e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}_requestChunks(e){const t=this.currRequestId++,a=new Set;this._chunksNeededByRequest.set(t,a);for(const t of e)this.stream.hasChunk(t)||a.add(t);if(0===a.size)return Promise.resolve();const r=Promise.withResolvers();this._promisesByRe\ -quest.set(t,r);const i=[];for(const e of a){let a=this._requestsByChunk.get(e);if(!a){a=[];this._requestsByChunk.set(e,a);i.push(e)}a.push(t)}if(i.length>0){const e=this.groupChunks(i);for(const t of e){const e=t.beginChunk*this.chunkSize,a=Math.min(t.endChunk*this.chunkSize,this.length);this.sendRequest(e,a).catch(r.reject)}}return r.promise.catch((e=>{if(!this.aborted)throw e}))}getStream(){return this.stream}requestRange(e,t){t=Math.min(t,this.length);const a=this.getBeginChunk(e),r=this.getE\ -ndChunk(t),i=[];for(let e=a;e<r;++e)i.push(e);return this._requestChunks(i)}requestRanges(e=[]){const t=[];for(const a of e){const e=this.getBeginChunk(a.begin),r=this.getEndChunk(a.end);for(let a=e;a<r;++a)t.includes(a)||t.push(a)}t.sort(((e,t)=>e-t));return this._requestChunks(t)}groupChunks(e){const t=[];let a=-1,r=-1;for(let i=0,n=e.length;i<n;++i){const n=e[i];a<0&&(a=n);if(r>=0&&r+1!==n){t.push({beginChunk:a,endChunk:r+1});a=n}i+1===e.length&&t.push({beginChunk:a,endChunk:n+1});r=n}return \ -t}onProgress(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}onReceiveData(e){const t=e.chunk,a=void 0===e.begin,r=a?this.progressiveDataLength:e.begin,i=r+t.byteLength,n=Math.floor(r/this.chunkSize),s=i<this.length?Math.floor(i/this.chunkSize):Math.ceil(i/this.chunkSize);if(a){this.stream.onReceiveProgressiveData(t);this.progressiveDataLength=i}else this.stream.onReceiveData(r,t);this.stream.isDataLoaded&&this._loadedStreamCa\ -pability.resolve(this.stream);const o=[];for(let e=n;e<s;++e){const t=this._requestsByChunk.get(e);if(t){this._requestsByChunk.delete(e);for(const a of t){const t=this._chunksNeededByRequest.get(a);t.has(e)&&t.delete(e);t.size>0||o.push(a)}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){let e;if(1===this.stream.numChunksLoaded){const t=this.stream.numChunks-1;this.stream.hasChunk(t)||(e=t)}else e=this.stream.nextEmptyChunk(s);Number.isInteger(e)&&this._requestChunks([e])}for(const e\ - of o){const t=this._promisesByRequest.get(e);this._promisesByRequest.delete(e);t.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(e){this._loadedStreamCapability.reject(e)}getBeginChunk(e){return Math.floor(e/this.chunkSize)}getEndChunk(e){return Math.floor((e-1)/this.chunkSize)+1}abort(e){this.aborted=!0;this.pdfNetworkStream?.cancelAllRequests(e);for(const t of this._promisesByRequest.values())t.reject(e)}}function con\ -vertToRGBA(e){switch(e.kind){case k:return convertBlackAndWhiteToRGBA(e);case C:return function convertRGBToRGBA({src:e,srcPos:t=0,dest:a,destPos:r=0,width:i,height:n}){let s=0;const o=i*n*3,c=o>>2,l=new Uint32Array(e.buffer,t,c);if(FeatureTest.isLittleEndian){for(;s<c-2;s+=3,r+=4){const e=l[s],t=l[s+1],i=l[s+2];a[r]=4278190080|e;a[r+1]=e>>>24|t<<8|4278190080;a[r+2]=t>>>16|i<<16|4278190080;a[r+3]=i>>>8|4278190080}for(let i=4*s,n=t+o;i<n;i+=3)a[r++]=e[i]|e[i+1]<<8|e[i+2]<<16|4278190080}else{for(;\ -s<c-2;s+=3,r+=4){const e=l[s],t=l[s+1],i=l[s+2];a[r]=255|e;a[r+1]=e<<24|t>>>8|255;a[r+2]=t<<16|i>>>16|255;a[r+3]=i<<8|255}for(let i=4*s,n=t+o;i<n;i+=3)a[r++]=e[i]<<24|e[i+1]<<16|e[i+2]<<8|255}return{srcPos:t+o,destPos:r}}(e)}return null}function convertBlackAndWhiteToRGBA({src:e,srcPos:t=0,dest:a,width:r,height:i,nonBlackColor:n=4294967295,inverseDecode:s=!1}){const o=FeatureTest.isLittleEndian?4278190080:255,[c,l]=s?[n,o]:[o,n],h=r>>3,u=7&r,d=e.length;a=new Uint32Array(a.buffer);let f=0;for(let\ - r=0;r<i;r++){for(const r=t+h;t<r;t++){const r=t<d?e[t]:255;a[f++]=128&r?l:c;a[f++]=64&r?l:c;a[f++]=32&r?l:c;a[f++]=16&r?l:c;a[f++]=8&r?l:c;a[f++]=4&r?l:c;a[f++]=2&r?l:c;a[f++]=1&r?l:c}if(0===u)continue;const r=t<d?e[t++]:255;for(let e=0;e<u;e++)a[f++]=r&1<<7-e?l:c}return{srcPos:t,destPos:f}}class ImageResizer{static#O=2048;static#M=FeatureTest.isImageDecoderSupported;constructor(e,t){this._imgData=e;this._isMask=t}static get canUseImageDecoder(){return shadow(this,"canUseImageDecoder",this.#M?I\ -mageDecoder.isTypeSupported("image/bmp"):Promise.resolve(!1))}static needsToBeResized(e,t){if(e<=this.#O&&t<=this.#O)return!1;const{MAX_DIM:a}=this;if(e>a||t>a)return!0;const r=e*t;if(this._hasMaxArea)return r>this.MAX_AREA;if(r<this.#O**2)return!1;if(this._areGoodDims(e,t)){this.#O=Math.max(this.#O,Math.floor(Math.sqrt(e*t)));return!1}this.#O=this._guessMax(this.#O,a,128,0);return r>(this.MAX_AREA=this.#O**2)}static getReducePowerForJPX(e,t,a){const r=e*t,i=2**30/(4*a);if(!this.needsToBeResized\ -(e,t))return r>i?Math.ceil(Math.log2(r/i)):0;const{MAX_DIM:n,MAX_AREA:s}=this,o=Math.max(e/n,t/n,Math.sqrt(r/Math.min(i,s)));return Math.ceil(Math.log2(o))}static get MAX_DIM(){return shadow(this,"MAX_DIM",this._guessMax(2048,65537,0,1))}static get MAX_AREA(){this._hasMaxArea=!0;return shadow(this,"MAX_AREA",this._guessMax(this.#O,this.MAX_DIM,128,0)**2)}static set MAX_AREA(e){if(e>=0){this._hasMaxArea=!0;shadow(this,"MAX_AREA",e)}}static setOptions({canvasMaxAreaInBytes:e=-1,isImageDecoderSuppo\ -rted:t=!1}){this._hasMaxArea||(this.MAX_AREA=e>>2);this.#M=t}static _areGoodDims(e,t){try{const a=new OffscreenCanvas(e,t),r=a.getContext("2d");r.fillRect(0,0,1,1);const i=r.getImageData(0,0,1,1).data[3];a.width=a.height=1;return 0!==i}catch{return!1}}static _guessMax(e,t,a,r){for(;e+a+1<t;){const a=Math.floor((e+t)/2),i=r||a;this._areGoodDims(a,i)?e=a:t=a}return e}static async createImage(e,t=!1){return new ImageResizer(e,t)._createImage()}async _createImage(){const{_imgData:e}=this,{width:t,he\ -ight:a}=e;if(t*a*4>va){const e=this.#D();if(e)return e}const r=this._encodeBMP();let i,n;if(await ImageResizer.canUseImageDecoder){i=new ImageDecoder({data:r,type:"image/bmp",preferAnimation:!1,transfer:[r.buffer]});n=i.decode().catch((e=>{warn(`BMP image decoding failed: ${e}`);return createImageBitmap(new Blob([this._encodeBMP().buffer],{type:"image/bmp"}))})).finally((()=>{i.close()}))}else n=createImageBitmap(new Blob([r.buffer],{type:"image/bmp"}));const{MAX_AREA:s,MAX_DIM:o}=ImageResizer,c\ -=Math.max(t/o,a/o,Math.sqrt(t*a/s)),l=Math.max(c,2),h=Math.round(10*(c+1.25))/10/l,u=Math.floor(Math.log2(h)),d=new Array(u+2).fill(2);d[0]=l;d.splice(-1,1,h/(1<<u));let f=t,g=a;const p=await n;let m=p.image||p;for(const e of d){const t=f,a=g;f=Math.floor(f/e)-1;g=Math.floor(g/e)-1;const r=new OffscreenCanvas(f,g);r.getContext("2d").drawImage(m,0,0,t,a,0,0,f,g);m.close();m=r.transferToImageBitmap()}e.data=null;e.bitmap=m;e.width=f;e.height=g;return e}#D(){const{_imgData:e}=this,{data:t,width:a,h\ -eight:r,kind:i}=e,n=a*r*4,s=Math.ceil(Math.log2(n/va)),o=a>>s,c=r>>s;let l,h=r;try{l=new Uint8Array(n)}catch{let e=Math.floor(Math.log2(n+1));for(;;)try{l=new Uint8Array(2**e-1);break}catch{e-=1}h=Math.floor((2**e-1)/(4*a));const t=a*h*4;t<l.length&&(l=new Uint8Array(t))}const u=new Uint32Array(l.buffer),d=new Uint32Array(o*c);let f=0,g=0;const p=Math.ceil(r/h),m=r%h==0?r:r%h;for(let e=0;e<p;e++){const r=e<p-1?h:m;({srcPos:f}=convertToRGBA({kind:i,src:t,dest:u,width:a,height:r,inverseDecode:this\ -._isMask,srcPos:f}));for(let e=0,t=r>>s;e<t;e++){const t=u.subarray((e<<s)*a);for(let e=0;e<o;e++)d[g++]=t[e<<s]}}if(ImageResizer.needsToBeResized(o,c)){e.data=d;e.width=o;e.height=c;e.kind=v;return null}const b=new OffscreenCanvas(o,c);b.getContext("2d",{willReadFrequently:!0}).putImageData(new ImageData(new Uint8ClampedArray(d.buffer),o,c),0,0);e.data=null;e.bitmap=b.transferToImageBitmap();e.width=o;e.height=c;return e}_encodeBMP(){const{width:e,height:t,kind:a}=this._imgData;let r,i=this._im\ -gData.data,n=new Uint8Array(0),s=n,o=0;switch(a){case k:{r=1;n=new Uint8Array(this._isMask?[255,255,255,255,0,0,0,0]:[0,0,0,0,255,255,255,255]);const a=e+7>>3,s=a+3&-4;if(a!==s){const e=new Uint8Array(s*t);let r=0;for(let n=0,o=t*a;n<o;n+=a,r+=s)e.set(i.subarray(n,n+a),r);i=e}break}case C:r=24;if(3&e){const a=3*e,r=a+3&-4,n=r-a,s=new Uint8Array(r*t);let o=0;for(let e=0,r=t*a;e<r;e+=a){const t=i.subarray(e,e+a);for(let e=0;e<a;e+=3){s[o++]=t[e+2];s[o++]=t[e+1];s[o++]=t[e]}o+=n}i=s}else for(let e=\ -0,t=i.length;e<t;e+=3){const t=i[e];i[e]=i[e+2];i[e+2]=t}break;case v:r=32;o=3;s=new Uint8Array(68);const a=new DataView(s.buffer);if(FeatureTest.isLittleEndian){a.setUint32(0,255,!0);a.setUint32(4,65280,!0);a.setUint32(8,16711680,!0);a.setUint32(12,4278190080,!0)}else{a.setUint32(0,4278190080,!0);a.setUint32(4,16711680,!0);a.setUint32(8,65280,!0);a.setUint32(12,255,!0)}break;default:throw new Error("invalid format")}let c=0;const l=40+s.length,h=14+l+n.length+i.length,u=new Uint8Array(h),d=new \ -DataView(u.buffer);d.setUint16(c,19778,!0);c+=2;d.setUint32(c,h,!0);c+=4;d.setUint32(c,0,!0);c+=4;d.setUint32(c,14+l+n.length,!0);c+=4;d.setUint32(c,l,!0);c+=4;d.setInt32(c,e,!0);c+=4;d.setInt32(c,-t,!0);c+=4;d.setUint16(c,1,!0);c+=2;d.setUint16(c,r,!0);c+=2;d.setUint32(c,o,!0);c+=4;d.setUint32(c,0,!0);c+=4;d.setInt32(c,0,!0);c+=4;d.setInt32(c,0,!0);c+=4;d.setUint32(c,n.length/4,!0);c+=4;d.setUint32(c,0,!0);c+=4;u.set(s,c);c+=s.length;u.set(n,c);c+=n.length;u.set(i,c);return u}}const La=new Uint\ -8Array(0);class DecodeStream extends BaseStream{constructor(e){super();this._rawMinBufferLength=e||0;this.pos=0;this.bufferLength=0;this.eof=!1;this.buffer=La;this.minBufferLength=512;if(e)for(;this.minBufferLength<e;)this.minBufferLength*=2}get isEmpty(){for(;!this.eof&&0===this.bufferLength;)this.readBlock();return 0===this.bufferLength}ensureBuffer(e){const t=this.buffer;if(e<=t.byteLength)return t;let a=this.minBufferLength;for(;a<e;)a*=2;const r=new Uint8Array(a);r.set(t);return this.buffer\ -=r}getByte(){const e=this.pos;for(;this.bufferLength<=e;){if(this.eof)return-1;this.readBlock()}return this.buffer[this.pos++]}getBytes(e,t=null){const a=this.pos;let r;if(e){this.ensureBuffer(a+e);r=a+e;for(;!this.eof&&this.bufferLength<r;)this.readBlock(t);const i=this.bufferLength;r>i&&(r=i)}else{for(;!this.eof;)this.readBlock(t);r=this.bufferLength}this.pos=r;return this.buffer.subarray(a,r)}async getImageData(e,t){if(!this.canAsyncDecodeImageFromBuffer)return this.isAsyncDecoder?this.decode\ -Image(null,t):this.getBytes(e,t);const a=await this.stream.asyncGetBytes();return this.decodeImage(a,t)}reset(){this.pos=0}makeSubStream(e,t,a=null){if(void 0===t)for(;!this.eof;)this.readBlock();else{const a=e+t;for(;this.bufferLength<=a&&!this.eof;)this.readBlock()}return new Stream(this.buffer,e,t,a)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}}class StreamsSequenceStream extends DecodeStream{constructor(e,t=null){e=e.filter((e=>e instanceof BaseStream));let a=0;for(const \ -t of e)a+=t instanceof DecodeStream?t._rawMinBufferLength:t.length;super(a);this.streams=e;this._onError=t}readBlock(){const e=this.streams;if(0===e.length){this.eof=!0;return}const t=e.shift();let a;try{a=t.getBytes()}catch(e){if(this._onError){this._onError(e,t.dict?.objId);return}throw e}const r=this.bufferLength,i=r+a.length;this.ensureBuffer(i).set(a,r);this.bufferLength=i}getBaseStreams(){const e=[];for(const t of this.streams){const a=t.getBaseStreams();a&&e.push(...a)}return e.length>0?e\ -:null}}class ColorSpaceUtils{static parse({cs:e,xref:t,resources:a=null,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n,asyncIfNotCached:s=!1}){const o={xref:t,resources:a,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n};let c,l,h;if(e instanceof Ref){l=e;const a=i.getByRef(l)||n.getByRef(l);if(a)return a;e=t.fetch(e)}if(e instanceof Name){c=e.name;const t=n.getByName(c);if(t)return t}try{h=this.#B(e,o)}catch(e){if(s&&!(e instanceof MissingDataException))r\ -eturn Promise.reject(e);throw e}if(c||l){n.set(c,l,h);l&&i.set(null,l,h)}return s?Promise.resolve(h):h}static#R(e,t){const{globalColorSpaceCache:a}=t;let r;if(e instanceof Ref){r=e;const t=a.getByRef(r);if(t)return t}const i=this.#B(e,t);r&&a.set(null,r,i);return i}static#B(e,t){const{xref:a,resources:r,pdfFunctionFactory:i,globalColorSpaceCache:n}=t;if((e=a.fetchIfRef(e))instanceof Name)switch(e.name){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"Devic\ -eRGBA":return this.rgba;case"CMYK":case"DeviceCMYK":return this.cmyk;case"Pattern":return new PatternCS(null);default:if(r instanceof Dict){const a=r.get("ColorSpace");if(a instanceof Dict){const r=a.get(e.name);if(r){if(r instanceof Name)return this.#B(r,t);e=r;break}}}warn(`Unrecognized ColorSpace: ${e.name}`);return this.gray}if(Array.isArray(e)){const r=a.fetchIfRef(e[0]).name;let s,o,c,l,h,u;switch(r){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"C\ -MYK":case"DeviceCMYK":return this.cmyk;case"CalGray":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");u=s.get("Gamma");return new CalGrayCS(l,h,u);case"CalRGB":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");u=s.getArray("Gamma");const d=s.getArray("Matrix");return new CalRGBCS(l,h,u,d);case"ICCBased":const f=e[1]instanceof Ref;if(f){const t=n.getByRef(e[1]);if(t)return t}const g=a.fetchIfRef(e[1]),p=g.dict;o=p.get("N");if(IccColorSpace.isUsab\ -le)try{const t=new IccColorSpace(g.getBytes(),"ICCBased",o);f&&n.set(null,e[1],t);return t}catch(t){if(t instanceof MissingDataException)throw t;warn(`ICCBased color space (${e[1]}): "${t}".`)}const m=p.getRaw("Alternate");if(m){const e=this.#R(m,t);if(e.numComps===o)return e;warn("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===o)return this.gray;if(3===o)return this.rgb;if(4===o)return this.cmyk;break;case"Pattern":c=e[1]||null;c&&(c=this.#R(c,t));return new PatternCS(c);ca\ -se"I":case"Indexed":c=this.#R(e[1],t);const b=MathClamp(a.fetchIfRef(e[2]),0,255),y=a.fetchIfRef(e[3]);return new IndexedCS(c,b,y);case"Separation":case"DeviceN":const w=a.fetchIfRef(e[1]);o=Array.isArray(w)?w.length:1;c=this.#R(e[2],t);const x=i.create(e[3]);return new AlternateCS(o,c,x);case"Lab":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");const S=s.getArray("Range");return new LabCS(l,h,S);default:warn(`Unimplemented ColorSpace object: ${r}`);return this.gray}}w\ -arn(`Unrecognized ColorSpace object: ${e}`);return this.gray}static get gray(){return shadow(this,"gray",new DeviceGrayCS)}static get rgb(){return shadow(this,"rgb",new DeviceRgbCS)}static get rgba(){return shadow(this,"rgba",new DeviceRgbaCS)}static get cmyk(){if(CmykICCBasedCS.isUsable)try{return shadow(this,"cmyk",new CmykICCBasedCS)}catch{warn("CMYK fallback: DeviceCMYK")}return shadow(this,"cmyk",new DeviceCmykCS)}}class JpegError extends fa{constructor(e){super(e,"JpegError")}}class DNLMar\ -kerError extends fa{constructor(e,t){super(e,"DNLMarkerError");this.scanLines=t}}class EOIMarkerError extends fa{constructor(e){super(e,"EOIMarkerError")}}const ja=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),_a=4017,Ua=799,Xa=3406,qa=2276,Ha=1567,Wa=3784,za=5793,$a=2896;function buildHuffmanTable(e,t){let a,r,i=0,n=16;for(;n>0&&!e[n-1];)n--;c\ -onst s=[{children:[],index:0}];let o,c=s[0];for(a=0;a<n;a++){for(r=0;r<e[a];r++){c=s.pop();c.children[c.index]=t[i];for(;c.index>0;)c=s.pop();c.index++;s.push(c);for(;s.length<=a;){s.push(o={children:[],index:0});c.children[c.index]=o.children;c=o}i++}if(a+1<n){s.push(o={children:[],index:0});c.children[c.index]=o.children;c=o}}return s[0].children}function getBlockBufferOffset(e,t,a){return 64*((e.blocksPerLine+1)*t+a)}function decodeScan(e,t,a,r,i,n,s,o,c,l=!1){const h=a.mcusPerLine,u=a.progre\ -ssive,d=t;let f=0,g=0;function readBit(){if(g>0){g--;return f>>g&1}f=e[t++];if(255===f){const r=e[t++];if(r){if(220===r&&l){const r=readUint16(e,t+=2);t+=2;if(r>0&&r!==a.scanLines)throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",r)}else if(217===r){if(l){const e=y*(8===a.precision?8:0);if(e>0&&Math.round(a.scanLines/e)>=5)throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",e)}throw new EOIMar\ -kerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new JpegError(`unexpected marker ${(f<<8|r).toString(16)}`)}}g=7;return f>>>7}function decodeHuffman(e){let t=e;for(;;){t=t[readBit()];switch(typeof t){case"number":return t;case"object":continue}throw new JpegError("invalid huffman sequence")}}function receive(e){let t=0;for(;e>0;){t=t<<1|readBit();e--}return t}function receiveAndExtend(e){if(1===e)return 1===readBit()?1:-1;const t=receive(e);return t>=1<<e-1?t:t+(-1<<e)+1}let \ -p=0;let m,b=0;let y=0;function decodeMcu(e,t,a,r,i){const n=a%h;y=(a/h|0)*e.v+r;const s=n*e.h+i;t(e,getBlockBufferOffset(e,y,s))}function decodeBlock(e,t,a){y=a/e.blocksPerLine|0;const r=a%e.blocksPerLine;t(e,getBlockBufferOffset(e,y,r))}const w=r.length;let x,S,k,C,v,F;F=u?0===n?0===o?function decodeDCFirst(e,t){const a=decodeHuffman(e.huffmanTableDC),r=0===a?0:receiveAndExtend(a)<<c;e.blockData[t]=e.pred+=r}:function decodeDCSuccessive(e,t){e.blockData[t]|=readBit()<<c}:0===o?function decodeAC\ -First(e,t){if(p>0){p--;return}let a=n;const r=s;for(;a<=r;){const r=decodeHuffman(e.huffmanTableAC),i=15&r,n=r>>4;if(0===i){if(n<15){p=receive(n)+(1<<n)-1;break}a+=16;continue}a+=n;const s=ja[a];e.blockData[t+s]=receiveAndExtend(i)*(1<<c);a++}}:function decodeACSuccessive(e,t){let a=n;const r=s;let i,o,l=0;for(;a<=r;){const r=t+ja[a],n=e.blockData[r]<0?-1:1;switch(b){case 0:o=decodeHuffman(e.huffmanTableAC);i=15&o;l=o>>4;if(0===i)if(l<15){p=receive(l)+(1<<l);b=4}else{l=16;b=1}else{if(1!==i)throw\ - new JpegError("invalid ACn encoding");m=receiveAndExtend(i);b=l?2:3}continue;case 1:case 2:if(e.blockData[r])e.blockData[r]+=n*(readBit()<<c);else{l--;0===l&&(b=2===b?3:0)}break;case 3:if(e.blockData[r])e.blockData[r]+=n*(readBit()<<c);else{e.blockData[r]=m<<c;b=0}break;case 4:e.blockData[r]&&(e.blockData[r]+=n*(readBit()<<c))}a++}if(4===b){p--;0===p&&(b=0)}}:function decodeBaseline(e,t){const a=decodeHuffman(e.huffmanTableDC),r=0===a?0:receiveAndExtend(a);e.blockData[t]=e.pred+=r;let i=1;for(;\ -i<64;){const a=decodeHuffman(e.huffmanTableAC),r=15&a,n=a>>4;if(0===r){if(n<15)break;i+=16;continue}i+=n;const s=ja[i];e.blockData[t+s]=receiveAndExtend(r);i++}};let T,O=0;const M=1===w?r[0].blocksPerLine*r[0].blocksPerColumn:h*a.mcusPerColumn;let D,R;for(;O<=M;){const a=i?Math.min(M-O,i):M;if(a>0){for(S=0;S<w;S++)r[S].pred=0;p=0;if(1===w){x=r[0];for(v=0;v<a;v++){decodeBlock(x,F,O);O++}}else for(v=0;v<a;v++){for(S=0;S<w;S++){x=r[S];D=x.h;R=x.v;for(k=0;k<R;k++)for(C=0;C<D;C++)decodeMcu(x,F,O,k,C)\ -}O++}}g=0;T=findNextFileMarker(e,t);if(!T)break;if(T.invalid){warn(`decodeScan - ${a>0?"unexpected":"excessive"} MCU data, current marker is: ${T.invalid}`);t=T.offset}if(!(T.marker>=65488&&T.marker<=65495))break;t+=2}return t-d}function quantizeAndInverse(e,t,a){const r=e.quantizationTable,i=e.blockData;let n,s,o,c,l,h,u,d,f,g,p,m,b,y,w,x,S;if(!r)throw new JpegError("missing required Quantization Table.");for(let e=0;e<64;e+=8){f=i[t+e];g=i[t+e+1];p=i[t+e+2];m=i[t+e+3];b=i[t+e+4];y=i[t+e+5];w=i\ -[t+e+6];x=i[t+e+7];f*=r[e];if(g|p|m|b|y|w|x){g*=r[e+1];p*=r[e+2];m*=r[e+3];b*=r[e+4];y*=r[e+5];w*=r[e+6];x*=r[e+7];n=za*f+128>>8;s=za*b+128>>8;o=p;c=w;l=$a*(g-x)+128>>8;d=$a*(g+x)+128>>8;h=m<<4;u=y<<4;n=n+s+1>>1;s=n-s;S=o*Wa+c*Ha+128>>8;o=o*Ha-c*Wa+128>>8;c=S;l=l+u+1>>1;u=l-u;d=d+h+1>>1;h=d-h;n=n+c+1>>1;c=n-c;s=s+o+1>>1;o=s-o;S=l*qa+d*Xa+2048>>12;l=l*Xa-d*qa+2048>>12;d=S;S=h*Ua+u*_a+2048>>12;h=h*_a-u*Ua+2048>>12;u=S;a[e]=n+d;a[e+7]=n-d;a[e+1]=s+u;a[e+6]=s-u;a[e+2]=o+h;a[e+5]=o-h;a[e+3]=c+l;a[e+4\ -]=c-l}else{S=za*f+512>>10;a[e]=S;a[e+1]=S;a[e+2]=S;a[e+3]=S;a[e+4]=S;a[e+5]=S;a[e+6]=S;a[e+7]=S}}for(let e=0;e<8;++e){f=a[e];g=a[e+8];p=a[e+16];m=a[e+24];b=a[e+32];y=a[e+40];w=a[e+48];x=a[e+56];if(g|p|m|b|y|w|x){n=za*f+2048>>12;s=za*b+2048>>12;o=p;c=w;l=$a*(g-x)+2048>>12;d=$a*(g+x)+2048>>12;h=m;u=y;n=4112+(n+s+1>>1);s=n-s;S=o*Wa+c*Ha+2048>>12;o=o*Ha-c*Wa+2048>>12;c=S;l=l+u+1>>1;u=l-u;d=d+h+1>>1;h=d-h;n=n+c+1>>1;c=n-c;s=s+o+1>>1;o=s-o;S=l*qa+d*Xa+2048>>12;l=l*Xa-d*qa+2048>>12;d=S;S=h*Ua+u*_a+2048\ ->>12;h=h*_a-u*Ua+2048>>12;u=S;f=n+d;x=n-d;g=s+u;w=s-u;p=o+h;y=o-h;m=c+l;b=c-l;f<16?f=0:f>=4080?f=255:f>>=4;g<16?g=0:g>=4080?g=255:g>>=4;p<16?p=0:p>=4080?p=255:p>>=4;m<16?m=0:m>=4080?m=255:m>>=4;b<16?b=0:b>=4080?b=255:b>>=4;y<16?y=0:y>=4080?y=255:y>>=4;w<16?w=0:w>=4080?w=255:w>>=4;x<16?x=0:x>=4080?x=255:x>>=4;i[t+e]=f;i[t+e+8]=g;i[t+e+16]=p;i[t+e+24]=m;i[t+e+32]=b;i[t+e+40]=y;i[t+e+48]=w;i[t+e+56]=x}else{S=za*f+8192>>14;S=S<-2040?0:S>=2024?255:S+2056>>4;i[t+e]=S;i[t+e+8]=S;i[t+e+16]=S;i[t+e+24]=S\ -;i[t+e+32]=S;i[t+e+40]=S;i[t+e+48]=S;i[t+e+56]=S}}}function buildComponentData(e,t){const a=t.blocksPerLine,r=t.blocksPerColumn,i=new Int16Array(64);for(let e=0;e<r;e++)for(let r=0;r<a;r++){quantizeAndInverse(t,getBlockBufferOffset(t,e,r),i)}return t.blockData}function findNextFileMarker(e,t,a=t){const r=e.length-1;let i=a<t?a:t;if(t>=r)return null;const n=readUint16(e,t);if(n>=65472&&n<=65534)return{invalid:null,marker:n,offset:t};let s=readUint16(e,i);for(;!(s>=65472&&s<=65534);){if(++i>=r)ret\ -urn null;s=readUint16(e,i)}return{invalid:n.toString(16),marker:s,offset:i}}function prepareComponents(e){const t=Math.ceil(e.samplesPerLine/8/e.maxH),a=Math.ceil(e.scanLines/8/e.maxV);for(const r of e.components){const i=Math.ceil(Math.ceil(e.samplesPerLine/8)*r.h/e.maxH),n=Math.ceil(Math.ceil(e.scanLines/8)*r.v/e.maxV),s=t*r.h,o=64*(a*r.v)*(s+1);r.blockData=new Int16Array(o);r.blocksPerLine=i;r.blocksPerColumn=n}e.mcusPerLine=t;e.mcusPerColumn=a}function readDataBlock(e,t){const a=readUint16(e\ -,t);let r=(t+=2)+a-2;const i=findNextFileMarker(e,r,t);if(i?.invalid){warn("readDataBlock - incorrect length, current marker is: "+i.invalid);r=i.offset}const n=e.subarray(t,r);return{appData:n,oldOffset:t,newOffset:t+n.length}}function skipData(e,t){const a=readUint16(e,t),r=(t+=2)+a-2,i=findNextFileMarker(e,r,t);return i?.invalid?i.offset:r}class JpegImage{constructor({decodeTransform:e=null,colorTransform:t=-1}={}){this._decodeTransform=e;this._colorTransform=t}static canUseImageDecoder(e,t=-\ -1){let a=null,r=0,i=null,n=readUint16(e,r);r+=2;if(65496!==n)throw new JpegError("SOI not found");n=readUint16(e,r);r+=2;e:for(;65497!==n;){switch(n){case 65505:const{appData:t,oldOffset:s,newOffset:o}=readDataBlock(e,r);r=o;if(69===t[0]&&120===t[1]&&105===t[2]&&102===t[3]&&0===t[4]&&0===t[5]){if(a)throw new JpegError("Duplicate EXIF-blocks found.");a={exifStart:s+6,exifEnd:o}}n=readUint16(e,r);r+=2;continue;case 65472:case 65473:case 65474:i=e[r+7];break e;case 65535:255!==e[r]&&r--}r=skipData(\ -e,r);n=readUint16(e,r);r+=2}return 4===i||3===i&&0===t?null:a||{}}parse(e,{dnlScanLines:t=null}={}){let a,r,i=0,n=null,s=null,o=0;const c=[],l=[],h=[];let u=readUint16(e,i);i+=2;if(65496!==u)throw new JpegError("SOI not found");u=readUint16(e,i);i+=2;e:for(;65497!==u;){let d,f,g;switch(u){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:const{appData:p,newOffs\ -et:m}=readDataBlock(e,i);i=m;65504===u&&74===p[0]&&70===p[1]&&73===p[2]&&70===p[3]&&0===p[4]&&(n={version:{major:p[5],minor:p[6]},densityUnits:p[7],xDensity:p[8]<<8|p[9],yDensity:p[10]<<8|p[11],thumbWidth:p[12],thumbHeight:p[13],thumbData:p.subarray(14,14+3*p[12]*p[13])});65518===u&&65===p[0]&&100===p[1]&&111===p[2]&&98===p[3]&&101===p[4]&&(s={version:p[5]<<8|p[6],flags0:p[7]<<8|p[8],flags1:p[9]<<8|p[10],transformCode:p[11]});break;case 65499:const b=readUint16(e,i);i+=2;const y=b+i-2;let w;for(\ -;i<y;){const t=e[i++],a=new Uint16Array(64);if(t>>4){if(t>>4!=1)throw new JpegError("DQT - invalid table spec");for(f=0;f<64;f++){w=ja[f];a[w]=readUint16(e,i);i+=2}}else for(f=0;f<64;f++){w=ja[f];a[w]=e[i++]}c[15&t]=a}break;case 65472:case 65473:case 65474:if(a)throw new JpegError("Only single frame JPEGs supported");i+=2;a={};a.extended=65473===u;a.progressive=65474===u;a.precision=e[i++];const x=readUint16(e,i);i+=2;a.scanLines=t||x;a.samplesPerLine=readUint16(e,i);i+=2;a.components=[];a.compo\ -nentIds={};const S=e[i++];let k=0,C=0;for(d=0;d<S;d++){const t=e[i],r=e[i+1]>>4,n=15&e[i+1];k<r&&(k=r);C<n&&(C=n);const s=e[i+2];g=a.components.push({h:r,v:n,quantizationId:s,quantizationTable:null});a.componentIds[t]=g-1;i+=3}a.maxH=k;a.maxV=C;prepareComponents(a);break;case 65476:const v=readUint16(e,i);i+=2;for(d=2;d<v;){const t=e[i++],a=new Uint8Array(16);let r=0;for(f=0;f<16;f++,i++)r+=a[f]=e[i];const n=new Uint8Array(r);for(f=0;f<r;f++,i++)n[f]=e[i];d+=17+r;(t>>4?l:h)[15&t]=buildHuffmanTab\ -le(a,n)}break;case 65501:i+=2;r=readUint16(e,i);i+=2;break;case 65498:const F=1==++o&&!t;i+=2;const T=e[i++],O=[];for(d=0;d<T;d++){const t=e[i++],r=a.componentIds[t],n=a.components[r];n.index=t;const s=e[i++];n.huffmanTableDC=h[s>>4];n.huffmanTableAC=l[15&s];O.push(n)}const M=e[i++],D=e[i++],R=e[i++];try{i+=decodeScan(e,i,a,O,r,M,D,R>>4,15&R,F)}catch(t){if(t instanceof DNLMarkerError){warn(`${t.message} -- attempting to re-parse the JPEG image.`);return this.parse(e,{dnlScanLines:t.scanLines})}i\ -f(t instanceof EOIMarkerError){warn(`${t.message} -- ignoring the rest of the image data.`);break e}throw t}break;case 65500:i+=4;break;case 65535:255!==e[i]&&i--;break;default:const N=findNextFileMarker(e,i-2,i-3);if(N?.invalid){warn("JpegImage.parse - unexpected data, current marker is: "+N.invalid);i=N.offset;break}if(!N||i>=e.length-1){warn("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new JpegError("JpegImage.parse - unknown mar\ -ker: "+u.toString(16))}u=readUint16(e,i);i+=2}if(!a)throw new JpegError("JpegImage.parse - no frame data found.");this.width=a.samplesPerLine;this.height=a.scanLines;this.jfif=n;this.adobe=s;this.components=[];for(const e of a.components){const t=c[e.quantizationId];t&&(e.quantizationTable=t);this.components.push({index:e.index,output:buildComponentData(0,e),scaleX:e.h/a.maxH,scaleY:e.v/a.maxV,blocksPerLine:e.blocksPerLine,blocksPerColumn:e.blocksPerColumn})}this.numComponents=this.components.le\ -ngth}_getLinearizedBlockData(e,t,a=!1){const r=this.width/e,i=this.height/t;let n,s,o,c,l,h,u,d,f,g,p,m=0;const b=this.components.length,y=e*t*b,w=new Uint8ClampedArray(y),x=new Uint32Array(e),S=4294967288;let k;for(u=0;u<b;u++){n=this.components[u];s=n.scaleX*r;o=n.scaleY*i;m=u;p=n.output;c=n.blocksPerLine+1<<3;if(s!==k){for(l=0;l<e;l++){d=0|l*s;x[l]=(d&S)<<3|7&d}k=s}for(h=0;h<t;h++){d=0|h*o;g=c*(d&S)|(7&d)<<3;for(l=0;l<e;l++){w[m]=p[g+x[l]];m+=b}}}let C=this._decodeTransform;a||4!==b||C||(C=ne\ -w Int32Array([-256,255,-256,255,-256,255,-256,255]));if(C)for(u=0;u<y;)for(d=0,f=0;d<b;d++,u++,f+=2)w[u]=(w[u]*C[f]>>8)+C[f+1];return w}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}_convertYccToRgb(e){let t,a,r;for(let i=0,n=e.length;i<n;i+=3){t=e[i];a=e[i+1];r=e[i+2];e[i]=t-179.456+1.402*r;e[i+1]=t+\ -135.459-.344*a-.714*r;e[i+2]=t-226.816+1.772*a}return e}_convertYccToRgba(e,t){for(let a=0,r=0,i=e.length;a<i;a+=3,r+=4){const i=e[a],n=e[a+1],s=e[a+2];t[r]=i-179.456+1.402*s;t[r+1]=i+135.459-.344*n-.714*s;t[r+2]=i-226.816+1.772*n;t[r+3]=255}return t}_convertYcckToRgb(e){this._convertYcckToCmyk(e);return this._convertCmykToRgb(e)}_convertYcckToRgba(e){this._convertYcckToCmyk(e);return this._convertCmykToRgba(e)}_convertYcckToCmyk(e){let t,a,r;for(let i=0,n=e.length;i<n;i+=4){t=e[i];a=e[i+1];r=e[\ -i+2];e[i]=434.456-t-1.402*r;e[i+1]=119.541-t+.344*a+.714*r;e[i+2]=481.816-t-1.772*a}return e}_convertCmykToRgb(e){const t=e.length/4;ColorSpaceUtils.cmyk.getRgbBuffer(e,0,t,e,0,8,0);return e.subarray(0,3*t)}_convertCmykToRgba(e){ColorSpaceUtils.cmyk.getRgbBuffer(e,0,e.length/4,e,0,8,1);if(ColorSpaceUtils.cmyk instanceof DeviceCmykCS)for(let t=3,a=e.length;t<a;t+=4)e[t]=255;return e}getData({width:e,height:t,forceRGBA:a=!1,forceRGB:r=!1,isSourcePDF:i=!1}){if(this.numComponents>4)throw new JpegErr\ -or("Unsupported color mode");const n=this._getLinearizedBlockData(e,t,i);if(1===this.numComponents&&(a||r)){const e=n.length*(a?4:3),t=new Uint8ClampedArray(e);let r=0;if(a)!function grayToRGBA(e,t){if(FeatureTest.isLittleEndian)for(let a=0,r=e.length;a<r;a++)t[a]=65793*e[a]|4278190080;else for(let a=0,r=e.length;a<r;a++)t[a]=16843008*e[a]|255}(n,new Uint32Array(t.buffer));else for(const e of n){t[r++]=e;t[r++]=e;t[r++]=e}return t}if(3===this.numComponents&&this._isColorConversionNeeded){if(a){c\ -onst e=new Uint8ClampedArray(n.length/3*4);return this._convertYccToRgba(n,e)}return this._convertYccToRgb(n)}if(4===this.numComponents){if(this._isColorConversionNeeded)return a?this._convertYcckToRgba(n):r?this._convertYcckToRgb(n):this._convertYcckToCmyk(n);if(a)return this._convertCmykToRgba(n);if(r)return this._convertCmykToRgb(n)}return n}}class JpegStream extends DecodeStream{static#M=FeatureTest.isImageDecoderSupported;constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.maybe\ -Length=t;this.params=a}static get canUseImageDecoder(){return shadow(this,"canUseImageDecoder",this.#M?ImageDecoder.isTypeSupported("image/jpeg"):Promise.resolve(!1))}static setOptions({isImageDecoderSupported:e=!1}){this.#M=e}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(){this.decodeImage()}get jpegOptions(){const e={decodeTransform:void 0,colorTransform:void 0},t=this.dict.getArray("D","Decode");if((this.forceRGBA||this.forceRGB)&&Ar\ -ray.isArray(t)){const a=this.dict.get("BPC","BitsPerComponent")||8,r=t.length,i=new Int32Array(r);let n=!1;const s=(1<<a)-1;for(let e=0;e<r;e+=2){i[e]=256*(t[e+1]-t[e])|0;i[e+1]=t[e]*s|0;256===i[e]&&0===i[e+1]||(n=!0)}n&&(e.decodeTransform=i)}if(this.params instanceof Dict){const t=this.params.get("ColorTransform");Number.isInteger(t)&&(e.colorTransform=t)}return shadow(this,"jpegOptions",e)}#N(e){for(let t=0,a=e.length-1;t<a;t++)if(255===e[t]&&216===e[t+1]){t>0&&(e=e.subarray(t));break}return e\ -}decodeImage(e){if(this.eof)return this.buffer;e=this.#N(e||this.bytes);const t=new JpegImage(this.jpegOptions);t.parse(e);const a=t.getData({width:this.drawWidth,height:this.drawHeight,forceRGBA:this.forceRGBA,forceRGB:this.forceRGB,isSourcePDF:!0});this.buffer=a;this.bufferLength=a.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}async getTransferableImage(){if(!await JpegStream.canUseImageDecoder)return null;const e=this.jpegOptions;if(e.dec\ -odeTransform)return null;let t;try{const a=this.canAsyncDecodeImageFromBuffer&&await this.stream.asyncGetBytes()||this.bytes;if(!a)return null;let r=this.#N(a);const i=JpegImage.canUseImageDecoder(r,e.colorTransform);if(!i)return null;if(i.exifStart){r=r.slice();r.fill(0,i.exifStart,i.exifEnd)}t=new ImageDecoder({data:r,type:"image/jpeg",preferAnimation:!1});return(await t.decode()).image}catch(e){warn(`getTransferableImage - failed: "${e}".`);return null}finally{t?.close()}}}var OpenJPEG=async \ -function(e={}){var t,a,r=e,i=new Promise(((e,r)=>{t=e;a=r})),n="./this.program",quit_=(e,t)=>{throw t},s=import.meta.url;try{new URL(".",s).href}catch{}var o,c,l,h,u,d,f=console.log.bind(console),g=console.error.bind(console),p=!1;function updateMemoryViews(){var e=o.buffer;l=new Int8Array(e);new Int16Array(e);h=new Uint8Array(e);new Uint16Array(e);u=new Int32Array(e);d=new Uint32Array(e);new Float32Array(e);new Float64Array(e);new BigInt64Array(e);new BigUint64Array(e)}var m=0,b=null;class Exit\ -Status{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`;this.status=e}}var callRuntimeCallbacks=e=>{for(;e.length>0;)e.shift()(r)},y=[],addOnPostRun=e=>y.push(e),w=[],addOnPreRun=e=>w.push(e),x=!0,S=0,k={},handleException=e=>{if(e instanceof ExitStatus||"unwind"==e)return c;quit_(0,e)},keepRuntimeAlive=()=>x||S>0,_proc_exit=e=>{c=e;if(!keepRuntimeAlive()){r.onExit?.(e);p=!0}quit_(0,new ExitStatus(e))},_exit=(e,t)=>{c=e;_proc_exit(e)},callUserCallback=e=>{if(!p)t\ -ry{e();(()=>{if(!keepRuntimeAlive())try{_exit(c)}catch(e){handleException(e)}})()}catch(e){handleException(e)}},growMemory=e=>{var t=(e-o.buffer.byteLength+65535)/65536|0;try{o.grow(t);updateMemoryViews();return 1}catch(e){}},C={},getEnvStrings=()=>{if(!getEnvStrings.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:n||"./this.program"};for(var t\ - in C)void 0===C[t]?delete e[t]:e[t]=C[t];var a=[];for(var t in e)a.push(`${t}=${e[t]}`);getEnvStrings.strings=a}return getEnvStrings.strings},lengthBytesUTF8=e=>{for(var t=0,a=0;a<e.length;++a){var r=e.charCodeAt(a);if(r<=127)t++;else if(r<=2047)t+=2;else if(r>=55296&&r<=57343){t+=4;++a}else t+=3}return t},v=[null,[],[]],F="undefined"!=typeof TextDecoder?new TextDecoder:void 0,UTF8ArrayToString=(e,t=0,a=NaN)=>{for(var r=t+a,i=t;e[i]&&!(i>=r);)++i;if(i-t>16&&e.buffer&&F)return F.decode(e.subarra\ -y(t,i));for(var n="";t<i;){var s=e[t++];if(128&s){var o=63&e[t++];if(192!=(224&s)){var c=63&e[t++];if((s=224==(240&s)?(15&s)<<12|o<<6|c:(7&s)<<18|o<<12|c<<6|63&e[t++])<65536)n+=String.fromCharCode(s);else{var l=s-65536;n+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else n+=String.fromCharCode((31&s)<<6|o)}else n+=String.fromCharCode(s)}return n},printChar=(e,t)=>{var a=v[e];if(0===t||10===t){(1===e?f:g)(UTF8ArrayToString(a));a.length=0}else a.push(t)},UTF8ToString=(e,t)=>e?UTF8ArrayToString(h\ -,e,t):"";r.noExitRuntime&&(x=r.noExitRuntime);r.print&&(f=r.print);r.printErr&&(g=r.printErr);r.wasmBinary&&r.wasmBinary;r.arguments&&r.arguments;r.thisProgram&&(n=r.thisProgram);r.writeArrayToMemory=(e,t)=>{l.set(e,t)};var T={l:()=>function abort(e){r.onAbort?.(e);g(e="Aborted("+e+")");p=!0;e+=". Build with -sASSERTIONS for more info.";var t=new WebAssembly.RuntimeError(e);a(t);throw t}(""),k:()=>{x=!1;S=0},m:(e,t)=>{if(k[e]){clearTimeout(k[e].id);delete k[e]}if(!t)return 0;var a=setTimeout((()\ -=>{delete k[e];callUserCallback((()=>M(e,performance.now())))}),t);k[e]={id:a,timeout_ms:t};return 0},g:function _copy_pixels_1(e,t){e>>=2;const a=r.imageData=new Uint8ClampedArray(t),i=u.subarray(e,e+t);a.set(i)},f:function _copy_pixels_3(e,t,a,i){e>>=2;t>>=2;a>>=2;const n=r.imageData=new Uint8ClampedArray(3*i),s=u.subarray(e,e+i),o=u.subarray(t,t+i),c=u.subarray(a,a+i);for(let e=0;e<i;e++){n[3*e]=s[e];n[3*e+1]=o[e];n[3*e+2]=c[e]}},e:function _copy_pixels_4(e,t,a,i,n){e>>=2;t>>=2;a>>=2;i>>=2;co\ -nst s=r.imageData=new Uint8ClampedArray(4*n),o=u.subarray(e,e+n),c=u.subarray(t,t+n),l=u.subarray(a,a+n),h=u.subarray(i,i+n);for(let e=0;e<n;e++){s[4*e]=o[e];s[4*e+1]=c[e];s[4*e+2]=l[e];s[4*e+3]=h[e]}},n:e=>{var t,a,r=h.length,i=2147483648;if((e>>>=0)>i)return!1;for(var n=1;n<=4;n*=2){var s=r*(1+.2/n);s=Math.min(s,e+100663296);var o=Math.min(i,(t=Math.max(e,s),a=65536,Math.ceil(t/a)*a));if(growMemory(o))return!0}return!1},p:(e,t)=>{var a=0,r=0;for(var i of getEnvStrings()){var n=t+a;d[e+r>>2]=n;\ -a+=((e,t,a,r)=>{if(!(r>0))return 0;for(var i=a,n=a+r-1,s=0;s<e.length;++s){var o=e.charCodeAt(s);o>=55296&&o<=57343&&(o=65536+((1023&o)<<10)|1023&e.charCodeAt(++s));if(o<=127){if(a>=n)break;t[a++]=o}else if(o<=2047){if(a+1>=n)break;t[a++]=192|o>>6;t[a++]=128|63&o}else if(o<=65535){if(a+2>=n)break;t[a++]=224|o>>12;t[a++]=128|o>>6&63;t[a++]=128|63&o}else{if(a+3>=n)break;t[a++]=240|o>>18;t[a++]=128|o>>12&63;t[a++]=128|o>>6&63;t[a++]=128|63&o}}t[a]=0;return a-i})(i,h,n,1/0)+1;r+=4}return 0},q:(e,t)=\ ->{var a=getEnvStrings();d[e>>2]=a.length;var r=0;for(var i of a)r+=lengthBytesUTF8(i)+1;d[t>>2]=r;return 0},b:e=>52,o:function _fd_seek(e,t,a,r){t=(i=t)<-9007199254740992||i>9007199254740992?NaN:Number(i);var i;return 70},c:(e,t,a,r)=>{for(var i=0,n=0;n<a;n++){var s=d[t>>2],o=d[t+4>>2];t+=8;for(var c=0;c<o;c++)printChar(e,h[s+c]);i+=o}d[r>>2]=i;return 0},r:function _gray_to_rgba(e,t){e>>=2;const a=r.imageData=new Uint8ClampedArray(4*t),i=u.subarray(e,e+t);for(let e=0;e<t;e++){a[4*e]=a[4*e+1]=a[4\ -*e+2]=i[e];a[4*e+3]=255}},i:function _graya_to_rgba(e,t,a){e>>=2;t>>=2;const i=r.imageData=new Uint8ClampedArray(4*a),n=u.subarray(e,e+a),s=u.subarray(t,t+a);for(let e=0;e<a;e++){i[4*e]=i[4*e+1]=i[4*e+2]=n[e];i[4*e+3]=s[e]}},d:function _jsPrintWarning(e){const t=UTF8ToString(e);(r.warn||console.warn)(`OpenJPEG: ${t}`)},j:_proc_exit,h:function _rgb_to_rgba(e,t,a,i){e>>=2;t>>=2;a>>=2;const n=r.imageData=new Uint8ClampedArray(4*i),s=u.subarray(e,e+i),o=u.subarray(t,t+i),c=u.subarray(a,a+i);for(let \ -e=0;e<i;e++){n[4*e]=s[e];n[4*e+1]=o[e];n[4*e+2]=c[e];n[4*e+3]=255}},a:function _storeErrorMessage(e){const t=UTF8ToString(e);r.errorMessages?r.errorMessages+="\\n"+t:r.errorMessages=t}},O=await async function createWasm(){function receiveInstance(e,t){O=e.exports;o=O.s;updateMemoryViews();!function removeRunDependency(e){m--;r.monitorRunDependencies?.(m);if(0==m&&b){var t=b;b=null;t()}}();return O}!function addRunDependency(e){m++;r.monitorRunDependencies?.(m)}();var e=function getWasmImports(){r\ -eturn{a:T}}();return new Promise(((t,a)=>{r.instantiateWasm(e,((e,a)=>{t(receiveInstance(e))}))}))}(),M=(O.t,r._malloc=O.u,r._free=O.v,r._jp2_decode=O.w,O.x);!function preInit(){if(r.preInit){"function"==typeof r.preInit&&(r.preInit=[r.preInit]);for(;r.preInit.length>0;)r.preInit.shift()()}}();!function run(){if(m>0)b=run;else{!function preRun(){if(r.preRun){"function"==typeof r.preRun&&(r.preRun=[r.preRun]);for(;r.preRun.length;)addOnPreRun(r.preRun.shift())}callRuntimeCallbacks(w)}();if(m>0)b=\ -run;else if(r.setStatus){r.setStatus("Running...");setTimeout((()=>{setTimeout((()=>r.setStatus("")),1);doRun()}),1)}else doRun()}function doRun(){r.calledRun=!0;if(!p){!function initRuntime(){O.t()}();t(r);r.onRuntimeInitialized?.();!function postRun(){if(r.postRun){"function"==typeof r.postRun&&(r.postRun=[r.postRun]);for(;r.postRun.length;)addOnPostRun(r.postRun.shift())}callRuntimeCallbacks(y)}()}}}();return i};const Ga=OpenJPEG;class JpxError extends fa{constructor(e){super(e,"JpxError")}}c\ -lass JpxImage{static#E=null;static#P=null;static#L=null;static#v=!0;static#j=!0;static#F=null;static setOptions({handler:e,useWasm:t,useWorkerFetch:a,wasmUrl:r}){this.#v=t;this.#j=a;this.#F=r;a||(this.#P=e)}static async#_(e){const t=`${this.#F}openjpeg_nowasm_fallback.js`;let a=null;try{a=(await import(\n/*webpackIgnore: true*/\n/*@vite-ignore*/\nt)).default()}catch(e){warn(`JpxImage#getJsModule: ${e}`)}e(a)}static async#U(e,t,a){const r="openjpeg.wasm";try{this.#E||(this.#j?this.#E=await fetchBina\ -ryData(`${this.#F}${r}`):this.#E=await this.#P.sendWithPromise("FetchBinaryData",{type:"wasmFactory",filename:r}));return a((await WebAssembly.instantiate(this.#E,t)).instance)}catch(t){warn(`JpxImage#instantiateWasm: ${t}`);this.#_(e);return null}finally{this.#P=null}}static async decode(e,{numComponents:t=4,isIndexedColormap:a=!1,smaskInData:r=!1,reducePower:i=0}={}){if(!this.#L){const{promise:e,resolve:t}=Promise.withResolvers(),a=[e];this.#v?a.push(Ga({warn,instantiateWasm:this.#U.bind(this,\ -t)})):this.#_(t);this.#L=Promise.race(a)}const n=await this.#L;if(!n)throw new JpxError("OpenJPEG failed to initialize");let s;try{const o=e.length;s=n._malloc(o);n.writeArrayToMemory(e,s);if(n._jp2_decode(s,o,t>0?t:0,!!a,!!r,i)){const{errorMessages:e}=n;if(e){delete n.errorMessages;throw new JpxError(e)}throw new JpxError("Unknown error")}const{imageData:c}=n;n.imageData=null;return c}finally{s&&n._free(s)}}static cleanup(){this.#L=null}static parseImageProperties(e){let t=e.getByte();for(;t>=0\ -;){const a=t;t=e.getByte();if(65361===(a<<8|t)){e.skip(4);const t=e.getInt32()>>>0,a=e.getInt32()>>>0,r=e.getInt32()>>>0,i=e.getInt32()>>>0;e.skip(16);return{width:t-r,height:a-i,bitsPerComponent:8,componentsCount:e.getUint16()}}}throw new JpxError("No size marker found in JPX stream")}}function addState(e,t,a,r,i){let n=e;for(let e=0,a=t.length-1;e<a;e++){const a=t[e];n=n[a]||=[]}n[t.at(-1)]={checkFn:a,iterateFn:r,processFn:i}}const Va=[];addState(Va,[Be,Ne,Yt,Re],null,(function iterateInlineIm\ -ageGroup(e,t){const a=e.fnArray,r=(t-(e.iCurr-3))%4;switch(r){case 0:return a[t]===Be;case 1:return a[t]===Ne;case 2:return a[t]===Yt;case 3:return a[t]===Re}throw new Error(`iterateInlineImageGroup - invalid pos: ${r}`)}),(function foundInlineImageGroup(e,t){const a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-3,s=i-2,o=i-1,c=Math.min(Math.floor((t-n)/4),200);if(c<10)return t-(t-n)%4;let l=0;const h=[];let u=0,d=1,f=1;for(let e=0;e<c;e++){const t=r[s+(e<<2)],a=r[o+(e<<2)][0];if(d+a.width>1e3){l=Math.m\ -ax(l,d);f+=u+2;d=0;u=0}h.push({transform:t,x:d,y:f,w:a.width,h:a.height});d+=a.width+2;u=Math.max(u,a.height)}const g=Math.max(l,d)+1,p=f+u+1,m=new Uint8Array(g*p*4),b=g<<2;for(let e=0;e<c;e++){const t=r[o+(e<<2)][0].data,a=h[e].w<<2;let i=0,n=h[e].x+h[e].y*g<<2;m.set(t.subarray(0,a),n-b);for(let r=0,s=h[e].h;r<s;r++){m.set(t.subarray(i,i+a),n);i+=a;n+=b}m.set(t.subarray(i-a,i),n);for(;n>=0;){t[n-4]=t[n];t[n-3]=t[n+1];t[n-2]=t[n+2];t[n-1]=t[n+3];t[n+a]=t[n+a-4];t[n+a+1]=t[n+a-3];t[n+a+2]=t[n+a-2\ -];t[n+a+3]=t[n+a-1];n-=b}}const y={width:g,height:p};if(e.isOffscreenCanvasSupported){const e=new OffscreenCanvas(g,p);e.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(m.buffer),g,p),0,0);y.bitmap=e.transferToImageBitmap();y.data=null}else{y.kind=v;y.data=m}a.splice(n,4*c,Zt);r.splice(n,4*c,[y,h]);return n+1}));addState(Va,[Be,Ne,Vt,Re],null,(function iterateImageMaskGroup(e,t){const a=e.fnArray,r=(t-(e.iCurr-3))%4;switch(r){case 0:return a[t]===Be;case 1:return a[t]===Ne;case\ - 2:return a[t]===Vt;case 3:return a[t]===Re}throw new Error(`iterateImageMaskGroup - invalid pos: ${r}`)}),(function foundImageMaskGroup(e,t){const a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-3,s=i-2,o=i-1;let c=Math.floor((t-n)/4);if(c<10)return t-(t-n)%4;let l,h,u=!1;const d=r[o][0],f=r[s][0],g=r[s][1],p=r[s][2],m=r[s][3];if(g===p){u=!0;l=s+4;let e=o+4;for(let t=1;t<c;t++,l+=4,e+=4){h=r[l];if(r[e][0]!==d||h[0]!==f||h[1]!==g||h[2]!==p||h[3]!==m){t<10?u=!1:c=t;break}}}if(u){c=Math.min(c,1e3);const e\ -=new Float32Array(2*c);l=s;for(let t=0;t<c;t++,l+=4){h=r[l];e[t<<1]=h[4];e[1+(t<<1)]=h[5]}a.splice(n,4*c,ea);r.splice(n,4*c,[d,f,g,p,m,e])}else{c=Math.min(c,100);const e=[];for(let t=0;t<c;t++){h=r[s+(t<<2)];const a=r[o+(t<<2)][0];e.push({data:a.data,width:a.width,height:a.height,interpolate:a.interpolate,count:a.count,transform:h})}a.splice(n,4*c,Kt);r.splice(n,4*c,[e])}return n+1}));addState(Va,[Be,Ne,Jt,Re],(function(e){const t=e.argsArray,a=e.iCurr-2;return 0===t[a][1]&&0===t[a][2]}),(functi\ -on iterateImageGroup(e,t){const a=e.fnArray,r=e.argsArray,i=(t-(e.iCurr-3))%4;switch(i){case 0:return a[t]===Be;case 1:if(a[t]!==Ne)return!1;const i=e.iCurr-2,n=r[i][0],s=r[i][3];return r[t][0]===n&&0===r[t][1]&&0===r[t][2]&&r[t][3]===s;case 2:if(a[t]!==Jt)return!1;const o=r[e.iCurr-1][0];return r[t][0]===o;case 3:return a[t]===Re}throw new Error(`iterateImageGroup - invalid pos: ${i}`)}),(function(e,t){const a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-3,s=i-2,o=r[i-1][0],c=r[s][0],l=r[s][3],h=Math.\ -min(Math.floor((t-n)/4),1e3);if(h<3)return t-(t-n)%4;const u=new Float32Array(2*h);let d=s;for(let e=0;e<h;e++,d+=4){const t=r[d];u[e<<1]=t[4];u[1+(e<<1)]=t[5]}const f=[o,c,l,u];a.splice(n,4*h,Qt);r.splice(n,4*h,f);return n+1}));addState(Va,[Qe,nt,ht,dt,et],null,(function iterateShowTextGroup(e,t){const a=e.fnArray,r=e.argsArray,i=(t-(e.iCurr-4))%5;switch(i){case 0:return a[t]===Qe;case 1:return a[t]===nt;case 2:return a[t]===ht;case 3:if(a[t]!==dt)return!1;const i=e.iCurr-3,n=r[i][0],s=r[i][1];\ -return r[t][0]===n&&r[t][1]===s;case 4:return a[t]===et}throw new Error(`iterateShowTextGroup - invalid pos: ${i}`)}),(function(e,t){const a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-4,s=i-3,o=i-2,c=i-1,l=i,h=r[s][0],u=r[s][1];let d=Math.min(Math.floor((t-n)/5),1e3);if(d<3)return t-(t-n)%5;let f=n;if(n>=4&&a[n-4]===a[s]&&a[n-3]===a[o]&&a[n-2]===a[c]&&a[n-1]===a[l]&&r[n-4][0]===h&&r[n-4][1]===u){d++;f-=5}let g=f+4;for(let e=1;e<d;e++){a.splice(g,3);r.splice(g,3);g+=2}return g+1}));addState(Va,[Be,Ne,\ -aa,Re],(e=>{const t=e.argsArray,a=t[e.iCurr-1][0];if(a!==qe&&a!==He&&a!==$e&&a!==Ge&&a!==Ve&&a!==Ke)return!0;const r=t[e.iCurr-2];return 1===r[0]&&0===r[1]&&0===r[2]&&1===r[3]}),(()=>!1),((e,t)=>{const{fnArray:a,argsArray:r}=e,i=e.iCurr,n=i-3,s=i-2,o=r[i-1],c=r[s],[,[l],h]=o;if(h){Util.scaleMinMax(c,h);for(let e=0,t=l.length;e<t;)switch(l[e++]){case sa:case oa:Util.applyTransform(l,c,e);e+=2;break;case ca:Util.applyTransformToBezier(l,c,e);e+=6}}a.splice(n,4,aa);r.splice(n,4,o);return n+1}));cla\ -ss NullOptimizer{constructor(e){this.queue=e}_optimize(){}push(e,t){this.queue.fnArray.push(e);this.queue.argsArray.push(t);this._optimize()}flush(){}reset(){}}class QueueOptimizer extends NullOptimizer{constructor(e){super(e);this.state=null;this.context={iCurr:0,fnArray:e.fnArray,argsArray:e.argsArray,isOffscreenCanvasSupported:OperatorList.isOffscreenCanvasSupported};this.match=null;this.lastProcessed=0}_optimize(){const e=this.queue.fnArray;let t=this.lastProcessed,a=e.length,r=this.state,i=\ -this.match;if(!r&&!i&&t+1===a&&!Va[e[t]]){this.lastProcessed=a;return}const n=this.context;for(;t<a;){if(i){if((0,i.iterateFn)(n,t)){t++;continue}t=(0,i.processFn)(n,t+1);a=e.length;i=null;r=null;if(t>=a)break}r=(r||Va)[e[t]];if(r&&!Array.isArray(r)){n.iCurr=t;t++;if(!r.checkFn||(0,r.checkFn)(n)){i=r;r=null}else r=null}else t++}this.state=r;this.match=i;this.lastProcessed=t}flush(){for(;this.match;){const e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e);thi\ -s.match=null;this.state=null;this._optimize()}}reset(){this.state=null;this.match=null;this.lastProcessed=0}}class OperatorList{static CHUNK_SIZE=1e3;static CHUNK_SIZE_ABOUT=this.CHUNK_SIZE-5;static isOffscreenCanvasSupported=!1;constructor(e=0,t){this._streamSink=t;this.fnArray=[];this.argsArray=[];this.optimizer=!t||e&d?new NullOptimizer(this):new QueueOptimizer(this);this.dependencies=new Set;this._totalLength=0;this.weight=0;this._resolved=t?null:Promise.resolve()}static setOptions({isOffscr\ -eenCanvasSupported:e}){this.isOffscreenCanvasSupported=e}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(e,t){this.optimizer.push(e,t);this.weight++;this._streamSink&&(this.weight>=OperatorList.CHUNK_SIZE||this.weight>=OperatorList.CHUNK_SIZE_ABOUT&&(e===Re||e===et))&&this.flush()}addImageOps(e,t,a,r=!1){if(r){this.addOp(Be);this.addOp(De,[[["SMask",!1]]])}void 0!==a&&this.addOp(jt,["\ -OC",a]);this.addOp(e,t);void 0!==a&&this.addOp(_t,[]);r&&this.addOp(Re)}addDependency(e){if(!this.dependencies.has(e)){this.dependencies.add(e);this.addOp(ke,[e])}}addDependencies(e){for(const t of e)this.addDependency(t)}addOpList(e){if(e instanceof OperatorList){for(const t of e.dependencies)this.dependencies.add(t);for(let t=0,a=e.length;t<a;t++)this.addOp(e.fnArray[t],e.argsArray[t])}else warn(\'addOpList - ignoring invalid "opList" parameter.\')}getIR(){return{fnArray:this.fnArray,argsArray:t\ -his.argsArray,length:this.length}}get _transfers(){const e=[],{fnArray:t,argsArray:a,length:r}=this;for(let i=0;i<r;i++)switch(t[i]){case Yt:case Zt:case Vt:{const{bitmap:t,data:r}=a[i][0];(t||r?.buffer)&&e.push(t||r.buffer);break}case aa:{const[,[t],r]=a[i];t&&e.push(t.buffer,r.buffer);break}case qt:const[t,r]=a[i];t&&e.push(t.buffer);r&&e.push(r.buffer);break;case ht:e.push(a[i][0].buffer)}return e}flush(e=!1,t=null){this.optimizer.flush();const a=this.length;this._totalLength+=a;this._streamS\ -ink.enqueue({fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:e,separateAnnots:t,length:a},1,this._transfers);this.dependencies.clear();this.fnArray.length=0;this.argsArray.length=0;this.weight=0;this.optimizer.reset()}}function hexToInt(e,t){let a=0;for(let r=0;r<=t;r++)a=a<<8|e[r];return a>>>0}function hexToStr(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,t+1))}function addHex(e,t,a){let r=0;for(let i\ -=a;i>=0;i--){r+=e[i]+t[i];e[i]=255&r;r>>=8}}function incHex(e,t){let a=1;for(let r=t;r>=0&&a>0;r--){a+=e[r];e[r]=255&a;a>>=8}}const Ka=16;class BinaryCMapStream{constructor(e){this.buffer=e;this.pos=0;this.end=e.length;this.tmpBuf=new Uint8Array(19)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let e,t=0;do{const a=this.readByte();if(a<0)throw new FormatError("unexpected EOF in bcmap");e=!(128&a);t=t<<7|127&a}while(!e);return t}readSigned(){const e=this.readNumber(\ -);return 1&e?~(e>>>1):e>>>1}readHex(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1));this.pos+=t+1}readHexNumber(e,t){let a;const r=this.tmpBuf;let i=0;do{const e=this.readByte();if(e<0)throw new FormatError("unexpected EOF in bcmap");a=!(128&e);r[i++]=127&e}while(!a);let n=t,s=0,o=0;for(;n>=0;){for(;o<8&&r.length>0;){s|=r[--i]<<o;o+=7}e[n]=255&s;n--;s>>=8;o-=8}}readHexSigned(e,t){this.readHexNumber(e,t);const a=1&e[t]?255:0;let r=0;for(let i=0;i<=t;i++){r=(1&r)<<8|e[i];e[i]=r>>1^a}}readS\ -tring(){const e=this.readNumber(),t=new Array(e);for(let a=0;a<e;a++)t[a]=this.readNumber();return String.fromCharCode(...t)}}class BinaryCMapReader{async process(e,t,a){const r=new BinaryCMapStream(e),i=r.readByte();t.vertical=!!(1&i);let n=null;const s=new Uint8Array(Ka),o=new Uint8Array(Ka),c=new Uint8Array(Ka),l=new Uint8Array(Ka),h=new Uint8Array(Ka);let u,d;for(;(d=r.readByte())>=0;){const e=d>>5;if(7===e){switch(31&d){case 0:r.readString();break;case 1:n=r.readString()}continue}const a=!!\ -(16&d),i=15&d;if(i+1>Ka)throw new Error("BinaryCMapReader.process: Invalid dataSize.");const f=1,g=r.readNumber();switch(e){case 0:r.readHex(s,i);r.readHexNumber(o,i);addHex(o,s,i);t.addCodespaceRange(i+1,hexToInt(s,i),hexToInt(o,i));for(let e=1;e<g;e++){incHex(o,i);r.readHexNumber(s,i);addHex(s,o,i);r.readHexNumber(o,i);addHex(o,s,i);t.addCodespaceRange(i+1,hexToInt(s,i),hexToInt(o,i))}break;case 1:r.readHex(s,i);r.readHexNumber(o,i);addHex(o,s,i);r.readNumber();for(let e=1;e<g;e++){incHex(o,i)\ -;r.readHexNumber(s,i);addHex(s,o,i);r.readHexNumber(o,i);addHex(o,s,i);r.readNumber()}break;case 2:r.readHex(c,i);u=r.readNumber();t.mapOne(hexToInt(c,i),u);for(let e=1;e<g;e++){incHex(c,i);if(!a){r.readHexNumber(h,i);addHex(c,h,i)}u=r.readSigned()+(u+1);t.mapOne(hexToInt(c,i),u)}break;case 3:r.readHex(s,i);r.readHexNumber(o,i);addHex(o,s,i);u=r.readNumber();t.mapCidRange(hexToInt(s,i),hexToInt(o,i),u);for(let e=1;e<g;e++){incHex(o,i);if(a)s.set(o);else{r.readHexNumber(s,i);addHex(s,o,i)}r.readH\ -exNumber(o,i);addHex(o,s,i);u=r.readNumber();t.mapCidRange(hexToInt(s,i),hexToInt(o,i),u)}break;case 4:r.readHex(c,f);r.readHex(l,i);t.mapOne(hexToInt(c,f),hexToStr(l,i));for(let e=1;e<g;e++){incHex(c,f);if(!a){r.readHexNumber(h,f);addHex(c,h,f)}incHex(l,i);r.readHexSigned(h,i);addHex(l,h,i);t.mapOne(hexToInt(c,f),hexToStr(l,i))}break;case 5:r.readHex(s,f);r.readHexNumber(o,f);addHex(o,s,f);r.readHex(l,i);t.mapBfRange(hexToInt(s,f),hexToInt(o,f),hexToStr(l,i));for(let e=1;e<g;e++){incHex(o,f);if\ -(a)s.set(o);else{r.readHexNumber(s,f);addHex(s,o,f)}r.readHexNumber(o,f);addHex(o,s,f);r.readHex(l,i);t.mapBfRange(hexToInt(s,f),hexToInt(o,f),hexToStr(l,i))}break;default:throw new Error(`BinaryCMapReader.process - unknown type: ${e}`)}}return n?a(n):t}}class Ascii85Stream extends DecodeStream{constructor(e,t){t&&(t*=.8);super(t);this.str=e;this.dict=e.dict;this.input=new Uint8Array(5)}readBlock(){const e=this.str;let t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();if(-1===t||126===t){this.eo\ -f=!0;return}const a=this.bufferLength;let r,i;if(122===t){r=this.ensureBuffer(a+4);for(i=0;i<4;++i)r[a+i]=0;this.bufferLength+=4}else{const n=this.input;n[0]=t;for(i=1;i<5;++i){t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();n[i]=t;if(-1===t||126===t)break}r=this.ensureBuffer(a+i-1);this.bufferLength+=i-1;if(i<5){for(;i<5;++i)n[i]=117;this.eof=!0}let s=0;for(i=0;i<5;++i)s=85*s+(n[i]-33);for(i=3;i>=0;--i){r[a+i]=255&s;s>>=8}}}}class AsciiHexStream extends DecodeStream{constructor(e,t){t&&(t*=.5\ -);super(t);this.str=e;this.dict=e.dict;this.firstDigit=-1}readBlock(){const e=this.str.getBytes(8e3);if(!e.length){this.eof=!0;return}const t=e.length+1>>1,a=this.ensureBuffer(this.bufferLength+t);let r=this.bufferLength,i=this.firstDigit;for(const t of e){let e;if(t>=48&&t<=57)e=15&t;else{if(!(t>=65&&t<=70||t>=97&&t<=102)){if(62===t){this.eof=!0;break}continue}e=9+(15&t)}if(i<0)i=e;else{a[r++]=i<<4|e;i=-1}}if(i>=0&&this.eof){a[r++]=i<<4;i=-1}this.firstDigit=i;this.bufferLength=r}}const Ja=-1,Ya\ -=[[-1,-1],[-1,-1],[7,8],[7,7],[6,6],[6,6],[6,5],[6,5],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1\ -,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]],Za=[[-1,-1],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11\ -,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],Qa=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6\ -,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11]\ -,[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664\ -],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3]\ -,[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,1\ -7],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[\ -6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,\ -7],[4,7]],er=[[-1,-1],[-1,-1],[12,-2],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],\ -[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53\ -],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],tr=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[1\ -1,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,\ -11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12\ -],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],ar=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];class CCITTFaxDecoder{constructor(e,t={}){if("function"!=t\ -ypeof e?.next)throw new Error(\'CCITTFaxDecoder - invalid "source" parameter.\');this.source=e;this.eof=!1;this.encoding=t.K||0;this.eoline=t.EndOfLine||!1;this.byteAlign=t.EncodedByteAlign||!1;this.columns=t.Columns||1728;this.rows=t.Rows||0;this.eoblock=t.EndOfBlock??!0;this.black=t.BlackIs1||!1;this.codingLine=new Uint32Array(this.columns+1);this.refLine=new Uint32Array(this.columns+2);this.codingLine[0]=this.columns;this.codingPos=0;this.row=0;this.nextLine2D=this.encoding<0;this.inputBits=0;t\ -his.inputBuf=0;this.outputBits=0;this.rowsDone=!1;let a;for(;0===(a=this._lookBits(12));)this._eatBits(1);1===a&&this._eatBits(12);if(this.encoding>0){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}}readNextChar(){if(this.eof)return-1;const e=this.refLine,t=this.codingLine,a=this.columns;let r,i,n,s,o;if(0===this.outputBits){this.rowsDone&&(this.eof=!0);if(this.eof)return-1;this.err=!1;let n,o,c;if(this.nextLine2D){for(s=0;t[s]<a;++s)e[s]=t[s];e[s++]=a;e[s]=a;t[0]=0;this.codingPos=0;r=0;i=0\ -;for(;t[this.codingPos]<a;){n=this._getTwoDimCode();switch(n){case 0:this._addPixels(e[r+1],i);e[r+1]<a&&(r+=2);break;case 1:n=o=0;if(i){do{n+=c=this._getBlackCode()}while(c>=64);do{o+=c=this._getWhiteCode()}while(c>=64)}else{do{n+=c=this._getWhiteCode()}while(c>=64);do{o+=c=this._getBlackCode()}while(c>=64)}this._addPixels(t[this.codingPos]+n,i);t[this.codingPos]<a&&this._addPixels(t[this.codingPos]+o,1^i);for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2;break;case 7:this._addPixels(e[r]+3,i);i^=1;if\ -(t[this.codingPos]<a){++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 5:this._addPixels(e[r]+2,i);i^=1;if(t[this.codingPos]<a){++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 3:this._addPixels(e[r]+1,i);i^=1;if(t[this.codingPos]<a){++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 2:this._addPixels(e[r],i);i^=1;if(t[this.codingPos]<a){++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 8:this._addPixelsNeg(e[r]-3,i);i^=1;if(t[this.codingPos]<a){r>0?--r:++r;for(;\ -e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 6:this._addPixelsNeg(e[r]-2,i);i^=1;if(t[this.codingPos]<a){r>0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 4:this._addPixelsNeg(e[r]-1,i);i^=1;if(t[this.codingPos]<a){r>0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case Ja:this._addPixels(a,0);this.eof=!0;break;default:info("bad 2d code");this._addPixels(a,0);this.err=!0}}}else{t[0]=0;this.codingPos=0;i=0;for(;t[this.codingPos]<a;){n=0;if(i)do{n+=c=this._getBlackCod\ -e()}while(c>=64);else do{n+=c=this._getWhiteCode()}while(c>=64);this._addPixels(t[this.codingPos]+n,i);i^=1}}let l=!1;this.byteAlign&&(this.inputBits&=-8);if(this.eoblock||this.row!==this.rows-1){n=this._lookBits(12);if(this.eoline)for(;n!==Ja&&1!==n;){this._eatBits(1);n=this._lookBits(12)}else for(;0===n;){this._eatBits(1);n=this._lookBits(12)}if(1===n){this._eatBits(12);l=!0}else n===Ja&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone){this.nextLine2D=!this._l\ -ookBits(1);this._eatBits(1)}if(this.eoblock&&l&&this.byteAlign){n=this._lookBits(12);if(1===n){this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}if(this.encoding>=0)for(s=0;s<4;++s){n=this._lookBits(12);1!==n&&info("bad rtc code: "+n);this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}}this.eof=!0}}else if(this.err&&this.eoline){for(;;){n=this._lookBits(13);if(n===Ja){this.eof=!0;return-1}if(n>>1==1)break;this._eatBits(1)}this._eatBits(12);if(this.enc\ -oding>0){this._eatBits(1);this.nextLine2D=!(1&n)}}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1];this.row++}if(this.outputBits>=8){o=1&this.codingPos?0:255;this.outputBits-=8;if(0===this.outputBits&&t[this.codingPos]<a){this.codingPos++;this.outputBits=t[this.codingPos]-t[this.codingPos-1]}}else{n=8;o=0;do{if("number"!=typeof this.outputBits)throw new FormatError(\'Invalid /CCITTFaxDecode data, "outputBits" must be a number.\');if(this.outputBits>n){o<<=n;1&this.codingPos||(o|=255>\ ->8-n);this.outputBits-=n;n=0}else{o<<=this.outputBits;1&this.codingPos||(o|=255>>8-this.outputBits);n-=this.outputBits;this.outputBits=0;if(t[this.codingPos]<a){this.codingPos++;this.outputBits=t[this.codingPos]-t[this.codingPos-1]}else if(n>0){o<<=n;n=0}}}while(n)}this.black&&(o^=255);return o}_addPixels(e,t){const a=this.codingLine;let r=this.codingPos;if(e>a[r]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&r^t&&++r;a[r]=e}this.codingPos=r}_addPixelsNeg(e,t){cons\ -t a=this.codingLine;let r=this.codingPos;if(e>a[r]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&r^t&&++r;a[r]=e}else if(e<a[r]){if(e<0){info("invalid code");this.err=!0;e=0}for(;r>0&&e<a[r-1];)--r;a[r]=e}this.codingPos=r}_findTableCode(e,t,a,r){const i=r||0;for(let r=e;r<=t;++r){let e=this._lookBits(r);if(e===Ja)return[!0,1,!1];r<t&&(e<<=t-r);if(!i||e>=i){const t=a[e-i];if(t[0]===r){this._eatBits(r);return[!0,t[1],!0]}}}return[!1,0,!1]}_getTwoDimCode(){let e,t=0;i\ -f(this.eoblock){t=this._lookBits(7);e=Ya[t];if(e?.[0]>0){this._eatBits(e[0]);return e[1]}}else{const e=this._findTableCode(1,7,Ya);if(e[0]&&e[2])return e[1]}info("Bad two dim code");return Ja}_getWhiteCode(){let e,t=0;if(this.eoblock){t=this._lookBits(12);if(t===Ja)return 1;e=t>>5?Qa[t>>3]:Za[t];if(e[0]>0){this._eatBits(e[0]);return e[1]}}else{let e=this._findTableCode(1,9,Qa);if(e[0])return e[1];e=this._findTableCode(11,12,Za);if(e[0])return e[1]}info("bad white code");this._eatBits(1);return 1\ -}_getBlackCode(){let e,t;if(this.eoblock){e=this._lookBits(13);if(e===Ja)return 1;t=e>>7?!(e>>9)&&e>>7?tr[(e>>1)-64]:ar[e>>7]:er[e];if(t[0]>0){this._eatBits(t[0]);return t[1]}}else{let e=this._findTableCode(2,6,ar);if(e[0])return e[1];e=this._findTableCode(7,12,tr,64);if(e[0])return e[1];e=this._findTableCode(10,13,er);if(e[0])return e[1]}info("bad black code");this._eatBits(1);return 1}_lookBits(e){let t;for(;this.inputBits<e;){if(-1===(t=this.source.next()))return 0===this.inputBits?Ja:this.in\ -putBuf<<e-this.inputBits&65535>>16-e;this.inputBuf=this.inputBuf<<8|t;this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}_eatBits(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}class CCITTFaxStream extends DecodeStream{constructor(e,t,a){super(t);this.str=e;this.dict=e.dict;a instanceof Dict||(a=Dict.empty);const r={next:()=>e.getByte()};this.ccittFaxDecoder=new CCITTFaxDecoder(r,{K:a.get("K"),EndOfLine:a.get("EndOfLine"),EncodedByteAlign:a.get("EncodedByteAlign"),Columns:a.get(\ -"Columns"),Rows:a.get("Rows"),EndOfBlock:a.get("EndOfBlock"),BlackIs1:a.get("BlackIs1")})}readBlock(){for(;!this.eof;){const e=this.ccittFaxDecoder.readNextChar();if(-1===e){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1);this.buffer[this.bufferLength++]=e}}}const rr=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ir=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843\ -,327875,327907,258,258,258]),nr=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),sr=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308\ -,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,52\ -4326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,52438\ -1,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,5\ -24399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,4590\ -09,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,\ -459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590\ -055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],or=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,\ -327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];class FlateStream extends DecodeStream{constructor(e,t){super(t);this.str=e;this.dict=e.dict;const a=e.getByte(),r=e.getByte();if(-1===a||-1===r)throw new FormatError(`Invalid header in flate stream: ${a}, ${r}`);if(8!=(15&a))throw new FormatError(`Unknown compression method in flate stream: ${a}, ${r}`);if(((a<<8)+r)%31!=0)throw new FormatError(`Bad FCHECK in flate stream: ${a}, ${r}`);if(32&r)throw new FormatEr\ -ror(`FDICT bit set in flate stream: ${a}, ${r}`);this.codeSize=0;this.codeBuf=0}async getImageData(e,t){const a=await this.asyncGetBytes();return a?a.length<=e?a:a.subarray(0,e):this.getBytes(e)}async asyncGetBytes(){this.str.reset();const e=this.str.getBytes();try{const{readable:t,writable:a}=new DecompressionStream("deflate"),r=a.getWriter();await r.ready;r.write(e).then((async()=>{await r.ready;await r.close()})).catch((()=>{}));const i=[];let n=0;for await(const e of t){i.push(e);n+=e.byteLe\ -ngth}const s=new Uint8Array(n);let o=0;for(const e of i){s.set(e,o);o+=e.byteLength}return s}catch{this.str=new Stream(e,2,e.length,this.str.dict);this.reset();return null}}get isAsync(){return!0}getBits(e){const t=this.str;let a,r=this.codeSize,i=this.codeBuf;for(;r<e;){if(-1===(a=t.getByte()))throw new FormatError("Bad encoding in flate stream");i|=a<<r;r+=8}a=i&(1<<e)-1;this.codeBuf=i>>e;this.codeSize=r-=e;return a}getCode(e){const t=this.str,a=e[0],r=e[1];let i,n=this.codeSize,s=this.codeBuf\ -;for(;n<r&&-1!==(i=t.getByte());){s|=i<<n;n+=8}const o=a[s&(1<<r)-1],c=o>>16,l=65535&o;if(c<1||n<c)throw new FormatError("Bad encoding in flate stream");this.codeBuf=s>>c;this.codeSize=n-c;return l}generateHuffmanTable(e){const t=e.length;let a,r=0;for(a=0;a<t;++a)e[a]>r&&(r=e[a]);const i=1<<r,n=new Int32Array(i);for(let s=1,o=0,c=2;s<=r;++s,o<<=1,c<<=1)for(let r=0;r<t;++r)if(e[r]===s){let e=0,t=o;for(a=0;a<s;++a){e=e<<1|1&t;t>>=1}for(a=e;a<i;a+=c)n[a]=s<<16|r;++o}return[n,r]}#X(e){info(e);this.\ -eof=!0}readBlock(){let e,t,a;const r=this.str;try{t=this.getBits(3)}catch(e){this.#X(e.message);return}1&t&&(this.eof=!0);t>>=1;if(0===t){let t;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}let a=t;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}a|=t<<8;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}let i=t;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}i|=t<<8;if(i!==(65535&~a)&&(\ -0!==a||0!==i))throw new FormatError("Bad uncompressed block length in flate stream");this.codeBuf=0;this.codeSize=0;const n=this.bufferLength,s=n+a;e=this.ensureBuffer(s);this.bufferLength=s;if(0===a)-1===r.peekByte()&&(this.eof=!0);else{const t=r.getBytes(a);e.set(t,n);t.length<a&&(this.eof=!0)}return}let i,n;if(1===t){i=sr;n=or}else{if(2!==t)throw new FormatError("Unknown block type in flate stream");{const e=this.getBits(5)+257,t=this.getBits(5)+1,r=this.getBits(4)+4,s=new Uint8Array(rr.lengt\ -h);let o;for(o=0;o<r;++o)s[rr[o]]=this.getBits(3);const c=this.generateHuffmanTable(s);a=0;o=0;const l=e+t,h=new Uint8Array(l);let u,d,f;for(;o<l;){const e=this.getCode(c);if(16===e){u=2;d=3;f=a}else if(17===e){u=3;d=3;f=a=0}else{if(18!==e){h[o++]=a=e;continue}u=7;d=11;f=a=0}let t=this.getBits(u)+d;for(;t-- >0;)h[o++]=f}i=this.generateHuffmanTable(h.subarray(0,e));n=this.generateHuffmanTable(h.subarray(e,l))}}e=this.buffer;let s=e?e.length:0,o=this.bufferLength;for(;;){let t=this.getCode(i);if(t\ -<256){if(o+1>=s){e=this.ensureBuffer(o+1);s=e.length}e[o++]=t;continue}if(256===t){this.bufferLength=o;return}t-=257;t=ir[t];let r=t>>16;r>0&&(r=this.getBits(r));a=(65535&t)+r;t=this.getCode(n);t=nr[t];r=t>>16;r>0&&(r=this.getBits(r));const c=(65535&t)+r;if(o+a>=s){e=this.ensureBuffer(o+a);s=e.length}for(let t=0;t<a;++t,++o)e[o]=e[o-c]}}}const cr=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0}\ -,{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,swit\ -chFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,\ -nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps\ -:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];class ArithmeticDecoder{constructor(e,t,a){this.data=e;this.bp=t;this.dataEnd=a;this.chigh=e[t];this.clow=0;this.byteIn();this.chigh=this.chigh<<7&65535|this.clow>>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768}byteIn(){const e=this.data;let t=this.bp;if(255===e[t])if(e[t+1]>143){this.clow+=65280;this.ct=8}else{t++;this\ -.clow+=e[t]<<9;this.ct=7;this.bp=t}else{t++;this.clow+=t<this.dataEnd?e[t]<<8:65280;this.ct=8;this.bp=t}if(this.clow>65535){this.chigh+=this.clow>>16;this.clow&=65535}}readBit(e,t){let a=e[t]>>1,r=1&e[t];const i=cr[a],n=i.qe;let s,o=this.a-n;if(this.chigh<n)if(o<n){o=n;s=r;a=i.nmps}else{o=n;s=1^r;1===i.switchFlag&&(r=s);a=i.nlps}else{this.chigh-=n;if(32768&o){this.a=o;return r}if(o<n){s=1^r;1===i.switchFlag&&(r=s);a=i.nlps}else{s=r;a=i.nmps}}do{0===this.ct&&this.byteIn();o<<=1;this.chigh=this.ch\ -igh<<1&65535|this.clow>>15&1;this.clow=this.clow<<1&65535;this.ct--}while(!(32768&o));this.a=o;e[t]=a<<1|r;return s}}class Jbig2Error extends fa{constructor(e){super(e,"Jbig2Error")}}class ContextCache{getContexts(e){return e in this?this[e]:this[e]=new Int8Array(65536)}}class DecodingContext{constructor(e,t,a){this.data=e;this.start=t;this.end=a}get decoder(){return shadow(this,"decoder",new ArithmeticDecoder(this.data,this.start,this.end))}get contextCache(){return shadow(this,"contextCache",n\ -ew ContextCache)}}function decodeInteger(e,t,a){const r=e.getContexts(t);let i=1;function readBits(e){let t=0;for(let n=0;n<e;n++){const e=a.readBit(r,i);i=i<256?i<<1|e:511&(i<<1|e)|256;t=t<<1|e}return t>>>0}const n=readBits(1),s=readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(32)+4436:readBits(12)+340:readBits(8)+84:readBits(6)+20:readBits(4)+4:readBits(2);let o;0===n?o=s:s>0&&(o=-s);return o>=-2147483648&&o<=va?o:null}function decodeIAID(e,t,a){const r=e.getContexts("IAID"\ -);let i=1;for(let e=0;e<a;e++){i=i<<1|t.readBit(r,i)}return a<31?i&(1<<a)-1:2147483647&i}const lr=["SymbolDictionary",null,null,null,"IntermediateTextRegion",null,"ImmediateTextRegion","ImmediateLosslessTextRegion",null,null,null,null,null,null,null,null,"PatternDictionary",null,null,null,"IntermediateHalftoneRegion",null,"ImmediateHalftoneRegion","ImmediateLosslessHalftoneRegion",null,null,null,null,null,null,null,null,null,null,null,null,"IntermediateGenericRegion",null,"ImmediateGenericRegion\ -","ImmediateLosslessGenericRegion","IntermediateGenericRefinementRegion",null,"ImmediateGenericRefinementRegion","ImmediateLosslessGenericRefinementRegion",null,null,null,null,"PageInformation","EndOfPage","EndOfStripe","EndOfFile","Profiles","Tables",null,null,null,null,null,null,null,null,"Extension"],hr=[[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:2,y:-2},{x:-2,y:\ --1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-2,y:0},{x:-1,y:0}],[{x:-3,y:-1},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}]],ur=[{coding:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:-1,y:1},{x:0,y:1},{x:1,y:1}]},{coding:[{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference\ -:[{x:0,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:0,y:1},{x:1,y:1}]}],dr=[39717,1941,229,405],fr=[32,8];function decodeBitmap(e,t,a,r,i,n,s,o){if(e){return decodeMMRBitmap(new Reader(o.data,o.start,o.end),t,a,!1)}if(0===r&&!n&&!i&&4===s.length&&3===s[0].x&&-1===s[0].y&&-3===s[1].x&&-1===s[1].y&&2===s[2].x&&-2===s[2].y&&-2===s[3].x&&-2===s[3].y)return function decodeBitmapTemplate0(e,t,a){const r=a.decoder,i=a.contextCache.getContexts("GB"),n=[];let s,o,c,l,h,u,d;for(o=0;o<t;o++){h=n[o]=new Uint8Arr\ -ay(e);u=o<1?h:n[o-1];d=o<2?h:n[o-2];s=d[0]<<13|d[1]<<12|d[2]<<11|u[0]<<7|u[1]<<6|u[2]<<5|u[3]<<4;for(c=0;c<e;c++){h[c]=l=r.readBit(i,s);s=(31735&s)<<1|(c+3<e?d[c+3]<<11:0)|(c+4<e?u[c+4]<<4:0)|l}}return n}(t,a,o);const c=!!n,l=hr[r].concat(s);l.sort(((e,t)=>e.y-t.y||e.x-t.x));const h=l.length,u=new Int8Array(h),d=new Int8Array(h),f=[];let g,p,m=0,b=0,y=0,w=0;for(p=0;p<h;p++){u[p]=l[p].x;d[p]=l[p].y;b=Math.min(b,l[p].x);y=Math.max(y,l[p].x);w=Math.min(w,l[p].y);p<h-1&&l[p].y===l[p+1].y&&l[p].x===l\ -[p+1].x-1?m|=1<<h-1-p:f.push(p)}const x=f.length,S=new Int8Array(x),k=new Int8Array(x),C=new Uint16Array(x);for(g=0;g<x;g++){p=f[g];S[g]=l[p].x;k[g]=l[p].y;C[g]=1<<h-1-p}const v=-b,F=-w,T=t-y,O=dr[r];let M=new Uint8Array(t);const D=[],R=o.decoder,N=o.contextCache.getContexts("GB");let E,L,j,_,U,X=0,q=0;for(let e=0;e<a;e++){if(i){X^=R.readBit(N,O);if(X){D.push(M);continue}}M=new Uint8Array(M);D.push(M);for(E=0;E<t;E++){if(c&&n[e][E]){M[E]=0;continue}if(E>=v&&E<T&&e>=F){q=q<<1&m;for(p=0;p<x;p++){L\ -=e+k[p];j=E+S[p];_=D[L][j];if(_){_=C[p];q|=_}}}else{q=0;U=h-1;for(p=0;p<h;p++,U--){j=E+u[p];if(j>=0&&j<t){L=e+d[p];if(L>=0){_=D[L][j];_&&(q|=_<<U)}}}}const a=R.readBit(N,q);M[E]=a}}return D}function decodeRefinement(e,t,a,r,i,n,s,o,c){let l=ur[a].coding;0===a&&(l=l.concat([o[0]]));const h=l.length,u=new Int32Array(h),d=new Int32Array(h);let f;for(f=0;f<h;f++){u[f]=l[f].x;d[f]=l[f].y}let g=ur[a].reference;0===a&&(g=g.concat([o[1]]));const p=g.length,m=new Int32Array(p),b=new Int32Array(p);for(f=0\ -;f<p;f++){m[f]=g[f].x;b[f]=g[f].y}const y=r[0].length,w=r.length,x=fr[a],S=[],k=c.decoder,C=c.contextCache.getContexts("GR");let v=0;for(let a=0;a<t;a++){if(s){v^=k.readBit(C,x);if(v)throw new Jbig2Error("prediction is not supported")}const t=new Uint8Array(e);S.push(t);for(let s=0;s<e;s++){let o,c,l=0;for(f=0;f<h;f++){o=a+d[f];c=s+u[f];o<0||c<0||c>=e?l<<=1:l=l<<1|S[o][c]}for(f=0;f<p;f++){o=a+b[f]-n;c=s+m[f]-i;o<0||o>=w||c<0||c>=y?l<<=1:l=l<<1|r[o][c]}const g=k.readBit(C,l);t[s]=g}}return S}func\ -tion decodeTextRegion(e,t,a,r,i,n,s,o,c,l,h,u,d,f,g,p,m,b,y){if(e&&t)throw new Jbig2Error("refinement with Huffman is not supported");const w=[];let x,S;for(x=0;x<r;x++){S=new Uint8Array(a);i&&S.fill(i);w.push(S)}const k=m.decoder,C=m.contextCache;let v=e?-f.tableDeltaT.decode(y):-decodeInteger(C,"IADT",k),F=0;x=0;for(;x<n;){v+=e?f.tableDeltaT.decode(y):decodeInteger(C,"IADT",k);F+=e?f.tableFirstS.decode(y):decodeInteger(C,"IAFS",k);let r=F;for(;;){let i=0;s>1&&(i=e?y.readBits(b):decodeInteger(C\ -,"IAIT",k));const n=s*v+i,F=e?f.symbolIDTable.decode(y):decodeIAID(C,k,c),T=t&&(e?y.readBit():decodeInteger(C,"IARI",k));let O=o[F],M=O[0].length,D=O.length;if(T){const e=decodeInteger(C,"IARDW",k),t=decodeInteger(C,"IARDH",k);M+=e;D+=t;O=decodeRefinement(M,D,g,O,(e>>1)+decodeInteger(C,"IARDX",k),(t>>1)+decodeInteger(C,"IARDY",k),!1,p,m)}let R=0;l?1&u?R=D-1:r+=D-1:u>1?r+=M-1:R=M-1;const N=n-(1&u?0:D-1),E=r-(2&u?M-1:0);let L,j,_;if(l)for(L=0;L<D;L++){S=w[E+L];if(!S)continue;_=O[L];const e=Math.mi\ -n(a-N,M);switch(d){case 0:for(j=0;j<e;j++)S[N+j]|=_[j];break;case 2:for(j=0;j<e;j++)S[N+j]^=_[j];break;default:throw new Jbig2Error(`operator ${d} is not supported`)}}else for(j=0;j<D;j++){S=w[N+j];if(S){_=O[j];switch(d){case 0:for(L=0;L<M;L++)S[E+L]|=_[L];break;case 2:for(L=0;L<M;L++)S[E+L]^=_[L];break;default:throw new Jbig2Error(`operator ${d} is not supported`)}}}x++;const U=e?f.tableDeltaS.decode(y):decodeInteger(C,"IADS",k);if(null===U)break;r+=R+U+h}}return w}function readSegmentHeader(e,\ -t){const a={};a.number=readUint32(e,t);const r=e[t+4],i=63&r;if(!lr[i])throw new Jbig2Error("invalid segment type: "+i);a.type=i;a.typeName=lr[i];a.deferredNonRetain=!!(128&r);const n=!!(64&r),s=e[t+5];let o=s>>5&7;const c=[31&s];let l=t+6;if(7===s){o=536870911&readUint32(e,l-1);l+=3;let t=o+7>>3;c[0]=e[l++];for(;--t>0;)c.push(e[l++])}else if(5===s||6===s)throw new Jbig2Error("invalid referred-to flags");a.retainBits=c;let h=4;a.number<=256?h=1:a.number<=65536&&(h=2);const u=[];let d,f;for(d=0;d\ -<o;d++){let t;t=1===h?e[l]:2===h?readUint16(e,l):readUint32(e,l);u.push(t);l+=h}a.referredTo=u;if(n){a.pageAssociation=readUint32(e,l);l+=4}else a.pageAssociation=e[l++];a.length=readUint32(e,l);l+=4;if(4294967295===a.length){if(38!==i)throw new Jbig2Error("invalid unknown segment length");{const t=readRegionSegmentInformation(e,l),r=!!(1&e[l+gr]),i=6,n=new Uint8Array(i);if(!r){n[0]=255;n[1]=172}n[2]=t.height>>>24&255;n[3]=t.height>>16&255;n[4]=t.height>>8&255;n[5]=255&t.height;for(d=l,f=e.lengt\ -h;d<f;d++){let t=0;for(;t<i&&n[t]===e[d+t];)t++;if(t===i){a.length=d+i;break}}if(4294967295===a.length)throw new Jbig2Error("segment end was not found")}}a.headerEnd=l;return a}function readSegments(e,t,a,r){const i=[];let n=a;for(;n<r;){const a=readSegmentHeader(t,n);n=a.headerEnd;const r={header:a,data:t};if(!e.randomAccess){r.start=n;n+=a.length;r.end=n}i.push(r);if(51===a.type)break}if(e.randomAccess)for(let e=0,t=i.length;e<t;e++){i[e].start=n;n+=i[e].header.length;i[e].end=n}return i}funct\ -ion readRegionSegmentInformation(e,t){return{width:readUint32(e,t),height:readUint32(e,t+4),x:readUint32(e,t+8),y:readUint32(e,t+12),combinationOperator:7&e[t+16]}}const gr=17;function processSegment(e,t){const a=e.header,r=e.data,i=e.end;let n,s,o,c,l=e.start;switch(a.type){case 0:const e={},t=readUint16(r,l);e.huffman=!!(1&t);e.refinement=!!(2&t);e.huffmanDHSelector=t>>2&3;e.huffmanDWSelector=t>>4&3;e.bitmapSizeSelector=t>>6&1;e.aggregationInstancesSelector=t>>7&1;e.bitmapCodingContextUsed=!!(\ -256&t);e.bitmapCodingContextRetained=!!(512&t);e.template=t>>10&3;e.refinementTemplate=t>>12&1;l+=2;if(!e.huffman){c=0===e.template?4:1;s=[];for(o=0;o<c;o++){s.push({x:readInt8(r,l),y:readInt8(r,l+1)});l+=2}e.at=s}if(e.refinement&&!e.refinementTemplate){s=[];for(o=0;o<2;o++){s.push({x:readInt8(r,l),y:readInt8(r,l+1)});l+=2}e.refinementAt=s}e.numberOfExportedSymbols=readUint32(r,l);l+=4;e.numberOfNewSymbols=readUint32(r,l);l+=4;n=[e,a.number,a.referredTo,r,l,i];break;case 6:case 7:const h={};h.in\ -fo=readRegionSegmentInformation(r,l);l+=gr;const u=readUint16(r,l);l+=2;h.huffman=!!(1&u);h.refinement=!!(2&u);h.logStripSize=u>>2&3;h.stripSize=1<<h.logStripSize;h.referenceCorner=u>>4&3;h.transposed=!!(64&u);h.combinationOperator=u>>7&3;h.defaultPixelValue=u>>9&1;h.dsOffset=u<<17>>27;h.refinementTemplate=u>>15&1;if(h.huffman){const e=readUint16(r,l);l+=2;h.huffmanFS=3&e;h.huffmanDS=e>>2&3;h.huffmanDT=e>>4&3;h.huffmanRefinementDW=e>>6&3;h.huffmanRefinementDH=e>>8&3;h.huffmanRefinementDX=e>>10&3\ -;h.huffmanRefinementDY=e>>12&3;h.huffmanRefinementSizeSelector=!!(16384&e)}if(h.refinement&&!h.refinementTemplate){s=[];for(o=0;o<2;o++){s.push({x:readInt8(r,l),y:readInt8(r,l+1)});l+=2}h.refinementAt=s}h.numberOfSymbolInstances=readUint32(r,l);l+=4;n=[h,a.referredTo,r,l,i];break;case 16:const d={},f=r[l++];d.mmr=!!(1&f);d.template=f>>1&3;d.patternWidth=r[l++];d.patternHeight=r[l++];d.maxPatternIndex=readUint32(r,l);l+=4;n=[d,a.number,r,l,i];break;case 22:case 23:const g={};g.info=readRegionSegm\ -entInformation(r,l);l+=gr;const p=r[l++];g.mmr=!!(1&p);g.template=p>>1&3;g.enableSkip=!!(8&p);g.combinationOperator=p>>4&7;g.defaultPixelValue=p>>7&1;g.gridWidth=readUint32(r,l);l+=4;g.gridHeight=readUint32(r,l);l+=4;g.gridOffsetX=4294967295&readUint32(r,l);l+=4;g.gridOffsetY=4294967295&readUint32(r,l);l+=4;g.gridVectorX=readUint16(r,l);l+=2;g.gridVectorY=readUint16(r,l);l+=2;n=[g,a.referredTo,r,l,i];break;case 38:case 39:const m={};m.info=readRegionSegmentInformation(r,l);l+=gr;const b=r[l++];m\ -.mmr=!!(1&b);m.template=b>>1&3;m.prediction=!!(8&b);if(!m.mmr){c=0===m.template?4:1;s=[];for(o=0;o<c;o++){s.push({x:readInt8(r,l),y:readInt8(r,l+1)});l+=2}m.at=s}n=[m,r,l,i];break;case 48:const y={width:readUint32(r,l),height:readUint32(r,l+4),resolutionX:readUint32(r,l+8),resolutionY:readUint32(r,l+12)};4294967295===y.height&&delete y.height;const w=r[l+16];readUint16(r,l+17);y.lossless=!!(1&w);y.refinement=!!(2&w);y.defaultPixelValue=w>>2&1;y.combinationOperator=w>>3&3;y.requiresBuffer=!!(32&w\ -);y.combinationOperatorOverride=!!(64&w);n=[y];break;case 49:case 50:case 51:case 62:break;case 53:n=[a.number,r,l,i];break;default:throw new Jbig2Error(`segment type ${a.typeName}(${a.type}) is not implemented`)}const h="on"+a.typeName;h in t&&t[h].apply(t,n)}function processSegments(e,t){for(let a=0,r=e.length;a<r;a++)processSegment(e[a],t)}class SimpleSegmentVisitor{onPageInformation(e){this.currentPageInfo=e;const t=e.width+7>>3,a=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&a.fill\ -(255);this.buffer=a}drawBitmap(e,t){const a=this.currentPageInfo,r=e.width,i=e.height,n=a.width+7>>3,s=a.combinationOperatorOverride?e.combinationOperator:a.combinationOperator,o=this.buffer,c=128>>(7&e.x);let l,h,u,d,f=e.y*n+(e.x>>3);switch(s){case 0:for(l=0;l<i;l++){u=c;d=f;for(h=0;h<r;h++){t[l][h]&&(o[d]|=u);u>>=1;if(!u){u=128;d++}}f+=n}break;case 2:for(l=0;l<i;l++){u=c;d=f;for(h=0;h<r;h++){t[l][h]&&(o[d]^=u);u>>=1;if(!u){u=128;d++}}f+=n}break;default:throw new Jbig2Error(`operator ${s} is no\ -t supported`)}}onImmediateGenericRegion(e,t,a,r){const i=e.info,n=new DecodingContext(t,a,r),s=decodeBitmap(e.mmr,i.width,i.height,e.template,e.prediction,null,e.at,n);this.drawBitmap(i,s)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(e,t,a,r,i,n){let s,o;if(e.huffman){s=function getSymbolDictionaryHuffmanTables(e,t,a){let r,i,n,s,o=0;switch(e.huffmanDHSelector){case 0:case 1:r=getStandardTable(e.huffmanDHSelector+4);break;case 3:r=getCustomHuf\ -fmanTable(o,t,a);o++;break;default:throw new Jbig2Error("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:i=getStandardTable(e.huffmanDWSelector+2);break;case 3:i=getCustomHuffmanTable(o,t,a);o++;break;default:throw new Jbig2Error("invalid Huffman DW selector")}if(e.bitmapSizeSelector){n=getCustomHuffmanTable(o,t,a);o++}else n=getStandardTable(1);s=e.aggregationInstancesSelector?getCustomHuffmanTable(o,t,a):getStandardTable(1);return{tableDeltaHeight:r,tableDeltaWidth:i,ta\ -bleBitmapSize:n,tableAggregateInstances:s}}(e,a,this.customTables);o=new Reader(r,i,n)}let c=this.symbols;c||(this.symbols=c={});const l=[];for(const e of a){const t=c[e];t&&l.push(...t)}const h=new DecodingContext(r,i,n);c[t]=function decodeSymbolDictionary(e,t,a,r,i,n,s,o,c,l,h,u){if(e&&t)throw new Jbig2Error("symbol refinement with Huffman is not supported");const d=[];let f=0,g=log2(a.length+r);const p=h.decoder,m=h.contextCache;let b,y;if(e){b=getStandardTable(1);y=[];g=Math.max(g,1)}for(;d\ -.length<r;){f+=e?n.tableDeltaHeight.decode(u):decodeInteger(m,"IADH",p);let r=0,i=0;const b=e?y.length:0;for(;;){const b=e?n.tableDeltaWidth.decode(u):decodeInteger(m,"IADW",p);if(null===b)break;r+=b;i+=r;let w;if(t){const i=decodeInteger(m,"IAAI",p);if(i>1)w=decodeTextRegion(e,t,r,f,0,i,1,a.concat(d),g,0,0,1,0,n,c,l,h,0,u);else{const e=decodeIAID(m,p,g),t=decodeInteger(m,"IARDX",p),i=decodeInteger(m,"IARDY",p);w=decodeRefinement(r,f,c,e<a.length?a[e]:d[e-a.length],t,i,!1,l,h)}d.push(w)}else if(\ -e)y.push(r);else{w=decodeBitmap(!1,r,f,s,!1,null,o,h);d.push(w)}}if(e&&!t){const e=n.tableBitmapSize.decode(u);u.byteAlign();let t;if(0===e)t=readUncompressedBitmap(u,i,f);else{const a=u.end,r=u.position+e;u.end=r;t=decodeMMRBitmap(u,i,f,!1);u.end=a;u.position=r}const a=y.length;if(b===a-1)d.push(t);else{let e,r,i,n,s,o=0;for(e=b;e<a;e++){n=y[e];i=o+n;s=[];for(r=0;r<f;r++)s.push(t[r].subarray(o,i));d.push(s);o=i}}}}const w=[],x=[];let S,k,C=!1;const v=a.length+r;for(;x.length<v;){let t=e?b.decod\ -e(u):decodeInteger(m,"IAEX",p);for(;t--;)x.push(C);C=!C}for(S=0,k=a.length;S<k;S++)x[S]&&w.push(a[S]);for(let e=0;e<r;S++,e++)x[S]&&w.push(d[e]);return w}(e.huffman,e.refinement,l,e.numberOfNewSymbols,e.numberOfExportedSymbols,s,e.template,e.at,e.refinementTemplate,e.refinementAt,h,o)}onImmediateTextRegion(e,t,a,r,i){const n=e.info;let s,o;const c=this.symbols,l=[];for(const e of t){const t=c[e];t&&l.push(...t)}const h=log2(l.length);if(e.huffman){o=new Reader(a,r,i);s=function getTextRegionHuff\ -manTables(e,t,a,r,i){const n=[];for(let e=0;e<=34;e++){const t=i.readBits(4);n.push(new HuffmanLine([e,t,0,0]))}const s=new HuffmanTable(n,!1);n.length=0;for(let e=0;e<r;){const t=s.decode(i);if(t>=32){let a,r,s;switch(t){case 32:if(0===e)throw new Jbig2Error("no previous value in symbol ID table");r=i.readBits(2)+3;a=n[e-1].prefixLength;break;case 33:r=i.readBits(3)+3;a=0;break;case 34:r=i.readBits(7)+11;a=0;break;default:throw new Jbig2Error("invalid code length in symbol ID table")}for(s=0;s<\ -r;s++){n.push(new HuffmanLine([e,a,0,0]));e++}}else{n.push(new HuffmanLine([e,t,0,0]));e++}}i.byteAlign();const o=new HuffmanTable(n,!1);let c,l,h,u=0;switch(e.huffmanFS){case 0:case 1:c=getStandardTable(e.huffmanFS+6);break;case 3:c=getCustomHuffmanTable(u,t,a);u++;break;default:throw new Jbig2Error("invalid Huffman FS selector")}switch(e.huffmanDS){case 0:case 1:case 2:l=getStandardTable(e.huffmanDS+8);break;case 3:l=getCustomHuffmanTable(u,t,a);u++;break;default:throw new Jbig2Error("invalid \ -Huffman DS selector")}switch(e.huffmanDT){case 0:case 1:case 2:h=getStandardTable(e.huffmanDT+11);break;case 3:h=getCustomHuffmanTable(u,t,a);u++;break;default:throw new Jbig2Error("invalid Huffman DT selector")}if(e.refinement)throw new Jbig2Error("refinement with Huffman is not supported");return{symbolIDTable:o,tableFirstS:c,tableDeltaS:l,tableDeltaT:h}}(e,t,this.customTables,l.length,o)}const u=new DecodingContext(a,r,i),d=decodeTextRegion(e.huffman,e.refinement,n.width,n.height,e.defaultPix\ -elValue,e.numberOfSymbolInstances,e.stripSize,l,h,e.transposed,e.dsOffset,e.referenceCorner,e.combinationOperator,s,e.refinementTemplate,e.refinementAt,u,e.logStripSize,o);this.drawBitmap(n,d)}onImmediateLosslessTextRegion(){this.onImmediateTextRegion(...arguments)}onPatternDictionary(e,t,a,r,i){let n=this.patterns;n||(this.patterns=n={});const s=new DecodingContext(a,r,i);n[t]=function decodePatternDictionary(e,t,a,r,i,n){const s=[];if(!e){s.push({x:-t,y:0});0===i&&s.push({x:-3,y:-1},{x:2,y:-2}\ -,{x:-2,y:-2})}const o=decodeBitmap(e,(r+1)*t,a,i,!1,null,s,n),c=[];for(let e=0;e<=r;e++){const r=[],i=t*e,n=i+t;for(let e=0;e<a;e++)r.push(o[e].subarray(i,n));c.push(r)}return c}(e.mmr,e.patternWidth,e.patternHeight,e.maxPatternIndex,e.template,s)}onImmediateHalftoneRegion(e,t,a,r,i){const n=this.patterns[t[0]],s=e.info,o=new DecodingContext(a,r,i),c=function decodeHalftoneRegion(e,t,a,r,i,n,s,o,c,l,h,u,d,f,g){if(s)throw new Jbig2Error("skip is not supported");if(0!==o)throw new Jbig2Error(`oper\ -ator "${o}" is not supported in halftone region`);const p=[];let m,b,y;for(m=0;m<i;m++){y=new Uint8Array(r);n&&y.fill(n);p.push(y)}const w=t.length,x=t[0],S=x[0].length,k=x.length,C=log2(w),v=[];if(!e){v.push({x:a<=1?3:2,y:-1});0===a&&v.push({x:-3,y:-1},{x:2,y:-2},{x:-2,y:-2})}const F=[];let T,O,M,D,R,N,E,L,j,_,U;e&&(T=new Reader(g.data,g.start,g.end));for(m=C-1;m>=0;m--){O=e?decodeMMRBitmap(T,c,l,!0):decodeBitmap(!1,c,l,a,!1,null,v,g);F[m]=O}for(M=0;M<l;M++)for(D=0;D<c;D++){R=0;N=0;for(b=C-1;b>\ -=0;b--){R^=F[b][M][D];N|=R<<b}E=t[N];L=h+M*f+D*d>>8;j=u+M*d-D*f>>8;if(L>=0&&L+S<=r&&j>=0&&j+k<=i)for(m=0;m<k;m++){U=p[j+m];_=E[m];for(b=0;b<S;b++)U[L+b]|=_[b]}else{let e,t;for(m=0;m<k;m++){t=j+m;if(!(t<0||t>=i)){U=p[t];_=E[m];for(b=0;b<S;b++){e=L+b;e>=0&&e<r&&(U[e]|=_[b])}}}}}return p}(e.mmr,n,e.template,s.width,s.height,e.defaultPixelValue,e.enableSkip,e.combinationOperator,e.gridWidth,e.gridHeight,e.gridOffsetX,e.gridOffsetY,e.gridVectorX,e.gridVectorY,o);this.drawBitmap(s,c)}onImmediateLossle\ -ssHalftoneRegion(){this.onImmediateHalftoneRegion(...arguments)}onTables(e,t,a,r){let i=this.customTables;i||(this.customTables=i={});i[e]=function decodeTablesSegment(e,t,a){const r=e[t],i=4294967295&readUint32(e,t+1),n=4294967295&readUint32(e,t+5),s=new Reader(e,t+9,a),o=1+(r>>1&7),c=1+(r>>4&7),l=[];let h,u,d=i;do{h=s.readBits(o);u=s.readBits(c);l.push(new HuffmanLine([d,h,u,0]));d+=1<<u}while(d<n);h=s.readBits(o);l.push(new HuffmanLine([i-1,h,32,0,"lower"]));h=s.readBits(o);l.push(new Huffman\ -Line([n,h,32,0]));if(1&r){h=s.readBits(o);l.push(new HuffmanLine([h,0]))}return new HuffmanTable(l,!1)}(t,a,r)}}class HuffmanLine{constructor(e){if(2===e.length){this.isOOB=!0;this.rangeLow=0;this.prefixLength=e[0];this.rangeLength=0;this.prefixCode=e[1];this.isLowerRange=!1}else{this.isOOB=!1;this.rangeLow=e[0];this.prefixLength=e[1];this.rangeLength=e[2];this.prefixCode=e[3];this.isLowerRange="lower"===e[4]}}}class HuffmanTreeNode{constructor(e){this.children=[];if(e){this.isLeaf=!0;this.range\ -Length=e.rangeLength;this.rangeLow=e.rangeLow;this.isLowerRange=e.isLowerRange;this.isOOB=e.isOOB}else this.isLeaf=!1}buildTree(e,t){const a=e.prefixCode>>t&1;if(t<=0)this.children[a]=new HuffmanTreeNode(e);else{let r=this.children[a];r||(this.children[a]=r=new HuffmanTreeNode(null));r.buildTree(e,t-1)}}decodeNode(e){if(this.isLeaf){if(this.isOOB)return null;const t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}const t=this.children[e.readBit()];if(!t)throw new Jbig2\ -Error("invalid Huffman data");return t.decodeNode(e)}}class HuffmanTable{constructor(e,t){t||this.assignPrefixCodes(e);this.rootNode=new HuffmanTreeNode(null);for(let t=0,a=e.length;t<a;t++){const a=e[t];a.prefixLength>0&&this.rootNode.buildTree(a,a.prefixLength-1)}}decode(e){return this.rootNode.decodeNode(e)}assignPrefixCodes(e){const t=e.length;let a=0;for(let r=0;r<t;r++)a=Math.max(a,e[r].prefixLength);const r=new Uint32Array(a+1);for(let a=0;a<t;a++)r[e[a].prefixLength]++;let i,n,s,o=1,c=0;\ -r[0]=0;for(;o<=a;){c=c+r[o-1]<<1;i=c;n=0;for(;n<t;){s=e[n];if(s.prefixLength===o){s.prefixCode=i;i++}n++}o++}}}const pr={};function getStandardTable(e){let t,a=pr[e];if(a)return a;switch(e){case 1:t=[[0,1,4,0],[16,2,8,2],[272,3,16,6],[65808,3,32,7]];break;case 2:t=[[0,1,0,0],[1,2,0,2],[2,3,0,6],[3,4,3,14],[11,5,6,30],[75,6,32,62],[6,63]];break;case 3:t=[[-256,8,8,254],[0,1,0,0],[1,2,0,2],[2,3,0,6],[3,4,3,14],[11,5,6,30],[-257,8,32,255,"lower"],[75,7,32,126],[6,62]];break;case 4:t=[[1,1,0,0],[2,2\ -,0,2],[3,3,0,6],[4,4,3,14],[12,5,6,30],[76,5,32,31]];break;case 5:t=[[-255,7,8,126],[1,1,0,0],[2,2,0,2],[3,3,0,6],[4,4,3,14],[12,5,6,30],[-256,7,32,127,"lower"],[76,6,32,62]];break;case 6:t=[[-2048,5,10,28],[-1024,4,9,8],[-512,4,8,9],[-256,4,7,10],[-128,5,6,29],[-64,5,5,30],[-32,4,5,11],[0,2,7,0],[128,3,7,2],[256,3,8,3],[512,4,9,12],[1024,4,10,13],[-2049,6,32,62,"lower"],[2048,6,32,63]];break;case 7:t=[[-1024,4,9,8],[-512,3,8,0],[-256,4,7,9],[-128,5,6,26],[-64,5,5,27],[-32,4,5,10],[0,4,5,11],[32\ -,5,5,28],[64,5,6,29],[128,4,7,12],[256,3,8,1],[512,3,9,2],[1024,3,10,3],[-1025,5,32,30,"lower"],[2048,5,32,31]];break;case 8:t=[[-15,8,3,252],[-7,9,1,508],[-5,8,1,253],[-3,9,0,509],[-2,7,0,124],[-1,4,0,10],[0,2,1,0],[2,5,0,26],[3,6,0,58],[4,3,4,4],[20,6,1,59],[22,4,4,11],[38,4,5,12],[70,5,6,27],[134,5,7,28],[262,6,7,60],[390,7,8,125],[646,6,10,61],[-16,9,32,510,"lower"],[1670,9,32,511],[2,1]];break;case 9:t=[[-31,8,4,252],[-15,9,2,508],[-11,8,2,253],[-7,9,1,509],[-5,7,1,124],[-3,4,1,10],[-1,3,1,\ -2],[1,3,1,3],[3,5,1,26],[5,6,1,58],[7,3,5,4],[39,6,2,59],[43,4,5,11],[75,4,6,12],[139,5,7,27],[267,5,8,28],[523,6,8,60],[779,7,9,125],[1291,6,11,61],[-32,9,32,510,"lower"],[3339,9,32,511],[2,0]];break;case 10:t=[[-21,7,4,122],[-5,8,0,252],[-4,7,0,123],[-3,5,0,24],[-2,2,2,0],[2,5,0,25],[3,6,0,54],[4,7,0,124],[5,8,0,253],[6,2,6,1],[70,5,5,26],[102,6,5,55],[134,6,6,56],[198,6,7,57],[326,6,8,58],[582,6,9,59],[1094,6,10,60],[2118,7,11,125],[-22,8,32,254,"lower"],[4166,8,32,255],[2,2]];break;case 11:t\ -=[[1,1,0,0],[2,2,1,2],[4,4,0,12],[5,4,1,13],[7,5,1,28],[9,5,2,29],[13,6,2,60],[17,7,2,122],[21,7,3,123],[29,7,4,124],[45,7,5,125],[77,7,6,126],[141,7,32,127]];break;case 12:t=[[1,1,0,0],[2,2,0,2],[3,3,1,6],[5,5,0,28],[6,5,1,29],[8,6,1,60],[10,7,0,122],[11,7,1,123],[13,7,2,124],[17,7,3,125],[25,7,4,126],[41,8,5,254],[73,8,32,255]];break;case 13:t=[[1,1,0,0],[2,3,0,4],[3,4,0,12],[4,5,0,28],[5,4,1,13],[7,3,3,5],[15,6,1,58],[17,6,2,59],[21,6,3,60],[29,6,4,61],[45,6,5,62],[77,7,6,126],[141,7,32,127]]\ -;break;case 14:t=[[-2,3,0,4],[-1,3,0,5],[0,1,0,0],[1,3,0,6],[2,3,0,7]];break;case 15:t=[[-24,7,4,124],[-8,6,2,60],[-4,5,1,28],[-2,4,0,12],[-1,3,0,4],[0,1,0,0],[1,3,0,5],[2,4,0,13],[3,5,1,29],[5,6,2,61],[9,7,4,125],[-25,7,32,126,"lower"],[25,7,32,127]];break;default:throw new Jbig2Error(`standard table B.${e} does not exist`)}for(let e=0,a=t.length;e<a;e++)t[e]=new HuffmanLine(t[e]);a=new HuffmanTable(t,!0);pr[e]=a;return a}class Reader{constructor(e,t,a){this.data=e;this.start=t;this.end=a;this.\ -position=t;this.shift=-1;this.currentByte=0}readBit(){if(this.shift<0){if(this.position>=this.end)throw new Jbig2Error("end of data while reading bit");this.currentByte=this.data[this.position++];this.shift=7}const e=this.currentByte>>this.shift&1;this.shift--;return e}readBits(e){let t,a=0;for(t=e-1;t>=0;t--)a|=this.readBit()<<t;return a}byteAlign(){this.shift=-1}next(){return this.position>=this.end?-1:this.data[this.position++]}}function getCustomHuffmanTable(e,t,a){let r=0;for(let i=0,n=t.le\ -ngth;i<n;i++){const n=a[t[i]];if(n){if(e===r)return n;r++}}throw new Jbig2Error("can\'t find custom Huffman table")}function readUncompressedBitmap(e,t,a){const r=[];for(let i=0;i<a;i++){const a=new Uint8Array(t);r.push(a);for(let r=0;r<t;r++)a[r]=e.readBit();e.byteAlign()}return r}function decodeMMRBitmap(e,t,a,r){const i=new CCITTFaxDecoder(e,{K:-1,Columns:t,Rows:a,BlackIs1:!0,EndOfBlock:r}),n=[];let s,o=!1;for(let e=0;e<a;e++){const e=new Uint8Array(t);n.push(e);let a=-1;for(let r=0;r<t;r++){i\ -f(a<0){s=i.readNextChar();if(-1===s){s=0;o=!0}a=7}e[r]=s>>a&1;a--}}if(r&&!o){const e=5;for(let t=0;t<e&&-1!==i.readNextChar();t++);}return n}class Jbig2Image{parseChunks(e){return function parseJbig2Chunks(e){const t=new SimpleSegmentVisitor;for(let a=0,r=e.length;a<r;a++){const r=e[a];processSegments(readSegments({},r.data,r.start,r.end),t)}return t.buffer}(e)}parse(e){throw new Error("Not implemented: Jbig2Image.parse")}}class Jbig2Stream extends DecodeStream{constructor(e,t,a){super(t);this.s\ -tream=e;this.dict=e.dict;this.maybeLength=t;this.params=a}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(){this.decodeImage()}decodeImage(e){if(this.eof)return this.buffer;e||=this.bytes;const t=new Jbig2Image,a=[];if(this.params instanceof Dict){const e=this.params.get("JBIG2Globals");if(e instanceof BaseStream){const t=e.getBytes();a.push({data:t,start:0,end:t.length})}}a.push({data:e,start:0,end:e.length});const r=t.parseChunks(a),i=r\ -.length;for(let e=0;e<i;e++)r[e]^=255;this.buffer=r;this.bufferLength=i;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}}class JpxStream extends DecodeStream{constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.maybeLength=t;this.params=a}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(e){unreachable("JpxStream.readBlock")}get isAsyncDecoder(){return!0}async decodeImage(e,t){if(this\ -.eof)return this.buffer;e||=this.bytes;this.buffer=await JpxImage.decode(e,t);this.bufferLength=this.buffer.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}}class LZWStream extends DecodeStream{constructor(e,t,a){super(t);this.str=e;this.dict=e.dict;this.cachedData=0;this.bitsCached=0;const r=4096,i={earlyChange:a,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(r),dictionaryLengths:new Uint16Array(r),dictionaryPrevCodes:new Uint16Arr\ -ay(r),currentSequence:new Uint8Array(r),currentSequenceLength:0};for(let e=0;e<256;++e){i.dictionaryValues[e]=e;i.dictionaryLengths[e]=1}this.lzwState=i}readBits(e){let t=this.bitsCached,a=this.cachedData;for(;t<e;){const e=this.str.getByte();if(-1===e){this.eof=!0;return null}a=a<<8|e;t+=8}this.bitsCached=t-=e;this.cachedData=a;this.lastCode=null;return a>>>t&(1<<e)-1}readBlock(){let e,t,a,r=1024;const i=this.lzwState;if(!i)return;const n=i.earlyChange;let s=i.nextCode;const o=i.dictionaryValue\ -s,c=i.dictionaryLengths,l=i.dictionaryPrevCodes;let h=i.codeLength,u=i.prevCode;const d=i.currentSequence;let f=i.currentSequenceLength,g=0,p=this.bufferLength,m=this.ensureBuffer(this.bufferLength+r);for(e=0;e<512;e++){const e=this.readBits(h),i=f>0;if(e<256){d[0]=e;f=1}else{if(!(e>=258)){if(256===e){h=9;s=258;f=0;continue}this.eof=!0;delete this.lzwState;break}if(e<s){f=c[e];for(t=f-1,a=e;t>=0;t--){d[t]=o[a];a=l[a]}}else d[f++]=d[0]}if(i){l[s]=u;c[s]=c[u]+1;o[s]=d[0];s++;h=s+n&s+n-1?h:0|Math.m\ -in(Math.log(s+n)/.6931471805599453+1,12)}u=e;g+=f;if(r<g){do{r+=512}while(r<g);m=this.ensureBuffer(this.bufferLength+r)}for(t=0;t<f;t++)m[p++]=d[t]}i.nextCode=s;i.codeLength=h;i.prevCode=u;i.currentSequenceLength=f;this.bufferLength=p}}class PredictorStream extends DecodeStream{constructor(e,t,a){super(t);if(!(a instanceof Dict))return e;const r=this.predictor=a.get("Predictor")||1;if(r<=1)return e;if(2!==r&&(r<10||r>15))throw new FormatError(`Unsupported predictor: ${r}`);this.readBlock=2===r?t\ -his.readBlockTiff:this.readBlockPng;this.str=e;this.dict=e.dict;const i=this.colors=a.get("Colors")||1,n=this.bits=a.get("BPC","BitsPerComponent")||8,s=this.columns=a.get("Columns")||1;this.pixBytes=i*n+7>>3;this.rowBytes=s*i*n+7>>3;return this}readBlockTiff(){const e=this.rowBytes,t=this.bufferLength,a=this.ensureBuffer(t+e),r=this.bits,i=this.colors,n=this.str.getBytes(e);this.eof=!n.length;if(this.eof)return;let s,o=0,c=0,l=0,h=0,u=t;if(1===r&&1===i)for(s=0;s<e;++s){let e=n[s]^o;e^=e>>1;e^=e>\ ->2;e^=e>>4;o=(1&e)<<7;a[u++]=e}else if(8===r){for(s=0;s<i;++s)a[u++]=n[s];for(;s<e;++s){a[u]=a[u-i]+n[s];u++}}else if(16===r){const t=2*i;for(s=0;s<t;++s)a[u++]=n[s];for(;s<e;s+=2){const e=((255&n[s])<<8)+(255&n[s+1])+((255&a[u-t])<<8)+(255&a[u-t+1]);a[u++]=e>>8&255;a[u++]=255&e}}else{const e=new Uint8Array(i+1),u=(1<<r)-1;let d=0,f=t;const g=this.columns;for(s=0;s<g;++s)for(let t=0;t<i;++t){if(l<r){o=o<<8|255&n[d++];l+=8}e[t]=e[t]+(o>>l-r)&u;l-=r;c=c<<r|e[t];h+=r;if(h>=8){a[f++]=c>>h-8&255;h-=8\ -}}h>0&&(a[f++]=(c<<8-h)+(o&(1<<8-h)-1))}this.bufferLength+=e}readBlockPng(){const e=this.rowBytes,t=this.pixBytes,a=this.str.getByte(),r=this.str.getBytes(e);this.eof=!r.length;if(this.eof)return;const i=this.bufferLength,n=this.ensureBuffer(i+e);let s=n.subarray(i-e,i);0===s.length&&(s=new Uint8Array(e));let o,c,l,h=i;switch(a){case 0:for(o=0;o<e;++o)n[h++]=r[o];break;case 1:for(o=0;o<t;++o)n[h++]=r[o];for(;o<e;++o){n[h]=n[h-t]+r[o]&255;h++}break;case 2:for(o=0;o<e;++o)n[h++]=s[o]+r[o]&255;brea\ -k;case 3:for(o=0;o<t;++o)n[h++]=(s[o]>>1)+r[o];for(;o<e;++o){n[h]=(s[o]+n[h-t]>>1)+r[o]&255;h++}break;case 4:for(o=0;o<t;++o){c=s[o];l=r[o];n[h++]=c+l}for(;o<e;++o){c=s[o];const e=s[o-t],a=n[h-t],i=a+c-e;let u=i-a;u<0&&(u=-u);let d=i-c;d<0&&(d=-d);let f=i-e;f<0&&(f=-f);l=r[o];n[h++]=u<=d&&u<=f?a+l:d<=f?c+l:e+l}break;default:throw new FormatError(`Unsupported predictor: ${a}`)}this.bufferLength+=e}}class RunLengthStream extends DecodeStream{constructor(e,t){super(t);this.str=e;this.dict=e.dict}re\ -adBlock(){const e=this.str.getBytes(2);if(!e||e.length<2||128===e[0]){this.eof=!0;return}let t,a=this.bufferLength,r=e[0];if(r<128){t=this.ensureBuffer(a+r+1);t[a++]=e[1];if(r>0){const e=this.str.getBytes(r);t.set(e,a);a+=r}}else{r=257-r;t=this.ensureBuffer(a+r+1);t.fill(e[1],a,a+r);a+=r}this.bufferLength=a}}class Parser{constructor({lexer:e,xref:t,allowStreams:a=!1,recoveryMode:r=!1}){this.lexer=e;this.xref=t;this.allowStreams=a;this.recoveryMode=r;this.imageCache=Object.create(null);this._imag\ -eId=0;this.refill()}refill(){this.buf1=this.lexer.getObj();this.buf2=this.lexer.getObj()}shift(){if(this.buf2 instanceof Cmd&&"ID"===this.buf2.cmd){this.buf1=this.buf2;this.buf2=null}else{this.buf1=this.buf2;this.buf2=this.lexer.getObj()}}tryShift(){try{this.shift();return!0}catch(e){if(e instanceof MissingDataException)throw e;return!1}}getObj(e=null){const t=this.buf1;this.shift();if(t instanceof Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":const a=[];for(;!isCmd(this.buf1\ -,"]")&&this.buf1!==wa;)a.push(this.getObj(e));if(this.buf1===wa){if(this.recoveryMode)return a;throw new ParserEOFException("End of file inside array.")}this.shift();return a;case"<<":const r=new Dict(this.xref);for(;!isCmd(this.buf1,">>")&&this.buf1!==wa;){if(!(this.buf1 instanceof Name)){info("Malformed dictionary: key must be a name object");this.shift();continue}const t=this.buf1.name;this.shift();if(this.buf1===wa)break;r.set(t,this.getObj(e))}if(this.buf1===wa){if(this.recoveryMode)return \ -r;throw new ParserEOFException("End of file inside dictionary.")}if(isCmd(this.buf2,"stream"))return this.allowStreams?this.makeStream(r,e):r;this.shift();return r;default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&isCmd(this.buf2,"R")){const e=Ref.get(t,this.buf1);this.shift();this.shift();return e}return t}return"string"==typeof t&&e?e.decryptString(t):t}findDefaultInlineStreamEnd(e){const{knownCommands:t}=this.lexer,a=e.pos;let r,i,n=0;for(;-1!==(r=e.getByte());)if(0===n\ -)n=69===r?1:0;else if(1===n)n=73===r?2:0;else if(32===r||10===r||13===r){i=e.pos;const a=e.peekBytes(15),s=a.length;if(0===s)break;for(let e=0;e<s;e++){r=a[e];if((0!==r||0===a[e+1])&&(10!==r&&13!==r&&(r<32||r>127))){n=0;break}}if(2!==n)continue;if(!t){warn("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}const o=new Lexer(new Stream(e.peekBytes(75)),t);o._hexStringWarn=()=>{};let c=0;for(;;){const e=o.getObj();if(e===wa){n=0;break}if(e instanceof Cmd){const a=t[e.cmd]\ -;if(!a){n=0;break}if(a.variableArgs?c<=a.numArgs:c===a.numArgs)break;c=0}else c++}if(2===n)break}else n=0;if(-1===r){warn("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker");if(i){warn(\'... trying to recover by using the last "EI" occurrence.\');e.skip(-(e.pos-i))}}let s=4;e.skip(-s);r=e.peekByte();e.skip(s);isWhiteSpace(r)||s--;return e.pos-s-a}findDCTDecodeInlineStreamEnd(e){const t=e.pos;let a,r,i=!1;for(;-1!==(a=e.getByte());)if(255===a){switch(e.get\ -Byte()){case 0:break;case 255:e.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:r=e.getUint16();r>2?e.skip(r-2):e.skip(-2)}if(i)break}const n=e.pos-t;if(-1===a){warn("Inli\ -ne DCTDecode image stream: EOI marker not found, searching for /EI/ instead.");e.skip(-n);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return n}findASCII85DecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte());)if(126===a){const t=e.pos;a=e.peekByte();for(;isWhiteSpace(a);){e.skip();a=e.peekByte()}if(62===a){e.skip();break}if(e.pos>t){const t=e.peekBytes(2);if(69===t[0]&&73===t[1])break}}const r=e.pos-t;if(-1===a){warn("Inline ASCII85Decode image stream: E\ -OD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}findASCIIHexDecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte())&&62!==a;);const r=e.pos-t;if(-1===a){warn("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}inlineStreamSkipEI(e){let t,a=0;for(;-1!==(t=e.getByte())\ -;)if(0===a)a=69===t?1:0;else if(1===a)a=73===t?2:0;else if(2===a)break}makeInlineImage(e){const t=this.lexer,a=t.stream,r=Object.create(null);let i;for(;!isCmd(this.buf1,"ID")&&this.buf1!==wa;){if(!(this.buf1 instanceof Name))throw new FormatError("Dictionary key must be a name object");const t=this.buf1.name;this.shift();if(this.buf1===wa)break;r[t]=this.getObj(e)}-1!==t.beginInlineImagePos&&(i=a.pos-t.beginInlineImagePos);const n=this.xref.fetchIfRef(r.F||r.Filter);let s;if(n instanceof Name)s\ -=n.name;else if(Array.isArray(n)){const e=this.xref.fetchIfRef(n[0]);e instanceof Name&&(s=e.name)}const o=a.pos;let c,l;switch(s){case"DCT":case"DCTDecode":c=this.findDCTDecodeInlineStreamEnd(a);break;case"A85":case"ASCII85Decode":c=this.findASCII85DecodeInlineStreamEnd(a);break;case"AHx":case"ASCIIHexDecode":c=this.findASCIIHexDecodeInlineStreamEnd(a);break;default:c=this.findDefaultInlineStreamEnd(a)}if(c<1e3&&i>0){const e=a.pos;a.pos=t.beginInlineImagePos;l=function getInlineImageCacheKey(e)\ -{const t=[],a=e.length;let r=0;for(;r<a-1;)t.push(e[r++]<<8|e[r++]);r<a&&t.push(e[r]);return a+"_"+String.fromCharCode.apply(null,t)}(a.getBytes(i+c));a.pos=e;const r=this.imageCache[l];if(void 0!==r){this.buf2=Cmd.get("EI");this.shift();r.reset();return r}}const h=new Dict(this.xref);for(const e in r)h.set(e,r[e]);let u=a.makeSubStream(o,c,h);e&&(u=e.createStream(u,c));u=this.filter(u,h,c);u.dict=h;if(void 0!==l){u.cacheKey="inline_img_"+ ++this._imageId;this.imageCache[l]=u}this.buf2=Cmd.get("\ -EI");this.shift();return u}#q(e){const{stream:t}=this.lexer;t.pos=e;const a=new Uint8Array([101,110,100]),r=a.length,i=[new Uint8Array([115,116,114,101,97,109]),new Uint8Array([115,116,101,97,109]),new Uint8Array([115,116,114,101,97])],n=9-r;for(;t.pos<t.end;){const s=t.peekBytes(2048),o=s.length-9;if(o<=0)break;let c=0;for(;c<o;){let o=0;for(;o<r&&s[c+o]===a[o];)o++;if(o>=r){let r=!1;for(const e of i){const t=e.length;let i=0;for(;i<t&&s[c+o+i]===e[i];)i++;if(i>=n){r=!0;break}if(i>=t){if(isWhit\ -eSpace(s[c+o+i])){info(`Found "${bytesToString([...a,...e])}" when searching for endstream command.`);r=!0}break}}if(r){t.pos+=c;return t.pos-e}}c++}t.pos+=o}return-1}makeStream(e,t){const a=this.lexer;let r=a.stream;a.skipToNextLine();const i=r.pos-1;let n=e.get("Length");if(!Number.isInteger(n)){info(`Bad length "${n&&n.toString()}" in stream.`);n=0}r.pos=i+n;a.nextChar();if(this.tryShift()&&isCmd(this.buf2,"endstream"))this.shift();else{n=this.#q(i);if(n<0)throw new FormatError("Missing endst\ -ream command.");a.nextChar();this.shift();this.shift()}this.shift();r=r.makeSubStream(i,n,e);t&&(r=t.createStream(r,n));r=this.filter(r,e,n);r.dict=e;return r}filter(e,t,a){let r=t.get("F","Filter"),i=t.get("DP","DecodeParms");if(r instanceof Name){Array.isArray(i)&&warn("/DecodeParms should not be an Array, when /Filter is a Name.");return this.makeFilter(e,r.name,a,i)}let n=a;if(Array.isArray(r)){const t=r,a=i;for(let s=0,o=t.length;s<o;++s){r=this.xref.fetchIfRef(t[s]);if(!(r instanceof Name)\ -)throw new FormatError(`Bad filter name "${r}"`);i=null;Array.isArray(a)&&s in a&&(i=this.xref.fetchIfRef(a[s]));e=this.makeFilter(e,r.name,n,i);n=null}}return e}makeFilter(e,t,a,r){if(0===a){warn(`Empty "${t}" stream.`);return new NullStream}try{switch(t){case"Fl":case"FlateDecode":return r?new PredictorStream(new FlateStream(e,a),a,r):new FlateStream(e,a);case"LZW":case"LZWDecode":let t=1;if(r){r.has("EarlyChange")&&(t=r.get("EarlyChange"));return new PredictorStream(new LZWStream(e,a,t),a,r)}\ -return new LZWStream(e,a,t);case"DCT":case"DCTDecode":return new JpegStream(e,a,r);case"JPX":case"JPXDecode":return new JpxStream(e,a,r);case"A85":case"ASCII85Decode":return new Ascii85Stream(e,a);case"AHx":case"ASCIIHexDecode":return new AsciiHexStream(e,a);case"CCF":case"CCITTFaxDecode":return new CCITTFaxStream(e,a,r);case"RL":case"RunLengthDecode":return new RunLengthStream(e,a);case"JBIG2Decode":return new Jbig2Stream(e,a,r)}warn(`Filter "${t}" is not supported.`);return e}catch(e){if(e ins\ -tanceof MissingDataException)throw e;warn(`Invalid stream: "${e}"`);return new NullStream}}}const mr=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\ -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function toHexDigit(e){return e>=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}class Lexer{constructor(e,t=null){this.stream=e;this.nextChar();this.strBuf=[];this.knownCommands=t;this._hexStringNumWarn=0;this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let e=this.currentChar,t=!1,a=0,r=\ -1;if(45===e){r=-1;e=this.nextChar();45===e&&(e=this.nextChar())}else 43===e&&(e=this.nextChar());if(10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e){a=10;e=this.nextChar()}if(e<48||e>57){const t=`Invalid number: ${String.fromCharCode(e)} (charCode ${e})`;if(isWhiteSpace(e)||40===e||60===e||-1===e){info(`Lexer.getNumber - "${t}".`);return 0}throw new FormatError(t)}let i=e-48,n=0,s=1;for(;(e=this.nextChar())>=0;)if(e>=48&&e<=57){const r=e-48;if(t)n=10*n+r;else{0!==a&&(a*=10);i\ -=10*i+r}}else if(46===e){if(0!==a)break;a=1}else if(45===e)warn("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;e=this.peekChar();if(43===e||45===e){s=45===e?-1:1;this.nextChar()}else if(e<48||e>57)break;t=!0}0!==a&&(i/=a);t&&(i*=10**(s*n));return r*i}getString(){let e=1,t=!1;const a=this.strBuf;a.length=0;let r=this.nextChar();for(;;){let i=!1;switch(0|r){case-1:warn("Unterminated string");t=!0;break;case 40:++e;a.push("(");break;case 41:if(0==--e){this.nextCha\ -r();t=!0}else a.push(")");break;case 92:r=this.nextChar();switch(r){case-1:warn("Unterminated string");t=!0;break;case 110:a.push("\\n");break;case 114:a.push("\\r");break;case 116:a.push("\\t");break;case 98:a.push("\\b");break;case 102:a.push("\\f");break;case 92:case 40:case 41:a.push(String.fromCharCode(r));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let e=15&r;r=this.nextChar();i=!0;if(r>=48&&r<=55){e=(e<<3)+(15&r);r=this.nextChar();if(r>=48&&r<=55){i=!1;e=(e<<3)+(15&r)\ -}}a.push(String.fromCharCode(e));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:a.push(String.fromCharCode(r))}break;default:a.push(String.fromCharCode(r))}if(t)break;i||(r=this.nextChar())}return a.join("")}getName(){let e,t;const a=this.strBuf;a.length=0;for(;(e=this.nextChar())>=0&&!mr[e];)if(35===e){e=this.nextChar();if(mr[e]){warn("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.");a.push("#");break}const r=toHexDigit(e);if(-1!==r){\ -t=e;e=this.nextChar();const i=toHexDigit(e);if(-1===i){warn(`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) in hexadecimal number.`);a.push("#",String.fromCharCode(t));if(mr[e])break;a.push(String.fromCharCode(e));continue}a.push(String.fromCharCode(r<<4|i))}else a.push("#",String.fromCharCode(e))}else a.push(String.fromCharCode(e));a.length>127&&warn(`Name token is longer than allowed by the spec: ${a.length}`);return Name.get(a.join(""))}_hexStringWarn(e){5!=this._hexStringNumWarn++?\ -this._hexStringNumWarn>5||warn(`getHexString - ignoring invalid character: ${e}`):warn("getHexString - ignoring additional invalid characters.")}getHexString(){const e=this.strBuf;e.length=0;let t=this.currentChar,a=-1,r=-1;this._hexStringNumWarn=0;for(;;){if(t<0){warn("Unterminated hex string");break}if(62===t){this.nextChar();break}if(1!==mr[t]){r=toHexDigit(t);if(-1===r)this._hexStringWarn(t);else if(-1===a)a=r;else{e.push(String.fromCharCode(a<<4|r));a=-1}t=this.nextChar()}else t=this.nextCh\ -ar()}-1!==a&&e.push(String.fromCharCode(a<<4));return e.join("")}getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return wa;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==mr[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:this.nextChar();return Cmd.get("[");case 93:this.nextChar();return Cmd.ge\ -t("]");case 60:t=this.nextChar();if(60===t){this.nextChar();return Cmd.get("<<")}return this.getHexString();case 62:t=this.nextChar();if(62===t){this.nextChar();return Cmd.get(">>")}return Cmd.get(">");case 123:this.nextChar();return Cmd.get("{");case 125:this.nextChar();return Cmd.get("}");case 41:this.nextChar();throw new FormatError(`Illegal character: ${t}`)}let a=String.fromCharCode(t);if(t<32||t>127){const e=this.peekChar();if(e>=32&&e<=127){this.nextChar();return Cmd.get(a)}}const r=this.\ -knownCommands;let i=void 0!==r?.[a];for(;(t=this.nextChar())>=0&&!mr[t];){const e=a+String.fromCharCode(t);if(i&&void 0===r[e])break;if(128===a.length)throw new FormatError(`Command token too long: ${a.length}`);a=e;i=void 0!==r?.[a]}if("true"===a)return!0;if("false"===a)return!1;if("null"===a)return null;"BI"===a&&(this.beginInlineImagePos=this.stream.pos);return Cmd.get(a)}skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.nextChar();10===e&&this.nextChar();break}if(10===e){\ -this.nextChar();break}e=this.nextChar()}}}class Linearization{static create(e){function getInt(e,t,a=!1){const r=e.get(t);if(Number.isInteger(r)&&(a?r>=0:r>0))return r;throw new Error(`The "${t}" parameter in the linearization dictionary is invalid.`)}const t=new Parser({lexer:new Lexer(e),xref:null}),a=t.getObj(),r=t.getObj(),i=t.getObj(),n=t.getObj();let s,o;if(!(Number.isInteger(a)&&Number.isInteger(r)&&isCmd(i,"obj")&&n instanceof Dict&&"number"==typeof(s=n.get("Linearized"))&&s>0))return nu\ -ll;if((o=getInt(n,"L"))!==e.length)throw new Error(\'The "L" parameter in the linearization dictionary does not equal the stream length.\');return{length:o,hints:function getHints(e){const t=e.get("H");let a;if(Array.isArray(t)&&(2===(a=t.length)||4===a)){for(let e=0;e<a;e++){const a=t[e];if(!(Number.isInteger(a)&&a>0))throw new Error(`Hint (${e}) in the linearization dictionary is invalid.`)}return t}throw new Error("Hint array in the linearization dictionary is invalid.")}(n),objectNumberFirst:g\ -etInt(n,"O"),endFirst:getInt(n,"E"),numPages:getInt(n,"N"),mainXRefEntriesOffset:getInt(n,"T"),pageFirst:n.has("P")?getInt(n,"P",!0):0}}}const br=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Ad\ -obe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-\ -H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-U\ -HC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJ\ -IS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],yr=2**24-1;class C\ -Map{constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.numCodespaceRanges=0;this._map=[];this.name="";this.vertical=!1;this.useCMap=null;this.builtInCMap=e}addCodespaceRange(e,t,a){this.codespaceRanges[e-1].push(t,a);this.numCodespaceRanges++}mapCidRange(e,t,a){if(t-e>yr)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=a++}mapBfRange(e,t,a){if(t-e>yr)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");const r=a.length-1;for(;e<=t\ -;){this._map[e++]=a;const t=a.charCodeAt(r)+1;t>255?a=a.substring(0,r-1)+String.fromCharCode(a.charCodeAt(r-1)+1)+"\\0":a=a.substring(0,r)+String.fromCharCode(t)}}mapBfRangeToArray(e,t,a){if(t-e>yr)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");const r=a.length;let i=0;for(;e<=t&&i<r;){this._map[e]=a[i++];++e}}mapOne(e,t){this._map[e]=t}lookup(e){return this._map[e]}contains(e){return void 0!==this._map[e]}forEach(e){const t=this._map,a=t.length;if(a<=65536)for(let r=0;\ -r<a;r++)void 0!==t[r]&&e(r,t[r]);else for(const a in t)e(a,t[a])}charCodeOf(e){const t=this._map;if(t.length<=65536)return t.indexOf(e);for(const a in t)if(t[a]===e)return 0|a;return-1}getMap(){return this._map}readCharCode(e,t,a){let r=0;const i=this.codespaceRanges;for(let n=0,s=i.length;n<s;n++){r=(r<<8|e.charCodeAt(t+n))>>>0;const s=i[n];for(let e=0,t=s.length;e<t;){const t=s[e++],i=s[e++];if(r>=t&&r<=i){a.charcode=r;a.length=n+1;return}}}a.charcode=0;a.length=1}getCharCodeLength(e){const t=\ -this.codespaceRanges;for(let a=0,r=t.length;a<r;a++){const r=t[a];for(let t=0,i=r.length;t<i;){const i=r[t++],n=r[t++];if(e>=i&&e<=n)return a+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(let e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}class IdentityCMap extends CMap{constructor(e,t){super();this.vertical=e;this.addCodespaceRange(t,0,65535)}mapCidRange(e,t,a)\ -{unreachable("should not call mapCidRange")}mapBfRange(e,t,a){unreachable("should not call mapBfRange")}mapBfRangeToArray(e,t,a){unreachable("should not call mapBfRangeToArray")}mapOne(e,t){unreachable("should not call mapCidOne")}lookup(e){return Number.isInteger(e)&&e<=65535?e:void 0}contains(e){return Number.isInteger(e)&&e<=65535}forEach(e){for(let t=0;t<=65535;t++)e(t,t)}charCodeOf(e){return Number.isInteger(e)&&e<=65535?e:-1}getMap(){const e=new Array(65536);for(let t=0;t<=65535;t++)e[t]=t\ -;return e}get length(){return 65536}get isIdentityCMap(){unreachable("should not access .isIdentityCMap")}}function strToInt(e){let t=0;for(let a=0;a<e.length;a++)t=t<<8|e.charCodeAt(a);return t>>>0}function expectString(e){if("string"!=typeof e)throw new FormatError("Malformed CMap: expected string.")}function expectInt(e){if(!Number.isInteger(e))throw new FormatError("Malformed CMap: expected int.")}function parseBfChar(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endbfchar"))retu\ -rn;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=a;e.mapOne(r,i)}}function parseBfRange(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endbfrange"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=strToInt(a);a=t.getObj();if(Number.isInteger(a)||"string"==typeof a){const t=Number.isInteger(a)?String.fromCharCode(a):a;e.mapBfRange(r,i,t)}else{if(!isCmd(a,"["))break;{a=t.getObj();const n=[];for(;!isCmd(a,"]")&&a!==wa;){n.push(a);\ -a=t.getObj()}e.mapBfRangeToArray(r,i,n)}}}throw new FormatError("Invalid bf range.")}function parseCidChar(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endcidchar"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectInt(a);const i=a;e.mapOne(r,i)}}function parseCidRange(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endcidrange"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=strToInt(a);a=t.getObj();expectInt(a);const n=a;e.map\ -CidRange(r,i,n)}}function parseCodespaceRange(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endcodespacerange"))return;if("string"!=typeof a)break;const r=strToInt(a);a=t.getObj();if("string"!=typeof a)break;const i=strToInt(a);e.addCodespaceRange(a.length,r,i)}throw new FormatError("Invalid codespace range.")}function parseWMode(e,t){const a=t.getObj();Number.isInteger(a)&&(e.vertical=!!a)}function parseCMapName(e,t){const a=t.getObj();a instanceof Name&&(e.name=a.name)}async functi\ -on parseCMap(e,t,a,r){let i,n;e:for(;;)try{const a=t.getObj();if(a===wa)break;if(a instanceof Name){"WMode"===a.name?parseWMode(e,t):"CMapName"===a.name&&parseCMapName(e,t);i=a}else if(a instanceof Cmd)switch(a.cmd){case"endcmap":break e;case"usecmap":i instanceof Name&&(n=i.name);break;case"begincodespacerange":parseCodespaceRange(e,t);break;case"beginbfchar":parseBfChar(e,t);break;case"begincidchar":parseCidChar(e,t);break;case"beginbfrange":parseBfRange(e,t);break;case"begincidrange":parseCid\ -Range(e,t)}}catch(e){if(e instanceof MissingDataException)throw e;warn("Invalid cMap data: "+e);continue}!r&&n&&(r=n);return r?extendCMap(e,a,r):e}async function extendCMap(e,t,a){e.useCMap=await createBuiltInCMap(a,t);if(0===e.numCodespaceRanges){const t=e.useCMap.codespaceRanges;for(let a=0;a<t.length;a++)e.codespaceRanges[a]=t[a].slice();e.numCodespaceRanges=e.useCMap.numCodespaceRanges}e.useCMap.forEach((function(t,a){e.contains(t)||e.mapOne(t,a)}));return e}async function createBuiltInCMap(\ -e,t){if("Identity-H"===e)return new IdentityCMap(!1,2);if("Identity-V"===e)return new IdentityCMap(!0,2);if(!br.includes(e))throw new Error("Unknown CMap name: "+e);if(!t)throw new Error("Built-in CMap parameters are not provided.");const{cMapData:a,isCompressed:r}=await t(e),i=new CMap(!0);if(r)return(new BinaryCMapReader).process(a,i,(e=>extendCMap(i,t,e)));const n=new Lexer(new Stream(a));return parseCMap(i,n,t,null)}class CMapFactory{static async create({encoding:e,fetchBuiltInCMap:t,useCMap\ -:a}){if(e instanceof Name)return createBuiltInCMap(e.name,t);if(e instanceof BaseStream){const r=await parseCMap(new CMap,new Lexer(e),t,a);return r.isIdentityCMap?createBuiltInCMap(r.name,t):r}throw new Error("Encoding required.")}}const wr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenle\ -ader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl\ -","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamd\ -ownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","seven\ -superior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall"\ -,"Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],xr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","\ -twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","\ -parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasma\ -ll","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","comm\ -ainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior\ -","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],Sr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","z\ -ero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","grave","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","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute",\ -"Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","grea\ -terequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcent\ -ered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],Ar=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","am\ -persand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","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","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","qu\ -estiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],kr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","\ -numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","grave","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","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","y\ -en","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Nt\ -ilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],Cr=["","","","","","",\ -"","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi\ -","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon\ -1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset",\ -"propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","anglerig\ -ht","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""],vr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10\ -","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","\ -","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175",\ -"a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];function getEncoding(e){switch(e){case"WinAnsiEncoding":return kr;case"StandardEncoding":return Ar;case"MacRomanEncoding":return Sr;case"SymbolSetEncoding":return Cr;case"ZapfDingbatsEncoding":return vr;case"ExpertEncoding":return wr;case"MacExpertEncoding":return xr;default:return null}}const Fr=getLookupTableFactory((func\ -tion(e){e.A=65;e.AE=198;e.AEacute=508;e.AEmacron=482;e.AEsmall=63462;e.Aacute=193;e.Aacutesmall=63457;e.Abreve=258;e.Abreveacute=7854;e.Abrevecyrillic=1232;e.Abrevedotbelow=7862;e.Abrevegrave=7856;e.Abrevehookabove=7858;e.Abrevetilde=7860;e.Acaron=461;e.Acircle=9398;e.Acircumflex=194;e.Acircumflexacute=7844;e.Acircumflexdotbelow=7852;e.Acircumflexgrave=7846;e.Acircumflexhookabove=7848;e.Acircumflexsmall=63458;e.Acircumflextilde=7850;e.Acute=63177;e.Acutesmall=63412;e.Acyrillic=1040;e.Adblgrave=5\ -12;e.Adieresis=196;e.Adieresiscyrillic=1234;e.Adieresismacron=478;e.Adieresissmall=63460;e.Adotbelow=7840;e.Adotmacron=480;e.Agrave=192;e.Agravesmall=63456;e.Ahookabove=7842;e.Aiecyrillic=1236;e.Ainvertedbreve=514;e.Alpha=913;e.Alphatonos=902;e.Amacron=256;e.Amonospace=65313;e.Aogonek=260;e.Aring=197;e.Aringacute=506;e.Aringbelow=7680;e.Aringsmall=63461;e.Asmall=63329;e.Atilde=195;e.Atildesmall=63459;e.Aybarmenian=1329;e.B=66;e.Bcircle=9399;e.Bdotaccent=7682;e.Bdotbelow=7684;e.Becyrillic=1041;e.\ -Benarmenian=1330;e.Beta=914;e.Bhook=385;e.Blinebelow=7686;e.Bmonospace=65314;e.Brevesmall=63220;e.Bsmall=63330;e.Btopbar=386;e.C=67;e.Caarmenian=1342;e.Cacute=262;e.Caron=63178;e.Caronsmall=63221;e.Ccaron=268;e.Ccedilla=199;e.Ccedillaacute=7688;e.Ccedillasmall=63463;e.Ccircle=9400;e.Ccircumflex=264;e.Cdot=266;e.Cdotaccent=266;e.Cedillasmall=63416;e.Chaarmenian=1353;e.Cheabkhasiancyrillic=1212;e.Checyrillic=1063;e.Chedescenderabkhasiancyrillic=1214;e.Chedescendercyrillic=1206;e.Chedieresiscyrilli\ -c=1268;e.Cheharmenian=1347;e.Chekhakassiancyrillic=1227;e.Cheverticalstrokecyrillic=1208;e.Chi=935;e.Chook=391;e.Circumflexsmall=63222;e.Cmonospace=65315;e.Coarmenian=1361;e.Csmall=63331;e.D=68;e.DZ=497;e.DZcaron=452;e.Daarmenian=1332;e.Dafrican=393;e.Dcaron=270;e.Dcedilla=7696;e.Dcircle=9401;e.Dcircumflexbelow=7698;e.Dcroat=272;e.Ddotaccent=7690;e.Ddotbelow=7692;e.Decyrillic=1044;e.Deicoptic=1006;e.Delta=8710;e.Deltagreek=916;e.Dhook=394;e.Dieresis=63179;e.DieresisAcute=63180;e.DieresisGrave=63\ -181;e.Dieresissmall=63400;e.Digammagreek=988;e.Djecyrillic=1026;e.Dlinebelow=7694;e.Dmonospace=65316;e.Dotaccentsmall=63223;e.Dslash=272;e.Dsmall=63332;e.Dtopbar=395;e.Dz=498;e.Dzcaron=453;e.Dzeabkhasiancyrillic=1248;e.Dzecyrillic=1029;e.Dzhecyrillic=1039;e.E=69;e.Eacute=201;e.Eacutesmall=63465;e.Ebreve=276;e.Ecaron=282;e.Ecedillabreve=7708;e.Echarmenian=1333;e.Ecircle=9402;e.Ecircumflex=202;e.Ecircumflexacute=7870;e.Ecircumflexbelow=7704;e.Ecircumflexdotbelow=7878;e.Ecircumflexgrave=7872;e.Ecir\ -cumflexhookabove=7874;e.Ecircumflexsmall=63466;e.Ecircumflextilde=7876;e.Ecyrillic=1028;e.Edblgrave=516;e.Edieresis=203;e.Edieresissmall=63467;e.Edot=278;e.Edotaccent=278;e.Edotbelow=7864;e.Efcyrillic=1060;e.Egrave=200;e.Egravesmall=63464;e.Eharmenian=1335;e.Ehookabove=7866;e.Eightroman=8551;e.Einvertedbreve=518;e.Eiotifiedcyrillic=1124;e.Elcyrillic=1051;e.Elevenroman=8554;e.Emacron=274;e.Emacronacute=7702;e.Emacrongrave=7700;e.Emcyrillic=1052;e.Emonospace=65317;e.Encyrillic=1053;e.Endescendercy\ -rillic=1186;e.Eng=330;e.Enghecyrillic=1188;e.Enhookcyrillic=1223;e.Eogonek=280;e.Eopen=400;e.Epsilon=917;e.Epsilontonos=904;e.Ercyrillic=1056;e.Ereversed=398;e.Ereversedcyrillic=1069;e.Escyrillic=1057;e.Esdescendercyrillic=1194;e.Esh=425;e.Esmall=63333;e.Eta=919;e.Etarmenian=1336;e.Etatonos=905;e.Eth=208;e.Ethsmall=63472;e.Etilde=7868;e.Etildebelow=7706;e.Euro=8364;e.Ezh=439;e.Ezhcaron=494;e.Ezhreversed=440;e.F=70;e.Fcircle=9403;e.Fdotaccent=7710;e.Feharmenian=1366;e.Feicoptic=996;e.Fhook=401;e.\ -Fitacyrillic=1138;e.Fiveroman=8548;e.Fmonospace=65318;e.Fourroman=8547;e.Fsmall=63334;e.G=71;e.GBsquare=13191;e.Gacute=500;e.Gamma=915;e.Gammaafrican=404;e.Gangiacoptic=1002;e.Gbreve=286;e.Gcaron=486;e.Gcedilla=290;e.Gcircle=9404;e.Gcircumflex=284;e.Gcommaaccent=290;e.Gdot=288;e.Gdotaccent=288;e.Gecyrillic=1043;e.Ghadarmenian=1346;e.Ghemiddlehookcyrillic=1172;e.Ghestrokecyrillic=1170;e.Gheupturncyrillic=1168;e.Ghook=403;e.Gimarmenian=1331;e.Gjecyrillic=1027;e.Gmacron=7712;e.Gmonospace=65319;e.Gr\ -ave=63182;e.Gravesmall=63328;e.Gsmall=63335;e.Gsmallhook=667;e.Gstroke=484;e.H=72;e.H18533=9679;e.H18543=9642;e.H18551=9643;e.H22073=9633;e.HPsquare=13259;e.Haabkhasiancyrillic=1192;e.Hadescendercyrillic=1202;e.Hardsigncyrillic=1066;e.Hbar=294;e.Hbrevebelow=7722;e.Hcedilla=7720;e.Hcircle=9405;e.Hcircumflex=292;e.Hdieresis=7718;e.Hdotaccent=7714;e.Hdotbelow=7716;e.Hmonospace=65320;e.Hoarmenian=1344;e.Horicoptic=1e3;e.Hsmall=63336;e.Hungarumlaut=63183;e.Hungarumlautsmall=63224;e.Hzsquare=13200;e.I\ -=73;e.IAcyrillic=1071;e.IJ=306;e.IUcyrillic=1070;e.Iacute=205;e.Iacutesmall=63469;e.Ibreve=300;e.Icaron=463;e.Icircle=9406;e.Icircumflex=206;e.Icircumflexsmall=63470;e.Icyrillic=1030;e.Idblgrave=520;e.Idieresis=207;e.Idieresisacute=7726;e.Idieresiscyrillic=1252;e.Idieresissmall=63471;e.Idot=304;e.Idotaccent=304;e.Idotbelow=7882;e.Iebrevecyrillic=1238;e.Iecyrillic=1045;e.Ifraktur=8465;e.Igrave=204;e.Igravesmall=63468;e.Ihookabove=7880;e.Iicyrillic=1048;e.Iinvertedbreve=522;e.Iishortcyrillic=1049;\ -e.Imacron=298;e.Imacroncyrillic=1250;e.Imonospace=65321;e.Iniarmenian=1339;e.Iocyrillic=1025;e.Iogonek=302;e.Iota=921;e.Iotaafrican=406;e.Iotadieresis=938;e.Iotatonos=906;e.Ismall=63337;e.Istroke=407;e.Itilde=296;e.Itildebelow=7724;e.Izhitsacyrillic=1140;e.Izhitsadblgravecyrillic=1142;e.J=74;e.Jaarmenian=1345;e.Jcircle=9407;e.Jcircumflex=308;e.Jecyrillic=1032;e.Jheharmenian=1355;e.Jmonospace=65322;e.Jsmall=63338;e.K=75;e.KBsquare=13189;e.KKsquare=13261;e.Kabashkircyrillic=1184;e.Kacute=7728;e.Ka\ -cyrillic=1050;e.Kadescendercyrillic=1178;e.Kahookcyrillic=1219;e.Kappa=922;e.Kastrokecyrillic=1182;e.Kaverticalstrokecyrillic=1180;e.Kcaron=488;e.Kcedilla=310;e.Kcircle=9408;e.Kcommaaccent=310;e.Kdotbelow=7730;e.Keharmenian=1364;e.Kenarmenian=1343;e.Khacyrillic=1061;e.Kheicoptic=998;e.Khook=408;e.Kjecyrillic=1036;e.Klinebelow=7732;e.Kmonospace=65323;e.Koppacyrillic=1152;e.Koppagreek=990;e.Ksicyrillic=1134;e.Ksmall=63339;e.L=76;e.LJ=455;e.LL=63167;e.Lacute=313;e.Lambda=923;e.Lcaron=317;e.Lcedilla\ -=315;e.Lcircle=9409;e.Lcircumflexbelow=7740;e.Lcommaaccent=315;e.Ldot=319;e.Ldotaccent=319;e.Ldotbelow=7734;e.Ldotbelowmacron=7736;e.Liwnarmenian=1340;e.Lj=456;e.Ljecyrillic=1033;e.Llinebelow=7738;e.Lmonospace=65324;e.Lslash=321;e.Lslashsmall=63225;e.Lsmall=63340;e.M=77;e.MBsquare=13190;e.Macron=63184;e.Macronsmall=63407;e.Macute=7742;e.Mcircle=9410;e.Mdotaccent=7744;e.Mdotbelow=7746;e.Menarmenian=1348;e.Mmonospace=65325;e.Msmall=63341;e.Mturned=412;e.Mu=924;e.N=78;e.NJ=458;e.Nacute=323;e.Ncaron\ -=327;e.Ncedilla=325;e.Ncircle=9411;e.Ncircumflexbelow=7754;e.Ncommaaccent=325;e.Ndotaccent=7748;e.Ndotbelow=7750;e.Nhookleft=413;e.Nineroman=8552;e.Nj=459;e.Njecyrillic=1034;e.Nlinebelow=7752;e.Nmonospace=65326;e.Nowarmenian=1350;e.Nsmall=63342;e.Ntilde=209;e.Ntildesmall=63473;e.Nu=925;e.O=79;e.OE=338;e.OEsmall=63226;e.Oacute=211;e.Oacutesmall=63475;e.Obarredcyrillic=1256;e.Obarreddieresiscyrillic=1258;e.Obreve=334;e.Ocaron=465;e.Ocenteredtilde=415;e.Ocircle=9412;e.Ocircumflex=212;e.Ocircumflexa\ -cute=7888;e.Ocircumflexdotbelow=7896;e.Ocircumflexgrave=7890;e.Ocircumflexhookabove=7892;e.Ocircumflexsmall=63476;e.Ocircumflextilde=7894;e.Ocyrillic=1054;e.Odblacute=336;e.Odblgrave=524;e.Odieresis=214;e.Odieresiscyrillic=1254;e.Odieresissmall=63478;e.Odotbelow=7884;e.Ogoneksmall=63227;e.Ograve=210;e.Ogravesmall=63474;e.Oharmenian=1365;e.Ohm=8486;e.Ohookabove=7886;e.Ohorn=416;e.Ohornacute=7898;e.Ohorndotbelow=7906;e.Ohorngrave=7900;e.Ohornhookabove=7902;e.Ohorntilde=7904;e.Ohungarumlaut=336;e.O\ -i=418;e.Oinvertedbreve=526;e.Omacron=332;e.Omacronacute=7762;e.Omacrongrave=7760;e.Omega=8486;e.Omegacyrillic=1120;e.Omegagreek=937;e.Omegaroundcyrillic=1146;e.Omegatitlocyrillic=1148;e.Omegatonos=911;e.Omicron=927;e.Omicrontonos=908;e.Omonospace=65327;e.Oneroman=8544;e.Oogonek=490;e.Oogonekmacron=492;e.Oopen=390;e.Oslash=216;e.Oslashacute=510;e.Oslashsmall=63480;e.Osmall=63343;e.Ostrokeacute=510;e.Otcyrillic=1150;e.Otilde=213;e.Otildeacute=7756;e.Otildedieresis=7758;e.Otildesmall=63477;e.P=80;e\ -.Pacute=7764;e.Pcircle=9413;e.Pdotaccent=7766;e.Pecyrillic=1055;e.Peharmenian=1354;e.Pemiddlehookcyrillic=1190;e.Phi=934;e.Phook=420;e.Pi=928;e.Piwrarmenian=1363;e.Pmonospace=65328;e.Psi=936;e.Psicyrillic=1136;e.Psmall=63344;e.Q=81;e.Qcircle=9414;e.Qmonospace=65329;e.Qsmall=63345;e.R=82;e.Raarmenian=1356;e.Racute=340;e.Rcaron=344;e.Rcedilla=342;e.Rcircle=9415;e.Rcommaaccent=342;e.Rdblgrave=528;e.Rdotaccent=7768;e.Rdotbelow=7770;e.Rdotbelowmacron=7772;e.Reharmenian=1360;e.Rfraktur=8476;e.Rho=929;\ -e.Ringsmall=63228;e.Rinvertedbreve=530;e.Rlinebelow=7774;e.Rmonospace=65330;e.Rsmall=63346;e.Rsmallinverted=641;e.Rsmallinvertedsuperior=694;e.S=83;e.SF010000=9484;e.SF020000=9492;e.SF030000=9488;e.SF040000=9496;e.SF050000=9532;e.SF060000=9516;e.SF070000=9524;e.SF080000=9500;e.SF090000=9508;e.SF100000=9472;e.SF110000=9474;e.SF190000=9569;e.SF200000=9570;e.SF210000=9558;e.SF220000=9557;e.SF230000=9571;e.SF240000=9553;e.SF250000=9559;e.SF260000=9565;e.SF270000=9564;e.SF280000=9563;e.SF360000=9566;\ -e.SF370000=9567;e.SF380000=9562;e.SF390000=9556;e.SF400000=9577;e.SF410000=9574;e.SF420000=9568;e.SF430000=9552;e.SF440000=9580;e.SF450000=9575;e.SF460000=9576;e.SF470000=9572;e.SF480000=9573;e.SF490000=9561;e.SF500000=9560;e.SF510000=9554;e.SF520000=9555;e.SF530000=9579;e.SF540000=9578;e.Sacute=346;e.Sacutedotaccent=7780;e.Sampigreek=992;e.Scaron=352;e.Scarondotaccent=7782;e.Scaronsmall=63229;e.Scedilla=350;e.Schwa=399;e.Schwacyrillic=1240;e.Schwadieresiscyrillic=1242;e.Scircle=9416;e.Scircumfl\ -ex=348;e.Scommaaccent=536;e.Sdotaccent=7776;e.Sdotbelow=7778;e.Sdotbelowdotaccent=7784;e.Seharmenian=1357;e.Sevenroman=8550;e.Shaarmenian=1351;e.Shacyrillic=1064;e.Shchacyrillic=1065;e.Sheicoptic=994;e.Shhacyrillic=1210;e.Shimacoptic=1004;e.Sigma=931;e.Sixroman=8549;e.Smonospace=65331;e.Softsigncyrillic=1068;e.Ssmall=63347;e.Stigmagreek=986;e.T=84;e.Tau=932;e.Tbar=358;e.Tcaron=356;e.Tcedilla=354;e.Tcircle=9417;e.Tcircumflexbelow=7792;e.Tcommaaccent=354;e.Tdotaccent=7786;e.Tdotbelow=7788;e.Tecyri\ -llic=1058;e.Tedescendercyrillic=1196;e.Tenroman=8553;e.Tetsecyrillic=1204;e.Theta=920;e.Thook=428;e.Thorn=222;e.Thornsmall=63486;e.Threeroman=8546;e.Tildesmall=63230;e.Tiwnarmenian=1359;e.Tlinebelow=7790;e.Tmonospace=65332;e.Toarmenian=1337;e.Tonefive=444;e.Tonesix=388;e.Tonetwo=423;e.Tretroflexhook=430;e.Tsecyrillic=1062;e.Tshecyrillic=1035;e.Tsmall=63348;e.Twelveroman=8555;e.Tworoman=8545;e.U=85;e.Uacute=218;e.Uacutesmall=63482;e.Ubreve=364;e.Ucaron=467;e.Ucircle=9418;e.Ucircumflex=219;e.Ucirc\ -umflexbelow=7798;e.Ucircumflexsmall=63483;e.Ucyrillic=1059;e.Udblacute=368;e.Udblgrave=532;e.Udieresis=220;e.Udieresisacute=471;e.Udieresisbelow=7794;e.Udieresiscaron=473;e.Udieresiscyrillic=1264;e.Udieresisgrave=475;e.Udieresismacron=469;e.Udieresissmall=63484;e.Udotbelow=7908;e.Ugrave=217;e.Ugravesmall=63481;e.Uhookabove=7910;e.Uhorn=431;e.Uhornacute=7912;e.Uhorndotbelow=7920;e.Uhorngrave=7914;e.Uhornhookabove=7916;e.Uhorntilde=7918;e.Uhungarumlaut=368;e.Uhungarumlautcyrillic=1266;e.Uinvertedb\ -reve=534;e.Ukcyrillic=1144;e.Umacron=362;e.Umacroncyrillic=1262;e.Umacrondieresis=7802;e.Umonospace=65333;e.Uogonek=370;e.Upsilon=933;e.Upsilon1=978;e.Upsilonacutehooksymbolgreek=979;e.Upsilonafrican=433;e.Upsilondieresis=939;e.Upsilondieresishooksymbolgreek=980;e.Upsilonhooksymbol=978;e.Upsilontonos=910;e.Uring=366;e.Ushortcyrillic=1038;e.Usmall=63349;e.Ustraightcyrillic=1198;e.Ustraightstrokecyrillic=1200;e.Utilde=360;e.Utildeacute=7800;e.Utildebelow=7796;e.V=86;e.Vcircle=9419;e.Vdotbelow=7806\ -;e.Vecyrillic=1042;e.Vewarmenian=1358;e.Vhook=434;e.Vmonospace=65334;e.Voarmenian=1352;e.Vsmall=63350;e.Vtilde=7804;e.W=87;e.Wacute=7810;e.Wcircle=9420;e.Wcircumflex=372;e.Wdieresis=7812;e.Wdotaccent=7814;e.Wdotbelow=7816;e.Wgrave=7808;e.Wmonospace=65335;e.Wsmall=63351;e.X=88;e.Xcircle=9421;e.Xdieresis=7820;e.Xdotaccent=7818;e.Xeharmenian=1341;e.Xi=926;e.Xmonospace=65336;e.Xsmall=63352;e.Y=89;e.Yacute=221;e.Yacutesmall=63485;e.Yatcyrillic=1122;e.Ycircle=9422;e.Ycircumflex=374;e.Ydieresis=376;e.Y\ -dieresissmall=63487;e.Ydotaccent=7822;e.Ydotbelow=7924;e.Yericyrillic=1067;e.Yerudieresiscyrillic=1272;e.Ygrave=7922;e.Yhook=435;e.Yhookabove=7926;e.Yiarmenian=1349;e.Yicyrillic=1031;e.Yiwnarmenian=1362;e.Ymonospace=65337;e.Ysmall=63353;e.Ytilde=7928;e.Yusbigcyrillic=1130;e.Yusbigiotifiedcyrillic=1132;e.Yuslittlecyrillic=1126;e.Yuslittleiotifiedcyrillic=1128;e.Z=90;e.Zaarmenian=1334;e.Zacute=377;e.Zcaron=381;e.Zcaronsmall=63231;e.Zcircle=9423;e.Zcircumflex=7824;e.Zdot=379;e.Zdotaccent=379;e.Zdot\ -below=7826;e.Zecyrillic=1047;e.Zedescendercyrillic=1176;e.Zedieresiscyrillic=1246;e.Zeta=918;e.Zhearmenian=1338;e.Zhebrevecyrillic=1217;e.Zhecyrillic=1046;e.Zhedescendercyrillic=1174;e.Zhedieresiscyrillic=1244;e.Zlinebelow=7828;e.Zmonospace=65338;e.Zsmall=63354;e.Zstroke=437;e.a=97;e.aabengali=2438;e.aacute=225;e.aadeva=2310;e.aagujarati=2694;e.aagurmukhi=2566;e.aamatragurmukhi=2622;e.aarusquare=13059;e.aavowelsignbengali=2494;e.aavowelsigndeva=2366;e.aavowelsigngujarati=2750;e.abbreviationmarka\ -rmenian=1375;e.abbreviationsigndeva=2416;e.abengali=2437;e.abopomofo=12570;e.abreve=259;e.abreveacute=7855;e.abrevecyrillic=1233;e.abrevedotbelow=7863;e.abrevegrave=7857;e.abrevehookabove=7859;e.abrevetilde=7861;e.acaron=462;e.acircle=9424;e.acircumflex=226;e.acircumflexacute=7845;e.acircumflexdotbelow=7853;e.acircumflexgrave=7847;e.acircumflexhookabove=7849;e.acircumflextilde=7851;e.acute=180;e.acutebelowcmb=791;e.acutecmb=769;e.acutecomb=769;e.acutedeva=2388;e.acutelowmod=719;e.acutetonecmb=83\ -3;e.acyrillic=1072;e.adblgrave=513;e.addakgurmukhi=2673;e.adeva=2309;e.adieresis=228;e.adieresiscyrillic=1235;e.adieresismacron=479;e.adotbelow=7841;e.adotmacron=481;e.ae=230;e.aeacute=509;e.aekorean=12624;e.aemacron=483;e.afii00208=8213;e.afii08941=8356;e.afii10017=1040;e.afii10018=1041;e.afii10019=1042;e.afii10020=1043;e.afii10021=1044;e.afii10022=1045;e.afii10023=1025;e.afii10024=1046;e.afii10025=1047;e.afii10026=1048;e.afii10027=1049;e.afii10028=1050;e.afii10029=1051;e.afii10030=1052;e.afii1\ -0031=1053;e.afii10032=1054;e.afii10033=1055;e.afii10034=1056;e.afii10035=1057;e.afii10036=1058;e.afii10037=1059;e.afii10038=1060;e.afii10039=1061;e.afii10040=1062;e.afii10041=1063;e.afii10042=1064;e.afii10043=1065;e.afii10044=1066;e.afii10045=1067;e.afii10046=1068;e.afii10047=1069;e.afii10048=1070;e.afii10049=1071;e.afii10050=1168;e.afii10051=1026;e.afii10052=1027;e.afii10053=1028;e.afii10054=1029;e.afii10055=1030;e.afii10056=1031;e.afii10057=1032;e.afii10058=1033;e.afii10059=1034;e.afii10060=10\ -35;e.afii10061=1036;e.afii10062=1038;e.afii10063=63172;e.afii10064=63173;e.afii10065=1072;e.afii10066=1073;e.afii10067=1074;e.afii10068=1075;e.afii10069=1076;e.afii10070=1077;e.afii10071=1105;e.afii10072=1078;e.afii10073=1079;e.afii10074=1080;e.afii10075=1081;e.afii10076=1082;e.afii10077=1083;e.afii10078=1084;e.afii10079=1085;e.afii10080=1086;e.afii10081=1087;e.afii10082=1088;e.afii10083=1089;e.afii10084=1090;e.afii10085=1091;e.afii10086=1092;e.afii10087=1093;e.afii10088=1094;e.afii10089=1095;e.\ -afii10090=1096;e.afii10091=1097;e.afii10092=1098;e.afii10093=1099;e.afii10094=1100;e.afii10095=1101;e.afii10096=1102;e.afii10097=1103;e.afii10098=1169;e.afii10099=1106;e.afii10100=1107;e.afii10101=1108;e.afii10102=1109;e.afii10103=1110;e.afii10104=1111;e.afii10105=1112;e.afii10106=1113;e.afii10107=1114;e.afii10108=1115;e.afii10109=1116;e.afii10110=1118;e.afii10145=1039;e.afii10146=1122;e.afii10147=1138;e.afii10148=1140;e.afii10192=63174;e.afii10193=1119;e.afii10194=1123;e.afii10195=1139;e.afii10\ -196=1141;e.afii10831=63175;e.afii10832=63176;e.afii10846=1241;e.afii299=8206;e.afii300=8207;e.afii301=8205;e.afii57381=1642;e.afii57388=1548;e.afii57392=1632;e.afii57393=1633;e.afii57394=1634;e.afii57395=1635;e.afii57396=1636;e.afii57397=1637;e.afii57398=1638;e.afii57399=1639;e.afii57400=1640;e.afii57401=1641;e.afii57403=1563;e.afii57407=1567;e.afii57409=1569;e.afii57410=1570;e.afii57411=1571;e.afii57412=1572;e.afii57413=1573;e.afii57414=1574;e.afii57415=1575;e.afii57416=1576;e.afii57417=1577;e.\ -afii57418=1578;e.afii57419=1579;e.afii57420=1580;e.afii57421=1581;e.afii57422=1582;e.afii57423=1583;e.afii57424=1584;e.afii57425=1585;e.afii57426=1586;e.afii57427=1587;e.afii57428=1588;e.afii57429=1589;e.afii57430=1590;e.afii57431=1591;e.afii57432=1592;e.afii57433=1593;e.afii57434=1594;e.afii57440=1600;e.afii57441=1601;e.afii57442=1602;e.afii57443=1603;e.afii57444=1604;e.afii57445=1605;e.afii57446=1606;e.afii57448=1608;e.afii57449=1609;e.afii57450=1610;e.afii57451=1611;e.afii57452=1612;e.afii574\ -53=1613;e.afii57454=1614;e.afii57455=1615;e.afii57456=1616;e.afii57457=1617;e.afii57458=1618;e.afii57470=1607;e.afii57505=1700;e.afii57506=1662;e.afii57507=1670;e.afii57508=1688;e.afii57509=1711;e.afii57511=1657;e.afii57512=1672;e.afii57513=1681;e.afii57514=1722;e.afii57519=1746;e.afii57534=1749;e.afii57636=8362;e.afii57645=1470;e.afii57658=1475;e.afii57664=1488;e.afii57665=1489;e.afii57666=1490;e.afii57667=1491;e.afii57668=1492;e.afii57669=1493;e.afii57670=1494;e.afii57671=1495;e.afii57672=1496\ -;e.afii57673=1497;e.afii57674=1498;e.afii57675=1499;e.afii57676=1500;e.afii57677=1501;e.afii57678=1502;e.afii57679=1503;e.afii57680=1504;e.afii57681=1505;e.afii57682=1506;e.afii57683=1507;e.afii57684=1508;e.afii57685=1509;e.afii57686=1510;e.afii57687=1511;e.afii57688=1512;e.afii57689=1513;e.afii57690=1514;e.afii57694=64298;e.afii57695=64299;e.afii57700=64331;e.afii57705=64287;e.afii57716=1520;e.afii57717=1521;e.afii57718=1522;e.afii57723=64309;e.afii57793=1460;e.afii57794=1461;e.afii57795=1462;e\ -.afii57796=1467;e.afii57797=1464;e.afii57798=1463;e.afii57799=1456;e.afii57800=1458;e.afii57801=1457;e.afii57802=1459;e.afii57803=1474;e.afii57804=1473;e.afii57806=1465;e.afii57807=1468;e.afii57839=1469;e.afii57841=1471;e.afii57842=1472;e.afii57929=700;e.afii61248=8453;e.afii61289=8467;e.afii61352=8470;e.afii61573=8236;e.afii61574=8237;e.afii61575=8238;e.afii61664=8204;e.afii63167=1645;e.afii64937=701;e.agrave=224;e.agujarati=2693;e.agurmukhi=2565;e.ahiragana=12354;e.ahookabove=7843;e.aibengali=\ -2448;e.aibopomofo=12574;e.aideva=2320;e.aiecyrillic=1237;e.aigujarati=2704;e.aigurmukhi=2576;e.aimatragurmukhi=2632;e.ainarabic=1593;e.ainfinalarabic=65226;e.aininitialarabic=65227;e.ainmedialarabic=65228;e.ainvertedbreve=515;e.aivowelsignbengali=2504;e.aivowelsigndeva=2376;e.aivowelsigngujarati=2760;e.akatakana=12450;e.akatakanahalfwidth=65393;e.akorean=12623;e.alef=1488;e.alefarabic=1575;e.alefdageshhebrew=64304;e.aleffinalarabic=65166;e.alefhamzaabovearabic=1571;e.alefhamzaabovefinalarabic=65\ -156;e.alefhamzabelowarabic=1573;e.alefhamzabelowfinalarabic=65160;e.alefhebrew=1488;e.aleflamedhebrew=64335;e.alefmaddaabovearabic=1570;e.alefmaddaabovefinalarabic=65154;e.alefmaksuraarabic=1609;e.alefmaksurafinalarabic=65264;e.alefmaksurainitialarabic=65267;e.alefmaksuramedialarabic=65268;e.alefpatahhebrew=64302;e.alefqamatshebrew=64303;e.aleph=8501;e.allequal=8780;e.alpha=945;e.alphatonos=940;e.amacron=257;e.amonospace=65345;e.ampersand=38;e.ampersandmonospace=65286;e.ampersandsmall=63270;e.am\ -square=13250;e.anbopomofo=12578;e.angbopomofo=12580;e.angbracketleft=12296;e.angbracketright=12297;e.angkhankhuthai=3674;e.angle=8736;e.anglebracketleft=12296;e.anglebracketleftvertical=65087;e.anglebracketright=12297;e.anglebracketrightvertical=65088;e.angleleft=9001;e.angleright=9002;e.angstrom=8491;e.anoteleia=903;e.anudattadeva=2386;e.anusvarabengali=2434;e.anusvaradeva=2306;e.anusvaragujarati=2690;e.aogonek=261;e.apaatosquare=13056;e.aparen=9372;e.apostrophearmenian=1370;e.apostrophemod=700\ -;e.apple=63743;e.approaches=8784;e.approxequal=8776;e.approxequalorimage=8786;e.approximatelyequal=8773;e.araeaekorean=12686;e.araeakorean=12685;e.arc=8978;e.arighthalfring=7834;e.aring=229;e.aringacute=507;e.aringbelow=7681;e.arrowboth=8596;e.arrowdashdown=8675;e.arrowdashleft=8672;e.arrowdashright=8674;e.arrowdashup=8673;e.arrowdblboth=8660;e.arrowdbldown=8659;e.arrowdblleft=8656;e.arrowdblright=8658;e.arrowdblup=8657;e.arrowdown=8595;e.arrowdownleft=8601;e.arrowdownright=8600;e.arrowdownwhite\ -=8681;e.arrowheaddownmod=709;e.arrowheadleftmod=706;e.arrowheadrightmod=707;e.arrowheadupmod=708;e.arrowhorizex=63719;e.arrowleft=8592;e.arrowleftdbl=8656;e.arrowleftdblstroke=8653;e.arrowleftoverright=8646;e.arrowleftwhite=8678;e.arrowright=8594;e.arrowrightdblstroke=8655;e.arrowrightheavy=10142;e.arrowrightoverleft=8644;e.arrowrightwhite=8680;e.arrowtableft=8676;e.arrowtabright=8677;e.arrowup=8593;e.arrowupdn=8597;e.arrowupdnbse=8616;e.arrowupdownbase=8616;e.arrowupleft=8598;e.arrowupleftofdow\ -n=8645;e.arrowupright=8599;e.arrowupwhite=8679;e.arrowvertex=63718;e.asciicircum=94;e.asciicircummonospace=65342;e.asciitilde=126;e.asciitildemonospace=65374;e.ascript=593;e.ascriptturned=594;e.asmallhiragana=12353;e.asmallkatakana=12449;e.asmallkatakanahalfwidth=65383;e.asterisk=42;e.asteriskaltonearabic=1645;e.asteriskarabic=1645;e.asteriskmath=8727;e.asteriskmonospace=65290;e.asterisksmall=65121;e.asterism=8258;e.asuperior=63209;e.asymptoticallyequal=8771;e.at=64;e.atilde=227;e.atmonospace=65\ -312;e.atsmall=65131;e.aturned=592;e.aubengali=2452;e.aubopomofo=12576;e.audeva=2324;e.augujarati=2708;e.augurmukhi=2580;e.aulengthmarkbengali=2519;e.aumatragurmukhi=2636;e.auvowelsignbengali=2508;e.auvowelsigndeva=2380;e.auvowelsigngujarati=2764;e.avagrahadeva=2365;e.aybarmenian=1377;e.ayin=1506;e.ayinaltonehebrew=64288;e.ayinhebrew=1506;e.b=98;e.babengali=2476;e.backslash=92;e.backslashmonospace=65340;e.badeva=2348;e.bagujarati=2732;e.bagurmukhi=2604;e.bahiragana=12400;e.bahtthai=3647;e.bakatak\ -ana=12496;e.bar=124;e.barmonospace=65372;e.bbopomofo=12549;e.bcircle=9425;e.bdotaccent=7683;e.bdotbelow=7685;e.beamedsixteenthnotes=9836;e.because=8757;e.becyrillic=1073;e.beharabic=1576;e.behfinalarabic=65168;e.behinitialarabic=65169;e.behiragana=12409;e.behmedialarabic=65170;e.behmeeminitialarabic=64671;e.behmeemisolatedarabic=64520;e.behnoonfinalarabic=64621;e.bekatakana=12505;e.benarmenian=1378;e.bet=1489;e.beta=946;e.betasymbolgreek=976;e.betdagesh=64305;e.betdageshhebrew=64305;e.bethebrew=\ -1489;e.betrafehebrew=64332;e.bhabengali=2477;e.bhadeva=2349;e.bhagujarati=2733;e.bhagurmukhi=2605;e.bhook=595;e.bihiragana=12403;e.bikatakana=12499;e.bilabialclick=664;e.bindigurmukhi=2562;e.birusquare=13105;e.blackcircle=9679;e.blackdiamond=9670;e.blackdownpointingtriangle=9660;e.blackleftpointingpointer=9668;e.blackleftpointingtriangle=9664;e.blacklenticularbracketleft=12304;e.blacklenticularbracketleftvertical=65083;e.blacklenticularbracketright=12305;e.blacklenticularbracketrightvertical=650\ -84;e.blacklowerlefttriangle=9699;e.blacklowerrighttriangle=9698;e.blackrectangle=9644;e.blackrightpointingpointer=9658;e.blackrightpointingtriangle=9654;e.blacksmallsquare=9642;e.blacksmilingface=9787;e.blacksquare=9632;e.blackstar=9733;e.blackupperlefttriangle=9700;e.blackupperrighttriangle=9701;e.blackuppointingsmalltriangle=9652;e.blackuppointingtriangle=9650;e.blank=9251;e.blinebelow=7687;e.block=9608;e.bmonospace=65346;e.bobaimaithai=3610;e.bohiragana=12412;e.bokatakana=12508;e.bparen=9373;\ -e.bqsquare=13251;e.braceex=63732;e.braceleft=123;e.braceleftbt=63731;e.braceleftmid=63730;e.braceleftmonospace=65371;e.braceleftsmall=65115;e.bracelefttp=63729;e.braceleftvertical=65079;e.braceright=125;e.bracerightbt=63742;e.bracerightmid=63741;e.bracerightmonospace=65373;e.bracerightsmall=65116;e.bracerighttp=63740;e.bracerightvertical=65080;e.bracketleft=91;e.bracketleftbt=63728;e.bracketleftex=63727;e.bracketleftmonospace=65339;e.bracketlefttp=63726;e.bracketright=93;e.bracketrightbt=63739;e\ -.bracketrightex=63738;e.bracketrightmonospace=65341;e.bracketrighttp=63737;e.breve=728;e.brevebelowcmb=814;e.brevecmb=774;e.breveinvertedbelowcmb=815;e.breveinvertedcmb=785;e.breveinverteddoublecmb=865;e.bridgebelowcmb=810;e.bridgeinvertedbelowcmb=826;e.brokenbar=166;e.bstroke=384;e.bsuperior=63210;e.btopbar=387;e.buhiragana=12406;e.bukatakana=12502;e.bullet=8226;e.bulletinverse=9688;e.bulletoperator=8729;e.bullseye=9678;e.c=99;e.caarmenian=1390;e.cabengali=2458;e.cacute=263;e.cadeva=2330;e.cagu\ -jarati=2714;e.cagurmukhi=2586;e.calsquare=13192;e.candrabindubengali=2433;e.candrabinducmb=784;e.candrabindudeva=2305;e.candrabindugujarati=2689;e.capslock=8682;e.careof=8453;e.caron=711;e.caronbelowcmb=812;e.caroncmb=780;e.carriagereturn=8629;e.cbopomofo=12568;e.ccaron=269;e.ccedilla=231;e.ccedillaacute=7689;e.ccircle=9426;e.ccircumflex=265;e.ccurl=597;e.cdot=267;e.cdotaccent=267;e.cdsquare=13253;e.cedilla=184;e.cedillacmb=807;e.cent=162;e.centigrade=8451;e.centinferior=63199;e.centmonospace=65\ -504;e.centoldstyle=63394;e.centsuperior=63200;e.chaarmenian=1401;e.chabengali=2459;e.chadeva=2331;e.chagujarati=2715;e.chagurmukhi=2587;e.chbopomofo=12564;e.cheabkhasiancyrillic=1213;e.checkmark=10003;e.checyrillic=1095;e.chedescenderabkhasiancyrillic=1215;e.chedescendercyrillic=1207;e.chedieresiscyrillic=1269;e.cheharmenian=1395;e.chekhakassiancyrillic=1228;e.cheverticalstrokecyrillic=1209;e.chi=967;e.chieuchacirclekorean=12919;e.chieuchaparenkorean=12823;e.chieuchcirclekorean=12905;e.chieuchko\ -rean=12618;e.chieuchparenkorean=12809;e.chochangthai=3594;e.chochanthai=3592;e.chochingthai=3593;e.chochoethai=3596;e.chook=392;e.cieucacirclekorean=12918;e.cieucaparenkorean=12822;e.cieuccirclekorean=12904;e.cieuckorean=12616;e.cieucparenkorean=12808;e.cieucuparenkorean=12828;e.circle=9675;e.circlecopyrt=169;e.circlemultiply=8855;e.circleot=8857;e.circleplus=8853;e.circlepostalmark=12342;e.circlewithlefthalfblack=9680;e.circlewithrighthalfblack=9681;e.circumflex=710;e.circumflexbelowcmb=813;e.c\ -ircumflexcmb=770;e.clear=8999;e.clickalveolar=450;e.clickdental=448;e.clicklateral=449;e.clickretroflex=451;e.club=9827;e.clubsuitblack=9827;e.clubsuitwhite=9831;e.cmcubedsquare=13220;e.cmonospace=65347;e.cmsquaredsquare=13216;e.coarmenian=1409;e.colon=58;e.colonmonetary=8353;e.colonmonospace=65306;e.colonsign=8353;e.colonsmall=65109;e.colontriangularhalfmod=721;e.colontriangularmod=720;e.comma=44;e.commaabovecmb=787;e.commaaboverightcmb=789;e.commaaccent=63171;e.commaarabic=1548;e.commaarmenian\ -=1373;e.commainferior=63201;e.commamonospace=65292;e.commareversedabovecmb=788;e.commareversedmod=701;e.commasmall=65104;e.commasuperior=63202;e.commaturnedabovecmb=786;e.commaturnedmod=699;e.compass=9788;e.congruent=8773;e.contourintegral=8750;e.control=8963;e.controlACK=6;e.controlBEL=7;e.controlBS=8;e.controlCAN=24;e.controlCR=13;e.controlDC1=17;e.controlDC2=18;e.controlDC3=19;e.controlDC4=20;e.controlDEL=127;e.controlDLE=16;e.controlEM=25;e.controlENQ=5;e.controlEOT=4;e.controlESC=27;e.contr\ -olETB=23;e.controlETX=3;e.controlFF=12;e.controlFS=28;e.controlGS=29;e.controlHT=9;e.controlLF=10;e.controlNAK=21;e.controlNULL=0;e.controlRS=30;e.controlSI=15;e.controlSO=14;e.controlSOT=2;e.controlSTX=1;e.controlSUB=26;e.controlSYN=22;e.controlUS=31;e.controlVT=11;e.copyright=169;e.copyrightsans=63721;e.copyrightserif=63193;e.cornerbracketleft=12300;e.cornerbracketlefthalfwidth=65378;e.cornerbracketleftvertical=65089;e.cornerbracketright=12301;e.cornerbracketrighthalfwidth=65379;e.cornerbracke\ -trightvertical=65090;e.corporationsquare=13183;e.cosquare=13255;e.coverkgsquare=13254;e.cparen=9374;e.cruzeiro=8354;e.cstretched=663;e.curlyand=8911;e.curlyor=8910;e.currency=164;e.cyrBreve=63185;e.cyrFlex=63186;e.cyrbreve=63188;e.cyrflex=63189;e.d=100;e.daarmenian=1380;e.dabengali=2470;e.dadarabic=1590;e.dadeva=2342;e.dadfinalarabic=65214;e.dadinitialarabic=65215;e.dadmedialarabic=65216;e.dagesh=1468;e.dageshhebrew=1468;e.dagger=8224;e.daggerdbl=8225;e.dagujarati=2726;e.dagurmukhi=2598;e.dahira\ -gana=12384;e.dakatakana=12480;e.dalarabic=1583;e.dalet=1491;e.daletdagesh=64307;e.daletdageshhebrew=64307;e.dalethebrew=1491;e.dalfinalarabic=65194;e.dammaarabic=1615;e.dammalowarabic=1615;e.dammatanaltonearabic=1612;e.dammatanarabic=1612;e.danda=2404;e.dargahebrew=1447;e.dargalefthebrew=1447;e.dasiapneumatacyrilliccmb=1157;e.dblGrave=63187;e.dblanglebracketleft=12298;e.dblanglebracketleftvertical=65085;e.dblanglebracketright=12299;e.dblanglebracketrightvertical=65086;e.dblarchinvertedbelowcmb=8\ -11;e.dblarrowleft=8660;e.dblarrowright=8658;e.dbldanda=2405;e.dblgrave=63190;e.dblgravecmb=783;e.dblintegral=8748;e.dbllowline=8215;e.dbllowlinecmb=819;e.dbloverlinecmb=831;e.dblprimemod=698;e.dblverticalbar=8214;e.dblverticallineabovecmb=782;e.dbopomofo=12553;e.dbsquare=13256;e.dcaron=271;e.dcedilla=7697;e.dcircle=9427;e.dcircumflexbelow=7699;e.dcroat=273;e.ddabengali=2465;e.ddadeva=2337;e.ddagujarati=2721;e.ddagurmukhi=2593;e.ddalarabic=1672;e.ddalfinalarabic=64393;e.dddhadeva=2396;e.ddhabenga\ -li=2466;e.ddhadeva=2338;e.ddhagujarati=2722;e.ddhagurmukhi=2594;e.ddotaccent=7691;e.ddotbelow=7693;e.decimalseparatorarabic=1643;e.decimalseparatorpersian=1643;e.decyrillic=1076;e.degree=176;e.dehihebrew=1453;e.dehiragana=12391;e.deicoptic=1007;e.dekatakana=12487;e.deleteleft=9003;e.deleteright=8998;e.delta=948;e.deltaturned=397;e.denominatorminusonenumeratorbengali=2552;e.dezh=676;e.dhabengali=2471;e.dhadeva=2343;e.dhagujarati=2727;e.dhagurmukhi=2599;e.dhook=599;e.dialytikatonos=901;e.dialytika\ -tonoscmb=836;e.diamond=9830;e.diamondsuitwhite=9826;e.dieresis=168;e.dieresisacute=63191;e.dieresisbelowcmb=804;e.dieresiscmb=776;e.dieresisgrave=63192;e.dieresistonos=901;e.dihiragana=12386;e.dikatakana=12482;e.dittomark=12291;e.divide=247;e.divides=8739;e.divisionslash=8725;e.djecyrillic=1106;e.dkshade=9619;e.dlinebelow=7695;e.dlsquare=13207;e.dmacron=273;e.dmonospace=65348;e.dnblock=9604;e.dochadathai=3598;e.dodekthai=3604;e.dohiragana=12393;e.dokatakana=12489;e.dollar=36;e.dollarinferior=632\ -03;e.dollarmonospace=65284;e.dollaroldstyle=63268;e.dollarsmall=65129;e.dollarsuperior=63204;e.dong=8363;e.dorusquare=13094;e.dotaccent=729;e.dotaccentcmb=775;e.dotbelowcmb=803;e.dotbelowcomb=803;e.dotkatakana=12539;e.dotlessi=305;e.dotlessj=63166;e.dotlessjstrokehook=644;e.dotmath=8901;e.dottedcircle=9676;e.doubleyodpatah=64287;e.doubleyodpatahhebrew=64287;e.downtackbelowcmb=798;e.downtackmod=725;e.dparen=9375;e.dsuperior=63211;e.dtail=598;e.dtopbar=396;e.duhiragana=12389;e.dukatakana=12485;e.d\ -z=499;e.dzaltone=675;e.dzcaron=454;e.dzcurl=677;e.dzeabkhasiancyrillic=1249;e.dzecyrillic=1109;e.dzhecyrillic=1119;e.e=101;e.eacute=233;e.earth=9793;e.ebengali=2447;e.ebopomofo=12572;e.ebreve=277;e.ecandradeva=2317;e.ecandragujarati=2701;e.ecandravowelsigndeva=2373;e.ecandravowelsigngujarati=2757;e.ecaron=283;e.ecedillabreve=7709;e.echarmenian=1381;e.echyiwnarmenian=1415;e.ecircle=9428;e.ecircumflex=234;e.ecircumflexacute=7871;e.ecircumflexbelow=7705;e.ecircumflexdotbelow=7879;e.ecircumflexgrave\ -=7873;e.ecircumflexhookabove=7875;e.ecircumflextilde=7877;e.ecyrillic=1108;e.edblgrave=517;e.edeva=2319;e.edieresis=235;e.edot=279;e.edotaccent=279;e.edotbelow=7865;e.eegurmukhi=2575;e.eematragurmukhi=2631;e.efcyrillic=1092;e.egrave=232;e.egujarati=2703;e.eharmenian=1383;e.ehbopomofo=12573;e.ehiragana=12360;e.ehookabove=7867;e.eibopomofo=12575;e.eight=56;e.eightarabic=1640;e.eightbengali=2542;e.eightcircle=9319;e.eightcircleinversesansserif=10129;e.eightdeva=2414;e.eighteencircle=9329;e.eighteen\ -paren=9349;e.eighteenperiod=9369;e.eightgujarati=2798;e.eightgurmukhi=2670;e.eighthackarabic=1640;e.eighthangzhou=12328;e.eighthnotebeamed=9835;e.eightideographicparen=12839;e.eightinferior=8328;e.eightmonospace=65304;e.eightoldstyle=63288;e.eightparen=9339;e.eightperiod=9359;e.eightpersian=1784;e.eightroman=8567;e.eightsuperior=8312;e.eightthai=3672;e.einvertedbreve=519;e.eiotifiedcyrillic=1125;e.ekatakana=12456;e.ekatakanahalfwidth=65396;e.ekonkargurmukhi=2676;e.ekorean=12628;e.elcyrillic=1083\ -;e.element=8712;e.elevencircle=9322;e.elevenparen=9342;e.elevenperiod=9362;e.elevenroman=8570;e.ellipsis=8230;e.ellipsisvertical=8942;e.emacron=275;e.emacronacute=7703;e.emacrongrave=7701;e.emcyrillic=1084;e.emdash=8212;e.emdashvertical=65073;e.emonospace=65349;e.emphasismarkarmenian=1371;e.emptyset=8709;e.enbopomofo=12579;e.encyrillic=1085;e.endash=8211;e.endashvertical=65074;e.endescendercyrillic=1187;e.eng=331;e.engbopomofo=12581;e.enghecyrillic=1189;e.enhookcyrillic=1224;e.enspace=8194;e.eog\ -onek=281;e.eokorean=12627;e.eopen=603;e.eopenclosed=666;e.eopenreversed=604;e.eopenreversedclosed=606;e.eopenreversedhook=605;e.eparen=9376;e.epsilon=949;e.epsilontonos=941;e.equal=61;e.equalmonospace=65309;e.equalsmall=65126;e.equalsuperior=8316;e.equivalence=8801;e.erbopomofo=12582;e.ercyrillic=1088;e.ereversed=600;e.ereversedcyrillic=1101;e.escyrillic=1089;e.esdescendercyrillic=1195;e.esh=643;e.eshcurl=646;e.eshortdeva=2318;e.eshortvowelsigndeva=2374;e.eshreversedloop=426;e.eshsquatreversed=6\ -45;e.esmallhiragana=12359;e.esmallkatakana=12455;e.esmallkatakanahalfwidth=65386;e.estimated=8494;e.esuperior=63212;e.eta=951;e.etarmenian=1384;e.etatonos=942;e.eth=240;e.etilde=7869;e.etildebelow=7707;e.etnahtafoukhhebrew=1425;e.etnahtafoukhlefthebrew=1425;e.etnahtahebrew=1425;e.etnahtalefthebrew=1425;e.eturned=477;e.eukorean=12641;e.euro=8364;e.evowelsignbengali=2503;e.evowelsigndeva=2375;e.evowelsigngujarati=2759;e.exclam=33;e.exclamarmenian=1372;e.exclamdbl=8252;e.exclamdown=161;e.exclamdown\ -small=63393;e.exclammonospace=65281;e.exclamsmall=63265;e.existential=8707;e.ezh=658;e.ezhcaron=495;e.ezhcurl=659;e.ezhreversed=441;e.ezhtail=442;e.f=102;e.fadeva=2398;e.fagurmukhi=2654;e.fahrenheit=8457;e.fathaarabic=1614;e.fathalowarabic=1614;e.fathatanarabic=1611;e.fbopomofo=12552;e.fcircle=9429;e.fdotaccent=7711;e.feharabic=1601;e.feharmenian=1414;e.fehfinalarabic=65234;e.fehinitialarabic=65235;e.fehmedialarabic=65236;e.feicoptic=997;e.female=9792;e.ff=64256;e.f_f=64256;e.ffi=64259;e.f_f_i=6\ -4259;e.ffl=64260;e.f_f_l=64260;e.fi=64257;e.f_i=64257;e.fifteencircle=9326;e.fifteenparen=9346;e.fifteenperiod=9366;e.figuredash=8210;e.filledbox=9632;e.filledrect=9644;e.finalkaf=1498;e.finalkafdagesh=64314;e.finalkafdageshhebrew=64314;e.finalkafhebrew=1498;e.finalmem=1501;e.finalmemhebrew=1501;e.finalnun=1503;e.finalnunhebrew=1503;e.finalpe=1507;e.finalpehebrew=1507;e.finaltsadi=1509;e.finaltsadihebrew=1509;e.firsttonechinese=713;e.fisheye=9673;e.fitacyrillic=1139;e.five=53;e.fivearabic=1637;e\ -.fivebengali=2539;e.fivecircle=9316;e.fivecircleinversesansserif=10126;e.fivedeva=2411;e.fiveeighths=8541;e.fivegujarati=2795;e.fivegurmukhi=2667;e.fivehackarabic=1637;e.fivehangzhou=12325;e.fiveideographicparen=12836;e.fiveinferior=8325;e.fivemonospace=65301;e.fiveoldstyle=63285;e.fiveparen=9336;e.fiveperiod=9356;e.fivepersian=1781;e.fiveroman=8564;e.fivesuperior=8309;e.fivethai=3669;e.fl=64258;e.f_l=64258;e.florin=402;e.fmonospace=65350;e.fmsquare=13209;e.fofanthai=3615;e.fofathai=3613;e.fongm\ -anthai=3663;e.forall=8704;e.four=52;e.fourarabic=1636;e.fourbengali=2538;e.fourcircle=9315;e.fourcircleinversesansserif=10125;e.fourdeva=2410;e.fourgujarati=2794;e.fourgurmukhi=2666;e.fourhackarabic=1636;e.fourhangzhou=12324;e.fourideographicparen=12835;e.fourinferior=8324;e.fourmonospace=65300;e.fournumeratorbengali=2551;e.fouroldstyle=63284;e.fourparen=9335;e.fourperiod=9355;e.fourpersian=1780;e.fourroman=8563;e.foursuperior=8308;e.fourteencircle=9325;e.fourteenparen=9345;e.fourteenperiod=9365\ -;e.fourthai=3668;e.fourthtonechinese=715;e.fparen=9377;e.fraction=8260;e.franc=8355;e.g=103;e.gabengali=2455;e.gacute=501;e.gadeva=2327;e.gafarabic=1711;e.gaffinalarabic=64403;e.gafinitialarabic=64404;e.gafmedialarabic=64405;e.gagujarati=2711;e.gagurmukhi=2583;e.gahiragana=12364;e.gakatakana=12460;e.gamma=947;e.gammalatinsmall=611;e.gammasuperior=736;e.gangiacoptic=1003;e.gbopomofo=12557;e.gbreve=287;e.gcaron=487;e.gcedilla=291;e.gcircle=9430;e.gcircumflex=285;e.gcommaaccent=291;e.gdot=289;e.gdo\ -taccent=289;e.gecyrillic=1075;e.gehiragana=12370;e.gekatakana=12466;e.geometricallyequal=8785;e.gereshaccenthebrew=1436;e.gereshhebrew=1523;e.gereshmuqdamhebrew=1437;e.germandbls=223;e.gershayimaccenthebrew=1438;e.gershayimhebrew=1524;e.getamark=12307;e.ghabengali=2456;e.ghadarmenian=1394;e.ghadeva=2328;e.ghagujarati=2712;e.ghagurmukhi=2584;e.ghainarabic=1594;e.ghainfinalarabic=65230;e.ghaininitialarabic=65231;e.ghainmedialarabic=65232;e.ghemiddlehookcyrillic=1173;e.ghestrokecyrillic=1171;e.gheu\ -pturncyrillic=1169;e.ghhadeva=2394;e.ghhagurmukhi=2650;e.ghook=608;e.ghzsquare=13203;e.gihiragana=12366;e.gikatakana=12462;e.gimarmenian=1379;e.gimel=1490;e.gimeldagesh=64306;e.gimeldageshhebrew=64306;e.gimelhebrew=1490;e.gjecyrillic=1107;e.glottalinvertedstroke=446;e.glottalstop=660;e.glottalstopinverted=662;e.glottalstopmod=704;e.glottalstopreversed=661;e.glottalstopreversedmod=705;e.glottalstopreversedsuperior=740;e.glottalstopstroke=673;e.glottalstopstrokereversed=674;e.gmacron=7713;e.gmonos\ -pace=65351;e.gohiragana=12372;e.gokatakana=12468;e.gparen=9378;e.gpasquare=13228;e.gradient=8711;e.grave=96;e.gravebelowcmb=790;e.gravecmb=768;e.gravecomb=768;e.gravedeva=2387;e.gravelowmod=718;e.gravemonospace=65344;e.gravetonecmb=832;e.greater=62;e.greaterequal=8805;e.greaterequalorless=8923;e.greatermonospace=65310;e.greaterorequivalent=8819;e.greaterorless=8823;e.greateroverequal=8807;e.greatersmall=65125;e.gscript=609;e.gstroke=485;e.guhiragana=12368;e.guillemotleft=171;e.guillemotright=187\ -;e.guilsinglleft=8249;e.guilsinglright=8250;e.gukatakana=12464;e.guramusquare=13080;e.gysquare=13257;e.h=104;e.haabkhasiancyrillic=1193;e.haaltonearabic=1729;e.habengali=2489;e.hadescendercyrillic=1203;e.hadeva=2361;e.hagujarati=2745;e.hagurmukhi=2617;e.haharabic=1581;e.hahfinalarabic=65186;e.hahinitialarabic=65187;e.hahiragana=12399;e.hahmedialarabic=65188;e.haitusquare=13098;e.hakatakana=12495;e.hakatakanahalfwidth=65418;e.halantgurmukhi=2637;e.hamzaarabic=1569;e.hamzalowarabic=1569;e.hangulfi\ -ller=12644;e.hardsigncyrillic=1098;e.harpoonleftbarbup=8636;e.harpoonrightbarbup=8640;e.hasquare=13258;e.hatafpatah=1458;e.hatafpatah16=1458;e.hatafpatah23=1458;e.hatafpatah2f=1458;e.hatafpatahhebrew=1458;e.hatafpatahnarrowhebrew=1458;e.hatafpatahquarterhebrew=1458;e.hatafpatahwidehebrew=1458;e.hatafqamats=1459;e.hatafqamats1b=1459;e.hatafqamats28=1459;e.hatafqamats34=1459;e.hatafqamatshebrew=1459;e.hatafqamatsnarrowhebrew=1459;e.hatafqamatsquarterhebrew=1459;e.hatafqamatswidehebrew=1459;e.hataf\ -segol=1457;e.hatafsegol17=1457;e.hatafsegol24=1457;e.hatafsegol30=1457;e.hatafsegolhebrew=1457;e.hatafsegolnarrowhebrew=1457;e.hatafsegolquarterhebrew=1457;e.hatafsegolwidehebrew=1457;e.hbar=295;e.hbopomofo=12559;e.hbrevebelow=7723;e.hcedilla=7721;e.hcircle=9431;e.hcircumflex=293;e.hdieresis=7719;e.hdotaccent=7715;e.hdotbelow=7717;e.he=1492;e.heart=9829;e.heartsuitblack=9829;e.heartsuitwhite=9825;e.hedagesh=64308;e.hedageshhebrew=64308;e.hehaltonearabic=1729;e.heharabic=1607;e.hehebrew=1492;e.he\ -hfinalaltonearabic=64423;e.hehfinalalttwoarabic=65258;e.hehfinalarabic=65258;e.hehhamzaabovefinalarabic=64421;e.hehhamzaaboveisolatedarabic=64420;e.hehinitialaltonearabic=64424;e.hehinitialarabic=65259;e.hehiragana=12408;e.hehmedialaltonearabic=64425;e.hehmedialarabic=65260;e.heiseierasquare=13179;e.hekatakana=12504;e.hekatakanahalfwidth=65421;e.hekutaarusquare=13110;e.henghook=615;e.herutusquare=13113;e.het=1495;e.hethebrew=1495;e.hhook=614;e.hhooksuperior=689;e.hieuhacirclekorean=12923;e.hieuh\ -aparenkorean=12827;e.hieuhcirclekorean=12909;e.hieuhkorean=12622;e.hieuhparenkorean=12813;e.hihiragana=12402;e.hikatakana=12498;e.hikatakanahalfwidth=65419;e.hiriq=1460;e.hiriq14=1460;e.hiriq21=1460;e.hiriq2d=1460;e.hiriqhebrew=1460;e.hiriqnarrowhebrew=1460;e.hiriqquarterhebrew=1460;e.hiriqwidehebrew=1460;e.hlinebelow=7830;e.hmonospace=65352;e.hoarmenian=1392;e.hohipthai=3627;e.hohiragana=12411;e.hokatakana=12507;e.hokatakanahalfwidth=65422;e.holam=1465;e.holam19=1465;e.holam26=1465;e.holam32=14\ -65;e.holamhebrew=1465;e.holamnarrowhebrew=1465;e.holamquarterhebrew=1465;e.holamwidehebrew=1465;e.honokhukthai=3630;e.hookabovecomb=777;e.hookcmb=777;e.hookpalatalizedbelowcmb=801;e.hookretroflexbelowcmb=802;e.hoonsquare=13122;e.horicoptic=1001;e.horizontalbar=8213;e.horncmb=795;e.hotsprings=9832;e.house=8962;e.hparen=9379;e.hsuperior=688;e.hturned=613;e.huhiragana=12405;e.huiitosquare=13107;e.hukatakana=12501;e.hukatakanahalfwidth=65420;e.hungarumlaut=733;e.hungarumlautcmb=779;e.hv=405;e.hyphen\ -=45;e.hypheninferior=63205;e.hyphenmonospace=65293;e.hyphensmall=65123;e.hyphensuperior=63206;e.hyphentwo=8208;e.i=105;e.iacute=237;e.iacyrillic=1103;e.ibengali=2439;e.ibopomofo=12583;e.ibreve=301;e.icaron=464;e.icircle=9432;e.icircumflex=238;e.icyrillic=1110;e.idblgrave=521;e.ideographearthcircle=12943;e.ideographfirecircle=12939;e.ideographicallianceparen=12863;e.ideographiccallparen=12858;e.ideographiccentrecircle=12965;e.ideographicclose=12294;e.ideographiccomma=12289;e.ideographiccommaleft=\ -65380;e.ideographiccongratulationparen=12855;e.ideographiccorrectcircle=12963;e.ideographicearthparen=12847;e.ideographicenterpriseparen=12861;e.ideographicexcellentcircle=12957;e.ideographicfestivalparen=12864;e.ideographicfinancialcircle=12950;e.ideographicfinancialparen=12854;e.ideographicfireparen=12843;e.ideographichaveparen=12850;e.ideographichighcircle=12964;e.ideographiciterationmark=12293;e.ideographiclaborcircle=12952;e.ideographiclaborparen=12856;e.ideographicleftcircle=12967;e.ideogr\ -aphiclowcircle=12966;e.ideographicmedicinecircle=12969;e.ideographicmetalparen=12846;e.ideographicmoonparen=12842;e.ideographicnameparen=12852;e.ideographicperiod=12290;e.ideographicprintcircle=12958;e.ideographicreachparen=12867;e.ideographicrepresentparen=12857;e.ideographicresourceparen=12862;e.ideographicrightcircle=12968;e.ideographicsecretcircle=12953;e.ideographicselfparen=12866;e.ideographicsocietyparen=12851;e.ideographicspace=12288;e.ideographicspecialparen=12853;e.ideographicstockpare\ -n=12849;e.ideographicstudyparen=12859;e.ideographicsunparen=12848;e.ideographicsuperviseparen=12860;e.ideographicwaterparen=12844;e.ideographicwoodparen=12845;e.ideographiczero=12295;e.ideographmetalcircle=12942;e.ideographmooncircle=12938;e.ideographnamecircle=12948;e.ideographsuncircle=12944;e.ideographwatercircle=12940;e.ideographwoodcircle=12941;e.ideva=2311;e.idieresis=239;e.idieresisacute=7727;e.idieresiscyrillic=1253;e.idotbelow=7883;e.iebrevecyrillic=1239;e.iecyrillic=1077;e.ieungacircle\ -korean=12917;e.ieungaparenkorean=12821;e.ieungcirclekorean=12903;e.ieungkorean=12615;e.ieungparenkorean=12807;e.igrave=236;e.igujarati=2695;e.igurmukhi=2567;e.ihiragana=12356;e.ihookabove=7881;e.iibengali=2440;e.iicyrillic=1080;e.iideva=2312;e.iigujarati=2696;e.iigurmukhi=2568;e.iimatragurmukhi=2624;e.iinvertedbreve=523;e.iishortcyrillic=1081;e.iivowelsignbengali=2496;e.iivowelsigndeva=2368;e.iivowelsigngujarati=2752;e.ij=307;e.ikatakana=12452;e.ikatakanahalfwidth=65394;e.ikorean=12643;e.ilde=73\ -2;e.iluyhebrew=1452;e.imacron=299;e.imacroncyrillic=1251;e.imageorapproximatelyequal=8787;e.imatragurmukhi=2623;e.imonospace=65353;e.increment=8710;e.infinity=8734;e.iniarmenian=1387;e.integral=8747;e.integralbottom=8993;e.integralbt=8993;e.integralex=63733;e.integraltop=8992;e.integraltp=8992;e.intersection=8745;e.intisquare=13061;e.invbullet=9688;e.invcircle=9689;e.invsmileface=9787;e.iocyrillic=1105;e.iogonek=303;e.iota=953;e.iotadieresis=970;e.iotadieresistonos=912;e.iotalatin=617;e.iotatono\ -s=943;e.iparen=9380;e.irigurmukhi=2674;e.ismallhiragana=12355;e.ismallkatakana=12451;e.ismallkatakanahalfwidth=65384;e.issharbengali=2554;e.istroke=616;e.isuperior=63213;e.iterationhiragana=12445;e.iterationkatakana=12541;e.itilde=297;e.itildebelow=7725;e.iubopomofo=12585;e.iucyrillic=1102;e.ivowelsignbengali=2495;e.ivowelsigndeva=2367;e.ivowelsigngujarati=2751;e.izhitsacyrillic=1141;e.izhitsadblgravecyrillic=1143;e.j=106;e.jaarmenian=1393;e.jabengali=2460;e.jadeva=2332;e.jagujarati=2716;e.jagur\ -mukhi=2588;e.jbopomofo=12560;e.jcaron=496;e.jcircle=9433;e.jcircumflex=309;e.jcrossedtail=669;e.jdotlessstroke=607;e.jecyrillic=1112;e.jeemarabic=1580;e.jeemfinalarabic=65182;e.jeeminitialarabic=65183;e.jeemmedialarabic=65184;e.jeharabic=1688;e.jehfinalarabic=64395;e.jhabengali=2461;e.jhadeva=2333;e.jhagujarati=2717;e.jhagurmukhi=2589;e.jheharmenian=1403;e.jis=12292;e.jmonospace=65354;e.jparen=9381;e.jsuperior=690;e.k=107;e.kabashkircyrillic=1185;e.kabengali=2453;e.kacute=7729;e.kacyrillic=1082;\ -e.kadescendercyrillic=1179;e.kadeva=2325;e.kaf=1499;e.kafarabic=1603;e.kafdagesh=64315;e.kafdageshhebrew=64315;e.kaffinalarabic=65242;e.kafhebrew=1499;e.kafinitialarabic=65243;e.kafmedialarabic=65244;e.kafrafehebrew=64333;e.kagujarati=2709;e.kagurmukhi=2581;e.kahiragana=12363;e.kahookcyrillic=1220;e.kakatakana=12459;e.kakatakanahalfwidth=65398;e.kappa=954;e.kappasymbolgreek=1008;e.kapyeounmieumkorean=12657;e.kapyeounphieuphkorean=12676;e.kapyeounpieupkorean=12664;e.kapyeounssangpieupkorean=12665\ -;e.karoriisquare=13069;e.kashidaautoarabic=1600;e.kashidaautonosidebearingarabic=1600;e.kasmallkatakana=12533;e.kasquare=13188;e.kasraarabic=1616;e.kasratanarabic=1613;e.kastrokecyrillic=1183;e.katahiraprolongmarkhalfwidth=65392;e.kaverticalstrokecyrillic=1181;e.kbopomofo=12558;e.kcalsquare=13193;e.kcaron=489;e.kcedilla=311;e.kcircle=9434;e.kcommaaccent=311;e.kdotbelow=7731;e.keharmenian=1412;e.kehiragana=12369;e.kekatakana=12465;e.kekatakanahalfwidth=65401;e.kenarmenian=1391;e.kesmallkatakana=1\ -2534;e.kgreenlandic=312;e.khabengali=2454;e.khacyrillic=1093;e.khadeva=2326;e.khagujarati=2710;e.khagurmukhi=2582;e.khaharabic=1582;e.khahfinalarabic=65190;e.khahinitialarabic=65191;e.khahmedialarabic=65192;e.kheicoptic=999;e.khhadeva=2393;e.khhagurmukhi=2649;e.khieukhacirclekorean=12920;e.khieukhaparenkorean=12824;e.khieukhcirclekorean=12906;e.khieukhkorean=12619;e.khieukhparenkorean=12810;e.khokhaithai=3586;e.khokhonthai=3589;e.khokhuatthai=3587;e.khokhwaithai=3588;e.khomutthai=3675;e.khook=40\ -9;e.khorakhangthai=3590;e.khzsquare=13201;e.kihiragana=12365;e.kikatakana=12461;e.kikatakanahalfwidth=65399;e.kiroguramusquare=13077;e.kiromeetorusquare=13078;e.kirosquare=13076;e.kiyeokacirclekorean=12910;e.kiyeokaparenkorean=12814;e.kiyeokcirclekorean=12896;e.kiyeokkorean=12593;e.kiyeokparenkorean=12800;e.kiyeoksioskorean=12595;e.kjecyrillic=1116;e.klinebelow=7733;e.klsquare=13208;e.kmcubedsquare=13222;e.kmonospace=65355;e.kmsquaredsquare=13218;e.kohiragana=12371;e.kohmsquare=13248;e.kokaithai\ -=3585;e.kokatakana=12467;e.kokatakanahalfwidth=65402;e.kooposquare=13086;e.koppacyrillic=1153;e.koreanstandardsymbol=12927;e.koroniscmb=835;e.kparen=9382;e.kpasquare=13226;e.ksicyrillic=1135;e.ktsquare=13263;e.kturned=670;e.kuhiragana=12367;e.kukatakana=12463;e.kukatakanahalfwidth=65400;e.kvsquare=13240;e.kwsquare=13246;e.l=108;e.labengali=2482;e.lacute=314;e.ladeva=2354;e.lagujarati=2738;e.lagurmukhi=2610;e.lakkhangyaothai=3653;e.lamaleffinalarabic=65276;e.lamalefhamzaabovefinalarabic=65272;e.l\ -amalefhamzaaboveisolatedarabic=65271;e.lamalefhamzabelowfinalarabic=65274;e.lamalefhamzabelowisolatedarabic=65273;e.lamalefisolatedarabic=65275;e.lamalefmaddaabovefinalarabic=65270;e.lamalefmaddaaboveisolatedarabic=65269;e.lamarabic=1604;e.lambda=955;e.lambdastroke=411;e.lamed=1500;e.lameddagesh=64316;e.lameddageshhebrew=64316;e.lamedhebrew=1500;e.lamfinalarabic=65246;e.lamhahinitialarabic=64714;e.laminitialarabic=65247;e.lamjeeminitialarabic=64713;e.lamkhahinitialarabic=64715;e.lamlamhehisolate\ -darabic=65010;e.lammedialarabic=65248;e.lammeemhahinitialarabic=64904;e.lammeeminitialarabic=64716;e.largecircle=9711;e.lbar=410;e.lbelt=620;e.lbopomofo=12556;e.lcaron=318;e.lcedilla=316;e.lcircle=9435;e.lcircumflexbelow=7741;e.lcommaaccent=316;e.ldot=320;e.ldotaccent=320;e.ldotbelow=7735;e.ldotbelowmacron=7737;e.leftangleabovecmb=794;e.lefttackbelowcmb=792;e.less=60;e.lessequal=8804;e.lessequalorgreater=8922;e.lessmonospace=65308;e.lessorequivalent=8818;e.lessorgreater=8822;e.lessoverequal=8806\ -;e.lesssmall=65124;e.lezh=622;e.lfblock=9612;e.lhookretroflex=621;e.lira=8356;e.liwnarmenian=1388;e.lj=457;e.ljecyrillic=1113;e.ll=63168;e.lladeva=2355;e.llagujarati=2739;e.llinebelow=7739;e.llladeva=2356;e.llvocalicbengali=2529;e.llvocalicdeva=2401;e.llvocalicvowelsignbengali=2531;e.llvocalicvowelsigndeva=2403;e.lmiddletilde=619;e.lmonospace=65356;e.lmsquare=13264;e.lochulathai=3628;e.logicaland=8743;e.logicalnot=172;e.logicalnotreversed=8976;e.logicalor=8744;e.lolingthai=3621;e.longs=383;e.low\ -linecenterline=65102;e.lowlinecmb=818;e.lowlinedashed=65101;e.lozenge=9674;e.lparen=9383;e.lslash=322;e.lsquare=8467;e.lsuperior=63214;e.ltshade=9617;e.luthai=3622;e.lvocalicbengali=2444;e.lvocalicdeva=2316;e.lvocalicvowelsignbengali=2530;e.lvocalicvowelsigndeva=2402;e.lxsquare=13267;e.m=109;e.mabengali=2478;e.macron=175;e.macronbelowcmb=817;e.macroncmb=772;e.macronlowmod=717;e.macronmonospace=65507;e.macute=7743;e.madeva=2350;e.magujarati=2734;e.magurmukhi=2606;e.mahapakhhebrew=1444;e.mahapakhl\ -efthebrew=1444;e.mahiragana=12414;e.maichattawalowleftthai=63637;e.maichattawalowrightthai=63636;e.maichattawathai=3659;e.maichattawaupperleftthai=63635;e.maieklowleftthai=63628;e.maieklowrightthai=63627;e.maiekthai=3656;e.maiekupperleftthai=63626;e.maihanakatleftthai=63620;e.maihanakatthai=3633;e.maitaikhuleftthai=63625;e.maitaikhuthai=3655;e.maitholowleftthai=63631;e.maitholowrightthai=63630;e.maithothai=3657;e.maithoupperleftthai=63629;e.maitrilowleftthai=63634;e.maitrilowrightthai=63633;e.ma\ -itrithai=3658;e.maitriupperleftthai=63632;e.maiyamokthai=3654;e.makatakana=12510;e.makatakanahalfwidth=65423;e.male=9794;e.mansyonsquare=13127;e.maqafhebrew=1470;e.mars=9794;e.masoracirclehebrew=1455;e.masquare=13187;e.mbopomofo=12551;e.mbsquare=13268;e.mcircle=9436;e.mcubedsquare=13221;e.mdotaccent=7745;e.mdotbelow=7747;e.meemarabic=1605;e.meemfinalarabic=65250;e.meeminitialarabic=65251;e.meemmedialarabic=65252;e.meemmeeminitialarabic=64721;e.meemmeemisolatedarabic=64584;e.meetorusquare=13133;e\ -.mehiragana=12417;e.meizierasquare=13182;e.mekatakana=12513;e.mekatakanahalfwidth=65426;e.mem=1502;e.memdagesh=64318;e.memdageshhebrew=64318;e.memhebrew=1502;e.menarmenian=1396;e.merkhahebrew=1445;e.merkhakefulahebrew=1446;e.merkhakefulalefthebrew=1446;e.merkhalefthebrew=1445;e.mhook=625;e.mhzsquare=13202;e.middledotkatakanahalfwidth=65381;e.middot=183;e.mieumacirclekorean=12914;e.mieumaparenkorean=12818;e.mieumcirclekorean=12900;e.mieumkorean=12609;e.mieumpansioskorean=12656;e.mieumparenkorean=\ -12804;e.mieumpieupkorean=12654;e.mieumsioskorean=12655;e.mihiragana=12415;e.mikatakana=12511;e.mikatakanahalfwidth=65424;e.minus=8722;e.minusbelowcmb=800;e.minuscircle=8854;e.minusmod=727;e.minusplus=8723;e.minute=8242;e.miribaarusquare=13130;e.mirisquare=13129;e.mlonglegturned=624;e.mlsquare=13206;e.mmcubedsquare=13219;e.mmonospace=65357;e.mmsquaredsquare=13215;e.mohiragana=12418;e.mohmsquare=13249;e.mokatakana=12514;e.mokatakanahalfwidth=65427;e.molsquare=13270;e.momathai=3617;e.moverssquare=1\ -3223;e.moverssquaredsquare=13224;e.mparen=9384;e.mpasquare=13227;e.mssquare=13235;e.msuperior=63215;e.mturned=623;e.mu=181;e.mu1=181;e.muasquare=13186;e.muchgreater=8811;e.muchless=8810;e.mufsquare=13196;e.mugreek=956;e.mugsquare=13197;e.muhiragana=12416;e.mukatakana=12512;e.mukatakanahalfwidth=65425;e.mulsquare=13205;e.multiply=215;e.mumsquare=13211;e.munahhebrew=1443;e.munahlefthebrew=1443;e.musicalnote=9834;e.musicalnotedbl=9835;e.musicflatsign=9837;e.musicsharpsign=9839;e.mussquare=13234;e.m\ -uvsquare=13238;e.muwsquare=13244;e.mvmegasquare=13241;e.mvsquare=13239;e.mwmegasquare=13247;e.mwsquare=13245;e.n=110;e.nabengali=2472;e.nabla=8711;e.nacute=324;e.nadeva=2344;e.nagujarati=2728;e.nagurmukhi=2600;e.nahiragana=12394;e.nakatakana=12490;e.nakatakanahalfwidth=65413;e.napostrophe=329;e.nasquare=13185;e.nbopomofo=12555;e.nbspace=160;e.ncaron=328;e.ncedilla=326;e.ncircle=9437;e.ncircumflexbelow=7755;e.ncommaaccent=326;e.ndotaccent=7749;e.ndotbelow=7751;e.nehiragana=12397;e.nekatakana=1249\ -3;e.nekatakanahalfwidth=65416;e.newsheqelsign=8362;e.nfsquare=13195;e.ngabengali=2457;e.ngadeva=2329;e.ngagujarati=2713;e.ngagurmukhi=2585;e.ngonguthai=3591;e.nhiragana=12435;e.nhookleft=626;e.nhookretroflex=627;e.nieunacirclekorean=12911;e.nieunaparenkorean=12815;e.nieuncieuckorean=12597;e.nieuncirclekorean=12897;e.nieunhieuhkorean=12598;e.nieunkorean=12596;e.nieunpansioskorean=12648;e.nieunparenkorean=12801;e.nieunsioskorean=12647;e.nieuntikeutkorean=12646;e.nihiragana=12395;e.nikatakana=12491\ -;e.nikatakanahalfwidth=65414;e.nikhahitleftthai=63641;e.nikhahitthai=3661;e.nine=57;e.ninearabic=1641;e.ninebengali=2543;e.ninecircle=9320;e.ninecircleinversesansserif=10130;e.ninedeva=2415;e.ninegujarati=2799;e.ninegurmukhi=2671;e.ninehackarabic=1641;e.ninehangzhou=12329;e.nineideographicparen=12840;e.nineinferior=8329;e.ninemonospace=65305;e.nineoldstyle=63289;e.nineparen=9340;e.nineperiod=9360;e.ninepersian=1785;e.nineroman=8568;e.ninesuperior=8313;e.nineteencircle=9330;e.nineteenparen=9350;e\ -.nineteenperiod=9370;e.ninethai=3673;e.nj=460;e.njecyrillic=1114;e.nkatakana=12531;e.nkatakanahalfwidth=65437;e.nlegrightlong=414;e.nlinebelow=7753;e.nmonospace=65358;e.nmsquare=13210;e.nnabengali=2467;e.nnadeva=2339;e.nnagujarati=2723;e.nnagurmukhi=2595;e.nnnadeva=2345;e.nohiragana=12398;e.nokatakana=12494;e.nokatakanahalfwidth=65417;e.nonbreakingspace=160;e.nonenthai=3603;e.nonuthai=3609;e.noonarabic=1606;e.noonfinalarabic=65254;e.noonghunnaarabic=1722;e.noonghunnafinalarabic=64415;e.nooniniti\ -alarabic=65255;e.noonjeeminitialarabic=64722;e.noonjeemisolatedarabic=64587;e.noonmedialarabic=65256;e.noonmeeminitialarabic=64725;e.noonmeemisolatedarabic=64590;e.noonnoonfinalarabic=64653;e.notcontains=8716;e.notelement=8713;e.notelementof=8713;e.notequal=8800;e.notgreater=8815;e.notgreaternorequal=8817;e.notgreaternorless=8825;e.notidentical=8802;e.notless=8814;e.notlessnorequal=8816;e.notparallel=8742;e.notprecedes=8832;e.notsubset=8836;e.notsucceeds=8833;e.notsuperset=8837;e.nowarmenian=139\ -8;e.nparen=9385;e.nssquare=13233;e.nsuperior=8319;e.ntilde=241;e.nu=957;e.nuhiragana=12396;e.nukatakana=12492;e.nukatakanahalfwidth=65415;e.nuktabengali=2492;e.nuktadeva=2364;e.nuktagujarati=2748;e.nuktagurmukhi=2620;e.numbersign=35;e.numbersignmonospace=65283;e.numbersignsmall=65119;e.numeralsigngreek=884;e.numeralsignlowergreek=885;e.numero=8470;e.nun=1504;e.nundagesh=64320;e.nundageshhebrew=64320;e.nunhebrew=1504;e.nvsquare=13237;e.nwsquare=13243;e.nyabengali=2462;e.nyadeva=2334;e.nyagujarati\ -=2718;e.nyagurmukhi=2590;e.o=111;e.oacute=243;e.oangthai=3629;e.obarred=629;e.obarredcyrillic=1257;e.obarreddieresiscyrillic=1259;e.obengali=2451;e.obopomofo=12571;e.obreve=335;e.ocandradeva=2321;e.ocandragujarati=2705;e.ocandravowelsigndeva=2377;e.ocandravowelsigngujarati=2761;e.ocaron=466;e.ocircle=9438;e.ocircumflex=244;e.ocircumflexacute=7889;e.ocircumflexdotbelow=7897;e.ocircumflexgrave=7891;e.ocircumflexhookabove=7893;e.ocircumflextilde=7895;e.ocyrillic=1086;e.odblacute=337;e.odblgrave=525\ -;e.odeva=2323;e.odieresis=246;e.odieresiscyrillic=1255;e.odotbelow=7885;e.oe=339;e.oekorean=12634;e.ogonek=731;e.ogonekcmb=808;e.ograve=242;e.ogujarati=2707;e.oharmenian=1413;e.ohiragana=12362;e.ohookabove=7887;e.ohorn=417;e.ohornacute=7899;e.ohorndotbelow=7907;e.ohorngrave=7901;e.ohornhookabove=7903;e.ohorntilde=7905;e.ohungarumlaut=337;e.oi=419;e.oinvertedbreve=527;e.okatakana=12458;e.okatakanahalfwidth=65397;e.okorean=12631;e.olehebrew=1451;e.omacron=333;e.omacronacute=7763;e.omacrongrave=776\ -1;e.omdeva=2384;e.omega=969;e.omega1=982;e.omegacyrillic=1121;e.omegalatinclosed=631;e.omegaroundcyrillic=1147;e.omegatitlocyrillic=1149;e.omegatonos=974;e.omgujarati=2768;e.omicron=959;e.omicrontonos=972;e.omonospace=65359;e.one=49;e.onearabic=1633;e.onebengali=2535;e.onecircle=9312;e.onecircleinversesansserif=10122;e.onedeva=2407;e.onedotenleader=8228;e.oneeighth=8539;e.onefitted=63196;e.onegujarati=2791;e.onegurmukhi=2663;e.onehackarabic=1633;e.onehalf=189;e.onehangzhou=12321;e.oneideographic\ -paren=12832;e.oneinferior=8321;e.onemonospace=65297;e.onenumeratorbengali=2548;e.oneoldstyle=63281;e.oneparen=9332;e.oneperiod=9352;e.onepersian=1777;e.onequarter=188;e.oneroman=8560;e.onesuperior=185;e.onethai=3665;e.onethird=8531;e.oogonek=491;e.oogonekmacron=493;e.oogurmukhi=2579;e.oomatragurmukhi=2635;e.oopen=596;e.oparen=9386;e.openbullet=9702;e.option=8997;e.ordfeminine=170;e.ordmasculine=186;e.orthogonal=8735;e.oshortdeva=2322;e.oshortvowelsigndeva=2378;e.oslash=248;e.oslashacute=511;e.os\ -mallhiragana=12361;e.osmallkatakana=12457;e.osmallkatakanahalfwidth=65387;e.ostrokeacute=511;e.osuperior=63216;e.otcyrillic=1151;e.otilde=245;e.otildeacute=7757;e.otildedieresis=7759;e.oubopomofo=12577;e.overline=8254;e.overlinecenterline=65098;e.overlinecmb=773;e.overlinedashed=65097;e.overlinedblwavy=65100;e.overlinewavy=65099;e.overscore=175;e.ovowelsignbengali=2507;e.ovowelsigndeva=2379;e.ovowelsigngujarati=2763;e.p=112;e.paampssquare=13184;e.paasentosquare=13099;e.pabengali=2474;e.pacute=77\ -65;e.padeva=2346;e.pagedown=8671;e.pageup=8670;e.pagujarati=2730;e.pagurmukhi=2602;e.pahiragana=12401;e.paiyannoithai=3631;e.pakatakana=12497;e.palatalizationcyrilliccmb=1156;e.palochkacyrillic=1216;e.pansioskorean=12671;e.paragraph=182;e.parallel=8741;e.parenleft=40;e.parenleftaltonearabic=64830;e.parenleftbt=63725;e.parenleftex=63724;e.parenleftinferior=8333;e.parenleftmonospace=65288;e.parenleftsmall=65113;e.parenleftsuperior=8317;e.parenlefttp=63723;e.parenleftvertical=65077;e.parenright=41;\ -e.parenrightaltonearabic=64831;e.parenrightbt=63736;e.parenrightex=63735;e.parenrightinferior=8334;e.parenrightmonospace=65289;e.parenrightsmall=65114;e.parenrightsuperior=8318;e.parenrighttp=63734;e.parenrightvertical=65078;e.partialdiff=8706;e.paseqhebrew=1472;e.pashtahebrew=1433;e.pasquare=13225;e.patah=1463;e.patah11=1463;e.patah1d=1463;e.patah2a=1463;e.patahhebrew=1463;e.patahnarrowhebrew=1463;e.patahquarterhebrew=1463;e.patahwidehebrew=1463;e.pazerhebrew=1441;e.pbopomofo=12550;e.pcircle=94\ -39;e.pdotaccent=7767;e.pe=1508;e.pecyrillic=1087;e.pedagesh=64324;e.pedageshhebrew=64324;e.peezisquare=13115;e.pefinaldageshhebrew=64323;e.peharabic=1662;e.peharmenian=1402;e.pehebrew=1508;e.pehfinalarabic=64343;e.pehinitialarabic=64344;e.pehiragana=12410;e.pehmedialarabic=64345;e.pekatakana=12506;e.pemiddlehookcyrillic=1191;e.perafehebrew=64334;e.percent=37;e.percentarabic=1642;e.percentmonospace=65285;e.percentsmall=65130;e.period=46;e.periodarmenian=1417;e.periodcentered=183;e.periodhalfwidth\ -=65377;e.periodinferior=63207;e.periodmonospace=65294;e.periodsmall=65106;e.periodsuperior=63208;e.perispomenigreekcmb=834;e.perpendicular=8869;e.perthousand=8240;e.peseta=8359;e.pfsquare=13194;e.phabengali=2475;e.phadeva=2347;e.phagujarati=2731;e.phagurmukhi=2603;e.phi=966;e.phi1=981;e.phieuphacirclekorean=12922;e.phieuphaparenkorean=12826;e.phieuphcirclekorean=12908;e.phieuphkorean=12621;e.phieuphparenkorean=12812;e.philatin=632;e.phinthuthai=3642;e.phisymbolgreek=981;e.phook=421;e.phophanthai\ -=3614;e.phophungthai=3612;e.phosamphaothai=3616;e.pi=960;e.pieupacirclekorean=12915;e.pieupaparenkorean=12819;e.pieupcieuckorean=12662;e.pieupcirclekorean=12901;e.pieupkiyeokkorean=12658;e.pieupkorean=12610;e.pieupparenkorean=12805;e.pieupsioskiyeokkorean=12660;e.pieupsioskorean=12612;e.pieupsiostikeutkorean=12661;e.pieupthieuthkorean=12663;e.pieuptikeutkorean=12659;e.pihiragana=12404;e.pikatakana=12500;e.pisymbolgreek=982;e.piwrarmenian=1411;e.planckover2pi=8463;e.planckover2pi1=8463;e.plus=43;\ -e.plusbelowcmb=799;e.pluscircle=8853;e.plusminus=177;e.plusmod=726;e.plusmonospace=65291;e.plussmall=65122;e.plussuperior=8314;e.pmonospace=65360;e.pmsquare=13272;e.pohiragana=12413;e.pointingindexdownwhite=9759;e.pointingindexleftwhite=9756;e.pointingindexrightwhite=9758;e.pointingindexupwhite=9757;e.pokatakana=12509;e.poplathai=3611;e.postalmark=12306;e.postalmarkface=12320;e.pparen=9387;e.precedes=8826;e.prescription=8478;e.primemod=697;e.primereversed=8245;e.product=8719;e.projective=8965;e.\ -prolongedkana=12540;e.propellor=8984;e.propersubset=8834;e.propersuperset=8835;e.proportion=8759;e.proportional=8733;e.psi=968;e.psicyrillic=1137;e.psilipneumatacyrilliccmb=1158;e.pssquare=13232;e.puhiragana=12407;e.pukatakana=12503;e.pvsquare=13236;e.pwsquare=13242;e.q=113;e.qadeva=2392;e.qadmahebrew=1448;e.qafarabic=1602;e.qaffinalarabic=65238;e.qafinitialarabic=65239;e.qafmedialarabic=65240;e.qamats=1464;e.qamats10=1464;e.qamats1a=1464;e.qamats1c=1464;e.qamats27=1464;e.qamats29=1464;e.qamats3\ -3=1464;e.qamatsde=1464;e.qamatshebrew=1464;e.qamatsnarrowhebrew=1464;e.qamatsqatanhebrew=1464;e.qamatsqatannarrowhebrew=1464;e.qamatsqatanquarterhebrew=1464;e.qamatsqatanwidehebrew=1464;e.qamatsquarterhebrew=1464;e.qamatswidehebrew=1464;e.qarneyparahebrew=1439;e.qbopomofo=12561;e.qcircle=9440;e.qhook=672;e.qmonospace=65361;e.qof=1511;e.qofdagesh=64327;e.qofdageshhebrew=64327;e.qofhebrew=1511;e.qparen=9388;e.quarternote=9833;e.qubuts=1467;e.qubuts18=1467;e.qubuts25=1467;e.qubuts31=1467;e.qubutshe\ -brew=1467;e.qubutsnarrowhebrew=1467;e.qubutsquarterhebrew=1467;e.qubutswidehebrew=1467;e.question=63;e.questionarabic=1567;e.questionarmenian=1374;e.questiondown=191;e.questiondownsmall=63423;e.questiongreek=894;e.questionmonospace=65311;e.questionsmall=63295;e.quotedbl=34;e.quotedblbase=8222;e.quotedblleft=8220;e.quotedblmonospace=65282;e.quotedblprime=12318;e.quotedblprimereversed=12317;e.quotedblright=8221;e.quoteleft=8216;e.quoteleftreversed=8219;e.quotereversed=8219;e.quoteright=8217;e.quot\ -erightn=329;e.quotesinglbase=8218;e.quotesingle=39;e.quotesinglemonospace=65287;e.r=114;e.raarmenian=1404;e.rabengali=2480;e.racute=341;e.radeva=2352;e.radical=8730;e.radicalex=63717;e.radoverssquare=13230;e.radoverssquaredsquare=13231;e.radsquare=13229;e.rafe=1471;e.rafehebrew=1471;e.ragujarati=2736;e.ragurmukhi=2608;e.rahiragana=12425;e.rakatakana=12521;e.rakatakanahalfwidth=65431;e.ralowerdiagonalbengali=2545;e.ramiddlediagonalbengali=2544;e.ramshorn=612;e.ratio=8758;e.rbopomofo=12566;e.rcaro\ -n=345;e.rcedilla=343;e.rcircle=9441;e.rcommaaccent=343;e.rdblgrave=529;e.rdotaccent=7769;e.rdotbelow=7771;e.rdotbelowmacron=7773;e.referencemark=8251;e.reflexsubset=8838;e.reflexsuperset=8839;e.registered=174;e.registersans=63720;e.registerserif=63194;e.reharabic=1585;e.reharmenian=1408;e.rehfinalarabic=65198;e.rehiragana=12428;e.rekatakana=12524;e.rekatakanahalfwidth=65434;e.resh=1512;e.reshdageshhebrew=64328;e.reshhebrew=1512;e.reversedtilde=8765;e.reviahebrew=1431;e.reviamugrashhebrew=1431;e.\ -revlogicalnot=8976;e.rfishhook=638;e.rfishhookreversed=639;e.rhabengali=2525;e.rhadeva=2397;e.rho=961;e.rhook=637;e.rhookturned=635;e.rhookturnedsuperior=693;e.rhosymbolgreek=1009;e.rhotichookmod=734;e.rieulacirclekorean=12913;e.rieulaparenkorean=12817;e.rieulcirclekorean=12899;e.rieulhieuhkorean=12608;e.rieulkiyeokkorean=12602;e.rieulkiyeoksioskorean=12649;e.rieulkorean=12601;e.rieulmieumkorean=12603;e.rieulpansioskorean=12652;e.rieulparenkorean=12803;e.rieulphieuphkorean=12607;e.rieulpieupkore\ -an=12604;e.rieulpieupsioskorean=12651;e.rieulsioskorean=12605;e.rieulthieuthkorean=12606;e.rieultikeutkorean=12650;e.rieulyeorinhieuhkorean=12653;e.rightangle=8735;e.righttackbelowcmb=793;e.righttriangle=8895;e.rihiragana=12426;e.rikatakana=12522;e.rikatakanahalfwidth=65432;e.ring=730;e.ringbelowcmb=805;e.ringcmb=778;e.ringhalfleft=703;e.ringhalfleftarmenian=1369;e.ringhalfleftbelowcmb=796;e.ringhalfleftcentered=723;e.ringhalfright=702;e.ringhalfrightbelowcmb=825;e.ringhalfrightcentered=722;e.ri\ -nvertedbreve=531;e.rittorusquare=13137;e.rlinebelow=7775;e.rlongleg=636;e.rlonglegturned=634;e.rmonospace=65362;e.rohiragana=12429;e.rokatakana=12525;e.rokatakanahalfwidth=65435;e.roruathai=3619;e.rparen=9389;e.rrabengali=2524;e.rradeva=2353;e.rragurmukhi=2652;e.rreharabic=1681;e.rrehfinalarabic=64397;e.rrvocalicbengali=2528;e.rrvocalicdeva=2400;e.rrvocalicgujarati=2784;e.rrvocalicvowelsignbengali=2500;e.rrvocalicvowelsigndeva=2372;e.rrvocalicvowelsigngujarati=2756;e.rsuperior=63217;e.rtblock=96\ -16;e.rturned=633;e.rturnedsuperior=692;e.ruhiragana=12427;e.rukatakana=12523;e.rukatakanahalfwidth=65433;e.rupeemarkbengali=2546;e.rupeesignbengali=2547;e.rupiah=63197;e.ruthai=3620;e.rvocalicbengali=2443;e.rvocalicdeva=2315;e.rvocalicgujarati=2699;e.rvocalicvowelsignbengali=2499;e.rvocalicvowelsigndeva=2371;e.rvocalicvowelsigngujarati=2755;e.s=115;e.sabengali=2488;e.sacute=347;e.sacutedotaccent=7781;e.sadarabic=1589;e.sadeva=2360;e.sadfinalarabic=65210;e.sadinitialarabic=65211;e.sadmedialarabic\ -=65212;e.sagujarati=2744;e.sagurmukhi=2616;e.sahiragana=12373;e.sakatakana=12469;e.sakatakanahalfwidth=65403;e.sallallahoualayhewasallamarabic=65018;e.samekh=1505;e.samekhdagesh=64321;e.samekhdageshhebrew=64321;e.samekhhebrew=1505;e.saraaathai=3634;e.saraaethai=3649;e.saraaimaimalaithai=3652;e.saraaimaimuanthai=3651;e.saraamthai=3635;e.saraathai=3632;e.saraethai=3648;e.saraiileftthai=63622;e.saraiithai=3637;e.saraileftthai=63621;e.saraithai=3636;e.saraothai=3650;e.saraueeleftthai=63624;e.sarauee\ -thai=3639;e.saraueleftthai=63623;e.sarauethai=3638;e.sarauthai=3640;e.sarauuthai=3641;e.sbopomofo=12569;e.scaron=353;e.scarondotaccent=7783;e.scedilla=351;e.schwa=601;e.schwacyrillic=1241;e.schwadieresiscyrillic=1243;e.schwahook=602;e.scircle=9442;e.scircumflex=349;e.scommaaccent=537;e.sdotaccent=7777;e.sdotbelow=7779;e.sdotbelowdotaccent=7785;e.seagullbelowcmb=828;e.second=8243;e.secondtonechinese=714;e.section=167;e.seenarabic=1587;e.seenfinalarabic=65202;e.seeninitialarabic=65203;e.seenmedial\ -arabic=65204;e.segol=1462;e.segol13=1462;e.segol1f=1462;e.segol2c=1462;e.segolhebrew=1462;e.segolnarrowhebrew=1462;e.segolquarterhebrew=1462;e.segoltahebrew=1426;e.segolwidehebrew=1462;e.seharmenian=1405;e.sehiragana=12379;e.sekatakana=12475;e.sekatakanahalfwidth=65406;e.semicolon=59;e.semicolonarabic=1563;e.semicolonmonospace=65307;e.semicolonsmall=65108;e.semivoicedmarkkana=12444;e.semivoicedmarkkanahalfwidth=65439;e.sentisquare=13090;e.sentosquare=13091;e.seven=55;e.sevenarabic=1639;e.sevenbe\ -ngali=2541;e.sevencircle=9318;e.sevencircleinversesansserif=10128;e.sevendeva=2413;e.seveneighths=8542;e.sevengujarati=2797;e.sevengurmukhi=2669;e.sevenhackarabic=1639;e.sevenhangzhou=12327;e.sevenideographicparen=12838;e.seveninferior=8327;e.sevenmonospace=65303;e.sevenoldstyle=63287;e.sevenparen=9338;e.sevenperiod=9358;e.sevenpersian=1783;e.sevenroman=8566;e.sevensuperior=8311;e.seventeencircle=9328;e.seventeenparen=9348;e.seventeenperiod=9368;e.seventhai=3671;e.sfthyphen=173;e.shaarmenian=139\ -9;e.shabengali=2486;e.shacyrillic=1096;e.shaddaarabic=1617;e.shaddadammaarabic=64609;e.shaddadammatanarabic=64606;e.shaddafathaarabic=64608;e.shaddakasraarabic=64610;e.shaddakasratanarabic=64607;e.shade=9618;e.shadedark=9619;e.shadelight=9617;e.shademedium=9618;e.shadeva=2358;e.shagujarati=2742;e.shagurmukhi=2614;e.shalshelethebrew=1427;e.shbopomofo=12565;e.shchacyrillic=1097;e.sheenarabic=1588;e.sheenfinalarabic=65206;e.sheeninitialarabic=65207;e.sheenmedialarabic=65208;e.sheicoptic=995;e.sheqe\ -l=8362;e.sheqelhebrew=8362;e.sheva=1456;e.sheva115=1456;e.sheva15=1456;e.sheva22=1456;e.sheva2e=1456;e.shevahebrew=1456;e.shevanarrowhebrew=1456;e.shevaquarterhebrew=1456;e.shevawidehebrew=1456;e.shhacyrillic=1211;e.shimacoptic=1005;e.shin=1513;e.shindagesh=64329;e.shindageshhebrew=64329;e.shindageshshindot=64300;e.shindageshshindothebrew=64300;e.shindageshsindot=64301;e.shindageshsindothebrew=64301;e.shindothebrew=1473;e.shinhebrew=1513;e.shinshindot=64298;e.shinshindothebrew=64298;e.shinsindot\ -=64299;e.shinsindothebrew=64299;e.shook=642;e.sigma=963;e.sigma1=962;e.sigmafinal=962;e.sigmalunatesymbolgreek=1010;e.sihiragana=12375;e.sikatakana=12471;e.sikatakanahalfwidth=65404;e.siluqhebrew=1469;e.siluqlefthebrew=1469;e.similar=8764;e.sindothebrew=1474;e.siosacirclekorean=12916;e.siosaparenkorean=12820;e.sioscieuckorean=12670;e.sioscirclekorean=12902;e.sioskiyeokkorean=12666;e.sioskorean=12613;e.siosnieunkorean=12667;e.siosparenkorean=12806;e.siospieupkorean=12669;e.siostikeutkorean=12668;\ -e.six=54;e.sixarabic=1638;e.sixbengali=2540;e.sixcircle=9317;e.sixcircleinversesansserif=10127;e.sixdeva=2412;e.sixgujarati=2796;e.sixgurmukhi=2668;e.sixhackarabic=1638;e.sixhangzhou=12326;e.sixideographicparen=12837;e.sixinferior=8326;e.sixmonospace=65302;e.sixoldstyle=63286;e.sixparen=9337;e.sixperiod=9357;e.sixpersian=1782;e.sixroman=8565;e.sixsuperior=8310;e.sixteencircle=9327;e.sixteencurrencydenominatorbengali=2553;e.sixteenparen=9347;e.sixteenperiod=9367;e.sixthai=3670;e.slash=47;e.slashm\ -onospace=65295;e.slong=383;e.slongdotaccent=7835;e.smileface=9786;e.smonospace=65363;e.sofpasuqhebrew=1475;e.softhyphen=173;e.softsigncyrillic=1100;e.sohiragana=12381;e.sokatakana=12477;e.sokatakanahalfwidth=65407;e.soliduslongoverlaycmb=824;e.solidusshortoverlaycmb=823;e.sorusithai=3625;e.sosalathai=3624;e.sosothai=3595;e.sosuathai=3626;e.space=32;e.spacehackarabic=32;e.spade=9824;e.spadesuitblack=9824;e.spadesuitwhite=9828;e.sparen=9390;e.squarebelowcmb=827;e.squarecc=13252;e.squarecm=13213;e.\ -squarediagonalcrosshatchfill=9641;e.squarehorizontalfill=9636;e.squarekg=13199;e.squarekm=13214;e.squarekmcapital=13262;e.squareln=13265;e.squarelog=13266;e.squaremg=13198;e.squaremil=13269;e.squaremm=13212;e.squaremsquared=13217;e.squareorthogonalcrosshatchfill=9638;e.squareupperlefttolowerrightfill=9639;e.squareupperrighttolowerleftfill=9640;e.squareverticalfill=9637;e.squarewhitewithsmallblack=9635;e.srsquare=13275;e.ssabengali=2487;e.ssadeva=2359;e.ssagujarati=2743;e.ssangcieuckorean=12617;e\ -.ssanghieuhkorean=12677;e.ssangieungkorean=12672;e.ssangkiyeokkorean=12594;e.ssangnieunkorean=12645;e.ssangpieupkorean=12611;e.ssangsioskorean=12614;e.ssangtikeutkorean=12600;e.ssuperior=63218;e.sterling=163;e.sterlingmonospace=65505;e.strokelongoverlaycmb=822;e.strokeshortoverlaycmb=821;e.subset=8834;e.subsetnotequal=8842;e.subsetorequal=8838;e.succeeds=8827;e.suchthat=8715;e.suhiragana=12377;e.sukatakana=12473;e.sukatakanahalfwidth=65405;e.sukunarabic=1618;e.summation=8721;e.sun=9788;e.superse\ -t=8835;e.supersetnotequal=8843;e.supersetorequal=8839;e.svsquare=13276;e.syouwaerasquare=13180;e.t=116;e.tabengali=2468;e.tackdown=8868;e.tackleft=8867;e.tadeva=2340;e.tagujarati=2724;e.tagurmukhi=2596;e.taharabic=1591;e.tahfinalarabic=65218;e.tahinitialarabic=65219;e.tahiragana=12383;e.tahmedialarabic=65220;e.taisyouerasquare=13181;e.takatakana=12479;e.takatakanahalfwidth=65408;e.tatweelarabic=1600;e.tau=964;e.tav=1514;e.tavdages=64330;e.tavdagesh=64330;e.tavdageshhebrew=64330;e.tavhebrew=1514;\ -e.tbar=359;e.tbopomofo=12554;e.tcaron=357;e.tccurl=680;e.tcedilla=355;e.tcheharabic=1670;e.tchehfinalarabic=64379;e.tchehinitialarabic=64380;e.tchehmedialarabic=64381;e.tcircle=9443;e.tcircumflexbelow=7793;e.tcommaaccent=355;e.tdieresis=7831;e.tdotaccent=7787;e.tdotbelow=7789;e.tecyrillic=1090;e.tedescendercyrillic=1197;e.teharabic=1578;e.tehfinalarabic=65174;e.tehhahinitialarabic=64674;e.tehhahisolatedarabic=64524;e.tehinitialarabic=65175;e.tehiragana=12390;e.tehjeeminitialarabic=64673;e.tehjee\ -misolatedarabic=64523;e.tehmarbutaarabic=1577;e.tehmarbutafinalarabic=65172;e.tehmedialarabic=65176;e.tehmeeminitialarabic=64676;e.tehmeemisolatedarabic=64526;e.tehnoonfinalarabic=64627;e.tekatakana=12486;e.tekatakanahalfwidth=65411;e.telephone=8481;e.telephoneblack=9742;e.telishagedolahebrew=1440;e.telishaqetanahebrew=1449;e.tencircle=9321;e.tenideographicparen=12841;e.tenparen=9341;e.tenperiod=9361;e.tenroman=8569;e.tesh=679;e.tet=1496;e.tetdagesh=64312;e.tetdageshhebrew=64312;e.tethebrew=1496\ -;e.tetsecyrillic=1205;e.tevirhebrew=1435;e.tevirlefthebrew=1435;e.thabengali=2469;e.thadeva=2341;e.thagujarati=2725;e.thagurmukhi=2597;e.thalarabic=1584;e.thalfinalarabic=65196;e.thanthakhatlowleftthai=63640;e.thanthakhatlowrightthai=63639;e.thanthakhatthai=3660;e.thanthakhatupperleftthai=63638;e.theharabic=1579;e.thehfinalarabic=65178;e.thehinitialarabic=65179;e.thehmedialarabic=65180;e.thereexists=8707;e.therefore=8756;e.theta=952;e.theta1=977;e.thetasymbolgreek=977;e.thieuthacirclekorean=1292\ -1;e.thieuthaparenkorean=12825;e.thieuthcirclekorean=12907;e.thieuthkorean=12620;e.thieuthparenkorean=12811;e.thirteencircle=9324;e.thirteenparen=9344;e.thirteenperiod=9364;e.thonangmonthothai=3601;e.thook=429;e.thophuthaothai=3602;e.thorn=254;e.thothahanthai=3607;e.thothanthai=3600;e.thothongthai=3608;e.thothungthai=3606;e.thousandcyrillic=1154;e.thousandsseparatorarabic=1644;e.thousandsseparatorpersian=1644;e.three=51;e.threearabic=1635;e.threebengali=2537;e.threecircle=9314;e.threecircleinvers\ -esansserif=10124;e.threedeva=2409;e.threeeighths=8540;e.threegujarati=2793;e.threegurmukhi=2665;e.threehackarabic=1635;e.threehangzhou=12323;e.threeideographicparen=12834;e.threeinferior=8323;e.threemonospace=65299;e.threenumeratorbengali=2550;e.threeoldstyle=63283;e.threeparen=9334;e.threeperiod=9354;e.threepersian=1779;e.threequarters=190;e.threequartersemdash=63198;e.threeroman=8562;e.threesuperior=179;e.threethai=3667;e.thzsquare=13204;e.tihiragana=12385;e.tikatakana=12481;e.tikatakanahalfwi\ -dth=65409;e.tikeutacirclekorean=12912;e.tikeutaparenkorean=12816;e.tikeutcirclekorean=12898;e.tikeutkorean=12599;e.tikeutparenkorean=12802;e.tilde=732;e.tildebelowcmb=816;e.tildecmb=771;e.tildecomb=771;e.tildedoublecmb=864;e.tildeoperator=8764;e.tildeoverlaycmb=820;e.tildeverticalcmb=830;e.timescircle=8855;e.tipehahebrew=1430;e.tipehalefthebrew=1430;e.tippigurmukhi=2672;e.titlocyrilliccmb=1155;e.tiwnarmenian=1407;e.tlinebelow=7791;e.tmonospace=65364;e.toarmenian=1385;e.tohiragana=12392;e.tokatak\ -ana=12488;e.tokatakanahalfwidth=65412;e.tonebarextrahighmod=741;e.tonebarextralowmod=745;e.tonebarhighmod=742;e.tonebarlowmod=744;e.tonebarmidmod=743;e.tonefive=445;e.tonesix=389;e.tonetwo=424;e.tonos=900;e.tonsquare=13095;e.topatakthai=3599;e.tortoiseshellbracketleft=12308;e.tortoiseshellbracketleftsmall=65117;e.tortoiseshellbracketleftvertical=65081;e.tortoiseshellbracketright=12309;e.tortoiseshellbracketrightsmall=65118;e.tortoiseshellbracketrightvertical=65082;e.totaothai=3605;e.tpalatalhook\ -=427;e.tparen=9391;e.trademark=8482;e.trademarksans=63722;e.trademarkserif=63195;e.tretroflexhook=648;e.triagdn=9660;e.triaglf=9668;e.triagrt=9658;e.triagup=9650;e.ts=678;e.tsadi=1510;e.tsadidagesh=64326;e.tsadidageshhebrew=64326;e.tsadihebrew=1510;e.tsecyrillic=1094;e.tsere=1461;e.tsere12=1461;e.tsere1e=1461;e.tsere2b=1461;e.tserehebrew=1461;e.tserenarrowhebrew=1461;e.tserequarterhebrew=1461;e.tserewidehebrew=1461;e.tshecyrillic=1115;e.tsuperior=63219;e.ttabengali=2463;e.ttadeva=2335;e.ttagujar\ -ati=2719;e.ttagurmukhi=2591;e.tteharabic=1657;e.ttehfinalarabic=64359;e.ttehinitialarabic=64360;e.ttehmedialarabic=64361;e.tthabengali=2464;e.tthadeva=2336;e.tthagujarati=2720;e.tthagurmukhi=2592;e.tturned=647;e.tuhiragana=12388;e.tukatakana=12484;e.tukatakanahalfwidth=65410;e.tusmallhiragana=12387;e.tusmallkatakana=12483;e.tusmallkatakanahalfwidth=65391;e.twelvecircle=9323;e.twelveparen=9343;e.twelveperiod=9363;e.twelveroman=8571;e.twentycircle=9331;e.twentyhangzhou=21316;e.twentyparen=9351;e.t\ -wentyperiod=9371;e.two=50;e.twoarabic=1634;e.twobengali=2536;e.twocircle=9313;e.twocircleinversesansserif=10123;e.twodeva=2408;e.twodotenleader=8229;e.twodotleader=8229;e.twodotleadervertical=65072;e.twogujarati=2792;e.twogurmukhi=2664;e.twohackarabic=1634;e.twohangzhou=12322;e.twoideographicparen=12833;e.twoinferior=8322;e.twomonospace=65298;e.twonumeratorbengali=2549;e.twooldstyle=63282;e.twoparen=9333;e.twoperiod=9353;e.twopersian=1778;e.tworoman=8561;e.twostroke=443;e.twosuperior=178;e.twoth\ -ai=3666;e.twothirds=8532;e.u=117;e.uacute=250;e.ubar=649;e.ubengali=2441;e.ubopomofo=12584;e.ubreve=365;e.ucaron=468;e.ucircle=9444;e.ucircumflex=251;e.ucircumflexbelow=7799;e.ucyrillic=1091;e.udattadeva=2385;e.udblacute=369;e.udblgrave=533;e.udeva=2313;e.udieresis=252;e.udieresisacute=472;e.udieresisbelow=7795;e.udieresiscaron=474;e.udieresiscyrillic=1265;e.udieresisgrave=476;e.udieresismacron=470;e.udotbelow=7909;e.ugrave=249;e.ugujarati=2697;e.ugurmukhi=2569;e.uhiragana=12358;e.uhookabove=791\ -1;e.uhorn=432;e.uhornacute=7913;e.uhorndotbelow=7921;e.uhorngrave=7915;e.uhornhookabove=7917;e.uhorntilde=7919;e.uhungarumlaut=369;e.uhungarumlautcyrillic=1267;e.uinvertedbreve=535;e.ukatakana=12454;e.ukatakanahalfwidth=65395;e.ukcyrillic=1145;e.ukorean=12636;e.umacron=363;e.umacroncyrillic=1263;e.umacrondieresis=7803;e.umatragurmukhi=2625;e.umonospace=65365;e.underscore=95;e.underscoredbl=8215;e.underscoremonospace=65343;e.underscorevertical=65075;e.underscorewavy=65103;e.union=8746;e.universal\ -=8704;e.uogonek=371;e.uparen=9392;e.upblock=9600;e.upperdothebrew=1476;e.upsilon=965;e.upsilondieresis=971;e.upsilondieresistonos=944;e.upsilonlatin=650;e.upsilontonos=973;e.uptackbelowcmb=797;e.uptackmod=724;e.uragurmukhi=2675;e.uring=367;e.ushortcyrillic=1118;e.usmallhiragana=12357;e.usmallkatakana=12453;e.usmallkatakanahalfwidth=65385;e.ustraightcyrillic=1199;e.ustraightstrokecyrillic=1201;e.utilde=361;e.utildeacute=7801;e.utildebelow=7797;e.uubengali=2442;e.uudeva=2314;e.uugujarati=2698;e.uu\ -gurmukhi=2570;e.uumatragurmukhi=2626;e.uuvowelsignbengali=2498;e.uuvowelsigndeva=2370;e.uuvowelsigngujarati=2754;e.uvowelsignbengali=2497;e.uvowelsigndeva=2369;e.uvowelsigngujarati=2753;e.v=118;e.vadeva=2357;e.vagujarati=2741;e.vagurmukhi=2613;e.vakatakana=12535;e.vav=1493;e.vavdagesh=64309;e.vavdagesh65=64309;e.vavdageshhebrew=64309;e.vavhebrew=1493;e.vavholam=64331;e.vavholamhebrew=64331;e.vavvavhebrew=1520;e.vavyodhebrew=1521;e.vcircle=9445;e.vdotbelow=7807;e.vecyrillic=1074;e.veharabic=1700;\ -e.vehfinalarabic=64363;e.vehinitialarabic=64364;e.vehmedialarabic=64365;e.vekatakana=12537;e.venus=9792;e.verticalbar=124;e.verticallineabovecmb=781;e.verticallinebelowcmb=809;e.verticallinelowmod=716;e.verticallinemod=712;e.vewarmenian=1406;e.vhook=651;e.vikatakana=12536;e.viramabengali=2509;e.viramadeva=2381;e.viramagujarati=2765;e.visargabengali=2435;e.visargadeva=2307;e.visargagujarati=2691;e.vmonospace=65366;e.voarmenian=1400;e.voicediterationhiragana=12446;e.voicediterationkatakana=12542;e\ -.voicedmarkkana=12443;e.voicedmarkkanahalfwidth=65438;e.vokatakana=12538;e.vparen=9393;e.vtilde=7805;e.vturned=652;e.vuhiragana=12436;e.vukatakana=12532;e.w=119;e.wacute=7811;e.waekorean=12633;e.wahiragana=12431;e.wakatakana=12527;e.wakatakanahalfwidth=65436;e.wakorean=12632;e.wasmallhiragana=12430;e.wasmallkatakana=12526;e.wattosquare=13143;e.wavedash=12316;e.wavyunderscorevertical=65076;e.wawarabic=1608;e.wawfinalarabic=65262;e.wawhamzaabovearabic=1572;e.wawhamzaabovefinalarabic=65158;e.wbsqua\ -re=13277;e.wcircle=9446;e.wcircumflex=373;e.wdieresis=7813;e.wdotaccent=7815;e.wdotbelow=7817;e.wehiragana=12433;e.weierstrass=8472;e.wekatakana=12529;e.wekorean=12638;e.weokorean=12637;e.wgrave=7809;e.whitebullet=9702;e.whitecircle=9675;e.whitecircleinverse=9689;e.whitecornerbracketleft=12302;e.whitecornerbracketleftvertical=65091;e.whitecornerbracketright=12303;e.whitecornerbracketrightvertical=65092;e.whitediamond=9671;e.whitediamondcontainingblacksmalldiamond=9672;e.whitedownpointingsmalltri\ -angle=9663;e.whitedownpointingtriangle=9661;e.whiteleftpointingsmalltriangle=9667;e.whiteleftpointingtriangle=9665;e.whitelenticularbracketleft=12310;e.whitelenticularbracketright=12311;e.whiterightpointingsmalltriangle=9657;e.whiterightpointingtriangle=9655;e.whitesmallsquare=9643;e.whitesmilingface=9786;e.whitesquare=9633;e.whitestar=9734;e.whitetelephone=9743;e.whitetortoiseshellbracketleft=12312;e.whitetortoiseshellbracketright=12313;e.whiteuppointingsmalltriangle=9653;e.whiteuppointingtrian\ -gle=9651;e.wihiragana=12432;e.wikatakana=12528;e.wikorean=12639;e.wmonospace=65367;e.wohiragana=12434;e.wokatakana=12530;e.wokatakanahalfwidth=65382;e.won=8361;e.wonmonospace=65510;e.wowaenthai=3623;e.wparen=9394;e.wring=7832;e.wsuperior=695;e.wturned=653;e.wynn=447;e.x=120;e.xabovecmb=829;e.xbopomofo=12562;e.xcircle=9447;e.xdieresis=7821;e.xdotaccent=7819;e.xeharmenian=1389;e.xi=958;e.xmonospace=65368;e.xparen=9395;e.xsuperior=739;e.y=121;e.yaadosquare=13134;e.yabengali=2479;e.yacute=253;e.yade\ -va=2351;e.yaekorean=12626;e.yagujarati=2735;e.yagurmukhi=2607;e.yahiragana=12420;e.yakatakana=12516;e.yakatakanahalfwidth=65428;e.yakorean=12625;e.yamakkanthai=3662;e.yasmallhiragana=12419;e.yasmallkatakana=12515;e.yasmallkatakanahalfwidth=65388;e.yatcyrillic=1123;e.ycircle=9448;e.ycircumflex=375;e.ydieresis=255;e.ydotaccent=7823;e.ydotbelow=7925;e.yeharabic=1610;e.yehbarreearabic=1746;e.yehbarreefinalarabic=64431;e.yehfinalarabic=65266;e.yehhamzaabovearabic=1574;e.yehhamzaabovefinalarabic=65162\ -;e.yehhamzaaboveinitialarabic=65163;e.yehhamzaabovemedialarabic=65164;e.yehinitialarabic=65267;e.yehmedialarabic=65268;e.yehmeeminitialarabic=64733;e.yehmeemisolatedarabic=64600;e.yehnoonfinalarabic=64660;e.yehthreedotsbelowarabic=1745;e.yekorean=12630;e.yen=165;e.yenmonospace=65509;e.yeokorean=12629;e.yeorinhieuhkorean=12678;e.yerahbenyomohebrew=1450;e.yerahbenyomolefthebrew=1450;e.yericyrillic=1099;e.yerudieresiscyrillic=1273;e.yesieungkorean=12673;e.yesieungpansioskorean=12675;e.yesieungsiosk\ -orean=12674;e.yetivhebrew=1434;e.ygrave=7923;e.yhook=436;e.yhookabove=7927;e.yiarmenian=1397;e.yicyrillic=1111;e.yikorean=12642;e.yinyang=9775;e.yiwnarmenian=1410;e.ymonospace=65369;e.yod=1497;e.yoddagesh=64313;e.yoddageshhebrew=64313;e.yodhebrew=1497;e.yodyodhebrew=1522;e.yodyodpatahhebrew=64287;e.yohiragana=12424;e.yoikorean=12681;e.yokatakana=12520;e.yokatakanahalfwidth=65430;e.yokorean=12635;e.yosmallhiragana=12423;e.yosmallkatakana=12519;e.yosmallkatakanahalfwidth=65390;e.yotgreek=1011;e.yo\ -yaekorean=12680;e.yoyakorean=12679;e.yoyakthai=3618;e.yoyingthai=3597;e.yparen=9396;e.ypogegrammeni=890;e.ypogegrammenigreekcmb=837;e.yr=422;e.yring=7833;e.ysuperior=696;e.ytilde=7929;e.yturned=654;e.yuhiragana=12422;e.yuikorean=12684;e.yukatakana=12518;e.yukatakanahalfwidth=65429;e.yukorean=12640;e.yusbigcyrillic=1131;e.yusbigiotifiedcyrillic=1133;e.yuslittlecyrillic=1127;e.yuslittleiotifiedcyrillic=1129;e.yusmallhiragana=12421;e.yusmallkatakana=12517;e.yusmallkatakanahalfwidth=65389;e.yuyekore\ -an=12683;e.yuyeokorean=12682;e.yyabengali=2527;e.yyadeva=2399;e.z=122;e.zaarmenian=1382;e.zacute=378;e.zadeva=2395;e.zagurmukhi=2651;e.zaharabic=1592;e.zahfinalarabic=65222;e.zahinitialarabic=65223;e.zahiragana=12374;e.zahmedialarabic=65224;e.zainarabic=1586;e.zainfinalarabic=65200;e.zakatakana=12470;e.zaqefgadolhebrew=1429;e.zaqefqatanhebrew=1428;e.zarqahebrew=1432;e.zayin=1494;e.zayindagesh=64310;e.zayindageshhebrew=64310;e.zayinhebrew=1494;e.zbopomofo=12567;e.zcaron=382;e.zcircle=9449;e.zcirc\ -umflex=7825;e.zcurl=657;e.zdot=380;e.zdotaccent=380;e.zdotbelow=7827;e.zecyrillic=1079;e.zedescendercyrillic=1177;e.zedieresiscyrillic=1247;e.zehiragana=12380;e.zekatakana=12476;e.zero=48;e.zeroarabic=1632;e.zerobengali=2534;e.zerodeva=2406;e.zerogujarati=2790;e.zerogurmukhi=2662;e.zerohackarabic=1632;e.zeroinferior=8320;e.zeromonospace=65296;e.zerooldstyle=63280;e.zeropersian=1776;e.zerosuperior=8304;e.zerothai=3664;e.zerowidthjoiner=65279;e.zerowidthnonjoiner=8204;e.zerowidthspace=8203;e.zeta=\ -950;e.zhbopomofo=12563;e.zhearmenian=1386;e.zhebrevecyrillic=1218;e.zhecyrillic=1078;e.zhedescendercyrillic=1175;e.zhedieresiscyrillic=1245;e.zihiragana=12376;e.zikatakana=12472;e.zinorhebrew=1454;e.zlinebelow=7829;e.zmonospace=65370;e.zohiragana=12382;e.zokatakana=12478;e.zparen=9397;e.zretroflexhook=656;e.zstroke=438;e.zuhiragana=12378;e.zukatakana=12474;e[".notdef"]=0;e.angbracketleftbig=9001;e.angbracketleftBig=9001;e.angbracketleftbigg=9001;e.angbracketleftBigg=9001;e.angbracketrightBig=900\ -2;e.angbracketrightbig=9002;e.angbracketrightBigg=9002;e.angbracketrightbigg=9002;e.arrowhookleft=8618;e.arrowhookright=8617;e.arrowlefttophalf=8636;e.arrowleftbothalf=8637;e.arrownortheast=8599;e.arrownorthwest=8598;e.arrowrighttophalf=8640;e.arrowrightbothalf=8641;e.arrowsoutheast=8600;e.arrowsouthwest=8601;e.backslashbig=8726;e.backslashBig=8726;e.backslashBigg=8726;e.backslashbigg=8726;e.bardbl=8214;e.bracehtipdownleft=65079;e.bracehtipdownright=65079;e.bracehtipupleft=65080;e.bracehtipuprig\ -ht=65080;e.braceleftBig=123;e.braceleftbig=123;e.braceleftbigg=123;e.braceleftBigg=123;e.bracerightBig=125;e.bracerightbig=125;e.bracerightbigg=125;e.bracerightBigg=125;e.bracketleftbig=91;e.bracketleftBig=91;e.bracketleftbigg=91;e.bracketleftBigg=91;e.bracketrightBig=93;e.bracketrightbig=93;e.bracketrightbigg=93;e.bracketrightBigg=93;e.ceilingleftbig=8968;e.ceilingleftBig=8968;e.ceilingleftBigg=8968;e.ceilingleftbigg=8968;e.ceilingrightbig=8969;e.ceilingrightBig=8969;e.ceilingrightbigg=8969;e.c\ -eilingrightBigg=8969;e.circledotdisplay=8857;e.circledottext=8857;e.circlemultiplydisplay=8855;e.circlemultiplytext=8855;e.circleplusdisplay=8853;e.circleplustext=8853;e.contintegraldisplay=8750;e.contintegraltext=8750;e.coproductdisplay=8720;e.coproducttext=8720;e.floorleftBig=8970;e.floorleftbig=8970;e.floorleftbigg=8970;e.floorleftBigg=8970;e.floorrightbig=8971;e.floorrightBig=8971;e.floorrightBigg=8971;e.floorrightbigg=8971;e.hatwide=770;e.hatwider=770;e.hatwidest=770;e.intercal=7488;e.integ\ -raldisplay=8747;e.integraltext=8747;e.intersectiondisplay=8898;e.intersectiontext=8898;e.logicalanddisplay=8743;e.logicalandtext=8743;e.logicalordisplay=8744;e.logicalortext=8744;e.parenleftBig=40;e.parenleftbig=40;e.parenleftBigg=40;e.parenleftbigg=40;e.parenrightBig=41;e.parenrightbig=41;e.parenrightBigg=41;e.parenrightbigg=41;e.prime=8242;e.productdisplay=8719;e.producttext=8719;e.radicalbig=8730;e.radicalBig=8730;e.radicalBigg=8730;e.radicalbigg=8730;e.radicalbt=8730;e.radicaltp=8730;e.radic\ -alvertex=8730;e.slashbig=47;e.slashBig=47;e.slashBigg=47;e.slashbigg=47;e.summationdisplay=8721;e.summationtext=8721;e.tildewide=732;e.tildewider=732;e.tildewidest=732;e.uniondisplay=8899;e.unionmultidisplay=8846;e.unionmultitext=8846;e.unionsqdisplay=8852;e.unionsqtext=8852;e.uniontext=8899;e.vextenddouble=8741;e.vextendsingle=8739})),Ir=getLookupTableFactory((function(e){e.space=32;e.a1=9985;e.a2=9986;e.a202=9987;e.a3=9988;e.a4=9742;e.a5=9990;e.a119=9991;e.a118=9992;e.a117=9993;e.a11=9755;e.a1\ -2=9758;e.a13=9996;e.a14=9997;e.a15=9998;e.a16=9999;e.a105=1e4;e.a17=10001;e.a18=10002;e.a19=10003;e.a20=10004;e.a21=10005;e.a22=10006;e.a23=10007;e.a24=10008;e.a25=10009;e.a26=10010;e.a27=10011;e.a28=10012;e.a6=10013;e.a7=10014;e.a8=10015;e.a9=10016;e.a10=10017;e.a29=10018;e.a30=10019;e.a31=10020;e.a32=10021;e.a33=10022;e.a34=10023;e.a35=9733;e.a36=10025;e.a37=10026;e.a38=10027;e.a39=10028;e.a40=10029;e.a41=10030;e.a42=10031;e.a43=10032;e.a44=10033;e.a45=10034;e.a46=10035;e.a47=10036;e.a48=10037\ -;e.a49=10038;e.a50=10039;e.a51=10040;e.a52=10041;e.a53=10042;e.a54=10043;e.a55=10044;e.a56=10045;e.a57=10046;e.a58=10047;e.a59=10048;e.a60=10049;e.a61=10050;e.a62=10051;e.a63=10052;e.a64=10053;e.a65=10054;e.a66=10055;e.a67=10056;e.a68=10057;e.a69=10058;e.a70=10059;e.a71=9679;e.a72=10061;e.a73=9632;e.a74=10063;e.a203=10064;e.a75=10065;e.a204=10066;e.a76=9650;e.a77=9660;e.a78=9670;e.a79=10070;e.a81=9687;e.a82=10072;e.a83=10073;e.a84=10074;e.a97=10075;e.a98=10076;e.a99=10077;e.a100=10078;e.a101=100\ -81;e.a102=10082;e.a103=10083;e.a104=10084;e.a106=10085;e.a107=10086;e.a108=10087;e.a112=9827;e.a111=9830;e.a110=9829;e.a109=9824;e.a120=9312;e.a121=9313;e.a122=9314;e.a123=9315;e.a124=9316;e.a125=9317;e.a126=9318;e.a127=9319;e.a128=9320;e.a129=9321;e.a130=10102;e.a131=10103;e.a132=10104;e.a133=10105;e.a134=10106;e.a135=10107;e.a136=10108;e.a137=10109;e.a138=10110;e.a139=10111;e.a140=10112;e.a141=10113;e.a142=10114;e.a143=10115;e.a144=10116;e.a145=10117;e.a146=10118;e.a147=10119;e.a148=10120;e.a1\ -49=10121;e.a150=10122;e.a151=10123;e.a152=10124;e.a153=10125;e.a154=10126;e.a155=10127;e.a156=10128;e.a157=10129;e.a158=10130;e.a159=10131;e.a160=10132;e.a161=8594;e.a163=8596;e.a164=8597;e.a196=10136;e.a165=10137;e.a192=10138;e.a166=10139;e.a167=10140;e.a168=10141;e.a169=10142;e.a170=10143;e.a171=10144;e.a172=10145;e.a173=10146;e.a162=10147;e.a174=10148;e.a175=10149;e.a176=10150;e.a177=10151;e.a178=10152;e.a179=10153;e.a193=10154;e.a180=10155;e.a199=10156;e.a181=10157;e.a200=10158;e.a182=10159;\ -e.a201=10161;e.a183=10162;e.a184=10163;e.a197=10164;e.a185=10165;e.a194=10166;e.a198=10167;e.a186=10168;e.a195=10169;e.a187=10170;e.a188=10171;e.a189=10172;e.a190=10173;e.a191=10174;e.a89=10088;e.a90=10089;e.a93=10090;e.a94=10091;e.a91=10092;e.a92=10093;e.a205=10094;e.a85=10095;e.a206=10096;e.a86=10097;e.a87=10098;e.a88=10099;e.a95=10100;e.a96=10101;e[".notdef"]=0})),Tr=getLookupTableFactory((function(e){e[63721]=169;e[63193]=169;e[63720]=174;e[63194]=174;e[63722]=8482;e[63195]=8482;e[63729]=912\ -7;e[63730]=9128;e[63731]=9129;e[63740]=9131;e[63741]=9132;e[63742]=9133;e[63726]=9121;e[63727]=9122;e[63728]=9123;e[63737]=9124;e[63738]=9125;e[63739]=9126;e[63723]=9115;e[63724]=9116;e[63725]=9117;e[63734]=9118;e[63735]=9119;e[63736]=9120}));function getUnicodeForGlyph(e,t){let a=t[e];if(void 0!==a)return a;if(!e)return-1;if("u"===e[0]){const t=e.length;let r;if(7===t&&"n"===e[1]&&"i"===e[2])r=e.substring(3);else{if(!(t>=5&&t<=7))return-1;r=e.substring(1)}if(r===r.toUpperCase()){a=parseInt(r,16\ -);if(a>=0)return a}}return-1}const Or=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784\ -,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,\ -11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66\ -383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,4331\ -1],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function getUnicodeRangeFor(e,t=-1){if(-1!==t){const a=Or[t];for(let r=0,i=a.length;r<i;r+=2)if(e>=a[r]&&e<=a[r+1])return t}for(let t=0,a=Or.length;t<a;t++){const a=Or[t];for(let r=0,i=a.length;r<i;r+=2)if(e>=a[r]&&e<=a[r+1])return t}return-1}const Mr=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),Dr=new Map;const Rr=!0,Nr=1,Er=2,Pr=4,Lr=32,jr=[".notdef",".null","nonmarki\ -ngreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","grave","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","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","ste\ -rling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quo\ -tedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut\ -","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function recoverGlyphName(e,t){if(void 0!==t[e])return e;const a=getUnicodeForGlyph(e,t);if(-1!==a)for(const e in t)if(t[e]===a)return e;info("Unable to recover\ - a standard glyph name for: "+e);return e}function type1FontGlyphMapping(e,t,a){const r=Object.create(null);let i,n,s;const o=!!(e.flags&Pr);if(e.isInternalFont){s=t;for(n=0;n<s.length;n++){i=a.indexOf(s[n]);r[n]=i>=0?i:0}}else if(e.baseEncodingName){s=getEncoding(e.baseEncodingName);for(n=0;n<s.length;n++){i=a.indexOf(s[n]);r[n]=i>=0?i:0}}else if(o)for(n in t)r[n]=t[n];else{s=Ar;for(n=0;n<s.length;n++){i=a.indexOf(s[n]);r[n]=i>=0?i:0}}const c=e.differences;let l;if(c)for(n in c){const e=c[n];i=\ -a.indexOf(e);if(-1===i){l||(l=Fr());const t=recoverGlyphName(e,l);t!==e&&(i=a.indexOf(t))}r[n]=i>=0?i:0}return r}function normalizeFontName(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\\s/g,"")}const _r=getLookupTableFactory((e=>{e[8211]=65074;e[8212]=65073;e[8229]=65072;e[8230]=65049;e[12289]=65041;e[12290]=65042;e[12296]=65087;e[12297]=65088;e[12298]=65085;e[12299]=65086;e[12300]=65089;e[12301]=65090;e[12302]=65091;e[12303]=65092;e[12304]=65083;e[12305]=65084;e[12308]=65081;e[12309]=65082;e\ -[12310]=65047;e[12311]=65048;e[65103]=65076;e[65281]=65045;e[65288]=65077;e[65289]=65078;e[65292]=65040;e[65306]=65043;e[65307]=65044;e[65311]=65046;e[65339]=65095;e[65341]=65096;e[65343]=65075;e[65371]=65079;e[65373]=65080}));const Ur=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","\ -less","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","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","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guil\ -singlleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","\ -Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","aci\ -rcumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],Xr=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyp\ -hen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circum\ -flexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferio\ -r","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","do\ -llarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Th\ -ornsmall","Ydieresissmall"],qr=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsu\ -perior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior",\ -"ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],Hr=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","le\ -ss","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","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","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsi\ -nglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Et\ -h","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acirc\ -umflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twoolds\ -tyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmal\ -l","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","\ -fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmal\ -l","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Wr=391,zr=[null,{id:"hstem",min:2,stack\ -Clearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackC\ -learing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],$r=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,sta\ -ckDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]+e[t-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]-e[t-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]/e[t-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,t){e[t-1]=-e[t-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"rando\ -m",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]*e[t-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];class CFFParser{constructor(e,t,a){this.bytes=e.getBytes();this.properties=t;this.seacAnalysisEnable\ -d=!!a}parse(){const e=this.properties,t=new CFF;this.cff=t;const a=this.parseHeader(),r=this.parseIndex(a.endPos),i=this.parseIndex(r.endPos),n=this.parseIndex(i.endPos),s=this.parseIndex(n.endPos),o=this.parseDict(i.obj.get(0)),c=this.createDict(CFFTopDict,o,t.strings);t.header=a.obj;t.names=this.parseNameIndex(r.obj);t.strings=this.parseStringIndex(n.obj);t.topDict=c;t.globalSubrIndex=s.obj;this.parsePrivateDict(t.topDict);t.isCIDFont=c.hasName("ROS");const l=c.getByName("CharStrings"),h=this.\ -parseIndex(l).obj,u=c.getByName("FontMatrix");u&&(e.fontMatrix=u);const d=c.getByName("FontBBox");if(d){e.ascent=Math.max(d[3],d[1]);e.descent=Math.min(d[1],d[3]);e.ascentScaled=!0}let f,g;if(t.isCIDFont){const e=this.parseIndex(c.getByName("FDArray")).obj;for(let a=0,r=e.count;a<r;++a){const r=e.get(a),i=this.createDict(CFFTopDict,this.parseDict(r),t.strings);this.parsePrivateDict(i);t.fdArray.push(i)}g=null;f=this.parseCharsets(c.getByName("charset"),h.count,t.strings,!0);t.fdSelect=this.parse\ -FDSelect(c.getByName("FDSelect"),h.count)}else{f=this.parseCharsets(c.getByName("charset"),h.count,t.strings,!1);g=this.parseEncoding(c.getByName("Encoding"),e,t.strings,f.charset)}t.charset=f;t.encoding=g;const p=this.parseCharStrings({charStrings:h,localSubrIndex:c.privateDict.subrsIndex,globalSubrIndex:s.obj,fdSelect:t.fdSelect,fdArray:t.fdArray,privateDict:c.privateDict});t.charStrings=p.charStrings;t.seacs=p.seacs;t.widths=p.widths;return t}parseHeader(){let e=this.bytes;const t=e.length;le\ -t a=0;for(;a<t&&1!==e[a];)++a;if(a>=t)throw new FormatError("Invalid CFF header");if(0!==a){info("cff data is shifted");e=e.subarray(a);this.bytes=e}const r=e[0],i=e[1],n=e[2],s=e[3];return{obj:new CFFHeader(r,i,n,s),endPos:n}}parseDict(e){let t=0;function parseOperand(){let a=e[t++];if(30===a)return function parseFloatOperand(){let a="";const r=15,i=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],n=e.length;for(;t<n;){const n=e[t++],s=n>>4,o=15&n;if(s===r)break;a+=i[s];if(o===r)\ -break;a+=i[o]}return parseFloat(a)}();if(28===a){a=readInt16(e,t);t+=2;return a}if(29===a){a=e[t++];a=a<<8|e[t++];a=a<<8|e[t++];a=a<<8|e[t++];return a}if(a>=32&&a<=246)return a-139;if(a>=247&&a<=250)return 256*(a-247)+e[t++]+108;if(a>=251&&a<=254)return-256*(a-251)-e[t++]-108;warn(\'CFFParser_parseDict: "\'+a+\'" is a reserved command.\');return NaN}let a=[];const r=[];t=0;const i=e.length;for(;t<i;){let i=e[t];if(i<=21){12===i&&(i=i<<8|e[++t]);r.push([i,a]);a=[];++t}else a.push(parseOperand())}retu\ -rn r}parseIndex(e){const t=new CFFIndex,a=this.bytes,r=a[e++]<<8|a[e++],i=[];let n,s,o=e;if(0!==r){const t=a[e++],c=e+(r+1)*t-1;for(n=0,s=r+1;n<s;++n){let r=0;for(let i=0;i<t;++i){r<<=8;r+=a[e++]}i.push(c+r)}o=i[r]}for(n=0,s=i.length-1;n<s;++n){const e=i[n],r=i[n+1];t.add(a.subarray(e,r))}return{obj:t,endPos:o}}parseNameIndex(e){const t=[];for(let a=0,r=e.count;a<r;++a){const r=e.get(a);t.push(bytesToString(r))}return t}parseStringIndex(e){const t=new CFFStrings;for(let a=0,r=e.count;a<r;++a){co\ -nst r=e.get(a);t.add(bytesToString(r))}return t}createDict(e,t,a){const r=new e(a);for(const[e,a]of t)r.setByKey(e,a);return r}parseCharString(e,t,a,r){if(!t||e.callDepth>10)return!1;let i=e.stackSize;const n=e.stack;let s=t.length;for(let o=0;o<s;){const c=t[o++];let l=null;if(12===c){const e=t[o++];if(0===e){t[o-2]=139;t[o-1]=22;i=0}else l=$r[e]}else if(28===c){n[i]=readInt16(t,o);o+=2;i++}else if(14===c){if(i>=4){i-=4;if(this.seacAnalysisEnabled){e.seac=n.slice(i,i+4);return!1}}l=zr[c]}else i\ -f(c>=32&&c<=246){n[i]=c-139;i++}else if(c>=247&&c<=254){n[i]=c<251?(c-247<<8)+t[o]+108:-(c-251<<8)-t[o]-108;o++;i++}else if(255===c){n[i]=(t[o]<<24|t[o+1]<<16|t[o+2]<<8|t[o+3])/65536;o+=4;i++}else if(19===c||20===c){e.hints+=i>>1;if(0===e.hints){t.copyWithin(o-1,o,-1);o-=1;s-=1;continue}o+=e.hints+7>>3;i%=2;l=zr[c]}else{if(10===c||29===c){const t=10===c?a:r;if(!t){l=zr[c];warn("Missing subrsIndex for "+l.id);return!1}let s=32768;t.count<1240?s=107:t.count<33900&&(s=1131);const o=n[--i]+s;if(o<0|\ -|o>=t.count||isNaN(o)){l=zr[c];warn("Out of bounds subrIndex for "+l.id);return!1}e.stackSize=i;e.callDepth++;if(!this.parseCharString(e,t.get(o),a,r))return!1;e.callDepth--;i=e.stackSize;continue}if(11===c){e.stackSize=i;return!0}if(0===c&&o===t.length){t[o-1]=14;l=zr[14]}else{if(9===c){t.copyWithin(o-1,o,-1);o-=1;s-=1;continue}l=zr[c]}}if(l){if(l.stem){e.hints+=i>>1;if(3===c||23===c)e.hasVStems=!0;else if(e.hasVStems&&(1===c||18===c)){warn("CFF stem hints are in wrong order");t[o-1]=1===c?3:23\ -}}if("min"in l&&!e.undefStack&&i<l.min){warn("Not enough parameters for "+l.id+"; actual: "+i+", expected: "+l.min);if(0===i){t[o-1]=14;return!0}return!1}if(e.firstStackClearing&&l.stackClearing){e.firstStackClearing=!1;i-=l.min;i>=2&&l.stem?i%=2:i>1&&warn("Found too many parameters for stack-clearing command");i>0&&(e.width=n[i-1])}if("stackDelta"in l){"stackFn"in l&&l.stackFn(n,i);i+=l.stackDelta}else if(l.stackClearing)i=0;else if(l.resetStack){i=0;e.undefStack=!1}else if(l.undefStack){i=0;e.\ -undefStack=!0;e.firstStackClearing=!1}}}s<t.length&&t.fill(14,s);e.stackSize=i;return!0}parseCharStrings({charStrings:e,localSubrIndex:t,globalSubrIndex:a,fdSelect:r,fdArray:i,privateDict:n}){const s=[],o=[],c=e.count;for(let l=0;l<c;l++){const c=e.get(l),h={callDepth:0,stackSize:0,stack:[],undefStack:!0,hints:0,firstStackClearing:!0,seac:null,width:null,hasVStems:!1};let u=!0,d=null,f=n;if(r&&i.length){const e=r.getFDIndex(l);if(-1===e){warn("Glyph index is not in fd select.");u=!1}if(e>=i.leng\ -th){warn("Invalid fd index for glyph index.");u=!1}if(u){f=i[e].privateDict;d=f.subrsIndex}}else t&&(d=t);u&&(u=this.parseCharString(h,c,d,a));if(null!==h.width){const e=f.getByName("nominalWidthX");o[l]=e+h.width}else{const e=f.getByName("defaultWidthX");o[l]=e}null!==h.seac&&(s[l]=h.seac);u||e.set(l,new Uint8Array([14]))}return{charStrings:e,seacs:s,widths:o}}emptyPrivateDictionary(e){const t=this.createDict(CFFPrivateDict,[],e.strings);e.setByKey(18,[0,0]);e.privateDict=t}parsePrivateDict(e){\ -if(!e.hasName("Private")){this.emptyPrivateDictionary(e);return}const t=e.getByName("Private");if(!Array.isArray(t)||2!==t.length){e.removeByName("Private");return}const a=t[0],r=t[1];if(0===a||r>=this.bytes.length){this.emptyPrivateDictionary(e);return}const i=r+a,n=this.bytes.subarray(r,i),s=this.parseDict(n),o=this.createDict(CFFPrivateDict,s,e.strings);e.privateDict=o;0===o.getByName("ExpansionFactor")&&o.setByName("ExpansionFactor",.06);if(!o.getByName("Subrs"))return;const c=o.getByName("S\ -ubrs"),l=r+c;if(0===c||l>=this.bytes.length){this.emptyPrivateDictionary(e);return}const h=this.parseIndex(l);o.subrsIndex=h.obj}parseCharsets(e,t,a,r){if(0===e)return new CFFCharset(!0,Kr.ISO_ADOBE,Ur);if(1===e)return new CFFCharset(!0,Kr.EXPERT,Xr);if(2===e)return new CFFCharset(!0,Kr.EXPERT_SUBSET,qr);const i=this.bytes,n=e,s=i[e++],o=[r?0:".notdef"];let c,l,h;t-=1;switch(s){case 0:for(h=0;h<t;h++){c=i[e++]<<8|i[e++];o.push(r?c:a.get(c))}break;case 1:for(;o.length<=t;){c=i[e++]<<8|i[e++];l=i[\ -e++];for(h=0;h<=l;h++)o.push(r?c++:a.get(c++))}break;case 2:for(;o.length<=t;){c=i[e++]<<8|i[e++];l=i[e++]<<8|i[e++];for(h=0;h<=l;h++)o.push(r?c++:a.get(c++))}break;default:throw new FormatError("Unknown charset format")}const u=e,d=i.subarray(n,u);return new CFFCharset(!1,s,o,d)}parseEncoding(e,t,a,r){const i=Object.create(null),n=this.bytes;let s,o,c,l=!1,h=null;if(0===e||1===e){l=!0;s=e;const t=e?wr:Ar;for(o=0,c=r.length;o<c;o++){const e=t.indexOf(r[o]);-1!==e&&(i[e]=o)}}else{const t=e;s=n[e+\ -+];switch(127&s){case 0:const t=n[e++];for(o=1;o<=t;o++)i[n[e++]]=o;break;case 1:const a=n[e++];let r=1;for(o=0;o<a;o++){const t=n[e++],a=n[e++];for(let e=t;e<=t+a;e++)i[e]=r++}break;default:throw new FormatError(`Unknown encoding format: ${s} in CFF`)}const c=e;if(128&s){n[t]&=127;!function readSupplement(){const t=n[e++];for(o=0;o<t;o++){const t=n[e++],s=(n[e++]<<8)+(255&n[e++]);i[t]=r.indexOf(a.get(s))}}()}h=n.subarray(t,c)}s&=127;return new CFFEncoding(l,s,i,h)}parseFDSelect(e,t){const a=thi\ -s.bytes,r=a[e++],i=[];let n;switch(r){case 0:for(n=0;n<t;++n){const t=a[e++];i.push(t)}break;case 3:const s=a[e++]<<8|a[e++];for(n=0;n<s;++n){let t=a[e++]<<8|a[e++];if(0===n&&0!==t){warn("parseFDSelect: The first range must have a first GID of 0 -- trying to recover.");t=0}const r=a[e++],s=a[e]<<8|a[e+1];for(let e=t;e<s;++e)i.push(r)}e+=2;break;default:throw new FormatError(`parseFDSelect: Unknown format "${r}".`)}if(i.length!==t)throw new FormatError("parseFDSelect: Invalid font data.");return \ -new CFFFDSelect(r,i)}}class CFF{constructor(){this.header=null;this.names=[];this.topDict=null;this.strings=new CFFStrings;this.globalSubrIndex=null;this.encoding=null;this.charset=null;this.charStrings=null;this.fdArray=[];this.fdSelect=null;this.isCIDFont=!1}duplicateFirstGlyph(){if(this.charStrings.count>=65535){warn("Not enough space in charstrings to duplicate first glyph.");return}const e=this.charStrings.get(0);this.charStrings.add(e);this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSel\ -ect.fdSelect[0])}hasGlyphId(e){if(e<0||e>=this.charStrings.count)return!1;return this.charStrings.get(e).length>0}}class CFFHeader{constructor(e,t,a,r){this.major=e;this.minor=t;this.hdrSize=a;this.offSize=r}}class CFFStrings{constructor(){this.strings=[]}get(e){return e>=0&&e<=390?Hr[e]:e-Wr<=this.strings.length?this.strings[e-Wr]:Hr[0]}getSID(e){let t=Hr.indexOf(e);if(-1!==t)return t;t=this.strings.indexOf(e);return-1!==t?t+Wr:-1}add(e){this.strings.push(e)}get count(){return this.strings.leng\ -th}}class CFFIndex{constructor(){this.objects=[];this.length=0}add(e){this.length+=e.length;this.objects.push(e)}set(e,t){this.length+=t.length-this.objects[e].length;this.objects[e]=t}get(e){return this.objects[e]}get count(){return this.objects.length}}class CFFDict{constructor(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.nameToKeyMap;this.defaults=e.defaults;this.types=e.types;this.opcodes=e.opcodes;this.order=e.order;this.strings=t;this.values=Object.create(null)}setByKey(e,t){i\ -f(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;for(const a of t)if(isNaN(a)){warn(`Invalid CFFDict value: "${t}" for key "${e}".`);return!0}const a=this.types[e];"num"!==a&&"sid"!==a&&"offset"!==a||(t=t[0]);this.values[e]=t;return!0}setByName(e,t){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name "${e}"`);this.values[this.nameToKeyMap[e]]=t}hasName(e){return this.nameToKeyMap[e]in this.values}getByName(e){if(!(e in this.nameToKeyMap))throw new FormatError\ -(`Invalid dictionary name ${e}"`);const t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}removeByName(e){delete this.values[this.nameToKeyMap[e]]}static createTables(e){const t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(const a of e){const e=Array.isArray(a[0])?(a[0][0]<<8)+a[0][1]:a[0];t.keyToNameMap[e]=a[1];t.nameToKeyMap[a[1]]=e;t.types[e]=a[2];t.defaults[e]=a[3];t.opcodes[e]=Array.isArray(a[0])?a[0]:[a[0]];t.order.push(e)}retu\ -rn t}}const Gr=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","n\ -um","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","n\ -um",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]];class CFFTopDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Gr))}constructor(e){super(CFFTopDict.tables,e);this.privateDict=null}}const Vr=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","n\ -um",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]];class CFFPrivateDict extends CFFDict{static get tables(){return shadow(this,"tables"\ -,this.createTables(Vr))}constructor(e){super(CFFPrivateDict.tables,e);this.subrsIndex=null}}const Kr={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2};class CFFCharset{constructor(e,t,a,r){this.predefined=e;this.format=t;this.charset=a;this.raw=r}}class CFFEncoding{constructor(e,t,a,r){this.predefined=e;this.format=t;this.encoding=a;this.raw=r}}class CFFFDSelect{constructor(e,t){this.format=e;this.fdSelect=t}getFDIndex(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}class CFFOffsetTracker{const\ -ructor(){this.offsets=Object.create(null)}isTracking(e){return e in this.offsets}track(e,t){if(e in this.offsets)throw new FormatError(`Already tracking location of ${e}`);this.offsets[e]=t}offset(e){for(const t in this.offsets)this.offsets[t]+=e}setEntryLocation(e,t,a){if(!(e in this.offsets))throw new FormatError(`Not tracking location of ${e}`);const r=a.data,i=this.offsets[e];for(let e=0,a=t.length;e<a;++e){const a=5*e+i,n=a+1,s=a+2,o=a+3,c=a+4;if(29!==r[a]||0!==r[n]||0!==r[s]||0!==r[o]||0!=\ -=r[c])throw new FormatError("writing to an offset that is not empty");const l=t[e];r[a]=29;r[n]=l>>24&255;r[s]=l>>16&255;r[o]=l>>8&255;r[c]=255&l}}}class CFFCompiler{constructor(e){this.cff=e}compile(){const e=this.cff,t={data:[],length:0,add(e){try{this.data.push(...e)}catch{this.data=this.data.concat(e)}this.length=this.data.length}},a=this.compileHeader(e.header);t.add(a);const r=this.compileNameIndex(e.names);t.add(r);if(e.isCIDFont&&e.topDict.hasName("FontMatrix")){const t=e.topDict.getByNa\ -me("FontMatrix");e.topDict.removeByName("FontMatrix");for(const a of e.fdArray){let e=t.slice(0);a.hasName("FontMatrix")&&(e=Util.transform(e,a.getByName("FontMatrix")));a.setByName("FontMatrix",e)}}const i=e.topDict.getByName("XUID");i?.length>16&&e.topDict.removeByName("XUID");e.topDict.setByName("charset",0);let n=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(n.output);const s=n.trackers[0],o=this.compileStringIndex(e.strings.strings);t.add(o);const c=this.compileIndex(e.global\ -SubrIndex);t.add(c);if(e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)s.setEntryLocation("Encoding",[e.encoding.format],t);else{const a=this.compileEncoding(e.encoding);s.setEntryLocation("Encoding",[t.length],t);t.add(a)}const l=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);s.setEntryLocation("charset",[t.length],t);t.add(l);const h=this.compileCharStrings(e.charStrings);s.setEntryLocation("CharStrings",[t.length],t);t.add(h);if(e.isCIDFont){s.setE\ -ntryLocation("FDSelect",[t.length],t);const a=this.compileFDSelect(e.fdSelect);t.add(a);n=this.compileTopDicts(e.fdArray,t.length,!0);s.setEntryLocation("FDArray",[t.length],t);t.add(n.output);const r=n.trackers;this.compilePrivateDicts(e.fdArray,r,t)}this.compilePrivateDicts([e.topDict],[s],t);t.add([0]);return t.data}encodeNumber(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}static get EncodeFloatRegExp(){return shadow(this,"EncodeFloatRegExp",/\\.(\\d*?)(?:9{5,20}|0{5,\ -20})\\d{0,2}(?:e(.+)|$)/)}encodeFloat(e){let t=e.toString();const a=CFFCompiler.EncodeFloatRegExp.exec(t);if(a){const r=parseFloat("1e"+((a[2]?+a[2]:0)+a[1].length));t=(Math.round(e*r)/r).toString()}let r,i,n="";for(r=0,i=t.length;r<i;++r){const e=t[r];n+="e"===e?"-"===t[++r]?"c":"b":"."===e?"a":"-"===e?"e":e}n+=1&n.length?"f":"ff";const s=[30];for(r=0,i=n.length;r<i;r+=2)s.push(parseInt(n.substring(r,r+2),16));return s}encodeInteger(e){let t;t=e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=10\ -8)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e];return t}compileHeader(e){return[e.major,e.minor,4,e.offSize]}compileNameIndex(e){const t=new CFFIndex;for(const a of e){const e=Math.min(a.length,127);let r=new Array(e);for(let t=0;t<e;t++){let e=a[t];(e<"!"||e>"~"||"["===e||"]"===e||"("===e||")"===e||"{"===e||"}"===e||"<"===e||">"===e||"/"===e||"%"===e)&&(e="_");r[t]=e}r=r.join("");""===r&&(r="Bad_Font_Na\ -me");t.add(stringToBytes(r))}return this.compileIndex(t)}compileTopDicts(e,t,a){const r=[];let i=new CFFIndex;for(const n of e){if(a){n.removeByName("CIDFontVersion");n.removeByName("CIDFontRevision");n.removeByName("CIDFontType");n.removeByName("CIDCount");n.removeByName("UIDBase")}const e=new CFFOffsetTracker,s=this.compileDict(n,e);r.push(e);i.add(s);e.offset(t)}i=this.compileIndex(i,r);return{trackers:r,output:i}}compilePrivateDicts(e,t,a){for(let r=0,i=e.length;r<i;++r){const i=e[r],n=i.pri\ -vateDict;if(!n||!i.hasName("Private"))throw new FormatError("There must be a private dictionary.");const s=new CFFOffsetTracker,o=this.compileDict(n,s);let c=a.length;s.offset(c);o.length||(c=0);t[r].setEntryLocation("Private",[o.length,c],a);a.add(o);if(n.subrsIndex&&n.hasName("Subrs")){const e=this.compileIndex(n.subrsIndex);s.setEntryLocation("Subrs",[o.length],a);a.add(e)}}}compileDict(e,t){const a=[];for(const r of e.order){if(!(r in e.values))continue;let i=e.values[r],n=e.types[r];Array.i\ -sArray(n)||(n=[n]);Array.isArray(i)||(i=[i]);if(0!==i.length){for(let s=0,o=n.length;s<o;++s){const o=n[s],c=i[s];switch(o){case"num":case"sid":a.push(...this.encodeNumber(c));break;case"offset":const n=e.keyToNameMap[r];t.isTracking(n)||t.track(n,a.length);a.push(29,0,0,0,0);break;case"array":case"delta":a.push(...this.encodeNumber(c));for(let e=1,t=i.length;e<t;++e)a.push(...this.encodeNumber(i[e]));break;default:throw new FormatError(`Unknown data type of ${o}`)}}a.push(...e.opcodes[r])}}retu\ -rn a}compileStringIndex(e){const t=new CFFIndex;for(const a of e)t.add(stringToBytes(a));return this.compileIndex(t)}compileCharStrings(e){const t=new CFFIndex;for(let a=0;a<e.count;a++){const r=e.get(a);0!==r.length?t.add(r):t.add(new Uint8Array([139,14]))}return this.compileIndex(t)}compileCharset(e,t,a,r){let i;const n=t-1;if(r){const e=n-1;i=new Uint8Array([2,0,1,e>>8&255,255&e])}else{i=new Uint8Array(1+2*n);i[0]=0;let t=0;const r=e.charset.length;let s=!1;for(let n=1;n<i.length;n+=2){let o=\ -0;if(t<r){const r=e.charset[t++];o=a.getSID(r);if(-1===o){o=0;if(!s){s=!0;warn(`Couldn\'t find ${r} in CFF strings`)}}}i[n]=o>>8&255;i[n+1]=255&o}}return this.compileTypedArray(i)}compileEncoding(e){return this.compileTypedArray(e.raw)}compileFDSelect(e){const t=e.format;let a,r;switch(t){case 0:a=new Uint8Array(1+e.fdSelect.length);a[0]=t;for(r=0;r<e.fdSelect.length;r++)a[r+1]=e.fdSelect[r];break;case 3:const i=0;let n=e.fdSelect[0];const s=[t,0,0,i>>8&255,255&i,n];for(r=1;r<e.fdSelect.length;r+\ -+){const t=e.fdSelect[r];if(t!==n){s.push(r>>8&255,255&r,t);n=t}}const o=(s.length-3)/3;s[1]=o>>8&255;s[2]=255&o;s.push(r>>8&255,255&r);a=new Uint8Array(s)}return this.compileTypedArray(a)}compileTypedArray(e){return Array.from(e)}compileIndex(e,t=[]){const a=e.objects,r=a.length;if(0===r)return[0,0];const i=[r>>8&255,255&r];let n,s,o=1;for(n=0;n<r;++n)o+=a[n].length;s=o<256?1:o<65536?2:o<16777216?3:4;i.push(s);let c=1;for(n=0;n<r+1;n++){1===s?i.push(255&c):2===s?i.push(c>>8&255,255&c):3===s?i.p\ -ush(c>>16&255,c>>8&255,255&c):i.push(c>>>24&255,c>>16&255,c>>8&255,255&c);a[n]&&(c+=a[n].length)}for(n=0;n<r;n++){t[n]&&t[n].offset(i.length);i.push(...a[n])}return i}}const Jr=getLookupTableFactory((function(e){e["Times-Roman"]="Times-Roman";e.Helvetica="Helvetica";e.Courier="Courier";e.Symbol="Symbol";e["Times-Bold"]="Times-Bold";e["Helvetica-Bold"]="Helvetica-Bold";e["Courier-Bold"]="Courier-Bold";e.ZapfDingbats="ZapfDingbats";e["Times-Italic"]="Times-Italic";e["Helvetica-Oblique"]="Helvetica\ --Oblique";e["Courier-Oblique"]="Courier-Oblique";e["Times-BoldItalic"]="Times-BoldItalic";e["Helvetica-BoldOblique"]="Helvetica-BoldOblique";e["Courier-BoldOblique"]="Courier-BoldOblique";e.ArialNarrow="Helvetica";e["ArialNarrow-Bold"]="Helvetica-Bold";e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique";e["ArialNarrow-Italic"]="Helvetica-Oblique";e.ArialBlack="Helvetica";e["ArialBlack-Bold"]="Helvetica-Bold";e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique";e["ArialBlack-Italic"]="Helvetica-Obl\ -ique";e["Arial-Black"]="Helvetica";e["Arial-Black-Bold"]="Helvetica-Bold";e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Black-Italic"]="Helvetica-Oblique";e.Arial="Helvetica";e["Arial-Bold"]="Helvetica-Bold";e["Arial-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Italic"]="Helvetica-Oblique";e.ArialMT="Helvetica";e["Arial-BoldItalicMT"]="Helvetica-BoldOblique";e["Arial-BoldMT"]="Helvetica-Bold";e["Arial-ItalicMT"]="Helvetica-Oblique";e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-Bo\ -ldOblique";e["Arial-BoldMT-Bold"]="Helvetica-Bold";e["Arial-ItalicMT-Italic"]="Helvetica-Oblique";e.ArialUnicodeMS="Helvetica";e["ArialUnicodeMS-Bold"]="Helvetica-Bold";e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique";e["ArialUnicodeMS-Italic"]="Helvetica-Oblique";e["Courier-BoldItalic"]="Courier-BoldOblique";e["Courier-Italic"]="Courier-Oblique";e.CourierNew="Courier";e["CourierNew-Bold"]="Courier-Bold";e["CourierNew-BoldItalic"]="Courier-BoldOblique";e["CourierNew-Italic"]="Courier-Obliq\ -ue";e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique";e["CourierNewPS-BoldMT"]="Courier-Bold";e["CourierNewPS-ItalicMT"]="Courier-Oblique";e.CourierNewPSMT="Courier";e["Helvetica-BoldItalic"]="Helvetica-BoldOblique";e["Helvetica-Italic"]="Helvetica-Oblique";e["HelveticaLTStd-Bold"]="Helvetica-Bold";e["Symbol-Bold"]="Symbol";e["Symbol-BoldItalic"]="Symbol";e["Symbol-Italic"]="Symbol";e.TimesNewRoman="Times-Roman";e["TimesNewRoman-Bold"]="Times-Bold";e["TimesNewRoman-BoldItalic"]="Times-BoldIta\ -lic";e["TimesNewRoman-Italic"]="Times-Italic";e.TimesNewRomanPS="Times-Roman";e["TimesNewRomanPS-Bold"]="Times-Bold";e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic";e["TimesNewRomanPS-BoldMT"]="Times-Bold";e["TimesNewRomanPS-Italic"]="Times-Italic";e["TimesNewRomanPS-ItalicMT"]="Times-Italic";e.TimesNewRomanPSMT="Times-Roman";e["TimesNewRomanPSMT-Bold"]="Times-Bold";e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPSMT-I\ -talic"]="Times-Italic"})),Yr=getLookupTableFactory((function(e){e.Courier="FoxitFixed.pfb";e["Courier-Bold"]="FoxitFixedBold.pfb";e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb";e["Courier-Oblique"]="FoxitFixedItalic.pfb";e.Helvetica="LiberationSans-Regular.ttf";e["Helvetica-Bold"]="LiberationSans-Bold.ttf";e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf";e["Helvetica-Oblique"]="LiberationSans-Italic.ttf";e["Times-Roman"]="FoxitSerif.pfb";e["Times-Bold"]="FoxitSerifBold.pfb";e["Tim\ -es-BoldItalic"]="FoxitSerifBoldItalic.pfb";e["Times-Italic"]="FoxitSerifItalic.pfb";e.Symbol="FoxitSymbol.pfb";e.ZapfDingbats="FoxitDingbats.pfb";e["LiberationSans-Regular"]="LiberationSans-Regular.ttf";e["LiberationSans-Bold"]="LiberationSans-Bold.ttf";e["LiberationSans-Italic"]="LiberationSans-Italic.ttf";e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"})),Zr=getLookupTableFactory((function(e){e.Calibri="Helvetica";e["Calibri-Bold"]="Helvetica-Bold";e["Calibri-BoldItalic"]="Helve\ -tica-BoldOblique";e["Calibri-Italic"]="Helvetica-Oblique";e.CenturyGothic="Helvetica";e["CenturyGothic-Bold"]="Helvetica-Bold";e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique";e["CenturyGothic-Italic"]="Helvetica-Oblique";e.ComicSansMS="Comic Sans MS";e["ComicSansMS-Bold"]="Comic Sans MS-Bold";e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic";e["ComicSansMS-Italic"]="Comic Sans MS-Italic";e.GillSansMT="Helvetica";e["GillSansMT-Bold"]="Helvetica-Bold";e["GillSansMT-BoldItalic"]="Helveti\ -ca-BoldOblique";e["GillSansMT-Italic"]="Helvetica-Oblique";e.Impact="Helvetica";e["ItcSymbol-Bold"]="Helvetica-Bold";e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique";e["ItcSymbol-Book"]="Helvetica";e["ItcSymbol-BookItalic"]="Helvetica-Oblique";e["ItcSymbol-Medium"]="Helvetica";e["ItcSymbol-MediumItalic"]="Helvetica-Oblique";e.LucidaConsole="Courier";e["LucidaConsole-Bold"]="Courier-Bold";e["LucidaConsole-BoldItalic"]="Courier-BoldOblique";e["LucidaConsole-Italic"]="Courier-Oblique";e["LucidaSan\ -s-Demi"]="Helvetica-Bold";e["MS-Gothic"]="MS Gothic";e["MS-Gothic-Bold"]="MS Gothic-Bold";e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic";e["MS-Gothic-Italic"]="MS Gothic-Italic";e["MS-Mincho"]="MS Mincho";e["MS-Mincho-Bold"]="MS Mincho-Bold";e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic";e["MS-Mincho-Italic"]="MS Mincho-Italic";e["MS-PGothic"]="MS PGothic";e["MS-PGothic-Bold"]="MS PGothic-Bold";e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic";e["MS-PGothic-Italic"]="MS PGothic-Italic";e["M\ -S-PMincho"]="MS PMincho";e["MS-PMincho-Bold"]="MS PMincho-Bold";e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic";e["MS-PMincho-Italic"]="MS PMincho-Italic";e.NuptialScript="Times-Italic";e.SegoeUISymbol="Helvetica"})),Qr=getLookupTableFactory((function(e){e["Adobe Jenson"]=!0;e["Adobe Text"]=!0;e.Albertus=!0;e.Aldus=!0;e.Alexandria=!0;e.Algerian=!0;e["American Typewriter"]=!0;e.Antiqua=!0;e.Apex=!0;e.Arno=!0;e.Aster=!0;e.Aurora=!0;e.Baskerville=!0;e.Bell=!0;e.Bembo=!0;e["Bembo Schoolbook"]=!0;\ -e.Benguiat=!0;e["Berkeley Old Style"]=!0;e["Bernhard Modern"]=!0;e["Berthold City"]=!0;e.Bodoni=!0;e["Bauer Bodoni"]=!0;e["Book Antiqua"]=!0;e.Bookman=!0;e["Bordeaux Roman"]=!0;e["Californian FB"]=!0;e.Calisto=!0;e.Calvert=!0;e.Capitals=!0;e.Cambria=!0;e.Cartier=!0;e.Caslon=!0;e.Catull=!0;e.Centaur=!0;e["Century Old Style"]=!0;e["Century Schoolbook"]=!0;e.Chaparral=!0;e["Charis SIL"]=!0;e.Cheltenham=!0;e["Cholla Slab"]=!0;e.Clarendon=!0;e.Clearface=!0;e.Cochin=!0;e.Colonna=!0;e["Computer Modern"\ -]=!0;e["Concrete Roman"]=!0;e.Constantia=!0;e["Cooper Black"]=!0;e.Corona=!0;e.Ecotype=!0;e.Egyptienne=!0;e.Elephant=!0;e.Excelsior=!0;e.Fairfield=!0;e["FF Scala"]=!0;e.Folkard=!0;e.Footlight=!0;e.FreeSerif=!0;e["Friz Quadrata"]=!0;e.Garamond=!0;e.Gentium=!0;e.Georgia=!0;e.Gloucester=!0;e["Goudy Old Style"]=!0;e["Goudy Schoolbook"]=!0;e["Goudy Pro Font"]=!0;e.Granjon=!0;e["Guardian Egyptian"]=!0;e.Heather=!0;e.Hercules=!0;e["High Tower Text"]=!0;e.Hiroshige=!0;e["Hoefler Text"]=!0;e["Humana Seri\ -f"]=!0;e.Imprint=!0;e["Ionic No. 5"]=!0;e.Janson=!0;e.Joanna=!0;e.Korinna=!0;e.Lexicon=!0;e.LiberationSerif=!0;e["Liberation Serif"]=!0;e["Linux Libertine"]=!0;e.Literaturnaya=!0;e.Lucida=!0;e["Lucida Bright"]=!0;e.Melior=!0;e.Memphis=!0;e.Miller=!0;e.Minion=!0;e.Modern=!0;e["Mona Lisa"]=!0;e["Mrs Eaves"]=!0;e["MS Serif"]=!0;e["Museo Slab"]=!0;e["New York"]=!0;e["Nimbus Roman"]=!0;e["NPS Rawlinson Roadway"]=!0;e.NuptialScript=!0;e.Palatino=!0;e.Perpetua=!0;e.Plantin=!0;e["Plantin Schoolbook"]=!0\ -;e.Playbill=!0;e["Poor Richard"]=!0;e["Rawlinson Roadway"]=!0;e.Renault=!0;e.Requiem=!0;e.Rockwell=!0;e.Roman=!0;e["Rotis Serif"]=!0;e.Sabon=!0;e.Scala=!0;e.Seagull=!0;e.Sistina=!0;e.Souvenir=!0;e.STIX=!0;e["Stone Informal"]=!0;e["Stone Serif"]=!0;e.Sylfaen=!0;e.Times=!0;e.Trajan=!0;e["Trinité"]=!0;e["Trump Mediaeval"]=!0;e.Utopia=!0;e["Vale Type"]=!0;e["Bitstream Vera"]=!0;e["Vera Serif"]=!0;e.Versailles=!0;e.Wanted=!0;e.Weiss=!0;e["Wide Latin"]=!0;e.Windsor=!0;e.XITS=!0})),ei=getLookupTableFac\ -tory((function(e){e.Dingbats=!0;e.Symbol=!0;e.ZapfDingbats=!0;e.Wingdings=!0;e["Wingdings-Bold"]=!0;e["Wingdings-Regular"]=!0})),ti=getLookupTableFactory((function(e){e[2]=10;e[3]=32;e[4]=33;e[5]=34;e[6]=35;e[7]=36;e[8]=37;e[9]=38;e[10]=39;e[11]=40;e[12]=41;e[13]=42;e[14]=43;e[15]=44;e[16]=45;e[17]=46;e[18]=47;e[19]=48;e[20]=49;e[21]=50;e[22]=51;e[23]=52;e[24]=53;e[25]=54;e[26]=55;e[27]=56;e[28]=57;e[29]=58;e[30]=894;e[31]=60;e[32]=61;e[33]=62;e[34]=63;e[35]=64;e[36]=65;e[37]=66;e[38]=67;e[39]=6\ -8;e[40]=69;e[41]=70;e[42]=71;e[43]=72;e[44]=73;e[45]=74;e[46]=75;e[47]=76;e[48]=77;e[49]=78;e[50]=79;e[51]=80;e[52]=81;e[53]=82;e[54]=83;e[55]=84;e[56]=85;e[57]=86;e[58]=87;e[59]=88;e[60]=89;e[61]=90;e[62]=91;e[63]=92;e[64]=93;e[65]=94;e[66]=95;e[67]=96;e[68]=97;e[69]=98;e[70]=99;e[71]=100;e[72]=101;e[73]=102;e[74]=103;e[75]=104;e[76]=105;e[77]=106;e[78]=107;e[79]=108;e[80]=109;e[81]=110;e[82]=111;e[83]=112;e[84]=113;e[85]=114;e[86]=115;e[87]=116;e[88]=117;e[89]=118;e[90]=119;e[91]=120;e[92]=121\ -;e[93]=122;e[94]=123;e[95]=124;e[96]=125;e[97]=126;e[98]=196;e[99]=197;e[100]=199;e[101]=201;e[102]=209;e[103]=214;e[104]=220;e[105]=225;e[106]=224;e[107]=226;e[108]=228;e[109]=227;e[110]=229;e[111]=231;e[112]=233;e[113]=232;e[114]=234;e[115]=235;e[116]=237;e[117]=236;e[118]=238;e[119]=239;e[120]=241;e[121]=243;e[122]=242;e[123]=244;e[124]=246;e[125]=245;e[126]=250;e[127]=249;e[128]=251;e[129]=252;e[130]=8224;e[131]=176;e[132]=162;e[133]=163;e[134]=167;e[135]=8226;e[136]=182;e[137]=223;e[138]=17\ -4;e[139]=169;e[140]=8482;e[141]=180;e[142]=168;e[143]=8800;e[144]=198;e[145]=216;e[146]=8734;e[147]=177;e[148]=8804;e[149]=8805;e[150]=165;e[151]=181;e[152]=8706;e[153]=8721;e[154]=8719;e[156]=8747;e[157]=170;e[158]=186;e[159]=8486;e[160]=230;e[161]=248;e[162]=191;e[163]=161;e[164]=172;e[165]=8730;e[166]=402;e[167]=8776;e[168]=8710;e[169]=171;e[170]=187;e[171]=8230;e[179]=8220;e[180]=8221;e[181]=8216;e[182]=8217;e[200]=193;e[203]=205;e[207]=211;e[210]=218;e[223]=711;e[224]=321;e[225]=322;e[226]=\ -352;e[227]=353;e[228]=381;e[229]=382;e[233]=221;e[234]=253;e[252]=263;e[253]=268;e[254]=269;e[258]=258;e[260]=260;e[261]=261;e[265]=280;e[266]=281;e[267]=282;e[268]=283;e[269]=313;e[275]=323;e[276]=324;e[278]=328;e[283]=344;e[284]=345;e[285]=346;e[286]=347;e[292]=367;e[295]=377;e[296]=378;e[298]=380;e[305]=963;e[306]=964;e[307]=966;e[308]=8215;e[309]=8252;e[310]=8319;e[311]=8359;e[312]=8592;e[313]=8593;e[337]=9552;e[493]=1039;e[494]=1040;e[570]=1040;e[571]=1041;e[572]=1042;e[573]=1043;e[574]=104\ -4;e[575]=1045;e[576]=1046;e[577]=1047;e[578]=1048;e[579]=1049;e[580]=1050;e[581]=1051;e[582]=1052;e[583]=1053;e[584]=1054;e[585]=1055;e[586]=1056;e[587]=1057;e[588]=1058;e[589]=1059;e[590]=1060;e[591]=1061;e[592]=1062;e[593]=1063;e[594]=1064;e[595]=1065;e[596]=1066;e[597]=1067;e[598]=1068;e[599]=1069;e[600]=1070;e[672]=1488;e[673]=1489;e[674]=1490;e[675]=1491;e[676]=1492;e[677]=1493;e[678]=1494;e[679]=1495;e[680]=1496;e[681]=1497;e[682]=1498;e[683]=1499;e[684]=1500;e[685]=1501;e[686]=1502;e[687]\ -=1503;e[688]=1504;e[689]=1505;e[690]=1506;e[691]=1507;e[692]=1508;e[693]=1509;e[694]=1510;e[695]=1511;e[696]=1512;e[697]=1513;e[698]=1514;e[705]=1524;e[706]=8362;e[710]=64288;e[711]=64298;e[759]=1617;e[761]=1776;e[763]=1778;e[775]=1652;e[777]=1764;e[778]=1780;e[779]=1781;e[780]=1782;e[782]=771;e[783]=64726;e[786]=8363;e[788]=8532;e[790]=768;e[791]=769;e[792]=768;e[795]=803;e[797]=64336;e[798]=64337;e[799]=64342;e[800]=64343;e[801]=64344;e[802]=64345;e[803]=64362;e[804]=64363;e[805]=64364;e[2424]\ -=7821;e[2425]=7822;e[2426]=7823;e[2427]=7824;e[2428]=7825;e[2429]=7826;e[2430]=7827;e[2433]=7682;e[2678]=8045;e[2679]=8046;e[2830]=1552;e[2838]=686;e[2840]=751;e[2842]=753;e[2843]=754;e[2844]=755;e[2846]=757;e[2856]=767;e[2857]=848;e[2858]=849;e[2862]=853;e[2863]=854;e[2864]=855;e[2865]=861;e[2866]=862;e[2906]=7460;e[2908]=7462;e[2909]=7463;e[2910]=7464;e[2912]=7466;e[2913]=7467;e[2914]=7468;e[2916]=7470;e[2917]=7471;e[2918]=7472;e[2920]=7474;e[2921]=7475;e[2922]=7476;e[2924]=7478;e[2925]=7479;e\ -[2926]=7480;e[2928]=7482;e[2929]=7483;e[2930]=7484;e[2932]=7486;e[2933]=7487;e[2934]=7488;e[2936]=7490;e[2937]=7491;e[2938]=7492;e[2940]=7494;e[2941]=7495;e[2942]=7496;e[2944]=7498;e[2946]=7500;e[2948]=7502;e[2950]=7504;e[2951]=7505;e[2952]=7506;e[2954]=7508;e[2955]=7509;e[2956]=7510;e[2958]=7512;e[2959]=7513;e[2960]=7514;e[2962]=7516;e[2963]=7517;e[2964]=7518;e[2966]=7520;e[2967]=7521;e[2968]=7522;e[2970]=7524;e[2971]=7525;e[2972]=7526;e[2974]=7528;e[2975]=7529;e[2976]=7530;e[2978]=1537;e[2979]\ -=1538;e[2980]=1539;e[2982]=1549;e[2983]=1551;e[2984]=1552;e[2986]=1554;e[2987]=1555;e[2988]=1556;e[2990]=1623;e[2991]=1624;e[2995]=1775;e[2999]=1791;e[3002]=64290;e[3003]=64291;e[3004]=64292;e[3006]=64294;e[3007]=64295;e[3008]=64296;e[3011]=1900;e[3014]=8223;e[3015]=8244;e[3017]=7532;e[3018]=7533;e[3019]=7534;e[3075]=7590;e[3076]=7591;e[3079]=7594;e[3080]=7595;e[3083]=7598;e[3084]=7599;e[3087]=7602;e[3088]=7603;e[3091]=7606;e[3092]=7607;e[3095]=7610;e[3096]=7611;e[3099]=7614;e[3100]=7615;e[3103]\ -=7618;e[3104]=7619;e[3107]=8337;e[3108]=8338;e[3116]=1884;e[3119]=1885;e[3120]=1885;e[3123]=1886;e[3124]=1886;e[3127]=1887;e[3128]=1887;e[3131]=1888;e[3132]=1888;e[3135]=1889;e[3136]=1889;e[3139]=1890;e[3140]=1890;e[3143]=1891;e[3144]=1891;e[3147]=1892;e[3148]=1892;e[3153]=580;e[3154]=581;e[3157]=584;e[3158]=585;e[3161]=588;e[3162]=589;e[3165]=891;e[3166]=892;e[3169]=1274;e[3170]=1275;e[3173]=1278;e[3174]=1279;e[3181]=7622;e[3182]=7623;e[3282]=11799;e[3316]=578;e[3379]=42785;e[3393]=1159;e[3416]\ -=8377})),ai=getLookupTableFactory((function(e){e[227]=322;e[264]=261;e[291]=346})),ri=getLookupTableFactory((function(e){e[1]=32;e[4]=65;e[5]=192;e[6]=193;e[9]=196;e[17]=66;e[18]=67;e[21]=268;e[24]=68;e[28]=69;e[29]=200;e[30]=201;e[32]=282;e[38]=70;e[39]=71;e[44]=72;e[47]=73;e[48]=204;e[49]=205;e[58]=74;e[60]=75;e[62]=76;e[68]=77;e[69]=78;e[75]=79;e[76]=210;e[80]=214;e[87]=80;e[89]=81;e[90]=82;e[92]=344;e[94]=83;e[97]=352;e[100]=84;e[104]=85;e[109]=220;e[115]=86;e[116]=87;e[121]=88;e[122]=89;e[1\ -24]=221;e[127]=90;e[129]=381;e[258]=97;e[259]=224;e[260]=225;e[263]=228;e[268]=261;e[271]=98;e[272]=99;e[273]=263;e[275]=269;e[282]=100;e[286]=101;e[287]=232;e[288]=233;e[290]=283;e[295]=281;e[296]=102;e[336]=103;e[346]=104;e[349]=105;e[350]=236;e[351]=237;e[361]=106;e[364]=107;e[367]=108;e[371]=322;e[373]=109;e[374]=110;e[381]=111;e[382]=242;e[383]=243;e[386]=246;e[393]=112;e[395]=113;e[396]=114;e[398]=345;e[400]=115;e[401]=347;e[403]=353;e[410]=116;e[437]=117;e[442]=252;e[448]=118;e[449]=119;e\ -[454]=120;e[455]=121;e[457]=253;e[460]=122;e[462]=382;e[463]=380;e[853]=44;e[855]=58;e[856]=46;e[876]=47;e[878]=45;e[882]=45;e[894]=40;e[895]=41;e[896]=91;e[897]=93;e[923]=64;e[940]=163;e[1004]=48;e[1005]=49;e[1006]=50;e[1007]=51;e[1008]=52;e[1009]=53;e[1010]=54;e[1011]=55;e[1012]=56;e[1013]=57;e[1081]=37;e[1085]=43;e[1086]=45}));function getStandardFontName(e){const t=normalizeFontName(e);return Jr()[t]}function isKnownFontName(e){const t=normalizeFontName(e);return!!(Jr()[t]||Zr()[t]||Qr()[t]|\ -|ei()[t])}class ToUnicodeMap{constructor(e=[]){this._map=e}get length(){return this._map.length}forEach(e){for(const t in this._map)e(t,this._map[t].codePointAt(0))}has(e){return void 0!==this._map[e]}get(e){return this._map[e]}charCodeOf(e){const t=this._map;if(t.length<=65536)return t.indexOf(e);for(const a in t)if(t[a]===e)return 0|a;return-1}amend(e){for(const t in e)this._map[t]=e[t]}}class IdentityToUnicodeMap{constructor(e,t){this.firstChar=e;this.lastChar=t}get length(){return this.lastC\ -har+1-this.firstChar}forEach(e){for(let t=this.firstChar,a=this.lastChar;t<=a;t++)e(t,t)}has(e){return this.firstChar<=e&&e<=this.lastChar}get(e){if(this.firstChar<=e&&e<=this.lastChar)return String.fromCharCode(e)}charCodeOf(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1}amend(e){unreachable("Should not call amend()")}}class CFFFont{constructor(e,t){this.properties=t;const a=new CFFParser(e,t,Rr);this.cff=a.parse();this.cff.duplicateFirstGlyph();const r=new CFFCompiler(\ -this.cff);this.seacs=this.cff.seacs;try{this.data=r.compile()}catch{warn("Failed to compile font "+t.loadedName);this.data=e}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){const e=this.cff,t=this.properties,{cidToGidMap:a,cMap:r}=t,i=e.charset.charset;let n,s;if(t.composite){let t,o;if(a?.length>0){t=Object.create(null);for(let e=0,r=a.length;e<r;e++){const r=a[e];void 0!==r&&(t[r]=e)}}n=Object.create\ -(null);if(e.isCIDFont)for(s=0;s<i.length;s++){const e=i[s];o=r.charCodeOf(e);void 0!==t?.[o]&&(o=t[o]);n[o]=s}else for(s=0;s<e.charStrings.count;s++){o=r.charCodeOf(s);n[o]=s}return n}let o=e.encoding?e.encoding.encoding:null;t.isInternalFont&&(o=t.defaultEncoding);n=type1FontGlyphMapping(t,o,i);return n}hasGlyphId(e){return this.cff.hasGlyphId(e)}_createBuiltInEncoding(){const{charset:e,encoding:t}=this.cff;if(!e||!t)return;const a=e.charset,r=t.encoding,i=[];for(const e in r){const t=r[e];if(t\ ->=0){const r=a[t];r&&(i[e]=r)}}i.length>0&&(this.properties.builtInEncoding=i)}}function getFloat214(e,t){return readInt16(e,t)/16384}function getSubroutineBias(e){const t=e.length;let a=32768;t<1240?a=107:t<33900&&(a=1131);return a}function parseCmap(e,t,a){const r=1===readUint16(e,t+2)?readUint32(e,t+8):readUint32(e,t+16),i=readUint16(e,t+r);let n,s,o;if(4===i){readUint16(e,t+r+2);const a=readUint16(e,t+r+6)>>1;s=t+r+14;n=[];for(o=0;o<a;o++,s+=2)n[o]={end:readUint16(e,s)};s+=2;for(o=0;o<a;o++,\ -s+=2)n[o].start=readUint16(e,s);for(o=0;o<a;o++,s+=2)n[o].idDelta=readUint16(e,s);for(o=0;o<a;o++,s+=2){let t=readUint16(e,s);if(0!==t){n[o].ids=[];for(let a=0,r=n[o].end-n[o].start+1;a<r;a++){n[o].ids[a]=readUint16(e,s+t);t+=2}}}return n}if(12===i){const a=readUint32(e,t+r+12);s=t+r+16;n=[];for(o=0;o<a;o++){t=readUint32(e,s);n.push({start:t,end:readUint32(e,s+4),idDelta:readUint32(e,s+8)-t});s+=12}return n}throw new FormatError(`unsupported cmap: ${i}`)}function parseCff(e,t,a,r){const i=new CF\ -FParser(new Stream(e,t,a-t),{},r).parse();return{glyphs:i.charStrings.objects,subrs:i.topDict.privateDict?.subrsIndex?.objects,gsubrs:i.globalSubrIndex?.objects,isCFFCIDFont:i.isCIDFont,fdSelect:i.fdSelect,fdArray:i.fdArray}}function lookupCmap(e,t){const a=t.codePointAt(0);let r=0,i=0,n=e.length-1;for(;i<n;){const t=i+n+1>>1;a<e[t].start?n=t-1:i=t}e[i].start<=a&&a<=e[i].end&&(r=e[i].idDelta+(e[i].ids?e[i].ids[a-e[i].start]:a)&65535);return{charCode:a,glyphId:r}}function compileGlyf(e,t,a){funct\ -ion moveTo(e,a){s&&t.add("L",s);s=[e,a];t.add("M",[e,a])}function lineTo(e,a){t.add("L",[e,a])}function quadraticCurveTo(e,a,r,i){t.add("Q",[e,a,r,i])}let r=0;const i=readInt16(e,r);let n,s=null,o=0,c=0;r+=10;if(i<0)do{n=readUint16(e,r);const i=readUint16(e,r+2);r+=4;let s,l;if(1&n){if(2&n){s=readInt16(e,r);l=readInt16(e,r+2)}else{s=readUint16(e,r);l=readUint16(e,r+2)}r+=4}else if(2&n){s=readInt8(e,r++);l=readInt8(e,r++)}else{s=e[r++];l=e[r++]}if(2&n){o=s;c=l}else{o=0;c=0}let h=1,u=1,d=0,f=0;if(\ -8&n){h=u=getFloat214(e,r);r+=2}else if(64&n){h=getFloat214(e,r);u=getFloat214(e,r+2);r+=4}else if(128&n){h=getFloat214(e,r);d=getFloat214(e,r+2);f=getFloat214(e,r+4);u=getFloat214(e,r+6);r+=8}const g=a.glyphs[i];if(g){t.save();t.transform([h,d,f,u,o,c]);compileGlyf(g,t,a);t.restore()}}while(32&n);else{const t=[];let a,s;for(a=0;a<i;a++){t.push(readUint16(e,r));r+=2}r+=2+readUint16(e,r);const l=t.at(-1)+1,h=[];for(;h.length<l;){n=e[r++];let t=1;8&n&&(t+=e[r++]);for(;t-- >0;)h.push({flags:n})}for(\ -a=0;a<l;a++){switch(18&h[a].flags){case 0:o+=readInt16(e,r);r+=2;break;case 2:o-=e[r++];break;case 18:o+=e[r++]}h[a].x=o}for(a=0;a<l;a++){switch(36&h[a].flags){case 0:c+=readInt16(e,r);r+=2;break;case 4:c-=e[r++];break;case 36:c+=e[r++]}h[a].y=c}let u=0;for(r=0;r<i;r++){const e=t[r],i=h.slice(u,e+1);if(1&i[0].flags)i.push(i[0]);else if(1&i.at(-1).flags)i.unshift(i.at(-1));else{const e={flags:1,x:(i[0].x+i.at(-1).x)/2,y:(i[0].y+i.at(-1).y)/2};i.unshift(e);i.push(e)}moveTo(i[0].x,i[0].y);for(a=1,s\ -=i.length;a<s;a++)if(1&i[a].flags)lineTo(i[a].x,i[a].y);else if(1&i[a+1].flags){quadraticCurveTo(i[a].x,i[a].y,i[a+1].x,i[a+1].y);a++}else quadraticCurveTo(i[a].x,i[a].y,(i[a].x+i[a+1].x)/2,(i[a].y+i[a+1].y)/2);u=e+1}}}function compileCharString(e,t,a,r){function moveTo(e,a){c&&t.add("L",c);c=[e,a];t.add("M",[e,a])}function lineTo(e,a){t.add("L",[e,a])}function bezierCurveTo(e,a,r,i,n,s){t.add("C",[e,a,r,i,n,s])}const i=[];let n=0,s=0,o=0,c=null;!function parse(e){let c=0;for(;c<e.length;){let l\ -,h,u,d,f,g,p,m,b,y=!1,w=e[c++];switch(w){case 1:case 3:case 18:case 23:o+=i.length>>1;y=!0;break;case 4:s+=i.pop();moveTo(n,s);y=!0;break;case 5:for(;i.length>0;){n+=i.shift();s+=i.shift();lineTo(n,s)}break;case 6:for(;i.length>0;){n+=i.shift();lineTo(n,s);if(0===i.length)break;s+=i.shift();lineTo(n,s)}break;case 7:for(;i.length>0;){s+=i.shift();lineTo(n,s);if(0===i.length)break;n+=i.shift();lineTo(n,s)}break;case 8:for(;i.length>0;){l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.\ -shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}break;case 10:m=i.pop();b=null;if(a.isCFFCIDFont){const e=a.fdSelect.getFDIndex(r);if(e>=0&&e<a.fdArray.length){const t=a.fdArray[e];let r;t.privateDict?.subrsIndex&&(r=t.privateDict.subrsIndex.objects);if(r){m+=getSubroutineBias(r);b=r[m]}}else warn("Invalid fd index for glyph index.")}else b=a.subrs[m+a.subrsBias];b&&parse(b);break;case 11:return;case 12:w=e[c++];switch(w){case 34:l=n+i.shift();h=l+i.shift();f=s+i.shift();n=h+i.shift();bezierCur\ -veTo(l,s,h,f,n,f);l=n+i.shift();h=l+i.shift();n=h+i.shift();bezierCurveTo(l,f,h,s,n,s);break;case 35:l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s);l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s);i.pop();break;case 36:l=n+i.shift();f=s+i.shift();h=l+i.shift();g=f+i.shift();n=h+i.shift();bezierCurveTo(l,f,h,g,n,g);l=n+i.shift();h=l+i.shift();p=g+i.shift();n=h+i.shift();be\ -zierCurveTo(l,g,h,p,n,s);break;case 37:const e=n,t=s;l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s);l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h;s=d;Math.abs(n-e)>Math.abs(s-t)?n+=i.shift():s+=i.shift();bezierCurveTo(l,u,h,d,n,s);break;default:throw new FormatError(`unknown operator: 12 ${w}`)}break;case 14:if(i.length>=4){const e=i.pop(),r=i.pop();s=i.pop();n=i.pop();t.save();t.translate(n,s);let o=lookupCmap(a.cmap,\ -String.fromCharCode(a.glyphNameMap[Ar[e]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId);t.restore();o=lookupCmap(a.cmap,String.fromCharCode(a.glyphNameMap[Ar[r]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId)}return;case 19:case 20:o+=i.length>>1;c+=o+7>>3;y=!0;break;case 21:s+=i.pop();n+=i.pop();moveTo(n,s);y=!0;break;case 22:n+=i.pop();moveTo(n,s);y=!0;break;case 24:for(;i.length>2;){l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurv\ -eTo(l,u,h,d,n,s)}n+=i.shift();s+=i.shift();lineTo(n,s);break;case 25:for(;i.length>6;){n+=i.shift();s+=i.shift();lineTo(n,s)}l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s);break;case 26:i.length%2&&(n+=i.shift());for(;i.length>0;){l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h;s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}break;case 27:i.length%2&&(s+=i.shift());for(;i.length>0;){l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();n=h+i.shi\ -ft();s=d;bezierCurveTo(l,u,h,d,n,s)}break;case 28:i.push(readInt16(e,c));c+=2;break;case 29:m=i.pop()+a.gsubrsBias;b=a.gsubrs[m];b&&parse(b);break;case 30:for(;i.length>0;){l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s);if(0===i.length)break;l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();s=d+i.shift();n=h+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s)}break;case 31:for(;i.length>0;){l=n+i.shift();u=s;h=l+i.shift();d=u+i\ -.shift();s=d+i.shift();n=h+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s);if(0===i.length)break;l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s)}break;default:if(w<32)throw new FormatError(`unknown operator: ${w}`);if(w<247)i.push(w-139);else if(w<251)i.push(256*(w-247)+e[c++]+108);else if(w<255)i.push(256*-(w-251)-e[c++]-108);else{i.push((e[c]<<24|e[c+1]<<16|e[c+2]<<8|e[c+3])/65536);c+=4}}y&&(i.length=0)}}(e)}class Comm\ -ands{cmds=[];transformStack=[];currentTransform=[1,0,0,1,0,0];add(e,t){if(t){const{currentTransform:a}=this;for(let e=0,r=t.length;e<r;e+=2)Util.applyTransform(t,a,e);this.cmds.push(`${e}${t.join(" ")}`)}else this.cmds.push(e)}transform(e){this.currentTransform=Util.transform(this.currentTransform,e)}translate(e,t){this.transform([1,0,0,1,e,t])}save(){this.transformStack.push(this.currentTransform.slice())}restore(){this.currentTransform=this.transformStack.pop()||[1,0,0,1,0,0]}getSVG(){return t\ -his.cmds.join("")}}class CompiledFont{constructor(e){this.fontMatrix=e;this.compiledGlyphs=Object.create(null);this.compiledCharCodeToGlyphId=Object.create(null)}getPathJs(e){const{charCode:t,glyphId:a}=lookupCmap(this.cmap,e);let r,i=this.compiledGlyphs[a];if(void 0===i){try{i=this.compileGlyph(this.glyphs[a],a)}catch(e){i="";r=e}this.compiledGlyphs[a]=i}this.compiledCharCodeToGlyphId[t]??=a;if(r)throw r;return i}compileGlyph(e,a){if(!e?.length||14===e[0])return"";let r=this.fontMatrix;if(this.\ -isCFFCIDFont){const e=this.fdSelect.getFDIndex(a);if(e>=0&&e<this.fdArray.length){r=this.fdArray[e].getByName("FontMatrix")||t}else warn("Invalid fd index for glyph index.")}assert(isNumberArray(r,6),"Expected a valid fontMatrix.");const i=new Commands;i.transform(r.slice());this.compileGlyphImpl(e,i,a);i.add("Z");return i.getSVG()}compileGlyphImpl(){unreachable("Children classes should implement this.")}hasBuiltPath(e){const{charCode:t,glyphId:a}=lookupCmap(this.cmap,e);return void 0!==this.com\ -piledGlyphs[a]&&void 0!==this.compiledCharCodeToGlyphId[t]}}class TrueTypeCompiled extends CompiledFont{constructor(e,t,a){super(a||[488e-6,0,0,488e-6,0,0]);this.glyphs=e;this.cmap=t}compileGlyphImpl(e,t){compileGlyf(e,t,this)}}class Type2Compiled extends CompiledFont{constructor(e,t,a){super(a||[.001,0,0,.001,0,0]);this.glyphs=e.glyphs;this.gsubrs=e.gsubrs||[];this.subrs=e.subrs||[];this.cmap=t;this.glyphNameMap=Fr();this.gsubrsBias=getSubroutineBias(this.gsubrs);this.subrsBias=getSubroutineBia\ -s(this.subrs);this.isCFFCIDFont=e.isCFFCIDFont;this.fdSelect=e.fdSelect;this.fdArray=e.fdArray}compileGlyphImpl(e,t,a){compileCharString(e,t,this,a)}}class FontRendererFactory{static create(e,t){const a=new Uint8Array(e.data);let r,i,n,s,o,c;const l=readUint16(a,4);for(let e=0,h=12;e<l;e++,h+=16){const e=bytesToString(a.subarray(h,h+4)),l=readUint32(a,h+8),u=readUint32(a,h+12);switch(e){case"cmap":r=parseCmap(a,l);break;case"glyf":i=a.subarray(l,l+u);break;case"loca":n=a.subarray(l,l+u);break;ca\ -se"head":c=readUint16(a,l+18);o=readUint16(a,l+50);break;case"CFF ":s=parseCff(a,l,l+u,t)}}if(i){const t=c?[1/c,0,0,1/c,0,0]:e.fontMatrix;return new TrueTypeCompiled(function parseGlyfTable(e,t,a){let r,i;if(a){r=4;i=readUint32}else{r=2;i=(e,t)=>2*readUint16(e,t)}const n=[];let s=i(t,0);for(let a=r;a<t.length;a+=r){const r=i(t,a);n.push(e.subarray(s,r));s=r}return n}(i,n,o),r,t)}return new Type2Compiled(s,r,e.fontMatrix)}}const ii=getLookupTableFactory((function(e){e.Courier=600;e["Courier-Bold"\ -]=600;e["Courier-BoldOblique"]=600;e["Courier-Oblique"]=600;e.Helvetica=getLookupTableFactory((function(e){e.space=278;e.exclam=278;e.quotedbl=355;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=667;e.quoteright=222;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=278;e.semicolon=278;e.less=584;e.equal=584;e.grea\ -ter=584;e.question=556;e.at=1015;e.A=667;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=500;e.K=667;e.L=556;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=278;e.backslash=278;e.bracketright=278;e.asciicircum=469;e.underscore=556;e.quoteleft=222;e.a=556;e.b=556;e.c=500;e.d=556;e.e=556;e.f=278;e.g=556;e.h=556;e.i=222;e.j=222;e.k=500;e.l=222;e.m=833;e.n=556;e.o=556;e.p=556;e.q=556;e.r=333;e.s=500;e.t\ -=278;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=500;e.braceleft=334;e.bar=260;e.braceright=334;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=191;e.quotedblleft=333;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=537;e.bullet=350;e.quotesinglbase=222;e.quotedblbase=333;e.quotedblright=333;e.guillem\ -otright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=556;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=222;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=556;e.ecaron=556;e.Ydieresis=6\ -67;e.divide=584;e.Yacute=667;e.Acircumflex=667;e.aacute=556;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=500;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=500;e.aring=556;e.Ncommaaccent=722;e.lacute=222;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=500;e.scedilla=500;e.iacute=278;e.lozenge=471;e.Rcaron=722;e.Gcommaaccent=778;e.ucirc\ -umflex=556;e.acircumflex=556;e.Amacron=667;e.rcaron=333;e.ccedilla=500;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=643;e.Umacron=722;e.uring=556;e.threesuperior=333;e.Ograve=778;e.Agrave=667;e.Abreve=667;e.multiply=584;e.uacute=556;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=500;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=260;e.regist\ -ered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=333;e.omacron=556;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=222;e.tcaron=317;e.eogonek=556;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=556;e.zacute=500;e.iogonek=222;e.Oacute=778;e.oacute=556;e.amacron=556;e.sacute=500;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=333;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=556;e.Eogo\ -nek=667;e.dcroat=556;e.threequarters=834;e.Scedilla=667;e.lcaron=299;e.Kcommaaccent=667;e.Lacute=556;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=556;e.onehalf=834;e.lessequal=549;e.ocircumflex=556;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=556;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=556;e.Ccaron=722;e.ugrave=556;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=556;e.Rcommaacce\ -nt=722;e.Lcommaaccent=556;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=500;e.minus=584;e.Icircumflex=278;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=584;e.odieresis=556;e.udieresis=556;e.notequal=549;e.gcommaaccent=556;e.eth=556;e.zcaron=500;e.ncommaaccent=556;e.onesuperior=333;e.imacron=278;e.Euro=556}));e["Helvetica-Bold"]=getLookupTableFactory((function(e){e.space=278;e.exclam=333;e.quotedbl=474;e.numbersign=556;e.dollar=556;e\ -.percent=889;e.ampersand=722;e.quoteright=278;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=333;e.semicolon=333;e.less=584;e.equal=584;e.greater=584;e.question=611;e.at=975;e.A=722;e.B=722;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=556;e.K=722;e.L=611;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.\ -S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=584;e.underscore=556;e.quoteleft=278;e.a=556;e.b=611;e.c=556;e.d=611;e.e=556;e.f=333;e.g=611;e.h=611;e.i=278;e.j=278;e.k=556;e.l=278;e.m=889;e.n=611;e.o=611;e.p=611;e.q=611;e.r=389;e.s=556;e.t=333;e.u=611;e.v=556;e.w=778;e.x=556;e.y=556;e.z=500;e.braceleft=389;e.bar=280;e.braceright=389;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=55\ -6;e.florin=556;e.section=556;e.currency=556;e.quotesingle=238;e.quotedblleft=500;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=611;e.fl=611;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=556;e.bullet=350;e.quotesinglbase=278;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring\ -=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=611;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=278;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=611;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=722;e.aacute=556;e.Ucircumflex=722;e.yacute=556;e.scommaaccent=556;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=\ -722;e.uogonek=611;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=556;e.aring=556;e.Ncommaaccent=722;e.lacute=278;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=556;e.scedilla=556;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=611;e.acircumflex=556;e.Amacron=722;e.rcaron=389;e.ccedilla=556;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=743;e.Umacron=722;e.uring=611;\ -e.threesuperior=333;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=584;e.uacute=611;e.Tcaron=611;e.partialdiff=494;e.ydieresis=556;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=556;e.nacute=611;e.umacron=611;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=280;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=611;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent\ -=278;e.tcaron=389;e.eogonek=556;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=556;e.zacute=500;e.iogonek=278;e.Oacute=778;e.oacute=611;e.amacron=556;e.sacute=556;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=611;e.twosuperior=333;e.Odieresis=778;e.mu=611;e.igrave=278;e.ohungarumlaut=611;e.Eogonek=667;e.dcroat=611;e.threequarters=834;e.Scedilla=667;e.lcaron=400;e.Kcommaaccent=722;e.Lacute=611;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=611;e.one\ -half=834;e.lessequal=549;e.ocircumflex=611;e.ntilde=611;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=611;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=611;e.Ccaron=722;e.ugrave=611;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=611;e.Rcommaaccent=722;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=556;e.minus=584;e.Icircumflex=278;e.ncaron\ -=611;e.tcommaaccent=333;e.logicalnot=584;e.odieresis=611;e.udieresis=611;e.notequal=549;e.gcommaaccent=611;e.eth=611;e.zcaron=500;e.ncommaaccent=611;e.onesuperior=333;e.imacron=278;e.Euro=556}));e["Helvetica-BoldOblique"]=getLookupTableFactory((function(e){e.space=278;e.exclam=333;e.quotedbl=474;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=722;e.quoteright=278;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=\ -556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=333;e.semicolon=333;e.less=584;e.equal=584;e.greater=584;e.question=611;e.at=975;e.A=722;e.B=722;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=556;e.K=722;e.L=611;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=584;e.underscore=556;e.quoteleft=278;e.a=55\ -6;e.b=611;e.c=556;e.d=611;e.e=556;e.f=333;e.g=611;e.h=611;e.i=278;e.j=278;e.k=556;e.l=278;e.m=889;e.n=611;e.o=611;e.p=611;e.q=611;e.r=389;e.s=556;e.t=333;e.u=611;e.v=556;e.w=778;e.x=556;e.y=556;e.z=500;e.braceleft=389;e.bar=280;e.braceright=389;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=238;e.quotedblleft=500;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=611;e.fl=611;e.endash=556\ -;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=556;e.bullet=350;e.quotesinglbase=278;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=611;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotl\ -essi=278;e.lslash=278;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=611;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=722;e.aacute=556;e.Ucircumflex=722;e.yacute=556;e.scommaaccent=556;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=611;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=556;e.aring=556;e.Ncommaaccent=722;e.lacute=278;e.agrave=556;e.Tcomm\ -aaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=556;e.scedilla=556;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=611;e.acircumflex=556;e.Amacron=722;e.rcaron=389;e.ccedilla=556;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=743;e.Umacron=722;e.uring=611;e.threesuperior=333;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=584;e.uacute=611;e.Tcaron=611;e.partialdiff=494;e.ydieresis=556;e.Nacute=722;e.icircumflex=278;e.Ecirc\ -umflex=667;e.adieresis=556;e.edieresis=556;e.cacute=556;e.nacute=611;e.umacron=611;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=280;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=611;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=389;e.eogonek=556;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=556;e.zacute=500;e.iogonek=278;e.Oacute=778;e.oacute=611;e.amacron=556;e.sacute=556;e.id\ -ieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=611;e.twosuperior=333;e.Odieresis=778;e.mu=611;e.igrave=278;e.ohungarumlaut=611;e.Eogonek=667;e.dcroat=611;e.threequarters=834;e.Scedilla=667;e.lcaron=400;e.Kcommaaccent=722;e.Lacute=611;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=611;e.onehalf=834;e.lessequal=549;e.ocircumflex=611;e.ntilde=611;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=611;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohung\ -arumlaut=778;e.degree=400;e.ograve=611;e.Ccaron=722;e.ugrave=611;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=611;e.Rcommaaccent=722;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=556;e.minus=584;e.Icircumflex=278;e.ncaron=611;e.tcommaaccent=333;e.logicalnot=584;e.odieresis=611;e.udieresis=611;e.notequal=549;e.gcommaaccent=611;e.eth=611;e.zcaron=500;e.ncommaaccent=611;e.onesuperior=333;e.ima\ -cron=278;e.Euro=556}));e["Helvetica-Oblique"]=getLookupTableFactory((function(e){e.space=278;e.exclam=278;e.quotedbl=355;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=667;e.quoteright=222;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=278;e.semicolon=278;e.less=584;e.equal=584;e.greater=584;e.question=556;e.a\ -t=1015;e.A=667;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=500;e.K=667;e.L=556;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=278;e.backslash=278;e.bracketright=278;e.asciicircum=469;e.underscore=556;e.quoteleft=222;e.a=556;e.b=556;e.c=500;e.d=556;e.e=556;e.f=278;e.g=556;e.h=556;e.i=222;e.j=222;e.k=500;e.l=222;e.m=833;e.n=556;e.o=556;e.p=556;e.q=556;e.r=333;e.s=500;e.t=278;e.u=556;e.v=500;e.w=7\ -22;e.x=500;e.y=500;e.z=500;e.braceleft=334;e.bar=260;e.braceright=334;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=191;e.quotedblleft=333;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=537;e.bullet=350;e.quotesinglbase=222;e.quotedblbase=333;e.quotedblright=333;e.guillemotright=556;e.ellipsis=1e3\ -;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=556;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=222;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=556;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=6\ -67;e.Acircumflex=667;e.aacute=556;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=500;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=500;e.aring=556;e.Ncommaaccent=722;e.lacute=222;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=500;e.scedilla=500;e.iacute=278;e.lozenge=471;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=5\ -56;e.Amacron=667;e.rcaron=333;e.ccedilla=500;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=643;e.Umacron=722;e.uring=556;e.threesuperior=333;e.Ograve=778;e.Agrave=667;e.Abreve=667;e.multiply=584;e.uacute=556;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=500;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=260;e.registered=737;e.Gbreve=778;e.Id\ -otaccent=278;e.summation=600;e.Egrave=667;e.racute=333;e.omacron=556;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=222;e.tcaron=317;e.eogonek=556;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=556;e.zacute=500;e.iogonek=222;e.Oacute=778;e.oacute=556;e.amacron=556;e.sacute=500;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=333;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=556;e.Eogonek=667;e.dcroat=556;e.thr\ -eequarters=834;e.Scedilla=667;e.lcaron=299;e.Kcommaaccent=667;e.Lacute=556;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=556;e.onehalf=834;e.lessequal=549;e.ocircumflex=556;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=556;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=556;e.Ccaron=722;e.ugrave=556;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=556;e.Rcommaaccent=722;e.Lcommaaccent=556;\ -e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=500;e.minus=584;e.Icircumflex=278;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=584;e.odieresis=556;e.udieresis=556;e.notequal=549;e.gcommaaccent=556;e.eth=556;e.zcaron=500;e.ncommaaccent=556;e.onesuperior=333;e.imacron=278;e.Euro=556}));e.Symbol=getLookupTableFactory((function(e){e.space=250;e.exclam=333;e.universal=713;e.numbersign=500;e.existential=549;e.percent=833;e.ampersand=778;e.\ -suchthat=439;e.parenleft=333;e.parenright=333;e.asteriskmath=500;e.plus=549;e.comma=250;e.minus=549;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=278;e.semicolon=278;e.less=549;e.equal=549;e.greater=549;e.question=444;e.congruent=549;e.Alpha=722;e.Beta=667;e.Chi=722;e.Delta=612;e.Epsilon=611;e.Phi=763;e.Gamma=603;e.Eta=722;e.Iota=333;e.theta1=631;e.Kappa=722;e.Lambda=686;e.Mu=889;e.Nu=722;e.Omicron=7\ -22;e.Pi=768;e.Theta=741;e.Rho=556;e.Sigma=592;e.Tau=611;e.Upsilon=690;e.sigma1=439;e.Omega=768;e.Xi=645;e.Psi=795;e.Zeta=611;e.bracketleft=333;e.therefore=863;e.bracketright=333;e.perpendicular=658;e.underscore=500;e.radicalex=500;e.alpha=631;e.beta=549;e.chi=549;e.delta=494;e.epsilon=439;e.phi=521;e.gamma=411;e.eta=603;e.iota=329;e.phi1=603;e.kappa=549;e.lambda=549;e.mu=576;e.nu=521;e.omicron=549;e.pi=549;e.theta=521;e.rho=549;e.sigma=603;e.tau=439;e.upsilon=576;e.omega1=713;e.omega=686;e.xi=49\ -3;e.psi=686;e.zeta=494;e.braceleft=480;e.bar=200;e.braceright=480;e.similar=549;e.Euro=750;e.Upsilon1=620;e.minute=247;e.lessequal=549;e.fraction=167;e.infinity=713;e.florin=500;e.club=753;e.diamond=753;e.heart=753;e.spade=753;e.arrowboth=1042;e.arrowleft=987;e.arrowup=603;e.arrowright=987;e.arrowdown=603;e.degree=400;e.plusminus=549;e.second=411;e.greaterequal=549;e.multiply=549;e.proportional=713;e.partialdiff=494;e.bullet=460;e.divide=549;e.notequal=549;e.equivalence=549;e.approxequal=549;e.e\ -llipsis=1e3;e.arrowvertex=603;e.arrowhorizex=1e3;e.carriagereturn=658;e.aleph=823;e.Ifraktur=686;e.Rfraktur=795;e.weierstrass=987;e.circlemultiply=768;e.circleplus=768;e.emptyset=823;e.intersection=768;e.union=768;e.propersuperset=713;e.reflexsuperset=713;e.notsubset=713;e.propersubset=713;e.reflexsubset=713;e.element=713;e.notelement=713;e.angle=768;e.gradient=713;e.registerserif=790;e.copyrightserif=790;e.trademarkserif=890;e.product=823;e.radical=549;e.dotmath=250;e.logicalnot=713;e.logicalan\ -d=603;e.logicalor=603;e.arrowdblboth=1042;e.arrowdblleft=987;e.arrowdblup=603;e.arrowdblright=987;e.arrowdbldown=603;e.lozenge=494;e.angleleft=329;e.registersans=790;e.copyrightsans=790;e.trademarksans=786;e.summation=713;e.parenlefttp=384;e.parenleftex=384;e.parenleftbt=384;e.bracketlefttp=384;e.bracketleftex=384;e.bracketleftbt=384;e.bracelefttp=494;e.braceleftmid=494;e.braceleftbt=494;e.braceex=494;e.angleright=329;e.integral=274;e.integraltp=686;e.integralex=686;e.integralbt=686;e.parenright\ -tp=384;e.parenrightex=384;e.parenrightbt=384;e.bracketrighttp=384;e.bracketrightex=384;e.bracketrightbt=384;e.bracerighttp=494;e.bracerightmid=494;e.bracerightbt=494;e.apple=790}));e["Times-Roman"]=getLookupTableFactory((function(e){e.space=250;e.exclam=333;e.quotedbl=408;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=564;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=50\ -0;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=278;e.semicolon=278;e.less=564;e.equal=564;e.greater=564;e.question=444;e.at=921;e.A=722;e.B=667;e.C=667;e.D=722;e.E=611;e.F=556;e.G=722;e.H=722;e.I=333;e.J=389;e.K=722;e.L=611;e.M=889;e.N=722;e.O=722;e.P=556;e.Q=722;e.R=667;e.S=556;e.T=611;e.U=722;e.V=722;e.W=944;e.X=722;e.Y=722;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=469;e.underscore=500;e.quoteleft=333;e.a=444;e.b=500;e.c=444;e.d=50\ -0;e.e=444;e.f=333;e.g=500;e.h=500;e.i=278;e.j=278;e.k=500;e.l=278;e.m=778;e.n=500;e.o=500;e.p=500;e.q=500;e.r=333;e.s=389;e.t=278;e.u=500;e.v=500;e.w=722;e.x=500;e.y=500;e.z=444;e.braceleft=480;e.bar=200;e.braceright=480;e.asciitilde=541;e.exclamdown=333;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=180;e.quotedblleft=444;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdb\ -l=500;e.periodcentered=250;e.paragraph=453;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=444;e.quotedblright=444;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=444;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=889;e.ordfeminine=276;e.Lslash=611;e.Oslash=722;e.OE=889;e.ordmasculine=310;e.ae=667;e.dotlessi=278;e.lslash=278;e.\ -oslash=500;e.oe=722;e.germandbls=500;e.Idieresis=333;e.eacute=444;e.abreve=444;e.uhungarumlaut=500;e.ecaron=444;e.Ydieresis=722;e.divide=564;e.Yacute=722;e.Acircumflex=722;e.aacute=444;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=444;e.Uacute=722;e.uogonek=500;e.Edieresis=611;e.Dcroat=722;e.commaaccent=250;e.copyright=760;e.Emacron=611;e.ccaron=444;e.aring=444;e.Ncommaaccent=722;e.lacute=278;e.agrave=444;e.Tcommaaccent=611;e.Cacute=667\ -;e.atilde=444;e.Edotaccent=611;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=471;e.Rcaron=667;e.Gcommaaccent=722;e.ucircumflex=500;e.acircumflex=444;e.Amacron=722;e.rcaron=333;e.ccedilla=444;e.Zdotaccent=611;e.Thorn=556;e.Omacron=722;e.Racute=667;e.Sacute=556;e.dcaron=588;e.Umacron=722;e.uring=500;e.threesuperior=300;e.Ograve=722;e.Agrave=722;e.Abreve=722;e.multiply=564;e.uacute=500;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=611;e.adieresis=4\ -44;e.edieresis=444;e.cacute=444;e.nacute=500;e.umacron=500;e.Ncaron=722;e.Iacute=333;e.plusminus=564;e.brokenbar=200;e.registered=760;e.Gbreve=722;e.Idotaccent=333;e.summation=600;e.Egrave=611;e.racute=333;e.omacron=500;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=326;e.eogonek=444;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=444;e.zacute=444;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=444;e.sacute=389;e.idieresis=278;e.Ocircumfle\ -x=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=500;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=611;e.dcroat=500;e.threequarters=750;e.Scedilla=556;e.lcaron=344;e.Kcommaaccent=722;e.Lacute=611;e.trademark=980;e.edotaccent=444;e.Igrave=333;e.Imacron=333;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=500;e.Uhungarumlaut=722;e.Eacute=611;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=722;e.degree=40\ -0;e.ograve=500;e.Ccaron=667;e.ugrave=500;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=667;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=722;e.zdotaccent=444;e.Ecaron=611;e.Iogonek=333;e.kcommaaccent=500;e.minus=564;e.Icircumflex=333;e.ncaron=500;e.tcommaaccent=278;e.logicalnot=564;e.odieresis=500;e.udieresis=500;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=444;e.ncommaaccent=500;e.onesuperior=300;e.imacron=278;e.Euro=500}));e\ -["Times-Bold"]=getLookupTableFactory((function(e){e.space=250;e.exclam=333;e.quotedbl=555;e.numbersign=500;e.dollar=500;e.percent=1e3;e.ampersand=833;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=570;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=570;e.equal=570;e.greater=570;e.question=500;e.at=930;e.A=722;e.B=667;e.C=722;e\ -.D=722;e.E=667;e.F=611;e.G=778;e.H=778;e.I=389;e.J=500;e.K=778;e.L=667;e.M=944;e.N=722;e.O=778;e.P=611;e.Q=778;e.R=722;e.S=556;e.T=667;e.U=722;e.V=722;e.W=1e3;e.X=722;e.Y=722;e.Z=667;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=581;e.underscore=500;e.quoteleft=333;e.a=500;e.b=556;e.c=444;e.d=556;e.e=444;e.f=333;e.g=500;e.h=556;e.i=278;e.j=333;e.k=556;e.l=278;e.m=833;e.n=556;e.o=500;e.p=556;e.q=556;e.r=444;e.s=389;e.t=333;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=444;e.bra\ -celeft=394;e.bar=220;e.braceright=394;e.asciitilde=520;e.exclamdown=333;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=278;e.quotedblleft=500;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=540;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondow\ -n=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=300;e.Lslash=667;e.Oslash=778;e.OE=1e3;e.ordmasculine=330;e.ae=722;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=556;e.Idieresis=389;e.eacute=444;e.abreve=500;e.uhungarumlaut=556;e.ecaron=444;e.Ydieresis=722;e.divide=570;e.Yacute=722;e.Acircumflex=722;e.aacute=50\ -0;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=747;e.Emacron=667;e.ccaron=444;e.aring=500;e.Ncommaaccent=722;e.lacute=278;e.agrave=500;e.Tcommaaccent=667;e.Cacute=722;e.atilde=500;e.Edotaccent=667;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=500;e.Amacron=722;e.rcaron=444;e.\ -ccedilla=444;e.Zdotaccent=667;e.Thorn=611;e.Omacron=778;e.Racute=722;e.Sacute=556;e.dcaron=672;e.Umacron=722;e.uring=556;e.threesuperior=300;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=570;e.uacute=556;e.Tcaron=667;e.partialdiff=494;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=389;e.plusminus=570;e.brokenbar=220;e.registered=747;e.Gbreve=778;e.Idotaccent=389;e.summation=600;e.E\ -grave=667;e.racute=444;e.omacron=500;e.Zacute=667;e.Zcaron=667;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=416;e.eogonek=444;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=444;e.zacute=444;e.iogonek=278;e.Oacute=778;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=300;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=667;e.dcroat=556;e.threequarters=750;e.Scedilla=556;e.\ -lcaron=394;e.Kcommaaccent=778;e.Lacute=667;e.trademark=1e3;e.edotaccent=444;e.Igrave=389;e.Imacron=389;e.Lcaron=667;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=778;e.degree=400;e.ograve=500;e.Ccaron=722;e.ugrave=556;e.radical=549;e.Dcaron=722;e.rcommaaccent=444;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=722;e.Lcommaaccent=667;e.Atilde=722;e.Aogonek=722;e.Ari\ -ng=722;e.Otilde=778;e.zdotaccent=444;e.Ecaron=667;e.Iogonek=389;e.kcommaaccent=556;e.minus=570;e.Icircumflex=389;e.ncaron=556;e.tcommaaccent=333;e.logicalnot=570;e.odieresis=500;e.udieresis=556;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=444;e.ncommaaccent=556;e.onesuperior=300;e.imacron=278;e.Euro=500}));e["Times-BoldItalic"]=getLookupTableFactory((function(e){e.space=250;e.exclam=389;e.quotedbl=555;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenlef\ -t=333;e.parenright=333;e.asterisk=500;e.plus=570;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=570;e.equal=570;e.greater=570;e.question=500;e.at=832;e.A=667;e.B=667;e.C=667;e.D=722;e.E=667;e.F=667;e.G=722;e.H=778;e.I=389;e.J=500;e.K=667;e.L=611;e.M=889;e.N=722;e.O=722;e.P=611;e.Q=722;e.R=667;e.S=556;e.T=611;e.U=722;e.V=667;e.W=889;e.X=667;e.Y=611;e.\ -Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=570;e.underscore=500;e.quoteleft=333;e.a=500;e.b=500;e.c=444;e.d=500;e.e=444;e.f=333;e.g=500;e.h=556;e.i=278;e.j=278;e.k=500;e.l=278;e.m=778;e.n=556;e.o=500;e.p=500;e.q=500;e.r=389;e.s=389;e.t=278;e.u=556;e.v=444;e.w=667;e.x=500;e.y=444;e.z=389;e.braceleft=348;e.bar=220;e.braceright=348;e.asciitilde=570;e.exclamdown=389;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingl\ -e=278;e.quotedblleft=500;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=500;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.car\ -on=333;e.emdash=1e3;e.AE=944;e.ordfeminine=266;e.Lslash=611;e.Oslash=722;e.OE=944;e.ordmasculine=300;e.ae=722;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=500;e.Idieresis=389;e.eacute=444;e.abreve=500;e.uhungarumlaut=556;e.ecaron=444;e.Ydieresis=611;e.divide=570;e.Yacute=611;e.Acircumflex=667;e.aacute=500;e.Ucircumflex=722;e.yacute=444;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaac\ -cent=250;e.copyright=747;e.Emacron=667;e.ccaron=444;e.aring=500;e.Ncommaaccent=722;e.lacute=278;e.agrave=500;e.Tcommaaccent=611;e.Cacute=667;e.atilde=500;e.Edotaccent=667;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=494;e.Rcaron=667;e.Gcommaaccent=722;e.ucircumflex=556;e.acircumflex=500;e.Amacron=667;e.rcaron=389;e.ccedilla=444;e.Zdotaccent=611;e.Thorn=611;e.Omacron=722;e.Racute=667;e.Sacute=556;e.dcaron=608;e.Umacron=722;e.uring=556;e.threesuperior=300;e.Ograve=722;e.Agrave=667;e.Abreve=6\ -67;e.multiply=570;e.uacute=556;e.Tcaron=611;e.partialdiff=494;e.ydieresis=444;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=389;e.plusminus=570;e.brokenbar=220;e.registered=747;e.Gbreve=722;e.Idotaccent=389;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=500;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=366;e.eogonek=444;e.Uogonek=722;e.Aacute=6\ -67;e.Adieresis=667;e.egrave=444;e.zacute=389;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=576;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=667;e.dcroat=500;e.threequarters=750;e.Scedilla=556;e.lcaron=382;e.Kcommaaccent=667;e.Lacute=611;e.trademark=1e3;e.edotaccent=444;e.Igrave=389;e.Imacron=389;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=556;\ -e.Uhungarumlaut=722;e.Eacute=667;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=556;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=667;e.Lcommaaccent=611;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=722;e.zdotaccent=389;e.Ecaron=667;e.Iogonek=389;e.kcommaaccent=500;e.minus=606;e.Icircumflex=389;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=606;e.odieresis=500\ -;e.udieresis=556;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=389;e.ncommaaccent=556;e.onesuperior=300;e.imacron=278;e.Euro=500}));e["Times-Italic"]=getLookupTableFactory((function(e){e.space=250;e.exclam=333;e.quotedbl=420;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=675;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven\ -=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=675;e.equal=675;e.greater=675;e.question=500;e.at=920;e.A=611;e.B=611;e.C=667;e.D=722;e.E=611;e.F=611;e.G=722;e.H=722;e.I=333;e.J=444;e.K=667;e.L=556;e.M=833;e.N=667;e.O=722;e.P=611;e.Q=722;e.R=611;e.S=500;e.T=556;e.U=722;e.V=611;e.W=833;e.X=611;e.Y=556;e.Z=556;e.bracketleft=389;e.backslash=278;e.bracketright=389;e.asciicircum=422;e.underscore=500;e.quoteleft=333;e.a=500;e.b=500;e.c=444;e.d=500;e.e=444;e.f=278;e.g=500;e.h=500;e.i=278\ -;e.j=278;e.k=444;e.l=278;e.m=722;e.n=500;e.o=500;e.p=500;e.q=500;e.r=389;e.s=389;e.t=278;e.u=500;e.v=444;e.w=667;e.x=444;e.y=444;e.z=389;e.braceleft=400;e.bar=275;e.braceright=400;e.asciitilde=541;e.exclamdown=389;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=214;e.quotedblleft=556;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=52\ -3;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=556;e.quotedblright=556;e.guillemotright=500;e.ellipsis=889;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=889;e.AE=889;e.ordfeminine=276;e.Lslash=556;e.Oslash=722;e.OE=944;e.ordmasculine=310;e.ae=667;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=667;e.germandbls=500;e.Id\ -ieresis=333;e.eacute=444;e.abreve=500;e.uhungarumlaut=500;e.ecaron=444;e.Ydieresis=556;e.divide=675;e.Yacute=556;e.Acircumflex=611;e.aacute=500;e.Ucircumflex=722;e.yacute=444;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=500;e.Edieresis=611;e.Dcroat=722;e.commaaccent=250;e.copyright=760;e.Emacron=611;e.ccaron=444;e.aring=500;e.Ncommaaccent=667;e.lacute=278;e.agrave=500;e.Tcommaaccent=556;e.Cacute=667;e.atilde=500;e.Edotaccent=611;e.scaron=3\ -89;e.scedilla=389;e.iacute=278;e.lozenge=471;e.Rcaron=611;e.Gcommaaccent=722;e.ucircumflex=500;e.acircumflex=500;e.Amacron=611;e.rcaron=389;e.ccedilla=444;e.Zdotaccent=556;e.Thorn=611;e.Omacron=722;e.Racute=611;e.Sacute=500;e.dcaron=544;e.Umacron=722;e.uring=500;e.threesuperior=300;e.Ograve=722;e.Agrave=611;e.Abreve=611;e.multiply=675;e.uacute=500;e.Tcaron=556;e.partialdiff=476;e.ydieresis=444;e.Nacute=667;e.icircumflex=278;e.Ecircumflex=611;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=\ -500;e.umacron=500;e.Ncaron=667;e.Iacute=333;e.plusminus=675;e.brokenbar=275;e.registered=760;e.Gbreve=722;e.Idotaccent=333;e.summation=600;e.Egrave=611;e.racute=389;e.omacron=500;e.Zacute=556;e.Zcaron=556;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=300;e.eogonek=444;e.Uogonek=722;e.Aacute=611;e.Adieresis=611;e.egrave=444;e.zacute=389;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=50\ -0;e.twosuperior=300;e.Odieresis=722;e.mu=500;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=611;e.dcroat=500;e.threequarters=750;e.Scedilla=500;e.lcaron=300;e.Kcommaaccent=667;e.Lacute=556;e.trademark=980;e.edotaccent=444;e.Igrave=333;e.Imacron=333;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=500;e.Uhungarumlaut=722;e.Eacute=611;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=500;e.Scommaaccent=500;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=500;\ -e.radical=453;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=667;e.otilde=500;e.Rcommaaccent=611;e.Lcommaaccent=556;e.Atilde=611;e.Aogonek=611;e.Aring=611;e.Otilde=722;e.zdotaccent=389;e.Ecaron=611;e.Iogonek=333;e.kcommaaccent=444;e.minus=675;e.Icircumflex=333;e.ncaron=500;e.tcommaaccent=278;e.logicalnot=675;e.odieresis=500;e.udieresis=500;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=389;e.ncommaaccent=500;e.onesuperior=300;e.imacron=278;e.Euro=500}));e.ZapfDingbats=getLookupTableFactory((func\ -tion(e){e.space=278;e.a1=974;e.a2=961;e.a202=974;e.a3=980;e.a4=719;e.a5=789;e.a119=790;e.a118=791;e.a117=690;e.a11=960;e.a12=939;e.a13=549;e.a14=855;e.a15=911;e.a16=933;e.a105=911;e.a17=945;e.a18=974;e.a19=755;e.a20=846;e.a21=762;e.a22=761;e.a23=571;e.a24=677;e.a25=763;e.a26=760;e.a27=759;e.a28=754;e.a6=494;e.a7=552;e.a8=537;e.a9=577;e.a10=692;e.a29=786;e.a30=788;e.a31=788;e.a32=790;e.a33=793;e.a34=794;e.a35=816;e.a36=823;e.a37=789;e.a38=841;e.a39=823;e.a40=833;e.a41=816;e.a42=831;e.a43=923;e.a4\ -4=744;e.a45=723;e.a46=749;e.a47=790;e.a48=792;e.a49=695;e.a50=776;e.a51=768;e.a52=792;e.a53=759;e.a54=707;e.a55=708;e.a56=682;e.a57=701;e.a58=826;e.a59=815;e.a60=789;e.a61=789;e.a62=707;e.a63=687;e.a64=696;e.a65=689;e.a66=786;e.a67=787;e.a68=713;e.a69=791;e.a70=785;e.a71=791;e.a72=873;e.a73=761;e.a74=762;e.a203=762;e.a75=759;e.a204=759;e.a76=892;e.a77=892;e.a78=788;e.a79=784;e.a81=438;e.a82=138;e.a83=277;e.a84=415;e.a97=392;e.a98=392;e.a99=668;e.a100=668;e.a89=390;e.a90=390;e.a93=317;e.a94=317;e\ -.a91=276;e.a92=276;e.a205=509;e.a85=509;e.a206=410;e.a86=410;e.a87=234;e.a88=234;e.a95=334;e.a96=334;e.a101=732;e.a102=544;e.a103=544;e.a104=910;e.a106=667;e.a107=760;e.a108=760;e.a112=776;e.a111=595;e.a110=694;e.a109=626;e.a120=788;e.a121=788;e.a122=788;e.a123=788;e.a124=788;e.a125=788;e.a126=788;e.a127=788;e.a128=788;e.a129=788;e.a130=788;e.a131=788;e.a132=788;e.a133=788;e.a134=788;e.a135=788;e.a136=788;e.a137=788;e.a138=788;e.a139=788;e.a140=788;e.a141=788;e.a142=788;e.a143=788;e.a144=788;e.a\ -145=788;e.a146=788;e.a147=788;e.a148=788;e.a149=788;e.a150=788;e.a151=788;e.a152=788;e.a153=788;e.a154=788;e.a155=788;e.a156=788;e.a157=788;e.a158=788;e.a159=788;e.a160=894;e.a161=838;e.a163=1016;e.a164=458;e.a196=748;e.a165=924;e.a192=748;e.a166=918;e.a167=927;e.a168=928;e.a169=928;e.a170=834;e.a171=873;e.a172=828;e.a173=924;e.a162=924;e.a174=917;e.a175=930;e.a176=931;e.a177=463;e.a178=883;e.a179=836;e.a193=836;e.a180=867;e.a199=867;e.a181=696;e.a200=696;e.a182=874;e.a201=874;e.a183=760;e.a184=\ -946;e.a197=771;e.a185=865;e.a194=771;e.a198=888;e.a186=967;e.a195=888;e.a187=831;e.a188=873;e.a189=927;e.a190=970;e.a191=918}))})),ni=getLookupTableFactory((function(e){e.Courier={ascent:629,descent:-157,capHeight:562,xHeight:-426};e["Courier-Bold"]={ascent:629,descent:-157,capHeight:562,xHeight:439};e["Courier-Oblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426};e["Courier-BoldOblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426};e.Helvetica={ascent:718,descent:-207,capHeight:7\ -18,xHeight:523};e["Helvetica-Bold"]={ascent:718,descent:-207,capHeight:718,xHeight:532};e["Helvetica-Oblique"]={ascent:718,descent:-207,capHeight:718,xHeight:523};e["Helvetica-BoldOblique"]={ascent:718,descent:-207,capHeight:718,xHeight:532};e["Times-Roman"]={ascent:683,descent:-217,capHeight:662,xHeight:450};e["Times-Bold"]={ascent:683,descent:-217,capHeight:676,xHeight:461};e["Times-Italic"]={ascent:683,descent:-217,capHeight:653,xHeight:441};e["Times-BoldItalic"]={ascent:683,descent:-217,capH\ -eight:669,xHeight:462};e.Symbol={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN};e.ZapfDingbats={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN}}));class GlyfTable{constructor({glyfTable:e,isGlyphLocationsLong:t,locaTable:a,numGlyphs:r}){this.glyphs=[];const i=new DataView(a.buffer,a.byteOffset,a.byteLength),n=new DataView(e.buffer,e.byteOffset,e.byteLength),s=t?4:2;let o=t?i.getUint32(0):2*i.getUint16(0),c=0;for(let e=0;e<r;e++){c+=s;const e=t?i.getUi\ -nt32(c):2*i.getUint16(c);if(e===o){this.glyphs.push(new Glyph({}));continue}const a=Glyph.parse(o,n);this.glyphs.push(a);o=e}}getSize(){return Math.sumPrecise(this.glyphs.map((e=>e.getSize()+3&-4)))}write(){const e=this.getSize(),t=new DataView(new ArrayBuffer(e)),a=e>131070,r=a?4:2,i=new DataView(new ArrayBuffer((this.glyphs.length+1)*r));a?i.setUint32(0,0):i.setUint16(0,0);let n=0,s=0;for(const e of this.glyphs){n+=e.write(n,t);n=n+3&-4;s+=r;a?i.setUint32(s,n):i.setUint16(s,n>>1)}return{isLoca\ -tionLong:a,loca:new Uint8Array(i.buffer),glyf:new Uint8Array(t.buffer)}}scale(e){for(let t=0,a=this.glyphs.length;t<a;t++)this.glyphs[t].scale(e[t])}}class Glyph{constructor({header:e=null,simple:t=null,composites:a=null}){this.header=e;this.simple=t;this.composites=a}static parse(e,t){const[a,r]=GlyphHeader.parse(e,t);e+=a;if(r.numberOfContours<0){const a=[];for(;;){const[r,i]=CompositeGlyph.parse(e,t);e+=r;a.push(i);if(!(32&i.flags))break}return new Glyph({header:r,composites:a})}const i=Simpl\ -eGlyph.parse(e,t,r.numberOfContours);return new Glyph({header:r,simple:i})}getSize(){if(!this.header)return 0;const e=this.simple?this.simple.getSize():Math.sumPrecise(this.composites.map((e=>e.getSize())));return this.header.getSize()+e}write(e,t){if(!this.header)return 0;const a=e;e+=this.header.write(e,t);if(this.simple)e+=this.simple.write(e,t);else for(const a of this.composites)e+=a.write(e,t);return e-a}scale(e){if(!this.header)return;const t=(this.header.xMin+this.header.xMax)/2;this.hea\ -der.scale(t,e);if(this.simple)this.simple.scale(t,e);else for(const a of this.composites)a.scale(t,e)}}class GlyphHeader{constructor({numberOfContours:e,xMin:t,yMin:a,xMax:r,yMax:i}){this.numberOfContours=e;this.xMin=t;this.yMin=a;this.xMax=r;this.yMax=i}static parse(e,t){return[10,new GlyphHeader({numberOfContours:t.getInt16(e),xMin:t.getInt16(e+2),yMin:t.getInt16(e+4),xMax:t.getInt16(e+6),yMax:t.getInt16(e+8)})]}getSize(){return 10}write(e,t){t.setInt16(e,this.numberOfContours);t.setInt16(e+2,\ -this.xMin);t.setInt16(e+4,this.yMin);t.setInt16(e+6,this.xMax);t.setInt16(e+8,this.yMax);return 10}scale(e,t){this.xMin=Math.round(e+(this.xMin-e)*t);this.xMax=Math.round(e+(this.xMax-e)*t)}}class Contour{constructor({flags:e,xCoordinates:t,yCoordinates:a}){this.xCoordinates=t;this.yCoordinates=a;this.flags=e}}class SimpleGlyph{constructor({contours:e,instructions:t}){this.contours=e;this.instructions=t}static parse(e,t,a){const r=[];for(let i=0;i<a;i++){const a=t.getUint16(e);e+=2;r.push(a)}con\ -st i=r[a-1]+1,n=t.getUint16(e);e+=2;const s=new Uint8Array(t).slice(e,e+n);e+=n;const o=[];for(let a=0;a<i;e++,a++){let r=t.getUint8(e);o.push(r);if(8&r){const i=t.getUint8(++e);r^=8;for(let e=0;e<i;e++)o.push(r);a+=i}}const c=[];let l=[],h=[],u=[];const d=[];let f=0,g=0;for(let a=0;a<i;a++){const i=o[a];if(2&i){const a=t.getUint8(e++);g+=16&i?a:-a;l.push(g)}else if(16&i)l.push(g);else{g+=t.getInt16(e);e+=2;l.push(g)}if(r[f]===a){f++;c.push(l);l=[]}}g=0;f=0;for(let a=0;a<i;a++){const i=o[a];if(4\ -&i){const a=t.getUint8(e++);g+=32&i?a:-a;h.push(g)}else if(32&i)h.push(g);else{g+=t.getInt16(e);e+=2;h.push(g)}u.push(1&i|64&i);if(r[f]===a){l=c[f];f++;d.push(new Contour({flags:u,xCoordinates:l,yCoordinates:h}));h=[];u=[]}}return new SimpleGlyph({contours:d,instructions:s})}getSize(){let e=2*this.contours.length+2+this.instructions.length,t=0,a=0;for(const r of this.contours){e+=r.flags.length;for(let i=0,n=r.xCoordinates.length;i<n;i++){const n=r.xCoordinates[i],s=r.yCoordinates[i];let o=Math.\ -abs(n-t);o>255?e+=2:o>0&&(e+=1);t=n;o=Math.abs(s-a);o>255?e+=2:o>0&&(e+=1);a=s}}return e}write(e,t){const a=e,r=[],i=[],n=[];let s=0,o=0;for(const a of this.contours){for(let e=0,t=a.xCoordinates.length;e<t;e++){let t=a.flags[e];const c=a.xCoordinates[e];let l=c-s;if(0===l){t|=16;r.push(0)}else{const e=Math.abs(l);if(e<=255){t|=l>=0?18:2;r.push(e)}else r.push(l)}s=c;const h=a.yCoordinates[e];l=h-o;if(0===l){t|=32;i.push(0)}else{const e=Math.abs(l);if(e<=255){t|=l>=0?36:4;i.push(e)}else i.push(l)\ -}o=h;n.push(t)}t.setUint16(e,r.length-1);e+=2}t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}for(const a of n)t.setUint8(e++,a);for(let a=0,i=r.length;a<i;a++){const i=r[a],s=n[a];if(2&s)t.setUint8(e++,i);else if(!(16&s)){t.setInt16(e,i);e+=2}}for(let a=0,r=i.length;a<r;a++){const r=i[a],s=n[a];if(4&s)t.setUint8(e++,r);else if(!(32&s)){t.setInt16(e,r);e+=2}}return e-a}sc\ -ale(e,t){for(const a of this.contours)if(0!==a.xCoordinates.length)for(let r=0,i=a.xCoordinates.length;r<i;r++)a.xCoordinates[r]=Math.round(e+(a.xCoordinates[r]-e)*t)}}class CompositeGlyph{constructor({flags:e,glyphIndex:t,argument1:a,argument2:r,transf:i,instructions:n}){this.flags=e;this.glyphIndex=t;this.argument1=a;this.argument2=r;this.transf=i;this.instructions=n}static parse(e,t){const a=e,r=[];let i=t.getUint16(e);const n=t.getUint16(e+2);e+=4;let s,o;if(1&i){if(2&i){s=t.getInt16(e);o=t.\ -getInt16(e+2)}else{s=t.getUint16(e);o=t.getUint16(e+2)}e+=4;i^=1}else{if(2&i){s=t.getInt8(e);o=t.getInt8(e+1)}else{s=t.getUint8(e);o=t.getUint8(e+1)}e+=2}if(8&i){r.push(t.getUint16(e));e+=2}else if(64&i){r.push(t.getUint16(e),t.getUint16(e+2));e+=4}else if(128&i){r.push(t.getUint16(e),t.getUint16(e+2),t.getUint16(e+4),t.getUint16(e+6));e+=8}let c=null;if(256&i){const a=t.getUint16(e);e+=2;c=new Uint8Array(t).slice(e,e+a);e+=a}return[e-a,new CompositeGlyph({flags:i,glyphIndex:n,argument1:s,argume\ -nt2:o,transf:r,instructions:c})]}getSize(){let e=4+2*this.transf.length;256&this.flags&&(e+=2+this.instructions.length);e+=2;2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2);return e}write(e,t){const a=e;2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=25\ -5&&this.argument2>=0&&this.argument2<=255||(this.flags|=1);t.setUint16(e,this.flags);t.setUint16(e+2,this.glyphIndex);e+=4;if(1&this.flags){if(2&this.flags){t.setInt16(e,this.argument1);t.setInt16(e+2,this.argument2)}else{t.setUint16(e,this.argument1);t.setUint16(e+2,this.argument2)}e+=4}else{t.setUint8(e,this.argument1);t.setUint8(e+1,this.argument2);e+=2}if(256&this.flags){t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).s\ -et(this.instructions,e);e+=this.instructions.length}}return e-a}scale(e,t){}}function writeInt16(e,t,a){e[t]=a>>8&255;e[t+1]=255&a}function writeInt32(e,t,a){e[t]=a>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}function writeData(e,t,a){if(a instanceof Uint8Array)e.set(a,t);else if("string"==typeof a)for(let r=0,i=a.length;r<i;r++)e[t++]=255&a.charCodeAt(r);else for(const r of a)e[t++]=255&r}class OpenTypeFileBuilder{constructor(e){this.sfnt=e;this.tables=Object.create(null)}static getSe\ -archParams(e,t){let a=1,r=0;for(;(a^e)>a;){a<<=1;r++}const i=a*t;return{range:i,entry:r,rangeShift:t*e-i}}toArray(){let e=this.sfnt;const t=this.tables,a=Object.keys(t);a.sort();const r=a.length;let i,n,s,o,c,l=12+16*r;const h=[l];for(i=0;i<r;i++){o=t[a[i]];l+=(o.length+3&-4)>>>0;h.push(l)}const u=new Uint8Array(l);for(i=0;i<r;i++){o=t[a[i]];writeData(u,h[i],o)}"true"===e&&(e=string32(65536));u[0]=255&e.charCodeAt(0);u[1]=255&e.charCodeAt(1);u[2]=255&e.charCodeAt(2);u[3]=255&e.charCodeAt(3);writ\ -eInt16(u,4,r);const d=OpenTypeFileBuilder.getSearchParams(r,16);writeInt16(u,6,d.range);writeInt16(u,8,d.entry);writeInt16(u,10,d.rangeShift);l=12;for(i=0;i<r;i++){c=a[i];u[l]=255&c.charCodeAt(0);u[l+1]=255&c.charCodeAt(1);u[l+2]=255&c.charCodeAt(2);u[l+3]=255&c.charCodeAt(3);let e=0;for(n=h[i],s=h[i+1];n<s;n+=4){e=e+readUint32(u,n)>>>0}writeInt32(u,l+4,e);writeInt32(u,l+8,h[i]);writeInt32(u,l+12,t[c].length);l+=16}return u}addTable(e,t){if(e in this.tables)throw new Error("Table "+e+" already e\ -xists");this.tables[e]=t}}const si=[4],oi=[5],ci=[6],li=[7],hi=[8],ui=[12,35],di=[14],fi=[21],gi=[22],pi=[30],mi=[31];class Type1CharString{constructor(){this.width=0;this.lsb=0;this.flexing=!1;this.output=[];this.stack=[]}convert(e,t,a){const r=e.length;let i,n,s,o=!1;for(let c=0;c<r;c++){let r=e[c];if(r<32){12===r&&(r=(r<<8)+e[++c]);switch(r){case 1:case 3:case 9:case 3072:case 3073:case 3074:case 3105:this.stack=[];break;case 4:if(this.flexing){if(this.stack.length<1){o=!0;break}const e=this.\ -stack.pop();this.stack.push(0,e);break}o=this.executeCommand(1,si);break;case 5:o=this.executeCommand(2,oi);break;case 6:o=this.executeCommand(1,ci);break;case 7:o=this.executeCommand(1,li);break;case 8:o=this.executeCommand(6,hi);break;case 10:if(this.stack.length<1){o=!0;break}s=this.stack.pop();if(!t[s]){o=!0;break}o=this.convert(t[s],t,a);break;case 11:return o;case 13:if(this.stack.length<2){o=!0;break}i=this.stack.pop();n=this.stack.pop();this.lsb=n;this.width=i;this.stack.push(i,n);o=this\ -.executeCommand(2,gi);break;case 14:this.output.push(di[0]);break;case 21:if(this.flexing)break;o=this.executeCommand(2,fi);break;case 22:if(this.flexing){this.stack.push(0);break}o=this.executeCommand(1,gi);break;case 30:o=this.executeCommand(4,pi);break;case 31:o=this.executeCommand(4,mi);break;case 3078:if(a){const e=this.stack.at(-5);this.seac=this.stack.splice(-4,4);this.seac[0]+=this.lsb-e;o=this.executeCommand(0,di)}else o=this.executeCommand(4,di);break;case 3079:if(this.stack.length<4){\ -o=!0;break}this.stack.pop();i=this.stack.pop();const e=this.stack.pop();n=this.stack.pop();this.lsb=n;this.width=i;this.stack.push(i,n,e);o=this.executeCommand(3,fi);break;case 3084:if(this.stack.length<2){o=!0;break}const c=this.stack.pop(),l=this.stack.pop();this.stack.push(l/c);break;case 3088:if(this.stack.length<2){o=!0;break}s=this.stack.pop();const h=this.stack.pop();if(0===s&&3===h){const e=this.stack.splice(-17,17);this.stack.push(e[2]+e[0],e[3]+e[1],e[4],e[5],e[6],e[7],e[8],e[9],e[10],\ -e[11],e[12],e[13],e[14]);o=this.executeCommand(13,ui,!0);this.flexing=!1;this.stack.push(e[15],e[16])}else 1===s&&0===h&&(this.flexing=!0);break;case 3089:break;default:warn(\'Unknown type 1 charstring command of "\'+r+\'"\')}if(o)break}else{r<=246?r-=139:r=r<=250?256*(r-247)+e[++c]+108:r<=254?-256*(r-251)-e[++c]-108:(255&e[++c])<<24|(255&e[++c])<<16|(255&e[++c])<<8|255&e[++c];this.stack.push(r)}}return o}executeCommand(e,t,a){const r=this.stack.length;if(e>r)return!0;const i=r-e;for(let e=i;e<r;e++\ -){let t=this.stack[e];if(Number.isInteger(t))this.output.push(28,t>>8&255,255&t);else{t=65536*t|0;this.output.push(255,t>>24&255,t>>16&255,t>>8&255,255&t)}}this.output.push(...t);a?this.stack.splice(i,e):this.stack.length=0;return!1}}function isHexDigit(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function decrypt(e,t,a){if(a>=e.length)return new Uint8Array(0);let r,i,n=0|t;for(r=0;r<a;r++)n=52845*(e[r]+n)+22719&65535;const s=e.length-a,o=new Uint8Array(s);for(r=a,i=0;i<s;r++,i++){const t\ -=e[r];o[i]=t^n>>8;n=52845*(t+n)+22719&65535}return o}function isSpecial(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}class Type1Parser{constructor(e,t,a){if(t){const t=e.getBytes(),a=!((isHexDigit(t[0])||isWhiteSpace(t[0]))&&isHexDigit(t[1])&&isHexDigit(t[2])&&isHexDigit(t[3])&&isHexDigit(t[4])&&isHexDigit(t[5])&&isHexDigit(t[6])&&isHexDigit(t[7]));e=new Stream(a?decrypt(t,55665,4):function decryptAscii(e,t,a){let r=0|t;const i=e.length,n=new Uint8Array(i>>>1);let s,o;for(s\ -=0,o=0;s<i;s++){const t=e[s];if(!isHexDigit(t))continue;s++;let a;for(;s<i&&!isHexDigit(a=e[s]);)s++;if(s<i){const e=parseInt(String.fromCharCode(t,a),16);n[o++]=e^r>>8;r=52845*(e+r)+22719&65535}}return n.slice(a,o)}(t,55665,4))}this.seacAnalysisEnabled=!!a;this.stream=e;this.nextChar()}readNumberArray(){this.getToken();const e=[];for(;;){const t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}readNumber(){const e=this.getToken();return parseFloat(e||0)}read\ -Int(){const e=this.getToken();return 0|parseInt(e||0,10)}readBoolean(){return"true"===this.getToken()?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){this.stream.skip(-2);return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}if(isSpecial(t)){this.nextChar();return String.fromCharCode(t)}let a="";do{a+=String.fromChar\ -Code(t);t=this.nextChar()}while(t>=0&&!isWhiteSpace(t)&&!isSpecial(t));return a}readCharStrings(e,t){return-1===t?e:decrypt(e,4330,t)}extractFontProgram(e){const t=this.stream,a=[],r=[],i=Object.create(null);i.lenIV=4;const n={subrs:[],charstrings:[],properties:{privateData:i}};let s,o,c,l;for(;null!==(s=this.getToken());)if("/"===s){s=this.getToken();switch(s){case"CharStrings":this.getToken();this.getToken();this.getToken();this.getToken();for(;;){s=this.getToken();if(null===s||"end"===s)break\ -;if("/"!==s)continue;const e=this.getToken();o=this.readInt();this.getToken();c=o>0?t.getBytes(o):new Uint8Array(0);l=n.properties.privateData.lenIV;const a=this.readCharStrings(c,l);this.nextChar();s=this.getToken();"noaccess"===s?this.getToken():"/"===s&&this.prevChar();r.push({glyph:e,encoded:a})}break;case"Subrs":this.readInt();this.getToken();for(;"dup"===this.getToken();){const e=this.readInt();o=this.readInt();this.getToken();c=o>0?t.getBytes(o):new Uint8Array(0);l=n.properties.privateDat\ -a.lenIV;const r=this.readCharStrings(c,l);this.nextChar();s=this.getToken();"noaccess"===s&&this.getToken();a[e]=r}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":const e=this.readNumberArray();e.length>0&&e.length,0;break;case"StemSnapH":case"StemSnapV":n.properties.privateData[s]=this.readNumberArray();break;case"StdHW":case"StdVW":n.properties.privateData[s]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"Languag\ -eGroup":n.properties.privateData[s]=this.readNumber();break;case"ExpansionFactor":n.properties.privateData[s]=this.readNumber()||.06;break;case"ForceBold":n.properties.privateData[s]=this.readBoolean()}}for(const{encoded:t,glyph:i}of r){const r=new Type1CharString,s=r.convert(t,a,this.seacAnalysisEnabled);let o=r.output;s&&(o=[14]);const c={glyphName:i,charstring:o,width:r.width,lsb:r.lsb,seac:r.seac};".notdef"===i?n.charstrings.unshift(c):n.charstrings.push(c);if(e.builtInEncoding){const t=e.bu\ -iltInEncoding.indexOf(i);t>-1&&void 0===e.widths[t]&&t>=e.firstChar&&t<=e.lastChar&&(e.widths[t]=r.width)}}return n}extractFontHeader(e){let t;for(;null!==(t=this.getToken());)if("/"===t){t=this.getToken();switch(t){case"FontMatrix":const a=this.readNumberArray();e.fontMatrix=a;break;case"Encoding":const r=this.getToken();let i;if(/^\\d+$/.test(r)){i=[];const e=0|parseInt(r,10);this.getToken();for(let a=0;a<e;a++){t=this.getToken();for(;"dup"!==t&&"def"!==t;){t=this.getToken();if(null===t)return}\ -if("def"===t)break;const e=this.readInt();this.getToken();const a=this.getToken();i[e]=a;this.getToken()}}else i=getEncoding(r);e.builtInEncoding=i;break;case"FontBBox":const n=this.readNumberArray();e.ascent=Math.max(n[3],n[1]);e.descent=Math.min(n[1],n[3]);e.ascentScaled=!0}}}}function findBlock(e,t,a){const r=e.length,i=t.length,n=r-i;let s=a,o=!1;for(;s<n;){let a=0;for(;a<i&&e[s+a]===t[a];)a++;if(a>=i){s+=a;for(;s<r&&isWhiteSpace(e[s]);)s++;o=!0;break}s++}return{found:o,length:s}}class Type1\ -Font{constructor(e,t,a){let r=a.length1,i=a.length2,n=t.peekBytes(6);const s=128===n[0]&&1===n[1];if(s){t.skip(6);r=n[5]<<24|n[4]<<16|n[3]<<8|n[2]}const o=function getHeaderBlock(e,t){const a=[101,101,120,101,99],r=e.pos;let i,n,s,o;try{i=e.getBytes(t);n=i.length}catch{}if(n===t){s=findBlock(i,a,t-2*a.length);if(s.found&&s.length===t)return{stream:new Stream(i),length:t}}warn(\'Invalid "Length1" property in Type1 font -- trying to recover.\');e.pos=r;for(;;){s=findBlock(e.peekBytes(2048),a,0);if(0\ -===s.length)break;e.pos+=s.length;if(s.found){o=e.pos-r;break}}e.pos=r;if(o)return{stream:new Stream(e.getBytes(o)),length:o};warn(\'Unable to recover "Length1" property in Type1 font -- using as is.\');return{stream:new Stream(e.getBytes(t)),length:t}}(t,r);new Type1Parser(o.stream,!1,Rr).extractFontHeader(a);if(s){n=t.getBytes(6);i=n[5]<<24|n[4]<<16|n[3]<<8|n[2]}const c=function getEexecBlock(e,t){const a=e.getBytes();if(0===a.length)throw new FormatError("getEexecBlock - no font program found."\ -);return{stream:new Stream(a),length:a.length}}(t),l=new Type1Parser(c.stream,!0,Rr).extractFontProgram(a);for(const e in l.properties)a[e]=l.properties[e];const h=l.charstrings,u=this.getType2Charstrings(h),d=this.getType2Subrs(l.subrs);this.charstrings=h;this.data=this.wrap(e,u,this.charstrings,d,a);this.seacs=this.getSeacs(l.charstrings)}get numGlyphs(){return this.charstrings.length+1}getCharset(){const e=[".notdef"];for(const{glyphName:t}of this.charstrings)e.push(t);return e}getGlyphMappin\ -g(e){const t=this.charstrings;if(e.composite){const a=Object.create(null);for(let r=0,i=t.length;r<i;r++){a[e.cMap.charCodeOf(r)]=r+1}return a}const a=[".notdef"];let r,i;for(i=0;i<t.length;i++)a.push(t[i].glyphName);const n=e.builtInEncoding;if(n){r=Object.create(null);for(const e in n){i=a.indexOf(n[e]);i>=0&&(r[e]=i)}}return type1FontGlyphMapping(e,r,a)}hasGlyphId(e){if(e<0||e>=this.numGlyphs)return!1;if(0===e)return!0;return this.charstrings[e-1].charstring.length>0}getSeacs(e){const t=[];fo\ -r(let a=0,r=e.length;a<r;a++){const r=e[a];r.seac&&(t[a+1]=r.seac)}return t}getType2Charstrings(e){const t=[];for(const a of e)t.push(a.charstring);return t}getType2Subrs(e){let t=0;const a=e.length;t=a<1133?107:a<33769?1131:32768;const r=[];let i;for(i=0;i<t;i++)r.push([11]);for(i=0;i<a;i++)r.push(e[i]);return r}wrap(e,t,a,r,i){const n=new CFF;n.header=new CFFHeader(1,0,4,4);n.names=[e];const s=new CFFTopDict;s.setByName("version",391);s.setByName("Notice",392);s.setByName("FullName",393);s.set\ -ByName("FamilyName",394);s.setByName("Weight",395);s.setByName("Encoding",null);s.setByName("FontMatrix",i.fontMatrix);s.setByName("FontBBox",i.bbox);s.setByName("charset",null);s.setByName("CharStrings",null);s.setByName("Private",null);n.topDict=s;const o=new CFFStrings;o.add("Version 0.11");o.add("See original notice");o.add(e);o.add(e);o.add("Medium");n.strings=o;n.globalSubrIndex=new CFFIndex;const c=t.length,l=[".notdef"];let h,u;for(h=0;h<c;h++){const e=a[h].glyphName;-1===Hr.indexOf(e)&&\ -o.add(e);l.push(e)}n.charset=new CFFCharset(!1,0,l);const d=new CFFIndex;d.add([139,14]);for(h=0;h<c;h++)d.add(t[h]);n.charStrings=d;const f=new CFFPrivateDict;f.setByName("Subrs",null);const g=["BlueValues","OtherBlues","FamilyBlues","FamilyOtherBlues","StemSnapH","StemSnapV","BlueShift","BlueFuzz","BlueScale","LanguageGroup","ExpansionFactor","ForceBold","StdHW","StdVW"];for(h=0,u=g.length;h<u;h++){const e=g[h];if(!(e in i.privateData))continue;const t=i.privateData[e];if(Array.isArray(t))for(\ -let e=t.length-1;e>0;e--)t[e]-=t[e-1];f.setByName(e,t)}n.topDict.privateDict=f;const p=new CFFIndex;for(h=0,u=r.length;h<u;h++)p.add(r[h]);f.subrsIndex=p;return new CFFCompiler(n).compile()}}const bi=[[57344,63743],[1048576,1114109]],yi=1e3,wi=["ascent","bbox","black","bold","charProcOperatorList","cssFontInfo","data","defaultVMetrics","defaultWidth","descent","disableFontFace","fallbackName","fontExtraProperties","fontMatrix","isInvalidPDFjsFont","isType3Font","italic","loadedName","mimetype","\ -missingFile","name","remeasure","systemFontInfo","vertical"],xi=["cMap","composite","defaultEncoding","differences","isMonospace","isSerifFont","isSymbolicFont","seacMap","subtype","toFontChar","toUnicode","type","vmetrics","widths"];function adjustWidths(e){if(!e.fontMatrix)return;if(e.fontMatrix[0]===t[0])return;const a=.001/e.fontMatrix[0],r=e.widths;for(const e in r)r[e]*=a;e.defaultWidth*=a}function amendFallbackToUnicode(e){if(!e.fallbackToUnicode)return;if(e.toUnicode instanceof IdentityT\ -oUnicodeMap)return;const t=[];for(const a in e.fallbackToUnicode)e.toUnicode.has(a)||(t[a]=e.fallbackToUnicode[a]);t.length>0&&e.toUnicode.amend(t)}class fonts_Glyph{constructor(e,t,a,r,i,n,s,o,c){this.originalCharCode=e;this.fontChar=t;this.unicode=a;this.accent=r;this.width=i;this.vmetric=n;this.operatorListId=s;this.isSpace=o;this.isInFont=c}get category(){return shadow(this,"category",function getCharUnicodeCategory(e){const t=Dr.get(e);if(t)return t;const a=e.match(Mr),r={isWhitespace:!!a?.\ -[1],isZeroWidthDiacritic:!!a?.[2],isInvisibleFormatMark:!!a?.[3]};Dr.set(e,r);return r}(this.unicode),!0)}}function int16(e,t){return(e<<8)+t}function writeSignedInt16(e,t,a){e[t+1]=a;e[t]=a>>>8}function signedInt16(e,t){const a=(e<<8)+t;return 32768&a?a-65536:a}function string16(e){return String.fromCharCode(e>>8&255,255&e)}function safeString16(e){e>32767?e=32767:e<-32768&&(e=-32768);return String.fromCharCode(e>>8&255,255&e)}function isTrueTypeCollectionFile(e){return"ttcf"===bytesToString(e.\ -peekBytes(4))}function getFontFileType(e,{type:t,subtype:a,composite:r}){let i,n;if(function isTrueTypeFile(e){const t=e.peekBytes(4);return 65536===readUint32(t,0)||"true"===bytesToString(t)}(e)||isTrueTypeCollectionFile(e))i=r?"CIDFontType2":"TrueType";else if(function isOpenTypeFile(e){return"OTTO"===bytesToString(e.peekBytes(4))}(e))i=r?"CIDFontType2":"OpenType";else if(function isType1File(e){const t=e.peekBytes(2);return 37===t[0]&&33===t[1]||128===t[0]&&1===t[1]}(e))i=r?"CIDFontType0":"MM\ -Type1"===t?"MMType1":"Type1";else if(function isCFFFile(e){const t=e.peekBytes(4);return t[0]>=1&&t[3]>=1&&t[3]<=4}(e))if(r){i="CIDFontType0";n="CIDFontType0C"}else{i="MMType1"===t?"MMType1":"Type1";n="Type1C"}else{warn("getFontFileType: Unable to detect correct font file Type/Subtype.");i=t;n=a}return[i,n]}function applyStandardFontGlyphMap(e,t){for(const a in t)e[+a]=t[a]}function buildToFontChar(e,t,a){const r=[];let i;for(let a=0,n=e.length;a<n;a++){i=getUnicodeForGlyph(e[a],t);-1!==i&&(r[a]\ -=i)}for(const e in a){i=getUnicodeForGlyph(a[e],t);-1!==i&&(r[+e]=i)}return r}function isMacNameRecord(e){return 1===e.platform&&0===e.encoding&&0===e.language}function isWinNameRecord(e){return 3===e.platform&&1===e.encoding&&1033===e.language}function convertCidString(e,t,a=!1){switch(t.length){case 1:return t.charCodeAt(0);case 2:return t.charCodeAt(0)<<8|t.charCodeAt(1)}const r=`Unsupported CID string (charCode ${e}): "${t}".`;if(a)throw new FormatError(r);warn(r);return t}function adjustMap\ -ping(e,t,a,r){const i=Object.create(null),n=new Map,s=[],o=new Set;let c=0;let l=bi[c][0],h=bi[c][1];let u=null;for(const f in e){let g=e[f];if(!t(g))continue;if(l>h){c++;if(c>=bi.length){warn("Ran out of space in font private use area.");break}l=bi[c][0];h=bi[c][1]}const p=l++;0===g&&(g=a);let m=r.get(f);if("string"==typeof m)if(1===m.length)m=m.codePointAt(0);else{if(!u){u=new Map;for(let e=64256;e<=64335;e++){const t=String.fromCharCode(e).normalize("NFKD");t.length>1&&u.set(t,e)}}m=u.get(m)|\ -|m.codePointAt(0)}if(m&&!(d=m,bi[0][0]<=d&&d<=bi[0][1]||bi[1][0]<=d&&d<=bi[1][1])&&!o.has(g)){n.set(m,g);o.add(g)}i[p]=g;s[f]=p}var d;return{toFontChar:s,charCodeToGlyphId:i,toUnicodeExtraMap:n,nextAvailableFontCharCode:l}}function createCmapTable(e,t,a){const r=function getRanges(e,t,a){const r=[];for(const t in e)e[t]>=a||r.push({fontCharCode:0|t,glyphId:e[t]});if(t)for(const[e,i]of t)i>=a||r.push({fontCharCode:e,glyphId:i});0===r.length&&r.push({fontCharCode:0,glyphId:0});r.sort(((e,t)=>e.fon\ -tCharCode-t.fontCharCode));const i=[],n=r.length;for(let e=0;e<n;){const t=r[e].fontCharCode,a=[r[e].glyphId];++e;let s=t;for(;e<n&&s+1===r[e].fontCharCode;){a.push(r[e].glyphId);++s;++e;if(65535===s)break}i.push([t,s,a])}return i}(e,t,a),i=r.at(-1)[1]>65535?2:1;let n,s,o,c,l="\\0\\0"+string16(i)+"\\0\\0"+string32(4+8*i);for(n=r.length-1;n>=0&&!(r[n][0]<=65535);--n);const h=n+1;r[n][0]<65535&&65535===r[n][1]&&(r[n][1]=65534);const u=r[n][1]<65535?1:0,d=h+u,f=OpenTypeFileBuilder.getSearchParams(d,2\ -);let g,p,m,b,y="",w="",x="",S="",k="",C=0;for(n=0,s=h;n<s;n++){g=r[n];p=g[0];m=g[1];y+=string16(p);w+=string16(m);b=g[2];let e=!0;for(o=1,c=b.length;o<c;++o)if(b[o]!==b[o-1]+1){e=!1;break}if(e){x+=string16(b[0]-p&65535);S+=string16(0)}else{const e=2*(d-n)+2*C;C+=m-p+1;x+=string16(0);S+=string16(e);for(o=0,c=b.length;o<c;++o)k+=string16(b[o])}}if(u>0){w+="ÿÿ";y+="ÿÿ";x+="\\0";S+="\\0\\0"}const v="\\0\\0"+string16(2*d)+string16(f.range)+string16(f.entry)+string16(f.rangeShift)+w+"\\0\\0"+y+x+S+k;let F=\ -"",T="";if(i>1){l+="\\0\\0\\n"+string32(4+8*i+4+v.length);F="";for(n=0,s=r.length;n<s;n++){g=r[n];p=g[0];b=g[2];let e=b[0];for(o=1,c=b.length;o<c;++o)if(b[o]!==b[o-1]+1){m=g[0]+o-1;F+=string32(p)+string32(m)+string32(e);p=m+1;e=b[o]}F+=string32(p)+string32(g[1])+string32(e)}T="\\0\\f\\0\\0"+string32(F.length+16)+"\\0\\0\\0\\0"+string32(F.length/12)}return l+"\\0"+string16(v.length+4)+v+T+F}function createOS2Table(e,t,a){a||={unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0};let r=0,i=0,n=0,s=0,o=null,c=0,l=-\ -1;if(t){for(let e in t){e|=0;(o>e||!o)&&(o=e);c<e&&(c=e);l=getUnicodeRangeFor(e,l);if(l<32)r|=1<<l;else if(l<64)i|=1<<l-32;else if(l<96)n|=1<<l-64;else{if(!(l<123))throw new FormatError("Unicode ranges Bits > 123 are reserved for internal usage");s|=1<<l-96}}c>65535&&(c=65535)}else{o=0;c=255}const h=e.bbox||[0,0,0,0],u=a.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),d=e.ascentScaled?1:u/yi,f=a.ascent||Math.round(d*(e.ascent||h[3]));let g=a.descent||Math.roun\ -d(d*(e.descent||h[1]));g>0&&e.descent>0&&h[1]<0&&(g=-g);const p=a.yMax||f,m=-a.yMin||-g;return"\\0$ô\\0\\0\\0Š»\\0\\0\\0ŒŠ»\\0\\0ß\\x001\\0\\0\\0\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+string32(r)+string32(i)+string32(n)+string32(s)+"*21*"+string16(e.italicAngle?1:0)+string16(o||e.firstChar)+string16(c||e.lastChar)+string16(f)+string16(g)+"\\0d"+string16(p)+string16(m)+"\\0\\0\\0\\0\\0\\0\\0\\0"+string16(e.xHeight)+string16(e.capHeight)+string16(0)+string16(o||e.firstChar)+"\\0"}function \ -createPostTable(e){return"\\0\\0\\0"+string32(Math.floor(65536*e.italicAngle))+"\\0\\0\\0\\0"+string32(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"}function createPostscriptName(e){return e.replaceAll(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function createNameTable(e,t){t||(t=[[],[]]);const a=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||createPostscriptName(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unk\ -nown"],r=[];let i,n,s,o,c;for(i=0,n=a.length;i<n;i++){c=t[1][i]||a[i];const e=[];for(s=0,o=c.length;s<o;s++)e.push(string16(c.charCodeAt(s)));r.push(e.join(""))}const l=[a,r],h=["\\0","\\0"],u=["\\0\\0","\\0"],d=["\\0\\0","\\t"],f=a.length*h.length;let g="\\0\\0"+string16(f)+string16(12*f+6),p=0;for(i=0,n=h.length;i<n;i++){const e=l[i];for(s=0,o=e.length;s<o;s++){c=e[s];g+=h[i]+u[i]+d[i]+string16(s)+string16(c.length)+string16(p);p+=c.length}}g+=a.join("")+r.join("");return g}class Font{constructor(e,\ -t,a,r){this.name=e;this.psName=null;this.mimetype=null;this.disableFontFace=r.disableFontFace;this.fontExtraProperties=r.fontExtraProperties;this.loadedName=a.loadedName;this.isType3Font=a.isType3Font;this.missingFile=!1;this.cssFontInfo=a.cssFontInfo;this._charsCache=Object.create(null);this._glyphCache=Object.create(null);let i=!!(a.flags&Er);if(!i&&!a.isSimulatedFlags){const t=e.replaceAll(/[,_]/g,"-").split("-",1)[0],a=Qr();for(const e of t.split("+"))if(a[e]){i=!0;break}}this.isSerifFont=i;\ -this.isSymbolicFont=!!(a.flags&Pr);this.isMonospace=!!(a.flags&Nr);let{type:n,subtype:s}=a;this.type=n;this.subtype=s;this.systemFontInfo=a.systemFontInfo;const o=e.match(/^InvalidPDFjsFont_(.*)_\\d+$/);this.isInvalidPDFjsFont=!!o;this.isInvalidPDFjsFont?this.fallbackName=o[1]:this.isMonospace?this.fallbackName="monospace":this.isSerifFont?this.fallbackName="serif":this.fallbackName="sans-serif";if(this.systemFontInfo?.guessFallback){this.systemFontInfo.guessFallback=!1;this.systemFontInfo.css+=`\ -,${this.fallbackName}`}this.differences=a.differences;this.widths=a.widths;this.defaultWidth=a.defaultWidth;this.composite=a.composite;this.cMap=a.cMap;this.capHeight=a.capHeight/yi;this.ascent=a.ascent/yi;this.descent=a.descent/yi;this.lineHeight=this.ascent-this.descent;this.fontMatrix=a.fontMatrix;this.bbox=a.bbox;this.defaultEncoding=a.defaultEncoding;this.toUnicode=a.toUnicode;this.toFontChar=[];if("Type3"===a.type){for(let e=0;e<256;e++)this.toFontChar[e]=this.differences[e]||a.defaultEnco\ -ding[e];return}this.cidEncoding=a.cidEncoding||"";this.vertical=!!a.vertical;if(this.vertical){this.vmetrics=a.vmetrics;this.defaultVMetrics=a.defaultVMetrics}if(!t||t.isEmpty){t&&warn(\'Font file is empty in "\'+e+\'" (\'+this.loadedName+")");this.fallbackToSystemFont(a);return}[n,s]=getFontFileType(t,a);n===this.type&&s===this.subtype||info(`Inconsistent font file Type/SubType, expected: ${this.type}/${this.subtype} but found: ${n}/${s}.`);let c;try{switch(n){case"MMType1":info("MMType1 font ("+e+\ -"), falling back to Type1.");case"Type1":case"CIDFontType0":this.mimetype="font/opentype";const r="Type1C"===s||"CIDFontType0C"===s?new CFFFont(t,a):new Type1Font(e,t,a);adjustWidths(a);c=this.convert(e,r,a);break;case"OpenType":case"TrueType":case"CIDFontType2":this.mimetype="font/opentype";c=this.checkAndRepair(e,t,a);adjustWidths(a);this.isOpenType&&(n="OpenType");break;default:throw new FormatError(`Font ${n} is not supported`)}}catch(e){warn(e);this.fallbackToSystemFont(a);return}amendFallb\ -ackToUnicode(a);this.data=c;this.type=n;this.subtype=s;this.fontMatrix=a.fontMatrix;this.widths=a.widths;this.defaultWidth=a.defaultWidth;this.toUnicode=a.toUnicode;this.seacMap=a.seacMap}get renderer(){return shadow(this,"renderer",FontRendererFactory.create(this,Rr))}exportData(){const e=this.fontExtraProperties?[...wi,...xi]:wi,t=Object.create(null);for(const a of e){const e=this[a];void 0!==e&&(t[a]=e)}return t}fallbackToSystemFont(e){this.missingFile=!0;const{name:t,type:a}=this;let r=norma\ -lizeFontName(t);const i=Jr(),n=Zr(),s=!!i[r],o=!(!n[r]||!i[n[r]]);r=i[r]||n[r]||r;const c=ni()[r];if(c){isNaN(this.ascent)&&(this.ascent=c.ascent/yi);isNaN(this.descent)&&(this.descent=c.descent/yi);isNaN(this.capHeight)&&(this.capHeight=c.capHeight/yi)}this.bold=/bold/gi.test(r);this.italic=/oblique|italic/gi.test(r);this.black=/Black/g.test(t);const l=/Narrow/g.test(t);this.remeasure=(!s||l)&&Object.keys(this.widths).length>0;if((s||o)&&"CIDFontType2"===a&&this.cidEncoding.startsWith("Identity\ --")){const a=e.cidToGidMap,r=[];applyStandardFontGlyphMap(r,ti());/Arial-?Black/i.test(t)?applyStandardFontGlyphMap(r,ai()):/Calibri/i.test(t)&&applyStandardFontGlyphMap(r,ri());if(a){for(const e in r){const t=r[e];void 0!==a[t]&&(r[+e]=a[t])}a.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof IdentityToUnicodeMap&&this.toUnicode.forEach((function(e,t){const i=r[e];void 0===a[i]&&(r[+e]=t)}))}this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEac\ -h((function(e,t){r[+e]=t}));this.toFontChar=r;this.toUnicode=new ToUnicodeMap(r)}else if(/Symbol/i.test(r))this.toFontChar=buildToFontChar(Cr,Fr(),this.differences);else if(/Dingbats/i.test(r))this.toFontChar=buildToFontChar(vr,Ir(),this.differences);else if(s||o){const e=buildToFontChar(this.defaultEncoding,Fr(),this.differences);"CIDFontType2"!==a||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((function(t,a){e[+t]=a}));this.toF\ -ontChar=e}else{const e=Fr(),a=[];this.toUnicode.forEach(((t,r)=>{if(!this.composite){const a=getUnicodeForGlyph(this.differences[t]||this.defaultEncoding[t],e);-1!==a&&(r=a)}a[+t]=r}));this.composite&&this.toUnicode instanceof IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(t)&&applyStandardFontGlyphMap(a,ti());this.toFontChar=a}amendFallbackToUnicode(e);this.loadedName=r.split("-",1)[0]}checkAndRepair(e,t,a){const r=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","pre\ -p","cvt ","CFF "];function readTables(e,t){const a=Object.create(null);a["OS/2"]=null;a.cmap=null;a.head=null;a.hhea=null;a.hmtx=null;a.maxp=null;a.name=null;a.post=null;for(let i=0;i<t;i++){const t=readTableEntry(e);r.includes(t.tag)&&(0!==t.length&&(a[t.tag]=t))}return a}function readTableEntry(e){const t=e.getString(4),a=e.getInt32()>>>0,r=e.getInt32()>>>0,i=e.getInt32()>>>0,n=e.pos;e.pos=e.start||0;e.skip(r);const s=e.getBytes(i);e.pos=n;if("head"===t){s[8]=s[9]=s[10]=s[11]=0;s[17]|=32}retur\ -n{tag:t,checksum:a,length:i,offset:r,data:s}}function readOpenTypeHeader(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function sanitizeGlyph(e,t,a,r,i,n){const s={length:0,sizeOfInstructions:0};if(t<0||t>=e.length||a>e.length||a-t<=12)return s;const o=e.subarray(t,a),c=signedInt16(o[2],o[3]),l=signedInt16(o[4],o[5]),h=signedInt16(o[6],o[7]),u=signedInt16(o[8],o[9]);if(c>h){writeSignedInt16(o,2,h);writeSig\ -nedInt16(o,6,c)}if(l>u){writeSignedInt16(o,4,u);writeSignedInt16(o,8,l)}const d=signedInt16(o[0],o[1]);if(d<0){if(d<-1)return s;r.set(o,i);s.length=o.length;return s}let f,g=10,p=0;for(f=0;f<d;f++){p=(o[g]<<8|o[g+1])+1;g+=2}const m=g,b=o[g]<<8|o[g+1];s.sizeOfInstructions=b;g+=2+b;const y=g;let w=0;for(f=0;f<p;f++){const e=o[g++];192&e&&(o[g-1]=63&e);let t=2;2&e?t=1:16&e&&(t=0);let a=2;4&e?a=1:32&e&&(a=0);const r=t+a;w+=r;if(8&e){const e=o[g++];0===e&&(o[g-1]^=8);f+=e;w+=e*r}}if(0===w)return s;le\ -t x=g+w;if(x>o.length)return s;if(!n&&b>0){r.set(o.subarray(0,m),i);r.set([0,0],i+m);r.set(o.subarray(y,x),i+m+2);x-=b;o.length-x>3&&(x=x+3&-4);s.length=x;return s}if(o.length-x>3){x=x+3&-4;r.set(o.subarray(0,x),i);s.length=x;return s}r.set(o,i);s.length=o.length;return s}function readNameTable(e){const a=(t.start||0)+e.offset;t.pos=a;const r=[[],[]],i=[],n=e.length,s=a+n;if(0!==t.getUint16()||n<6)return[r,i];const o=t.getUint16(),c=t.getUint16();let l,h;for(l=0;l<o&&t.pos+12<=s;l++){const e={pl\ -atform:t.getUint16(),encoding:t.getUint16(),language:t.getUint16(),name:t.getUint16(),length:t.getUint16(),offset:t.getUint16()};(isMacNameRecord(e)||isWinNameRecord(e))&&i.push(e)}for(l=0,h=i.length;l<h;l++){const e=i[l];if(e.length<=0)continue;const n=a+c+e.offset;if(n+e.length>s)continue;t.pos=n;const o=e.name;if(e.encoding){let a="";for(let r=0,i=e.length;r<i;r+=2)a+=String.fromCharCode(t.getUint16());r[1][o]=a}else r[0][o]=t.getString(e.length)}return[r,i]}const i=[0,0,0,0,0,0,0,0,-2,-2,-2,\ --2,0,0,-2,-5,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,-1,-1,1,-1,-999,0,1,0,-1,-2,0,-1,-2,-1,-1,0,-1,-1,0,0,-999,-999,-1,-1,-1,-1,-2,-999,-2,-2,-999,0,-2,-2,0,0,-2,0,-2,0,0,0,-2,-1,-1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,0,-999,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-2,-999,-999,-999,-999,-999,-1,-1,-2,-2,0,0,0,0,-1,-1,-999,-2,-2,0,0,-1,-2,-2,0,0,0,-1,-1,-1,-2];function sanitizeTTProgram(e,t){let a,r,n,s,o,c=e.data,l=0,h=0,u=0;const d=[],f=[],g=[];let p=t.tooComplexToFollowFunctions,m=!1\ -,b=0,y=0;for(let e=c.length;l<e;){const e=c[l++];if(64===e){r=c[l++];if(m||y)l+=r;else for(a=0;a<r;a++)d.push(c[l++])}else if(65===e){r=c[l++];if(m||y)l+=2*r;else for(a=0;a<r;a++){n=c[l++];d.push(n<<8|c[l++])}}else if(176==(248&e)){r=e-176+1;if(m||y)l+=r;else for(a=0;a<r;a++)d.push(c[l++])}else if(184==(248&e)){r=e-184+1;if(m||y)l+=2*r;else for(a=0;a<r;a++){n=c[l++];d.push(signedInt16(n,c[l++]))}}else if(43!==e||p)if(44!==e||p){if(45===e)if(m){m=!1;h=l}else{o=f.pop();if(!o){warn("TT: ENDF bad st\ -ack");t.hintsValid=!1;return}s=g.pop();c=o.data;l=o.i;t.functionsStackDeltas[s]=d.length-o.stackTop}else if(137===e){if(m||y){warn("TT: nested IDEFs not allowed");p=!0}m=!0;u=l}else if(88===e)++b;else if(27===e)y=b;else if(89===e){y===b&&(y=0);--b}else if(28===e&&!m&&!y){const e=d.at(-1);e>0&&(l+=e-1)}}else{if(m||y){warn("TT: nested FDEFs not allowed");p=!0}m=!0;u=l;s=d.pop();t.functionsDefined[s]={data:c,i:l}}else if(!m&&!y){s=d.at(-1);if(isNaN(s))info("TT: CALL empty stack (or invalid entry)."\ -);else{t.functionsUsed[s]=!0;if(s in t.functionsStackDeltas){const e=d.length+t.functionsStackDeltas[s];if(e<0){warn("TT: CALL invalid functions stack delta.");t.hintsValid=!1;return}d.length=e}else if(s in t.functionsDefined&&!g.includes(s)){f.push({data:c,i:l,stackTop:d.length-1});g.push(s);o=t.functionsDefined[s];if(!o){warn("TT: CALL non-existent function");t.hintsValid=!1;return}c=o.data;l=o.i}}}if(!m&&!y){let t=0;e<=142?t=i[e]:e>=192&&e<=223?t=-1:e>=224&&(t=-2);if(e>=113&&e<=117){r=d.pop()\ -;isNaN(r)||(t=2*-r)}for(;t<0&&d.length>0;){d.pop();t++}for(;t>0;){d.push(NaN);t--}}}t.tooComplexToFollowFunctions=p;const w=[c];l>c.length&&w.push(new Uint8Array(l-c.length));if(u>h){warn("TT: complementing a missing function tail");w.push(new Uint8Array([34,45]))}!function foldTTTable(e,t){if(t.length>1){let a,r,i=0;for(a=0,r=t.length;a<r;a++)i+=t[a].length;i=i+3&-4;const n=new Uint8Array(i);let s=0;for(a=0,r=t.length;a<r;a++){n.set(t[a],s);s+=t[a].length}e.data=n;e.length=i}}(e,w)}let n,s,o,c;\ -if(isTrueTypeCollectionFile(t=new Stream(new Uint8Array(t.getBytes())))){const e=function readTrueTypeCollectionData(e,t){const{numFonts:a,offsetTable:r}=function readTrueTypeCollectionHeader(e){const t=e.getString(4);assert("ttcf"===t,"Must be a TrueType Collection font.");const a=e.getUint16(),r=e.getUint16(),i=e.getInt32()>>>0,n=[];for(let t=0;t<i;t++)n.push(e.getInt32()>>>0);const s={ttcTag:t,majorVersion:a,minorVersion:r,numFonts:i,offsetTable:n};switch(a){case 1:return s;case 2:s.dsigTag=e\ -.getInt32()>>>0;s.dsigLength=e.getInt32()>>>0;s.dsigOffset=e.getInt32()>>>0;return s}throw new FormatError(`Invalid TrueType Collection majorVersion: ${a}.`)}(e),i=t.split("+");let n;for(let s=0;s<a;s++){e.pos=(e.start||0)+r[s];const a=readOpenTypeHeader(e),o=readTables(e,a.numTables);if(!o.name)throw new FormatError(\'TrueType Collection font must contain a "name" table.\');const[c]=readNameTable(o.name);for(let e=0,r=c.length;e<r;e++)for(let r=0,s=c[e].length;r<s;r++){const s=c[e][r]?.replaceAll\ -(/\\s/g,"");if(s){if(s===t)return{header:a,tables:o};if(!(i.length<2))for(const e of i)s===e&&(n={name:e,header:a,tables:o})}}}if(n){warn(`TrueType Collection does not contain "${t}" font, falling back to "${n.name}" font instead.`);return{header:n.header,tables:n.tables}}throw new FormatError(`TrueType Collection does not contain "${t}" font.`)}(t,this.name);n=e.header;s=e.tables}else{n=readOpenTypeHeader(t);s=readTables(t,n.numTables)}const l=!s["CFF "];if(l){if(!s.loca)throw new FormatError(\'R\ -equired "loca" table is not found\');if(!s.glyf){warn(\'Required "glyf" table is not found -- trying to recover.\');s.glyf={tag:"glyf",data:new Uint8Array(0)}}this.isOpenType=!1}else{const t=a.composite&&(a.cidToGidMap?.length>0||!(a.cMap instanceof IdentityCMap));if("OTTO"===n.version&&!t||!s.head||!s.hhea||!s.maxp||!s.post){c=new Stream(s["CFF "].data);o=new CFFFont(c,a);return this.convert(e,o,a)}delete s.glyf;delete s.loca;delete s.fpgm;delete s.prep;delete s["cvt "];this.isOpenType=!0}if(!s.ma\ -xp)throw new FormatError(\'Required "maxp" table is not found\');t.pos=(t.start||0)+s.maxp.offset;let h=t.getInt32();const u=t.getUint16();if(65536!==h&&20480!==h){if(6===s.maxp.length)h=20480;else{if(!(s.maxp.length>=32))throw new FormatError(\'"maxp" table has a wrong version number\');h=65536}!function writeUint32(e,t,a){e[t+3]=255&a;e[t+2]=a>>>8;e[t+1]=a>>>16;e[t]=a>>>24}(s.maxp.data,0,h)}if(a.scaleFactors?.length===u&&l){const{scaleFactors:e}=a,t=int16(s.head.data[50],s.head.data[51]),r=new Gly\ -fTable({glyfTable:s.glyf.data,isGlyphLocationsLong:t,locaTable:s.loca.data,numGlyphs:u});r.scale(e);const{glyf:i,loca:n,isLocationLong:o}=r.write();s.glyf.data=i;s.loca.data=n;if(o!==!!t){s.head.data[50]=0;s.head.data[51]=o?1:0}const c=s.hmtx.data;for(let t=0;t<u;t++){const a=4*t,r=Math.round(e[t]*int16(c[a],c[a+1]));c[a]=r>>8&255;c[a+1]=255&r;writeSignedInt16(c,a+2,Math.round(e[t]*signedInt16(c[a+2],c[a+3])))}}let d=u+1,f=!0;if(d>65535){f=!1;d=u;warn("Not enough space in glyfs to duplicate firs\ -t glyph.")}let g=0,p=0;if(h>=65536&&s.maxp.length>=32){t.pos+=8;if(t.getUint16()>2){s.maxp.data[14]=0;s.maxp.data[15]=2}t.pos+=4;g=t.getUint16();t.pos+=4;p=t.getUint16()}s.maxp.data[4]=d>>8;s.maxp.data[5]=255&d;const m=function sanitizeTTPrograms(e,t,a,r){const i={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};e&&sanitizeTTProgram(e,i);t&&sanitizeTTProgram(t,i);e&&function checkInvalidFunctions(e,t){if(!e.tooComplexToFollowFunctions)if(\ -e.functionsDefined.length>t){warn("TT: more functions defined than expected");e.hintsValid=!1}else for(let a=0,r=e.functionsUsed.length;a<r;a++){if(a>t){warn("TT: invalid function id: "+a);e.hintsValid=!1;return}if(e.functionsUsed[a]&&!e.functionsDefined[a]){warn("TT: undefined function: "+a);e.hintsValid=!1;return}}}(i,r);if(a&&1&a.length){const e=new Uint8Array(a.length+1);e.set(a.data);a.data=e}return i.hintsValid}(s.fpgm,s.prep,s["cvt "],g);if(!m){delete s.fpgm;delete s.prep;delete s["cvt "]\ -}!function sanitizeMetrics(e,t,a,r,i,n){if(!t){a&&(a.data=null);return}e.pos=(e.start||0)+t.offset;e.pos+=4;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;const s=e.getUint16();e.pos+=8;e.pos+=2;let o=e.getUint16();if(0!==s){if(!(2&int16(r.data[44],r.data[45]))){t.data[22]=0;t.data[23]=0}}if(o>i){info(`The numOfMetrics (${o}) should not be greater than the numGlyphs (${i}).`);o=i;t.data[34]=(65280&o)>>8;t.data[35]=255&o}const c=i-o-(a.length-4*o>>1);if(c>0){cons\ -t e=new Uint8Array(a.length+2*c);e.set(a.data);if(n){e[a.length]=a.data[2];e[a.length+1]=a.data[3]}a.data=e}}(t,s.hhea,s.hmtx,s.head,d,f);if(!s.head)throw new FormatError(\'Required "head" table is not found\');!function sanitizeHead(e,t,a){const r=e.data,i=function int32(e,t,a,r){return(e<<24)+(t<<16)+(a<<8)+r}(r[0],r[1],r[2],r[3]);if(i>>16!=1){info("Attempting to fix invalid version in head table: "+i);r[0]=0;r[1]=1;r[2]=0;r[3]=0}const n=int16(r[50],r[51]);if(n<0||n>1){info("Attempting to fix in\ -valid indexToLocFormat in head table: "+n);const e=t+1;if(a===e<<1){r[50]=0;r[51]=0}else{if(a!==e<<2)throw new FormatError("Could not fix indexToLocFormat: "+n);r[50]=0;r[51]=1}}}(s.head,u,l?s.loca.length:0);let b=Object.create(null);if(l){const e=int16(s.head.data[50],s.head.data[51]),t=function sanitizeGlyphLocations(e,t,a,r,i,n,s){let o,c,l;if(r){o=4;c=function fontItemDecodeLong(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};l=function fontItemEncodeLong(e,t,a){e[t]=a>>>24&255;e[t+1]=a>>1\ -6&255;e[t+2]=a>>8&255;e[t+3]=255&a}}else{o=2;c=function fontItemDecode(e,t){return e[t]<<9|e[t+1]<<1};l=function fontItemEncode(e,t,a){e[t]=a>>9&255;e[t+1]=a>>1&255}}const h=n?a+1:a,u=o*(1+h),d=new Uint8Array(u);d.set(e.data.subarray(0,u));e.data=d;const f=t.data,g=f.length,p=new Uint8Array(g);let m,b;const y=[];for(m=0,b=0;m<a+1;m++,b+=o){let e=c(d,b);e>g&&(e=g);y.push({index:m,offset:e,endOffset:0})}y.sort(((e,t)=>e.offset-t.offset));for(m=0;m<a;m++)y[m].endOffset=y[m+1].offset;y.sort(((e,t)=>\ -e.index-t.index));for(m=0;m<a;m++){const{offset:e,endOffset:t}=y[m];if(0!==e||0!==t)break;const a=y[m+1].offset;if(0!==a){y[m].endOffset=a;break}}const w=y.at(-2);0!==w.offset&&0===w.endOffset&&(w.endOffset=g);const x=Object.create(null);let S=0;l(d,0,S);for(m=0,b=o;m<a;m++,b+=o){const e=sanitizeGlyph(f,y[m].offset,y[m].endOffset,p,S,i),t=e.length;0===t&&(x[m]=!0);e.sizeOfInstructions>s&&(s=e.sizeOfInstructions);S+=t;l(d,b,S)}if(0===S){const e=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);f\ -or(m=0,b=o;m<h;m++,b+=o)l(d,b,e.length);t.data=e}else if(n){const a=c(d,o);if(p.length>a+S)t.data=p.subarray(0,a+S);else{t.data=new Uint8Array(a+S);t.data.set(p.subarray(0,S))}t.data.set(p.subarray(0,a),S);l(e.data,d.length-o,S+a)}else t.data=p.subarray(0,S);return{missingGlyphs:x,maxSizeOfInstructions:s}}(s.loca,s.glyf,u,e,m,f,p);b=t.missingGlyphs;if(h>=65536&&s.maxp.length>=32){s.maxp.data[26]=t.maxSizeOfInstructions>>8;s.maxp.data[27]=255&t.maxSizeOfInstructions}}if(!s.hhea)throw new FormatEr\ -ror(\'Required "hhea" table is not found\');if(0===s.hhea.data[10]&&0===s.hhea.data[11]){s.hhea.data[10]=255;s.hhea.data[11]=255}const y={unitsPerEm:int16(s.head.data[18],s.head.data[19]),yMax:signedInt16(s.head.data[42],s.head.data[43]),yMin:signedInt16(s.head.data[38],s.head.data[39]),ascent:signedInt16(s.hhea.data[4],s.hhea.data[5]),descent:signedInt16(s.hhea.data[6],s.hhea.data[7]),lineGap:signedInt16(s.hhea.data[8],s.hhea.data[9])};this.ascent=y.ascent/y.unitsPerEm;this.descent=y.descent/y.un\ -itsPerEm;this.lineGap=y.lineGap/y.unitsPerEm;if(this.cssFontInfo?.lineHeight){this.lineHeight=this.cssFontInfo.metrics.lineHeight;this.lineGap=this.cssFontInfo.metrics.lineGap}else this.lineHeight=this.ascent-this.descent+this.lineGap;s.post&&function readPostScriptTable(e,a,r){const i=(t.start||0)+e.offset;t.pos=i;const n=i+e.length,s=t.getInt32();t.skip(28);let o,c,l=!0;switch(s){case 65536:o=jr;break;case 131072:const e=t.getUint16();if(e!==r){l=!1;break}const i=[];for(c=0;c<e;++c){const e=t.\ -getUint16();if(e>=32768){l=!1;break}i.push(e)}if(!l)break;const h=[],u=[];for(;t.pos<n;){const e=t.getByte();u.length=e;for(c=0;c<e;++c)u[c]=String.fromCharCode(t.getByte());h.push(u.join(""))}o=[];for(c=0;c<e;++c){const e=i[c];e<258?o.push(jr[e]):o.push(h[e-258])}break;case 196608:break;default:warn("Unknown/unsupported post table version "+s);l=!1;a.defaultEncoding&&(o=a.defaultEncoding)}a.glyphNames=o;return l}(s.post,a,u);s.post={tag:"post",data:createPostTable(a)};const w=Object.create(null\ -);function hasGlyph(e){return!b[e]}if(a.composite){const e=a.cidToGidMap||[],t=0===e.length;a.cMap.forEach((function(a,r){"string"==typeof r&&(r=convertCidString(a,r,!0));if(r>65535)throw new FormatError("Max size of CID is 65,535");let i=-1;t?i=r:void 0!==e[r]&&(i=e[r]);i>=0&&i<u&&hasGlyph(i)&&(w[a]=i)}))}else{const e=function readCmapTable(e,t,a,r){if(!e){warn("No cmap table available.");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}let i,n=(t.start||0)+e.offset;t.pos=n;t.ski\ -p(2);const s=t.getUint16();let o,c=!1;for(let e=0;e<s;e++){const i=t.getUint16(),n=t.getUint16(),l=t.getInt32()>>>0;let h=!1;if(o?.platformId!==i||o?.encodingId!==n){if(0!==i||0!==n&&1!==n&&3!==n)if(1===i&&0===n)h=!0;else if(3!==i||1!==n||!r&&o){if(a&&3===i&&0===n){h=!0;let a=!0;if(e<s-1){const e=t.peekBytes(2);int16(e[0],e[1])<i&&(a=!1)}a&&(c=!0)}}else{h=!0;a||(c=!0)}else h=!0;h&&(o={platformId:i,encodingId:n,offset:l});if(c)break}}o&&(t.pos=n+o.offset);if(!o||-1===t.peekByte()){warn("Could not\ - find a preferred cmap table.");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}const l=t.getUint16();let h=!1;const u=[];let d,f;if(0===l){t.skip(4);for(d=0;d<256;d++){const e=t.getByte();e&&u.push({charCode:d,glyphId:e})}h=!0}else if(2===l){t.skip(4);const e=[];let a=0;for(let r=0;r<256;r++){const r=t.getUint16()>>3;e.push(r);a=Math.max(r,a)}const r=[];for(let e=0;e<=a;e++)r.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:signedInt16(t.getByte(),t.getByte()),idRa\ -ngePos:t.pos+t.getUint16()});for(let a=0;a<256;a++)if(0===e[a]){t.pos=r[0].idRangePos+2*a;f=t.getUint16();u.push({charCode:a,glyphId:f})}else{const i=r[e[a]];for(d=0;d<i.entryCount;d++){const e=(a<<8)+d+i.firstCode;t.pos=i.idRangePos+2*d;f=t.getUint16();0!==f&&(f=(f+i.idDelta)%65536);u.push({charCode:e,glyphId:f})}}}else if(4===l){t.skip(4);const e=t.getUint16()>>1;t.skip(6);const a=[];let r;for(r=0;r<e;r++)a.push({end:t.getUint16()});t.skip(2);for(r=0;r<e;r++)a[r].start=t.getUint16();for(r=0;r<\ -e;r++)a[r].delta=t.getUint16();let s,o=0;for(r=0;r<e;r++){i=a[r];const n=t.getUint16();if(n){s=(n>>1)-(e-r);i.offsetIndex=s;o=Math.max(o,s+i.end-i.start+1)}else i.offsetIndex=-1}const c=[];for(d=0;d<o;d++)c.push(t.getUint16());for(r=0;r<e;r++){i=a[r];n=i.start;const e=i.end,t=i.delta;s=i.offsetIndex;for(d=n;d<=e;d++)if(65535!==d){f=s<0?d:c[s+d-n];f=f+t&65535;u.push({charCode:d,glyphId:f})}}}else if(6===l){t.skip(4);const e=t.getUint16(),a=t.getUint16();for(d=0;d<a;d++){f=t.getUint16();const a=e+\ -d;u.push({charCode:a,glyphId:f})}}else{if(12!==l){warn("cmap table has unsupported format: "+l);return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}{t.skip(10);const e=t.getInt32()>>>0;for(d=0;d<e;d++){const e=t.getInt32()>>>0,a=t.getInt32()>>>0;let r=t.getInt32()>>>0;for(let t=e;t<=a;t++)u.push({charCode:t,glyphId:r++})}}}u.sort(((e,t)=>e.charCode-t.charCode));const g=[],p=new Set;for(const e of u){const{charCode:t}=e;if(!p.has(t)){p.add(t);g.push(e)}}return{platformId:o.platformId,\ -encodingId:o.encodingId,mappings:g,hasShortCmap:h}}(s.cmap,t,this.isSymbolicFont,a.hasEncoding),r=e.platformId,i=e.encodingId,n=e.mappings;let o=[],c=!1;!a.hasEncoding||"MacRomanEncoding"!==a.baseEncodingName&&"WinAnsiEncoding"!==a.baseEncodingName||(o=getEncoding(a.baseEncodingName));if(a.hasEncoding&&!this.isSymbolicFont&&(3===r&&1===i||1===r&&0===i)){const e=Fr();for(let t=0;t<256;t++){let s;s=void 0!==this.differences[t]?this.differences[t]:o.length&&""!==o[t]?o[t]:Ar[t];if(!s)continue;const\ - c=recoverGlyphName(s,e);let l;3===r&&1===i?l=e[c]:1===r&&0===i&&(l=Sr.indexOf(c));if(void 0===l){if(!a.glyphNames&&a.hasIncludedToUnicodeMap&&!(this.toUnicode instanceof IdentityToUnicodeMap)){const e=this.toUnicode.get(t);e&&(l=e.codePointAt(0))}if(void 0===l)continue}for(const e of n)if(e.charCode===l){w[t]=e.glyphId;break}}}else if(0===r){for(const e of n)w[e.charCode]=e.glyphId;c=!0}else if(3===r&&0===i)for(const e of n){let t=e.charCode;t>=61440&&t<=61695&&(t&=255);w[t]=e.glyphId}else for(\ -const e of n)w[e.charCode]=e.glyphId;if(a.glyphNames&&(o.length||this.differences.length))for(let e=0;e<256;++e){if(!c&&void 0!==w[e])continue;const t=this.differences[e]||o[e];if(!t)continue;const r=a.glyphNames.indexOf(t);r>0&&hasGlyph(r)&&(w[e]=r)}}0===w.length&&(w[0]=0);let x=d-1;f||(x=0);if(!a.cssFontInfo){const e=adjustMapping(w,hasGlyph,x,this.toUnicode);this.toFontChar=e.toFontChar;s.cmap={tag:"cmap",data:createCmapTable(e.charCodeToGlyphId,e.toUnicodeExtraMap,d)};s["OS/2"]&&function val\ -idateOS2Table(e,t){t.pos=(t.start||0)+e.offset;const a=t.getUint16();t.skip(60);const r=t.getUint16();if(a<4&&768&r)return!1;if(t.getUint16()>t.getUint16())return!1;t.skip(6);if(0===t.getUint16())return!1;e.data[8]=e.data[9]=0;return!0}(s["OS/2"],t)||(s["OS/2"]={tag:"OS/2",data:createOS2Table(a,e.charCodeToGlyphId,y)})}if(!l)try{c=new Stream(s["CFF "].data);o=new CFFParser(c,a,Rr).parse();o.duplicateFirstGlyph();const e=new CFFCompiler(o);s["CFF "].data=e.compile()}catch{warn("Failed to compile \ -font "+a.loadedName)}if(s.name){const[t,r]=readNameTable(s.name);s.name.data=createNameTable(e,t);this.psName=t[0][6]||null;a.composite||function adjustTrueTypeToUnicode(e,t,a){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(e.hasEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;if(!t)return;if(0===a.length)return;if(e.defaultEncoding===kr)return;for(const e of a)if(!isWinNameRecord(e))return;const r=kr,i=[],n=Fr();for(const e in r){const t=r[e];if(""===t)co\ -ntinue;const a=n[t];void 0!==a&&(i[e]=String.fromCharCode(a))}i.length>0&&e.toUnicode.amend(i)}(a,this.isSymbolicFont,r)}else s.name={tag:"name",data:createNameTable(this.name)};const S=new OpenTypeFileBuilder(n.version);for(const e in s)S.addTable(e,s[e].data);return S.toArray()}convert(e,a,r){r.fixedPitch=!1;r.builtInEncoding&&function adjustType1ToUnicode(e,t){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(t===e.defaultEncoding)return;if(e.toUnicode instanceof IdentityToUni\ -codeMap)return;const a=[],r=Fr();for(const i in t){if(e.hasEncoding&&(e.baseEncodingName||void 0!==e.differences[i]))continue;const n=getUnicodeForGlyph(t[i],r);-1!==n&&(a[i]=String.fromCharCode(n))}a.length>0&&e.toUnicode.amend(a)}(r,r.builtInEncoding);let i=1;a instanceof CFFFont&&(i=a.numGlyphs-1);const n=a.getGlyphMapping(r);let s=null,o=n,c=null;if(!r.cssFontInfo){s=adjustMapping(n,a.hasGlyphId.bind(a),i,this.toUnicode);this.toFontChar=s.toFontChar;o=s.charCodeToGlyphId;c=s.toUnicodeExtraMa\ -p}const l=a.numGlyphs;function getCharCodes(e,t){let a=null;for(const r in e)t===e[r]&&(a||=[]).push(0|r);return a}function createCharCode(e,t){for(const a in e)if(t===e[a])return 0|a;s.charCodeToGlyphId[s.nextAvailableFontCharCode]=t;return s.nextAvailableFontCharCode++}const h=a.seacs;if(s&&h?.length){const e=r.fontMatrix||t,i=a.getCharset(),o=Object.create(null);for(let t in h){t|=0;const a=h[t],r=Ar[a[2]],c=Ar[a[3]],l=i.indexOf(r),u=i.indexOf(c);if(l<0||u<0)continue;const d={x:a[0]*e[0]+a[1]\ -*e[2]+e[4],y:a[0]*e[1]+a[1]*e[3]+e[5]},f=getCharCodes(n,t);if(f)for(const e of f){const t=s.charCodeToGlyphId,a=createCharCode(t,l),r=createCharCode(t,u);o[e]={baseFontCharCode:a,accentFontCharCode:r,accentOffset:d}}}r.seacMap=o}const u=r.fontMatrix?1/Math.max(...r.fontMatrix.slice(0,4).map(Math.abs)):1e3,d=new OpenTypeFileBuilder("OTTO");d.addTable("CFF ",a.data);d.addTable("OS/2",createOS2Table(r,o));d.addTable("cmap",createCmapTable(o,c,l));d.addTable("head","\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0_<õ\\0\\0"+s\ -afeString16(u)+"\\0\\0\\0\\0ž\\v~\'\\0\\0\\0\\0ž\\v~\'\\0\\0"+safeString16(r.descent)+"ÿ"+safeString16(r.ascent)+string16(r.italicAngle?2:0)+"\\0\\0\\0\\0\\0\\0\\0");d.addTable("hhea","\\0\\0\\0"+safeString16(r.ascent)+safeString16(r.descent)+"\\0\\0ÿÿ\\0\\0\\0\\0\\0\\0"+safeString16(r.capHeight)+safeString16(Math.tan(r.italicAngle)*r.xHeight)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"+string16(l));d.addTable("hmtx",function fontFieldsHmtx(){const e=a.charstrings,t=a.cff?a.cff.widths:null;let r="\\0\\0\\0\\0";for(let a=1,i=l;a<i;a++){let i=0;i\ -f(e){const t=e[a-1];i="width"in t?t.width:0}else t&&(i=Math.ceil(t[a]||0));r+=string16(i)+string16(0)}return r}());d.addTable("maxp","\\0\\0P\\0"+string16(l));d.addTable("name",createNameTable(e));d.addTable("post",createPostTable(r));return d.toArray()}get _spaceWidth(){const e=["space","minus","one","i","I"];let t;for(const a of e){if(a in this.widths){t=this.widths[a];break}const e=Fr()[a];let r=0;if(this.composite&&this.cMap.contains(e)){r=this.cMap.lookup(e);"string"==typeof r&&(r=convertCidSt\ -ring(e,r))}!r&&this.toUnicode&&(r=this.toUnicode.charCodeOf(e));r<=0&&(r=e);t=this.widths[r];if(t)break}return shadow(this,"_spaceWidth",t||this.defaultWidth)}_charToGlyph(e,t=!1){let a,r,i,n=this._glyphCache[e];if(n?.isSpace===t)return n;let s=e;if(this.cMap?.contains(e)){s=this.cMap.lookup(e);"string"==typeof s&&(s=convertCidString(e,s))}r=this.widths[s];"number"!=typeof r&&(r=this.defaultWidth);const o=this.vmetrics?.[s];let c=this.toUnicode.get(e)||e;"number"==typeof c&&(c=String.fromCharCod\ -e(c));let l=void 0!==this.toFontChar[e];a=this.toFontChar[e]||e;if(this.missingFile){const t=this.differences[e]||this.defaultEncoding[e];if((".notdef"===t||""===t)&&"Type1"===this.type){a=32;if(""===t){r||=this._spaceWidth;c=String.fromCharCode(a)}}a=function mapSpecialUnicodeValues(e){return e>=65520&&e<=65535?0:e>=62976&&e<=63743?Tr()[e]||e:173===e?45:e}(a)}this.isType3Font&&(i=a);let h=null;if(this.seacMap?.[e]){l=!0;const t=this.seacMap[e];a=t.baseFontCharCode;h={fontChar:String.fromCodePoi\ -nt(t.accentFontCharCode),offset:t.accentOffset}}let u="";"number"==typeof a&&(a<=1114111?u=String.fromCodePoint(a):warn(`charToGlyph - invalid fontCharCode: ${a}`));if(this.missingFile&&this.vertical&&1===u.length){const e=_r()[u.charCodeAt(0)];e&&(u=c=String.fromCharCode(e))}n=new fonts_Glyph(e,u,c,h,r,o,i,t,l);return this._glyphCache[e]=n}charsToGlyphs(e){let t=this._charsCache[e];if(t)return t;t=[];if(this.cMap){const a=Object.create(null),r=e.length;let i=0;for(;i<r;){this.cMap.readCharCode(\ -e,i,a);const{charcode:r,length:n}=a;i+=n;const s=this._charToGlyph(r,1===n&&32===e.charCodeAt(i-1));t.push(s)}}else for(let a=0,r=e.length;a<r;++a){const r=e.charCodeAt(a),i=this._charToGlyph(r,32===r);t.push(i)}return this._charsCache[e]=t}getCharPositions(e){const t=[];if(this.cMap){const a=Object.create(null);let r=0;for(;r<e.length;){this.cMap.readCharCode(e,r,a);const i=a.length;t.push([r,r+i]);r+=i}}else for(let a=0,r=e.length;a<r;++a)t.push([a,a+1]);return t}get glyphCacheValues(){return \ -Object.values(this._glyphCache)}encodeString(e){const t=[],a=[],hasCurrentBufErrors=()=>t.length%2==1,r=this.toUnicode instanceof IdentityToUnicodeMap?e=>this.toUnicode.charCodeOf(e):e=>this.toUnicode.charCodeOf(String.fromCodePoint(e));for(let i=0,n=e.length;i<n;i++){const n=e.codePointAt(i);n>55295&&(n<57344||n>65533)&&i++;if(this.toUnicode){const e=r(n);if(-1!==e){if(hasCurrentBufErrors()){t.push(a.join(""));a.length=0}for(let t=(this.cMap?this.cMap.getCharCodeLength(e):1)-1;t>=0;t--)a.push(S\ -tring.fromCharCode(e>>8*t&255));continue}}if(!hasCurrentBufErrors()){t.push(a.join(""));a.length=0}a.push(String.fromCodePoint(n))}t.push(a.join(""));return t}}class ErrorFont{constructor(e){this.error=e;this.loadedName="g_font_error";this.missingFile=!0}charsToGlyphs(){return[]}encodeString(e){return[e]}exportData(){return{error:this.error}}}const Si=2,Ai=3,ki=4,Ci=5,vi=6,Fi=7;class Pattern{constructor(){unreachable("Cannot initialize Pattern.")}static parseShading(e,t,a,r,i,n){const s=e instan\ -ceof BaseStream?e.dict:e,o=s.get("ShadingType");try{switch(o){case Si:case Ai:return new RadialAxialShading(s,t,a,r,i,n);case ki:case Ci:case vi:case Fi:return new MeshShading(e,t,a,r,i,n);default:throw new FormatError("Unsupported ShadingType: "+o)}}catch(e){if(e instanceof MissingDataException)throw e;warn(e);return new DummyShading}}}class BaseShading{static SMALL_NUMBER=1e-6;getIR(){unreachable("Abstract method `getIR` called.")}}class RadialAxialShading extends BaseShading{constructor(e,t,a\ -,r,i,n){super();this.shadingType=e.get("ShadingType");let s=0;this.shadingType===Si?s=4:this.shadingType===Ai&&(s=6);this.coordsArr=e.getArray("Coords");if(!isNumberArray(this.coordsArr,s))throw new FormatError("RadialAxialShading: Invalid /Coords array.");const o=ColorSpaceUtils.parse({cs:e.getRaw("CS")||e.getRaw("ColorSpace"),xref:t,resources:a,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n});this.bbox=lookupNormalRect(e.getArray("BBox"),null);let c=0,l=1;const h=e.getArra\ -y("Domain");isNumberArray(h,2)&&([c,l]=h);let u=!1,d=!1;const f=e.getArray("Extend");(function isBooleanArray(e,t){return Array.isArray(e)&&(null===t||e.length===t)&&e.every((e=>"boolean"==typeof e))})(f,2)&&([u,d]=f);if(!(this.shadingType!==Ai||u&&d)){const[e,t,a,r,i,n]=this.coordsArr,s=Math.hypot(e-r,t-i);a<=n+s&&n<=a+s&&warn("Unsupported radial gradient.")}this.extendStart=u;this.extendEnd=d;const g=e.getRaw("Function"),p=r.create(g,!0),m=(l-c)/840,b=this.colorStops=[];if(c>=l||m<=0){info("Ba\ -d shading domain.");return}const y=new Float32Array(o.numComps),w=new Float32Array(1);let x=0;w[0]=c;p(w,0,y,0);const S=new Uint8ClampedArray(3);o.getRgb(y,0,S);let[k,C,v]=S;b.push([0,Util.makeHexColor(k,C,v)]);let F=1;w[0]=c+m;p(w,0,y,0);o.getRgb(y,0,S);let[T,O,M]=S,D=T-k+1,R=O-C+1,N=M-v+1,E=T-k-1,L=O-C-1,j=M-v-1;for(let e=2;e<840;e++){w[0]=c+e*m;p(w,0,y,0);o.getRgb(y,0,S);const[t,a,r]=S,i=e-x;D=Math.min(D,(t-k+1)/i);R=Math.min(R,(a-C+1)/i);N=Math.min(N,(r-v+1)/i);E=Math.max(E,(t-k-1)/i);L=Math\ -.max(L,(a-C-1)/i);j=Math.max(j,(r-v-1)/i);if(!(E<=D&&L<=R&&j<=N)){const e=Util.makeHexColor(T,O,M);b.push([F/840,e]);D=t-T+1;R=a-O+1;N=r-M+1;E=t-T-1;L=a-O-1;j=r-M-1;x=F;k=T;C=O;v=M}F=e;T=t;O=a;M=r}b.push([1,Util.makeHexColor(T,O,M)]);let _="transparent";e.has("Background")&&(_=o.getRgbHex(e.get("Background"),0));if(!u){b.unshift([0,_]);b[1][0]+=BaseShading.SMALL_NUMBER}if(!d){b.at(-1)[0]-=BaseShading.SMALL_NUMBER;b.push([1,_])}this.colorStops=b}getIR(){const{coordsArr:e,shadingType:t}=this;let a\ -,r,i,n,s;if(t===Si){r=[e[0],e[1]];i=[e[2],e[3]];n=null;s=null;a="axial"}else if(t===Ai){r=[e[0],e[1]];i=[e[3],e[4]];n=e[2];s=e[5];a="radial"}else unreachable(`getPattern type unknown: ${t}`);return["RadialAxial",a,this.bbox,this.colorStops,r,i,n,s]}}class MeshStreamReader{constructor(e,t){this.stream=e;this.context=t;this.buffer=0;this.bufferLength=0;const a=t.numComps;this.tmpCompsBuf=new Float32Array(a);const r=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(r):this.tmpComp\ -sBuf}get hasData(){if(this.stream.end)return this.stream.pos<this.stream.end;if(this.bufferLength>0)return!0;const e=this.stream.getByte();if(e<0)return!1;this.buffer=e;this.bufferLength=8;return!0}readBits(e){const{stream:t}=this;let{buffer:a,bufferLength:r}=this;if(32===e){if(0===r)return t.getInt32()>>>0;a=a<<24|t.getByte()<<16|t.getByte()<<8|t.getByte();const e=t.getByte();this.buffer=e&(1<<r)-1;return(a<<8-r|(255&e)>>r)>>>0}if(8===e&&0===r)return t.getByte();for(;r<e;){a=a<<8|t.getByte();r+\ -=8}r-=e;this.bufferLength=r;this.buffer=a&(1<<r)-1;return a>>r}align(){this.buffer=0;this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){const{bitsPerCoordinate:e,decode:t}=this.context,a=this.readBits(e),r=this.readBits(e),i=e<32?1/((1<<e)-1):2.3283064365386963e-10;return[a*i*(t[1]-t[0])+t[0],r*i*(t[3]-t[2])+t[2]]}readComponents(){const{bitsPerComponent:e,colorFn:t,colorSpace:a,decode:r,numComps:i}=this.context,n=e<32?1/((1<<e)-1):2.3283064365386963e-1\ -0,s=this.tmpCompsBuf;for(let t=0,a=4;t<i;t++,a+=2){const i=this.readBits(e);s[t]=i*n*(r[a+1]-r[a])+r[a]}const o=this.tmpCsCompsBuf;t?.(s,0,o,0);return a.getRgb(o,0)}}let Ii=Object.create(null);function getB(e){return Ii[e]||=function buildB(e){const t=[];for(let a=0;a<=e;a++){const r=a/e,i=1-r;t.push(new Float32Array([i**3,3*r*i**2,3*r**2*i,r**3]))}return t}(e)}class MeshShading extends BaseShading{static MIN_SPLIT_PATCH_CHUNKS_AMOUNT=3;static MAX_SPLIT_PATCH_CHUNKS_AMOUNT=20;static TRIANGLE_DEN\ -SITY=20;constructor(e,t,a,r,i,n){super();if(!(e instanceof BaseStream))throw new FormatError("Mesh data is not a stream");const s=e.dict;this.shadingType=s.get("ShadingType");this.bbox=lookupNormalRect(s.getArray("BBox"),null);const o=ColorSpaceUtils.parse({cs:s.getRaw("CS")||s.getRaw("ColorSpace"),xref:t,resources:a,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n});this.background=s.has("Background")?o.getRgb(s.get("Background"),0):null;const c=s.getRaw("Function"),l=c?r.cre\ -ate(c,!0):null;this.coords=[];this.colors=[];this.figures=[];const h={bitsPerCoordinate:s.get("BitsPerCoordinate"),bitsPerComponent:s.get("BitsPerComponent"),bitsPerFlag:s.get("BitsPerFlag"),decode:s.getArray("Decode"),colorFn:l,colorSpace:o,numComps:l?1:o.numComps},u=new MeshStreamReader(e,h);let d=!1;switch(this.shadingType){case ki:this._decodeType4Shading(u);break;case Ci:const e=0|s.get("VerticesPerRow");if(e<2)throw new FormatError("Invalid VerticesPerRow");this._decodeType5Shading(u,e);br\ -eak;case vi:this._decodeType6Shading(u);d=!0;break;case Fi:this._decodeType7Shading(u);d=!0;break;default:unreachable("Unsupported mesh type.")}if(d){this._updateBounds();for(let e=0,t=this.figures.length;e<t;e++)this._buildFigureFromPatch(e)}this._updateBounds();this._packData()}_decodeType4Shading(e){const t=this.coords,a=this.colors,r=[],i=[];let n=0;for(;e.hasData;){const s=e.readFlag(),o=e.readCoordinate(),c=e.readComponents();if(0===n){if(!(0<=s&&s<=2))throw new FormatError("Unknown type4 \ -flag");switch(s){case 0:n=3;break;case 1:i.push(i.at(-2),i.at(-1));n=1;break;case 2:i.push(i.at(-3),i.at(-1));n=1}r.push(s)}i.push(t.length);t.push(o);a.push(c);n--;e.align()}this.figures.push({type:"triangles",coords:new Int32Array(i),colors:new Int32Array(i)})}_decodeType5Shading(e,t){const a=this.coords,r=this.colors,i=[];for(;e.hasData;){const t=e.readCoordinate(),n=e.readComponents();i.push(a.length);a.push(t);r.push(n)}this.figures.push({type:"lattice",coords:new Int32Array(i),colors:new I\ -nt32Array(i),verticesPerRow:t})}_decodeType6Shading(e){const t=this.coords,a=this.colors,r=new Int32Array(16),i=new Int32Array(4);for(;e.hasData;){const n=e.readFlag();if(!(0<=n&&n<=3))throw new FormatError("Unknown type6 flag");const s=t.length;for(let a=0,r=0!==n?8:12;a<r;a++)t.push(e.readCoordinate());const o=a.length;for(let t=0,r=0!==n?2:4;t<r;t++)a.push(e.readComponents());let c,l,h,u;switch(n){case 0:r[12]=s+3;r[13]=s+4;r[14]=s+5;r[15]=s+6;r[8]=s+2;r[11]=s+7;r[4]=s+1;r[7]=s+8;r[0]=s;r[1]=\ -s+11;r[2]=s+10;r[3]=s+9;i[2]=o+1;i[3]=o+2;i[0]=o;i[1]=o+3;break;case 1:c=r[12];l=r[13];h=r[14];u=r[15];r[12]=u;r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=h;r[11]=s+3;r[4]=l;r[7]=s+4;r[0]=c;r[1]=s+7;r[2]=s+6;r[3]=s+5;c=i[2];l=i[3];i[2]=l;i[3]=o;i[0]=c;i[1]=o+1;break;case 2:c=r[15];l=r[11];r[12]=r[3];r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=r[7];r[11]=s+3;r[4]=l;r[7]=s+4;r[0]=c;r[1]=s+7;r[2]=s+6;r[3]=s+5;c=i[3];i[2]=i[1];i[3]=o;i[0]=c;i[1]=o+1;break;case 3:r[12]=r[0];r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=r[1];r[11\ -]=s+3;r[4]=r[2];r[7]=s+4;r[0]=r[3];r[1]=s+7;r[2]=s+6;r[3]=s+5;i[2]=i[0];i[3]=o;i[0]=i[1];i[1]=o+1}r[5]=t.length;t.push([(-4*t[r[0]][0]-t[r[15]][0]+6*(t[r[4]][0]+t[r[1]][0])-2*(t[r[12]][0]+t[r[3]][0])+3*(t[r[13]][0]+t[r[7]][0]))/9,(-4*t[r[0]][1]-t[r[15]][1]+6*(t[r[4]][1]+t[r[1]][1])-2*(t[r[12]][1]+t[r[3]][1])+3*(t[r[13]][1]+t[r[7]][1]))/9]);r[6]=t.length;t.push([(-4*t[r[3]][0]-t[r[12]][0]+6*(t[r[2]][0]+t[r[7]][0])-2*(t[r[0]][0]+t[r[15]][0])+3*(t[r[4]][0]+t[r[14]][0]))/9,(-4*t[r[3]][1]-t[r[12]][1]\ -+6*(t[r[2]][1]+t[r[7]][1])-2*(t[r[0]][1]+t[r[15]][1])+3*(t[r[4]][1]+t[r[14]][1]))/9]);r[9]=t.length;t.push([(-4*t[r[12]][0]-t[r[3]][0]+6*(t[r[8]][0]+t[r[13]][0])-2*(t[r[0]][0]+t[r[15]][0])+3*(t[r[11]][0]+t[r[1]][0]))/9,(-4*t[r[12]][1]-t[r[3]][1]+6*(t[r[8]][1]+t[r[13]][1])-2*(t[r[0]][1]+t[r[15]][1])+3*(t[r[11]][1]+t[r[1]][1]))/9]);r[10]=t.length;t.push([(-4*t[r[15]][0]-t[r[0]][0]+6*(t[r[11]][0]+t[r[14]][0])-2*(t[r[12]][0]+t[r[3]][0])+3*(t[r[2]][0]+t[r[8]][0]))/9,(-4*t[r[15]][1]-t[r[0]][1]+6*(t[r[\ -11]][1]+t[r[14]][1])-2*(t[r[12]][1]+t[r[3]][1])+3*(t[r[2]][1]+t[r[8]][1]))/9]);this.figures.push({type:"patch",coords:new Int32Array(r),colors:new Int32Array(i)})}}_decodeType7Shading(e){const t=this.coords,a=this.colors,r=new Int32Array(16),i=new Int32Array(4);for(;e.hasData;){const n=e.readFlag();if(!(0<=n&&n<=3))throw new FormatError("Unknown type7 flag");const s=t.length;for(let a=0,r=0!==n?12:16;a<r;a++)t.push(e.readCoordinate());const o=a.length;for(let t=0,r=0!==n?2:4;t<r;t++)a.push(e.rea\ -dComponents());let c,l,h,u;switch(n){case 0:r[12]=s+3;r[13]=s+4;r[14]=s+5;r[15]=s+6;r[8]=s+2;r[9]=s+13;r[10]=s+14;r[11]=s+7;r[4]=s+1;r[5]=s+12;r[6]=s+15;r[7]=s+8;r[0]=s;r[1]=s+11;r[2]=s+10;r[3]=s+9;i[2]=o+1;i[3]=o+2;i[0]=o;i[1]=o+3;break;case 1:c=r[12];l=r[13];h=r[14];u=r[15];r[12]=u;r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=h;r[9]=s+9;r[10]=s+10;r[11]=s+3;r[4]=l;r[5]=s+8;r[6]=s+11;r[7]=s+4;r[0]=c;r[1]=s+7;r[2]=s+6;r[3]=s+5;c=i[2];l=i[3];i[2]=l;i[3]=o;i[0]=c;i[1]=o+1;break;case 2:c=r[15];l=r[11];r[12]=\ -r[3];r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=r[7];r[9]=s+9;r[10]=s+10;r[11]=s+3;r[4]=l;r[5]=s+8;r[6]=s+11;r[7]=s+4;r[0]=c;r[1]=s+7;r[2]=s+6;r[3]=s+5;c=i[3];i[2]=i[1];i[3]=o;i[0]=c;i[1]=o+1;break;case 3:r[12]=r[0];r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=r[1];r[9]=s+9;r[10]=s+10;r[11]=s+3;r[4]=r[2];r[5]=s+8;r[6]=s+11;r[7]=s+4;r[0]=r[3];r[1]=s+7;r[2]=s+6;r[3]=s+5;i[2]=i[0];i[3]=o;i[0]=i[1];i[1]=o+1}this.figures.push({type:"patch",coords:new Int32Array(r),colors:new Int32Array(i)})}}_buildFigureFromPatch(e){c\ -onst t=this.figures[e];assert("patch"===t.type,"Unexpected patch mesh figure");const a=this.coords,r=this.colors,i=t.coords,n=t.colors,s=Math.min(a[i[0]][0],a[i[3]][0],a[i[12]][0],a[i[15]][0]),o=Math.min(a[i[0]][1],a[i[3]][1],a[i[12]][1],a[i[15]][1]),c=Math.max(a[i[0]][0],a[i[3]][0],a[i[12]][0],a[i[15]][0]),l=Math.max(a[i[0]][1],a[i[3]][1],a[i[12]][1],a[i[15]][1]);let h=Math.ceil((c-s)*MeshShading.TRIANGLE_DENSITY/(this.bounds[2]-this.bounds[0]));h=MathClamp(h,MeshShading.MIN_SPLIT_PATCH_CHUNKS_\ -AMOUNT,MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT);let u=Math.ceil((l-o)*MeshShading.TRIANGLE_DENSITY/(this.bounds[3]-this.bounds[1]));u=MathClamp(u,MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT,MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT);const d=h+1,f=new Int32Array((u+1)*d),g=new Int32Array((u+1)*d);let p=0;const m=new Uint8Array(3),b=new Uint8Array(3),y=r[n[0]],w=r[n[1]],x=r[n[2]],S=r[n[3]],k=getB(u),C=getB(h);for(let e=0;e<=u;e++){m[0]=(y[0]*(u-e)+x[0]*e)/u|0;m[1]=(y[1]*(u-e)+x[1]*e)/u|0;m[2]=(y[2\ -]*(u-e)+x[2]*e)/u|0;b[0]=(w[0]*(u-e)+S[0]*e)/u|0;b[1]=(w[1]*(u-e)+S[1]*e)/u|0;b[2]=(w[2]*(u-e)+S[2]*e)/u|0;for(let t=0;t<=h;t++,p++){if(!(0!==e&&e!==u||0!==t&&t!==h))continue;let n=0,s=0,o=0;for(let r=0;r<=3;r++)for(let c=0;c<=3;c++,o++){const l=k[e][r]*C[t][c];n+=a[i[o]][0]*l;s+=a[i[o]][1]*l}f[p]=a.length;a.push([n,s]);g[p]=r.length;const c=new Uint8Array(3);c[0]=(m[0]*(h-t)+b[0]*t)/h|0;c[1]=(m[1]*(h-t)+b[1]*t)/h|0;c[2]=(m[2]*(h-t)+b[2]*t)/h|0;r.push(c)}}f[0]=i[0];g[0]=n[0];f[h]=i[3];g[h]=n[1];\ -f[d*u]=i[12];g[d*u]=n[2];f[d*u+h]=i[15];g[d*u+h]=n[3];this.figures[e]={type:"lattice",coords:f,colors:g,verticesPerRow:d}}_updateBounds(){let e=this.coords[0][0],t=this.coords[0][1],a=e,r=t;for(let i=1,n=this.coords.length;i<n;i++){const n=this.coords[i][0],s=this.coords[i][1];e=e>n?n:e;t=t>s?s:t;a=a<n?n:a;r=r<s?s:r}this.bounds=[e,t,a,r]}_packData(){let e,t,a,r;const i=this.coords,n=new Float32Array(2*i.length);for(e=0,a=0,t=i.length;e<t;e++){const t=i[e];n[a++]=t[0];n[a++]=t[1]}this.coords=n;co\ -nst s=this.colors,o=new Uint8Array(3*s.length);for(e=0,a=0,t=s.length;e<t;e++){const t=s[e];o[a++]=t[0];o[a++]=t[1];o[a++]=t[2]}this.colors=o;const c=this.figures;for(e=0,t=c.length;e<t;e++){const t=c[e],i=t.coords,n=t.colors;for(a=0,r=i.length;a<r;a++){i[a]*=2;n[a]*=3}}}getIR(){const{bounds:e}=this;if(e[2]-e[0]==0||e[3]-e[1]==0)throw new FormatError(`Invalid MeshShading bounds: [${e}].`);return["Mesh",this.shadingType,this.coords,this.colors,this.figures,e,this.bbox,this.background]}}class Dumm\ -yShading extends BaseShading{getIR(){return["Dummy"]}}function getTilingPatternIR(e,t,a){const r=lookupMatrix(t.getArray("Matrix"),Fa),i=lookupNormalRect(t.getArray("BBox"),null);if(!i||i[2]-i[0]==0||i[3]-i[1]==0)throw new FormatError("Invalid getTilingPatternIR /BBox array.");const n=t.get("XStep");if("number"!=typeof n)throw new FormatError("Invalid getTilingPatternIR /XStep value.");const s=t.get("YStep");if("number"!=typeof s)throw new FormatError("Invalid getTilingPatternIR /YStep value.");\ -const o=t.get("PaintType");if(!Number.isInteger(o))throw new FormatError("Invalid getTilingPatternIR /PaintType value.");const c=t.get("TilingType");if(!Number.isInteger(c))throw new FormatError("Invalid getTilingPatternIR /TilingType value.");return["TilingPattern",a,e,r,i,n,s,o,c]}const Ti=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.54657,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.\ -85284,.85284,.75859,.92138,.83908,.7762,.73293,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.9121,.86943,.79795,.88198,.77958,.70864,.81055,.90399,.88653,.96017,.82577,.77892,.78257,.97507,1.54657,.97507,.85284,.89552,.90176,.88762,.8785,.75241,.8785,.90518,.95015,.77618,.8785,.88401,.91916,.86304,.88401,.91488,.8785,.8801,.8785,.8785,.91343,.7173,1.04106,.8785,.85075,.95794,.82616,.85162,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.8955\ -2,1.24487,1.13254,1.12401,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.73293,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.9121,.86943,.86943,.86943,.86943,.86943,.85284,.87508,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.88762,.88762,.88762,.88762,.88762,.88762,.8715,.75241,.90518,.90518,.90518,.90518,.88401,.88401,.88401,.88401,.8785,.\ -8785,.8801,.8801,.8801,.8801,.8801,.90747,.89049,.8785,.8785,.8785,.8785,.85162,.8785,.85162,.83908,.88762,.83908,.88762,.83908,.88762,.73293,.75241,.73293,.75241,.73293,.75241,.73293,.75241,.87289,.83016,.88506,.93125,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.81921,.77618,.81921,.77618,.81921,.77618,1,1,.87356,.8785,.91075,.89608,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76229,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.794\ -68,.91926,.88175,.70823,.94903,.9121,.8785,1,1,.9121,.8785,.87802,.88656,.8785,.86943,.8801,.86943,.8801,.86943,.8801,.87402,.89291,.77958,.91343,1,1,.77958,.91343,.70864,.7173,.70864,.7173,.70864,.7173,.70864,.7173,1,1,.81055,.75841,.81055,1.06452,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.96017,.95794,.77892,.85162,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.88762,.77539,.8715,.87508,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.155\ -43,.70674,.98387,.94721,1.33431,1.45894,.95161,1.06303,.83908,.80352,.57184,.6965,.56289,.82001,.56029,.81235,1.02988,.83908,.7762,.68156,.80367,.73133,.78257,.87356,.86943,.95958,.75727,.89019,1.04924,.9121,.7648,.86943,.87356,.79795,.78275,.81055,.77892,.9762,.82577,.99819,.84896,.95958,.77892,.96108,1.01407,.89049,1.02988,.94211,.96108,.8936,.84021,.87842,.96399,.79109,.89049,1.00813,1.02988,.86077,.87445,.92099,.84723,.86513,.8801,.75638,.85714,.78216,.79586,.87965,.94211,.97747,.78287,.9792\ -6,.84971,1.02988,.94211,.8801,.94211,.84971,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90264,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.90518,1,1,1,1,1,1,1,1,1,1,1,1,.90548,1,1,1,1,1,1,.96017,.95794,.96017,.95794,.96017,.95794,.77892,.85162,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.92794,.87012,.87012,.87012,.89552,.89552,1.42259,.71143,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.93835,.83406,.91133,.8410\ -7,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90527,1.81055,.90527,1.81055,1.31006,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Oi={l\ -ineHeight:1.2207,lineGap:.2207},Mi=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.56239,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.71805,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.90872,.85938,.79795,.87068,.77958,.69766,.81055,.90399,.88653,.96068,.82577,.77892,.78257,.97507,1.529,.97507,.85284,.89552,.90176,.94908,.8\ -6411,.74012,.86411,.88323,.95015,.86411,.86331,.88401,.91916,.86304,.88401,.9039,.86331,.86331,.86411,.86411,.90464,.70852,1.04106,.86331,.84372,.95794,.82616,.84548,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.19129,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.71805,.73133,.73133,.73133,.73133,.95958,.\ -95958,.95958,.95958,.88506,.90872,.85938,.85938,.85938,.85938,.85938,.85284,.87068,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.94908,.94908,.94908,.94908,.94908,.94908,.85887,.74012,.88323,.88323,.88323,.88323,.88401,.88401,.88401,.88401,.8785,.86331,.86331,.86331,.86331,.86331,.86331,.90747,.89049,.86331,.86331,.86331,.86331,.84548,.86411,.84548,.83908,.94908,.83908,.94908,.83908,.94908,.71805,.74012,.71805,.74012,.71805,.74012,.71805,.74012,.87289,.79538,.88506,.92726,.73133,.88323,.7313\ -3,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.81921,.86411,.81921,.86411,.81921,.86411,1,1,.87356,.86331,.91075,.8777,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76467,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.77312,.91926,.88175,.70823,.94903,.90872,.86331,1,1,.90872,.86331,.86906,.88116,.86331,.85938,.86331,.85938,.86331,.85938,.86331,.87402,.86549,.77958,.90464,1,1,.77958,.90464,.69766,.70852,.69766,.70852,.69766,.70852,.69766,.70852,1,1,.81055\ -,.75841,.81055,1.06452,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.96068,.95794,.77892,.84548,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.94908,.77539,.85887,.87068,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70088,.98387,.94721,1.33431,1.45894,.95161,1.48387,.83908,.80352,.57118,.6965,.56347,.79179,.55853,.80346,1.02988,.83908,.7762,.67174,.86036,.73133,.78257,.87356,.86441,.95958,.75727,.89019,1.04924,.90872,.74889,.85\ -938,.87891,.79795,.7957,.81055,.77892,.97447,.82577,.97466,.87179,.95958,.77892,.94252,.95612,.8753,1.02988,.92733,.94252,.87411,.84021,.8728,.95612,.74081,.8753,1.02189,1.02988,.84814,.87445,.91822,.84723,.85668,.86331,.81344,.87581,.76422,.82046,.96057,.92733,.99375,.78022,.95452,.86015,1.02988,.92733,.86331,.92733,.86015,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90631,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.883\ -23,1,1,1,1,1,1,1,1,1,1,1,1,.85174,1,1,1,1,1,1,.96068,.95794,.96068,.95794,.96068,.95794,.77892,.84548,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.89807,.87012,.87012,.87012,.89552,.89552,1.42259,.71094,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.92972,.83406,.91133,.83326,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90616,1.81055,.90527,1.81055,1.3107,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44\ -947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Di={lineHeight:1.2207,lineGap:.2207},Bi=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39543,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91\ -133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.72346,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89249,.84118,.77452,.85374,.75186,.67789,.79776,.88844,.85066,.94309,.77818,.7306,.76659,1.10369,1.38313,1.10369,1.06139,.89552,.8739,.9245,.9245,.83203,.9245,.85865,1.09842,.9245,.9245,1.03297,1.07692,.90918,1.03297,.94959,.9245,.92274,.9245,.9245,1.02933,.77832,1.20562,.9245,.8916,.98986,.86621,.89453,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.9\ -1133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.16359,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.72346,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89249,.84118,.84118,.84118,.84118,.84118,.85284,.84557,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.9245,.9245,.9245,.9245,.9245,.9245,.84843,.83203,.85865,.85865,.85865,.85865,.82601,.82601,.82\ -601,.82601,.94469,.9245,.92274,.92274,.92274,.92274,.92274,.90747,.86651,.9245,.9245,.9245,.9245,.89453,.9245,.89453,.8675,.9245,.8675,.9245,.8675,.9245,.72346,.83203,.72346,.83203,.72346,.83203,.72346,.83203,.85193,.8875,.86477,.99034,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.81105,.9245,.81105,.9245,.81105,.9245,1,1,.86275,.9245,.90872,.93591,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77896,1.05611,.6377,1.07692,1,1,.90918,.75593,1.0329\ -7,1,1,.76032,.9375,.98156,.93407,.77261,1.11429,.89249,.9245,1,1,.89249,.9245,.92534,.86698,.9245,.84118,.92274,.84118,.92274,.84118,.92274,.8667,.86291,.75186,1.02933,1,1,.75186,1.02933,.67789,.77832,.67789,.77832,.67789,.77832,.67789,.77832,1,1,.79776,.97655,.79776,1.23023,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.94309,.98986,.7306,.89453,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.9245,.76318,.84843,.84557,.86651,1,1,.79776,1.205\ -62,1.18622,1.18622,1,1.1437,.67009,.96334,.93695,1.35191,1.40909,.95161,1.48387,.8675,.90861,.6192,.7363,.64824,.82411,.56321,.85696,1.23516,.8675,.81552,.7286,.84134,.73206,.76659,.86275,.84369,.90685,.77892,.85871,1.02638,.89249,.75828,.84118,.85984,.77452,.76466,.79776,.7306,.90782,.77818,.903,.87291,.90685,.7306,.99058,1.03667,.94635,1.23516,.9849,.99058,.92393,.8916,.942,1.03667,.75026,.94635,1.0297,1.23516,.90918,.94048,.98217,.89746,.84153,.92274,.82507,.88832,.84438,.88178,1.03525,.9849,\ -1.00225,.78086,.97248,.89404,1.23516,.9849,.92274,.9849,.89404,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.89693,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.85865,1,1,1,1,1,1,1,1,1,1,1,1,.90933,1,1,1,1,1,1,.94309,.98986,.94309,.98986,.94309,.98986,.7306,.89453,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.68994,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.978\ -58,.82616,.91133,.83437,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90572,1.81055,.90749,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85284,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1,1,1,1,1,1,1,1\ -,1,1,1,1,1,1,1],Ri={lineHeight:1.2207,lineGap:.2207},Ni=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39016,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.73834,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89385,.85122,.77452,.86503,.75186,.68887,.79776,.88844,.85066,.94258,.77818,.7306,.76659,1.10369,1.39016,1.10369,1.06\ -139,.89552,.8739,.86128,.94469,.8457,.94469,.89464,1.09842,.84636,.94469,1.03297,1.07692,.90918,1.03297,.95897,.94469,.9482,.94469,.94469,1.04692,.78223,1.20562,.94469,.90332,.98986,.86621,.90527,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.08707,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.73834,.73206,.73206,\ -.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89385,.85122,.85122,.85122,.85122,.85122,.85284,.85311,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.86128,.86128,.86128,.86128,.86128,.86128,.8693,.8457,.89464,.89464,.89464,.89464,.82601,.82601,.82601,.82601,.94469,.94469,.9482,.9482,.9482,.9482,.9482,.90747,.86651,.94469,.94469,.94469,.94469,.90527,.94469,.90527,.8675,.86128,.8675,.86128,.8675,.86128,.73834,.8457,.73834,.8457,.73834,.8457,.73834,.8457,.85193,.92454,.86477,.9921,.73206,.8946\ -4,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.81105,.84636,.81105,.84636,.81105,.84636,1,1,.86275,.94469,.90872,.95786,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77741,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.90452,.98156,1.11842,.77261,1.11429,.89385,.94469,1,1,.89385,.94469,.95877,.86901,.94469,.85122,.9482,.85122,.9482,.85122,.9482,.8667,.90016,.75186,1.04692,1,1,.75186,1.04692,.68887,.78223,.68887,.78223,.68887,.78223,.68887,.78223\ -,1,1,.79776,.92188,.79776,1.23023,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.94258,.98986,.7306,.90527,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.86128,.76318,.8693,.85311,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67742,.96334,.93695,1.35191,1.40909,.95161,1.48387,.86686,.90861,.62267,.74359,.65649,.85498,.56963,.88254,1.23516,.8675,.81552,.75443,.84503,.73206,.76659,.86275,.85122,.90685,.77892,.85746,1.02638,.89385,.\ -75657,.85122,.86275,.77452,.74171,.79776,.7306,.95165,.77818,.89772,.88831,.90685,.7306,.98142,1.02191,.96576,1.23516,.99018,.98142,.9236,.89258,.94035,1.02191,.78848,.96576,.9561,1.23516,.90918,.92578,.95424,.89746,.83969,.9482,.80113,.89442,.85208,.86155,.98022,.99018,1.00452,.81209,.99247,.89181,1.23516,.99018,.9482,.99018,.89181,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.88844,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\ -,1,1,.89464,1,1,1,1,1,1,1,1,1,1,1,1,.96766,1,1,1,1,1,1,.94258,.98986,.94258,.98986,.94258,.98986,.7306,.90527,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.69043,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.99331,.82616,.91133,.84286,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90527,1.81055,.90527,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85356,.90747,\ -.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1.07185,.99413,.96334,1.08065,1,1,1,1,1,1,1,1,1,1,1],Ei={lineHeight:1.2207,lineGap:.2207},Pi=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99\ -973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.000\ -22,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.999\ -73,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.03374,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.0002\ -6,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.00042,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.03828,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99\ -977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00034,.99977,1,.99997,1.00026,1.00078,1.00036,.99973,1.00013,1.0006,.99977,.99977,.99988,.85148,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,1.00069,1.00022,.99977,1.00001,.99984,1.0\ -0026,1.00001,1.00024,1.00001,.9999,1,1.0006,1.00001,1.00041,.99962,1.00026,1.0006,.99995,1.00041,.99942,.99973,.99927,1.00082,.99902,1.00026,1.00087,1.0006,1.00069,.99973,.99867,.99973,.9993,1.00026,1.00049,1.00056,1,.99988,.99935,.99995,.99954,1.00055,.99945,1.00032,1.0006,.99995,1.00026,.99995,1.00032,1.00001,1.00008,.99971,1.00019,.9994,1.00001,1.0006,1.00044,.99973,1.00023,1.00047,1,.99942,.99561,.99989,1.00035,.99977,1.00035,.99977,1.00019,.99944,1.00001,1.00021,.99926,1.00035,1.00035,.9994\ -2,1.00048,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.99989,1.00057,1.00001,.99936,1.00052,1.00012,.99996,1.00043,1,1.00035,.9994,.99976,1.00035,.99973,1.00052,1.00041,1.00119,1.00037,.99973,1.00002,.99986,1.00041,1.00041,.99902,.9996,1.00034,.99999,1.00026,.99999,1.00026,.99973,1.00052,.99973,1,.99973,1.00041,1.00075,.9994,1.0003,.99999,1,1.00041,.99955,1,.99915,.99973,.99973,1.00026,1.00119,.99955,.99973,1.0006,.99911,1.0006,1.00026,.99972,1.00026,.99902,1.00041,.99973,.99999,1,1,1.0\ -0038,1.0005,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,1.00047,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144\ -,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,\ -1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],ji={lineHeight:1.2,lineGap:.2},_i=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.0001\ -6,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,\ -.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.\ -99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.0044,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99971,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.01011,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.\ -9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998\ -,.99998,.99998,.99998,.99998,.99998,.99977,1,1,1.00026,.99969,.99972,.99981,.9998,1.0006,.99977,.99977,1.00022,.91155,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,.99966,1.00022,1.00032,1.00001,.99944,1.00026,1.00001,.99968,1.00001,1.00047,1,1.0006,1.00001,.99981,1.00101,1.00026,1.0006,.99948,.99981,1.00064,.99973,.99942,1.00101,1.00061,1.00026,1.00069,1.0006,1.00014,.99973,1.01322,.99973,1.00065,1.00026,1.00012,.99923,1,1.00064,1.00076,.99948,1.00055,1.00063,1.00007,.99943\ -,1.0006,.99948,1.00026,.99948,.99943,1.00001,1.00001,1.00029,1.00038,1.00035,1.00001,1.0006,1.0006,.99973,.99978,1.00001,1.00057,.99989,.99967,.99964,.99967,.99977,.99999,.99977,1.00038,.99977,1.00001,.99973,1.00066,.99967,.99967,1.00041,.99998,.99999,.99977,1.00022,.99967,1.00001,.99977,1.00026,.99964,1.00031,1.00001,.99999,.99999,1,1.00023,1,1,.99999,1.00035,1.00001,.99999,.99973,.99977,.99999,1.00058,.99973,.99973,.99955,.9995,1.00026,1.00026,1.00032,.99989,1.00034,.99999,1.00026,1.00026,1.00\ -026,.99973,.45998,.99973,1.00026,.99973,1.00001,.99999,.99982,.99994,.99996,1,1.00042,1.00044,1.00029,1.00023,.99973,.99973,1.00026,.99949,1.00002,.99973,1.0006,1.0006,1.0006,.99975,1.00026,1.00026,1.00032,.98685,.99973,1.00026,1,1,.99966,1.00044,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1,.99973,.99971,.99978,1,1,.99991,.99984,1\ -.00002,1.00002,1.00002,1.00002,1.00098,1,1,1,1.00049,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1\ -.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],Xi={lineHeight:1.35,lineGap:.2},qi=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.\ -99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973\ -,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.00\ -06,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.0288,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,.99946,1.00034,1,.99924,1.0000\ -1,1,1,.99973,.99924,.99973,.99924,.99973,1.06311,.99973,1.00024,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,1.00041,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.89547,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1\ -,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00001,1,1.00054,.99977,1.00084,1.00007,.99973,1.00013,.99924,1.00001,1.00001,.99945,.91221,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00001,.99999,.99977,.99933,1.00022,1.00054,1.00001,1.00065,1.00026,1.00001,1.0001,1.00001,1.00052,1,1.0006,1.00001,.99945,.99897,.99968,.99924,1.00036,.99945,.99949,1,1.0006,.99897,.99918,.99968,.99911,.99924,1,.99962,1.01487,1,1.000\ -5,.99973,1.00012,1.00043,1,.99995,.99994,1.00036,.99947,1.00019,1.00063,1.00025,.99924,1.00036,.99973,1.00036,1.00025,1.00001,1.00001,1.00027,1.0001,1.00068,1.00001,1.0006,1.0006,1,1.00008,.99957,.99972,.9994,.99954,.99975,1.00051,1.00001,1.00019,1.00001,1.0001,.99986,1.00001,1.00001,1.00038,.99954,.99954,.9994,1.00066,.99999,.99977,1.00022,1.00054,1.00001,.99977,1.00026,.99975,1.0001,1.00001,.99993,.9995,.99955,1.00016,.99978,.99974,1.00019,1.00022,.99955,1.00053,.99973,1.00089,1.00005,.99967,1\ -.00048,.99973,1.00002,1.00034,.99973,.99973,.99964,1.00006,1.00066,.99947,.99973,.98894,.99973,1,.44898,1,.99946,1,1.00039,1.00082,.99991,.99991,.99985,1.00022,1.00023,1.00061,1.00006,.99966,.99973,.99973,.99973,1.00019,1.0008,1,.99924,.99924,.99924,.99983,1.00044,.99973,.99964,.98332,1,.99973,1,1,.99962,.99895,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.9999\ -8,1.66475,1,.99973,.99973,1.00023,.99973,1.00423,.99925,.99999,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00049,1,1.00245,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,1.00003,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1\ -.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],Hi={lineHeight:1.35,lineGap:.2},Wi=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.0000\ -3,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,\ -1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99\ -973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.04596,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.000\ -6,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,1.00019,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.02572,.99973,1.00005,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,.99999,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.84533,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.999\ -77,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99928,1,.99977,1.00013,1.00055,.99947,.99945,.99941,.99924,1.00001,1.00001,1.0004,.91621,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00005,.99999,.99977,1.00015,1.00022,.99977,1.00001,.99973,1.00026,1.00001,1.00019,1.00001,.99946,1,1.0006,1.00001,.99978,1.00045,.99973,.99924,1.00023,.999\ -78,.99966,1,1.00065,1.00045,1.00019,.99973,.99973,.99924,1,1,.96499,1,1.00055,.99973,1.00008,1.00027,1,.9997,.99995,1.00023,.99933,1.00019,1.00015,1.00031,.99924,1.00023,.99973,1.00023,1.00031,1.00001,.99928,1.00029,1.00092,1.00035,1.00001,1.0006,1.0006,1,.99988,.99975,1,1.00082,.99561,.9996,1.00035,1.00001,.99962,1.00001,1.00092,.99964,1.00001,.99963,.99999,1.00035,1.00035,1.00082,.99962,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.9996,.99967,1.00001,1.00034,1.00074,1.00054,1.00053,1.\ -00063,.99971,.99962,1.00035,.99975,.99977,.99973,1.00043,.99953,1.0007,.99915,.99973,1.00008,.99892,1.00073,1.00073,1.00114,.99915,1.00073,.99955,.99973,1.00092,.99973,1,.99998,1,1.0003,1,1.00043,1.00001,.99969,1.0003,1,1.00035,1.00001,.9995,1,1.00092,.99973,.99973,.99973,1.0007,.9995,1,.99924,1.0006,.99924,.99972,1.00062,.99973,1.00114,1.00073,1,.99955,1,1,1.00047,.99968,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998\ -,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,.99925,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,\ -1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],zi={lineHeight:1.2,lineGap:.2},$i=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278\ -,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278\ -,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,719,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,785,556,556,278,722,556,556,611,278,611,278,611,385,611,479,611,278,722,611,722,611,722,611,708,723,611\ -,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,465,722,333,853,906,474,825,927,838,278,722,722,601,719,667,611,722,778,278,722,667,833,722,644,778,722,667,600,611,667,821,667,809,802,278,667,615,451,611,278,582,615,610,556,606,475,460,611,541,278,558,556\ -,612,556,445,611,766,619,520,684,446,582,715,576,753,845,278,582,611,582,845,667,669,885,567,711,667,278,276,556,1094,1062,875,610,722,622,719,722,719,722,567,712,667,904,626,719,719,610,702,833,722,778,719,667,722,611,622,854,667,730,703,1005,1019,870,979,719,711,1031,719,556,618,615,417,635,556,709,497,615,615,500,635,740,604,611,604,611,556,490,556,875,556,615,581,833,844,729,854,615,552,854,583,556,556,611,417,552,556,278,281,278,969,906,611,500,615,556,604,778,611,487,447,944,778,944,778,94\ -4,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1094,556,885,489,1115,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,\ -990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],Gi=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,\ -164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,\ -290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,\ -913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1\ -075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8\ -595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442\ -,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],Vi=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584\ -,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,740,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278\ -,278,278,278,278,278,278,278,782,556,556,278,722,556,556,611,278,611,278,611,396,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,333,722,333,854,906,473,844,930,847,278,722,722,610,671,667,611,722,778,278\ -,722,667,833,722,657,778,718,667,590,611,667,822,667,829,781,278,667,620,479,611,278,591,620,621,556,610,479,492,611,558,278,566,556,603,556,450,611,712,605,532,664,409,591,704,578,773,834,278,591,611,591,834,667,667,886,614,719,667,278,278,556,1094,1042,854,622,719,677,719,722,708,722,614,722,667,927,643,719,719,615,687,833,722,778,719,667,722,611,677,781,667,729,708,979,989,854,1e3,708,719,1042,729,556,619,604,534,618,556,736,510,611,611,507,622,740,604,611,611,611,556,889,556,885,556,646,583,\ -889,935,707,854,594,552,865,589,556,556,611,469,563,556,278,278,278,969,906,611,507,619,556,611,778,611,575,467,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1104,556,885,516,1146,1e3,768,600,834,834,834,834,999,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,70\ -8,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],Ki=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96\ -,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,25\ -7,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,38\ -2,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1\ -049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8\ -240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9\ -643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],Ji=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,\ -222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,\ -722,500,722,500,722,625,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,733,444,500,222,667,500,500,556,222,556,222,556,281,556,400,556,222,722,556,722,556,722,556,615,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,354,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,\ -667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,789,846,389,794,865,775,222,667,667,570,671,667,611,722,778,278,667,667,833,722,648,778,725,667,600,611,667,837,667,831,761,278,667,570,439,555,222,550,570,571,500,556,439,463,555,542,222,500,492,548,500,447,556,670,573,486,603,374,550,652,546,728,779,222,550,556,550,779,667,667,843,544,708,667,278,278,500,1066,982,844,589,715,639,724,667,651,667,544,704,667,917,614,715,715,589,686,833,722,778,725,667,722,611,639,795,667,727,673\ -,920,923,805,886,651,694,1022,682,556,562,522,493,553,556,688,465,556,556,472,564,686,550,556,556,556,500,833,500,835,500,572,518,830,851,621,736,526,492,752,534,556,556,556,378,496,500,222,222,222,910,828,556,472,565,500,556,778,556,492,339,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1083,1e3,768,600,834,834,834,834,1e3,500,998,500,1e3,500,500,494,612,823,713,584,549,713,979,719,\ -274,549,549,584,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],Yi=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,5\ -3,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,\ -225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,\ -350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,\ -974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1\ -169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9\ -566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],Zi=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,27\ -8,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,55\ -6,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,615,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,735,444,500,222,667,500,500,556,222,556,222,556,292,556,334,556,222,722,556,722,556,722,556,604,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,375,61\ -1,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,784,838,384,774,855,752,222,667,667,551,668,667,611,722,778,278,667,668,833,722,650,778,722,667,618,611,667,798,667,835,748,278,667,578,446,556,222,547,578,575,500,557,446,441,556,556,222,500,500,576,500,448,556,690,569,482,617,395,547,648,525,713,781,222,547,556,547,781,667,667,865,542,719,667,278,27\ -8,500,1057,1010,854,583,722,635,719,667,656,667,542,677,667,923,604,719,719,583,656,833,722,778,719,667,722,611,635,760,667,740,667,917,938,792,885,656,719,1010,722,556,573,531,365,583,556,669,458,559,559,438,583,688,552,556,542,556,500,458,500,823,500,573,521,802,823,625,719,521,510,750,542,556,556,556,365,510,500,222,278,222,906,812,556,438,559,500,552,778,556,489,411,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333\ -,167,365,556,556,1094,556,885,323,1073,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333\ -,333,333,333,222,222,294,294,324,324,316,328,398,285],Qi=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,1\ -92,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,3\ -17,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,9\ -41,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,\ -1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,\ -8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],en=[1.36898,1,1,.72706,.80479,.83734,.98894,.99793\ -,.9897,.93884,.86209,.94292,.94292,1.16661,1.02058,.93582,.96694,.93582,1.19137,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.78076,.78076,1.02058,1.02058,1.02058,.72851,.78966,.90838,.83637,.82391,.96376,.80061,.86275,.8768,.95407,1.0258,.73901,.85022,.83655,1.0156,.95546,.92179,.87107,.92179,.82114,.8096,.89713,.94438,.95353,.94083,.91905,.90406,.9446,.94292,1.18777,.94292,1.02058,.89903,.90088,.94938,.97898,.81093,.97571,.94938,1.024,.9577,.95933,.98621,1.0474,.97455,\ -.98981,.9672,.95933,.9446,.97898,.97407,.97646,.78036,1.10208,.95442,.95298,.97579,.9332,.94039,.938,.80687,1.01149,.80687,1.02058,.80479,.99793,.99793,.99793,.99793,1.01149,1.00872,.90088,.91882,1.0213,.8361,1.02058,.62295,.54324,.89022,1.08595,1,1,.90088,1,.97455,.93582,.90088,1,1.05686,.8361,.99642,.99642,.99642,.72851,.90838,.90838,.90838,.90838,.90838,.90838,.868,.82391,.80061,.80061,.80061,.80061,1.0258,1.0258,1.0258,1.0258,.97484,.95546,.92179,.92179,.92179,.92179,.92179,1.02058,.92179,.9\ -4438,.94438,.94438,.94438,.90406,.86958,.98225,.94938,.94938,.94938,.94938,.94938,.94938,.9031,.81093,.94938,.94938,.94938,.94938,.98621,.98621,.98621,.98621,.93969,.95933,.9446,.9446,.9446,.9446,.9446,1.08595,.9446,.95442,.95442,.95442,.95442,.94039,.97898,.94039,.90838,.94938,.90838,.94938,.90838,.94938,.82391,.81093,.82391,.81093,.82391,.81093,.82391,.81093,.96376,.84313,.97484,.97571,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.8768,.9577,.8768,.9577,.8768,.9577,1,1\ -,.95407,.95933,.97069,.95933,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,.887,1.01591,.73901,1.0474,1,1,.97455,.83655,.98981,1,1,.83655,.73977,.83655,.73903,.84638,1.033,.95546,.95933,1,1,.95546,.95933,.8271,.95417,.95933,.92179,.9446,.92179,.9446,.92179,.9446,.936,.91964,.82114,.97646,1,1,.82114,.97646,.8096,.78036,.8096,.78036,1,1,.8096,.78036,1,1,.89713,.77452,.89713,1.10208,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94083,.9\ -7579,.90406,.94039,.90406,.9446,.938,.9446,.938,.9446,.938,1,.99793,.90838,.94938,.868,.9031,.92179,.9446,1,1,.89713,1.10208,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90989,.9358,.91945,.83181,.75261,.87992,.82976,.96034,.83689,.97268,1.0078,.90838,.83637,.8019,.90157,.80061,.9446,.95407,.92436,1.0258,.85022,.97153,1.0156,.95546,.89192,.92179,.92361,.87107,.96318,.89713,.93704,.95638,.91905,.91709,.92796,1.0258,.93704,.94836,1.0373,.95933,1.0078,.95871,.94836,.96174,.92601,\ -.9498,.98607,.95776,.95933,1.05453,1.0078,.98275,.9314,.95617,.91701,1.05993,.9446,.78367,.9553,1,.86832,1.0128,.95871,.99394,.87548,.96361,.86774,1.0078,.95871,.9446,.95871,.86774,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.94083,.97579,.94083,.97579,.94083,.97579,.90406,.94039,.96694,1,.89903,1,1,1,.93582,.93582,.93582,1,.908,.908,.918,.94\ -219,.94219,.96544,1,1.285,1,1,.81079,.81079,1,1,.74854,1,1,1,1,.99793,1,1,1,.65,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.17173,1,.80535,.76169,1.02058,1.0732,1.05486,1,1,1.30692,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.16161,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],tn={lineHeight:1.2,lineGap:.2},an=[1.36898,1,1,.66227,.80779,.81625,.97276,.97276,.97733,.\ -92222,.83266,.94292,.94292,1.16148,1.02058,.93582,.96694,.93582,1.17337,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.78076,.78076,1.02058,1.02058,1.02058,.71541,.76813,.85576,.80591,.80729,.94299,.77512,.83655,.86523,.92222,.98621,.71743,.81698,.79726,.98558,.92222,.90637,.83809,.90637,.80729,.76463,.86275,.90699,.91605,.9154,.85308,.85458,.90531,.94292,1.21296,.94292,1.02058,.89903,1.18616,.99613,.91677,.78216,.91677,.90083,.98796,.9135,.92168,.95381,.98981,.95298,.953\ -81,.93459,.92168,.91513,.92004,.91677,.95077,.748,1.04502,.91677,.92061,.94236,.89544,.89364,.9,.80687,.8578,.80687,1.02058,.80779,.97276,.97276,.97276,.97276,.8578,.99973,1.18616,.91339,1.08074,.82891,1.02058,.55509,.71526,.89022,1.08595,1,1,1.18616,1,.96736,.93582,1.18616,1,1.04864,.82711,.99043,.99043,.99043,.71541,.85576,.85576,.85576,.85576,.85576,.85576,.845,.80729,.77512,.77512,.77512,.77512,.98621,.98621,.98621,.98621,.95961,.92222,.90637,.90637,.90637,.90637,.90637,1.02058,.90251,.90699\ -,.90699,.90699,.90699,.85458,.83659,.94951,.99613,.99613,.99613,.99613,.99613,.99613,.85811,.78216,.90083,.90083,.90083,.90083,.95381,.95381,.95381,.95381,.9135,.92168,.91513,.91513,.91513,.91513,.91513,1.08595,.91677,.91677,.91677,.91677,.91677,.89364,.92332,.89364,.85576,.99613,.85576,.99613,.85576,.99613,.80729,.78216,.80729,.78216,.80729,.78216,.80729,.78216,.94299,.76783,.95961,.91677,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.86523,.9135,.86523,.9135,.86523,.913\ -5,1,1,.92222,.92168,.92222,.92168,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.86036,.97096,.71743,.98981,1,1,.95298,.79726,.95381,1,1,.79726,.6894,.79726,.74321,.81691,1.0006,.92222,.92168,1,1,.92222,.92168,.79464,.92098,.92168,.90637,.91513,.90637,.91513,.90637,.91513,.909,.87514,.80729,.95077,1,1,.80729,.95077,.76463,.748,.76463,.748,1,1,.76463,.748,1,1,.86275,.72651,.86275,1.04502,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.9\ -154,.94236,.85458,.89364,.85458,.90531,.9,.90531,.9,.90531,.9,1,.97276,.85576,.99613,.845,.85811,.90251,.91677,1,1,.86275,1.04502,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.00899,1.30628,.85576,.80178,.66862,.7927,.69323,.88127,.72459,.89711,.95381,.85576,.80591,.7805,.94729,.77512,.90531,.92222,.90637,.98621,.81698,.92655,.98558,.92222,.85359,.90637,.90976,.83809,.94523,.86275,.83509,.93157,.85308,.83392,.92346,.98621,.83509,.92886,.91324,.92168,.95381,.90646,.928\ -86,.90557,.86847,.90276,.91324,.86842,.92168,.99531,.95381,.9224,.85408,.92699,.86847,1.0051,.91513,.80487,.93481,1,.88159,1.05214,.90646,.97355,.81539,.89398,.85923,.95381,.90646,.91513,.90646,.85923,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9154,.94236,.9154,.94236,.9154,.94236,.85458,.89364,.96694,1,.89903,1,1,1,.91782,.91782,.91782,1,.\ -896,.896,.896,.9332,.9332,.95973,1,1.26,1,1,.80479,.80178,1,1,.85633,1,1,1,1,.97276,1,1,1,.698,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.14542,1,.79199,.78694,1.02058,1.03493,1.05486,1,1,1.23026,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.20006,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],rn={lineHeight:1.2,lineGap:.2},nn=[1.36898,1,1,.65507,.84943,.85639,.88465\ -,.88465,.86936,.88307,.86948,.85283,.85283,1.06383,1.02058,.75945,.9219,.75945,1.17337,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.75945,.75945,1.02058,1.02058,1.02058,.69046,.70926,.85158,.77812,.76852,.89591,.70466,.76125,.80094,.86822,.83864,.728,.77212,.79475,.93637,.87514,.8588,.76013,.8588,.72421,.69866,.77598,.85991,.80811,.87832,.78112,.77512,.8562,1.0222,1.18417,1.0222,1.27014,.89903,1.15012,.93859,.94399,.846,.94399,.81453,1.0186,.94219,.96017,1.03075,1.02175\ -,.912,1.03075,.96998,.96017,.93859,.94399,.94399,.95493,.746,1.12658,.94578,.91,.979,.882,.882,.83,.85034,.83537,.85034,1.02058,.70869,.88465,.88465,.88465,.88465,.83537,.90083,1.15012,.9161,.94565,.73541,1.02058,.53609,.69353,.79519,1.08595,1,1,1.15012,1,.91974,.75945,1.15012,1,.9446,.73361,.9005,.9005,.9005,.62864,.85158,.85158,.85158,.85158,.85158,.85158,.773,.76852,.70466,.70466,.70466,.70466,.83864,.83864,.83864,.83864,.90561,.87514,.8588,.8588,.8588,.8588,.8588,1.02058,.85751,.85991,.85991\ -,.85991,.85991,.77512,.76013,.88075,.93859,.93859,.93859,.93859,.93859,.93859,.8075,.846,.81453,.81453,.81453,.81453,.82424,.82424,.82424,.82424,.9278,.96017,.93859,.93859,.93859,.93859,.93859,1.08595,.8562,.94578,.94578,.94578,.94578,.882,.94578,.882,.85158,.93859,.85158,.93859,.85158,.93859,.76852,.846,.76852,.846,.76852,.846,.76852,.846,.89591,.8544,.90561,.94399,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.80094,.94219,.80094,.94219,.80094,.94219,1,1,.86822,.96017,.\ -86822,.96017,.83864,.82424,.83864,.82424,.83864,.82424,.83864,1.03075,.83864,.82424,.81402,1.02738,.728,1.02175,1,1,.912,.79475,1.03075,1,1,.79475,.83911,.79475,.66266,.80553,1.06676,.87514,.96017,1,1,.87514,.96017,.86865,.87396,.96017,.8588,.93859,.8588,.93859,.8588,.93859,.867,.84759,.72421,.95493,1,1,.72421,.95493,.69866,.746,.69866,.746,1,1,.69866,.746,1,1,.77598,.88417,.77598,1.12658,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.87832,.979,.77512,.882,\ -.77512,.8562,.83,.8562,.83,.8562,.83,1,.88465,.85158,.93859,.773,.8075,.85751,.8562,1,1,.77598,1.12658,1.15012,1.15012,1.15012,1.15012,1.15012,1.15313,1.15012,1.15012,1.15012,1.08106,1.03901,.85158,.77025,.62264,.7646,.65351,.86026,.69461,.89947,1.03075,.85158,.77812,.76449,.88836,.70466,.8562,.86822,.8588,.83864,.77212,.85308,.93637,.87514,.82352,.8588,.85701,.76013,.89058,.77598,.8156,.82565,.78112,.77899,.89386,.83864,.8156,.9486,.92388,.96186,1.03075,.91123,.9486,.93298,.878,.93942,.92388,.8\ -4596,.96186,.95119,1.03075,.922,.88787,.95829,.88,.93559,.93859,.78815,.93758,1,.89217,1.03737,.91123,.93969,.77487,.85769,.86799,1.03075,.91123,.93859,.91123,.86799,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87832,.979,.87832,.979,.87832,.979,.77512,.882,.9219,1,.89903,1,1,1,.87321,.87321,.87321,1,1.027,1.027,1.027,.86847,.86847,.79121,1,1\ -.124,1,1,.73572,.73572,1,1,.85034,1,1,1,1,.88465,1,1,1,.669,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.04828,1,.74948,.75187,1.02058,.98391,1.02119,1,1,1.06233,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05233,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],sn={lineHeight:1.2,lineGap:.2},on=[1.36898,1,1,.76305,.82784,.94935,.89364,.92241,.89073,.90706,.98472,.85283,\ -.85283,1.0664,1.02058,.74505,.9219,.74505,1.23456,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.74505,.74505,1.02058,1.02058,1.02058,.73002,.72601,.91755,.8126,.80314,.92222,.73764,.79726,.83051,.90284,.86023,.74,.8126,.84869,.96518,.91115,.8858,.79761,.8858,.74498,.73914,.81363,.89591,.83659,.89633,.85608,.8111,.90531,1.0222,1.22736,1.0222,1.27014,.89903,.90088,.86667,1.0231,.896,1.01411,.90083,1.05099,1.00512,.99793,1.05326,1.09377,.938,1.06226,1.00119,.99793,.98714,1.\ -0231,1.01231,.98196,.792,1.19137,.99074,.962,1.01915,.926,.942,.856,.85034,.92006,.85034,1.02058,.69067,.92241,.92241,.92241,.92241,.92006,.9332,.90088,.91882,.93484,.75339,1.02058,.56866,.54324,.79519,1.08595,1,1,.90088,1,.95325,.74505,.90088,1,.97198,.75339,.91009,.91009,.91009,.66466,.91755,.91755,.91755,.91755,.91755,.91755,.788,.80314,.73764,.73764,.73764,.73764,.86023,.86023,.86023,.86023,.92915,.91115,.8858,.8858,.8858,.8858,.8858,1.02058,.8858,.89591,.89591,.89591,.89591,.8111,.79611,.89\ -713,.86667,.86667,.86667,.86667,.86667,.86667,.86936,.896,.90083,.90083,.90083,.90083,.84224,.84224,.84224,.84224,.97276,.99793,.98714,.98714,.98714,.98714,.98714,1.08595,.89876,.99074,.99074,.99074,.99074,.942,1.0231,.942,.91755,.86667,.91755,.86667,.91755,.86667,.80314,.896,.80314,.896,.80314,.896,.80314,.896,.92222,.93372,.92915,1.01411,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.83051,1.00512,.83051,1.00512,.83051,1.00512,1,1,.90284,.99793,.90976,.99793,.86023,.842\ -24,.86023,.84224,.86023,.84224,.86023,1.05326,.86023,.84224,.82873,1.07469,.74,1.09377,1,1,.938,.84869,1.06226,1,1,.84869,.83704,.84869,.81441,.85588,1.08927,.91115,.99793,1,1,.91115,.99793,.91887,.90991,.99793,.8858,.98714,.8858,.98714,.8858,.98714,.894,.91434,.74498,.98196,1,1,.74498,.98196,.73914,.792,.73914,.792,1,1,.73914,.792,1,1,.81363,.904,.81363,1.19137,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89633,1.01915,.8111,.942,.8111,.90531,.856,.90531,\ -.856,.90531,.856,1,.92241,.91755,.86667,.788,.86936,.8858,.89876,1,1,.81363,1.19137,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90388,1.03901,.92138,.78105,.7154,.86169,.80513,.94007,.82528,.98612,1.06226,.91755,.8126,.81884,.92819,.73764,.90531,.90284,.8858,.86023,.8126,.91172,.96518,.91115,.83089,.8858,.87791,.79761,.89297,.81363,.88157,.89992,.85608,.81992,.94307,.86023,.88157,.95308,.98699,.99793,1.06226,.95817,.95308,.97358,.928,.98088,.98699,.92761,.99793,.96017,1.06226\ -,.986,.944,.95978,.938,.96705,.98714,.80442,.98972,1,.89762,1.04552,.95817,.99007,.87064,.91879,.88888,1.06226,.95817,.98714,.95817,.88888,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89633,1.01915,.89633,1.01915,.89633,1.01915,.8111,.942,.9219,1,.89903,1,1,1,.93173,.93173,.93173,1,1.06304,1.06304,1.06904,.89903,.89903,.80549,1,1.156,1,1,.765\ -75,.76575,1,1,.72458,1,1,1,1,.92241,1,1,1,.619,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.07257,1,.74705,.71119,1.02058,1.024,1.02119,1,1,1.1536,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05638,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],cn={lineHeight:1.2,lineGap:.2},ln=[1.76738,1,1,.99297,.9824,1.04016,1.06497,1.03424,.97529,1.17647,1.23203,1.1085,1.1085,1.16\ -939,1.2107,.9754,1.21408,.9754,1.59578,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,.81378,.81378,1.2107,1.2107,1.2107,.71703,.97847,.97363,.88776,.8641,1.02096,.79795,.85132,.914,1.06085,1.1406,.8007,.89858,.83693,1.14889,1.09398,.97489,.92094,.97489,.90399,.84041,.95923,1.00135,1,1.06467,.98243,.90996,.99361,1.1085,1.56942,1.1085,1.2107,.74627,.94282,.96752,1.01519,.86304,1.01359,.97278,1.15103,1.01359,.98561,1.02285,1.02285,1.00527,1.02285,1.0302,.99041,1.00\ -08,1.01519,1.01359,1.02258,.79104,1.16862,.99041,.97454,1.02511,.99298,.96752,.95801,.94856,1.16579,.94856,1.2107,.9824,1.03424,1.03424,1,1.03424,1.16579,.8727,1.3871,1.18622,1.10818,1.04478,1.2107,1.18622,.75155,.94994,1.28826,1.21408,1.21408,.91056,1,.91572,.9754,.64663,1.18328,1.24866,1.04478,1.14169,1.15749,1.17389,.71703,.97363,.97363,.97363,.97363,.97363,.97363,.93506,.8641,.79795,.79795,.79795,.79795,1.1406,1.1406,1.1406,1.1406,1.02096,1.09398,.97426,.97426,.97426,.97426,.97426,1.2107,.97\ -489,1.00135,1.00135,1.00135,1.00135,.90996,.92094,1.02798,.96752,.96752,.96752,.96752,.96752,.96752,.93136,.86304,.97278,.97278,.97278,.97278,1.02285,1.02285,1.02285,1.02285,.97122,.99041,1,1,1,1,1,1.28826,1.0008,.99041,.99041,.99041,.99041,.96752,1.01519,.96752,.97363,.96752,.97363,.96752,.97363,.96752,.8641,.86304,.8641,.86304,.8641,.86304,.8641,.86304,1.02096,1.03057,1.02096,1.03517,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.914,1.01359,.914,1.01359,.914,1.01359,1,\ -1,1.06085,.98561,1.06085,1.00879,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,.97138,1.08692,.8007,1.02285,1,1,1.00527,.83693,1.02285,1,1,.83693,.9455,.83693,.90418,.83693,1.13005,1.09398,.99041,1,1,1.09398,.99041,.96692,1.09251,.99041,.97489,1.0008,.97489,1.0008,.97489,1.0008,.93994,.97931,.90399,1.02258,1,1,.90399,1.02258,.84041,.79104,.84041,.79104,.84041,.79104,.84041,.79104,1,1,.95923,1.07034,.95923,1.16862,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.\ -99041,1.00135,.99041,1.00135,.99041,1.06467,1.02511,.90996,.96752,.90996,.99361,.95801,.99361,.95801,.99361,.95801,1.07733,1.03424,.97363,.96752,.93506,.93136,.97489,1.0008,1,1,.95923,1.16862,1.15103,1.15103,1.01173,1.03959,.75953,.81378,.79912,1.15103,1.21994,.95161,.87815,1.01149,.81525,.7676,.98167,1.01134,1.02546,.84097,1.03089,1.18102,.97363,.88776,.85134,.97826,.79795,.99361,1.06085,.97489,1.1406,.89858,1.0388,1.14889,1.09398,.86039,.97489,1.0595,.92094,.94793,.95923,.90996,.99346,.98243,1\ -.02112,.95493,1.1406,.90996,1.03574,1.02597,1.0008,1.18102,1.06628,1.03574,1.0192,1.01932,1.00886,.97531,1.0106,1.0008,1.13189,1.18102,1.02277,.98683,1.0016,.99561,1.07237,1.0008,.90434,.99921,.93803,.8965,1.23085,1.06628,1.04983,.96268,1.0499,.98439,1.18102,1.06628,1.0008,1.06628,.98439,.79795,1,1,1,1,1,1,1,1,1,1,1,1,1.09466,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.97278,1,1,1,1,1,1,1,1,1,1,1,1,1.02065,1\ -,1,1,1,1,1,1.06467,1.02511,1.06467,1.02511,1.06467,1.02511,.90996,.96752,1,1.21408,.89903,1,1,.75155,1.04394,1.04394,1.04394,1.04394,.98633,.98633,.98633,.73047,.73047,1.20642,.91211,1.25635,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.12454,.93503,1.03424,1.19687,1.03424,1,1,1,.771,1,1,1.15749,1.15749,1.15749,1.10948,.86279,.94434,.86279,.94434,.86182,1,1,1.16897,1,.96085,.90137,1.2107,1.18416,1.13973,.69825,.9716,2.10339,1.29004,1.29004,1.21172,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\ -,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18874,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.09193,1.09193,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],hn={lineHeight:1.33008,lineGap:0},un=[1.76738,1,1,.98946,1.03959,1.04016,1.02809,1.036,.97639,1.10953,1.23203,1.11144,1.11144,1.16939,1.21237,.9754,1.21261,.9754,1.59754,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,\ -.81378,.81378,1.21237,1.21237,1.21237,.73541,.97847,.97363,.89723,.87897,1.0426,.79429,.85292,.91149,1.05815,1.1406,.79631,.90128,.83853,1.04396,1.10615,.97552,.94436,.97552,.88641,.80527,.96083,1.00135,1,1.06777,.9817,.91142,.99361,1.11144,1.57293,1.11144,1.21237,.74627,1.31818,1.06585,.97042,.83055,.97042,.93503,1.1261,.97042,.97922,1.14236,.94552,1.01054,1.14236,1.02471,.97922,.94165,.97042,.97042,1.0276,.78929,1.1261,.97922,.95874,1.02197,.98507,.96752,.97168,.95107,1.16579,.95107,1.21237,1.\ -03959,1.036,1.036,1,1.036,1.16579,.87357,1.31818,1.18754,1.26781,1.05356,1.21237,1.18622,.79487,.94994,1.29004,1.24047,1.24047,1.31818,1,.91484,.9754,1.31818,1.1349,1.24866,1.05356,1.13934,1.15574,1.17389,.73541,.97363,.97363,.97363,.97363,.97363,.97363,.94385,.87897,.79429,.79429,.79429,.79429,1.1406,1.1406,1.1406,1.1406,1.0426,1.10615,.97552,.97552,.97552,.97552,.97552,1.21237,.97552,1.00135,1.00135,1.00135,1.00135,.91142,.94436,.98721,1.06585,1.06585,1.06585,1.06585,1.06585,1.06585,.96705,.83\ -055,.93503,.93503,.93503,.93503,1.14236,1.14236,1.14236,1.14236,.93125,.97922,.94165,.94165,.94165,.94165,.94165,1.29004,.94165,.97922,.97922,.97922,.97922,.96752,.97042,.96752,.97363,1.06585,.97363,1.06585,.97363,1.06585,.87897,.83055,.87897,.83055,.87897,.83055,.87897,.83055,1.0426,1.0033,1.0426,.97042,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.91149,.97042,.91149,.97042,.91149,.97042,1,1,1.05815,.97922,1.05815,.97922,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1\ -406,1.14236,1.1406,1.14236,.97441,1.04302,.79631,1.01582,1,1,1.01054,.83853,1.14236,1,1,.83853,1.09125,.83853,.90418,.83853,1.19508,1.10615,.97922,1,1,1.10615,.97922,1.01034,1.10466,.97922,.97552,.94165,.97552,.94165,.97552,.94165,.91602,.91981,.88641,1.0276,1,1,.88641,1.0276,.80527,.78929,.80527,.78929,.80527,.78929,.80527,.78929,1,1,.96083,1.05403,.95923,1.16862,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.06777,1.02197,.91142,.96752,.91142,.99361\ -,.97168,.99361,.97168,.99361,.97168,1.23199,1.036,.97363,1.06585,.94385,.96705,.97552,.94165,1,1,.96083,1.1261,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,.95161,1.27126,1.00811,.83284,.77702,.99137,.95253,1.0347,.86142,1.07205,1.14236,.97363,.89723,.86869,1.09818,.79429,.99361,1.05815,.97552,1.1406,.90128,1.06662,1.04396,1.10615,.84918,.97552,1.04694,.94436,.98015,.96083,.91142,1.00356,.9817,1.01945,.98999,1.1406,.91142,1.04961,.9898,1.00639,1.14236,1.07514,1.04961,.\ -99607,1.02897,1.008,.9898,.95134,1.00639,1.11121,1.14236,1.00518,.97981,1.02186,1,1.08578,.94165,.99314,.98387,.93028,.93377,1.35125,1.07514,1.10687,.93491,1.04232,1.00351,1.14236,1.07514,.94165,1.07514,1.00351,.79429,1,1,1,1,1,1,1,1,1,1,1,1,1.09097,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.93503,1,1,1,1,1,1,1,1,1,1,1,1,.96609,1,1,1,1,1,1,1.06777,1.02197,1.06777,1.02197,1.06777,1.02197,.91142,.96752,1,1.21\ -261,.89903,1,1,.75155,1.04745,1.04745,1.04745,1.04394,.98633,.98633,.98633,.72959,.72959,1.20502,.91406,1.26514,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.09125,.93327,1.03336,1.16541,1.036,1,1,1,.771,1,1,1.15574,1.15574,1.15574,1.15574,.86364,.94434,.86279,.94434,.86224,1,1,1.16798,1,.96085,.90068,1.21237,1.18416,1.13904,.69825,.9716,2.10339,1.29004,1.29004,1.21339,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.426\ -03,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18775,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.13269,1.13269,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],dn={lineHeight:1.33008,lineGap:0},fn=[1.76738,1,1,.98946,1.14763,1.05365,1.06234,.96927,.92586,1.15373,1.18414,.91349,.91349,1.07403,1.17308,.78383,1.20088,.78383,1.42531,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78383,.78383,1.17308,1.17308,1.17308,.77349,.94565,.94729,.85944,.88\ -506,.9858,.74817,.80016,.88449,.98039,.95782,.69238,.89898,.83231,.98183,1.03989,.96924,.86237,.96924,.80595,.74524,.86091,.95402,.94143,.98448,.8858,.83089,.93285,1.0949,1.39016,1.0949,1.45994,.74627,1.04839,.97454,.97454,.87207,.97454,.87533,1.06151,.97454,1.00176,1.16484,1.08132,.98047,1.16484,1.02989,1.01054,.96225,.97454,.97454,1.06598,.79004,1.16344,1.00351,.94629,.9973,.91016,.96777,.9043,.91082,.92481,.91082,1.17308,.95748,.96927,.96927,1,.96927,.92481,.80597,1.04839,1.23393,1.1781,.9245\ -,1.17308,1.20808,.63218,.94261,1.24822,1.09971,1.09971,1.04839,1,.85273,.78032,1.04839,1.09971,1.22326,.9245,1.09836,1.13525,1.15222,.70424,.94729,.94729,.94729,.94729,.94729,.94729,.85498,.88506,.74817,.74817,.74817,.74817,.95782,.95782,.95782,.95782,.9858,1.03989,.96924,.96924,.96924,.96924,.96924,1.17308,.96924,.95402,.95402,.95402,.95402,.83089,.86237,.88409,.97454,.97454,.97454,.97454,.97454,.97454,.92916,.87207,.87533,.87533,.87533,.87533,.93146,.93146,.93146,.93146,.93854,1.01054,.96225,.\ -96225,.96225,.96225,.96225,1.24822,.8761,1.00351,1.00351,1.00351,1.00351,.96777,.97454,.96777,.94729,.97454,.94729,.97454,.94729,.97454,.88506,.87207,.88506,.87207,.88506,.87207,.88506,.87207,.9858,.95391,.9858,.97454,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.88449,.97454,.88449,.97454,.88449,.97454,1,1,.98039,1.00176,.98039,1.00176,.95782,.93146,.95782,.93146,.95782,.93146,.95782,1.16484,.95782,.93146,.84421,1.12761,.69238,1.08132,1,1,.98047,.83231,1.16484,1,1,.8472\ -3,1.04861,.84723,.78755,.83231,1.23736,1.03989,1.01054,1,1,1.03989,1.01054,.9857,1.03849,1.01054,.96924,.96225,.96924,.96225,.96924,.96225,.92383,.90171,.80595,1.06598,1,1,.80595,1.06598,.74524,.79004,.74524,.79004,.74524,.79004,.74524,.79004,1,1,.86091,1.02759,.85771,1.16344,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.98448,.9973,.83089,.96777,.83089,.93285,.9043,.93285,.9043,.93285,.9043,1.31868,.96927,.94729,.97454,.85498,.92916,.96924,.8761,1,1,\ -.86091,1.16344,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,.81965,.81965,.94729,.78032,.71022,.90883,.84171,.99877,.77596,1.05734,1.2,.94729,.85944,.82791,.9607,.74817,.93285,.98039,.96924,.95782,.89898,.98316,.98183,1.03989,.78614,.96924,.97642,.86237,.86075,.86091,.83089,.90082,.8858,.97296,1.01284,.95782,.83089,1.0976,1.04,1.03342,1.2,1.0675,1.0976,.98205,1.03809,1.05097,1.04,.95364,1.03342,1.05401,1.2,1.02148,1.0119,1.04724,1.0127,1.02732,.96225,.8965,.97783,.9357\ -4,.94818,1.30679,1.0675,1.11826,.99821,1.0557,1.0326,1.2,1.0675,.96225,1.0675,1.0326,.74817,1,1,1,1,1,1,1,1,1,1,1,1,1.03754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87533,1,1,1,1,1,1,1,1,1,1,1,1,.98705,1,1,1,1,1,1,.98448,.9973,.98448,.9973,.98448,.9973,.83089,.96777,1,1.20088,.89903,1,1,.75155,.94945,.94945,.94945,.94945,1.12317,1.12317,1.12317,.67603,.67603,1.15621,.73584,1.21191,1.22135,1.06483,.94868,.\ -94868,.95996,1.24633,1,1.07497,.87709,.96927,1.01473,.96927,1,1,1,.77295,1,1,1.09836,1.09836,1.09836,1.01522,.86321,.94434,.8649,.94434,.86182,1,1,1.083,1,.91578,.86438,1.17308,1.18416,1.14589,.69825,.97622,1.96791,1.24822,1.24822,1.17308,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.17984,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1\ -,1.10742,1.10742,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],gn={lineHeight:1.33008,lineGap:0},pn=[1.76738,1,1,.98594,1.02285,1.10454,1.06234,.96927,.92037,1.19985,1.2046,.90616,.90616,1.07152,1.1714,.78032,1.20088,.78032,1.40246,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78032,.78032,1.1714,1.1714,1.1714,.80597,.94084,.96706,.85944,.85734,.97093,.75842,.79936,.88198,.9831,.95782,.71387,.86969,.84636,1.07796,1.03584,.96924,.83968,.96924,.82826,.79649,.85771,.95132,.93119,.98\ -965,.88433,.8287,.93365,1.08612,1.3638,1.08612,1.45786,.74627,.80499,.91484,1.05707,.92383,1.05882,.9403,1.12654,1.05882,1.01756,1.09011,1.09011,.99414,1.09011,1.034,1.01756,1.05356,1.05707,1.05882,1.04399,.84863,1.21968,1.01756,.95801,1.00068,.91797,.96777,.9043,.90351,.92105,.90351,1.1714,.85337,.96927,.96927,.99912,.96927,.92105,.80597,1.2434,1.20808,1.05937,.90957,1.1714,1.20808,.75155,.94261,1.24644,1.09971,1.09971,.84751,1,.85273,.78032,.61584,1.05425,1.17914,.90957,1.08665,1.11593,1.14169\ -,.73381,.96706,.96706,.96706,.96706,.96706,.96706,.86035,.85734,.75842,.75842,.75842,.75842,.95782,.95782,.95782,.95782,.97093,1.03584,.96924,.96924,.96924,.96924,.96924,1.1714,.96924,.95132,.95132,.95132,.95132,.8287,.83968,.89049,.91484,.91484,.91484,.91484,.91484,.91484,.93575,.92383,.9403,.9403,.9403,.9403,.8717,.8717,.8717,.8717,1.00527,1.01756,1.05356,1.05356,1.05356,1.05356,1.05356,1.24644,.95923,1.01756,1.01756,1.01756,1.01756,.96777,1.05707,.96777,.96706,.91484,.96706,.91484,.96706,.914\ -84,.85734,.92383,.85734,.92383,.85734,.92383,.85734,.92383,.97093,1.0969,.97093,1.05882,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.88198,1.05882,.88198,1.05882,.88198,1.05882,1,1,.9831,1.01756,.9831,1.01756,.95782,.8717,.95782,.8717,.95782,.8717,.95782,1.09011,.95782,.8717,.84784,1.11551,.71387,1.09011,1,1,.99414,.84636,1.09011,1,1,.84636,1.0536,.84636,.94298,.84636,1.23297,1.03584,1.01756,1,1,1.03584,1.01756,1.00323,1.03444,1.01756,.96924,1.05356,.96924,1.05356,.96924,1.0\ -5356,.93066,.98293,.82826,1.04399,1,1,.82826,1.04399,.79649,.84863,.79649,.84863,.79649,.84863,.79649,.84863,1,1,.85771,1.17318,.85771,1.21968,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.98965,1.00068,.8287,.96777,.8287,.93365,.9043,.93365,.9043,.93365,.9043,1.08571,.96927,.96706,.91484,.86035,.93575,.96924,.95923,1,1,.85771,1.21968,1.11437,1.11437,.93109,.91202,.60411,.84164,.55572,1.01173,.97361,.81818,.81818,.96635,.78032,.72727,.92366,.98601,1.0\ -3405,.77968,1.09799,1.2,.96706,.85944,.85638,.96491,.75842,.93365,.9831,.96924,.95782,.86969,.94152,1.07796,1.03584,.78437,.96924,.98715,.83968,.83491,.85771,.8287,.94492,.88433,.9287,1.0098,.95782,.8287,1.0625,.98248,1.03424,1.2,1.01071,1.0625,.95246,1.03809,1.04912,.98248,1.00221,1.03424,1.05443,1.2,1.04785,.99609,1.00169,1.05176,.99346,1.05356,.9087,1.03004,.95542,.93117,1.23362,1.01071,1.07831,1.02512,1.05205,1.03502,1.2,1.01071,1.05356,1.01071,1.03502,.75842,1,1,1,1,1,1,1,1,1,1,1,1,1.03719,\ -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9403,1,1,1,1,1,1,1,1,1,1,1,1,1.04021,1,1,1,1,1,1,.98965,1.00068,.98965,1.00068,.98965,1.00068,.8287,.96777,1,1.20088,.89903,1,1,.75155,1.03077,1.03077,1.03077,1.03077,1.13196,1.13196,1.13196,.67428,.67428,1.16039,.73291,1.20996,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87796,.96927,1.01518,.96927,1,1,1,.77295,1,1,1.10539,1.10539,1.11358,1.06967,.86279\ -,.94434,.86279,.94434,.86182,1,1,1.083,1,.91578,.86507,1.1714,1.18416,1.14589,.69825,.97622,1.9697,1.24822,1.24822,1.17238,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18083,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10938,1.10938,1,1,1,1.05425,1.09971,1.09971,1.09971,1,1,1,1,1,1,1,1,1,1,1],mn={lineHeight:1.33008,lineGap:0},bn=g\ -etLookupTableFactory((function(e){e["MyriadPro-Regular"]=e["PdfJS-Fallback-Regular"]={name:"LiberationSans-Regular",factors:on,baseWidths:Zi,baseMapping:Qi,metrics:cn};e["MyriadPro-Bold"]=e["PdfJS-Fallback-Bold"]={name:"LiberationSans-Bold",factors:en,baseWidths:$i,baseMapping:Gi,metrics:tn};e["MyriadPro-It"]=e["MyriadPro-Italic"]=e["PdfJS-Fallback-Italic"]={name:"LiberationSans-Italic",factors:nn,baseWidths:Ji,baseMapping:Yi,metrics:sn};e["MyriadPro-BoldIt"]=e["MyriadPro-BoldItalic"]=e["PdfJS-F\ -allback-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:an,baseWidths:Vi,baseMapping:Ki,metrics:rn};e.ArialMT=e.Arial=e["Arial-Regular"]={name:"LiberationSans-Regular",baseWidths:Zi,baseMapping:Qi};e["Arial-BoldMT"]=e["Arial-Bold"]={name:"LiberationSans-Bold",baseWidths:$i,baseMapping:Gi};e["Arial-ItalicMT"]=e["Arial-Italic"]={name:"LiberationSans-Italic",baseWidths:Ji,baseMapping:Yi};e["Arial-BoldItalicMT"]=e["Arial-BoldItalic"]={name:"LiberationSans-BoldItalic",baseWidths:Vi,baseMapping\ -:Ki};e["Calibri-Regular"]={name:"LiberationSans-Regular",factors:Ni,baseWidths:Zi,baseMapping:Qi,metrics:Ei};e["Calibri-Bold"]={name:"LiberationSans-Bold",factors:Ti,baseWidths:$i,baseMapping:Gi,metrics:Oi};e["Calibri-Italic"]={name:"LiberationSans-Italic",factors:Bi,baseWidths:Ji,baseMapping:Yi,metrics:Ri};e["Calibri-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:Mi,baseWidths:Vi,baseMapping:Ki,metrics:Di};e["Segoeui-Regular"]={name:"LiberationSans-Regular",factors:pn,baseWidths:Zi,base\ -Mapping:Qi,metrics:mn};e["Segoeui-Bold"]={name:"LiberationSans-Bold",factors:ln,baseWidths:$i,baseMapping:Gi,metrics:hn};e["Segoeui-Italic"]={name:"LiberationSans-Italic",factors:fn,baseWidths:Ji,baseMapping:Yi,metrics:gn};e["Segoeui-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:un,baseWidths:Vi,baseMapping:Ki,metrics:dn};e["Helvetica-Regular"]=e.Helvetica={name:"LiberationSans-Regular",factors:Wi,baseWidths:Zi,baseMapping:Qi,metrics:zi};e["Helvetica-Bold"]={name:"LiberationSans-Bold",f\ -actors:Pi,baseWidths:$i,baseMapping:Gi,metrics:ji};e["Helvetica-Italic"]={name:"LiberationSans-Italic",factors:qi,baseWidths:Ji,baseMapping:Yi,metrics:Hi};e["Helvetica-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:_i,baseWidths:Vi,baseMapping:Ki,metrics:Xi}}));function getXfaFontName(e){const t=normalizeFontName(e);return bn()[t]}function getXfaFontDict(e){const t=function getXfaFontWidths(e){const t=getXfaFontName(e);if(!t)return null;const{baseWidths:a,baseMapping:r,factors:i}=t,n=i?a\ -.map(((e,t)=>e*i[t])):a;let s,o=-2;const c=[];for(const[e,t]of r.map(((e,t)=>[e,t])).sort((([e],[t])=>e-t)))if(-1!==e)if(e===o+1){s.push(n[t]);o+=1}else{o=e;s=[n[t]];c.push(e,s)}return c}(e),a=new Dict(null);a.set("BaseFont",Name.get(e));a.set("Type",Name.get("Font"));a.set("Subtype",Name.get("CIDFontType2"));a.set("Encoding",Name.get("Identity-H"));a.set("CIDToGIDMap",Name.get("Identity"));a.set("W",t);a.set("FirstChar",t[0]);a.set("LastChar",t.at(-2)+t.at(-1).length-1);const r=new Dict(null);a\ -.set("FontDescriptor",r);const i=new Dict(null);i.set("Ordering","Identity");i.set("Registry","Adobe");i.set("Supplement",0);a.set("CIDSystemInfo",i);return a}class PostScriptParser{constructor(e){this.lexer=e;this.operators=[];this.token=null;this.prev=null}nextToken(){this.prev=this.token;this.token=this.lexer.getToken()}accept(e){if(this.token.type===e){this.nextToken();return!0}return!1}expect(e){if(this.accept(e))return!0;throw new FormatError(`Unexpected symbol: found ${this.token.type} ex\ -pected ${e}.`)}parse(){this.nextToken();this.expect(yn.LBRACE);this.parseBlock();this.expect(yn.RBRACE);return this.operators}parseBlock(){for(;;)if(this.accept(yn.NUMBER))this.operators.push(this.prev.value);else if(this.accept(yn.OPERATOR))this.operators.push(this.prev.value);else{if(!this.accept(yn.LBRACE))return;this.parseCondition()}}parseCondition(){const e=this.operators.length;this.operators.push(null,null);this.parseBlock();this.expect(yn.RBRACE);if(this.accept(yn.IF)){this.operators[e]\ -=this.operators.length;this.operators[e+1]="jz"}else{if(!this.accept(yn.LBRACE))throw new FormatError("PS Function: error parsing conditional.");{const t=this.operators.length;this.operators.push(null,null);const a=this.operators.length;this.parseBlock();this.expect(yn.RBRACE);this.expect(yn.IFELSE);this.operators[t]=this.operators.length;this.operators[t+1]="j";this.operators[e]=a;this.operators[e+1]="jz"}}}}const yn={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5};class PostScriptToken{st\ -atic get opCache(){return shadow(this,"opCache",Object.create(null))}constructor(e,t){this.type=e;this.value=t}static getOperator(e){return PostScriptToken.opCache[e]||=new PostScriptToken(yn.OPERATOR,e)}static get LBRACE(){return shadow(this,"LBRACE",new PostScriptToken(yn.LBRACE,"{"))}static get RBRACE(){return shadow(this,"RBRACE",new PostScriptToken(yn.RBRACE,"}"))}static get IF(){return shadow(this,"IF",new PostScriptToken(yn.IF,"IF"))}static get IFELSE(){return shadow(this,"IFELSE",new Pos\ -tScriptToken(yn.IFELSE,"IFELSE"))}}class PostScriptLexer{constructor(e){this.stream=e;this.nextChar();this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(t<0)return wa;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new PostScriptToken(yn.NUMBER,this.getNumb\ -er());case 123:this.nextChar();return PostScriptToken.LBRACE;case 125:this.nextChar();return PostScriptToken.RBRACE}const a=this.strBuf;a.length=0;a[0]=String.fromCharCode(t);for(;(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)a.push(String.fromCharCode(t));const r=a.join("");switch(r.toLowerCase()){case"if":return PostScriptToken.IF;case"ifelse":return PostScriptToken.IFELSE;default:return PostScriptToken.getOperator(r)}}getNumber(){let e=this.currentChar;const t=this.strBuf;t.length=0;\ -t[0]=String.fromCharCode(e);for(;(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));const a=parseFloat(t.join(""));if(isNaN(a))throw new FormatError(`Invalid floating point number: ${a}`);return a}}class BaseLocalCache{constructor(e){this._onlyRefs=!0===e?.onlyRefs;if(!this._onlyRefs){this._nameRefMap=new Map;this._imageMap=new Map}this._imageCache=new RefSetCache}getByName(e){this._onlyRefs&&unreachable("Should not call `getByName` method.");const t=this._nam\ -eRefMap.get(e);return t?this.getByRef(t):this._imageMap.get(e)||null}getByRef(e){return this._imageCache.get(e)||null}set(e,t,a){unreachable("Abstract method `set` called.")}}class LocalImageCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error(\'LocalImageCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalColorSpaceCache ext\ -ends BaseLocalCache{set(e=null,t=null,a){if("string"!=typeof e&&!t)throw new Error(\'LocalColorSpaceCache.set - expected "name" and/or "ref" argument.\');if(t){if(this._imageCache.has(t))return;null!==e&&this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalFunctionCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error(\'LocalFunctionCache.set - expected "ref" argument.\');this._imageCache.h\ -as(t)||this._imageCache.put(t,a)}}class LocalGStateCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error(\'LocalGStateCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalTilingPatternCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error(\'LocalTilingPatternCache.set - expected "r\ -ef" argument.\');this._imageCache.has(t)||this._imageCache.put(t,a)}}class RegionalImageCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error(\'RegionalImageCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,a)}}class GlobalColorSpaceCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error(\'GlobalColorSpaceCache.set - expected "ref" argument.\');this._imageCache.has(t)|\ -|this._imageCache.put(t,a)}clear(){this._imageCache.clear()}}class GlobalImageCache{static NUM_PAGES_THRESHOLD=2;static MIN_IMAGES_TO_CACHE=10;static MAX_BYTE_SIZE=5e7;#H=new RefSet;constructor(){this._refCache=new RefSetCache;this._imageCache=new RefSetCache}get#W(){let e=0;for(const t of this._imageCache)e+=t.byteSize;return e}get#z(){return!(this._imageCache.size<GlobalImageCache.MIN_IMAGES_TO_CACHE)&&!(this.#W<GlobalImageCache.MAX_BYTE_SIZE)}shouldCache(e,t){let a=this._refCache.get(e);if(!a\ -){a=new Set;this._refCache.put(e,a)}a.add(t);return!(a.size<GlobalImageCache.NUM_PAGES_THRESHOLD)&&!(!this._imageCache.has(e)&&this.#z)}addDecodeFailed(e){this.#H.put(e)}hasDecodeFailed(e){return this.#H.has(e)}addByteSize(e,t){const a=this._imageCache.get(e);a&&(a.byteSize||(a.byteSize=t))}getData(e,t){const a=this._refCache.get(e);if(!a)return null;if(a.size<GlobalImageCache.NUM_PAGES_THRESHOLD)return null;const r=this._imageCache.get(e);if(!r)return null;a.add(t);return r}setData(e,t){if(!thi\ -s._refCache.has(e))throw new Error(\'GlobalImageCache.setData - expected "shouldCache" to have been called.\');this._imageCache.has(e)||(this.#z?warn("GlobalImageCache.setData - cache limit reached."):this._imageCache.put(e,t))}clear(e=!1){if(!e){this.#H.clear();this._refCache.clear()}this._imageCache.clear()}}class PDFFunctionFactory{constructor({xref:e,isEvalSupported:t=!0}){this.xref=e;this.isEvalSupported=!1!==t}create(e,t=!1){let a,r;e instanceof Ref?a=e:e instanceof Dict?a=e.objId:e instance\ -of BaseStream&&(a=e.dict?.objId);if(a){const e=this._localFunctionCache.getByRef(a);if(e)return e}const i=this.xref.fetchIfRef(e);if(Array.isArray(i)){if(!t)throw new Error(\'PDFFunctionFactory.create - expected "parseArray" argument.\');r=PDFFunction.parseArray(this,i)}else r=PDFFunction.parse(this,i);a&&this._localFunctionCache.set(null,a,r);return r}get _localFunctionCache(){return shadow(this,"_localFunctionCache",new LocalFunctionCache)}}function toNumberArray(e){return Array.isArray(e)?isNum\ -berArray(e,null)?e:e.map((e=>+e)):null}class PDFFunction{static getSampleArray(e,t,a,r){let i,n,s=1;for(i=0,n=e.length;i<n;i++)s*=e[i];s*=t;const o=new Array(s);let c=0,l=0;const h=1/(2**a-1),u=r.getBytes((s*a+7)/8);let d=0;for(i=0;i<s;i++){for(;c<a;){l<<=8;l|=u[d++];c+=8}c-=a;o[i]=(l>>c)*h;l&=(1<<c)-1}return o}static parse(e,t){const a=t.dict||t;switch(a.get("FunctionType")){case 0:return this.constructSampled(e,t,a);case 1:break;case 2:return this.constructInterpolated(e,a);case 3:return this.\ -constructStiched(e,a);case 4:return this.constructPostScript(e,t,a)}throw new FormatError("Unknown type of function")}static parseArray(e,t){const{xref:a}=e,r=[];for(const i of t)r.push(this.parse(e,a.fetchIfRef(i)));return function(e,t,a,i){for(let n=0,s=r.length;n<s;n++)r[n](e,t,a,i+n)}}static constructSampled(e,t,a){function toMultiArray(e){const t=e.length,a=[];let r=0;for(let i=0;i<t;i+=2)a[r++]=[e[i],e[i+1]];return a}function interpolate(e,t,a,r,i){return r+(i-r)/(a-t)*(e-t)}let r=toNumber\ -Array(a.getArray("Domain")),i=toNumberArray(a.getArray("Range"));if(!r||!i)throw new FormatError("No domain or range");const n=r.length/2,s=i.length/2;r=toMultiArray(r);i=toMultiArray(i);const o=toNumberArray(a.getArray("Size")),c=a.get("BitsPerSample"),l=a.get("Order")||1;1!==l&&info("No support for cubic spline interpolation: "+l);let h=toNumberArray(a.getArray("Encode"));if(h)h=toMultiArray(h);else{h=[];for(let e=0;e<n;++e)h.push([0,o[e]-1])}let u=toNumberArray(a.getArray("Decode"));u=u?toMul\ -tiArray(u):i;const d=this.getSampleArray(o,s,c,t);return function constructSampledFn(e,t,a,c){const l=1<<n,f=new Float64Array(l).fill(1),g=new Uint32Array(l);let p,m,b=s,y=1;for(p=0;p<n;++p){const a=r[p][0],i=r[p][1];let n=interpolate(MathClamp(e[t+p],a,i),a,i,h[p][0],h[p][1]);const s=o[p];n=MathClamp(n,0,s-1);const c=n<s-1?Math.floor(n):n-1,u=c+1-n,d=n-c,w=c*b,x=w+b;for(m=0;m<l;m++)if(m&y){f[m]*=d;g[m]+=x}else{f[m]*=u;g[m]+=w}b*=s;y<<=1}for(m=0;m<s;++m){let e=0;for(p=0;p<l;p++)e+=d[g[p]+m]*f[p]\ -;e=interpolate(e,0,1,u[m][0],u[m][1]);a[c+m]=MathClamp(e,i[m][0],i[m][1])}}}static constructInterpolated(e,t){const a=toNumberArray(t.getArray("C0"))||[0],r=toNumberArray(t.getArray("C1"))||[1],i=t.get("N"),n=[];for(let e=0,t=a.length;e<t;++e)n.push(r[e]-a[e]);const s=n.length;return function constructInterpolatedFn(e,t,r,o){const c=1===i?e[t]:e[t]**i;for(let e=0;e<s;++e)r[o+e]=a[e]+c*n[e]}}static constructStiched(e,t){const a=toNumberArray(t.getArray("Domain"));if(!a)throw new FormatError("No d\ -omain");if(1!==a.length/2)throw new FormatError("Bad domain for stiched function");const{xref:r}=e,i=[];for(const a of t.get("Functions"))i.push(this.parse(e,r.fetchIfRef(a)));const n=toNumberArray(t.getArray("Bounds")),s=toNumberArray(t.getArray("Encode")),o=new Float32Array(1);return function constructStichedFn(e,t,r,c){const l=MathClamp(e[t],a[0],a[1]),h=n.length;let u;for(u=0;u<h&&!(l<n[u]);++u);let d=a[0];u>0&&(d=n[u-1]);let f=a[1];u<n.length&&(f=n[u]);const g=s[2*u],p=s[2*u+1];o[0]=d===f?g\ -:g+(l-d)*(p-g)/(f-d);i[u](o,0,r,c)}}static constructPostScript(e,t,a){const r=toNumberArray(a.getArray("Domain")),i=toNumberArray(a.getArray("Range"));if(!r)throw new FormatError("No domain.");if(!i)throw new FormatError("No range.");const n=new PostScriptLexer(t),s=new PostScriptParser(n).parse();if(e.isEvalSupported&&FeatureTest.isEvalSupported){const e=(new PostScriptCompiler).compile(s,r,i);if(e)return new Function("src","srcOffset","dest","destOffset",e)}info("Unable to compile PS function"\ -);const o=i.length>>1,c=r.length>>1,l=new PostScriptEvaluator(s),h=Object.create(null);let u=8192;const d=new Float32Array(c);return function constructPostScriptFn(e,t,a,r){let n,s,f="";const g=d;for(n=0;n<c;n++){s=e[t+n];g[n]=s;f+=s+"_"}const p=h[f];if(void 0!==p){a.set(p,r);return}const m=new Float32Array(o),b=l.execute(g),y=b.length-o;for(n=0;n<o;n++){s=b[y+n];let e=i[2*n];if(s<e)s=e;else{e=i[2*n+1];s>e&&(s=e)}m[n]=s}if(u>0){u--;h[f]=m}a.set(m,r)}}}function isPDFFunction(e){let t;if(e instanc\ -eof Dict)t=e;else{if(!(e instanceof BaseStream))return!1;t=e.dict}return t.has("FunctionType")}class PostScriptStack{static MAX_STACK_SIZE=100;constructor(e){this.stack=e?Array.from(e):[]}push(e){if(this.stack.length>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(e)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(e){if(this.stack.length+e>=PostScriptStack.MAX_STACK_SIZE)thro\ -w new Error("PostScript function stack overflow.");const t=this.stack;for(let a=t.length-e,r=e-1;r>=0;r--,a++)t.push(t[a])}index(e){this.push(this.stack[this.stack.length-e-1])}roll(e,t){const a=this.stack,r=a.length-e,i=a.length-1,n=r+(t-Math.floor(t/e)*e);for(let e=r,t=i;e<t;e++,t--){const r=a[e];a[e]=a[t];a[t]=r}for(let e=r,t=n-1;e<t;e++,t--){const r=a[e];a[e]=a[t];a[t]=r}for(let e=n,t=i;e<t;e++,t--){const r=a[e];a[e]=a[t];a[t]=r}}}class PostScriptEvaluator{constructor(e){this.operators=e}exe\ -cute(e){const t=new PostScriptStack(e);let a=0;const r=this.operators,i=r.length;let n,s,o;for(;a<i;){n=r[a++];if("number"!=typeof n)switch(n){case"jz":o=t.pop();s=t.pop();s||(a=o);break;case"j":s=t.pop();a=s;break;case"abs":s=t.pop();t.push(Math.abs(s));break;case"add":o=t.pop();s=t.pop();t.push(s+o);break;case"and":o=t.pop();s=t.pop();"boolean"==typeof s&&"boolean"==typeof o?t.push(s&&o):t.push(s&o);break;case"atan":o=t.pop();s=t.pop();s=Math.atan2(s,o)/Math.PI*180;s<0&&(s+=360);t.push(s);brea\ -k;case"bitshift":o=t.pop();s=t.pop();s>0?t.push(s<<o):t.push(s>>o);break;case"ceiling":s=t.pop();t.push(Math.ceil(s));break;case"copy":s=t.pop();t.copy(s);break;case"cos":s=t.pop();t.push(Math.cos(s%360/180*Math.PI));break;case"cvi":s=0|t.pop();t.push(s);break;case"cvr":break;case"div":o=t.pop();s=t.pop();t.push(s/o);break;case"dup":t.copy(1);break;case"eq":o=t.pop();s=t.pop();t.push(s===o);break;case"exch":t.roll(2,1);break;case"exp":o=t.pop();s=t.pop();t.push(s**o);break;case"false":t.push(!1)\ -;break;case"floor":s=t.pop();t.push(Math.floor(s));break;case"ge":o=t.pop();s=t.pop();t.push(s>=o);break;case"gt":o=t.pop();s=t.pop();t.push(s>o);break;case"idiv":o=t.pop();s=t.pop();t.push(s/o|0);break;case"index":s=t.pop();t.index(s);break;case"le":o=t.pop();s=t.pop();t.push(s<=o);break;case"ln":s=t.pop();t.push(Math.log(s));break;case"log":s=t.pop();t.push(Math.log10(s));break;case"lt":o=t.pop();s=t.pop();t.push(s<o);break;case"mod":o=t.pop();s=t.pop();t.push(s%o);break;case"mul":o=t.pop();s=\ -t.pop();t.push(s*o);break;case"ne":o=t.pop();s=t.pop();t.push(s!==o);break;case"neg":s=t.pop();t.push(-s);break;case"not":s=t.pop();"boolean"==typeof s?t.push(!s):t.push(~s);break;case"or":o=t.pop();s=t.pop();"boolean"==typeof s&&"boolean"==typeof o?t.push(s||o):t.push(s|o);break;case"pop":t.pop();break;case"roll":o=t.pop();s=t.pop();t.roll(s,o);break;case"round":s=t.pop();t.push(Math.round(s));break;case"sin":s=t.pop();t.push(Math.sin(s%360/180*Math.PI));break;case"sqrt":s=t.pop();t.push(Math.s\ -qrt(s));break;case"sub":o=t.pop();s=t.pop();t.push(s-o);break;case"true":t.push(!0);break;case"truncate":s=t.pop();s=s<0?Math.ceil(s):Math.floor(s);t.push(s);break;case"xor":o=t.pop();s=t.pop();"boolean"==typeof s&&"boolean"==typeof o?t.push(s!==o):t.push(s^o);break;default:throw new FormatError(`Unknown operator ${n}`)}else t.push(n)}return t.stack}}class AstNode{constructor(e){this.type=e}visit(e){unreachable("abstract method")}}class AstArgument extends AstNode{constructor(e,t,a){super("args"\ -);this.index=e;this.min=t;this.max=a}visit(e){e.visitArgument(this)}}class AstLiteral extends AstNode{constructor(e){super("literal");this.number=e;this.min=e;this.max=e}visit(e){e.visitLiteral(this)}}class AstBinaryOperation extends AstNode{constructor(e,t,a,r,i){super("binary");this.op=e;this.arg1=t;this.arg2=a;this.min=r;this.max=i}visit(e){e.visitBinaryOperation(this)}}class AstMin extends AstNode{constructor(e,t){super("max");this.arg=e;this.min=e.min;this.max=t}visit(e){e.visitMin(this)}}c\ -lass AstVariable extends AstNode{constructor(e,t,a){super("var");this.index=e;this.min=t;this.max=a}visit(e){e.visitVariable(this)}}class AstVariableDefinition extends AstNode{constructor(e,t){super("definition");this.variable=e;this.arg=t}visit(e){e.visitVariableDefinition(this)}}class ExpressionBuilderVisitor{constructor(){this.parts=[]}visitArgument(e){this.parts.push("Math.max(",e.min,", Math.min(",e.max,", src[srcOffset + ",e.index,"]))")}visitVariable(e){this.parts.push("v",e.index)}visitL\ -iteral(e){this.parts.push(e.number)}visitBinaryOperation(e){this.parts.push("(");e.arg1.visit(this);this.parts.push(" ",e.op," ");e.arg2.visit(this);this.parts.push(")")}visitVariableDefinition(e){this.parts.push("var ");e.variable.visit(this);this.parts.push(" = ");e.arg.visit(this);this.parts.push(";")}visitMin(e){this.parts.push("Math.min(");e.arg.visit(this);this.parts.push(", ",e.max,")")}toString(){return this.parts.join("")}}function buildAddOperation(e,t){return"literal"===t.type&&0===t.\ -number?e:"literal"===e.type&&0===e.number?t:"literal"===t.type&&"literal"===e.type?new AstLiteral(e.number+t.number):new AstBinaryOperation("+",e,t,e.min+t.min,e.max+t.max)}function buildMulOperation(e,t){if("literal"===t.type){if(0===t.number)return new AstLiteral(0);if(1===t.number)return e;if("literal"===e.type)return new AstLiteral(e.number*t.number)}if("literal"===e.type){if(0===e.number)return new AstLiteral(0);if(1===e.number)return t}const a=Math.min(e.min*t.min,e.min*t.max,e.max*t.min,e\ -.max*t.max),r=Math.max(e.min*t.min,e.min*t.max,e.max*t.min,e.max*t.max);return new AstBinaryOperation("*",e,t,a,r)}function buildSubOperation(e,t){if("literal"===t.type){if(0===t.number)return e;if("literal"===e.type)return new AstLiteral(e.number-t.number)}return"binary"===t.type&&"-"===t.op&&"literal"===e.type&&1===e.number&&"literal"===t.arg1.type&&1===t.arg1.number?t.arg2:new AstBinaryOperation("-",e,t,e.min-t.max,e.max-t.min)}function buildMinOperation(e,t){return e.min>=t?new AstLiteral(t)\ -:e.max<=t?e:new AstMin(e,t)}class PostScriptCompiler{compile(e,t,a){const r=[],i=[],n=t.length>>1,s=a.length>>1;let o,c,l,h,u,d,f,g,p=0;for(let e=0;e<n;e++)r.push(new AstArgument(e,t[2*e],t[2*e+1]));for(let t=0,a=e.length;t<a;t++){g=e[t];if("number"!=typeof g)switch(g){case"add":if(r.length<2)return null;h=r.pop();l=r.pop();r.push(buildAddOperation(l,h));break;case"cvr":if(r.length<1)return null;break;case"mul":if(r.length<2)return null;h=r.pop();l=r.pop();r.push(buildMulOperation(l,h));break;ca\ -se"sub":if(r.length<2)return null;h=r.pop();l=r.pop();r.push(buildSubOperation(l,h));break;case"exch":if(r.length<2)return null;u=r.pop();d=r.pop();r.push(u,d);break;case"pop":if(r.length<1)return null;r.pop();break;case"index":if(r.length<1)return null;l=r.pop();if("literal"!==l.type)return null;o=l.number;if(o<0||!Number.isInteger(o)||r.length<o)return null;u=r[r.length-o-1];if("literal"===u.type||"var"===u.type){r.push(u);break}f=new AstVariable(p++,u.min,u.max);r[r.length-o-1]=f;r.push(f);i.\ -push(new AstVariableDefinition(f,u));break;case"dup":if(r.length<1)return null;if("number"==typeof e[t+1]&&"gt"===e[t+2]&&e[t+3]===t+7&&"jz"===e[t+4]&&"pop"===e[t+5]&&e[t+6]===e[t+1]){l=r.pop();r.push(buildMinOperation(l,e[t+1]));t+=6;break}u=r.at(-1);if("literal"===u.type||"var"===u.type){r.push(u);break}f=new AstVariable(p++,u.min,u.max);r[r.length-1]=f;r.push(f);i.push(new AstVariableDefinition(f,u));break;case"roll":if(r.length<2)return null;h=r.pop();l=r.pop();if("literal"!==h.type||"litera\ -l"!==l.type)return null;c=h.number;o=l.number;if(o<=0||!Number.isInteger(o)||!Number.isInteger(c)||r.length<o)return null;c=(c%o+o)%o;if(0===c)break;r.push(...r.splice(r.length-o,o-c));break;default:return null}else r.push(new AstLiteral(g))}if(r.length!==s)return null;const m=[];for(const e of i){const t=new ExpressionBuilderVisitor;e.visit(t);m.push(t.toString())}for(let e=0,t=r.length;e<t;e++){const t=r[e],i=new ExpressionBuilderVisitor;t.visit(i);const n=a[2*e],s=a[2*e+1],o=[i.toString()];if\ -(n>t.min){o.unshift("Math.max(",n,", ");o.push(")")}if(s<t.max){o.unshift("Math.min(",s,", ");o.push(")")}o.unshift("dest[destOffset + ",e,"] = ");o.push(";");m.push(o.join(""))}return m.join("\\n")}}const wn=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON"\ -,"ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L\ -","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],xn=["AN","AN","AN","AN","AN","AN","ON","ON","AL","ET","ET","AL","CS","AL","ON","ON","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM\ -","NSM","NSM","AL","AL","","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","\ -AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","\ -NSM","NSM","AN","ON","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","NSM","NSM","ON","NSM","NSM","NSM","NSM","AL","AL","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","AL","AL","AL","AL","AL","AL"];function isOdd(e){return!!(1&e)}function isEven(e){return!(1&e)}function findUnequal(e,t,a){let r,i;for(r=t,i=e.length;r<i;++r)if(e[r]!==a)return r;return r}function reverseValues(e,t,a){for(let r=t,i=a-1;r<i;++r,--i){const t=e[r];e[r]=e[i];e[i]=t}}function createBidiText(e,t,a=!1){let r="ltr";a?r="t\ -tb":t||(r="rtl");return{str:e,dir:r}}const Sn=[],An=[];function bidi(e,t=-1,a=!1){let r=!0;const i=e.length;if(0===i||a)return createBidiText(e,r,a);Sn.length=i;An.length=i;let n,s,o=0;for(n=0;n<i;++n){Sn[n]=e.charAt(n);const t=e.charCodeAt(n);let a="L";if(t<=255)a=wn[t];else if(1424<=t&&t<=1524)a="R";else if(1536<=t&&t<=1791){a=xn[255&t];a||warn("Bidi: invalid Unicode character "+t.toString(16))}else(1792<=t&&t<=2220||64336<=t&&t<=65023||65136<=t&&t<=65279)&&(a="AL");"R"!==a&&"AL"!==a&&"AN"!==a\ -||o++;An[n]=a}if(0===o){r=!0;return createBidiText(e,r)}if(-1===t)if(o/i<.3&&i>4){r=!0;t=0}else{r=!1;t=1}const c=[];for(n=0;n<i;++n)c[n]=t;const l=isOdd(t)?"R":"L",h=l,u=h;let d,f=h;for(n=0;n<i;++n)"NSM"===An[n]?An[n]=f:f=An[n];f=h;for(n=0;n<i;++n){d=An[n];"EN"===d?An[n]="AL"===f?"AN":"EN":"R"!==d&&"L"!==d&&"AL"!==d||(f=d)}for(n=0;n<i;++n){d=An[n];"AL"===d&&(An[n]="R")}for(n=1;n<i-1;++n){"ES"===An[n]&&"EN"===An[n-1]&&"EN"===An[n+1]&&(An[n]="EN");"CS"!==An[n]||"EN"!==An[n-1]&&"AN"!==An[n-1]||An[n\ -+1]!==An[n-1]||(An[n]=An[n-1])}for(n=0;n<i;++n)if("EN"===An[n]){for(let e=n-1;e>=0&&"ET"===An[e];--e)An[e]="EN";for(let e=n+1;e<i&&"ET"===An[e];++e)An[e]="EN"}for(n=0;n<i;++n){d=An[n];"WS"!==d&&"ES"!==d&&"ET"!==d&&"CS"!==d||(An[n]="ON")}f=h;for(n=0;n<i;++n){d=An[n];"EN"===d?An[n]="L"===f?"L":"EN":"R"!==d&&"L"!==d||(f=d)}for(n=0;n<i;++n)if("ON"===An[n]){const e=findUnequal(An,n+1,"ON");let t=h;n>0&&(t=An[n-1]);let a=u;e+1<i&&(a=An[e+1]);"L"!==t&&(t="R");"L"!==a&&(a="R");t===a&&An.fill(t,n,e);n=e-\ -1}for(n=0;n<i;++n)"ON"===An[n]&&(An[n]=l);for(n=0;n<i;++n){d=An[n];isEven(c[n])?"R"===d?c[n]+=1:"AN"!==d&&"EN"!==d||(c[n]+=2):"L"!==d&&"AN"!==d&&"EN"!==d||(c[n]+=1)}let g,p=-1,m=99;for(n=0,s=c.length;n<s;++n){g=c[n];p<g&&(p=g);m>g&&isOdd(g)&&(m=g)}for(g=p;g>=m;--g){let e=-1;for(n=0,s=c.length;n<s;++n)if(c[n]<g){if(e>=0){reverseValues(Sn,e,n);e=-1}}else e<0&&(e=n);e>=0&&reverseValues(Sn,e,c.length)}for(n=0,s=Sn.length;n<s;++n){const e=Sn[n];"<"!==e&&">"!==e||(Sn[n]="")}return createBidiText(Sn.jo\ -in(""),r)}const kn={style:"normal",weight:"normal"},Cn={style:"normal",weight:"bold"},vn={style:"italic",weight:"normal"},Fn={style:"italic",weight:"bold"},In=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","Linux Libertine O","Libertinus Serif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:kn,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:Cn,ultimate:\ -"serif"}],["Times-Italic",{alias:"Times-Roman",style:vn,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:Fn,ultimate:"serif"}],["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:kn,ultimate:"sans-serif"}],["Helvetica\ --Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:Cn,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:vn,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:Fn,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono","Linux Libertine Mono O","Libertinus Mono"],sty\ -le:kn,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:Cn,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:vn,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:Fn,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack\ --BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Narrow","TeX Gyre Heros Cn"],style:kn,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:Cn,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:vn,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:Fn,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:k\ -n,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:Cn,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:vn,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:Fn,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:kn}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}]]),Tn=new Map([["Arial-Black","ArialBlack"]]);function getFamilyName(e){const t=new Set(["thin","extralight\ -","ultralight","demilight","semilight","light","book","regular","normal","medium","demibold","semibold","bold","extrabold","ultrabold","black","heavy","extrablack","ultrablack","roman","italic","oblique","ultracondensed","extracondensed","condensed","semicondensed","normal","semiexpanded","expanded","extraexpanded","ultraexpanded","bolditalic"]);return e.split(/[- ,+]+/g).filter((e=>!t.has(e.toLowerCase()))).join(" ")}function generateFont({alias:e,local:t,path:a,fallback:r,style:i,ultimate:n},s\ -,o,c=!0,l=!0,h=""){const u={style:null,ultimate:null};if(t){const e=h?` ${h}`:"";for(const a of t)s.push(`local(${a}${e})`)}if(e){const t=In.get(e),n=h||function getStyleToAppend(e){switch(e){case Cn:return"Bold";case vn:return"Italic";case Fn:return"Bold Italic";default:if("bold"===e?.weight)return"Bold";if("italic"===e?.style)return"Italic"}return""}(i);Object.assign(u,generateFont(t,s,o,c&&!r,l&&!a,n))}i&&(u.style=i);n&&(u.ultimate=n);if(c&&r){const e=In.get(r),{ultimate:t}=generateFont(e,s,o\ -,c,l&&!a,h);u.ultimate||=t}l&&a&&o&&s.push(`url(${o}${a})`);return u}function getFontSubstitution(e,t,a,r,i,n){if(r.startsWith("InvalidPDFjsFont_"))return null;"TrueType"!==n&&"Type1"!==n||!/^[A-Z]{6}\\+/.test(r)||(r=r.slice(7));const s=r=normalizeFontName(r);let o=e.get(s);if(o)return o;let c=In.get(r);if(!c)for(const[e,t]of Tn)if(r.startsWith(e)){r=`${t}${r.substring(e.length)}`;c=In.get(r);break}let l=!1;if(!c){c=In.get(i);l=!0}const h=`${t.getDocId()}_s${t.createFontId()}`;if(!c){if(!validate\ -FontName(r)){warn(`Cannot substitute the font because of its name: ${r}`);e.set(s,null);return null}const t=/bold/gi.test(r),a=/oblique|italic/gi.test(r),i=t&&a&&Fn||t&&Cn||a&&vn||kn;o={css:`"${getFamilyName(r)}",${h}`,guessFallback:!0,loadedName:h,baseFontName:r,src:`local(${r})`,style:i};e.set(s,o);return o}const u=[];l&&validateFontName(r)&&u.push(`local(${r})`);const{style:d,ultimate:f}=generateFont(c,u,a),g=null===f,p=g?"":`,${f}`;o={css:`"${getFamilyName(r)}",${h}${p}`,guessFallback:g,load\ -edName:h,baseFontName:r,src:u.join(","),style:d};e.set(s,o);return o}const On=3285377520,Mn=4294901760,Dn=65535;class MurmurHash3_64{constructor(e){this.h1=e?4294967295&e:On;this.h2=e?4294967295&e:On}update(e){let t,a;if("string"==typeof e){t=new Uint8Array(2*e.length);a=0;for(let r=0,i=e.length;r<i;r++){const i=e.charCodeAt(r);if(i<=255)t[a++]=i;else{t[a++]=i>>>8;t[a++]=255&i}}}else{if(!ArrayBuffer.isView(e))throw new Error("Invalid data format, must be a string or TypedArray.");t=e.slice();a=t\ -.byteLength}const r=a>>2,i=a-4*r,n=new Uint32Array(t.buffer,0,r);let s=0,o=0,c=this.h1,l=this.h2;const h=3432918353,u=461845907,d=11601,f=13715;for(let e=0;e<r;e++)if(1&e){s=n[e];s=s*h&Mn|s*d&Dn;s=s<<15|s>>>17;s=s*u&Mn|s*f&Dn;c^=s;c=c<<13|c>>>19;c=5*c+3864292196}else{o=n[e];o=o*h&Mn|o*d&Dn;o=o<<15|o>>>17;o=o*u&Mn|o*f&Dn;l^=o;l=l<<13|l>>>19;l=5*l+3864292196}s=0;switch(i){case 3:s^=t[4*r+2]<<16;case 2:s^=t[4*r+1]<<8;case 1:s^=t[4*r];s=s*h&Mn|s*d&Dn;s=s<<15|s>>>17;s=s*u&Mn|s*f&Dn;1&r?c^=s:l^=s}this\ -.h1=c;this.h2=l}hexdigest(){let e=this.h1,t=this.h2;e^=t>>>1;e=3981806797*e&Mn|36045*e&Dn;t=4283543511*t&Mn|(2950163797*(t<<16|e>>>16)&Mn)>>>16;e^=t>>>1;e=444984403*e&Mn|60499*e&Dn;t=3301882366*t&Mn|(3120437893*(t<<16|e>>>16)&Mn)>>>16;e^=t>>>1;return(e>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}function resizeImageMask(e,t,a,r,i,n){const s=i*n;let o;o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);const c=a/i,l=r/n;let h,u,d,f,g=0;const p=new Uint\ -16Array(i),m=a;for(h=0;h<i;h++)p[h]=Math.floor(h*c);for(h=0;h<n;h++){d=Math.floor(h*l)*m;for(u=0;u<i;u++){f=d+p[u];o[g++]=e[f]}}return o}class PDFImage{constructor({xref:e,res:t,image:a,isInline:r=!1,smask:i=null,mask:n=null,isMask:s=!1,pdfFunctionFactory:o,globalColorSpaceCache:c,localColorSpaceCache:l}){this.image=a;const h=a.dict,u=h.get("F","Filter");let d;if(u instanceof Name)d=u.name;else if(Array.isArray(u)){const t=e.fetchIfRef(u[0]);t instanceof Name&&(d=t.name)}switch(d){case"JPXDecode\ -":({width:a.width,height:a.height,componentsCount:a.numComps,bitsPerComponent:a.bitsPerComponent}=JpxImage.parseImageProperties(a.stream));a.stream.reset();const e=ImageResizer.getReducePowerForJPX(a.width,a.height,a.numComps);this.jpxDecoderOptions={numComponents:0,isIndexedColormap:!1,smaskInData:h.has("SMaskInData"),reducePower:e};if(e){const t=2**e;a.width=Math.ceil(a.width/t);a.height=Math.ceil(a.height/t)}break;case"JBIG2Decode":a.bitsPerComponent=1;a.numComps=1}let f=h.get("W","Width"),g=\ -h.get("H","Height");if(Number.isInteger(a.width)&&a.width>0&&Number.isInteger(a.height)&&a.height>0&&(a.width!==f||a.height!==g)){warn("PDFImage - using the Width/Height of the image data, rather than the image dictionary.");f=a.width;g=a.height}else{const e="number"==typeof f&&f>0,t="number"==typeof g&&g>0;if(!e||!t){if(!a.fallbackDims)throw new FormatError(`Invalid image width: ${f} or height: ${g}`);warn("PDFImage - using the Width/Height of the parent image, for SMask/Mask data.");e||(f=a.fa\ -llbackDims.width);t||(g=a.fallbackDims.height)}}this.width=f;this.height=g;this.interpolate=h.get("I","Interpolate");this.imageMask=h.get("IM","ImageMask")||!1;this.matte=h.get("Matte")||!1;let p=a.bitsPerComponent;if(!p){p=h.get("BPC","BitsPerComponent");if(!p){if(!this.imageMask)throw new FormatError(`Bits per component missing in image: ${this.imageMask}`);p=1}}this.bpc=p;if(!this.imageMask){let i=h.getRaw("CS")||h.getRaw("ColorSpace");const n=!!i;if(n)this.jpxDecoderOptions?.smaskInData&&(i=\ -Name.get("DeviceRGBA"));else if(this.jpxDecoderOptions)i=Name.get("DeviceRGBA");else switch(a.numComps){case 1:i=Name.get("DeviceGray");break;case 3:i=Name.get("DeviceRGB");break;case 4:i=Name.get("DeviceCMYK");break;default:throw new Error(`Images with ${a.numComps} color components not supported.`)}this.colorSpace=ColorSpaceUtils.parse({cs:i,xref:e,resources:r?t:null,pdfFunctionFactory:o,globalColorSpaceCache:c,localColorSpaceCache:l});this.numComps=this.colorSpace.numComps;if(this.jpxDecoderO\ -ptions){this.jpxDecoderOptions.numComponents=n?this.numComps:0;this.jpxDecoderOptions.isIndexedColormap="Indexed"===this.colorSpace.name}}this.decode=h.getArray("D","Decode");this.needsDecode=!1;if(this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,p)||s&&!ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;const e=(1<<p)-1;this.decodeCoefficients=[];this.decodeAddends=[];const t="Indexed"===this.colorSpace?.name;for(let a=0,r=0;a<this.decode.length;a+=2,++r)\ -{const i=this.decode[a],n=this.decode[a+1];this.decodeCoefficients[r]=t?(n-i)/e:n-i;this.decodeAddends[r]=t?i:e*i}}if(i){i.fallbackDims??={width:f,height:g};this.smask=new PDFImage({xref:e,res:t,image:i,isInline:r,pdfFunctionFactory:o,globalColorSpaceCache:c,localColorSpaceCache:l})}else if(n)if(n instanceof BaseStream){if(n.dict.get("IM","ImageMask")){n.fallbackDims??={width:f,height:g};this.mask=new PDFImage({xref:e,res:t,image:n,isInline:r,isMask:!0,pdfFunctionFactory:o,globalColorSpaceCache:\ -c,localColorSpaceCache:l})}else warn("Ignoring /Mask in image without /ImageMask.")}else this.mask=n}static async buildImage({xref:e,res:t,image:a,isInline:r=!1,pdfFunctionFactory:i,globalColorSpaceCache:n,localColorSpaceCache:s}){const o=a;let c=null,l=null;const h=a.dict.get("SMask"),u=a.dict.get("Mask");h?h instanceof BaseStream?c=h:warn("Unsupported /SMask format."):u&&(u instanceof BaseStream||Array.isArray(u)?l=u:warn("Unsupported /Mask format."));return new PDFImage({xref:e,res:t,image:o,\ -isInline:r,smask:c,mask:l,pdfFunctionFactory:i,globalColorSpaceCache:n,localColorSpaceCache:s})}static async createMask({image:e,isOffscreenCanvasSupported:t=!1}){const{dict:a}=e,r=a.get("W","Width"),i=a.get("H","Height"),n=a.get("I","Interpolate"),s=a.getArray("D","Decode"),o=s?.[0]>0,c=(r+7>>3)*i,l=e.getBytes(c),h=1===r&&1===i&&o===(0===l.length||!!(128&l[0]));if(h)return{isSingleOpaquePixel:h};if(t){if(ImageResizer.needsToBeResized(r,i)){const e=new Uint8ClampedArray(r*i*4);convertBlackAndWhi\ -teToRGBA({src:l,dest:e,width:r,height:i,nonBlackColor:0,inverseDecode:o});return ImageResizer.createImage({kind:v,data:e,width:r,height:i,interpolate:n})}const e=new OffscreenCanvas(r,i),t=e.getContext("2d"),a=t.createImageData(r,i);convertBlackAndWhiteToRGBA({src:l,dest:a.data,width:r,height:i,nonBlackColor:0,inverseDecode:o});t.putImageData(a,0,0);return{data:null,width:r,height:i,interpolate:n,bitmap:e.transferToImageBitmap()}}const u=l.byteLength;let d;if(e instanceof DecodeStream&&(!o||c===\ -u))d=l;else if(o){d=new Uint8Array(c);d.set(l);d.fill(255,u)}else d=new Uint8Array(l);if(o)for(let e=0;e<u;e++)d[e]^=255;return{data:d,width:r,height:i,interpolate:n}}get drawWidth(){return Math.max(this.width,this.smask?.width||0,this.mask?.width||0)}get drawHeight(){return Math.max(this.height,this.smask?.height||0,this.mask?.height||0)}decodeBuffer(e){const t=this.bpc,a=this.numComps,r=this.decodeAddends,i=this.decodeCoefficients,n=(1<<t)-1;let s,o;if(1===t){for(s=0,o=e.length;s<o;s++)e[s]=+!\ -e[s];return}let c=0;for(s=0,o=this.width*this.height;s<o;s++)for(let t=0;t<a;t++){e[c]=MathClamp(r[t]+e[c]*i[t],0,n);c++}}getComponents(e){const t=this.bpc;if(8===t)return e;const a=this.width,r=this.height,i=this.numComps,n=a*r*i;let s,o=0;s=t<=8?new Uint8Array(n):t<=16?new Uint16Array(n):new Uint32Array(n);const c=a*i,l=(1<<t)-1;let h,u,d=0;if(1===t){let t,a,i;for(let n=0;n<r;n++){a=d+(-8&c);i=d+c;for(;d<a;){u=e[o++];s[d]=u>>7&1;s[d+1]=u>>6&1;s[d+2]=u>>5&1;s[d+3]=u>>4&1;s[d+4]=u>>3&1;s[d+5]=u>\ ->2&1;s[d+6]=u>>1&1;s[d+7]=1&u;d+=8}if(d<i){u=e[o++];t=128;for(;d<i;){s[d++]=+!!(u&t);t>>=1}}}}else{let a=0;u=0;for(d=0,h=n;d<h;++d){if(d%c==0){u=0;a=0}for(;a<t;){u=u<<8|e[o++];a+=8}const r=a-t;let i=u>>r;i<0?i=0:i>l&&(i=l);s[d]=i;u&=(1<<r)-1;a=r}}return s}async fillOpacity(e,t,a,r,i){const n=this.smask,s=this.mask;let o,c,l,h,u,d;if(n){c=n.width;l=n.height;o=new Uint8ClampedArray(c*l);await n.fillGrayBuffer(o);c===t&&l===a||(o=resizeImageMask(o,n.bpc,c,l,t,a))}else if(s)if(s instanceof PDFImage)\ -{c=s.width;l=s.height;o=new Uint8ClampedArray(c*l);s.numComps=1;await s.fillGrayBuffer(o);for(h=0,u=c*l;h<u;++h)o[h]=255-o[h];c===t&&l===a||(o=resizeImageMask(o,s.bpc,c,l,t,a))}else{if(!Array.isArray(s))throw new FormatError("Unknown mask format.");{o=new Uint8ClampedArray(t*a);const e=this.numComps;for(h=0,u=t*a;h<u;++h){let t=0;const a=h*e;for(d=0;d<e;++d){const e=i[a+d],r=2*d;if(e<s[r]||e>s[r+1]){t=255;break}}o[h]=t}}}if(o)for(h=0,d=3,u=t*r;h<u;++h,d+=4)e[d]=o[h];else for(h=0,d=3,u=t*r;h<u;++\ -h,d+=4)e[d]=255}undoPreblend(e,t,a){const r=this.smask?.matte;if(!r)return;const i=this.colorSpace.getRgb(r,0),n=i[0],s=i[1],o=i[2],c=t*a*4;for(let t=0;t<c;t+=4){const a=e[t+3];if(0===a){e[t]=255;e[t+1]=255;e[t+2]=255;continue}const r=255/a;e[t]=(e[t]-n)*r+n;e[t+1]=(e[t+1]-s)*r+s;e[t+2]=(e[t+2]-o)*r+o}}async createImageData(e=!1,t=!1){const a=this.drawWidth,r=this.drawHeight,i={width:a,height:r,interpolate:this.interpolate,kind:0,data:null},n=this.numComps,s=this.width,o=this.height,c=this.bpc,l\ -=s*n*c+7>>3,h=t&&ImageResizer.needsToBeResized(a,r);if(!this.smask&&!this.mask&&"DeviceRGBA"===this.colorSpace.name){i.kind=v;const e=i.data=await this.getImageBytes(o*s*4,{});return t?h?ImageResizer.createImage(i,!1):this.createBitmap(v,a,r,e):i}if(!e){let e;"DeviceGray"===this.colorSpace.name&&1===c?e=k:"DeviceRGB"!==this.colorSpace.name||8!==c||this.needsDecode||(e=C);if(e&&!this.smask&&!this.mask&&a===s&&r===o){const n=await this.#$(s,o);if(n)return n;const c=await this.getImageBytes(o*l,{})\ -;if(t)return h?ImageResizer.createImage({data:c,kind:e,width:a,height:r,interpolate:this.interpolate},this.needsDecode):this.createBitmap(e,s,o,c);i.kind=e;i.data=c;if(this.needsDecode){assert(e===k,"PDFImage.createImageData: The image must be grayscale.");const t=i.data;for(let e=0,a=t.length;e<a;e++)t[e]^=255}return i}if(this.image instanceof JpegStream&&!this.smask&&!this.mask&&!this.needsDecode){let e=o*l;if(t&&!h){let t=!1;switch(this.colorSpace.name){case"DeviceGray":e*=4;t=!0;break;case"D\ -eviceRGB":e=e/3*4;t=!0;break;case"DeviceCMYK":t=!0}if(t){const t=await this.#$(a,r);if(t)return t;const i=await this.getImageBytes(e,{drawWidth:a,drawHeight:r,forceRGBA:!0});return this.createBitmap(v,a,r,i)}}else switch(this.colorSpace.name){case"DeviceGray":e*=3;case"DeviceRGB":case"DeviceCMYK":i.kind=C;i.data=await this.getImageBytes(e,{drawWidth:a,drawHeight:r,forceRGB:!0});return h?ImageResizer.createImage(i):i}}}const u=await this.getImageBytes(o*l,{internal:!0}),d=0|u.length/l*r/o,f=this.\ -getComponents(u);let g,p,m,b,y,w;if(t&&!h){m=new OffscreenCanvas(a,r);b=m.getContext("2d");y=b.createImageData(a,r);w=y.data}i.kind=v;if(e||this.smask||this.mask){t&&!h||(w=new Uint8ClampedArray(a*r*4));g=1;p=!0;await this.fillOpacity(w,a,r,d,f)}else{if(!t||h){i.kind=C;w=new Uint8ClampedArray(a*r*3);g=0}else{new Uint32Array(w.buffer).fill(FeatureTest.isLittleEndian?4278190080:255);g=1}p=!1}this.needsDecode&&this.decodeBuffer(f);this.colorSpace.fillRgb(w,s,o,a,r,d,c,f,g);p&&this.undoPreblend(w,a,\ -d);if(t&&!h){b.putImageData(y,0,0);return{data:null,width:a,height:r,bitmap:m.transferToImageBitmap(),interpolate:this.interpolate}}i.data=w;return h?ImageResizer.createImage(i):i}async fillGrayBuffer(e){const t=this.numComps;if(1!==t)throw new FormatError(`Reading gray scale from a color image: ${t}`);const a=this.width,r=this.height,i=this.bpc,n=a*t*i+7>>3,s=await this.getImageBytes(r*n,{internal:!0}),o=this.getComponents(s);let c,l;if(1===i){l=a*r;if(this.needsDecode)for(c=0;c<l;++c)e[c]=o[c]\ --1&255;else for(c=0;c<l;++c)e[c]=255&-o[c];return}this.needsDecode&&this.decodeBuffer(o);l=a*r;const h=255/((1<<i)-1);for(c=0;c<l;++c)e[c]=h*o[c]}createBitmap(e,t,a,r){const i=new OffscreenCanvas(t,a),n=i.getContext("2d");let s;if(e===v)s=new ImageData(r,t,a);else{s=n.createImageData(t,a);convertToRGBA({kind:e,src:r,dest:new Uint32Array(s.data.buffer),width:t,height:a,inverseDecode:this.needsDecode})}n.putImageData(s,0,0);return{data:null,width:t,height:a,bitmap:i.transferToImageBitmap(),interpo\ -late:this.interpolate}}async#$(e,t){const a=await this.image.getTransferableImage();return a?{data:null,width:e,height:t,bitmap:a,interpolate:this.interpolate}:null}async getImageBytes(e,{drawWidth:t,drawHeight:a,forceRGBA:r=!1,forceRGB:i=!1,internal:n=!1}){this.image.reset();this.image.drawWidth=t||this.width;this.image.drawHeight=a||this.height;this.image.forceRGBA=!!r;this.image.forceRGB=!!i;const s=await this.image.getImageData(e,this.jpxDecoderOptions);if(n||this.image instanceof DecodeStre\ -am)return s;assert(s instanceof Uint8Array,\'PDFImage.getImageBytes: Unsupported "imageBytes" type.\');return new Uint8Array(s)}}const Bn=Object.freeze({maxImageSize:-1,disableFontFace:!1,ignoreErrors:!1,isEvalSupported:!0,isOffscreenCanvasSupported:!1,isImageDecoderSupported:!1,canvasMaxAreaInBytes:-1,fontExtraProperties:!1,useSystemFonts:!0,useWasm:!0,useWorkerFetch:!0,cMapUrl:null,iccUrl:null,standardFontDataUrl:null,wasmUrl:null}),Rn=1,Nn=2,En=Promise.resolve();function normalizeBlendMode(e,t=\ -!1){if(Array.isArray(e)){for(const t of e){const e=normalizeBlendMode(t,!0);if(e)return e}warn(`Unsupported blend mode Array: ${e}`);return"source-over"}if(!(e instanceof Name))return t?null:"source-over";switch(e.name){case"Normal":case"Compatible":return"source-over";case"Multiply":return"multiply";case"Screen":return"screen";case"Overlay":return"overlay";case"Darken":return"darken";case"Lighten":return"lighten";case"ColorDodge":return"color-dodge";case"ColorBurn":return"color-burn";case"HardL\ -ight":return"hard-light";case"SoftLight":return"soft-light";case"Difference":return"difference";case"Exclusion":return"exclusion";case"Hue":return"hue";case"Saturation":return"saturation";case"Color":return"color";case"Luminosity":return"luminosity"}if(t)return null;warn(`Unsupported blend mode: ${e.name}`);return"source-over"}function addCachedImageOps(e,{objId:t,fn:a,args:r,optionalContent:i,hasMask:n}){t&&e.addDependency(t);e.addImageOps(a,r,i,n);a===Vt&&r[0]?.count>0&&r[0].count++}class Time\ -SlotManager{static TIME_SLOT_DURATION_MS=20;static CHECK_TIME_EVERY=100;constructor(){this.reset()}check(){if(++this.checked<TimeSlotManager.CHECK_TIME_EVERY)return!1;this.checked=0;return this.endTime<=Date.now()}reset(){this.endTime=Date.now()+TimeSlotManager.TIME_SLOT_DURATION_MS;this.checked=0}}class PartialEvaluator{constructor({xref:e,handler:t,pageIndex:a,idFactory:r,fontCache:i,builtInCMapCache:n,standardFontDataCache:s,globalColorSpaceCache:o,globalImageCache:c,systemFontCache:l,options\ -:h=null}){this.xref=e;this.handler=t;this.pageIndex=a;this.idFactory=r;this.fontCache=i;this.builtInCMapCache=n;this.standardFontDataCache=s;this.globalColorSpaceCache=o;this.globalImageCache=c;this.systemFontCache=l;this.options=h||Bn;this.type3FontRefs=null;this._regionalImageCache=new RegionalImageCache;this._fetchBuiltInCMapBound=this.fetchBuiltInCMap.bind(this)}get _pdfFunctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref,isEvalSupported:this.opti\ -ons.isEvalSupported}))}get parsingType3Font(){return!!this.type3FontRefs}clone(e=null){const t=Object.create(this);t.options=Object.assign(Object.create(null),this.options,e);return t}hasBlendModes(e,t){if(!(e instanceof Dict))return!1;if(e.objId&&t.has(e.objId))return!1;const a=new RefSet(t);e.objId&&a.put(e.objId);const r=[e],i=this.xref;for(;r.length;){const e=r.shift(),t=e.get("ExtGState");if(t instanceof Dict)for(let e of t.getRawValues()){if(e instanceof Ref){if(a.has(e))continue;try{e=i.f\ -etch(e)}catch(t){a.put(e);info(`hasBlendModes - ignoring ExtGState: "${t}".`);continue}}if(!(e instanceof Dict))continue;e.objId&&a.put(e.objId);const t=e.get("BM");if(t instanceof Name){if("Normal"!==t.name)return!0}else if(void 0!==t&&Array.isArray(t))for(const e of t)if(e instanceof Name&&"Normal"!==e.name)return!0}const n=e.get("XObject");if(n instanceof Dict)for(let e of n.getRawValues()){if(e instanceof Ref){if(a.has(e))continue;try{e=i.fetch(e)}catch(t){a.put(e);info(`hasBlendModes - igno\ -ring XObject: "${t}".`);continue}}if(!(e instanceof BaseStream))continue;e.dict.objId&&a.put(e.dict.objId);const t=e.dict.get("Resources");if(t instanceof Dict&&(!t.objId||!a.has(t.objId))){r.push(t);t.objId&&a.put(t.objId)}}}for(const e of a)t.put(e);return!1}async fetchBuiltInCMap(e){const t=this.builtInCMapCache.get(e);if(t)return t;let a;a=this.options.useWorkerFetch?{cMapData:await fetchBinaryData(`${this.options.cMapUrl}${e}.bcmap`),isCompressed:!0}:await this.handler.sendWithPromise("Fetc\ -hBinaryData",{type:"cMapReaderFactory",name:e});this.builtInCMapCache.set(e,a);return a}async fetchStandardFontData(e){const t=this.standardFontDataCache.get(e);if(t)return new Stream(t);if(this.options.useSystemFonts&&"Symbol"!==e&&"ZapfDingbats"!==e)return null;const a=Yr()[e];let r;try{r=this.options.useWorkerFetch?await fetchBinaryData(`${this.options.standardFontDataUrl}${a}`):await this.handler.sendWithPromise("FetchBinaryData",{type:"standardFontDataFactory",filename:a})}catch(e){warn(e);\ -return null}this.standardFontDataCache.set(e,r);return new Stream(r)}async buildFormXObject(e,t,a,r,i,n,s,o){const{dict:c}=t,l=lookupMatrix(c.getArray("Matrix"),null),h=lookupNormalRect(c.getArray("BBox"),null);let u,d;c.has("OC")&&(u=await this.parseMarkedContentProps(c.get("OC"),e));void 0!==u&&r.addOp(jt,["OC",u]);const f=c.get("Group");if(f){d={matrix:l,bbox:h,smask:a,isolated:!1,knockout:!1};let t=null;if(isName(f.get("S"),"Transparency")){d.isolated=f.get("I")||!1;d.knockout=f.get("K")||!1\ -;if(f.has("CS")){const a=this._getColorSpace(f.getRaw("CS"),e,s);t=a instanceof ColorSpace?a:await this._handleColorSpace(a)}}if(a?.backdrop){t||=ColorSpaceUtils.rgb;a.backdrop=t.getRgbHex(a.backdrop,0)}r.addOp(Wt,[d])}const g=[l&&new Float32Array(l),!f&&h&&new Float32Array(h)||null];r.addOp(qt,g);const p=c.get("Resources");await this.getOperatorList({stream:t,task:i,resources:p instanceof Dict?p:e,operatorList:r,initialState:n,prevRefs:o});r.addOp(Ht,[]);f&&r.addOp(zt,[d]);void 0!==u&&r.addOp(_\ -t,[])}_sendImgData(e,t,a=!1){const r=t?[t.bitmap||t.data.buffer]:null;return this.parsingType3Font||a?this.handler.send("commonobj",[e,"Image",t],r):this.handler.send("obj",[e,this.pageIndex,"Image",t],r)}async buildPaintImageXObject({resources:e,image:t,isInline:a=!1,operatorList:r,cacheKey:i,localImageCache:n,localColorSpaceCache:s}){const{maxImageSize:o,ignoreErrors:c,isOffscreenCanvasSupported:l}=this.options,{dict:h}=t,u=h.objId,d=h.get("W","Width"),f=h.get("H","Height");if(!d||"number"!=ty\ -peof d||!f||"number"!=typeof f){warn("Image dimensions are missing, or not numbers.");return}if(-1!==o&&d*f>o){const e="Image exceeded maximum allowed size and was removed.";if(!c)throw new Error(e);warn(e);return}let g;h.has("OC")&&(g=await this.parseMarkedContentProps(h.get("OC"),e));let p,m,b;if(h.get("IM","ImageMask")||!1){p=await PDFImage.createMask({image:t,isOffscreenCanvasSupported:l&&!this.parsingType3Font});if(p.isSingleOpaquePixel){m=ta;b=[];r.addImageOps(m,b,g);if(i){const e={fn:m,ar\ -gs:b,optionalContent:g};n.set(i,u,e);u&&this._regionalImageCache.set(null,u,e)}return}if(this.parsingType3Font){b=function compileType3Glyph({data:e,width:t,height:a}){if(t>1e3||a>1e3)return null;const r=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),i=t+1,n=new Uint8Array(i*(a+1));let s,o,c;const l=t+7&-8,h=new Uint8Array(l*a);let u=0;for(const t of e){let e=128;for(;e>0;){h[u++]=t&e?0:255;e>>=1}}let d=0;u=0;if(0!==h[u]){n[0]=1;++d}for(o=1;o<t;o++){if(h[u]!==h[u+1]){n[o]=h[u]?2:1;++d}u++}if\ -(0!==h[u]){n[o]=2;++d}for(s=1;s<a;s++){u=s*l;c=s*i;if(h[u-l]!==h[u]){n[c]=h[u]?1:8;++d}let e=(h[u]?4:0)+(h[u-l]?8:0);for(o=1;o<t;o++){e=(e>>2)+(h[u+1]?4:0)+(h[u-l+1]?8:0);if(r[e]){n[c+o]=r[e];++d}u++}if(h[u-l]!==h[u]){n[c+o]=h[u]?2:4;++d}if(d>1e3)return null}u=l*(a-1);c=s*i;if(0!==h[u]){n[c]=8;++d}for(o=1;o<t;o++){if(h[u]!==h[u+1]){n[c+o]=h[u]?4:8;++d}u++}if(0!==h[u]){n[c+o]=4;++d}if(d>1e3)return null;const f=new Int32Array([0,i,-1,0,-i,0,0,0,1]),g=[],{a:p,b:m,c:b,d:y,e:w,f:x}=(new DOMMatrix).sc\ -aleSelf(1/t,-1/a).translateSelf(0,-a);for(s=0;d&&s<=a;s++){let e=s*i;const a=e+t;for(;e<a&&!n[e];)e++;if(e===a)continue;let r=e%i,o=s;g.push(sa,p*r+b*o+w,m*r+y*o+x);const c=e;let l=n[e];do{const t=f[l];do{e+=t}while(!n[e]);const a=n[e];if(5!==a&&10!==a){l=a;n[e]=0}else{l=a&51*l>>4;n[e]&=l>>2|l<<2}r=e%i;o=e/i|0;g.push(oa,p*r+b*o+w,m*r+y*o+x);n[e]||--d}while(c!==e);--s}return[na,[new Float32Array(g)],new Float32Array([0,0,t,a])]}(p);if(b){r.addImageOps(aa,b,g);return}warn("Cannot compile Type3 gly\ -ph.");r.addImageOps(Vt,[p],g);return}const e=`mask_${this.idFactory.createObjId()}`;r.addDependency(e);p.dataLen=p.bitmap?p.width*p.height*4:p.data.length;this._sendImgData(e,p);m=Vt;b=[{data:e,width:p.width,height:p.height,interpolate:p.interpolate,count:1}];r.addImageOps(m,b,g);if(i){const t={objId:e,fn:m,args:b,optionalContent:g};n.set(i,u,t);u&&this._regionalImageCache.set(null,u,t)}return}const y=h.has("SMask")||h.has("Mask");if(a&&d+f<200&&!y){try{const i=new PDFImage({xref:this.xref,res:e\ -,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:s});p=await i.createImageData(!0,!1);r.addImageOps(Yt,[p],g)}catch(e){const t=`Unable to decode inline image: "${e}".`;if(!c)throw new Error(t);warn(t)}return}let w=`img_${this.idFactory.createObjId()}`,x=!1,S=null;if(this.parsingType3Font)w=`${this.idFactory.getDocId()}_type3_${w}`;else if(i&&u){x=this.globalImageCache.shouldCache(u,this.pageIndex);if(x){assert(!\ -a,"Cannot cache an inline image globally.");w=`${this.idFactory.getDocId()}_${w}`}}r.addDependency(w);m=Jt;b=[w,d,f];r.addImageOps(m,b,g,y);if(x){S={objId:w,fn:m,args:b,optionalContent:g,hasMask:y,byteSize:0};if(this.globalImageCache.hasDecodeFailed(u)){this.globalImageCache.setData(u,S);this._sendImgData(w,null,x);return}if(d*f>25e4||y){const e=await this.handler.sendWithPromise("commonobj",[w,"CopyLocalImage",{imageRef:u}]);if(e){this.globalImageCache.setData(u,S);this.globalImageCache.addByte\ -Size(u,e);return}}}PDFImage.buildImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:s}).then((async e=>{p=await e.createImageData(!1,l);p.dataLen=p.bitmap?p.width*p.height*4:p.data.length;p.ref=u;x&&this.globalImageCache.addByteSize(u,p.dataLen);return this._sendImgData(w,p,x)})).catch((e=>{warn(`Unable to decode image "${w}": "${e}".`);u&&this.globalImageCache.addDecodeFailed(u);return \ -this._sendImgData(w,null,x)}));if(i){const e={objId:w,fn:m,args:b,optionalContent:g,hasMask:y};n.set(i,u,e);if(u){this._regionalImageCache.set(null,u,e);if(x){assert(S,"The global cache-data must be available.");this.globalImageCache.setData(u,S)}}}}handleSMask(e,t,a,r,i,n,s){const o=e.get("G"),c={subtype:e.get("S").name,backdrop:e.get("BC")},l=e.get("TR");if(isPDFFunction(l)){const e=this._pdfFunctionFactory.create(l),t=new Uint8Array(256),a=new Float32Array(1);for(let r=0;r<256;r++){a[0]=r/255\ -;e(a,0,a,0);t[r]=255*a[0]|0}c.transferMap=t}return this.buildFormXObject(t,o,c,a,r,i.state.clone({newPath:!0}),n,s)}handleTransferFunction(e){let t;if(Array.isArray(e))t=e;else{if(!isPDFFunction(e))return null;t=[e]}const a=[];let r=0,i=0;for(const e of t){const t=this.xref.fetchIfRef(e);r++;if(isName(t,"Identity")){a.push(null);continue}if(!isPDFFunction(t))return null;const n=this._pdfFunctionFactory.create(t),s=new Uint8Array(256),o=new Float32Array(1);for(let e=0;e<256;e++){o[0]=e/255;n(o,0,\ -o,0);s[e]=255*o[0]|0}a.push(s);i++}return 1!==r&&4!==r||0===i?null:a}handleTilingType(e,t,a,r,i,n,s,o){const c=new OperatorList,l=Dict.merge({xref:this.xref,dictArray:[i.get("Resources"),a]});return this.getOperatorList({stream:r,task:s,resources:l,operatorList:c}).then((function(){const a=c.getIR(),r=getTilingPatternIR(a,i,t);n.addDependencies(c.dependencies);n.addOp(e,r);i.objId&&o.set(null,i.objId,{operatorListIR:a,dict:i})})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ign\ -oreErrors)throw e;warn(`handleTilingType - ignoring pattern: "${e}".`)}}))}async handleSetFont(e,t,a,r,i,n,s=null,o=null){const c=t?.[0]instanceof Name?t[0].name:null,l=await this.loadFont(c,a,e,i,s,o);l.font.isType3Font&&r.addDependencies(l.type3Dependencies);n.font=l.font;l.send(this.handler);return l.loadedName}handleText(e,t){const a=t.font,r=a.charsToGlyphs(e);if(a.data){(!!(t.textRenderingMode&S)||"Pattern"===t.fillColorSpace.name||a.disableFontFace)&&PartialEvaluator.buildFontPaths(a,r,th\ -is.handler,this.options)}return r}ensureStateFont(e){if(e.font)return;const t=new FormatError("Missing setFont (Tf) operator before text rendering operator.");if(!this.options.ignoreErrors)throw t;warn(`ensureStateFont: "${t}".`)}async setGState({resources:e,gState:t,operatorList:a,cacheKey:r,task:i,stateManager:n,localGStateCache:s,localColorSpaceCache:o,seenRefs:c}){const l=t.objId;let h=!0;const u=[];let d=Promise.resolve();for(const[r,s]of t)switch(r){case"Type":break;case"LW":if("number"!=t\ -ypeof s){warn(`Invalid LW (line width): ${s}`);break}u.push([r,Math.abs(s)]);break;case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":u.push([r,s]);break;case"Font":h=!1;d=d.then((()=>this.handleSetFont(e,null,s[0],a,i,n.state).then((function(e){a.addDependency(e);u.push([r,[e,s[1]]])}))));break;case"BM":u.push([r,normalizeBlendMode(s)]);break;case"SMask":if(isName(s,"None")){u.push([r,!1]);break}if(s instanceof Dict){h=!1;d=d.then((()=>this.handleSMask(s,e,a,i,n,o,c)));u.pus\ -h([r,!0])}else warn("Unsupported SMask type");break;case"TR":const t=this.handleTransferFunction(s);u.push([r,t]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":info("graphic state operator "+r);break;default:info("Unknown graphic state operator "+r)}await d;u.length>0&&a.addOp(De,[u]);h&&s.set(r,l,u)}loadFont(e,t,a,r,i=null,n=null){const errorFont=async()=>new TranslatedFont({loadedName:"g_font_error",font:new Er\ -rorFont(`Font "${e}" is not available.`),dict:t});let s;if(t)t instanceof Ref&&(s=t);else{const t=a.get("Font");t&&(s=t.getRaw(e))}if(s){if(this.type3FontRefs?.has(s))return errorFont();if(this.fontCache.has(s))return this.fontCache.get(s);try{t=this.xref.fetchIfRef(s)}catch(e){warn(`loadFont - lookup failed: "${e}".`)}}if(!(t instanceof Dict)){if(!this.options.ignoreErrors&&!this.parsingType3Font){warn(`Font "${e}" is not available.`);return errorFont()}warn(`Font "${e}" is not available -- att\ -empting to fallback to a default font.`);t=i||PartialEvaluator.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);const{promise:o,resolve:c}=Promise.withResolvers();let l;try{l=this.preEvaluateFont(t);l.cssFontInfo=n}catch(e){warn(`loadFont - preEvaluateFont failed: "${e}".`);return errorFont()}const{descriptor:h,hash:u}=l,d=s instanceof Ref;let f;if(u&&h instanceof Dict){const e=h.fontAliases||=Object.create(null);if(e[u]){const t=e[u].aliasRef;\ -if(d&&t&&this.fontCache.has(t)){this.fontCache.putAlias(s,t);return this.fontCache.get(s)}}else e[u]={fontID:this.idFactory.createFontId()};d&&(e[u].aliasRef=s);f=e[u].fontID}else f=this.idFactory.createFontId();assert(f?.startsWith("f"),\'The "fontID" must be (correctly) defined.\');if(d)this.fontCache.put(s,o);else{t.cacheKey=`cacheKey_${f}`;this.fontCache.put(t.cacheKey,o)}t.loadedName=`${this.idFactory.getDocId()}_${f}`;this.translateFont(l).then((async e=>{const i=new TranslatedFont({loadedNa\ -me:t.loadedName,font:e,dict:t});if(e.isType3Font)try{await i.loadType3Data(this,a,r)}catch(e){throw new Error(`Type3 font load error: ${e}`)}c(i)})).catch((e=>{warn(`loadFont - translateFont failed: "${e}".`);c(new TranslatedFont({loadedName:t.loadedName,font:new ErrorFont(e?.message),dict:t}))}));return o}buildPath(e,t,a){const{pathMinMax:r,pathBuffer:i}=a;switch(0|e){case Xe:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1],s=t[2],o=t[3],c=e+s,l=n+o;0===s||0===o?i.push(sa,e,n,oa,c,l,la):i.p\ -ush(sa,e,n,oa,c,n,oa,c,l,oa,e,l,la);Util.rectBoundingBox(e,n,c,l,r);break}case Ee:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1];i.push(sa,e,n);Util.pointBoundingBox(e,n,r);break}case Pe:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1];i.push(oa,e,n);Util.pointBoundingBox(e,n,r);break}case Le:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l,h,u]=t;a.currentPointX=h;a.currentPointY=u;i.push(ca,s,o,c,l,h,u);Util.bezierBoundingBox(e,n,s,o,c,l,h,u,r);break}case je:{const e=a.currentPoin\ -tX,n=a.currentPointY,[s,o,c,l]=t;a.currentPointX=c;a.currentPointY=l;i.push(ca,e,n,s,o,c,l);Util.bezierBoundingBox(e,n,e,n,s,o,c,l,r);break}case _e:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l]=t;a.currentPointX=c;a.currentPointY=l;i.push(ca,s,o,c,l,c,l);Util.bezierBoundingBox(e,n,s,o,c,l,c,l,r);break}case Ue:i.push(la)}}_getColorSpace(e,t,a){return ColorSpaceUtils.parse({cs:e,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpac\ -eCache,localColorSpaceCache:a,asyncIfNotCached:!0})}async _handleColorSpace(e){try{return await e}catch(e){if(e instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`_handleColorSpace - ignoring ColorSpace: "${e}".`);return null}throw e}}parseShading({shading:e,resources:t,localColorSpaceCache:a,localShadingPatternCache:r}){let i,n=r.get(e);if(n)return n;try{i=Pattern.parseShading(e,this.xref,t,this._pdfFunctionFactory,this.globalColorSpaceCache,a).getIR()}catch(t){if(t insta\ -nceof AbortException)return null;if(this.options.ignoreErrors){warn(`parseShading - ignoring shading: "${t}".`);r.set(e,null);return null}throw t}n=`pattern_${this.idFactory.createObjId()}`;this.parsingType3Font&&(n=`${this.idFactory.getDocId()}_type3_${n}`);r.set(e,n);this.parsingType3Font?this.handler.send("commonobj",[n,"Pattern",i]):this.handler.send("obj",[n,this.pageIndex,"Pattern",i]);return n}handleColorN(e,t,a,r,i,n,s,o,c,l){const h=a.pop();if(h instanceof Name){const u=i.getRaw(h.name)\ -,d=u instanceof Ref&&c.getByRef(u);if(d)try{const i=r.base?r.base.getRgbHex(a,0):null,n=getTilingPatternIR(d.operatorListIR,d.dict,i);e.addOp(t,n);return}catch{}const f=this.xref.fetchIfRef(u);if(f){const i=f instanceof BaseStream?f.dict:f,h=i.get("PatternType");if(h===Rn){const o=r.base?r.base.getRgbHex(a,0):null;return this.handleTilingType(t,o,n,f,i,e,s,c)}if(h===Nn){const a=i.get("Shading"),r=this.parseShading({shading:a,resources:n,localColorSpaceCache:o,localShadingPatternCache:l});if(r){c\ -onst a=lookupMatrix(i.getArray("Matrix"),null);e.addOp(t,["Shading",r,a])}return}throw new FormatError(`Unknown PatternType: ${h}`)}}throw new FormatError(`Unknown PatternName: ${h}`)}_parseVisibilityExpression(e,t,a){if(++t>10){warn("Visibility expression is too deeply nested");return}const r=e.length,i=this.xref.fetchIfRef(e[0]);if(!(r<2)&&i instanceof Name){switch(i.name){case"And":case"Or":case"Not":a.push(i.name);break;default:warn(`Invalid operator ${i.name} in visibility expression`);retu\ -rn}for(let i=1;i<r;i++){const r=e[i],n=this.xref.fetchIfRef(r);if(Array.isArray(n)){const e=[];a.push(e);this._parseVisibilityExpression(n,t,e)}else r instanceof Ref&&a.push(r.toString())}}else warn("Invalid visibility expression")}async parseMarkedContentProps(e,t){let a;if(e instanceof Name){a=t.get("Properties").get(e.name)}else{if(!(e instanceof Dict))throw new FormatError("Optional content properties malformed.");a=e}const r=a.get("Type")?.name;if("OCG"===r)return{type:r,id:a.objId};if("OCM\ -D"===r){const e=a.get("VE");if(Array.isArray(e)){const t=[];this._parseVisibilityExpression(e,0,t);if(t.length>0)return{type:"OCMD",expression:t}}const t=a.get("OCGs");if(Array.isArray(t)||t instanceof Dict){const e=[];if(Array.isArray(t))for(const a of t)e.push(a.toString());else e.push(t.objId);return{type:r,ids:e,policy:a.get("P")instanceof Name?a.get("P").name:null,expression:null}}if(t instanceof Ref)return{type:r,id:t.toString()}}return null}getOperatorList({stream:e,task:t,resources:a,ope\ -ratorList:r,initialState:i=null,fallbackFontDict:n=null,prevRefs:s=null}){const o=e.dict?.objId,c=new RefSet(s);if(o){if(s?.has(o))throw new Error(`getOperatorList - ignoring circular reference: ${o}`);c.put(o)}a||=Dict.empty;i||=new EvalState;if(!r)throw new Error(\'getOperatorList: missing "operatorList" parameter\');const l=this,h=this.xref,u=new LocalImageCache,d=new LocalColorSpaceCache,f=new LocalGStateCache,g=new LocalTilingPatternCache,p=new Map,m=a.get("XObject")||Dict.empty,b=a.get("Patt\ -ern")||Dict.empty,y=new StateManager(i),w=new EvaluatorPreprocessor(e,h,y),x=new TimeSlotManager;function closePendingRestoreOPS(e){for(let e=0,t=w.savedStatesDepth;e<t;e++)r.addOp(Re,[])}return new Promise((function promiseBody(e,i){const next=function(t){Promise.all([t,r.ready]).then((function(){try{promiseBody(e,i)}catch(e){i(e)}}),i)};t.ensureNotTerminated();x.reset();const s={};let o,S,k,C,v,F;for(;!(o=x.check());){s.args=null;if(!w.read(s))break;let e=s.args,i=s.fn;switch(0|i){case Nt:F=e[\ -0]instanceof Name;v=e[0].name;if(F){const t=u.getByName(v);if(t){addCachedImageOps(r,t);e=null;continue}}next(new Promise((function(e,i){if(!F)throw new FormatError("XObject must be referred to by name.");let n=m.getRaw(v);if(n instanceof Ref){const t=u.getByRef(n)||l._regionalImageCache.getByRef(n)||l.globalImageCache.getData(n,l.pageIndex);if(t){addCachedImageOps(r,t);e();return}n=h.fetch(n)}if(!(n instanceof BaseStream))throw new FormatError("XObject should be a stream");const s=n.dict.get("S\ -ubtype");if(!(s instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==s.name)if("Image"!==s.name){if("PS"!==s.name)throw new FormatError(`Unhandled XObject subtype ${s.name}`);info("Ignored XObject subtype PS");e()}else l.buildPaintImageXObject({resources:a,image:n,operatorList:r,cacheKey:v,localImageCache:u,localColorSpaceCache:d}).then(e,i);else{y.save();l.buildFormXObject(a,n,null,r,t,y.state.clone({newPath:!0}),d,c).then((function(){y.restore();e()}),i)}}))\ -.catch((function(e){if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring XObject: "${e}".`)}})));return;case nt:const s=e[1];next(l.handleSetFont(a,e,null,r,t,y.state,n).then((function(e){r.addDependency(e);r.addOp(nt,[e,s])})));return;case Rt:const o=e[0].cacheKey;if(o){const t=u.getByName(o);if(t){addCachedImageOps(r,t);e=null;continue}}next(l.buildPaintImageXObject({resources:a,image:e[0],isInline:!0,operatorList:r,cacheKey:o,localImageCache:u\ -,localColorSpaceCache:d}));return;case dt:if(!y.state.font){l.ensureStateFont(y.state);continue}e[0]=l.handleText(e[0],y.state);break;case ft:if(!y.state.font){l.ensureStateFont(y.state);continue}const w=[],x=y.state;for(const t of e[0])"string"==typeof t?w.push(...l.handleText(t,x)):"number"==typeof t&&w.push(t);e[0]=w;i=dt;break;case gt:if(!y.state.font){l.ensureStateFont(y.state);continue}r.addOp(ut);e[0]=l.handleText(e[0],y.state);i=dt;break;case pt:if(!y.state.font){l.ensureStateFont(y.stat\ -e);continue}r.addOp(ut);r.addOp(at,[e.shift()]);r.addOp(tt,[e.shift()]);e[0]=l.handleText(e[0],y.state);i=dt;break;case st:y.state.textRenderingMode=e[0];break;case wt:{const t=l._getColorSpace(e[0],a,d);if(t instanceof ColorSpace){y.state.fillColorSpace=t;continue}next(l._handleColorSpace(t).then((e=>{y.state.fillColorSpace=e||ColorSpaceUtils.gray})));return}case yt:{const t=l._getColorSpace(e[0],a,d);if(t instanceof ColorSpace){y.state.strokeColorSpace=t;continue}next(l._handleColorSpace(t).th\ -en((e=>{y.state.strokeColorSpace=e||ColorSpaceUtils.gray})));return}case At:C=y.state.fillColorSpace;e=[C.getRgbHex(e,0)];i=It;break;case xt:C=y.state.strokeColorSpace;e=[C.getRgbHex(e,0)];i=Ft;break;case vt:y.state.fillColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=It;break;case Ct:y.state.strokeColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=Ft;break;case Ot:y.state.fillColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];\ -i=It;break;case Tt:y.state.strokeColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];i=Ft;break;case It:y.state.fillColorSpace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case Ft:y.state.strokeColorSpace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case kt:C=y.state.patternFillColorSpace;if(!C){if(isNumberArray(e,null)){e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=It;break}e=[];i=ia;break}if("Pattern"===C.name){next(l.handleColorN(r,kt,e,\ -C,b,a,t,d,g,p));return}e=[C.getRgbHex(e,0)];i=It;break;case St:C=y.state.patternStrokeColorSpace;if(!C){if(isNumberArray(e,null)){e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=Ft;break}e=[];i=ra;break}if("Pattern"===C.name){next(l.handleColorN(r,St,e,C,b,a,t,d,g,p));return}e=[C.getRgbHex(e,0)];i=Ft;break;case Mt:let T;try{const t=a.get("Shading");if(!t)throw new FormatError("No shading resource found");T=t.get(e[0].name);if(!T)throw new FormatError("No shading object found")}catch(e){if(e instanceof\ - AbortException)continue;if(l.options.ignoreErrors){warn(`getOperatorList - ignoring Shading: "${e}".`);continue}throw e}const O=l.parseShading({shading:T,resources:a,localColorSpaceCache:d,localShadingPatternCache:p});if(!O)continue;e=[O];i=Mt;break;case De:F=e[0]instanceof Name;v=e[0].name;if(F){const t=f.getByName(v);if(t){t.length>0&&r.addOp(De,[t]);e=null;continue}}next(new Promise((function(e,i){if(!F)throw new FormatError("GState must be referred to by name.");const n=a.get("ExtGState");i\ -f(!(n instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const s=n.get(v);if(!(s instanceof Dict))throw new FormatError("GState should be a dictionary.");l.setGState({resources:a,gState:s,operatorList:r,cacheKey:v,task:t,stateManager:y,localGStateCache:f,localColorSpaceCache:d,seenRefs:c}).then(e,i)})).catch((function(e){if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring ExtGState: "${e}".`)}})));return;case Ce:{const[t\ -]=e;if("number"!=typeof t){warn(`Invalid setLineWidth: ${t}`);continue}e[0]=Math.abs(t);break}case Ee:case Pe:case Le:case je:case _e:case Ue:case Xe:l.buildPath(i,e,y.state);continue;case qe:case He:case We:case ze:case $e:case Ge:case Ve:case Ke:case Je:{const{state:{pathBuffer:e,pathMinMax:t}}=y;i!==He&&i!==Ve&&i!==Ke||e.push(la);if(0===e.length)r.addOp(aa,[i,[null],null]);else{r.addOp(aa,[i,[new Float32Array(e)],t.slice()]);e.length=0;t.set([1/0,1/0,-1/0,-1/0],0)}continue}case ht:r.addOp(i,[\ -new Float32Array(e)]);continue;case Et:case Pt:case Ut:case Xt:continue;case jt:if(!(e[0]instanceof Name)){warn(`Expected name for beginMarkedContentProps arg0=${e[0]}`);r.addOp(jt,["OC",null]);continue}if("OC"===e[0].name){next(l.parseMarkedContentProps(e[1],a).then((e=>{r.addOp(jt,["OC",e])})).catch((e=>{if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring beginMarkedContentProps: "${e}".`);r.addOp(jt,["OC",null])}})));return}e=[e[0].name,e[1]i\ -nstanceof Dict?e[1].get("MCID"):null];break;default:if(null!==e){for(S=0,k=e.length;S<k&&!(e[S]instanceof Dict);S++);if(S<k){warn("getOperatorList - ignoring operator: "+i);continue}}}r.addOp(i,e)}if(o)next(En);else{closePendingRestoreOPS();e()}})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring errors during "${t.name}" task: "${e}".`);closePendingRestoreOPS()}}))}getTextContent({stream:e,task:a,resources:r,stateManager:i=null\ -,includeMarkedContent:n=!1,sink:s,seenStyles:o=new Set,viewBox:c,lang:l=null,markedContentData:h=null,disableNormalization:u=!1,keepWhiteSpace:d=!1,prevRefs:f=null,intersector:g=null}){const p=e.dict?.objId,m=new RefSet(f);if(p){if(f?.has(p))throw new Error(`getTextContent - ignoring circular reference: ${p}`);m.put(p)}r||=Dict.empty;i||=new StateManager(new TextState);n&&(h||={level:0});const b={items:[],styles:Object.create(null),lang:l},y={initialized:!1,str:[],totalWidth:0,totalHeight:0,widt\ -h:0,height:0,vertical:!1,prevTransform:null,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,notASpace:-1/0,transform:null,fontName:null,hasEOL:!1},w=[" "," "];let x=0;function saveLastChar(e){const t=(x+1)%2,a=" "!==w[x]&&" "===w[t];w[x]=e;x=t;return!d&&a}function shouldAddWhitepsace(){return!d&&" "!==w[x]&&" "===w[(x+1)%2]}function resetLastChars(){w[0]=w[1]=" ";x=0}const S=this,k=this.xref,C=[];let v=null;const F=new LocalImageCache,T=new LocalGS\ -tateCache,O=new EvaluatorPreprocessor(e,k,i);let M;function pushWhitespace({width:e=0,height:t=0,transform:a=y.prevTransform,fontName:r=y.fontName}){g?.addExtraChar(" ");b.items.push({str:" ",dir:"ltr",width:e,height:t,transform:a,fontName:r,hasEOL:!1})}function getCurrentTextTransform(){const e=M.font,a=[M.fontSize*M.textHScale,0,0,M.fontSize,0,M.textRise];if(e.isType3Font&&(M.fontSize<=1||e.isCharBBox)&&!isArrayEqual(M.fontMatrix,t)){const t=e.bbox[3]-e.bbox[1];t>0&&(a[3]*=t*M.fontMatrix[3])}r\ -eturn Util.transform(M.ctm,Util.transform(M.textMatrix,a))}function ensureTextContentItem(){if(y.initialized)return y;const{font:e,loadedName:t}=M;if(!o.has(t)){o.add(t);b.styles[t]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:e.vertical};if(S.options.fontExtraProperties&&e.systemFontInfo){const a=b.styles[t];a.fontSubstitution=e.systemFontInfo.css;a.fontSubstitutionLoadedName=e.systemFontInfo.loadedName}}y.fontName=t;const a=y.transform=getCurrentTextTransform();if(e.ve\ -rtical){y.width=y.totalWidth=Math.hypot(a[0],a[1]);y.height=y.totalHeight=0;y.vertical=!0}else{y.width=y.totalWidth=0;y.height=y.totalHeight=Math.hypot(a[2],a[3]);y.vertical=!1}const r=Math.hypot(M.textLineMatrix[0],M.textLineMatrix[1]),i=Math.hypot(M.ctm[0],M.ctm[1]);y.textAdvanceScale=i*r;const{fontSize:n}=M;y.trackingSpaceMin=.102*n;y.notASpace=.03*n;y.negativeSpaceMax=-.2*n;y.spaceInFlowMin=.102*n;y.spaceInFlowMax=.6*n;y.hasEOL=!1;y.initialized=!0;return y}function updateAdvanceScale(){if(!y\ -.initialized)return;const e=Math.hypot(M.textLineMatrix[0],M.textLineMatrix[1]),t=Math.hypot(M.ctm[0],M.ctm[1])*e;if(t!==y.textAdvanceScale){if(y.vertical){y.totalHeight+=y.height*y.textAdvanceScale;y.height=0}else{y.totalWidth+=y.width*y.textAdvanceScale;y.width=0}y.textAdvanceScale=t}}function runBidiTransform(e){let t=e.str.join("");u||(t=function normalizeUnicode(e){if(!ma){ma=/([\\u00a0\\u00b5\\u037e\\u0eb3\\u2000-\\u200a\\u202f\\u2126\\ufb00-\\ufb04\\ufb06\\ufb20-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\ -\\ufb43-\\ufb44\\ufb46-\\ufba1\\ufba4-\\ufba9\\ufbae-\\ufbb1\\ufbd3-\\ufbdc\\ufbde-\\ufbe7\\ufbea-\\ufbf8\\ufbfc-\\ufbfd\\ufc00-\\ufc5d\\ufc64-\\ufcf1\\ufcf5-\\ufd3d\\ufd88\\ufdf4\\ufdfa-\\ufdfb\\ufe71\\ufe77\\ufe79\\ufe7b\\ufe7d]+)|(\\ufb05+)/gu;ba=new Map([["ſt","ſt"]])}return e.replaceAll(ma,((e,t,a)=>t?t.normalize("NFKC"):ba.get(a)))}(t));const a=bidi(t,-1,e.vertical);return{str:a.str,dir:a.dir,width:Math.abs(e.totalWidth),height:Math.abs(e.totalHeight),transform:e.transform,fontName:e.fontName,hasEOL:e.hasEOL}}async functi\ -on handleSetFont(e,i){const n=await S.loadFont(e,i,r,a);M.loadedName=n.loadedName;M.font=n.font;M.fontMatrix=n.font.fontMatrix||t}function applyInverseRotation(e,t,a){const r=Math.hypot(a[0],a[1]);return[(a[0]*e+a[1]*t)/r,(a[2]*e+a[3]*t)/r]}function compareWithLastPosition(e){const t=getCurrentTextTransform();let a=t[4],r=t[5];if(M.font?.vertical){if(a<c[0]||a>c[2]||r+e<c[1]||r>c[3])return!1}else if(a+e<c[0]||a>c[2]||r<c[1]||r>c[3])return!1;if(!M.font||!y.prevTransform)return!0;let i=y.prevTrans\ -form[4],n=y.prevTransform[5];if(i===a&&n===r)return!0;let s=-1;t[0]&&0===t[1]&&0===t[2]?s=t[0]>0?0:180:t[1]&&0===t[0]&&0===t[3]&&(s=t[1]>0?90:270);switch(s){case 0:break;case 90:[a,r]=[r,a];[i,n]=[n,i];break;case 180:[a,r,i,n]=[-a,-r,-i,-n];break;case 270:[a,r]=[-r,-a];[i,n]=[-n,-i];break;default:[a,r]=applyInverseRotation(a,r,t);[i,n]=applyInverseRotation(i,n,y.prevTransform)}if(M.font.vertical){const e=(n-r)/y.textAdvanceScale,t=a-i,s=Math.sign(y.height);if(e<s*y.negativeSpaceMax){if(Math.abs(\ -t)>.5*y.width){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(t)>y.width){appendEOL();return!0}e<=s*y.notASpace&&resetLastChars();if(e<=s*y.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({height:Math.abs(e)})}else y.height+=e;else if(!addFakeSpaces(e,y.prevTransform,s))if(0===y.str.length){resetLastChars();pushWhitespace({height:Math.abs(e)})}else y.height+=e;Math.abs(t)>.25*y.width&&flushTextContentItem();retu\ -rn!0}const o=(a-i)/y.textAdvanceScale,l=r-n,h=Math.sign(y.width);if(o<h*y.negativeSpaceMax){if(Math.abs(l)>.5*y.height){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(l)>y.height){appendEOL();return!0}o<=h*y.notASpace&&resetLastChars();if(o<=h*y.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({width:Math.abs(o)})}else y.width+=o;else if(!addFakeSpaces(o,y.prevTransform,h))if(0===y.str.length){resetLastChars();pu\ -shWhitespace({width:Math.abs(o)})}else y.width+=o;Math.abs(l)>.25*y.height&&flushTextContentItem();return!0}function buildTextContentItem({chars:e,extraSpacing:t}){const a=M.font;if(!e){const e=M.charSpacing+t;e&&(a.vertical?M.translateTextMatrix(0,-e):M.translateTextMatrix(e*M.textHScale,0));d&&compareWithLastPosition(0);return}const r=a.charsToGlyphs(e),i=M.fontMatrix[0]*M.fontSize;for(let e=0,n=r.length;e<n;e++){const s=r[e],{category:o}=s;if(o.isInvisibleFormatMark)continue;let c=M.charSpaci\ -ng+(e+1===n?t:0),l=s.width;a.vertical&&(l=s.vmetric?s.vmetric[0]:-l);let h=l*i;if(!d&&o.isWhitespace){if(a.vertical){c+=-h+M.wordSpacing;M.translateTextMatrix(0,-c)}else{c+=h+M.wordSpacing;M.translateTextMatrix(c*M.textHScale,0)}saveLastChar(" ");continue}if(!o.isZeroWidthDiacritic&&!compareWithLastPosition(h)){a.vertical?M.translateTextMatrix(0,h):M.translateTextMatrix(h*M.textHScale,0);continue}const u=ensureTextContentItem();o.isZeroWidthDiacritic&&(h=0);if(a.vertical){g?.addGlyph(getCurrentT\ -extTransform(),0,h,s.unicode);M.translateTextMatrix(0,h);h=Math.abs(h);u.height+=h}else{h*=M.textHScale;g?.addGlyph(getCurrentTextTransform(),h,0,s.unicode);M.translateTextMatrix(h,0);u.width+=h}h&&(u.prevTransform=getCurrentTextTransform());const f=s.unicode;if(saveLastChar(f)){u.str.push(" ");g?.addExtraChar(" ")}g||u.str.push(f);c&&(a.vertical?M.translateTextMatrix(0,-c):M.translateTextMatrix(c*M.textHScale,0))}}function appendEOL(){g?.addExtraChar("\\n");resetLastChars();if(y.initialized){y.h\ -asEOL=!0;flushTextContentItem()}else b.items.push({str:"",dir:"ltr",width:0,height:0,transform:getCurrentTextTransform(),fontName:M.loadedName,hasEOL:!0})}function addFakeSpaces(e,t,a){if(a*y.spaceInFlowMin<=e&&e<=a*y.spaceInFlowMax){if(y.initialized){resetLastChars();y.str.push(" ");g?.addExtraChar(" ")}return!1}const r=y.fontName;let i=0;if(y.vertical){i=e;e=0}flushTextContentItem();resetLastChars();pushWhitespace({width:Math.abs(e),height:Math.abs(i),transform:t||getCurrentTextTransform(),fon\ -tName:r});return!0}function flushTextContentItem(){if(y.initialized&&y.str){y.vertical?y.totalHeight+=y.height*y.textAdvanceScale:y.totalWidth+=y.width*y.textAdvanceScale;b.items.push(runBidiTransform(y));y.initialized=!1;y.str.length=0}}function enqueueChunk(e=!1){const t=b.items.length;if(0!==t&&!(e&&t<10)){s?.enqueue(b,t);b.items=[];b.styles=Object.create(null)}}const D=new TimeSlotManager;return new Promise((function promiseBody(e,t){const next=function(a){enqueueChunk(!0);Promise.all([a,s?.\ -ready]).then((function(){try{promiseBody(e,t)}catch(e){t(e)}}),t)};a.ensureNotTerminated();D.reset();const f={};let g,p,y,w=[];for(;!(g=D.check());){w.length=0;f.args=w;if(!O.read(f))break;const e=M;M=i.state;const t=f.fn;w=f.args;switch(0|t){case nt:const t=w[0].name,f=w[1];if(M.font&&t===M.fontName&&f===M.fontSize)break;flushTextContentItem();M.fontName=t;M.fontSize=f;next(handleSetFont(t,null));return;case ot:M.textRise=w[0];break;case rt:M.textHScale=w[0]/100;break;case it:M.leading=w[0];bre\ -ak;case ct:M.translateTextLineMatrix(w[0],w[1]);M.textMatrix=M.textLineMatrix.slice();break;case lt:M.leading=-w[1];M.translateTextLineMatrix(w[0],w[1]);M.textMatrix=M.textLineMatrix.slice();break;case ut:M.carriageReturn();break;case ht:M.setTextMatrix(w[0],w[1],w[2],w[3],w[4],w[5]);M.setTextLineMatrix(w[0],w[1],w[2],w[3],w[4],w[5]);updateAdvanceScale();break;case tt:M.charSpacing=w[0];break;case at:M.wordSpacing=w[0];break;case Qe:M.textMatrix=Fa.slice();M.textLineMatrix=Fa.slice();break;case \ -ft:if(!i.state.font){S.ensureStateFont(i.state);continue}const g=(M.font.vertical?1:-1)*M.fontSize/1e3,x=w[0];for(let e=0,t=x.length;e<t;e++){const t=x[e];if("string"==typeof t)C.push(t);else if("number"==typeof t&&0!==t){const e=C.join("");C.length=0;buildTextContentItem({chars:e,extraSpacing:t*g})}}if(C.length>0){const e=C.join("");C.length=0;buildTextContentItem({chars:e,extraSpacing:0})}break;case dt:if(!i.state.font){S.ensureStateFont(i.state);continue}buildTextContentItem({chars:w[0],extra\ -Spacing:0});break;case gt:if(!i.state.font){S.ensureStateFont(i.state);continue}M.carriageReturn();buildTextContentItem({chars:w[0],extraSpacing:0});break;case pt:if(!i.state.font){S.ensureStateFont(i.state);continue}M.wordSpacing=w[0];M.charSpacing=w[1];M.carriageReturn();buildTextContentItem({chars:w[2],extraSpacing:0});break;case Nt:flushTextContentItem();v??=r.get("XObject")||Dict.empty;y=w[0]instanceof Name;p=w[0].name;if(y&&F.getByName(p))break;next(new Promise((function(e,t){if(!y)throw n\ -ew FormatError("XObject must be referred to by name.");let f=v.getRaw(p);if(f instanceof Ref){if(F.getByRef(f)){e();return}if(S.globalImageCache.getData(f,S.pageIndex)){e();return}f=k.fetch(f)}if(!(f instanceof BaseStream))throw new FormatError("XObject should be a stream");const{dict:g}=f,b=g.get("Subtype");if(!(b instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==b.name){F.set(p,g.objId,!0);e();return}const w=i.state.clone(),x=new StateManager(w),C=lookupM\ -atrix(g.getArray("Matrix"),null);C&&x.transform(C);const T=g.get("Resources");enqueueChunk();const O={enqueueInvoked:!1,enqueue(e,t){this.enqueueInvoked=!0;s.enqueue(e,t)},get desiredSize(){return s.desiredSize??0},get ready(){return s.ready}};S.getTextContent({stream:f,task:a,resources:T instanceof Dict?T:r,stateManager:x,includeMarkedContent:n,sink:s&&O,seenStyles:o,viewBox:c,lang:l,markedContentData:h,disableNormalization:u,keepWhiteSpace:d,prevRefs:m}).then((function(){O.enqueueInvoked||F.se\ -t(p,g.objId,!0);e()}),t)})).catch((function(e){if(!(e instanceof AbortException)){if(!S.options.ignoreErrors)throw e;warn(`getTextContent - ignoring XObject: "${e}".`)}})));return;case De:y=w[0]instanceof Name;p=w[0].name;if(y&&T.getByName(p))break;next(new Promise((function(e,t){if(!y)throw new FormatError("GState must be referred to by name.");const a=r.get("ExtGState");if(!(a instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const i=a.get(p);if(!(i instanceof Dict))t\ -hrow new FormatError("GState should be a dictionary.");const n=i.get("Font");if(n){flushTextContentItem();M.fontName=null;M.fontSize=n[1];handleSetFont(null,n[0]).then(e,t)}else{T.set(p,i.objId,!0);e()}})).catch((function(e){if(!(e instanceof AbortException)){if(!S.options.ignoreErrors)throw e;warn(`getTextContent - ignoring ExtGState: "${e}".`)}})));return;case Lt:flushTextContentItem();if(n){h.level++;b.items.push({type:"beginMarkedContent",tag:w[0]instanceof Name?w[0].name:null})}break;case j\ -t:flushTextContentItem();if(n){h.level++;let e=null;w[1]instanceof Dict&&(e=w[1].get("MCID"));b.items.push({type:"beginMarkedContentProps",id:Number.isInteger(e)?`${S.idFactory.getPageObjId()}_mc${e}`:null,tag:w[0]instanceof Name?w[0].name:null})}break;case _t:flushTextContentItem();if(n){if(0===h.level)break;h.level--;b.items.push({type:"endMarkedContent"})}break;case Re:!e||e.font===M.font&&e.fontSize===M.fontSize&&e.fontName===M.fontName||flushTextContentItem()}if(b.items.length>=(s?.desiredS\ -ize??1)){g=!0;break}}if(g)next(En);else{flushTextContentItem();enqueueChunk();e()}})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getTextContent - ignoring errors during "${a.name}" task: "${e}".`);flushTextContentItem();enqueueChunk()}}))}async extractDataStructures(e,t){const a=this.xref;let r;const i=this.readToUnicode(t.toUnicode);if(t.composite){const a=e.get("CIDSystemInfo");a instanceof Dict&&(t.cidSystemInfo={registry:stringToPDFString(a.get(\ -"Registry")),ordering:stringToPDFString(a.get("Ordering")),supplement:a.get("Supplement")});try{const t=e.get("CIDToGIDMap");t instanceof BaseStream&&(r=t.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;warn(`extractDataStructures - ignoring CIDToGIDMap data: "${e}".`)}}const n=[];let s,o=null;if(e.has("Encoding")){s=e.get("Encoding");if(s instanceof Dict){o=s.get("BaseEncoding");o=o instanceof Name?o.name:null;if(s.has("Differences")){const e=s.get("Differences");let t=0;for(const r \ -of e){const e=a.fetchIfRef(r);if("number"==typeof e)t=e;else{if(!(e instanceof Name))throw new FormatError(`Invalid entry in \'Differences\' array: ${e}`);n[t++]=e.name}}}}else if(s instanceof Name)o=s.name;else{const e="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new FormatError(e);warn(e)}"MacRomanEncoding"!==o&&"MacExpertEncoding"!==o&&"WinAnsiEncoding"!==o&&(o=null)}const c=!t.file||t.isInternalFont,l=ei()[t.name];o&&c&&l&&(o=null);if(o)t.defaultEncoding=getEncoding(\ -o);else{const e=!!(t.flags&Pr),a=!!(t.flags&Lr);s=Ar;"TrueType"!==t.type||a||(s=kr);if(e||l){s=Sr;c&&(/Symbol/i.test(t.name)?s=Cr:/Dingbats/i.test(t.name)?s=vr:/Wingdings/i.test(t.name)&&(s=kr))}t.defaultEncoding=s}t.differences=n;t.baseEncodingName=o;t.hasEncoding=!!o||n.length>0;t.dict=e;t.toUnicode=await i;const h=await this.buildToUnicode(t);t.toUnicode=h;r&&(t.cidToGidMap=this.readCidToGidMap(r,h));return t}_simpleFontToUnicode(e,t=!1){assert(!e.composite,"Must be a simple font.");const a=[\ -],r=e.defaultEncoding.slice(),i=e.baseEncodingName,n=e.differences;for(const e in n){const t=n[e];".notdef"!==t&&(r[e]=t)}const s=Fr();for(const n in r){let o=r[n];if(""===o)continue;let c=s[o];if(void 0!==c){a[n]=String.fromCharCode(c);continue}let l=0;switch(o[0]){case"G":3===o.length&&(l=parseInt(o.substring(1),16));break;case"g":5===o.length&&(l=parseInt(o.substring(1),16));break;case"C":case"c":if(o.length>=3&&o.length<=4){const a=o.substring(1);if(t){l=parseInt(a,16);break}l=+a;if(Number.i\ -sNaN(l)&&Number.isInteger(parseInt(a,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":c=getUnicodeForGlyph(o,s);-1!==c&&(l=c);break;default:switch(o){case"f_h":case"f_t":case"T_h":a[n]=o.replaceAll("_","");continue}}if(l>0&&l<=1114111&&Number.isInteger(l)){if(i&&l===+n){const e=getEncoding(i);if(e&&(o=e[n])){a[n]=String.fromCharCode(s[o]);continue}}a[n]=String.fromCodePoint(l)}}return a}async buildToUnicode(e){e.hasIncludedToUnicodeMap=e.toUnicode?.length>0;if(e.hasIncludedToUnicodeMap)\ -{!e.composite&&e.hasEncoding&&(e.fallbackToUnicode=this._simpleFontToUnicode(e));return e.toUnicode}if(!e.composite)return new ToUnicodeMap(this._simpleFontToUnicode(e));if(e.composite&&(e.cMap.builtInCMap&&!(e.cMap instanceof IdentityCMap)||"Adobe"===e.cidSystemInfo?.registry&&("GB1"===e.cidSystemInfo.ordering||"CNS1"===e.cidSystemInfo.ordering||"Japan1"===e.cidSystemInfo.ordering||"Korea1"===e.cidSystemInfo.ordering))){const{registry:t,ordering:a}=e.cidSystemInfo,r=Name.get(`${t}-${a}-UCS2`),i\ -=await CMapFactory.create({encoding:r,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),n=[],s=[];e.cMap.forEach((function(e,t){if(t>65535)throw new FormatError("Max size of CID is 65,535");const a=i.lookup(t);if(a){s.length=0;for(let e=0,t=a.length;e<t;e+=2)s.push((a.charCodeAt(e)<<8)+a.charCodeAt(e+1));n[e]=String.fromCharCode(...s)}}));return new ToUnicodeMap(n)}return new IdentityToUnicodeMap(e.firstChar,e.lastChar)}async readToUnicode(e){if(!e)return null;if(e instanceof Name){con\ -st t=await CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});return t instanceof IdentityCMap?new IdentityToUnicodeMap(0,65535):new ToUnicodeMap(t.getMap())}if(e instanceof BaseStream)try{const t=await CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});if(t instanceof IdentityCMap)return new IdentityToUnicodeMap(0,65535);const a=new Array(t.length);t.forEach((function(e,t){if("number"==typeof t){a[e]=String.fromCode\ -Point(t);return}t.length%2!=0&&(t="\\0"+t);const r=[];for(let e=0;e<t.length;e+=2){const a=t.charCodeAt(e)<<8|t.charCodeAt(e+1);if(55296!=(63488&a)){r.push(a);continue}e+=2;const i=t.charCodeAt(e)<<8|t.charCodeAt(e+1);r.push(((1023&a)<<10)+(1023&i)+65536)}a[e]=String.fromCodePoint(...r)}));return new ToUnicodeMap(a)}catch(e){if(e instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`readToUnicode - ignoring ToUnicode data: "${e}".`);return null}throw e}return null}readCidToGid\ -Map(e,t){const a=[];for(let r=0,i=e.length;r<i;r++){const i=e[r++]<<8|e[r],n=r>>1;(0!==i||t.has(n))&&(a[n]=i)}return a}extractWidths(e,t,a){const r=this.xref;let i=[],n=0;const s=[];let o;if(a.composite){const t=e.get("DW");n="number"==typeof t?Math.ceil(t):1e3;const c=e.get("W");if(Array.isArray(c))for(let e=0,t=c.length;e<t;e++){let t=r.fetchIfRef(c[e++]);if(!Number.isInteger(t))break;const a=r.fetchIfRef(c[e]);if(Array.isArray(a))for(const e of a){const a=r.fetchIfRef(e);"number"==typeof a&&(\ -i[t]=a);t++}else{if(!Number.isInteger(a))break;{const n=r.fetchIfRef(c[++e]);if("number"!=typeof n)continue;for(let e=t;e<=a;e++)i[e]=n}}}if(a.vertical){const t=e.getArray("DW2");let a=isNumberArray(t,2)?t:[880,-1e3];o=[a[1],.5*n,a[0]];a=e.get("W2");if(Array.isArray(a))for(let e=0,t=a.length;e<t;e++){let t=r.fetchIfRef(a[e++]);if(!Number.isInteger(t))break;const i=r.fetchIfRef(a[e]);if(Array.isArray(i))for(let e=0,a=i.length;e<a;e++){const a=[r.fetchIfRef(i[e++]),r.fetchIfRef(i[e++]),r.fetchIfRe\ -f(i[e])];isNumberArray(a,null)&&(s[t]=a);t++}else{if(!Number.isInteger(i))break;{const n=[r.fetchIfRef(a[++e]),r.fetchIfRef(a[++e]),r.fetchIfRef(a[++e])];if(!isNumberArray(n,null))continue;for(let e=t;e<=i;e++)s[e]=n}}}}}else{const s=e.get("Widths");if(Array.isArray(s)){let e=a.firstChar;for(const t of s){const a=r.fetchIfRef(t);"number"==typeof a&&(i[e]=a);e++}const o=t.get("MissingWidth");n="number"==typeof o?o:0}else{const t=e.get("BaseFont");if(t instanceof Name){const e=this.getBaseFontMetr\ -ics(t.name);i=this.buildCharCodeToWidth(e.widths,a);n=e.defaultWidth}}}let c=!0,l=n;for(const e in i){const t=i[e];if(t)if(l){if(l!==t){c=!1;break}}else l=t}c?a.flags|=Nr:a.flags&=~Nr;a.defaultWidth=n;a.widths=i;a.defaultVMetrics=o;a.vmetrics=s}isSerifFont(e){const t=e.split("-",1)[0];return t in Qr()||/serif/gi.test(t)}getBaseFontMetrics(e){let t=0,a=Object.create(null),r=!1;let i=Jr()[e]||e;const n=ii();i in n||(i=this.isSerifFont(e)?"Times-Roman":"Helvetica");const s=n[i];if("number"==typeof \ -s){t=s;r=!0}else a=s();return{defaultWidth:t,monospace:r,widths:a}}buildCharCodeToWidth(e,t){const a=Object.create(null),r=t.differences,i=t.defaultEncoding;for(let t=0;t<256;t++)t in r&&e[r[t]]?a[t]=e[r[t]]:t in i&&e[i[t]]&&(a[t]=e[i[t]]);return a}preEvaluateFont(e){const t=e;let a=e.get("Subtype");if(!(a instanceof Name))throw new FormatError("invalid font Subtype");let r,i=!1;if("Type0"===a.name){const t=e.get("DescendantFonts");if(!t)throw new FormatError("Descendant fonts are not specified"\ -);if(!((e=Array.isArray(t)?this.xref.fetchIfRef(t[0]):t)instanceof Dict))throw new FormatError("Descendant font is not a dictionary.");a=e.get("Subtype");if(!(a instanceof Name))throw new FormatError("invalid font Subtype");i=!0}let n=e.get("FirstChar");Number.isInteger(n)||(n=0);let s=e.get("LastChar");Number.isInteger(s)||(s=i?65535:255);const o=e.get("FontDescriptor"),c=e.get("ToUnicode")||t.get("ToUnicode");if(o){r=new MurmurHash3_64;const a=t.getRaw("Encoding");if(a instanceof Name)r.update\ -(a.name);else if(a instanceof Ref)r.update(a.toString());else if(a instanceof Dict)for(const e of a.getRawValues())if(e instanceof Name)r.update(e.name);else if(e instanceof Ref)r.update(e.toString());else if(Array.isArray(e)){const t=e.length,a=new Array(t);for(let r=0;r<t;r++){const t=e[r];t instanceof Name?a[r]=t.name:("number"==typeof t||t instanceof Ref)&&(a[r]=t.toString())}r.update(a.join())}r.update(`${n}-${s}`);if(c instanceof BaseStream){const e=c.str||c,t=e.buffer?new Uint8Array(e.buf\ -fer.buffer,0,e.bufferLength):new Uint8Array(e.bytes.buffer,e.start,e.end-e.start);r.update(t)}else c instanceof Name&&r.update(c.name);const o=e.get("Widths")||t.get("Widths");if(Array.isArray(o)){const e=[];for(const t of o)("number"==typeof t||t instanceof Ref)&&e.push(t.toString());r.update(e.join())}if(i){r.update("compositeFont");const a=e.get("W")||t.get("W");if(Array.isArray(a)){const e=[];for(const t of a)if("number"==typeof t||t instanceof Ref)e.push(t.toString());else if(Array.isArray(\ -t)){const a=[];for(const e of t)("number"==typeof e||e instanceof Ref)&&a.push(e.toString());e.push(`[${a.join()}]`)}r.update(e.join())}const i=e.getRaw("CIDToGIDMap")||t.getRaw("CIDToGIDMap");i instanceof Name?r.update(i.name):i instanceof Ref?r.update(i.toString()):i instanceof BaseStream&&r.update(i.peekBytes())}}return{descriptor:o,dict:e,baseDict:t,composite:i,type:a.name,firstChar:n,lastChar:s,toUnicode:c,hash:r?r.hexdigest():""}}async translateFont({descriptor:e,dict:a,baseDict:r,composit\ -e:i,type:n,firstChar:s,lastChar:o,toUnicode:c,cssFontInfo:l}){const h="Type3"===n;if(!e){if(!h){let e=a.get("BaseFont");if(!(e instanceof Name))throw new FormatError("Base font is not specified");e=e.name.replaceAll(/[,_]/g,"-");const t=this.getBaseFontMetrics(e),i=e.split("-",1)[0],l=(this.isSerifFont(i)?Er:0)|(t.monospace?Nr:0)|(ei()[i]?Pr:Lr),u={type:n,name:e,loadedName:r.loadedName,systemFontInfo:null,widths:t.widths,defaultWidth:t.defaultWidth,isSimulatedFlags:!0,flags:l,firstChar:s,lastCha\ -r:o,toUnicode:c,xHeight:0,capHeight:0,italicAngle:0,isType3Font:h},d=a.get("Widths"),f=getStandardFontName(e);let g=null;if(f){g=await this.fetchStandardFontData(f);u.isInternalFont=!!g}!u.isInternalFont&&this.options.useSystemFonts&&(u.systemFontInfo=getFontSubstitution(this.systemFontCache,this.idFactory,this.options.standardFontDataUrl,e,f,n));const p=await this.extractDataStructures(a,u);if(Array.isArray(d)){const e=[];let t=s;for(const a of d){const r=this.xref.fetchIfRef(a);"number"==typeo\ -f r&&(e[t]=r);t++}p.widths=e}else p.widths=this.buildCharCodeToWidth(t.widths,p);return new Font(e,g,p,this.options)}e=Dict.empty}let u=e.get("FontName"),d=a.get("BaseFont");"string"==typeof u&&(u=Name.get(u));"string"==typeof d&&(d=Name.get(d));const f=u?.name,g=d?.name;if(h)f||(u=Name.get(n));else if(f!==g){info(`The FontDescriptor\'s FontName is "${f}" but should be the same as the Font\'s BaseFont "${g}".`);f&&g&&(g.startsWith(f)||!isKnownFontName(f)&&isKnownFontName(g))&&(u=null);u||=d}if(!(u\ - instanceof Name))throw new FormatError("invalid font name");let p,m,b,y,w;try{p=e.get("FontFile","FontFile2","FontFile3");if(p){if(!(p instanceof BaseStream))throw new FormatError("FontFile should be a stream");if(p.isEmpty)throw new FormatError("FontFile is empty")}}catch(e){if(!this.options.ignoreErrors)throw e;warn(`translateFont - fetching "${u.name}" font file: "${e}".`);p=null}let x=!1,S=null,k=null;if(p){if(p.dict){const e=p.dict.get("Subtype");e instanceof Name&&(m=e.name);b=p.dict.get(\ -"Length1");y=p.dict.get("Length2");w=p.dict.get("Length3")}}else if(l){const e=getXfaFontName(u.name);if(e){l.fontFamily=`${l.fontFamily}-PdfJS-XFA`;l.metrics=e.metrics||null;S=e.factors||null;p=await this.fetchStandardFontData(e.name);x=!!p;r=a=getXfaFontDict(u.name);i=!0}}else if(!h){const e=getStandardFontName(u.name);if(e){p=await this.fetchStandardFontData(e);x=!!p}!x&&this.options.useSystemFonts&&(k=getFontSubstitution(this.systemFontCache,this.idFactory,this.options.standardFontDataUrl,u.\ -name,e,n))}const C=lookupMatrix(a.getArray("FontMatrix"),t),v=lookupNormalRect(e.getArray("FontBBox")||a.getArray("FontBBox"),h?[0,0,0,0]:void 0);let F=e.get("Ascent");"number"!=typeof F&&(F=void 0);let T=e.get("Descent");"number"!=typeof T&&(T=void 0);let O=e.get("XHeight");"number"!=typeof O&&(O=0);let M=e.get("CapHeight");"number"!=typeof M&&(M=0);let D=e.get("Flags");Number.isInteger(D)||(D=0);let R=e.get("ItalicAngle");"number"!=typeof R&&(R=0);const N={type:n,name:u.name,subtype:m,file:p,l\ -ength1:b,length2:y,length3:w,isInternalFont:x,loadedName:r.loadedName,composite:i,fixedPitch:!1,fontMatrix:C,firstChar:s,lastChar:o,toUnicode:c,bbox:v,ascent:F,descent:T,xHeight:O,capHeight:M,flags:D,italicAngle:R,isType3Font:h,cssFontInfo:l,scaleFactors:S,systemFontInfo:k};if(i){const e=r.get("Encoding");e instanceof Name&&(N.cidEncoding=e.name);const t=await CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});N.cMap=t;N.vertical=N.cMap.vertical}const E=aw\ -ait this.extractDataStructures(a,N);this.extractWidths(a,e,E);return new Font(u.name,p,E,this.options)}static buildFontPaths(e,t,a,r){function buildPath(t){const i=`${e.loadedName}_path_${t}`;try{if(e.renderer.hasBuiltPath(t))return;a.send("commonobj",[i,"FontPath",e.renderer.getPathJs(t)])}catch(e){if(r.ignoreErrors){warn(`buildFontPaths - ignoring ${i} glyph: "${e}".`);return}throw e}}for(const e of t){buildPath(e.fontChar);const t=e.accent;t?.fontChar&&buildPath(t.fontChar)}}static get fallba\ -ckFontDict(){const e=new Dict;e.set("BaseFont",Name.get("Helvetica"));e.set("Type",Name.get("FallbackType"));e.set("Subtype",Name.get("FallbackType"));e.set("Encoding",Name.get("WinAnsiEncoding"));return shadow(this,"fallbackFontDict",e)}}class TranslatedFont{#G=!1;#V=null;constructor({loadedName:e,font:t,dict:a}){this.loadedName=e;this.font=t;this.dict=a;this.type3Dependencies=t.isType3Font?new Set:null}send(e){if(!this.#G){this.#G=!0;e.send("commonobj",[this.loadedName,"Font",this.font.exportD\ -ata()])}}fallback(e,t){if(this.font.data){this.font.disableFontFace=!0;PartialEvaluator.buildFontPaths(this.font,this.font.glyphCacheValues,e,t)}}loadType3Data(e,t,a){if(this.#V)return this.#V;const{font:r,type3Dependencies:i}=this;assert(r.isType3Font,"Must be a Type3 font.");const n=e.clone({ignoreErrors:!1}),s=new RefSet(e.type3FontRefs);this.dict.objId&&!s.has(this.dict.objId)&&s.put(this.dict.objId);n.type3FontRefs=s;let o=Promise.resolve();const c=this.dict.get("CharProcs"),l=this.dict.get\ -("Resources")||t,h=Object.create(null),[u,d,f,g]=r.bbox,p=f-u,m=g-d,b=Math.hypot(p,m);for(const e of c.getKeys())o=o.then((()=>{const t=c.get(e),r=new OperatorList;return n.getOperatorList({stream:t,task:a,resources:l,operatorList:r}).then((()=>{switch(r.fnArray[0]){case bt:this.#K(r,b);break;case mt:b||this.#J(r)}h[e]=r.getIR();for(const e of r.dependencies)i.add(e)})).catch((function(t){warn(`Type3 font resource "${e}" is not available.`);const a=new OperatorList;h[e]=a.getIR()}))}));this.#V=o\ -.then((()=>{r.charProcOperatorList=h;if(this._bbox){r.isCharBBox=!0;r.bbox=this._bbox}}));return this.#V}#K(e,t=NaN){const a=Util.normalizeRect(e.argsArray[0].slice(2)),r=a[2]-a[0],i=a[3]-a[1],n=Math.hypot(r,i);if(0===r||0===i){e.fnArray.splice(0,1);e.argsArray.splice(0,1)}else if(0===t||Math.round(n/t)>=10){this._bbox??=[1/0,1/0,-1/0,-1/0];Util.rectBoundingBox(...a,this._bbox)}let s=0,o=e.length;for(;s<o;){switch(e.fnArray[s]){case bt:break;case yt:case wt:case xt:case St:case At:case kt:case C\ -t:case vt:case Ft:case It:case Tt:case Ot:case Mt:case Oe:e.fnArray.splice(s,1);e.argsArray.splice(s,1);o--;continue;case De:const[t]=e.argsArray[s];let a=0,r=t.length;for(;a<r;){const[e]=t[a];switch(e){case"TR":case"TR2":case"HT":case"BG":case"BG2":case"UCR":case"UCR2":t.splice(a,1);r--;continue}a++}}s++}}#J(e){let t=1;const a=e.length;for(;t<a;){if(e.fnArray[t]===aa){const a=e.argsArray[t][2];this._bbox??=[1/0,1/0,-1/0,-1/0];Util.rectBoundingBox(...a,this._bbox)}t++}}}class StateManager{constr\ -uctor(e=new EvalState){this.state=e;this.stateStack=[]}save(){const e=this.state;this.stateStack.push(this.state);this.state=e.clone()}restore(){const e=this.stateStack.pop();e&&(this.state=e)}transform(e){this.state.ctm=Util.transform(this.state.ctm,e)}}class TextState{constructor(){this.ctm=new Float32Array(Fa);this.fontName=null;this.fontSize=0;this.loadedName=null;this.font=null;this.fontMatrix=t;this.textMatrix=Fa.slice();this.textLineMatrix=Fa.slice();this.charSpacing=0;this.wordSpacing=0;\ -this.leading=0;this.textHScale=1;this.textRise=0}setTextMatrix(e,t,a,r,i,n){const s=this.textMatrix;s[0]=e;s[1]=t;s[2]=a;s[3]=r;s[4]=i;s[5]=n}setTextLineMatrix(e,t,a,r,i,n){const s=this.textLineMatrix;s[0]=e;s[1]=t;s[2]=a;s[3]=r;s[4]=i;s[5]=n}translateTextMatrix(e,t){const a=this.textMatrix;a[4]=a[0]*e+a[2]*t+a[4];a[5]=a[1]*e+a[3]*t+a[5]}translateTextLineMatrix(e,t){const a=this.textLineMatrix;a[4]=a[0]*e+a[2]*t+a[4];a[5]=a[1]*e+a[3]*t+a[5]}carriageReturn(){this.translateTextLineMatrix(0,-this.l\ -eading);this.textMatrix=this.textLineMatrix.slice()}clone(){const e=Object.create(this);e.textMatrix=this.textMatrix.slice();e.textLineMatrix=this.textLineMatrix.slice();e.fontMatrix=this.fontMatrix.slice();return e}}class EvalState{constructor(){this.ctm=new Float32Array(Fa);this.font=null;this.textRenderingMode=x;this._fillColorSpace=this._strokeColorSpace=ColorSpaceUtils.gray;this.patternFillColorSpace=null;this.patternStrokeColorSpace=null;this.currentPointX=this.currentPointY=0;this.pathMin\ -Max=new Float32Array([1/0,1/0,-1/0,-1/0]);this.pathBuffer=[]}get fillColorSpace(){return this._fillColorSpace}set fillColorSpace(e){this._fillColorSpace=this.patternFillColorSpace=e}get strokeColorSpace(){return this._strokeColorSpace}set strokeColorSpace(e){this._strokeColorSpace=this.patternStrokeColorSpace=e}clone({newPath:e=!1}={}){const t=Object.create(this);if(e){t.pathBuffer=[];t.pathMinMax=new Float32Array([1/0,1/0,-1/0,-1/0])}return t}}class EvaluatorPreprocessor{static get opMap(){retu\ -rn shadow(this,"opMap",Object.assign(Object.create(null),{w:{id:Ce,numArgs:1,variableArgs:!1},J:{id:ve,numArgs:1,variableArgs:!1},j:{id:Fe,numArgs:1,variableArgs:!1},M:{id:Ie,numArgs:1,variableArgs:!1},d:{id:Te,numArgs:2,variableArgs:!1},ri:{id:Oe,numArgs:1,variableArgs:!1},i:{id:Me,numArgs:1,variableArgs:!1},gs:{id:De,numArgs:1,variableArgs:!1},q:{id:Be,numArgs:0,variableArgs:!1},Q:{id:Re,numArgs:0,variableArgs:!1},cm:{id:Ne,numArgs:6,variableArgs:!1},m:{id:Ee,numArgs:2,variableArgs:!1},l:{id:P\ -e,numArgs:2,variableArgs:!1},c:{id:Le,numArgs:6,variableArgs:!1},v:{id:je,numArgs:4,variableArgs:!1},y:{id:_e,numArgs:4,variableArgs:!1},h:{id:Ue,numArgs:0,variableArgs:!1},re:{id:Xe,numArgs:4,variableArgs:!1},S:{id:qe,numArgs:0,variableArgs:!1},s:{id:He,numArgs:0,variableArgs:!1},f:{id:We,numArgs:0,variableArgs:!1},F:{id:We,numArgs:0,variableArgs:!1},"f*":{id:ze,numArgs:0,variableArgs:!1},B:{id:$e,numArgs:0,variableArgs:!1},"B*":{id:Ge,numArgs:0,variableArgs:!1},b:{id:Ve,numArgs:0,variableArgs:\ -!1},"b*":{id:Ke,numArgs:0,variableArgs:!1},n:{id:Je,numArgs:0,variableArgs:!1},W:{id:Ye,numArgs:0,variableArgs:!1},"W*":{id:Ze,numArgs:0,variableArgs:!1},BT:{id:Qe,numArgs:0,variableArgs:!1},ET:{id:et,numArgs:0,variableArgs:!1},Tc:{id:tt,numArgs:1,variableArgs:!1},Tw:{id:at,numArgs:1,variableArgs:!1},Tz:{id:rt,numArgs:1,variableArgs:!1},TL:{id:it,numArgs:1,variableArgs:!1},Tf:{id:nt,numArgs:2,variableArgs:!1},Tr:{id:st,numArgs:1,variableArgs:!1},Ts:{id:ot,numArgs:1,variableArgs:!1},Td:{id:ct,num\ -Args:2,variableArgs:!1},TD:{id:lt,numArgs:2,variableArgs:!1},Tm:{id:ht,numArgs:6,variableArgs:!1},"T*":{id:ut,numArgs:0,variableArgs:!1},Tj:{id:dt,numArgs:1,variableArgs:!1},TJ:{id:ft,numArgs:1,variableArgs:!1},"\'":{id:gt,numArgs:1,variableArgs:!1},\'"\':{id:pt,numArgs:3,variableArgs:!1},d0:{id:mt,numArgs:2,variableArgs:!1},d1:{id:bt,numArgs:6,variableArgs:!1},CS:{id:yt,numArgs:1,variableArgs:!1},cs:{id:wt,numArgs:1,variableArgs:!1},SC:{id:xt,numArgs:4,variableArgs:!0},SCN:{id:St,numArgs:33,variab\ -leArgs:!0},sc:{id:At,numArgs:4,variableArgs:!0},scn:{id:kt,numArgs:33,variableArgs:!0},G:{id:Ct,numArgs:1,variableArgs:!1},g:{id:vt,numArgs:1,variableArgs:!1},RG:{id:Ft,numArgs:3,variableArgs:!1},rg:{id:It,numArgs:3,variableArgs:!1},K:{id:Tt,numArgs:4,variableArgs:!1},k:{id:Ot,numArgs:4,variableArgs:!1},sh:{id:Mt,numArgs:1,variableArgs:!1},BI:{id:Dt,numArgs:0,variableArgs:!1},ID:{id:Bt,numArgs:0,variableArgs:!1},EI:{id:Rt,numArgs:1,variableArgs:!1},Do:{id:Nt,numArgs:1,variableArgs:!1},MP:{id:Et,\ -numArgs:1,variableArgs:!1},DP:{id:Pt,numArgs:2,variableArgs:!1},BMC:{id:Lt,numArgs:1,variableArgs:!1},BDC:{id:jt,numArgs:2,variableArgs:!1},EMC:{id:_t,numArgs:0,variableArgs:!1},BX:{id:Ut,numArgs:0,variableArgs:!1},EX:{id:Xt,numArgs:0,variableArgs:!1},BM:null,BD:null,true:null,fa:null,fal:null,fals:null,false:null,nu:null,nul:null,null:null}))}static MAX_INVALID_PATH_OPS=10;constructor(e,t,a=new StateManager){this.parser=new Parser({lexer:new Lexer(e,EvaluatorPreprocessor.opMap),xref:t});this.st\ -ateManager=a;this.nonProcessedArgs=[];this._isPathOp=!1;this._numInvalidPathOPS=0}get savedStatesDepth(){return this.stateManager.stateStack.length}read(e){let t=e.args;for(;;){const a=this.parser.getObj();if(a instanceof Cmd){const r=a.cmd,i=EvaluatorPreprocessor.opMap[r];if(!i){warn(`Unknown command "${r}".`);continue}const n=i.id,s=i.numArgs;let o=null!==t?t.length:0;this._isPathOp||(this._numInvalidPathOPS=0);this._isPathOp=n>=Ee&&n<=Je;if(i.variableArgs)o>s&&info(`Command ${r}: expected [0,\ - ${s}] args, but received ${o} args.`);else{if(o!==s){const e=this.nonProcessedArgs;for(;o>s;){e.push(t.shift());o--}for(;o<s&&0!==e.length;){null===t&&(t=[]);t.unshift(e.pop());o++}}if(o<s){const e=`command ${r}: expected ${s} args, but received ${o} args.`;if(this._isPathOp&&++this._numInvalidPathOPS>EvaluatorPreprocessor.MAX_INVALID_PATH_OPS)throw new FormatError(`Invalid ${e}`);warn(`Skipping ${e}`);null!==t&&(t.length=0);continue}}this.preprocessCommand(n,t);e.fn=n;e.args=t;return!0}if(a===\ -wa)return!1;if(null!==a){null===t&&(t=[]);t.push(a);if(t.length>33)throw new FormatError("Too many arguments")}}}preprocessCommand(e,t){switch(0|e){case Be:this.stateManager.save();break;case Re:this.stateManager.restore();break;case Ne:this.stateManager.transform(t)}}}class DefaultAppearanceEvaluator extends EvaluatorPreprocessor{constructor(e){super(new StringStream(e))}parse(){const e={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;;){e.args.length=0;if(!\ -this.read(e))break;if(0!==this.savedStatesDepth)continue;const{fn:a,args:r}=e;switch(0|a){case nt:const[e,a]=r;e instanceof Name&&(t.fontName=e.name);"number"==typeof a&&a>0&&(t.fontSize=a);break;case It:ColorSpaceUtils.rgb.getRgbItem(r,0,t.fontColor,0);break;case vt:ColorSpaceUtils.gray.getRgbItem(r,0,t.fontColor,0);break;case Ot:ColorSpaceUtils.cmyk.getRgbItem(r,0,t.fontColor,0)}}}catch(e){warn(`parseDefaultAppearance - ignoring errors: "${e}".`)}return t}}function parseDefaultAppearance(e){re\ -turn new DefaultAppearanceEvaluator(e).parse()}class AppearanceStreamEvaluator extends EvaluatorPreprocessor{constructor(e,t,a,r){super(e);this.stream=e;this.evaluatorOptions=t;this.xref=a;this.globalColorSpaceCache=r;this.resources=e.dict?.get("Resources")}parse(){const e={fn:0,args:[]};let t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:ColorSpaceUtils.gray},a=!1;const r=[];try{for(;;){e.args.length=0;if(a||!this.read(e))break;const{fn:i,args:n}=e;swit\ -ch(0|i){case Be:r.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case Re:t=r.pop()||t;break;case ht:t.scaleFactor*=Math.hypot(n[0],n[1]);break;case nt:const[e,i]=n;e instanceof Name&&(t.fontName=e.name);"number"==typeof i&&i>0&&(t.fontSize=i*t.scaleFactor);break;case wt:t.fillColorSpace=ColorSpaceUtils.parse({cs:n[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,gl\ -obalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:this._localColorSpaceCache});break;case At:t.fillColorSpace.getRgbItem(n,0,t.fontColor,0);break;case It:ColorSpaceUtils.rgb.getRgbItem(n,0,t.fontColor,0);break;case vt:ColorSpaceUtils.gray.getRgbItem(n,0,t.fontColor,0);break;case Ot:ColorSpaceUtils.cmyk.getRgbItem(n,0,t.fontColor,0);break;case dt:case ft:case gt:case pt:a=!0}}}catch(e){warn(`parseAppearanceStream - ignoring errors: "${e}".`)}this.stream.reset();delete t.scaleFac\ -tor;delete t.fillColorSpace;return t}get _localColorSpaceCache(){return shadow(this,"_localColorSpaceCache",new LocalColorSpaceCache)}get _pdfFunctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported}))}}function getPdfColor(e,t){if(e[0]===e[1]&&e[1]===e[2]){return`${numberToString(e[0]/255)} ${t?"g":"G"}`}return Array.from(e,(e=>numberToString(e/255))).join(" ")+" "+(t?"rg":"RG")}class FakeUnicodeFont{\ -constructor(e,t){this.xref=e;this.widths=null;this.firstChar=1/0;this.lastChar=-1/0;this.fontFamily=t;const a=new OffscreenCanvas(1,1);this.ctxMeasure=a.getContext("2d",{willReadFrequently:!0});FakeUnicodeFont._fontNameId||(FakeUnicodeFont._fontNameId=1);this.fontName=Name.get(`InvalidPDFjsFont_${t}_${FakeUnicodeFont._fontNameId++}`)}get fontDescriptorRef(){if(!FakeUnicodeFont._fontDescriptorRef){const e=new Dict(this.xref);e.setIfName("Type","FontDescriptor");e.set("FontName",this.fontName);e.s\ -et("FontFamily","MyriadPro Regular");e.set("FontBBox",[0,0,0,0]);e.setIfName("FontStretch","Normal");e.set("FontWeight",400);e.set("ItalicAngle",0);FakeUnicodeFont._fontDescriptorRef=this.xref.getNewPersistentRef(e)}return FakeUnicodeFont._fontDescriptorRef}get descendantFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.setIfName("Type","Font");e.setIfName("Subtype","CIDFontType0");e.setIfName("CIDToGIDMap","Identity");e.set("FirstChar",this.firstChar);e.set("LastChar",this\ -.lastChar);e.set("FontDescriptor",this.fontDescriptorRef);e.set("DW",1e3);const t=[],a=[...this.widths.entries()].sort();let r=null,i=null;for(const[e,n]of a)if(r)if(e===r+i.length)i.push(n);else{t.push(r,i);r=e;i=[n]}else{r=e;i=[n]}r&&t.push(r,i);e.set("W",t);const n=new Dict(this.xref);n.set("Ordering","Identity");n.set("Registry","Adobe");n.set("Supplement",0);e.set("CIDSystemInfo",n);return this.xref.getNewPersistentRef(e)}get baseFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.f\ -ontName);e.setIfName("Type","Font");e.setIfName("Subtype","Type0");e.setIfName("Encoding","Identity-H");e.set("DescendantFonts",[this.descendantFontRef]);e.setIfName("ToUnicode","Identity-H");return this.xref.getNewPersistentRef(e)}get resources(){const e=new Dict(this.xref),t=new Dict(this.xref);t.set(this.fontName.name,this.baseFontRef);e.set("Font",t);return e}_createContext(){this.widths=new Map;this.ctxMeasure.font=`1000px ${this.fontFamily}`;return this.ctxMeasure}createFontResources(e){co\ -nst t=this._createContext();for(const a of e.split(/\\r\\n?|\\n/))for(const e of a.split("")){const a=e.charCodeAt(0);if(this.widths.has(a))continue;const r=t.measureText(e),i=Math.ceil(r.width);this.widths.set(a,i);this.firstChar=Math.min(a,this.firstChar);this.lastChar=Math.max(a,this.lastChar)}return this.resources}static getFirstPositionInfo(e,t,i){const[n,s,o,c]=e;let l=o-n,h=c-s;t%180!=0&&([l,h]=[h,l]);const u=a*i;return{coords:[0,h+r*i-u],bbox:[0,0,l,h],matrix:0!==t?getRotationMatrix(t,h,u):\ -void 0}}createAppearance(e,t,i,n,s,o){const c=this._createContext(),l=[];let h=-1/0;for(const t of e.split(/\\r\\n?|\\n/)){l.push(t);const e=c.measureText(t).width;h=Math.max(h,e);for(const e of codePointIter(t)){const t=String.fromCodePoint(e);let a=this.widths.get(e);if(void 0===a){const r=c.measureText(t);a=Math.ceil(r.width);this.widths.set(e,a);this.firstChar=Math.min(e,this.firstChar);this.lastChar=Math.max(e,this.lastChar)}}}h*=n/1e3;const[u,d,f,g]=t;let p=f-u,m=g-d;i%180!=0&&([p,m]=[m,p]);l\ -et b=1;h>p&&(b=p/h);let y=1;const w=a*n,x=r*n,S=w*l.length;S>m&&(y=m/S);const k=n*Math.min(b,y),C=["q",`0 0 ${numberToString(p)} ${numberToString(m)} re W n`,"BT",`1 0 0 1 0 ${numberToString(m+x)} Tm 0 Tc ${getPdfColor(s,!0)}`,`/${this.fontName.name} ${numberToString(k)} Tf`],{resources:v}=this;if(1!==(o="number"==typeof o&&o>=0&&o<=1?o:1)){C.push("/R0 gs");const e=new Dict(this.xref),t=new Dict(this.xref);t.set("ca",o);t.set("CA",o);t.setIfName("Type","ExtGState");e.set("R0",t);v.set("ExtGState\ -",e)}const F=numberToString(w);for(const e of l)C.push(`0 -${F} Td <${stringToUTF16HexString(e)}> Tj`);C.push("ET","Q");const T=C.join("\\n"),O=new Dict(this.xref);O.setIfName("Subtype","Form");O.setIfName("Type","XObject");O.set("BBox",[0,0,p,m]);O.set("Length",T.length);O.set("Resources",v);if(i){const e=getRotationMatrix(i,p,m);O.set("Matrix",e)}const M=new StringStream(T);M.dict=O;return M}}const Pn=["m/d","m/d/yy","mm/dd/yy","mm/yy","d-mmm","d-mmm-yy","dd-mmm-yy","yy-mm-dd","mmm-yy","mmmm-yy\ -","mmm d, yyyy","mmmm d, yyyy","m/d/yy h:MM tt","m/d/yy HH:MM"],Ln=["HH:MM","h:MM tt","HH:MM:ss","h:MM:ss tt"];class NameOrNumberTree{constructor(e,t,a){this.root=e;this.xref=t;this._type=a}getAll(){const e=new Map;if(!this.root)return e;const t=this.xref,a=new RefSet;a.put(this.root);const r=[this.root];for(;r.length>0;){const i=t.fetchIfRef(r.shift());if(!(i instanceof Dict))continue;if(i.has("Kids")){const e=i.get("Kids");if(!Array.isArray(e))continue;for(const t of e){if(a.has(t))throw new F\ -ormatError(`Duplicate entry in "${this._type}" tree.`);r.push(t);a.put(t)}continue}const n=i.get(this._type);if(Array.isArray(n))for(let a=0,r=n.length;a<r;a+=2)e.set(t.fetchIfRef(n[a]),t.fetchIfRef(n[a+1]))}return e}getRaw(e){if(!this.root)return null;const t=this.xref;let a=t.fetchIfRef(this.root),r=0;for(;a.has("Kids");){if(++r>10){warn(`Search depth limit reached for "${this._type}" tree.`);return null}const i=a.get("Kids");if(!Array.isArray(i))return null;let n=0,s=i.length-1;for(;n<=s;){co\ -nst r=n+s>>1,o=t.fetchIfRef(i[r]),c=o.get("Limits");if(e<t.fetchIfRef(c[0]))s=r-1;else{if(!(e>t.fetchIfRef(c[1]))){a=o;break}n=r+1}}if(n>s)return null}const i=a.get(this._type);if(Array.isArray(i)){let a=0,r=i.length-2;for(;a<=r;){const n=a+r>>1,s=n+(1&n),o=t.fetchIfRef(i[s]);if(e<o)r=s-2;else{if(!(e>o))return i[s+1];a=s+2}}}return null}get(e){return this.xref.fetchIfRef(this.getRaw(e))}}class NameTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Names")}}class NumberTree extends NameOrN\ -umberTree{constructor(e,t){super(e,t,"Nums")}}function clearGlobalCaches(){!function clearPatternCaches(){Ii=Object.create(null)}();!function clearPrimitiveCaches(){xa=Object.create(null);Sa=Object.create(null);Aa=Object.create(null)}();!function clearUnicodeCaches(){Dr.clear()}();JpxImage.cleanup()}function pickPlatformItem(e){return e instanceof Dict?e.has("UF")?e.get("UF"):e.has("F")?e.get("F"):e.has("Unix")?e.get("Unix"):e.has("Mac")?e.get("Mac"):e.has("DOS")?e.get("DOS"):null:null}class Fil\ -eSpec{#Y=!1;constructor(e,t,a=!1){if(e instanceof Dict){this.xref=t;this.root=e;e.has("FS")&&(this.fs=e.get("FS"));e.has("RF")&&warn("Related file specifications are not supported");a||(e.has("EF")?this.#Y=!0:warn("Non-embedded file specifications are not supported"))}}get filename(){let e="";const t=pickPlatformItem(this.root);t&&"string"==typeof t&&(e=stringToPDFString(t,!0).replaceAll("\\\\\\\\","\\\\").replaceAll("\\\\/","/").replaceAll("\\\\","/"));return shadow(this,"filename",e||"unnamed")}get cont\ -ent(){if(!this.#Y)return null;this._contentRef||=pickPlatformItem(this.root?.get("EF"));let e=null;if(this._contentRef){const t=this.xref.fetchIfRef(this._contentRef);t instanceof BaseStream?e=t.getBytes():warn("Embedded file specification points to non-existing/invalid content")}else warn("Embedded file specification does not have any content");return e}get description(){let e="";const t=this.root?.get("Desc");t&&"string"==typeof t&&(e=stringToPDFString(t));return shadow(this,"description",e)}g\ -et serializable(){return{rawFilename:this.filename,filename:(e=this.filename,e.substring(e.lastIndexOf("/")+1)),content:this.content,description:this.description};var e}}const jn=0,_n=-2,Un=-3,Xn=-4,qn=-5,Hn=-6,Wn=-9;function isWhitespace(e,t){const a=e[t];return" "===a||"\\n"===a||"\\r"===a||"\\t"===a}class XMLParserBase{_resolveEntities(e){return e.replaceAll(/&([^;]+);/g,((e,t)=>{if("#x"===t.substring(0,2))return String.fromCodePoint(parseInt(t.substring(2),16));if("#"===t.substring(0,1))return \ -String.fromCodePoint(parseInt(t.substring(1),10));switch(t){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return\'"\';case"apos":return"\'"}return this.onResolveEntity(t)}))}_parseContent(e,t){const a=[];let r=t;function skipWs(){for(;r<e.length&&isWhitespace(e,r);)++r}for(;r<e.length&&!isWhitespace(e,r)&&">"!==e[r]&&"/"!==e[r];)++r;const i=e.substring(t,r);skipWs();for(;r<e.length&&">"!==e[r]&&"/"!==e[r]&&"?"!==e[r];){skipWs();let t="",i="";for(;r<e.length&&!isWhitespace(e,r\ -)&&"="!==e[r];){t+=e[r];++r}skipWs();if("="!==e[r])return null;++r;skipWs();const n=e[r];if(\'"\'!==n&&"\'"!==n)return null;const s=e.indexOf(n,++r);if(s<0)return null;i=e.substring(r,s);a.push({name:t,value:this._resolveEntities(i)});r=s+1;skipWs()}return{name:i,attributes:a,parsed:r-t}}_parseProcessingInstruction(e,t){let a=t;for(;a<e.length&&!isWhitespace(e,a)&&">"!==e[a]&&"?"!==e[a]&&"/"!==e[a];)++a;const r=e.substring(t,a);!function skipWs(){for(;a<e.length&&isWhitespace(e,a);)++a}();const i=a\ -;for(;a<e.length&&("?"!==e[a]||">"!==e[a+1]);)++a;return{name:r,value:e.substring(i,a),parsed:a-t}}parseXml(e){let t=0;for(;t<e.length;){let a=t;if("<"===e[t]){++a;let t;switch(e[a]){case"/":++a;t=e.indexOf(">",a);if(t<0){this.onError(Wn);return}this.onEndElement(e.substring(a,t));a=t+1;break;case"?":++a;const r=this._parseProcessingInstruction(e,a);if("?>"!==e.substring(a+r.parsed,a+r.parsed+2)){this.onError(Un);return}this.onPi(r.name,r.value);a+=r.parsed+2;break;case"!":if("--"===e.substring(\ -a+1,a+3)){t=e.indexOf("--\\x3e",a+3);if(t<0){this.onError(qn);return}this.onComment(e.substring(a+3,t));a=t+3}else if("[CDATA["===e.substring(a+1,a+8)){t=e.indexOf("]]>",a+8);if(t<0){this.onError(_n);return}this.onCdata(e.substring(a+8,t));a=t+3}else{if("DOCTYPE"!==e.substring(a+1,a+8)){this.onError(Hn);return}{const r=e.indexOf("[",a+8);let i=!1;t=e.indexOf(">",a+8);if(t<0){this.onError(Xn);return}if(r>0&&t>r){t=e.indexOf("]>",a+8);if(t<0){this.onError(Xn);return}i=!0}const n=e.substring(a+8,t+(\ -i?1:0));this.onDoctype(n);a=t+(i?2:1)}}break;default:const i=this._parseContent(e,a);if(null===i){this.onError(Hn);return}let n=!1;if("/>"===e.substring(a+i.parsed,a+i.parsed+2))n=!0;else if(">"!==e.substring(a+i.parsed,a+i.parsed+1)){this.onError(Wn);return}this.onBeginElement(i.name,i.attributes,n);a+=i.parsed+(n?2:1)}}else{for(;a<e.length&&"<"!==e[a];)a++;const r=e.substring(t,a);this.onText(this._resolveEntities(r))}t=a}}onResolveEntity(e){return`&${e};`}onPi(e,t){}onComment(e){}onCdata(e){}\ -onDoctype(e){}onText(e){}onBeginElement(e,t,a){}onEndElement(e){}onError(e){}}class SimpleDOMNode{constructor(e,t){this.nodeName=e;this.nodeValue=t;Object.defineProperty(this,"parentNode",{value:null,writable:!0})}get firstChild(){return this.childNodes?.[0]}get nextSibling(){const e=this.parentNode.childNodes;if(!e)return;const t=e.indexOf(this);return-1!==t?e[t+1]:void 0}get textContent(){return this.childNodes?this.childNodes.map((e=>e.textContent)).join(""):this.nodeValue||""}get children(){\ -return this.childNodes||[]}hasChildNodes(){return this.childNodes?.length>0}searchNode(e,t){if(t>=e.length)return this;const a=e[t];if(a.name.startsWith("#")&&t<e.length-1)return this.searchNode(e,t+1);const r=[];let i=this;for(;;){if(a.name===i.nodeName){if(0!==a.pos){if(0===r.length)return null;{const[n]=r.pop();let s=0;for(const r of n.childNodes)if(a.name===r.nodeName){if(s===a.pos)return r.searchNode(e,t+1);s++}return i.searchNode(e,t+1)}}{const a=i.searchNode(e,t+1);if(null!==a)return a}}i\ -f(i.childNodes?.length>0){r.push([i,0]);i=i.childNodes[0]}else{if(0===r.length)return null;for(;0!==r.length;){const[e,t]=r.pop(),a=t+1;if(a<e.childNodes.length){r.push([e,a]);i=e.childNodes[a];break}}if(0===r.length)return null}}}dump(e){if("#text"!==this.nodeName){e.push(`<${this.nodeName}`);if(this.attributes)for(const t of this.attributes)e.push(` ${t.name}="${encodeToXmlString(t.value)}"`);if(this.hasChildNodes()){e.push(">");for(const t of this.childNodes)t.dump(e);e.push(`</${this.nodeNam\ -e}>`)}else this.nodeValue?e.push(`>${encodeToXmlString(this.nodeValue)}</${this.nodeName}>`):e.push("/>")}else e.push(encodeToXmlString(this.nodeValue))}}class SimpleXMLParser extends XMLParserBase{constructor({hasAttributes:e=!1,lowerCaseName:t=!1}){super();this._currentFragment=null;this._stack=null;this._errorCode=jn;this._hasAttributes=e;this._lowerCaseName=t}parseFromString(e){this._currentFragment=[];this._stack=[];this._errorCode=jn;this.parseXml(e);if(this._errorCode!==jn)return;const[t]\ -=this._currentFragment;return t?{documentElement:t}:void 0}onText(e){if(function isWhitespaceString(e){for(let t=0,a=e.length;t<a;t++)if(!isWhitespace(e,t))return!1;return!0}(e))return;const t=new SimpleDOMNode("#text",e);this._currentFragment.push(t)}onCdata(e){const t=new SimpleDOMNode("#text",e);this._currentFragment.push(t)}onBeginElement(e,t,a){this._lowerCaseName&&(e=e.toLowerCase());const r=new SimpleDOMNode(e);r.childNodes=[];this._hasAttributes&&(r.attributes=t);this._currentFragment.pu\ -sh(r);if(!a){this._stack.push(this._currentFragment);this._currentFragment=r.childNodes}}onEndElement(e){this._currentFragment=this._stack.pop()||[];const t=this._currentFragment.at(-1);if(!t)return null;for(const e of t.childNodes)e.parentNode=t;return t}onError(e){this._errorCode=e}}class MetadataParser{constructor(e){e=this._repair(e);const t=new SimpleXMLParser({lowerCaseName:!0}).parseFromString(e);this._metadataMap=new Map;this._data=e;t&&this._parse(t)}_repair(e){return e.replace(/^[^<]+/\ -,"").replaceAll(/>\\\\376\\\\377([^<]+)/g,(function(e,t){const a=t.replaceAll(/\\\\([0-3])([0-7])([0-7])/g,(function(e,t,a,r){return String.fromCharCode(64*t+8*a+1*r)})).replaceAll(/&(amp|apos|gt|lt|quot);/g,(function(e,t){switch(t){case"amp":return"&";case"apos":return"\'";case"gt":return">";case"lt":return"<";case"quot":return\'"\'}throw new Error(`_repair: ${t} isn\'t defined.`)})),r=[">"];for(let e=0,t=a.length;e<t;e+=2){const t=256*a.charCodeAt(e)+a.charCodeAt(e+1);t>=32&&t<127&&60!==t&&62!==t&&38!==\ -t?r.push(String.fromCharCode(t)):r.push("&#x"+(65536+t).toString(16).substring(1)+";")}return r.join("")}))}_getSequence(e){const t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter((e=>"rdf:li"===e.nodeName))}_parseArray(e){if(!e.hasChildNodes())return;const[t]=e.childNodes,a=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,a.map((e=>e.textContent.trim())))}_parse(e){let t=e.documentElement;if("rdf:rdf"!==t.nodeName){t=t.firstChild;for(;t&&"rdf:rdf"!\ -==t.nodeName;)t=t.nextSibling}if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes())for(const e of t.childNodes)if("rdf:description"===e.nodeName)for(const t of e.childNodes){const e=t.nodeName;switch(e){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(t);continue}this._metadataMap.set(e,t.textContent.trim())}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}}const zn=1,$n=2,Gn=3,Vn=4,Kn=5;class StructTreeRoot{constructor(e,t,a){this.xref=e;this.dict=t;\ -this.ref=a instanceof Ref?a:null;this.roleMap=new Map;this.structParentIds=null}init(){this.readRoleMap()}#Z(e,t,a){if(!(e instanceof Ref)||t<0)return;this.structParentIds||=new RefSetCache;let r=this.structParentIds.get(e);if(!r){r=[];this.structParentIds.put(e,r)}r.push([t,a])}addAnnotationIdToPage(e,t){this.#Z(e,t,Vn)}readRoleMap(){const e=this.dict.get("RoleMap");if(e instanceof Dict)for(const[t,a]of e)a instanceof Name&&this.roleMap.set(t,a.name)}static async canCreateStructureTree({catalog\ -Ref:e,pdfManager:t,newAnnotationsByPage:a}){if(!(e instanceof Ref)){warn("Cannot save the struct tree: no catalog reference.");return!1}let r=0,i=!0;for(const[e,n]of a){const{ref:a}=await t.getPage(e);if(!(a instanceof Ref)){warn(`Cannot save the struct tree: page ${e} has no ref.`);i=!0;break}for(const e of n)if(e.accessibilityData?.type){e.parentTreeId=r++;i=!1}}if(i){for(const e of a.values())for(const t of e)delete t.parentTreeId;return!1}return!0}static async createStructureTree({newAnnotat\ -ionsByPage:e,xref:t,catalogRef:a,pdfManager:r,changes:i}){const n=await r.ensureCatalog("cloneDict"),s=new RefSetCache;s.put(a,n);const o=t.getNewTemporaryRef();n.set("StructTreeRoot",o);const c=new Dict(t);c.set("Type",Name.get("StructTreeRoot"));const l=t.getNewTemporaryRef();c.set("ParentTree",l);const h=[];c.set("K",h);s.put(o,c);const u=new Dict(t),d=[];u.set("Nums",d);const f=await this.#Q({newAnnotationsByPage:e,structTreeRootRef:o,structTreeRoot:null,kids:h,nums:d,xref:t,pdfManager:r,cha\ -nges:i,cache:s});c.set("ParentTreeNextKey",f);s.put(l,u);for(const[e,t]of s.items())i.put(e,{data:t})}async canUpdateStructTree({pdfManager:e,newAnnotationsByPage:t}){if(!this.ref){warn("Cannot update the struct tree: no root reference.");return!1}let a=this.dict.get("ParentTreeNextKey");if(!Number.isInteger(a)||a<0){warn("Cannot update the struct tree: invalid next key.");return!1}const r=this.dict.get("ParentTree");if(!(r instanceof Dict)){warn("Cannot update the struct tree: ParentTree isn\'t \ -a dict.");return!1}const i=r.get("Nums");if(!Array.isArray(i)){warn("Cannot update the struct tree: nums isn\'t an array.");return!1}const n=new NumberTree(r,this.xref);for(const a of t.keys()){const{pageDict:t}=await e.getPage(a);if(!t.has("StructParents"))continue;const r=t.get("StructParents");if(!Number.isInteger(r)||!Array.isArray(n.get(r))){warn(`Cannot save the struct tree: page ${a} has a wrong id.`);return!1}}let s=!0;for(const[r,i]of t){const{pageDict:t}=await e.getPage(r);StructTreeRoo\ -t.#ee({elements:i,xref:this.xref,pageDict:t,numberTree:n});for(const e of i)if(e.accessibilityData?.type){e.accessibilityData.structParent>=0||(e.parentTreeId=a++);s=!1}}if(s){for(const e of t.values())for(const t of e){delete t.parentTreeId;delete t.structTreeParent}return!1}return!0}async updateStructureTree({newAnnotationsByPage:e,pdfManager:t,changes:a}){const{ref:r,xref:i}=this,n=this.dict.clone(),s=new RefSetCache;s.put(r,n);let o,c=n.getRaw("ParentTree");if(c instanceof Ref)o=i.fetch(c);e\ -lse{o=c;c=i.getNewTemporaryRef();n.set("ParentTree",c)}o=o.clone();s.put(c,o);let l=o.getRaw("Nums"),h=null;if(l instanceof Ref){h=l;l=i.fetch(h)}l=l.slice();h||o.set("Nums",l);const u=await StructTreeRoot.#Q({newAnnotationsByPage:e,structTreeRootRef:r,structTreeRoot:this,kids:null,nums:l,xref:i,pdfManager:t,changes:a,cache:s});if(-1!==u){n.set("ParentTreeNextKey",u);h&&s.put(h,l);for(const[e,t]of s.items())a.put(e,{data:t})}}static async#Q({newAnnotationsByPage:e,structTreeRootRef:t,structTreeR\ -oot:a,kids:r,nums:i,xref:n,pdfManager:s,changes:o,cache:c}){const l=Name.get("OBJR");let h,u=-1;for(const[d,f]of e){const e=await s.getPage(d),{ref:g}=e,p=g instanceof Ref;for(const{accessibilityData:s,ref:m,parentTreeId:b,structTreeParent:y}of f){if(!s?.type)continue;const{structParent:f}=s;if(a&&Number.isInteger(f)&&f>=0){let t=(h||=new Map).get(d);if(void 0===t){t=new StructTreePage(a,e.pageDict).collectObjects(g);h.set(d,t)}const r=t?.get(f);if(r){const e=n.fetch(r).clone();StructTreeRoot.#t\ -e(e,s);o.put(r,{data:e});continue}}u=Math.max(u,b);const w=n.getNewTemporaryRef(),x=new Dict(n);StructTreeRoot.#te(x,s);await this.#ae({structTreeParent:y,tagDict:x,newTagRef:w,structTreeRootRef:t,fallbackKids:r,xref:n,cache:c});const S=new Dict(n);x.set("K",S);S.set("Type",l);p&&S.set("Pg",g);S.set("Obj",m);c.put(w,x);i.push(b,w)}}return u+1}static#te(e,{type:t,title:a,lang:r,alt:i,expanded:n,actualText:s}){e.set("S",Name.get(t));a&&e.set("T",stringToAsciiOrUTF16BE(a));r&&e.set("Lang",stringToA\ -sciiOrUTF16BE(r));i&&e.set("Alt",stringToAsciiOrUTF16BE(i));n&&e.set("E",stringToAsciiOrUTF16BE(n));s&&e.set("ActualText",stringToAsciiOrUTF16BE(s))}static#ee({elements:e,xref:t,pageDict:a,numberTree:r}){const i=new Map;for(const t of e)if(t.structTreeParentId){const e=parseInt(t.structTreeParentId.split("_mc")[1],10);let a=i.get(e);if(!a){a=[];i.set(e,a)}a.push(t)}const n=a.get("StructParents");if(!Number.isInteger(n))return;const s=r.get(n),updateElement=(e,a,r)=>{const n=i.get(e);if(n){const \ -e=a.getRaw("P"),i=t.fetchIfRef(e);if(e instanceof Ref&&i instanceof Dict){const e={ref:r,dict:a};for(const t of n)t.structTreeParent=e}return!0}return!1};for(const e of s){if(!(e instanceof Ref))continue;const a=t.fetch(e),r=a.get("K");if(Number.isInteger(r))updateElement(r,a,e);else if(Array.isArray(r))for(let i of r){i=t.fetchIfRef(i);if(Number.isInteger(i)&&updateElement(i,a,e))break;if(!(i instanceof Dict))continue;if(!isName(i.get("Type"),"MCR"))break;const r=i.get("MCID");if(Number.isInteg\ -er(r)&&updateElement(r,a,e))break}}}static async#ae({structTreeParent:e,tagDict:t,newTagRef:a,structTreeRootRef:r,fallbackKids:i,xref:n,cache:s}){let o,c=null;if(e){({ref:c}=e);o=e.dict.getRaw("P")||r}else o=r;t.set("P",o);const l=n.fetchIfRef(o);if(!l){i.push(a);return}let h=s.get(o);if(!h){h=l.clone();s.put(o,h)}const u=h.getRaw("K");let d=u instanceof Ref?s.get(u):null;if(!d){d=n.fetchIfRef(u);d=Array.isArray(d)?d.slice():[u];const e=n.getNewTemporaryRef();h.set("K",e);s.put(e,d)}const f=d.in\ -dexOf(c);d.splice(f>=0?f+1:d.length,0,a)}}class StructElementNode{constructor(e,t){this.tree=e;this.xref=e.xref;this.dict=t;this.kids=[];this.parseKids()}get role(){const e=this.dict.get("S"),t=e instanceof Name?e.name:"",{root:a}=this.tree;return a.roleMap.get(t)??t}parseKids(){let e=null;const t=this.dict.getRaw("Pg");t instanceof Ref&&(e=t.toString());const a=this.dict.get("K");if(Array.isArray(a))for(const t of a){const a=this.parseKid(e,this.xref.fetchIfRef(t));a&&this.kids.push(a)}else{con\ -st t=this.parseKid(e,a);t&&this.kids.push(t)}}parseKid(e,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==e?null:new StructElement({type:zn,mcid:t,pageObjId:e});if(!(t instanceof Dict))return null;const a=t.getRaw("Pg");a instanceof Ref&&(e=a.toString());const r=t.get("Type")instanceof Name?t.get("Type").name:null;if("MCR"===r){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Stm");return new StructElement({type:$n,refObjId:a instanceof Ref?a.toString():null,pageObjId:e,m\ -cid:t.get("MCID")})}if("OBJR"===r){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Obj");return new StructElement({type:Gn,refObjId:a instanceof Ref?a.toString():null,pageObjId:e})}return new StructElement({type:Kn,dict:t})}}class StructElement{constructor({type:e,dict:t=null,mcid:a=null,pageObjId:r=null,refObjId:i=null}){this.type=e;this.dict=t;this.mcid=a;this.pageObjId=r;this.refObjId=i;this.parentNode=null}}class StructTreePage{constructor(e,t){this.root=e;this.xref=e?.xref??nu\ -ll;this.rootDict=e?.dict??null;this.pageDict=t;this.nodes=[]}collectObjects(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return null;const t=this.rootDict.get("ParentTree");if(!t)return null;const a=this.root.structParentIds?.get(e);if(!a)return null;const r=new Map,i=new NumberTree(t,this.xref);for(const[e]of a){const t=i.getRaw(e);t instanceof Ref&&r.set(e,t)}return r}parse(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return;const t=this.rootDict.get("ParentTree");if(!t)return;co\ -nst a=this.pageDict.get("StructParents"),r=this.root.structParentIds?.get(e);if(!Number.isInteger(a)&&!r)return;const i=new Map,n=new NumberTree(t,this.xref);if(Number.isInteger(a)){const e=n.get(a);if(Array.isArray(e))for(const t of e)t instanceof Ref&&this.addNode(this.xref.fetch(t),i)}if(r)for(const[e,t]of r){const a=n.get(e);if(a){const e=this.addNode(this.xref.fetchIfRef(a),i);1===e?.kids?.length&&e.kids[0].type===Gn&&(e.kids[0].type=t)}}}addNode(e,t,a=0){if(a>40){warn("StructTree MAX_DEPTH\ - reached.");return null}if(!(e instanceof Dict))return null;if(t.has(e))return t.get(e);const r=new StructElementNode(this,e);t.set(e,r);const i=e.get("P");if(!(i instanceof Dict)||isName(i.get("Type"),"StructTreeRoot")){this.addTopLevelNode(e,r)||t.delete(e);return r}const n=this.addNode(i,t,a+1);if(!n)return r;let s=!1;for(const t of n.kids)if(t.type===Kn&&t.dict===e){t.parentNode=r;s=!0}s||t.delete(e);return r}addTopLevelNode(e,t){const a=this.rootDict.get("K");if(!a)return!1;if(a instanceof \ -Dict){if(a.objId!==e.objId)return!1;this.nodes[0]=t;return!0}if(!Array.isArray(a))return!0;let r=!1;for(let i=0;i<a.length;i++){const n=a[i];if(n?.toString()===e.objId){this.nodes[i]=t;r=!0}}return r}get serializable(){function nodeToSerializable(e,t,a=0){if(a>40){warn("StructTree too deep to be fully serialized.");return}const r=Object.create(null);r.role=e.role;r.children=[];t.children.push(r);let i=e.dict.get("Alt");"string"!=typeof i&&(i=e.dict.get("ActualText"));"string"==typeof i&&(r.alt=s\ -tringToPDFString(i));const n=e.dict.get("A");if(n instanceof Dict){const e=lookupNormalRect(n.getArray("BBox"),null);if(e)r.bbox=e;else{const e=n.get("Width"),t=n.get("Height");"number"==typeof e&&e>0&&"number"==typeof t&&t>0&&(r.bbox=[0,0,e,t])}}const s=e.dict.get("Lang");"string"==typeof s&&(r.lang=stringToPDFString(s));for(const t of e.kids){const e=t.type===Kn?t.parentNode:null;e?nodeToSerializable(e,r,a+1):t.type===zn||t.type===$n?r.children.push({type:"content",id:`p${t.pageObjId}_mc${t.mc\ -id}`}):t.type===Gn?r.children.push({type:"object",id:t.refObjId}):t.type===Vn&&r.children.push({type:"annotation",id:`pdfjs_internal_id_${t.refObjId}`})}}const e=Object.create(null);e.children=[];e.role="Root";for(const t of this.nodes)t&&nodeToSerializable(t,e);return e}}const Jn=function _isValidExplicitDest(e,t,a){if(!Array.isArray(a)||a.length<2)return!1;const[r,i,...n]=a;if(!e(r)&&!Number.isInteger(r))return!1;if(!t(i))return!1;const s=n.length;let o=!0;switch(i.name){case"XYZ":if(s<2||s>3)\ -return!1;break;case"Fit":case"FitB":return 0===s;case"FitH":case"FitBH":case"FitV":case"FitBV":if(s>1)return!1;break;case"FitR":if(4!==s)return!1;o=!1;break;default:return!1}for(const e of n)if(!("number"==typeof e||o&&null===e))return!1;return!0}.bind(null,(e=>e instanceof Ref),isName);function fetchDest(e){e instanceof Dict&&(e=e.get("D"));return Jn(e)?e:null}function fetchRemoteDest(e){let t=e.get("D");if(t){t instanceof Name&&(t=t.name);if("string"==typeof t)return stringToPDFString(t,!0);if\ -(Jn(t))return JSON.stringify(t)}return null}class Catalog{#re=null;#ie=null;builtInCMapCache=new Map;fontCache=new RefSetCache;globalColorSpaceCache=new GlobalColorSpaceCache;globalImageCache=new GlobalImageCache;nonBlendModesSet=new RefSet;pageDictCache=new RefSetCache;pageIndexCache=new RefSetCache;pageKidsCountCache=new RefSetCache;standardFontDataCache=new Map;systemFontCache=new Map;constructor(e,t){this.pdfManager=e;this.xref=t;this.#ie=t.getCatalogObj();if(!(this.#ie instanceof Dict))thro\ -w new FormatError("Catalog object is not a dictionary.");this.toplevelPagesDict}cloneDict(){return this.#ie.clone()}get version(){const e=this.#ie.get("Version");if(e instanceof Name){if(Ca.test(e.name))return shadow(this,"version",e.name);warn(`Invalid PDF catalog version: ${e.name}`)}return shadow(this,"version",null)}get lang(){const e=this.#ie.get("Lang");return shadow(this,"lang",e&&"string"==typeof e?stringToPDFString(e):null)}get needsRendering(){const e=this.#ie.get("NeedsRendering");ret\ -urn shadow(this,"needsRendering","boolean"==typeof e&&e)}get collection(){let e=null;try{const t=this.#ie.get("Collection");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch Collection entry; assuming no collection is present.")}return shadow(this,"collection",e)}get acroForm(){let e=null;try{const t=this.#ie.get("AcroForm");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch AcroFor\ -m entry; assuming no forms are present.")}return shadow(this,"acroForm",e)}get acroFormRef(){const e=this.#ie.getRaw("AcroForm");return shadow(this,"acroFormRef",e instanceof Ref?e:null)}get metadata(){const e=this.#ie.getRaw("Metadata");if(!(e instanceof Ref))return shadow(this,"metadata",null);let t=null;try{const a=this.xref.fetch(e,!this.xref.encrypt?.encryptMetadata);if(a instanceof BaseStream&&a.dict instanceof Dict){const e=a.dict.get("Type"),r=a.dict.get("Subtype");if(isName(e,"Metadata"\ -)&&isName(r,"XML")){const e=stringToUTF8String(a.getString());e&&(t=new MetadataParser(e).serializable)}}}catch(e){if(e instanceof MissingDataException)throw e;info(`Skipping invalid Metadata: "${e}".`)}return shadow(this,"metadata",t)}get markInfo(){let e=null;try{e=this.#ne()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read mark info.")}return shadow(this,"markInfo",e)}#ne(){const e=this.#ie.get("MarkInfo");if(!(e instanceof Dict))return null;const t={Marked:!1,UserPr\ -operties:!1,Suspects:!1};for(const a in t){const r=e.get(a);"boolean"==typeof r&&(t[a]=r)}return t}get structTreeRoot(){let e=null;try{e=this.#se()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable read to structTreeRoot info.")}return shadow(this,"structTreeRoot",e)}#se(){const e=this.#ie.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(e);if(!(t instanceof Dict))return null;const a=new StructTreeRoot(this.xref,t,e);a.init();return a}get toplevelPagesDict(){const e=this.#ie.get(\ -"Pages");if(!(e instanceof Dict))throw new FormatError("Invalid top-level pages dictionary.");return shadow(this,"toplevelPagesDict",e)}get documentOutline(){let e=null;try{e=this.#oe()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read document outline.")}return shadow(this,"documentOutline",e)}#oe(){let e=this.#ie.get("Outlines");if(!(e instanceof Dict))return null;e=e.getRaw("First");if(!(e instanceof Ref))return null;const t={items:[]},a=[{obj:e,parent:t}],r=new RefSe\ -t;r.put(e);const i=this.xref,n=new Uint8ClampedArray(3);for(;a.length>0;){const t=a.shift(),s=i.fetchIfRef(t.obj);if(null===s)continue;s.has("Title")||warn("Invalid outline item encountered.");const o={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:s,resultObj:o,docBaseUrl:this.baseUrl,docAttachments:this.attachments});const c=s.get("Title"),l=s.get("F")||0,h=s.getArray("C"),u=s.get("Count");let d=n;!isNumberArray(h,3)||0===h[0]&&0===h[1]&&0===h[2]||(d=ColorSpaceUtils.rgb.\ -getRgb(h,0));const f={action:o.action,attachment:o.attachment,dest:o.dest,url:o.url,unsafeUrl:o.unsafeUrl,newWindow:o.newWindow,setOCGState:o.setOCGState,title:"string"==typeof c?stringToPDFString(c):"",color:d,count:Number.isInteger(u)?u:void 0,bold:!!(2&l),italic:!!(1&l),items:[]};t.parent.items.push(f);e=s.getRaw("First");if(e instanceof Ref&&!r.has(e)){a.push({obj:e,parent:f});r.put(e)}e=s.getRaw("Next");if(e instanceof Ref&&!r.has(e)){a.push({obj:e,parent:t.parent});r.put(e)}}return t.items\ -.length>0?t.items:null}get permissions(){let e=null;try{e=this.#ce()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read permissions.")}return shadow(this,"permissions",e)}#ce(){const e=this.xref.trailer.get("Encrypt");if(!(e instanceof Dict))return null;let t=e.get("P");if("number"!=typeof t)return null;t+=2**32;const a=[];for(const e in w){const r=w[e];t&r&&a.push(r)}return a}get optionalContentConfig(){let e=null;try{const t=this.#ie.get("OCProperties");if(!t)return sha\ -dow(this,"optionalContentConfig",null);const a=t.get("D");if(!a)return shadow(this,"optionalContentConfig",null);const r=t.get("OCGs");if(!Array.isArray(r))return shadow(this,"optionalContentConfig",null);const i=new RefSetCache;for(const e of r)e instanceof Ref&&!i.has(e)&&i.put(e,this.#le(e));e=this.#he(a,i)}catch(e){if(e instanceof MissingDataException)throw e;warn(`Unable to read optional content config: ${e}`)}return shadow(this,"optionalContentConfig",e)}#le(e){const t=this.xref.fetch(e),a\ -={id:e.toString(),name:null,intent:null,usage:{print:null,view:null},rbGroups:[]},r=t.get("Name");"string"==typeof r&&(a.name=stringToPDFString(r));let i=t.getArray("Intent");Array.isArray(i)||(i=[i]);i.every((e=>e instanceof Name))&&(a.intent=i.map((e=>e.name)));const n=t.get("Usage");if(!(n instanceof Dict))return a;const s=a.usage,o=n.get("Print");if(o instanceof Dict){const e=o.get("PrintState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":s.print={printState:e.name}}}const c=n.get\ -("View");if(c instanceof Dict){const e=c.get("ViewState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":s.view={viewState:e.name}}}return a}#he(e,t){function parseOnOff(e){const a=[];if(Array.isArray(e))for(const r of e)r instanceof Ref&&t.has(r)&&a.push(r.toString());return a}function parseOrder(e,a=0){if(!Array.isArray(e))return null;const i=[];for(const n of e){if(n instanceof Ref&&t.has(n)){r.put(n);i.push(n.toString());continue}const e=parseNestedOrder(n,a);e&&i.push(e)}if(a>0)retu\ -rn i;const n=[];for(const[e]of t.items())r.has(e)||n.push(e.toString());n.length&&i.push({name:null,order:n});return i}function parseNestedOrder(e,t){if(++t>i){warn("parseNestedOrder - reached MAX_NESTED_LEVELS.");return null}const r=a.fetchIfRef(e);if(!Array.isArray(r))return null;const n=a.fetchIfRef(r[0]);if("string"!=typeof n)return null;const s=parseOrder(r.slice(1),t);return s?.length?{name:stringToPDFString(n),order:s}:null}const a=this.xref,r=new RefSet,i=10;!function parseRBGroups(e){if\ -(Array.isArray(e))for(const r of e){const e=a.fetchIfRef(r);if(!Array.isArray(e)||!e.length)continue;const i=new Set;for(const a of e)if(a instanceof Ref&&t.has(a)&&!i.has(a.toString())){i.add(a.toString());t.get(a).rbGroups.push(i)}}}(e.get("RBGroups"));return{name:"string"==typeof e.get("Name")?stringToPDFString(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?stringToPDFString(e.get("Creator")):null,baseState:e.get("BaseState")instanceof Name?e.get("BaseState").name:null,on:parse\ -OnOff(e.get("ON")),off:parseOnOff(e.get("OFF")),order:parseOrder(e.get("Order")),groups:[...t]}}setActualNumPages(e=null){this.#re=e}get hasActualNumPages(){return null!==this.#re}get _pagesCount(){const e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new FormatError("Page count in top-level pages dictionary is not an integer.");return shadow(this,"_pagesCount",e)}get numPages(){return this.#re??this._pagesCount}get destinations(){const e=this.#ue(),t=Object.create(null);for(\ -const a of e)if(a instanceof NameTree)for(const[e,r]of a.getAll()){const a=fetchDest(r);a&&(t[stringToPDFString(e,!0)]=a)}else if(a instanceof Dict)for(const[e,r]of a){const a=fetchDest(r);a&&(t[stringToPDFString(e,!0)]||=a)}return shadow(this,"destinations",t)}getDestination(e){if(this.hasOwnProperty("destinations"))return this.destinations[e]??null;const t=this.#ue();for(const a of t)if(a instanceof NameTree||a instanceof Dict){const t=fetchDest(a.get(e));if(t)return t}if(t.length){const t=thi\ -s.destinations[e];if(t)return t}return null}#ue(){const e=this.#ie.get("Names"),t=[];e?.has("Dests")&&t.push(new NameTree(e.getRaw("Dests"),this.xref));this.#ie.has("Dests")&&t.push(this.#ie.get("Dests"));return t}get pageLabels(){let e=null;try{e=this.#de()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read page labels.")}return shadow(this,"pageLabels",e)}#de(){const e=this.#ie.getRaw("PageLabels");if(!e)return null;const t=new Array(this.numPages);let a=null,r="";const\ - i=new NumberTree(e,this.xref).getAll();let n="",s=1;for(let e=0,o=this.numPages;e<o;e++){const o=i.get(e);if(void 0!==o){if(!(o instanceof Dict))throw new FormatError("PageLabel is not a dictionary.");if(o.has("Type")&&!isName(o.get("Type"),"PageLabel"))throw new FormatError("Invalid type in PageLabel dictionary.");if(o.has("S")){const e=o.get("S");if(!(e instanceof Name))throw new FormatError("Invalid style in PageLabel dictionary.");a=e.name}else a=null;if(o.has("P")){const e=o.get("P");if("s\ -tring"!=typeof e)throw new FormatError("Invalid prefix in PageLabel dictionary.");r=stringToPDFString(e)}else r="";if(o.has("St")){const e=o.get("St");if(!(Number.isInteger(e)&&e>=1))throw new FormatError("Invalid start in PageLabel dictionary.");s=e}else s=1}switch(a){case"D":n=s;break;case"R":case"r":n=toRomanNumerals(s,"r"===a);break;case"A":case"a":const e=26,t="a"===a?97:65,r=s-1;n=String.fromCharCode(t+r%e).repeat(Math.floor(r/e)+1);break;default:if(a)throw new FormatError(`Invalid style "\ -${a}" in PageLabel dictionary.`);n=""}t[e]=r+n;s++}return t}get pageLayout(){const e=this.#ie.get("PageLayout");let t="";if(e instanceof Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return shadow(this,"pageLayout",t)}get pageMode(){const e=this.#ie.get("PageMode");let t="UseNone";if(e instanceof Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAtt\ -achments":t=e.name}return shadow(this,"pageMode",t)}get viewerPreferences(){const e=this.#ie.get("ViewerPreferences");if(!(e instanceof Dict))return shadow(this,"viewerPreferences",null);let t=null;for(const[a,r]of e){let e;switch(a){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof r&&(e=r);break;case"NonFullScreenPageMode":if(r instanceof Name)switch(r.name){case"UseNone":case"UseOutlines":c\ -ase"UseThumbs":case"UseOC":e=r.name;break;default:e="UseNone"}break;case"Direction":if(r instanceof Name)switch(r.name){case"L2R":case"R2L":e=r.name;break;default:e="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(r instanceof Name)switch(r.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":e=r.name;break;default:e="CropBox"}break;case"PrintScaling":if(r instanceof Name)switch(r.name){case"None":case"AppDefault":e=r.name;break;default:e="AppD\ -efault"}break;case"Duplex":if(r instanceof Name)switch(r.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":e=r.name;break;default:e="None"}break;case"PrintPageRange":if(Array.isArray(r)&&r.length%2==0){r.every(((e,t,a)=>Number.isInteger(e)&&e>0&&(0===t||e>=a[t-1])&&e<=this.numPages))&&(e=r)}break;case"NumCopies":Number.isInteger(r)&&r>0&&(e=r);break;default:warn(`Ignoring non-standard key in ViewerPreferences: ${a}.`);continue}if(void 0!==e){t??=Object.create(null);t[a]=e}el\ -se warn(`Bad value, for key "${a}", in ViewerPreferences: ${r}.`)}return shadow(this,"viewerPreferences",t)}get openAction(){const e=this.#ie.get("OpenAction"),t=Object.create(null);if(e instanceof Dict){const a=new Dict(this.xref);a.set("A",e);const r={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:a,resultObj:r});Array.isArray(r.dest)?t.dest=r.dest:r.action&&(t.action=r.action)}else Jn(e)&&(t.dest=e);return shadow(this,"openAction",objectSize(t)>0?t:null)}get attachments\ -(){const e=this.#ie.get("Names");let t=null;if(e instanceof Dict&&e.has("EmbeddedFiles")){const a=new NameTree(e.getRaw("EmbeddedFiles"),this.xref);for(const[e,r]of a.getAll()){const a=new FileSpec(r,this.xref);t??=Object.create(null);t[stringToPDFString(e,!0)]=a.serializable}}return shadow(this,"attachments",t)}get xfaImages(){const e=this.#ie.get("Names");let t=null;if(e instanceof Dict&&e.has("XFAImages")){const a=new NameTree(e.getRaw("XFAImages"),this.xref);for(const[e,r]of a.getAll())if(r \ -instanceof BaseStream){t??=new Map;t.set(stringToPDFString(e,!0),r.getBytes())}}return shadow(this,"xfaImages",t)}#fe(){const e=this.#ie.get("Names");let t=null;function appendIfJavaScriptDict(e,a){if(!(a instanceof Dict))return;if(!isName(a.get("S"),"JavaScript"))return;let r=a.get("JS");if(r instanceof BaseStream)r=r.getString();else if("string"!=typeof r)return;r=stringToPDFString(r,!0).replaceAll("\\0","");r&&(t||=new Map).set(e,r)}if(e instanceof Dict&&e.has("JavaScript")){const t=new NameTr\ -ee(e.getRaw("JavaScript"),this.xref);for(const[e,a]of t.getAll())appendIfJavaScriptDict(stringToPDFString(e,!0),a)}const a=this.#ie.get("OpenAction");a&&appendIfJavaScriptDict("OpenAction",a);return t}get jsActions(){const e=this.#fe();let t=collectActions(this.xref,this.#ie,we);if(e){t||=Object.create(null);for(const[a,r]of e)a in t?t[a].push(r):t[a]=[r]}return shadow(this,"jsActions",t)}async cleanup(e=!1){clearGlobalCaches();this.globalColorSpaceCache.clear();this.globalImageCache.clear(e);th\ -is.pageKidsCountCache.clear();this.pageIndexCache.clear();this.pageDictCache.clear();this.nonBlendModesSet.clear();for(const{dict:e}of await Promise.all(this.fontCache))delete e.cacheKey;this.fontCache.clear();this.builtInCMapCache.clear();this.standardFontDataCache.clear();this.systemFontCache.clear()}async getPageDict(e){const t=[this.toplevelPagesDict],a=new RefSet,r=this.#ie.getRaw("Pages");r instanceof Ref&&a.put(r);const i=this.xref,n=this.pageKidsCountCache,s=this.pageIndexCache,o=this.pa\ -geDictCache;let c=0;for(;t.length;){const r=t.pop();if(r instanceof Ref){const l=n.get(r);if(l>=0&&c+l<=e){c+=l;continue}if(a.has(r))throw new FormatError("Pages tree contains circular reference.");a.put(r);const h=await(o.get(r)||i.fetchAsync(r));if(h instanceof Dict){let t=h.getRaw("Type");t instanceof Ref&&(t=await i.fetchAsync(t));if(isName(t,"Page")||!h.has("Kids")){n.has(r)||n.put(r,1);s.has(r)||s.put(r,c);if(c===e)return[h,r];c++;continue}}t.push(h);continue}if(!(r instanceof Dict))throw \ -new FormatError("Page dictionary kid reference points to wrong type of object.");const{objId:l}=r;let h=r.getRaw("Count");h instanceof Ref&&(h=await i.fetchAsync(h));if(Number.isInteger(h)&&h>=0){l&&!n.has(l)&&n.put(l,h);if(c+h<=e){c+=h;continue}}let u=r.getRaw("Kids");u instanceof Ref&&(u=await i.fetchAsync(u));if(!Array.isArray(u)){let t=r.getRaw("Type");t instanceof Ref&&(t=await i.fetchAsync(t));if(isName(t,"Page")||!r.has("Kids")){if(c===e)return[r,null];c++;continue}throw new FormatError("\ -Page dictionary kids object is not an array.")}for(let e=u.length-1;e>=0;e--){const a=u[e];t.push(a);r===this.toplevelPagesDict&&a instanceof Ref&&!o.has(a)&&o.put(a,i.fetchAsync(a))}}throw new Error(`Page index ${e} not found.`)}async getAllPageDicts(e=!1){const{ignoreErrors:t}=this.pdfManager.evaluatorOptions,a=[{currentNode:this.toplevelPagesDict,posInKids:0}],r=new RefSet,i=this.#ie.getRaw("Pages");i instanceof Ref&&r.put(i);const n=new Map,s=this.xref,o=this.pageIndexCache;let c=0;function \ -addPageDict(e,t){t&&!o.has(t)&&o.put(t,c);n.set(c++,[e,t])}function addPageError(a){if(a instanceof XRefEntryException&&!e)throw a;if(e&&t&&0===c){warn(`getAllPageDicts - Skipping invalid first page: "${a}".`);a=Dict.empty}n.set(c++,[a,null])}for(;a.length>0;){const e=a.at(-1),{currentNode:t,posInKids:i}=e;let n=t.getRaw("Kids");if(n instanceof Ref)try{n=await s.fetchAsync(n)}catch(e){addPageError(e);break}if(!Array.isArray(n)){addPageError(new FormatError("Page dictionary kids object is not an \ -array."));break}if(i>=n.length){a.pop();continue}const o=n[i];let c;if(o instanceof Ref){if(r.has(o)){addPageError(new FormatError("Pages tree contains circular reference."));break}r.put(o);try{c=await s.fetchAsync(o)}catch(e){addPageError(e);break}}else c=o;if(!(c instanceof Dict)){addPageError(new FormatError("Page dictionary kid reference points to wrong type of object."));break}let l=c.getRaw("Type");if(l instanceof Ref)try{l=await s.fetchAsync(l)}catch(e){addPageError(e);break}isName(l,"Pag\ -e")||!c.has("Kids")?addPageDict(c,o instanceof Ref?o:null):a.push({currentNode:c,posInKids:0});e.posInKids++}return n}getPageIndex(e){const t=this.pageIndexCache.get(e);if(void 0!==t)return Promise.resolve(t);const a=this.xref;let r=0;const next=t=>function pagesBeforeRef(t){let r,i=0;return a.fetchAsync(t).then((function(a){if(isRefsEqual(t,e)&&!isDict(a,"Page")&&!(a instanceof Dict&&!a.has("Type")&&a.has("Contents")))throw new FormatError("The reference does not point to a /Page dictionary.");\ -if(!a)return null;if(!(a instanceof Dict))throw new FormatError("Node must be a dictionary.");r=a.getRaw("Parent");return a.getAsync("Parent")})).then((function(e){if(!e)return null;if(!(e instanceof Dict))throw new FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;const n=[];let s=!1;for(const r of e){if(!(r instanceof Ref))throw new FormatError("Kid must be a reference.");if(isRefsEqual(r,t)){s=!0;break}n.push(a.fetchAsync(r).then((fun\ -ction(e){if(!(e instanceof Dict))throw new FormatError("Kid node must be a dictionary.");e.has("Count")?i+=e.get("Count"):i++})))}if(!s)throw new FormatError("Kid reference not found in parent\'s kids.");return Promise.all(n).then((()=>[i,r]))}))}(t).then((t=>{if(!t){this.pageIndexCache.put(e,r);return r}const[a,i]=t;r+=a;return next(i)}));return next(e)}get baseUrl(){const e=this.#ie.get("URI");if(e instanceof Dict){const t=e.get("Base");if("string"==typeof t){const e=createValidAbsoluteUrl(t,nu\ -ll,{tryConvertEncoding:!0});if(e)return shadow(this,"baseUrl",e.href)}}return shadow(this,"baseUrl",this.pdfManager.docBaseUrl)}static parseDestDictionary({destDict:e,resultObj:t,docBaseUrl:a=null,docAttachments:r=null}){if(!(e instanceof Dict)){warn("parseDestDictionary: `destDict` must be a dictionary.");return}let i,n,s=e.get("A");if(!(s instanceof Dict))if(e.has("Dest"))s=e.get("Dest");else{s=e.get("AA");s instanceof Dict&&(s.has("D")?s=s.get("D"):s.has("U")&&(s=s.get("U")))}if(s instanceof \ -Dict){const e=s.get("S");if(!(e instanceof Name)){warn("parseDestDictionary: Invalid type in Action dictionary.");return}const a=e.name;switch(a){case"ResetForm":const e=s.get("Flags"),o=!(1&("number"==typeof e?e:0)),c=[],l=[];for(const e of s.get("Fields")||[])e instanceof Ref?l.push(e.toString()):"string"==typeof e&&c.push(stringToPDFString(e));t.resetForm={fields:c,refs:l,include:o};break;case"URI":i=s.get("URI");i instanceof Name&&(i="/"+i.name);break;case"GoTo":n=s.get("D");break;case"Launc\ -h":case"GoToR":const h=s.get("F");if(h instanceof Dict){const e=new FileSpec(h,null,!0),{rawFilename:t}=e.serializable;i=t}else"string"==typeof h&&(i=h);const u=fetchRemoteDest(s);u&&"string"==typeof i&&(i=i.split("#",1)[0]+"#"+u);const d=s.get("NewWindow");"boolean"==typeof d&&(t.newWindow=d);break;case"GoToE":const f=s.get("T");let g;if(r&&f instanceof Dict){const e=f.get("R"),t=f.get("N");isName(e,"C")&&"string"==typeof t&&(g=r[stringToPDFString(t,!0)])}if(g){t.attachment=g;const e=fetchRemot\ -eDest(s);e&&(t.attachmentDest=e)}else warn(\'parseDestDictionary - unimplemented "GoToE" action.\');break;case"Named":const p=s.get("N");p instanceof Name&&(t.action=p.name);break;case"SetOCGState":const m=s.get("State"),b=s.get("PreserveRB");if(!Array.isArray(m)||0===m.length)break;const y=[];for(const e of m)if(e instanceof Name)switch(e.name){case"ON":case"OFF":case"Toggle":y.push(e.name)}else e instanceof Ref&&y.push(e.toString());if(y.length!==m.length)break;t.setOCGState={state:y,preserveRB:\ -"boolean"!=typeof b||b};break;case"JavaScript":const w=s.get("JS");let x;w instanceof BaseStream?x=w.getString():"string"==typeof w&&(x=w);const S=x&&recoverJsURL(stringToPDFString(x,!0));if(S){i=S.url;t.newWindow=S.newWindow;break}default:if("JavaScript"===a||"SubmitForm"===a)break;warn(`parseDestDictionary - unsupported action: "${a}".`)}}else e.has("Dest")&&(n=e.get("Dest"));if("string"==typeof i){const e=createValidAbsoluteUrl(i,a,{addDefaultProtocol:!0,tryConvertEncoding:!0});e&&(t.url=e.hr\ -ef);t.unsafeUrl=i}if(n){n instanceof Name&&(n=n.name);"string"==typeof n?t.dest=stringToPDFString(n,!0):Jn(n)&&(t.dest=n)}}}function addChildren(e,t){if(e instanceof Dict)e=e.getRawValues();else if(e instanceof BaseStream)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(const r of e)((a=r)instanceof Ref||a instanceof Dict||a instanceof BaseStream||Array.isArray(a))&&t.push(r);var a}class ObjectLoader{refSet=new RefSet;constructor(e,t,a){this.dict=e;this.keys=t;this.xref=a}async load(\ -){const{keys:e,dict:t}=this,a=[];for(const r of e){const e=t.getRaw(r);void 0!==e&&a.push(e)}await this.#ge(a);this.refSet=null}async#ge(e){const t=[],a=[];for(;e.length;){let r=e.pop();if(r instanceof Ref){if(this.refSet.has(r))continue;try{this.refSet.put(r);r=this.xref.fetch(r)}catch(e){if(!(e instanceof MissingDataException)){warn(`ObjectLoader.#walk - requesting all data: "${e}".`);await this.xref.stream.manager.requestAllChunks();return}t.push(r);a.push({begin:e.begin,end:e.end})}}if(r ins\ -tanceof BaseStream){const e=r.getBaseStreams();if(e){let i=!1;for(const t of e)if(!t.isDataLoaded){i=!0;a.push({begin:t.start,end:t.end})}i&&t.push(r)}}addChildren(r,e)}if(a.length){await this.xref.stream.manager.requestRanges(a);for(const e of t)e instanceof Ref&&this.refSet.remove(e);await this.#ge(t)}}static async load(e,t,a){if(a.stream.isDataLoaded)return;const r=new ObjectLoader(e,t,a);await r.load()}}const Yn=Symbol(),Zn=Symbol(),Qn=Symbol(),es=Symbol(),ts=Symbol(),as=Symbol(),rs=Symbol()\ -,is=Symbol(),ns=Symbol(),ss=Symbol("content"),os=Symbol("data"),cs=Symbol(),ls=Symbol("extra"),hs=Symbol(),us=Symbol(),ds=Symbol(),fs=Symbol(),gs=Symbol(),ps=Symbol(),ms=Symbol(),bs=Symbol(),ys=Symbol(),ws=Symbol(),xs=Symbol(),Ss=Symbol(),As=Symbol(),ks=Symbol(),Cs=Symbol(),vs=Symbol(),Fs=Symbol(),Is=Symbol(),Ts=Symbol(),Os=Symbol(),Ms=Symbol(),Ds=Symbol(),Bs=Symbol(),Rs=Symbol(),Ns=Symbol(),Es=Symbol(),Ls=Symbol(),js=Symbol(),_s=Symbol(),Us=Symbol(),Xs=Symbol(),qs=Symbol(),Hs=Symbol("namespaceI\ -d"),Ws=Symbol("nodeName"),zs=Symbol(),$s=Symbol(),Gs=Symbol(),Vs=Symbol(),Ks=Symbol(),Js=Symbol(),Ys=Symbol(),Zs=Symbol(),Qs=Symbol("root"),eo=Symbol(),to=Symbol(),ao=Symbol(),ro=Symbol(),io=Symbol(),no=Symbol(),so=Symbol(),oo=Symbol(),co=Symbol(),lo=Symbol(),ho=Symbol(),uo=Symbol("uid"),fo=Symbol(),go={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsW\ -ith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>"http://ns.adobe.com/xdp/pdf/"===e},signature:{id:6,check:e=>"http://www.w3.org/2000/09/xmldsig#"===e},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>"http://www.w3.org/1999/XSL/Transform"===e},template:{id:9,check:e=\ ->e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:e=>"http://ns.adobe.com/xdp/"===e},xfdf:{id:12,check:e=>"http://ns.adobe.com/xfdf/"===e},xhtml:{id:13,check:e=>"http://www.w3.org/1999/xhtml"===e},xmpmeta:{id:14,check:e=>"http://ns.adobe.com/xmpmeta/"===e}},po={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/25.4*72,in:e=>72*e,px:e=>e},mo=/([+-]?\\d+\\.?\\d*)(.*)/;function stripQuotes(e){return e.startsWith("\'")||e.startsW\ -ith(\'"\')?e.slice(1,-1):e}function getInteger({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const r=parseInt(e,10);return!isNaN(r)&&a(r)?r:t}function getFloat({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const r=parseFloat(e);return!isNaN(r)&&a(r)?r:t}function getKeyword({data:e,defaultValue:t,validate:a}){return e&&a(e=e.trim())?e:t}function getStringOption(e,t){return getKeyword({data:e,defaultValue:t[0],validate:e=>t.includes(e)})}function getMeasurement(e,t="0\ -"){t||="0";if(!e)return getMeasurement(t);const a=e.trim().match(mo);if(!a)return getMeasurement(t);const[,r,i]=a,n=parseFloat(r);if(isNaN(n))return getMeasurement(t);if(0===n)return 0;const s=po[i];return s?s(n):n}function getRatio(e){if(!e)return{num:1,den:1};const t=e.split(":",2).map((e=>parseFloat(e.trim()))).filter((e=>!isNaN(e)));1===t.length&&t.push(1);if(0===t.length)return{num:1,den:1};const[a,r]=t;return{num:a,den:r}}function getRelevant(e){return e?e.trim().split(/\\s+/).map((e=>({exc\ -luded:"-"===e[0],viewname:e.substring(1)}))):[]}class HTMLResult{static get FAILURE(){return shadow(this,"FAILURE",new HTMLResult(!1,null,null,null))}static get EMPTY(){return shadow(this,"EMPTY",new HTMLResult(!0,null,null,null))}constructor(e,t,a,r){this.success=e;this.html=t;this.bbox=a;this.breakNode=r}isBreak(){return!!this.breakNode}static breakNode(e){return new HTMLResult(!1,null,null,e)}static success(e,t=null){return new HTMLResult(!0,e,t,null)}}class FontFinder{constructor(e){this.fon\ -ts=new Map;this.cache=new Map;this.warned=new Set;this.defaultFont=null;this.add(e)}add(e,t=null){for(const t of e)this.addPdfFont(t);for(const e of this.fonts.values())e.regular||(e.regular=e.italic||e.bold||e.bolditalic);if(!t||0===t.size)return;const a=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(const e of t)this.fonts.set(e,a)}addPdfFont(e){const t=e.cssFontInfo,a=t.fontFamily;let r=this.fonts.get(a);if(!r){r=Object.create(null);this.fonts.set(a,r);this.defaultFont||(this.defaultFont=r)}l\ -et i="";const n=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?i=n>=700?"bolditalic":"italic":n>=700&&(i="bold");if(!i){(e.name.includes("Bold")||e.psName?.includes("Bold"))&&(i="bold");(e.name.includes("Italic")||e.name.endsWith("It")||e.psName?.includes("Italic")||e.psName?.endsWith("It"))&&(i+="italic")}i||(i="regular");r[i]=e}getDefault(){return this.defaultFont}find(e,t=!0){let a=this.fonts.get(e)||this.cache.get(e);if(a)return a;const r=/,|-|_| |bolditalic|bold|italic|regular|it/gi\ -;let i=e.replaceAll(r,"");a=this.fonts.get(i);if(a){this.cache.set(e,a);return a}i=i.toLowerCase();const n=[];for(const[e,t]of this.fonts.entries())e.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(t);if(0===n.length)for(const[,e]of this.fonts.entries())e.regular.name?.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(e);if(0===n.length){i=i.replaceAll(/psmt|mt/gi,"");for(const[e,t]of this.fonts.entries())e.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(t)}if(0===n.length)for(const\ - e of this.fonts.values())e.regular.name?.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(e);if(n.length>=1){1!==n.length&&t&&warn(`XFA - Too many choices to guess the correct font: ${e}`);this.cache.set(e,n[0]);return n[0]}if(t&&!this.warned.has(e)){this.warned.add(e);warn(`XFA - Cannot find the font: ${e}`)}return null}}function selectFont(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}class FontInfo{constructor(e,t,a,r){this.lin\ -eHeight=a;this.paraMargin=t||{top:0,bottom:0,left:0,right:0};if(!e){[this.pdfFont,this.xfaFont]=this.defaultFont(r);return}this.xfaFont={typeface:e.typeface,posture:e.posture,weight:e.weight,size:e.size,letterSpacing:e.letterSpacing};const i=r.find(e.typeface);if(i){this.pdfFont=selectFont(e,i);this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(r))}else[this.pdfFont,this.xfaFont]=this.defaultFont(r)}defaultFont(e){const t=e.find("Helvetica",!1)||e.find("Myriad Pro",!1)||e.find("Arial",!\ -1)||e.getDefault();if(t?.regular){const e=t.regular;return[e,{typeface:e.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0}]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}}class FontSelector{constructor(e,t,a,r){this.fontFinder=r;this.stack=[new FontInfo(e,t,a,r)]}pushData(e,t,a){const r=this.stack.at(-1);for(const t of["typeface","posture","weight","size","letterSpacing"])e[t]||(e[t]=r.xfaFont[t]);for(const e of["top","b\ -ottom","left","right"])isNaN(t[e])&&(t[e]=r.paraMargin[e]);const i=new FontInfo(e,t,a||r.lineHeight,this.fontFinder);i.pdfFont||(i.pdfFont=r.pdfFont);this.stack.push(i)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}}class TextMeasure{constructor(e,t,a,r){this.glyphs=[];this.fontSelector=new FontSelector(e,t,a,r);this.extraHeight=0}pushData(e,t,a){this.fontSelector.pushData(e,t,a)}popFont(e){return this.fontSelector.popFont()}addPara(){const e=this.fontSelector.topFont();this.extr\ -aHeight+=e.paraMargin.top+e.paraMargin.bottom}addString(e){if(!e)return;const t=this.fontSelector.topFont(),a=t.xfaFont.size;if(t.pdfFont){const r=t.xfaFont.letterSpacing,i=t.pdfFont,n=i.lineHeight||1.2,s=t.lineHeight||Math.max(1.2,n)*a,o=n-(void 0===i.lineGap?.2:i.lineGap),c=Math.max(1,o)*a,l=a/1e3,h=i.defaultWidth||i.charsToGlyphs(" ")[0].width;for(const t of e.split(/[\\u2029\\n]/)){const e=i.encodeString(t).join(""),a=i.charsToGlyphs(e);for(const e of a){const t=e.width||h;this.glyphs.push([t*\ -l+r,s,c,e.unicode,!1])}this.glyphs.push([0,0,0,"\\n",!0])}this.glyphs.pop()}else{for(const t of e.split(/[\\u2029\\n]/)){for(const e of t.split(""))this.glyphs.push([a,1.2*a,a,e,!1]);this.glyphs.push([0,0,0,"\\n",!0])}this.glyphs.pop()}}compute(e){let t=-1,a=0,r=0,i=0,n=0,s=0,o=!1,c=!0;for(let l=0,h=this.glyphs.length;l<h;l++){const[h,u,d,f,g]=this.glyphs[l],p=" "===f,m=c?d:u;if(g){r=Math.max(r,n);n=0;i+=s;s=m;t=-1;a=0;c=!1}else if(p)if(n+h>e){r=Math.max(r,n);n=0;i+=s;s=m;t=-1;a=0;o=!0;c=!1}else{s=M\ -ath.max(m,s);a=n;n+=h;t=l}else if(n+h>e){i+=s;s=m;if(-1!==t){l=t;r=Math.max(r,a);n=0;t=-1;a=0}else{r=Math.max(r,n);n=h}o=!0;c=!1}else{n+=h;s=Math.max(m,s)}}r=Math.max(r,n);i+=s+this.extraHeight;return{width:1.02*r,height:i,isBroken:o}}}const bo=/^[^.[]+/,yo=/^[^\\]]+/,wo=0,xo=1,So=2,Ao=3,ko=4,Co=new Map([["$data",(e,t)=>e.datasets?e.datasets.data:e],["$record",(e,t)=>(e.datasets?e.datasets.data:e)[Ss]()[0]],["$template",(e,t)=>e.template],["$connectionSet",(e,t)=>e.connectionSet],["$form",(e,t)=>\ -e.form],["$layout",(e,t)=>e.layout],["$host",(e,t)=>e.host],["$dataWindow",(e,t)=>e.dataWindow],["$event",(e,t)=>e.event],["!",(e,t)=>e.datasets],["$xfa",(e,t)=>e],["xfa",(e,t)=>e],["$",(e,t)=>t]]),vo=new WeakMap;function parseExpression(e,t,a=!0){let r=e.match(bo);if(!r)return null;let[i]=r;const n=[{name:i,cacheName:"."+i,index:0,js:null,formCalc:null,operator:wo}];let s=i.length;for(;s<e.length;){const c=s;if("["===e.charAt(s++)){r=e.slice(s).match(yo);if(!r){warn("XFA - Invalid index in SOM \ -expression");return null}n.at(-1).index="*"===(o=(o=r[0]).trim())?1/0:parseInt(o,10)||0;s+=r[0].length+1;continue}let l;switch(e.charAt(s)){case".":if(!t)return null;s++;l=xo;break;case"#":s++;l=So;break;case"[":if(a){warn("XFA - SOM expression contains a FormCalc subexpression which is not supported for now.");return null}l=Ao;break;case"(":if(a){warn("XFA - SOM expression contains a JavaScript subexpression which is not supported for now.");return null}l=ko;break;default:l=wo}r=e.slice(s).matc\ -h(bo);if(!r)break;[i]=r;s+=i.length;n.push({name:i,cacheName:e.slice(c,s),operator:l,index:0,js:null,formCalc:null})}var o;return n}function searchNode(e,t,a,r=!0,i=!0){const n=parseExpression(a,r);if(!n)return null;const s=Co.get(n[0].name);let o,c=0;if(s){o=!0;e=[s(e,t)];c=1}else{o=null===t;e=[t||e]}for(let a=n.length;c<a;c++){const{name:a,cacheName:r,operator:s,index:l}=n[c],h=[];for(const t of e){if(!t.isXFAObject)continue;let e,n;if(i){n=vo.get(t);if(!n){n=new Map;vo.set(t,n)}e=n.get(r)}if(\ -!e){switch(s){case wo:e=t[ms](a,!1);break;case xo:e=t[ms](a,!0);break;case So:e=t[ps](a);e=e.isXFAObjectArray?e.children:[e]}i&&n.set(r,e)}e.length>0&&h.push(e)}if(0!==h.length||o||0!==c)e=isFinite(l)?h.filter((e=>l<e.length)).map((e=>e[l])):h.flat();else{const a=t[vs]();if(!(t=a))return null;c=-1;e=[t]}}return 0===e.length?null:e}function createDataNode(e,t,a){const r=parseExpression(a);if(!r)return null;if(r.some((e=>e.operator===xo)))return null;const i=Co.get(r[0].name);let n=0;if(i){e=i(e,t\ -);n=1}else e=t||e;for(let t=r.length;n<t;n++){const{name:t,operator:a,index:i}=r[n];if(!isFinite(i)){r[n].index=0;return e.createNodes(r.slice(n))}let s;switch(a){case wo:s=e[ms](t,!1);break;case xo:s=e[ms](t,!0);break;case So:s=e[ps](t);s=s.isXFAObjectArray?s.children:[s]}if(0===s.length)return e.createNodes(r.slice(n));if(!(i<s.length)){r[n].index=i-s.length;return e.createNodes(r.slice(n))}{const t=s[i];if(!t.isXFAObject){warn("XFA - Cannot create a node.");return null}e=t}}return null}const \ -Fo=Symbol(),Io=Symbol(),Oo=Symbol(),Mo=Symbol("_children"),Do=Symbol(),Bo=Symbol(),Ro=Symbol(),No=Symbol(),Eo=Symbol(),Po=Symbol(),Lo=Symbol(),jo=Symbol(),_o=Symbol(),Uo=Symbol("parent"),Xo=Symbol(),qo=Symbol(),Ho=Symbol();let Wo=0;const zo=go.datasets.id;class XFAObject{constructor(e,t,a=!1){this[Hs]=e;this[Ws]=t;this[Lo]=a;this[Uo]=null;this[Mo]=[];this[uo]=`${t}${Wo++}`;this[Is]=null}get isXFAObject(){return!0}get isXFAObjectArray(){return!1}createNodes(e){let t=this,a=null;for(const{name:r,i\ -ndex:i}of e){for(let e=0,n=isFinite(i)?i:0;e<=n;e++){const e=t[Hs]===zo?-1:t[Hs];a=new XmlObject(e,r);t[Qn](a)}t=a}return a}[$s](e){if(!this[Lo]||!this[Gs](e))return!1;const t=e[Ws],a=this[t];if(!(a instanceof XFAObjectArray)){null!==a&&this[Zs](a);this[t]=e;this[Qn](e);return!0}if(a.push(e)){this[Qn](e);return!0}let r="";this.id?r=` (id: ${this.id})`:this.name&&(r=` (name: ${this.name} ${this.h.value})`);warn(`XFA - node "${this[Ws]}"${r} has already enough "${t}"!`);return!1}[Gs](e){return thi\ -s.hasOwnProperty(e[Ws])&&e[Hs]===this[Hs]}[Ls](){return!1}[Yn](){return!1}[Bs](){return!1}[Rs](){return!1}[Js](){this.para&&this[Fs]()[ls].paraStack.pop()}[Ys](){this[Fs]()[ls].paraStack.push(this.para)}[ao](e){this.id&&this[Hs]===go.template.id&&e.set(this.id,this)}[Fs](){return this[Is].template}[js](){return!1}[_s](){return!1}[Qn](e){e[Uo]=this;this[Mo].push(e);!e[Is]&&this[Is]&&(e[Is]=this[Is])}[Zs](e){const t=this[Mo].indexOf(e);this[Mo].splice(t,1)}[Ts](){return this.hasOwnProperty("value"\ -)}[io](e){}[Vs](e){}[hs](){}[ts](e){delete this[Lo];if(this[rs]){e.clean(this[rs]);delete this[rs]}}[Ms](e){return this[Mo].indexOf(e)}[Ds](e,t){t[Uo]=this;this[Mo].splice(e,0,t);!t[Is]&&this[Is]&&(t[Is]=this[Is])}[Us](){return!this.name}[qs](){return""}[so](){return 0===this[Mo].length?this[ss]:this[Mo].map((e=>e[so]())).join("")}get[Oo](){const e=Object.getPrototypeOf(this);if(!e._attributes){const t=e._attributes=new Set;for(const e of Object.getOwnPropertyNames(this)){if(null===this[e]||this\ -[e]instanceof XFAObject||this[e]instanceof XFAObjectArray)break;t.add(e)}}return shadow(this,Oo,e._attributes)}[Es](e){let t=this;for(;t;){if(t===e)return!0;t=t[vs]()}return!1}[vs](){return this[Uo]}[Cs](){return this[vs]()}[Ss](e=null){return e?this[e]:this[Mo]}[cs](){const e=Object.create(null);this[ss]&&(e.$content=this[ss]);for(const t of Object.getOwnPropertyNames(this)){const a=this[t];null!==a&&(a instanceof XFAObject?e[t]=a[cs]():a instanceof XFAObjectArray?a.isEmpty()||(e[t]=a.dump()):e\ -[t]=a)}return e}[ho](){return null}[co](){return HTMLResult.EMPTY}*[As](){for(const e of this[Ss]())yield e}*[No](e,t){for(const a of this[As]())if(!e||t===e.has(a[Ws])){const e=this[gs](),t=a[co](e);t.success||(this[ls].failingNode=a);yield t}}[us](){return null}[Zn](e,t){this[ls].children.push(e)}[gs](){}[es]({filter:e=null,include:t=!0}){if(this[ls].generator){const e=this[gs](),t=this[ls].failingNode[co](e);if(!t.success)return t;t.html&&this[Zn](t.html,t.bbox);delete this[ls].failingNode}el\ -se this[ls].generator=this[No](e,t);for(;;){const e=this[ls].generator.next();if(e.done)break;const t=e.value;if(!t.success)return t;t.html&&this[Zn](t.html,t.bbox)}this[ls].generator=null;return HTMLResult.EMPTY}[ro](e){this[qo]=new Set(Object.keys(e))}[Po](e){const t=this[Oo],a=this[qo];return[...e].filter((e=>t.has(e)&&!a.has(e)))}[eo](e,t=new Set){for(const a of this[Mo])a[Xo](e,t)}[Xo](e,t){const a=this[Eo](e,t);a?this[Fo](a,e,t):this[eo](e,t)}[Eo](e,t){const{use:a,usehref:r}=this;if(!a&&!r\ -)return null;let i=null,n=null,s=null,o=a;if(r){o=r;r.startsWith("#som(")&&r.endsWith(")")?n=r.slice(5,-1):r.startsWith(".#som(")&&r.endsWith(")")?n=r.slice(6,-1):r.startsWith("#")?s=r.slice(1):r.startsWith(".#")&&(s=r.slice(2))}else a.startsWith("#")?s=a.slice(1):n=a;this.use=this.usehref="";if(s)i=e.get(s);else{i=searchNode(e.get(Qs),this,n,!0,!1);i&&(i=i[0])}if(!i){warn(`XFA - Invalid prototype reference: ${o}.`);return null}if(i[Ws]!==this[Ws]){warn(`XFA - Incompatible prototype: ${i[Ws]} !=\ -= ${this[Ws]}.`);return null}if(t.has(i)){warn("XFA - Cycle detected in prototypes use.");return null}t.add(i);const c=i[Eo](e,t);c&&i[Fo](c,e,t);i[eo](e,t);t.delete(i);return i}[Fo](e,t,a){if(a.has(e)){warn("XFA - Cycle detected in prototypes use.");return}!this[ss]&&e[ss]&&(this[ss]=e[ss]);new Set(a).add(e);for(const t of this[Po](e[qo])){this[t]=e[t];this[qo]&&this[qo].add(t)}for(const r of Object.getOwnPropertyNames(this)){if(this[Oo].has(r))continue;const i=this[r],n=e[r];if(i instanceof XF\ -AObjectArray){for(const e of i[Mo])e[Xo](t,a);for(let r=i[Mo].length,s=n[Mo].length;r<s;r++){const n=e[Mo][r][is]();if(!i.push(n))break;n[Uo]=this;this[Mo].push(n);n[Xo](t,a)}}else if(null===i){if(null!==n){const e=n[is]();e[Uo]=this;this[r]=e;this[Mo].push(e);e[Xo](t,a)}}else{i[eo](t,a);n&&i[Fo](n,t,a)}}}static[Do](e){return Array.isArray(e)?e.map((e=>XFAObject[Do](e))):"object"==typeof e&&null!==e?Object.assign({},e):e}[is](){const e=Object.create(Object.getPrototypeOf(this));for(const t of Ob\ -ject.getOwnPropertySymbols(this))try{e[t]=this[t]}catch{shadow(e,t,this[t])}e[uo]=`${e[Ws]}${Wo++}`;e[Mo]=[];for(const t of Object.getOwnPropertyNames(this)){if(this[Oo].has(t)){e[t]=XFAObject[Do](this[t]);continue}const a=this[t];e[t]=a instanceof XFAObjectArray?new XFAObjectArray(a[jo]):null}for(const t of this[Mo]){const a=t[Ws],r=t[is]();e[Mo].push(r);r[Uo]=e;null===e[a]?e[a]=r:e[a][Mo].push(r)}return e}[Ss](e=null){return e?this[Mo].filter((t=>t[Ws]===e)):this[Mo]}[ps](e){return this[e]}[ms\ -](e,t,a=!0){return Array.from(this[bs](e,t,a))}*[bs](e,t,a=!0){if("parent"!==e){for(const a of this[Mo]){a[Ws]===e&&(yield a);a.name===e&&(yield a);(t||a[Us]())&&(yield*a[bs](e,t,!1))}a&&this[Oo].has(e)&&(yield new XFAAttribute(this,e,this[e]))}else yield this[Uo]}}class XFAObjectArray{constructor(e=1/0){this[jo]=e;this[Mo]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(e){if(this[Mo].length<=this[jo]){this[Mo].push(e);return!0}warn(`XFA - node "${e[Ws]}" accepts no more than\ - ${this[jo]} children`);return!1}isEmpty(){return 0===this[Mo].length}dump(){return 1===this[Mo].length?this[Mo][0][cs]():this[Mo].map((e=>e[cs]()))}[is](){const e=new XFAObjectArray(this[jo]);e[Mo]=this[Mo].map((e=>e[is]()));return e}get children(){return this[Mo]}clear(){this[Mo].length=0}}class XFAAttribute{constructor(e,t,a){this[Uo]=e;this[Ws]=t;this[ss]=a;this[ns]=!1;this[uo]="attribute"+Wo++}[vs](){return this[Uo]}[Ns](){return!0}[ys](){return this[ss].trim()}[io](e){e=e.value||"";this[ss\ -]=e.toString()}[so](){return this[ss]}[Es](e){return this[Uo]===e||this[Uo][Es](e)}}class XmlObject extends XFAObject{constructor(e,t,a={}){super(e,t);this[ss]="";this[Bo]=null;if("#text"!==t){const e=new Map;this[Io]=e;for(const[t,r]of Object.entries(a))e.set(t,new XFAAttribute(this,t,r));if(a.hasOwnProperty(zs)){const e=a[zs].xfa.dataNode;void 0!==e&&("dataGroup"===e?this[Bo]=!1:"dataValue"===e&&(this[Bo]=!0))}}this[ns]=!1}[lo](e){const t=this[Ws];if("#text"===t){e.push(encodeToXmlString(this[\ -ss]));return}const a=utf8StringToString(t),r=this[Hs]===zo?"xfa:":"";e.push(`<${r}${a}`);for(const[t,a]of this[Io].entries()){const r=utf8StringToString(t);e.push(` ${r}="${encodeToXmlString(a[ss])}"`)}null!==this[Bo]&&(this[Bo]?e.push(\' xfa:dataNode="dataValue"\'):e.push(\' xfa:dataNode="dataGroup"\'));if(this[ss]||0!==this[Mo].length){e.push(">");if(this[ss])"string"==typeof this[ss]?e.push(encodeToXmlString(this[ss])):this[ss][lo](e);else for(const t of this[Mo])t[lo](e);e.push(`</${r}${a}>`)}el\ -se e.push("/>")}[$s](e){if(this[ss]){const e=new XmlObject(this[Hs],"#text");this[Qn](e);e[ss]=this[ss];this[ss]=""}this[Qn](e);return!0}[Vs](e){this[ss]+=e}[hs](){if(this[ss]&&this[Mo].length>0){const e=new XmlObject(this[Hs],"#text");this[Qn](e);e[ss]=this[ss];delete this[ss]}}[co](){return"#text"===this[Ws]?HTMLResult.success({name:"#text",value:this[ss]}):HTMLResult.EMPTY}[Ss](e=null){return e?this[Mo].filter((t=>t[Ws]===e)):this[Mo]}[fs](){return this[Io]}[ps](e){const t=this[Io].get(e);ret\ -urn void 0!==t?t:this[Ss](e)}*[bs](e,t){const a=this[Io].get(e);a&&(yield a);for(const a of this[Mo]){a[Ws]===e&&(yield a);t&&(yield*a[bs](e,t))}}*[ds](e,t){const a=this[Io].get(e);!a||t&&a[ns]||(yield a);for(const a of this[Mo])yield*a[ds](e,t)}*[xs](e,t,a){for(const r of this[Mo]){r[Ws]!==e||a&&r[ns]||(yield r);t&&(yield*r[xs](e,t,a))}}[Ns](){return null===this[Bo]?0===this[Mo].length||this[Mo][0][Hs]===go.xhtml.id:this[Bo]}[ys](){return null===this[Bo]?0===this[Mo].length?this[ss].trim():this\ -[Mo][0][Hs]===go.xhtml.id?this[Mo][0][so]().trim():null:this[ss].trim()}[io](e){e=e.value||"";this[ss]=e.toString()}[cs](e=!1){const t=Object.create(null);e&&(t.$ns=this[Hs]);this[ss]&&(t.$content=this[ss]);t.$name=this[Ws];t.children=[];for(const a of this[Mo])t.children.push(a[cs](e));t.attributes=Object.create(null);for(const[e,a]of this[Io])t.attributes[e]=a[ss];return t}}class ContentObject extends XFAObject{constructor(e,t){super(e,t);this[ss]=""}[Vs](e){this[ss]+=e}[hs](){}}class OptionOb\ -ject extends ContentObject{constructor(e,t,a){super(e,t);this[_o]=a}[hs](){this[ss]=getKeyword({data:this[ss],defaultValue:this[_o][0],validate:e=>this[_o].includes(e)})}[ts](e){super[ts](e);delete this[_o]}}class StringObject extends ContentObject{[hs](){this[ss]=this[ss].trim()}}class IntegerObject extends ContentObject{constructor(e,t,a,r){super(e,t);this[Ro]=a;this[Ho]=r}[hs](){this[ss]=getInteger({data:this[ss],defaultValue:this[Ro],validate:this[Ho]})}[ts](e){super[ts](e);delete this[Ro];d\ -elete this[Ho]}}class Option01 extends IntegerObject{constructor(e,t){super(e,t,0,(e=>1===e))}}class Option10 extends IntegerObject{constructor(e,t){super(e,t,1,(e=>0===e))}}function measureToString(e){return"string"==typeof e?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}const $o={anchorType(e,t){const a=e[Cs]();if(a&&(!a.layout||"position"===a.layout)){"transform"in t||(t.transform="");switch(e.anchorType){case"bottomCenter":t.transform+="translate(-50%, -100%)";break;case"bottomLeft"\ -:t.transform+="translate(0,-100%)";break;case"bottomRight":t.transform+="translate(-100%,-100%)";break;case"middleCenter":t.transform+="translate(-50%,-50%)";break;case"middleLeft":t.transform+="translate(0,-50%)";break;case"middleRight":t.transform+="translate(-100%,-50%)";break;case"topCenter":t.transform+="translate(-50%,0)";break;case"topRight":t.transform+="translate(-100%,0)"}}},dimensions(e,t){const a=e[Cs]();let r=e.w;const i=e.h;if(a.layout?.includes("row")){const t=a[ls],i=e.colSpan;le\ -t n;if(-1===i){n=Math.sumPrecise(t.columnWidths.slice(t.currentColumn));t.currentColumn=0}else{n=Math.sumPrecise(t.columnWidths.slice(t.currentColumn,t.currentColumn+i));t.currentColumn=(t.currentColumn+e.colSpan)%t.columnWidths.length}isNaN(n)||(r=e.w=n)}t.width=""!==r?measureToString(r):"auto";t.height=""!==i?measureToString(i):"auto"},position(e,t){const a=e[Cs]();if(!a?.layout||"position"===a.layout){t.position="absolute";t.left=measureToString(e.x);t.top=measureToString(e.y)}},rotate(e,t){i\ -f(e.rotate){"transform"in t||(t.transform="");t.transform+=`rotate(-${e.rotate}deg)`;t.transformOrigin="top left"}},presence(e,t){switch(e.presence){case"invisible":t.visibility="hidden";break;case"hidden":case"inactive":t.display="none"}},hAlign(e,t){if("para"===e[Ws])switch(e.hAlign){case"justifyAll":t.textAlign="justify-all";break;case"radix":t.textAlign="left";break;default:t.textAlign=e.hAlign}else switch(e.hAlign){case"left":t.alignSelf="start";break;case"center":t.alignSelf="center";break\ -;case"right":t.alignSelf="end"}},margin(e,t){e.margin&&(t.margin=e.margin[ho]().margin)}};function setMinMaxDimensions(e,t){if("position"===e[Cs]().layout){e.minW>0&&(t.minWidth=measureToString(e.minW));e.maxW>0&&(t.maxWidth=measureToString(e.maxW));e.minH>0&&(t.minHeight=measureToString(e.minH));e.maxH>0&&(t.maxHeight=measureToString(e.maxH))}}function layoutText(e,t,a,r,i,n){const s=new TextMeasure(t,a,r,i);"string"==typeof e?s.addString(e):e[Ks](s);return s.compute(n)}function layoutNode(e,t)\ -{let a=null,r=null,i=!1;if((!e.w||!e.h)&&e.value){let n=0,s=0;if(e.margin){n=e.margin.leftInset+e.margin.rightInset;s=e.margin.topInset+e.margin.bottomInset}let o=null,c=null;if(e.para){c=Object.create(null);o=""===e.para.lineHeight?null:e.para.lineHeight;c.top=""===e.para.spaceAbove?0:e.para.spaceAbove;c.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow;c.left=""===e.para.marginLeft?0:e.para.marginLeft;c.right=""===e.para.marginRight?0:e.para.marginRight}let l=e.font;if(!l){const t=e[Fs]();let \ -a=e[vs]();for(;a&&a!==t;){if(a.font){l=a.font;break}a=a[vs]()}}const h=(e.w||t.width)-n,u=e[Is].fontFinder;if(e.value.exData&&e.value.exData[ss]&&"text/html"===e.value.exData.contentType){const t=layoutText(e.value.exData[ss],l,c,o,u,h);r=t.width;a=t.height;i=t.isBroken}else{const t=e.value[so]();if(t){const e=layoutText(t,l,c,o,u,h);r=e.width;a=e.height;i=e.isBroken}}null===r||e.w||(r+=n);null===a||e.h||(a+=s)}return{w:r,h:a,isBroken:i}}function computeBbox(e,t,a){let r;if(""!==e.w&&""!==e.h)r=\ -[e.x,e.y,e.w,e.h];else{if(!a)return null;let i=e.w;if(""===i){if(0===e.maxW){const t=e[Cs]();i="position"===t.layout&&""!==t.w?0:e.minW}else i=Math.min(e.maxW,a.width);t.attributes.style.width=measureToString(i)}let n=e.h;if(""===n){if(0===e.maxH){const t=e[Cs]();n="position"===t.layout&&""!==t.h?0:e.minH}else n=Math.min(e.maxH,a.height);t.attributes.style.height=measureToString(n)}r=[e.x,e.y,i,n]}return r}function fixDimensions(e){const t=e[Cs]();if(t.layout?.includes("row")){const a=t[ls],r=e.\ -colSpan;let i;i=-1===r?Math.sumPrecise(a.columnWidths.slice(a.currentColumn)):Math.sumPrecise(a.columnWidths.slice(a.currentColumn,a.currentColumn+r));isNaN(i)||(e.w=i)}t.layout&&"position"!==t.layout&&(e.x=e.y=0);"table"===e.layout&&""===e.w&&Array.isArray(e.columnWidths)&&(e.w=Math.sumPrecise(e.columnWidths))}function layoutClass(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"\ -xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}}function toStyle(e,...t){const a=Object.create(null);for(const r of t){const t=e[r];if(null!==t)if($o.hasOwnProperty(r))$o[r](e,a);else if(t instanceof XFAObject){const e=t[ho]();e?Object.assign(a,e):warn(`(DEBUG) - XFA - style for ${r} not implemented yet`)}}return a}function createWrapper(e,t){const{attributes:a}=t,{style:r}=a,i={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};a.class.push("xfaWrap\ -ped");if(e.border){const{widths:a,insets:n}=e.border[ls];let s,o,c=n[0],l=n[3];const h=n[0]+n[2],u=n[1]+n[3];switch(e.border.hand){case"even":c-=a[0]/2;l-=a[3]/2;s=`calc(100% + ${(a[1]+a[3])/2-u}px)`;o=`calc(100% + ${(a[0]+a[2])/2-h}px)`;break;case"left":c-=a[0];l-=a[3];s=`calc(100% + ${a[1]+a[3]-u}px)`;o=`calc(100% + ${a[0]+a[2]-h}px)`;break;case"right":s=u?`calc(100% - ${u}px)`:"100%";o=h?`calc(100% - ${h}px)`:"100%"}const d=["xfaBorder"];isPrintOnly(e.border)&&d.push("xfaPrintOnly");const f={\ -name:"div",attributes:{class:d,style:{top:`${c}px`,left:`${l}px`,width:s,height:o}},children:[]};for(const e of["border","borderWidth","borderColor","borderRadius","borderStyle"])if(void 0!==r[e]){f.attributes.style[e]=r[e];delete r[e]}i.children.push(f,t)}else i.children.push(t);for(const e of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])if(void 0!==r[e]){i.attributes.style[e]=r[e];delete r[\ -e]}i.attributes.style.position="absolute"===r.position?"absolute":"relative";delete r.position;if(r.alignSelf){i.attributes.style.alignSelf=r.alignSelf;delete r.alignSelf}return i}function fixTextIndent(e){const t=getMeasurement(e.textIndent,"0px");if(t>=0)return;const a="padding"+("left"===("right"===e.textAlign?"right":"left")?"Left":"Right"),r=getMeasurement(e[a],"0px");e[a]=r-t+"px"}function setAccess(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly"\ -:t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}}function isPrintOnly(e){return e.relevant.length>0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function getCurrentPara(e){const t=e[Fs]()[ls].paraStack;return t.length?t.at(-1):null}function setPara(e,t,a){if(a.attributes.class?.includes("xfaRich")){if(t){""===e.h&&(t.height="auto");""===e.w&&(t.width="auto")}const r=getCurrentPara(e);if(r){const e=a.attributes.style;e.display="flex";e.flexDirection="column";switc\ -h(r.vAlign){case"top":e.justifyContent="start";break;case"bottom":e.justifyContent="end";break;case"middle":e.justifyContent="center"}const t=r[ho]();for(const[a,r]of Object.entries(t))a in e||(e[a]=r)}}}function setFontFamily(e,t,a,r){if(!a){delete r.fontFamily;return}const i=stripQuotes(e.typeface);r.fontFamily=`"${i}"`;const n=a.find(i);if(n){const{fontFamily:a}=n.regular.cssFontInfo;a!==i&&(r.fontFamily=`"${a}"`);const s=getCurrentPara(t);if(s&&""!==s.lineHeight)return;if(r.lineHeight)return\ -;const o=selectFont(e,n);o&&(r.lineHeight=Math.max(1.2,o.lineHeight))}}function fixURL(e){const t=createValidAbsoluteUrl(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null}function createLine(e,t){return{name:"div",attributes:{class:["lr-tb"===e.layout?"xfaLr":"xfaRl"]},children:t}}function flushHTML(e){if(!e[ls])return null;const t={name:"div",attributes:e[ls].attributes,children:e[ls].children};if(e[ls].failingNode){const a=e[ls].failingNode[us]();a&&(e.layout.endsWith(\ -"-tb")?t.children.push(createLine(e,[a])):t.children.push(a))}return 0===t.children.length?null:t}function addHTML(e,t,a){const r=e[ls],i=r.availableSpace,[n,s,o,c]=a;switch(e.layout){case"position":r.width=Math.max(r.width,n+o);r.height=Math.max(r.height,s+c);r.children.push(t);break;case"lr-tb":case"rl-tb":if(!r.line||1===r.attempt){r.line=createLine(e,[]);r.children.push(r.line);r.numberInLine=0}r.numberInLine+=1;r.line.children.push(t);if(0===r.attempt){r.currentWidth+=o;r.height=Math.max(r.\ -height,r.prevHeight+c)}else{r.currentWidth=o;r.prevHeight=r.height;r.height+=c;r.attempt=0}r.width=Math.max(r.width,r.currentWidth);break;case"rl-row":case"row":{r.children.push(t);r.width+=o;r.height=Math.max(r.height,c);const e=measureToString(r.height);for(const t of r.children)t.attributes.style.height=e;break}case"table":case"tb":r.width=MathClamp(o,r.width,i.width);r.height+=c;r.children.push(t)}}function getAvailableSpace(e){const t=e[ls].availableSpace,a=e.margin?e.margin.topInset+e.marg\ -in.bottomInset:0,r=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[ls].attempt?{width:t.width-r-e[ls].currentWidth,height:t.height-a-e[ls].prevHeight}:{width:t.width-r,height:t.height-a-e[ls].height};case"rl-row":case"row":return{width:Math.sumPrecise(e[ls].columnWidths.slice(e[ls].currentColumn)),height:t.height-r};case"table":case"tb":return{width:t.width-r,height:t.height-a-e[ls].height};default:return t}}function checkDimensions(e,t){if\ -(null===e[Fs]()[ls].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;const a=e[Cs](),r=a[ls]?.attempt||0,[,i,n,s]=function getTransformedBBox(e){let t,a,r=""===e.w?NaN:e.w,i=""===e.h?NaN:e.h,[n,s]=[0,0];switch(e.anchorType||""){case"bottomCenter":[n,s]=[r/2,i];break;case"bottomLeft":[n,s]=[0,i];break;case"bottomRight":[n,s]=[r,i];break;case"middleCenter":[n,s]=[r/2,i/2];break;case"middleLeft":[n,s]=[0,i/2];break;case"middleRight":[n,s]=[r,i/2];break;case"topCenter":[n,s]=[r/2,0];break;cas\ -e"topRight":[n,s]=[r,0]}switch(e.rotate||0){case 0:[t,a]=[-n,-s];break;case 90:[t,a]=[-s,n];[r,i]=[i,-r];break;case 180:[t,a]=[n,s];[r,i]=[-r,-i];break;case 270:[t,a]=[s,-n];[r,i]=[-i,r]}return[e.x+t+Math.min(0,r),e.y+a+Math.min(0,i),Math.abs(r),Math.abs(i)]}(e);switch(a.layout){case"lr-tb":case"rl-tb":return 0===r?e[Fs]()[ls].noLayoutFailure?""!==e.w?Math.round(n-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(s-t.height)>2)&&(""!==e.w?Math.round(n-t.width)<=2||0===a[ls].numberInLine&&t.height>2:t\ -.width>2):!!e[Fs]()[ls].noLayoutFailure||!(""!==e.h&&Math.round(s-t.height)>2)&&((""===e.w||Math.round(n-t.width)<=2||!a[_s]())&&t.height>2);case"table":case"tb":return!!e[Fs]()[ls].noLayoutFailure||(""===e.h||e[js]()?(""===e.w||Math.round(n-t.width)<=2||!a[_s]())&&t.height>2:Math.round(s-t.height)<=2);case"position":if(e[Fs]()[ls].noLayoutFailure)return!0;if(""===e.h||Math.round(s+i-t.height)<=2)return!0;return s+i>e[Fs]()[ls].currentContentArea.h;case"rl-row":case"row":return!!e[Fs]()[ls].noLa\ -youtFailure||(""===e.h||Math.round(s-t.height)<=2);default:return!0}}const Go=go.template.id,Vo="http://www.w3.org/2000/svg",Ko=/^H(\\d+)$/,Jo=new Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),Yo=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"im\ -age/png"]];function getBorderDims(e){if(!e||!e.border)return{w:0,h:0};const t=e.border[ws]();return t?{w:t.widths[0]+t.widths[2]+t.insets[0]+t.insets[2],h:t.widths[1]+t.widths[3]+t.insets[1]+t.insets[3]}:{w:0,h:0}}function hasMargin(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function _setValue(e,t){if(!e.value){const t=new Value({});e[Qn](t);e.value=t}e.value[io](t)}function*getContainedChildren(e){for(const t of e[Ss]())t instanceof Su\ -bformSet?yield*t[As]():yield t}function isRequired(e){return"error"===e.validate?.nullTest}function setTabIndex(e){for(;e;){if(!e.traversal){e[no]=e[vs]()[no];return}if(e[no])return;let t=null;for(const a of e.traversal[Ss]())if("next"===a.operation){t=a;break}if(!t||!t.ref){e[no]=e[vs]()[no];return}const a=e[Fs]();e[no]=++a[no];const r=a[to](t.ref,e);if(!r)return;e=r[0]}}function applyAssist(e,t){const a=e.assist;if(a){const e=a[co]();e&&(t.title=e);const r=a.role.match(Ko);if(r){const e="headi\ -ng",a=r[1];t.role=e;t["aria-level"]=a}}if("table"===e.layout)t.role="table";else if("row"===e.layout)t.role="row";else{const a=e[vs]();"row"===a.layout&&(t.role="TH"===a.assist?.role?"columnheader":"cell")}}function ariaLabel(e){if(!e.assist)return null;const t=e.assist;return t.speak&&""!==t.speak[ss]?t.speak[ss]:t.toolTip?t.toolTip[ss]:null}function valueToHtml(e){return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{s\ -tyle:Object.create(null)},value:e}]})}function setFirstUnsplittable(e){const t=e[Fs]();if(null===t[ls].firstUnsplittable){t[ls].firstUnsplittable=e;t[ls].noLayoutFailure=!0}}function unsetFirstUnsplittable(e){const t=e[Fs]();t[ls].firstUnsplittable===e&&(t[ls].noLayoutFailure=!1)}function handleBreak(e){if(e[ls])return!1;e[ls]=Object.create(null);if("auto"===e.targetType)return!1;const t=e[Fs]();let a=null;if(e.target){a=t[to](e.target,e[vs]());if(!a)return!1;a=a[0]}const{currentPageArea:r,curre\ -ntContentArea:i}=t[ls];if("pageArea"===e.targetType){a instanceof PageArea||(a=null);if(e.startNew){e[ls].target=a||r;return!0}if(a&&a!==r){e[ls].target=a;return!0}return!1}a instanceof ContentArea||(a=null);const n=a&&a[vs]();let s,o=n;if(e.startNew)if(a){const e=n.contentArea.children,t=e.indexOf(i),r=e.indexOf(a);-1!==t&&t<r&&(o=null);s=r-1}else s=r.contentArea.children.indexOf(i);else{if(!a||a===i)return!1;s=n.contentArea.children.indexOf(a)-1;o=n===r?null:n}e[ls].target=o;e[ls].index=s;retu\ -rn!0}function handleOverflow(e,t,a){const r=e[Fs](),i=r[ls].noLayoutFailure,n=t[Cs];t[Cs]=()=>e;r[ls].noLayoutFailure=!0;const s=t[co](a);e[Zn](s.html,s.bbox);r[ls].noLayoutFailure=i;t[Cs]=n}class AppearanceFilter extends StringObject{constructor(e){super(Go,"appearanceFilter");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Arc extends XFAObject{constructor(e){super(Go,"arc",!0);this.circular=getInteger({data:e.circ\ -ular,defaultValue:0,validate:e=>1===e});this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.startAngle=getFloat({data:e.startAngle,defaultValue:0,validate:e=>!0});this.sweepAngle=getFloat({data:e.sweepAngle,defaultValue:360,validate:e=>!0});this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null;this.fill=null}[co](){const e=this.edge||new Edge({}),t=e[ho](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[ho]()):a.fill="transparent\ -";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;let r;const i={xmlns:Vo,style:{width:"100%",height:"100%",overflow:"visible"}};if(360===this.sweepAngle)r={name:"ellipse",attributes:{xmlns:Vo,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:a}};else{const e=this.startAngle*Math.PI/180,t=this.sweepAngle*Math.PI/180,n=this.sweepAngle>180?1:0,[s,o,c,l]=[50*(1+Math.cos(e)),50*(1-Math.sin(e)),50*(1+Math.cos(e+t)),50*(1-Math.sin(e+t))];r={name:"path",attributes:{xmlns:Vo\ -,d:`M ${s} ${o} A 50 50 0 ${n} 0 ${c} ${l}`,vectorEffect:"non-scaling-stroke",style:a}};Object.assign(i,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}const n={name:"svg",children:[r],attributes:i};if(hasMargin(this[vs]()[vs]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[n]});n.attributes.style.position="absolute";return HTMLResult.success(n)}}class Area extends XFAObject{constructor(e){super(Go,"area",!0);this.colSpan=ge\ -tInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null;this.area=new XFAObjectArray;this.draw=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObj\ -ectArray}*[As](){yield*getContainedChildren(this)}[Us](){return!0}[Rs](){return!0}[Zn](e,t){const[a,r,i,n]=t;this[ls].width=Math.max(this[ls].width,a+i);this[ls].height=Math.max(this[ls].height,r+n);this[ls].children.push(e)}[gs](){return this[ls].availableSpace}[co](e){const t=toStyle(this,"position"),a={style:t,id:this[uo],class:["xfaArea"]};isPrintOnly(this)&&a.class.push("xfaPrintOnly");this.name&&(a.xfaName=this.name);const r=[];this[ls]={children:r,width:0,height:0,availableSpace:e};const \ -i=this[es]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!i.success){if(i.isBreak())return i;delete this[ls];return HTMLResult.FAILURE}t.width=measureToString(this[ls].width);t.height=measureToString(this[ls].height);const n={name:"div",attributes:a,children:r},s=[this.x,this.y,this[ls].width,this[ls].height];delete this[ls];return HTMLResult.success(n,s)}}class Assist extends XFAObject{constructor(e){super(Go,"assist",!0);this.id=e.id||"";this.role=\ -e.role||"";this.use=e.use||"";this.usehref=e.usehref||"";this.speak=null;this.toolTip=null}[co](){return this.toolTip?.[ss]||null}}class Barcode extends XFAObject{constructor(e){super(Go,"barcode",!0);this.charEncoding=getKeyword({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)});this.checksum=getStringOption(e.checks\ -um,["none","1mod10","1mod10_1mod11","2mod10","auto"]);this.dataColumnCount=getInteger({data:e.dataColumnCount,defaultValue:-1,validate:e=>e>=0});this.dataLength=getInteger({data:e.dataLength,defaultValue:-1,validate:e=>e>=0});this.dataPrep=getStringOption(e.dataPrep,["none","flateCompress"]);this.dataRowCount=getInteger({data:e.dataRowCount,defaultValue:-1,validate:e=>e>=0});this.endChar=e.endChar||"";this.errorCorrectionLevel=getInteger({data:e.errorCorrectionLevel,defaultValue:-1,validate:e=>e\ ->=0&&e<=8});this.id=e.id||"";this.moduleHeight=getMeasurement(e.moduleHeight,"5mm");this.moduleWidth=getMeasurement(e.moduleWidth,"0.25mm");this.printCheckDigit=getInteger({data:e.printCheckDigit,defaultValue:0,validate:e=>1===e});this.rowColumnRatio=getRatio(e.rowColumnRatio);this.startChar=e.startChar||"";this.textLocation=getStringOption(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]);this.truncate=getInteger({data:e.truncate,defaultValue:0,validate:e=>1===e});this.ty\ -pe=getStringOption(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","pos\ -tusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]);this.upsMode=getStringOption(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]);this.use=e.use||"";this.usehref=e.usehref||"";this.wideNarrowRatio=getRatio(e.wide\ -NarrowRatio);this.encrypt=null;this.extras=null}}class Bind extends XFAObject{constructor(e){super(Go,"bind",!0);this.match=getStringOption(e.match,["once","dataRef","global","none"]);this.ref=e.ref||"";this.picture=null}}class BindItems extends XFAObject{constructor(e){super(Go,"bindItems");this.connection=e.connection||"";this.labelRef=e.labelRef||"";this.ref=e.ref||"";this.valueRef=e.valueRef||""}}class Bookend extends XFAObject{constructor(e){super(Go,"bookend");this.id=e.id||"";this.leader=\ -e.leader||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||""}}class BooleanElement extends Option01{constructor(e){super(Go,"boolean");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[co](e){return valueToHtml(1===this[ss]?"1":"0")}}class Border extends XFAObject{constructor(e){super(Go,"border",!0);this.break=getStringOption(e.break,["close","open"]);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.prese\ -nce=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.extras=null;this.fill=null;this.margin=null}[ws](){if(!this[ls]){const e=this.edge.children.slice();if(e.length<4){const t=e.at(-1)||new Edge({});for(let a=e.length;a<4;a++)e.push(t)}const t=e.map((e=>e.thickness)),a=[0,0,0,0];if(this.margin){a[0]=this.margin.topInset;\ -a[1]=this.margin.rightInset;a[2]=this.margin.bottomInset;a[3]=this.margin.leftInset}this[ls]={widths:t,insets:a,edges:e}}return this[ls]}[ho](){const{edges:e}=this[ws](),t=e.map((e=>{const t=e[ho]();t.color||="#000000";return t})),a=Object.create(null);this.margin&&Object.assign(a,this.margin[ho]());"visible"===this.fill?.presence&&Object.assign(a,this.fill[ho]());if(this.corner.children.some((e=>0!==e.radius))){const e=this.corner.children.map((e=>e[ho]()));if(2===e.length||3===e.length){const \ -t=e.at(-1);for(let a=e.length;a<4;a++)e.push(t)}a.borderRadius=e.map((e=>e.radius)).join(" ")}switch(this.presence){case"invisible":case"hidden":a.borderStyle="";break;case"inactive":a.borderStyle="none";break;default:a.borderStyle=t.map((e=>e.style)).join(" ")}a.borderWidth=t.map((e=>e.width)).join(" ");a.borderColor=t.map((e=>e.color)).join(" ");return a}}class Break extends XFAObject{constructor(e){super(Go,"break",!0);this.after=getStringOption(e.after,["auto","contentArea","pageArea","pageE\ -ven","pageOdd"]);this.afterTarget=e.afterTarget||"";this.before=getStringOption(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.beforeTarget=e.beforeTarget||"";this.bookendLeader=e.bookendLeader||"";this.bookendTrailer=e.bookendTrailer||"";this.id=e.id||"";this.overflowLeader=e.overflowLeader||"";this.overflowTarget=e.overflowTarget||"";this.overflowTrailer=e.overflowTrailer||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.use=e.use||"";\ -this.usehref=e.usehref||"";this.extras=null}}class BreakAfter extends XFAObject{constructor(e){super(Go,"breakAfter",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}}class BreakBefore extends XFAObject{constructor(e){super(Go,"bre\ -akBefore",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}[co](e){this[ls]={};return HTMLResult.FAILURE}}class Button extends XFAObject{constructor(e){super(Go,"button",!0);this.highlight=getStringOption(e.highlight,["inverted","n\ -one","outline","push"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[co](e){const t=this[vs]()[vs](),a={name:"button",attributes:{id:this[uo],class:["xfaButton"],style:{}},children:[]};for(const e of t.event.children){if("click"!==e.activity||!e.script)continue;const t=recoverJsURL(e.script[ss]);if(!t)continue;const r=fixURL(t.url);r&&a.children.push({name:"a",attributes:{id:"link"+this[uo],href:r,newWindow:t.newWindow,class:["xfaLink"],style:{}},children:[]})\ -}return HTMLResult.success(a)}}class Calculate extends XFAObject{constructor(e){super(Go,"calculate",!0);this.id=e.id||"";this.override=getStringOption(e.override,["disabled","error","ignore","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.script=null}}class Caption extends XFAObject{constructor(e){super(Go,"caption",!0);this.id=e.id||"";this.placement=getStringOption(e.placement,["left","bottom","inline","right","top"]);this.presence=getStringOp\ -tion(e.presence,["visible","hidden","inactive","invisible"]);this.reserve=Math.ceil(getMeasurement(e.reserve));this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.font=null;this.margin=null;this.para=null;this.value=null}[io](e){_setValue(this,e)}[ws](e){if(!this[ls]){let{width:t,height:a}=e;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":a=this.reserve<=0?a:this.reserve}this[ls]=layoutNode(this,{width:t,hei\ -ght:a})}return this[ls]}[co](e){if(!this.value)return HTMLResult.EMPTY;this[Ys]();const t=this.value[co](e).html;if(!t){this[Js]();return HTMLResult.EMPTY}const a=this.reserve;if(this.reserve<=0){const{w:t,h:a}=this[ws](e);switch(this.placement){case"left":case"right":case"inline":this.reserve=t;break;case"top":case"bottom":this.reserve=a}}const r=[];"string"==typeof t?r.push({name:"#text",value:t}):r.push(t);const i=toStyle(this,"font","margin","visibility");switch(this.placement){case"left":ca\ -se"right":this.reserve>0&&(i.width=measureToString(this.reserve));break;case"top":case"bottom":this.reserve>0&&(i.height=measureToString(this.reserve))}setPara(this,null,t);this[Js]();this.reserve=a;return HTMLResult.success({name:"div",attributes:{style:i,class:["xfaCaption"]},children:r})}}class Certificate extends StringObject{constructor(e){super(Go,"certificate");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Certificates extends XFAObject{constru\ -ctor(e){super(Go,"certificates",!0);this.credentialServerPolicy=getStringOption(e.credentialServerPolicy,["optional","required"]);this.id=e.id||"";this.url=e.url||"";this.urlPolicy=e.urlPolicy||"";this.use=e.use||"";this.usehref=e.usehref||"";this.encryption=null;this.issuers=null;this.keyUsage=null;this.oids=null;this.signing=null;this.subjectDNs=null}}class CheckButton extends XFAObject{constructor(e){super(Go,"checkButton",!0);this.id=e.id||"";this.mark=getStringOption(e.mark,["default","chec\ -k","circle","cross","diamond","square","star"]);this.shape=getStringOption(e.shape,["square","round"]);this.size=getMeasurement(e.size,"10pt");this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(this,"margin"),a=measureToString(this.size);t.width=t.height=a;let r,i,n;const s=this[vs]()[vs](),o=s.items.children.length&&s.items.children[0][co]().html||[],c={on:(void 0!==o[0]?o[0]:"on").toString(),off:(void 0!==o[1]?o[1]:"off").to\ -String()},l=(s.value?.[so]()||"off")===c.on||void 0,h=s[Cs](),u=s[uo];let d;if(h instanceof ExclGroup){n=h[uo];r="radio";i="xfaRadio";d=h[os]?.[uo]||h[uo]}else{r="checkbox";i="xfaCheckbox";d=s[os]?.[uo]||s[uo]}const f={name:"input",attributes:{class:[i],style:t,fieldId:u,dataId:d,type:r,checked:l,xfaOn:c.on,xfaOff:c.off,"aria-label":ariaLabel(s),"aria-required":!1}};n&&(f.attributes.name=n);if(isRequired(s)){f.attributes["aria-required"]=!0;f.attributes.required=!0}return HTMLResult.success({nam\ -e:"label",attributes:{class:["xfaLabel"]},children:[f]})}}class ChoiceList extends XFAObject{constructor(e){super(Go,"choiceList",!0);this.commitOn=getStringOption(e.commitOn,["select","exit"]);this.id=e.id||"";this.open=getStringOption(e.open,["userControl","always","multiSelect","onEntry"]);this.textEntry=getInteger({data:e.textEntry,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(this,"\ -border","margin"),a=this[vs]()[vs](),r={fontSize:`calc(${a.font?.size||10}px * var(--total-scale-factor))`},i=[];if(a.items.children.length>0){const e=a.items;let t=0,n=0;if(2===e.children.length){t=e.children[0].save;n=1-t}const s=e.children[t][co]().html,o=e.children[n][co]().html;let c=!1;const l=a.value?.[so]()||"";for(let e=0,t=s.length;e<t;e++){const t={name:"option",attributes:{value:o[e]||s[e],style:r},value:s[e]};o[e]===l&&(t.attributes.selected=c=!0);i.push(t)}c||i.splice(0,0,{name:"op\ -tion",attributes:{hidden:!0,selected:!0},value:" "})}const n={class:["xfaSelect"],fieldId:a[uo],dataId:a[os]?.[uo]||a[uo],style:t,"aria-label":ariaLabel(a),"aria-required":!1};if(isRequired(a)){n["aria-required"]=!0;n.required=!0}"multiSelect"===this.open&&(n.multiple=!0);return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[{name:"select",children:i,attributes:n}]})}}class Color extends XFAObject{constructor(e){super(Go,"color",!0);this.cSpace=getStringOption(e.cSpac\ -e,["SRGB"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.value=e.value?function getColor(e,t=[0,0,0]){let[a,r,i]=t;if(!e)return{r:a,g:r,b:i};const n=e.split(",",3).map((e=>MathClamp(parseInt(e.trim(),10),0,255))).map((e=>isNaN(e)?0:e));if(n.length<3)return{r:a,g:r,b:i};[a,r,i]=n;return{r:a,g:r,b:i}}(e.value):"";this.extras=null}[Ts](){return!1}[ho](){return this.value?Util.makeHexColor(this.value.r,this.value.g,this.value.b):null}}class Comb extends XFAObject{constructor(e\ -){super(Go,"comb");this.id=e.id||"";this.numberOfCells=getInteger({data:e.numberOfCells,defaultValue:0,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||""}}class Connect extends XFAObject{constructor(e){super(Go,"connect",!0);this.connection=e.connection||"";this.id=e.id||"";this.ref=e.ref||"";this.usage=getStringOption(e.usage,["exportAndImport","exportOnly","importOnly"]);this.use=e.use||"";this.usehref=e.usehref||"";this.picture=null}}class ContentArea extends XFAObject{construct\ -or(e){super(Go,"contentArea",!0);this.h=getMeasurement(e.h);this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=getMeasurement(e.w);this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null}[co](e){const t={left:measureToString(this.x),top:measureToString(this.y),width:measureToString(this.w),height:measureToString(this.h)},a=["xfaContentarea"];isPrintOnly(this)&&a.push("xfaPrintO\ -nly");return HTMLResult.success({name:"div",children:[],attributes:{style:t,class:a,id:this[uo]}})}}class Corner extends XFAObject{constructor(e){super(Go,"corner",!0);this.id=e.id||"";this.inverted=getInteger({data:e.inverted,defaultValue:0,validate:e=>1===e});this.join=getStringOption(e.join,["square","round"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.radius=getMeasurement(e.radius);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashD\ -otDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](){const e=toStyle(this,"visibility");e.radius=measureToString("square"===this.join?0:this.radius);return e}}class DateElement extends ContentObject{constructor(e){super(Go,"date");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=this[ss].trim();this\ -[ss]=e?new Date(e):null}[co](e){return valueToHtml(this[ss]?this[ss].toString():"")}}class DateTime extends ContentObject{constructor(e){super(Go,"dateTime");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=this[ss].trim();this[ss]=e?new Date(e):null}[co](e){return valueToHtml(this[ss]?this[ss].toString():"")}}class DateTimeEdit extends XFAObject{constructor(e){super(Go,"dateTimeEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto"\ -,"off","on"]);this.id=e.id||"";this.picker=getStringOption(e.picker,["host","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(this,"border","font","margin"),a=this[vs]()[vs](),r={name:"input",attributes:{type:"text",fieldId:a[uo],dataId:a[os]?.[uo]||a[uo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){r.attributes["aria-required"]=!0;r.attributes.require\ -d=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[r]})}}class Decimal extends ContentObject{constructor(e){super(Go,"decimal");this.fracDigits=getInteger({data:e.fracDigits,defaultValue:2,validate:e=>!0});this.id=e.id||"";this.leadDigits=getInteger({data:e.leadDigits,defaultValue:-1,validate:e=>!0});this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=parseFloat(this[ss].trim());this[ss]=isNaN(e)?null:e}[co](e){return valueToHtml(\ -null!==this[ss]?this[ss].toString():"")}}class DefaultUi extends XFAObject{constructor(e){super(Go,"defaultUi",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class Desc extends XFAObject{constructor(e){super(Go,"desc",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAOb\ -jectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class DigestMethod extends OptionObject{constructor(e){super(Go,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class DigestMethods extends XFAObject{constructor(e){super(Go,"digestMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.us\ -ehref=e.usehref||"";this.digestMethod=new XFAObjectArray}}class Draw extends XFAObject{constructor(e){super(Go,"draw",!0);this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);th\ -is.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this\ -.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.border=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.value=null;this.setProperty=new XFAObjectArray}[io](e){_setValue(this,e)}[co](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;fixDimensions(this);this[Ys]();const t=this.w,a=this.h,{w:r,h:i,isBroken:n}\ -=layoutNode(this,e);if(r&&""===this.w){if(n&&this[Cs]()[_s]()){this[Js]();return HTMLResult.FAILURE}this.w=r}i&&""===this.h&&(this.h=i);setFirstUnsplittable(this);if(!checkDimensions(this,e)){this.w=t;this.h=a;this[Js]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const s=toStyle(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");setMinMaxDimensions(this,s);if(s.margin){s.padding=s.margin;delete s.margin}const o=["xfaDraw"];this.font&&o.pu\ -sh("xfaFont");isPrintOnly(this)&&o.push("xfaPrintOnly");const c={style:s,id:this[uo],class:o};this.name&&(c.xfaName=this.name);const l={name:"div",attributes:c,children:[]};applyAssist(this,c);const h=computeBbox(this,l,e),u=this.value?this.value[co](e).html:null;if(null===u){this.w=t;this.h=a;this[Js]();return HTMLResult.success(createWrapper(this,l),h)}l.children.push(u);setPara(this,s,u);this.w=t;this.h=a;this[Js]();return HTMLResult.success(createWrapper(this,l),h)}}class Edge extends XFAObj\ -ect{constructor(e){super(Go,"edge",!0);this.cap=getStringOption(e.cap,["square","butt","round"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](){const e=toStyle(this,"visibility");\ -Object.assign(e,{linecap:this.cap,width:measureToString(this.thickness),color:this.color?this.color[ho]():"#000000",style:""});if("visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}class Encoding ext\ -ends OptionObject{constructor(e){super(Go,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Encodings extends XFAObject{constructor(e){super(Go,"encodings",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encoding=new XFAObjectArray}}class Encrypt extends XFAObject{constructor(e){super(Go,"encrypt",!0);this.id=e.id||"";thi\ -s.use=e.use||"";this.usehref=e.usehref||"";this.certificate=null}}class EncryptData extends XFAObject{constructor(e){super(Go,"encryptData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["encrypt","decrypt"]);this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Encryption extends XFAObject{constructor(e){super(Go,"encryption",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use\ -||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class EncryptionMethod extends OptionObject{constructor(e){super(Go,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EncryptionMethods extends XFAObject{constructor(e){super(Go,"encryptionMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.enc\ -ryptionMethod=new XFAObjectArray}}class Event extends XFAObject{constructor(e){super(Go,"event",!0);this.activity=getStringOption(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]);this.id=e.id||"";this.listen=getStringOption(e.listen,["r\ -efOnly","refAndDescendents"]);this.name=e.name||"";this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.encryptData=null;this.execute=null;this.script=null;this.signData=null;this.submit=null}}class ExData extends ContentObject{constructor(e){super(Go,"exData");this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.maxLength=getInteger({data:e.maxLength,defaultValue:-1,validate:e=>e>=-1});this.name=e.name||"";this.rid=e.rid||"";this.transf\ -erEncoding=getStringOption(e.transferEncoding,["none","base64","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[Bs](){return"text/html"===this.contentType}[$s](e){if("text/html"===this.contentType&&e[Hs]===go.xhtml.id){this[ss]=e;return!0}if("text/xml"===this.contentType){this[ss]=e;return!0}return!1}[co](e){return"text/html"===this.contentType&&this[ss]?this[ss][co](e):HTMLResult.EMPTY}}class ExObject extends XFAObject{constructor(e){super(Go,"exObject",!0);this.archive=e.archive||"";\ -this.classId=e.classId||"";this.codeBase=e.codeBase||"";this.codeType=e.codeType||"";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;thi\ -s.time=new XFAObjectArray}}class ExclGroup extends XFAObject{constructor(e){super(Go,"exclGroup",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.accessKey=e.accessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";\ -this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.re\ -levant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.margin=null;this.para=null;this.traversal=null;this.validate=null;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.field=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Rs](){return!0}[Ts](){retur\ -n!0}[io](e){for(const t of this.field.children){if(!t.value){const e=new Value({});t[Qn](e);t.value=e}t.value[io](e)}}[_s](){return this.layout.endsWith("-tb")&&0===this[ls].attempt&&this[ls].numberInLine>0||this[vs]()[_s]()}[js](){const e=this[Cs]();if(!e[js]())return!1;if(void 0!==this[ls]._isSplittable)return this[ls]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[ls]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[ls].numberInLine)return!1;this[ls]\ -._isSplittable=!0;return!0}[us](){return flushHTML(this)}[Zn](e,t){addHTML(this,e,t)}[gs](){return getAvailableSpace(this)}[co](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[uo],class:[]};setAccess(this,a.class);this[ls]||=Object.create(null);Object.assign(this[ls],{children:t,attributes:a,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),h\ -eight:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const r=this[js]();r||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const i=new Set(["field"]);if(this.layout.includes("row")){const e=this[Cs]().columnWidths;if(Array.isArray(e)&&e.length>0){this[ls].columnWidths=e;this[ls].currentColumn=0}}const n=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),s=["xfaExclgroup"],o=layoutClass(this);o&\ -&s.push(o);isPrintOnly(this)&&s.push("xfaPrintOnly");a.style=n;a.class=s;this.name&&(a.xfaName=this.name);this[Ys]();const c="lr-tb"===this.layout||"rl-tb"===this.layout,l=c?2:1;for(;this[ls].attempt<l;this[ls].attempt++){c&&1===this[ls].attempt&&(this[ls].numberInLine=0);const e=this[es]({filter:i,include:!0});if(e.success)break;if(e.isBreak()){this[Js]();return e}if(c&&0===this[ls].attempt&&0===this[ls].numberInLine&&!this[Fs]()[ls].noLayoutFailure){this[ls].attempt=l;break}}this[Js]();r||unse\ -tFirstUnsplittable(this);if(this[ls].attempt===l){r||delete this[ls];return HTMLResult.FAILURE}let h=0,u=0;if(this.margin){h=this.margin.leftInset+this.margin.rightInset;u=this.margin.topInset+this.margin.bottomInset}const d=Math.max(this[ls].width+h,this.w||0),f=Math.max(this[ls].height+u,this.h||0),g=[this.x,this.y,d,f];""===this.w&&(n.width=measureToString(d));""===this.h&&(n.height=measureToString(f));const p={name:"div",attributes:a,children:t};applyAssist(this,a);delete this[ls];return HTM\ -LResult.success(createWrapper(this,p),g)}}class Execute extends XFAObject{constructor(e){super(Go,"execute");this.connection=e.connection||"";this.executeType=getStringOption(e.executeType,["import","remerge"]);this.id=e.id||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Extras extends XFAObject{constructor(e){super(Go,"extras",!0);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boole\ -an=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.extras=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class Field extends XFAObject{constructor(e){super(Go,"field",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.accessKey=e.a\ -ccessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.max\ -W,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=nul\ -l;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.format=null;this.items=new XFAObjectArray(2);this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.validate=null;this.value=null;this.bindItems=new XFAObjectArray;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Rs](){return!0}[io](e){_setValue(this,e)}[co](e){setTabIndex(this);if(!this.ui){this.ui=new Ui({});this.ui[Is]=this\ -[Is];this[Qn](this.ui);let e;switch(this.items.children.length){case 0:e=new TextEdit({});this.ui.textEdit=e;break;case 1:e=new CheckButton({});this.ui.checkButton=e;break;case 2:e=new ChoiceList({});this.ui.choiceList=e}this.ui[Qn](e)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;this.caption&&delete this.caption[ls];this[Ys]();const t=this.caption?this.caption[co](e).html:null,a=this.w,r=this.h;let i=0,n=0;if(this.margin){i=th\ -is.margin.leftInset+this.margin.rightInset;n=this.margin.topInset+this.margin.bottomInset}let s=null;if(""===this.w||""===this.h){let t=null,a=null,r=0,o=0;if(this.ui.checkButton)r=o=this.ui.checkButton.size;else{const{w:t,h:a}=layoutNode(this,e);if(null!==t){r=t;o=a}else o=function fonts_getMetrics(e,t=!1){let a=null;if(e){const t=stripQuotes(e.typeface),r=e[Is].fontFinder.find(t);a=selectFont(e,r)}if(!a)return{lineHeight:12,lineGap:2,lineNoGap:10};const r=e.size||10,i=a.lineHeight?Math.max(t?0\ -:1.2,a.lineHeight):1.2,n=void 0===a.lineGap?.2:a.lineGap;return{lineHeight:i*r,lineGap:n*r,lineNoGap:Math.max(1,i-n)*r}}(this.font,!0).lineNoGap}s=getBorderDims(this.ui[ws]());r+=s.w;o+=s.h;if(this.caption){const{w:i,h:n,isBroken:s}=this.caption[ws](e);if(s&&this[Cs]()[_s]()){this[Js]();return HTMLResult.FAILURE}t=i;a=n;switch(this.caption.placement){case"left":case"right":case"inline":t+=r;break;case"top":case"bottom":a+=o}}else{t=r;a=o}if(t&&""===this.w){t+=i;this.w=Math.min(this.maxW<=0?1/0:t\ -his.maxW,this.minW+1<t?t:this.minW)}if(a&&""===this.h){a+=n;this.h=Math.min(this.maxH<=0?1/0:this.maxH,this.minH+1<a?a:this.minH)}}this[Js]();fixDimensions(this);setFirstUnsplittable(this);if(!checkDimensions(this,e)){this.w=a;this.h=r;this[Js]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const o=toStyle(this,"font","dimensions","position","rotate","anchorType","presence","margin","hAlign");setMinMaxDimensions(this,o);const c=["xfaField"];this.font&&c.push("xfaFont");isPrintOnly(this\ -)&&c.push("xfaPrintOnly");const l={style:o,id:this[uo],class:c};if(o.margin){o.padding=o.margin;delete o.margin}setAccess(this,c);this.name&&(l.xfaName=this.name);const h=[],u={name:"div",attributes:l,children:h};applyAssist(this,l);const d=this.border?this.border[ho]():null,f=computeBbox(this,u,e),g=this.ui[co]().html;if(!g){Object.assign(o,d);return HTMLResult.success(createWrapper(this,u),f)}this[no]&&(g.children?.[0]?g.children[0].attributes.tabindex=this[no]:g.attributes.tabindex=this[no]);\ -g.attributes.style||=Object.create(null);let p=null;if(this.ui.button){1===g.children.length&&([p]=g.children.splice(0,1));Object.assign(g.attributes.style,d)}else Object.assign(o,d);h.push(g);if(this.value)if(this.ui.imageEdit)g.children.push(this.value[co]().html);else if(!this.ui.button){let e="";if(this.value.exData)e=this.value.exData[so]();else if(this.value.text)e=this.value.text[ws]();else{const t=this.value[co]().html;null!==t&&(e=t.children[0].value)}this.ui.textEdit&&this.value.text?.\ -maxChars&&(g.children[0].attributes.maxLength=this.value.text.maxChars);if(e){if(this.ui.numericEdit){e=parseFloat(e);e=isNaN(e)?"":e.toString()}"textarea"===g.children[0].name?g.children[0].attributes.textContent=e:g.children[0].attributes.value=e}}if(!this.ui.imageEdit&&g.children?.[0]&&this.h){s=s||getBorderDims(this.ui[ws]());let t=0;if(this.caption&&["top","bottom"].includes(this.caption.placement)){t=this.caption.reserve;t<=0&&(t=this.caption[ws](e).h);const a=this.h-t-n-s.h;g.children[0].\ -attributes.style.height=measureToString(a)}else g.children[0].attributes.style.height="100%"}p&&g.children.push(p);if(!t){g.attributes.class&&g.attributes.class.push("xfaLeft");this.w=a;this.h=r;return HTMLResult.success(createWrapper(this,u),f)}if(this.ui.button){o.padding&&delete o.padding;"div"===t.name&&(t.name="span");g.children.push(t);return HTMLResult.success(u,f)}this.ui.checkButton&&(t.attributes.class[0]="xfaCaptionForCheckButton");g.attributes.class||=[];g.children.splice(0,0,t);swit\ -ch(this.caption.placement){case"left":case"inline":g.attributes.class.push("xfaLeft");break;case"right":g.attributes.class.push("xfaRight");break;case"top":g.attributes.class.push("xfaTop");break;case"bottom":g.attributes.class.push("xfaBottom")}this.w=a;this.h=r;return HTMLResult.success(createWrapper(this,u),f)}}class Fill extends XFAObject{constructor(e){super(Go,"fill",!0);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.use=e.use||"\ -";this.usehref=e.usehref||"";this.color=null;this.extras=null;this.linear=null;this.pattern=null;this.radial=null;this.solid=null;this.stipple=null}[ho](){const e=this[vs](),t=e[vs]()[vs](),a=Object.create(null);let r="color",i=r;if(e instanceof Border){r="background-color";i="background";t instanceof Ui&&(a.backgroundColor="white")}if(e instanceof Rectangle||e instanceof Arc){r=i="fill";a.fill="white"}for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"color"===e)continue;const t\ -=this[e];if(!(t instanceof XFAObject))continue;const n=t[ho](this.color);n&&(a[n.startsWith("#")?r:i]=n);return a}if(this.color?.value){const e=this.color[ho]();a[e.startsWith("#")?r:i]=e}return a}}class Filter extends XFAObject{constructor(e){super(Go,"filter",!0);this.addRevocationInfo=getStringOption(e.addRevocationInfo,["","required","optional","none"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.version=getInteger({data:this.version,defaultValue:\ -5,validate:e=>e>=1&&e<=5});this.appearanceFilter=null;this.certificates=null;this.digestMethods=null;this.encodings=null;this.encryptionMethods=null;this.handler=null;this.lockDocument=null;this.mdp=null;this.reasons=null;this.timeStamp=null}}class Float extends ContentObject{constructor(e){super(Go,"float");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=parseFloat(this[ss].trim());this[ss]=isNaN(e)?null:e}[co](e){return valueToHtml(null!==this\ -[ss]?this[ss].toString():"")}}class template_Font extends XFAObject{constructor(e){super(Go,"font",!0);this.baselineShift=getMeasurement(e.baselineShift);this.fontHorizontalScale=getFloat({data:e.fontHorizontalScale,defaultValue:100,validate:e=>e>=0});this.fontVerticalScale=getFloat({data:e.fontVerticalScale,defaultValue:100,validate:e=>e>=0});this.id=e.id||"";this.kerningMode=getStringOption(e.kerningMode,["none","pair"]);this.letterSpacing=getMeasurement(e.letterSpacing,"0");this.lineThrough=g\ -etInteger({data:e.lineThrough,defaultValue:0,validate:e=>1===e||2===e});this.lineThroughPeriod=getStringOption(e.lineThroughPeriod,["all","word"]);this.overline=getInteger({data:e.overline,defaultValue:0,validate:e=>1===e||2===e});this.overlinePeriod=getStringOption(e.overlinePeriod,["all","word"]);this.posture=getStringOption(e.posture,["normal","italic"]);this.size=getMeasurement(e.size,"10pt");this.typeface=e.typeface||"Courier";this.underline=getInteger({data:e.underline,defaultValue:0,valid\ -ate:e=>1===e||2===e});this.underlinePeriod=getStringOption(e.underlinePeriod,["all","word"]);this.use=e.use||"";this.usehref=e.usehref||"";this.weight=getStringOption(e.weight,["normal","bold"]);this.extras=null;this.fill=null}[ts](e){super[ts](e);this[Is].usedTypefaces.add(this.typeface)}[ho](){const e=toStyle(this,"fill"),t=e.color;if(t)if("#000000"===t)delete e.color;else if(!t.startsWith("#")){e.background=t;e.backgroundClip="text";e.color="transparent"}this.baselineShift&&(e.verticalAlign=m\ -easureToString(this.baselineShift));e.fontKerning="none"===this.kerningMode?"none":"normal";e.letterSpacing=measureToString(this.letterSpacing);if(0!==this.lineThrough){e.textDecoration="line-through";2===this.lineThrough&&(e.textDecorationStyle="double")}if(0!==this.overline){e.textDecoration="overline";2===this.overline&&(e.textDecorationStyle="double")}e.fontStyle=this.posture;e.fontSize=measureToString(.99*this.size);setFontFamily(this,this,this[Is].fontFinder,e);if(0!==this.underline){e.tex\ -tDecoration="underline";2===this.underline&&(e.textDecorationStyle="double")}e.fontWeight=this.weight;return e}}class Format extends XFAObject{constructor(e){super(Go,"format",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null}}class Handler extends StringObject{constructor(e){super(Go,"handler");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Hyphenation extends XFA\ -Object{constructor(e){super(Go,"hyphenation");this.excludeAllCaps=getInteger({data:e.excludeAllCaps,defaultValue:0,validate:e=>1===e});this.excludeInitialCap=getInteger({data:e.excludeInitialCap,defaultValue:0,validate:e=>1===e});this.hyphenate=getInteger({data:e.hyphenate,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.pushCharacterCount=getInteger({data:e.pushCharacterCount,defaultValue:3,validate:e=>e>=0});this.remainCharacterCount=getInteger({data:e.remainCharacterCount,defaultValue\ -:3,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||"";this.wordCharacterCount=getInteger({data:e.wordCharacterCount,defaultValue:7,validate:e=>e>=0})}}class Image extends StringObject{constructor(e){super(Go,"image");this.aspect=getStringOption(e.aspect,["fit","actual","height","none","width"]);this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.name=e.name||"";this.transferEncoding=getStringOption(e.transferEncoding,["base64","none","package"]);this.use=e\ -.use||"";this.usehref=e.usehref||""}[co](){if(this.contentType&&!Jo.has(this.contentType.toLowerCase()))return HTMLResult.EMPTY;let e=this[Is].images?.get(this.href);if(!e&&(this.href||!this[ss]))return HTMLResult.EMPTY;e||"base64"!==this.transferEncoding||(e=function fromBase64Util(e){return Uint8Array.fromBase64?Uint8Array.fromBase64(e):stringToBytes(atob(e))}(this[ss]));if(!e)return HTMLResult.EMPTY;if(!this.contentType){for(const[t,a]of Yo)if(e.length>t.length&&t.every(((t,a)=>t===e[a]))){th\ -is.contentType=a;break}if(!this.contentType)return HTMLResult.EMPTY}const t=new Blob([e],{type:this.contentType});let a;switch(this.aspect){case"fit":case"actual":break;case"height":a={height:"100%",objectFit:"fill"};break;case"none":a={width:"100%",height:"100%",objectFit:"fill"};break;case"width":a={width:"100%",objectFit:"fill"}}const r=this[vs]();return HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:a,src:URL.createObjectURL(t),alt:r?ariaLabel(r[vs]()):null}})}}class Ima\ -geEdit extends XFAObject{constructor(e){super(Go,"imageEdit",!0);this.data=getStringOption(e.data,["link","embed"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[co](e){return"embed"===this.data?HTMLResult.success({name:"div",children:[],attributes:{}}):HTMLResult.EMPTY}}class Integer extends ContentObject{constructor(e){super(Go,"integer");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs]\ -(){const e=parseInt(this[ss].trim(),10);this[ss]=isNaN(e)?null:e}[co](e){return valueToHtml(null!==this[ss]?this[ss].toString():"")}}class Issuers extends XFAObject{constructor(e){super(Go,"issuers",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Items extends XFAObject{constructor(e){super(Go,"items",!0);this.id=e.id||"";this.name=e.name||"";this.presence=getStringOption(e.pre\ -sence,["visible","hidden","inactive","invisible"]);this.ref=e.ref||"";this.save=getInteger({data:e.save,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[co](){c\ -onst e=[];for(const t of this[Ss]())e.push(t[so]());return HTMLResult.success(e)}}class Keep extends XFAObject{constructor(e){super(Go,"keep",!0);this.id=e.id||"";const t=["none","contentArea","pageArea"];this.intact=getStringOption(e.intact,t);this.next=getStringOption(e.next,t);this.previous=getStringOption(e.previous,t);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class KeyUsage extends XFAObject{constructor(e){super(Go,"keyUsage");const t=["","yes","no"];this.crlSign=getSt\ -ringOption(e.crlSign,t);this.dataEncipherment=getStringOption(e.dataEncipherment,t);this.decipherOnly=getStringOption(e.decipherOnly,t);this.digitalSignature=getStringOption(e.digitalSignature,t);this.encipherOnly=getStringOption(e.encipherOnly,t);this.id=e.id||"";this.keyAgreement=getStringOption(e.keyAgreement,t);this.keyCertSign=getStringOption(e.keyCertSign,t);this.keyEncipherment=getStringOption(e.keyEncipherment,t);this.nonRepudiation=getStringOption(e.nonRepudiation,t);this.type=getString\ -Option(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Line extends XFAObject{constructor(e){super(Go,"line",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.slope=getStringOption(e.slope,["\\\\","/"]);this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null}[co](){const e=this[vs]()[vs](),t=this.edge||new Edge({}),a=t[ho](),r=Object.create(null),i="visible"===t.presence?t.thickness:0;r.strokeWidth=measureToString(i);r.str\ -oke=a.color;let n,s,o,c,l="100%",h="100%";if(e.w<=i){[n,s,o,c]=["50%",0,"50%","100%"];l=r.strokeWidth}else if(e.h<=i){[n,s,o,c]=[0,"50%","100%","50%"];h=r.strokeWidth}else"\\\\"===this.slope?[n,s,o,c]=[0,0,"100%","100%"]:[n,s,o,c]=[0,"100%","100%",0];const u={name:"svg",children:[{name:"line",attributes:{xmlns:Vo,x1:n,y1:s,x2:o,y2:c,style:r}}],attributes:{xmlns:Vo,width:l,height:h,style:{overflow:"visible"}}};if(hasMargin(e))return HTMLResult.success({name:"div",attributes:{style:{display:"inline"\ -,width:"100%",height:"100%"}},children:[u]});u.attributes.style.position="absolute";return HTMLResult.success(u)}}class Linear extends XFAObject{constructor(e){super(Go,"linear",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toRight","toBottom","toLeft","toTop"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](e){e=e?e[ho]():"#FFFFFF";return`linear-gradient(${this.type.replace(/([RBLT])/," $1").toLowerCase()}, ${e}, ${this.color?this.color[ho]():"#000\ -000"})`}}class LockDocument extends ContentObject{constructor(e){super(Go,"lockDocument");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}[hs](){this[ss]=getStringOption(this[ss],["auto","0","1"])}}class Manifest extends XFAObject{constructor(e){super(Go,"manifest",!0);this.action=getStringOption(e.action,["include","all","exclude"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.ex\ -tras=null;this.ref=new XFAObjectArray}}class Margin extends XFAObject{constructor(e){super(Go,"margin",!0);this.bottomInset=getMeasurement(e.bottomInset,"0");this.id=e.id||"";this.leftInset=getMeasurement(e.leftInset,"0");this.rightInset=getMeasurement(e.rightInset,"0");this.topInset=getMeasurement(e.topInset,"0");this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[ho](){return{margin:measureToString(this.topInset)+" "+measureToString(this.rightInset)+" "+measureToString(this.bottomI\ -nset)+" "+measureToString(this.leftInset)}}}class Mdp extends XFAObject{constructor(e){super(Go,"mdp");this.id=e.id||"";this.permissions=getInteger({data:e.permissions,defaultValue:2,validate:e=>1===e||3===e});this.signatureType=getStringOption(e.signatureType,["filler","author"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Medium extends XFAObject{constructor(e){super(Go,"medium");this.id=e.id||"";this.imagingBBox=function getBBox(e){const t=-1;if(!e)return{x:t,y:t,width:t,height:t};co\ -nst a=e.split(",",4).map((e=>getMeasurement(e.trim(),"-1")));if(a.length<4||a[2]<0||a[3]<0)return{x:t,y:t,width:t,height:t};const[r,i,n,s]=a;return{x:r,y:i,width:n,height:s}}(e.imagingBBox);this.long=getMeasurement(e.long);this.orientation=getStringOption(e.orientation,["portrait","landscape"]);this.short=getMeasurement(e.short);this.stock=e.stock||"";this.trayIn=getStringOption(e.trayIn,["auto","delegate","pageFront"]);this.trayOut=getStringOption(e.trayOut,["auto","delegate"]);this.use=e.use||\ -"";this.usehref=e.usehref||""}}class Message extends XFAObject{constructor(e){super(Go,"message",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.text=new XFAObjectArray}}class NumericEdit extends XFAObject{constructor(e){super(Go,"numericEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(thi\ -s,"border","font","margin"),a=this[vs]()[vs](),r={name:"input",attributes:{type:"text",fieldId:a[uo],dataId:a[os]?.[uo]||a[uo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){r.attributes["aria-required"]=!0;r.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[r]})}}class Occur extends XFAObject{constructor(e){super(Go,"occur",!0);this.id=e.id||"";this.initial=""!==e.initial?getInteger({data:e.i\ -nitial,defaultValue:"",validate:e=>!0}):"";this.max=""!==e.max?getInteger({data:e.max,defaultValue:1,validate:e=>!0}):"";this.min=""!==e.min?getInteger({data:e.min,defaultValue:1,validate:e=>!0}):"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[ts](){const e=this[vs](),t=this.min;""===this.min&&(this.min=e instanceof PageArea||e instanceof PageSet?0:1);""===this.max&&(this.max=""===t?e instanceof PageArea||e instanceof PageSet?-1:1:this.min);-1!==this.max&&this.max<this.min&&(t\ -his.max=this.min);""===this.initial&&(this.initial=e instanceof Template?1:this.min)}}class Oid extends StringObject{constructor(e){super(Go,"oid");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Oids extends XFAObject{constructor(e){super(Go,"oids",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.oid=new XFAObjectArray}}class Overflow extends XFAObject{constructor(e){super\ -(Go,"overflow");this.id=e.id||"";this.leader=e.leader||"";this.target=e.target||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||""}[ws](){if(!this[ls]){const e=this[vs](),t=this[Fs](),a=t[to](this.target,e),r=t[to](this.leader,e),i=t[to](this.trailer,e);this[ls]={target:a?.[0]||null,leader:r?.[0]||null,trailer:i?.[0]||null,addLeader:!1,addTrailer:!1}}return this[ls]}}class PageArea extends XFAObject{constructor(e){super(Go,"pageArea",!0);this.blankOrNotBlank=getStringOpt\ -ion(e.blankOrNotBlank,["any","blank","notBlank"]);this.id=e.id||"";this.initialNumber=getInteger({data:e.initialNumber,defaultValue:1,validate:e=>!0});this.name=e.name||"";this.numbered=getInteger({data:e.numbered,defaultValue:1,validate:e=>!0});this.oddOrEven=getStringOption(e.oddOrEven,["any","even","odd"]);this.pagePosition=getStringOption(e.pagePosition,["any","first","last","only","rest"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.desc=null;thi\ -s.extras=null;this.medium=null;this.occur=null;this.area=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.draw=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray}[Xs](){if(!this[ls]){this[ls]={numberOfUse:0};return!0}return!this.occur||-1===this.occur.max||this[ls].numberOfUse<this.occur.max}[as](){delete this[ls]}[ks](){this[ls]||={numberOfUse:0};const e=this[vs]();if("orderedOccurrence"===e.relation&&this[Xs]()){this[ls\ -].numberOfUse+=1;return this}return e[ks]()}[gs](){return this[ls].space||{width:0,height:0}}[co](){this[ls]||={numberOfUse:1};const e=[];this[ls].children=e;const t=Object.create(null);if(this.medium&&this.medium.short&&this.medium.long){t.width=measureToString(this.medium.short);t.height=measureToString(this.medium.long);this[ls].space={width:this.medium.short,height:this.medium.long};if("landscape"===this.medium.orientation){const e=t.width;t.width=t.height;t.height=e;this[ls].space={width:th\ -is.medium.long,height:this.medium.short}}}else warn("XFA - No medium specified in pageArea: please file a bug.");this[es]({filter:new Set(["area","draw","field","subform"]),include:!0});this[es]({filter:new Set(["contentArea"]),include:!0});return HTMLResult.success({name:"div",children:e,attributes:{class:["xfaPage"],id:this[uo],style:t,xfaName:this.name}})}}class PageSet extends XFAObject{constructor(e){super(Go,"pageSet",!0);this.duplexImposition=getStringOption(e.duplexImposition,["longEdge"\ -,"shortEdge"]);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["orderedOccurrence","duplexPaginated","simplexPaginated"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.occur=null;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray}[as](){for(const e of this.pageArea.children)e[as]();for(const e of this.pageSet.children)e[as]()}[Xs](){return!this.occur||-1===this.occur.max||this[ls].numberOfUs\ -e<this.occur.max}[ks](){this[ls]||={numberOfUse:1,pageIndex:-1,pageSetIndex:-1};if("orderedOccurrence"===this.relation){if(this[ls].pageIndex+1<this.pageArea.children.length){this[ls].pageIndex+=1;return this.pageArea.children[this[ls].pageIndex][ks]()}if(this[ls].pageSetIndex+1<this.pageSet.children.length){this[ls].pageSetIndex+=1;return this.pageSet.children[this[ls].pageSetIndex][ks]()}if(this[Xs]()){this[ls].numberOfUse+=1;this[ls].pageIndex=-1;this[ls].pageSetIndex=-1;return this[ks]()}con\ -st e=this[vs]();if(e instanceof PageSet)return e[ks]();this[as]();return this[ks]()}const e=this[Fs]()[ls].pageNumber,t=e%2==0?"even":"odd",a=0===e?"first":"rest";let r=this.pageArea.children.find((e=>e.oddOrEven===t&&e.pagePosition===a));if(r)return r;r=this.pageArea.children.find((e=>"any"===e.oddOrEven&&e.pagePosition===a));if(r)return r;r=this.pageArea.children.find((e=>"any"===e.oddOrEven&&"any"===e.pagePosition));return r||this.pageArea.children[0]}}class Para extends XFAObject{constructor\ -(e){super(Go,"para",!0);this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.lineHeight=e.lineHeight?getMeasurement(e.lineHeight,"0pt"):"";this.marginLeft=e.marginLeft?getMeasurement(e.marginLeft,"0pt"):"";this.marginRight=e.marginRight?getMeasurement(e.marginRight,"0pt"):"";this.orphans=getInteger({data:e.orphans,defaultValue:0,validate:e=>e>=0});this.preserve=e.preserve||"";this.radixOffset=e.radixOffset?getMeasurement(e.radixOffs\ -et,"0pt"):"";this.spaceAbove=e.spaceAbove?getMeasurement(e.spaceAbove,"0pt"):"";this.spaceBelow=e.spaceBelow?getMeasurement(e.spaceBelow,"0pt"):"";this.tabDefault=e.tabDefault?getMeasurement(this.tabDefault):"";this.tabStops=(e.tabStops||"").trim().split(/\\s+/).map(((e,t)=>t%2==1?getMeasurement(e):e));this.textIndent=e.textIndent?getMeasurement(e.textIndent,"0pt"):"";this.use=e.use||"";this.usehref=e.usehref||"";this.vAlign=getStringOption(e.vAlign,["top","bottom","middle"]);this.widows=getInteg\ -er({data:e.widows,defaultValue:0,validate:e=>e>=0});this.hyphenation=null}[ho](){const e=toStyle(this,"hAlign");""!==this.marginLeft&&(e.paddingLeft=measureToString(this.marginLeft));""!==this.marginRight&&(e.paddingRight=measureToString(this.marginRight));""!==this.spaceAbove&&(e.paddingTop=measureToString(this.spaceAbove));""!==this.spaceBelow&&(e.paddingBottom=measureToString(this.spaceBelow));if(""!==this.textIndent){e.textIndent=measureToString(this.textIndent);fixTextIndent(e)}this.lineHei\ -ght>0&&(e.lineHeight=measureToString(this.lineHeight));""!==this.tabDefault&&(e.tabSize=measureToString(this.tabDefault));this.tabStops.length;this.hyphenatation&&Object.assign(e,this.hyphenatation[ho]());return e}}class PasswordEdit extends XFAObject{constructor(e){super(Go,"passwordEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.passwordChar=e.passwordChar||"*";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=nul\ -l;this.margin=null}}class template_Pattern extends XFAObject{constructor(e){super(Go,"pattern",!0);this.id=e.id||"";this.type=getStringOption(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](e){e=e?e[ho]():"#FFFFFF";const t=this.color?this.color[ho]():"#000000",a="repeating-linear-gradient",r=`${e},${e} 5px,${t} 5px,${t} 10px`;switch(this.type){case"crossHatch":return`\ -${a}(to top,${r}) ${a}(to right,${r})`;case"crossDiagonal":return`${a}(45deg,${r}) ${a}(-45deg,${r})`;case"diagonalLeft":return`${a}(45deg,${r})`;case"diagonalRight":return`${a}(-45deg,${r})`;case"horizontal":return`${a}(to top,${r})`;case"vertical":return`${a}(to right,${r})`}return""}}class Picture extends StringObject{constructor(e){super(Go,"picture");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Proto extends XFAObject{constructor(e){super(Go,"proto",!0);this.appeara\ -nceFilter=new XFAObjectArray;this.arc=new XFAObjectArray;this.area=new XFAObjectArray;this.assist=new XFAObjectArray;this.barcode=new XFAObjectArray;this.bindItems=new XFAObjectArray;this.bookend=new XFAObjectArray;this.boolean=new XFAObjectArray;this.border=new XFAObjectArray;this.break=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.button=new XFAObjectArray;this.calculate=new XFAObjectArray;this.caption=new XFAObjectArray;this.certificate=new XFA\ -ObjectArray;this.certificates=new XFAObjectArray;this.checkButton=new XFAObjectArray;this.choiceList=new XFAObjectArray;this.color=new XFAObjectArray;this.comb=new XFAObjectArray;this.connect=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.corner=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.dateTimeEdit=new XFAObjectArray;this.decimal=new XFAObjectArray;this.defaultUi=new XFAObjectArray;this.desc=new XFAObjectArray;this.digestMethod=new XFAObj\ -ectArray;this.digestMethods=new XFAObjectArray;this.draw=new XFAObjectArray;this.edge=new XFAObjectArray;this.encoding=new XFAObjectArray;this.encodings=new XFAObjectArray;this.encrypt=new XFAObjectArray;this.encryptData=new XFAObjectArray;this.encryption=new XFAObjectArray;this.encryptionMethod=new XFAObjectArray;this.encryptionMethods=new XFAObjectArray;this.event=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.execute=n\ -ew XFAObjectArray;this.extras=new XFAObjectArray;this.field=new XFAObjectArray;this.fill=new XFAObjectArray;this.filter=new XFAObjectArray;this.float=new XFAObjectArray;this.font=new XFAObjectArray;this.format=new XFAObjectArray;this.handler=new XFAObjectArray;this.hyphenation=new XFAObjectArray;this.image=new XFAObjectArray;this.imageEdit=new XFAObjectArray;this.integer=new XFAObjectArray;this.issuers=new XFAObjectArray;this.items=new XFAObjectArray;this.keep=new XFAObjectArray;this.keyUsage=ne\ -w XFAObjectArray;this.line=new XFAObjectArray;this.linear=new XFAObjectArray;this.lockDocument=new XFAObjectArray;this.manifest=new XFAObjectArray;this.margin=new XFAObjectArray;this.mdp=new XFAObjectArray;this.medium=new XFAObjectArray;this.message=new XFAObjectArray;this.numericEdit=new XFAObjectArray;this.occur=new XFAObjectArray;this.oid=new XFAObjectArray;this.oids=new XFAObjectArray;this.overflow=new XFAObjectArray;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray;this.para=\ -new XFAObjectArray;this.passwordEdit=new XFAObjectArray;this.pattern=new XFAObjectArray;this.picture=new XFAObjectArray;this.radial=new XFAObjectArray;this.reason=new XFAObjectArray;this.reasons=new XFAObjectArray;this.rectangle=new XFAObjectArray;this.ref=new XFAObjectArray;this.script=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.signData=new XFAObjectArray;this.signature=new XFAObjectArray;this.signing=new XFAObjectArray;this.solid=new XFAObjectArray;this.speak=new XFAObjectArra\ -y;this.stipple=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray;this.subjectDN=new XFAObjectArray;this.subjectDNs=new XFAObjectArray;this.submit=new XFAObjectArray;this.text=new XFAObjectArray;this.textEdit=new XFAObjectArray;this.time=new XFAObjectArray;this.timeStamp=new XFAObjectArray;this.toolTip=new XFAObjectArray;this.traversal=new XFAObjectArray;this.traverse=new XFAObjectArray;this.ui=new XFAObjectArray;this.validate=new XFAObjectArray;this.value=new \ -XFAObjectArray;this.variables=new XFAObjectArray}}class Radial extends XFAObject{constructor(e){super(Go,"radial",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toEdge","toCenter"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](e){e=e?e[ho]():"#FFFFFF";const t=this.color?this.color[ho]():"#000000";return`radial-gradient(circle at center, ${"toEdge"===this.type?`${e},${t}`:`${t},${e}`})`}}class Reason extends StringObject{constructor(e){super(Go,"rea\ -son");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Reasons extends XFAObject{constructor(e){super(Go,"reasons",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.reason=new XFAObjectArray}}class Rectangle extends XFAObject{constructor(e){super(Go,"rectangle",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.use\ -href||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.fill=null}[co](){const e=this.edge.children.length?this.edge.children[0]:new Edge({}),t=e[ho](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[ho]()):a.fill="transparent";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;const r=(this.corner.children.length?this.corner.children[0]:new Corner({}))[ho](),i={name:"svg",children:[{name:"rect",attributes:\ -{xmlns:Vo,width:"100%",height:"100%",x:0,y:0,rx:r.radius,ry:r.radius,style:a}}],attributes:{xmlns:Vo,style:{overflow:"visible"},width:"100%",height:"100%"}};if(hasMargin(this[vs]()[vs]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[i]});i.attributes.style.position="absolute";return HTMLResult.success(i)}}class RefElement extends StringObject{constructor(e){super(Go,"ref");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehr\ -ef||""}}class Script extends StringObject{constructor(e){super(Go,"script");this.binding=e.binding||"";this.contentType=e.contentType||"";this.id=e.id||"";this.name=e.name||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class SetProperty extends XFAObject{constructor(e){super(Go,"setProperty");this.connection=e.connection||"";this.ref=e.ref||"";this.target=e.target||""}}class SignData extends XFAObject{constructor(e){super(Go,"sig\ -nData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["sign","clear","verify"]);this.ref=e.ref||"";this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Signature extends XFAObject{constructor(e){super(Go,"signature",!0);this.id=e.id||"";this.type=getStringOption(e.type,["PDF1.3","PDF1.6"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.filter=null;this.manifest=null;this.margin=nu\ -ll}}class Signing extends XFAObject{constructor(e){super(Go,"signing",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Solid extends XFAObject{constructor(e){super(Go,"solid",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[ho](e){return e?e[ho]():"#FFFFFF"}}class Speak extends StringObject{constructor(e){super(Go,"speak");this.disable=getInte\ -ger({data:e.disable,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.priority=getStringOption(e.priority,["custom","caption","name","toolTip"]);this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Stipple extends XFAObject{constructor(e){super(Go,"stipple",!0);this.id=e.id||"";this.rate=getInteger({data:e.rate,defaultValue:50,validate:e=>e>=0&&e<=100});this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](e){const t=this.rate/100;return Ut\ -il.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}class Subform extends XFAObject{constructor(e){super(Go,"subform",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.allowMacro=getInteger({data:e.allowMacro,defaultValue:0,validate:e=>1===e});this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","m\ -iddleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.columnWidths=(e.columnWidths||"").trim().split(/\\s+/).map((e=>"-1"===e?-1:getMeasurement(e)));this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.locale=e.locale||"";thi\ -s.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.mergeMode=getStringOption(e.mergeMode,["consumeData","matchTemplate"]);this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.restoreState=getStringOption(e.restoreState,["manual","auto"]);this.scope=getStringOption(e.scope,["name","none"]);this.u\ -se=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.bookend=null;this.border=null;this.break=null;this.calculate=null;this.desc=null;this.extras=null;this.keep=null;this.margin=null;this.occur=null;this.overflow=null;this.pageSet=null;this.para=null;this.traversal=null;this.validate=null;this.variables=null;this.area=new XFAObjectArray;this.breakAfter=new XFAObjectArray;th\ -is.breakBefore=new XFAObjectArray;this.connect=new XFAObjectArray;this.draw=new XFAObjectArray;this.event=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.proto=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}[Cs](){const e=this[vs]();return e instanceof SubformSet?e[Cs]():e}[Rs](){return!0}[_s](){return this.layout.endsWith("-tb")&&0===this[ls].attemp\ -t&&this[ls].numberInLine>0||this[vs]()[_s]()}*[As](){yield*getContainedChildren(this)}[us](){return flushHTML(this)}[Zn](e,t){addHTML(this,e,t)}[gs](){return getAvailableSpace(this)}[js](){const e=this[Cs]();if(!e[js]())return!1;if(void 0!==this[ls]._isSplittable)return this[ls]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[ls]._isSplittable=!1;return!1}if(this.keep&&"none"!==this.keep.intact){this[ls]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[l\ -s].numberInLine)return!1;this[ls]._isSplittable=!0;return!0}[co](e){setTabIndex(this);if(this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){const e=new BreakAfter({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});e[Is]=this[Is];this[Qn](e);this.breakAfter.push(e)}if("auto"!==this.break.before||""!==this.break.beforeTarget){const e=new BreakBefore({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break\ -.startNew.toString()});e[Is]=this[Is];this[Qn](e);this.breakBefore.push(e)}if(""!==this.break.overflowTarget){const e=new Overflow({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});e[Is]=this[Is];this[Qn](e);this.overflow.push(e)}this[Zs](this.break);this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;(this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&warn("XFA - Several breakB\ -efore or breakAfter in subforms: please file a bug.");if(this.breakBefore.children.length>=1){const e=this.breakBefore.children[0];if(handleBreak(e))return HTMLResult.breakNode(e)}if(this[ls]?.afterBreakAfter)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[uo],class:[]};setAccess(this,a.class);this[ls]||=Object.create(null);Object.assign(this[ls],{children:t,line:null,attributes:a,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.\ -h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const r=this[Fs](),i=r[ls].noLayoutFailure,n=this[js]();n||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const s=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){const e=this[Cs]().columnWidths;if(Array.isArray(e)&&e.length>0){this[ls].columnWidths=e;this[ls].currentColumn=0}}const o=toStyle(this,"anchorType","dimensions","position","presence","bo\ -rder","margin","hAlign"),c=["xfaSubform"],l=layoutClass(this);l&&c.push(l);a.style=o;a.class=c;this.name&&(a.xfaName=this.name);if(this.overflow){const t=this.overflow[ws]();if(t.addLeader){t.addLeader=!1;handleOverflow(this,t.leader,e)}}this[Ys]();const h="lr-tb"===this.layout||"rl-tb"===this.layout,u=h?2:1;for(;this[ls].attempt<u;this[ls].attempt++){h&&1===this[ls].attempt&&(this[ls].numberInLine=0);const e=this[es]({filter:s,include:!0});if(e.success)break;if(e.isBreak()){this[Js]();return e}\ -if(h&&0===this[ls].attempt&&0===this[ls].numberInLine&&!r[ls].noLayoutFailure){this[ls].attempt=u;break}}this[Js]();n||unsetFirstUnsplittable(this);r[ls].noLayoutFailure=i;if(this[ls].attempt===u){this.overflow&&(this[Fs]()[ls].overflowNode=this.overflow);n||delete this[ls];return HTMLResult.FAILURE}if(this.overflow){const t=this.overflow[ws]();if(t.addTrailer){t.addTrailer=!1;handleOverflow(this,t.trailer,e)}}let d=0,f=0;if(this.margin){d=this.margin.leftInset+this.margin.rightInset;f=this.marg\ -in.topInset+this.margin.bottomInset}const g=Math.max(this[ls].width+d,this.w||0),p=Math.max(this[ls].height+f,this.h||0),m=[this.x,this.y,g,p];""===this.w&&(o.width=measureToString(g));""===this.h&&(o.height=measureToString(p));if(("0px"===o.width||"0px"===o.height)&&0===t.length)return HTMLResult.EMPTY;const b={name:"div",attributes:a,children:t};applyAssist(this,a);const y=HTMLResult.success(createWrapper(this,b),m);if(this.breakAfter.children.length>=1){const e=this.breakAfter.children[0];if(\ -handleBreak(e)){this[ls].afterBreakAfter=y;return HTMLResult.breakNode(e)}}delete this[ls];return y}}class SubformSet extends XFAObject{constructor(e){super(Go,"subformSet",!0);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["ordered","choice","unordered"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.bookend=null;this.break=null;this.desc=null;this.extras=null;this.occur=null;this.overflow=null;this.breakAfter=new XFAOb\ -jectArray;this.breakBefore=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[As](){yield*getContainedChildren(this)}[Cs](){let e=this[vs]();for(;!(e instanceof Subform);)e=e[vs]();return e}[Rs](){return!0}}class SubjectDN extends ContentObject{constructor(e){super(Go,"subjectDN");this.delimiter=e.delimiter||",";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){this[ss]=new Map(this[ss].split(this.delimiter).map((e=>{(\ -e=e.split("=",2))[0]=e[0].trim();return e})))}}class SubjectDNs extends XFAObject{constructor(e){super(Go,"subjectDNs",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.subjectDN=new XFAObjectArray}}class Submit extends XFAObject{constructor(e){super(Go,"submit",!0);this.embedPDF=getInteger({data:e.embedPDF,defaultValue:0,validate:e=>1===e});this.format=getStringOption(e.format,["xdp","formdata","pdf","urlencoded","x\ -fd","xml"]);this.id=e.id||"";this.target=e.target||"";this.textEncoding=getKeyword({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)});this.use=e.use||"";this.usehref=e.usehref||"";this.xdpContent=e.xdpContent||"";this.encrypt=null;this.encryptData=new XFAObjectArray;this.signData=new XFAObjectArray}}class Template ext\ -ends XFAObject{constructor(e){super(Go,"template",!0);this.baseProfile=getStringOption(e.baseProfile,["full","interactiveForms"]);this.extras=null;this.subform=new XFAObjectArray}[hs](){0===this.subform.children.length&&warn("XFA - No subforms in template node.");this.subform.children.length>=2&&warn("XFA - Several subforms in template node: please file a bug.");this[no]=5e3}[js](){return!0}[to](e,t){return e.startsWith("#")?[this[Os].get(e.slice(1))]:searchNode(this,t,e,!0,!0)}*[oo](){if(!this.\ -subform.children.length)return HTMLResult.success({name:"div",children:[]});this[ls]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};const e=this.subform.children[0];e.pageSet[as]();const t=e.pageSet.pageArea.children,a={name:"div",children:[]};let r=null,i=null,n=null;if(e.breakBefore.children.length>=1){i=e.breakBefore.children[0];n=i.target}else \ -if(e.subform.children.length>=1&&e.subform.children[0].breakBefore.children.length>=1){i=e.subform.children[0].breakBefore.children[0];n=i.target}else if(e.break?.beforeTarget){i=e.break;n=i.beforeTarget}else if(e.subform.children.length>=1&&e.subform.children[0].break?.beforeTarget){i=e.subform.children[0].break;n=i.beforeTarget}if(i){const e=this[to](n,i[vs]());if(e instanceof PageArea){r=e;i[ls]={}}}r||=t[0];r[ls]={numberOfUse:1};const s=r[vs]();s[ls]={numberOfUse:1,pageIndex:s.pageArea.child\ -ren.indexOf(r),pageSetIndex:0};let o,c=null,l=null,h=!0,u=0,d=0;for(;;){if(h)u=0;else{a.children.pop();if(3==++u){warn("XFA - Something goes wrong: please file a bug.");return a}}o=null;this[ls].currentPageArea=r;const t=r[co]().html;a.children.push(t);if(c){this[ls].noLayoutFailure=!0;t.children.push(c[co](r[ls].space).html);c=null}if(l){this[ls].noLayoutFailure=!0;t.children.push(l[co](r[ls].space).html);l=null}const i=r.contentArea.children,n=t.children.filter((e=>e.attributes.class.includes(\ -"xfaContentarea")));h=!1;this[ls].firstUnsplittable=null;this[ls].noLayoutFailure=!1;const flush=t=>{const a=e[us]();if(a){h||=a.children?.length>0;n[t].children.push(a)}};for(let t=d,r=i.length;t<r;t++){const r=this[ls].currentContentArea=i[t],s={width:r.w,height:r.h};d=0;if(c){n[t].children.push(c[co](s).html);c=null}if(l){n[t].children.push(l[co](s).html);l=null}const u=e[co](s);if(u.success){if(u.html){h||=u.html.children?.length>0;n[t].children.push(u.html)}else!h&&a.children.length>1&&a.ch\ -ildren.pop();return a}if(u.isBreak()){const e=u.breakNode;flush(t);if("auto"===e.targetType)continue;if(e.leader){c=this[to](e.leader,e[vs]());c=c?c[0]:null}if(e.trailer){l=this[to](e.trailer,e[vs]());l=l?l[0]:null}if("pageArea"===e.targetType){o=e[ls].target;t=1/0}else if(e[ls].target){o=e[ls].target;d=e[ls].index+1;t=1/0}else t=e[ls].index}else if(this[ls].overflowNode){const e=this[ls].overflowNode;this[ls].overflowNode=null;const a=e[ws](),r=a.target;a.addLeader=null!==a.leader;a.addTrailer=\ -null!==a.trailer;flush(t);const n=t;t=1/0;if(r instanceof PageArea)o=r;else if(r instanceof ContentArea){const e=i.indexOf(r);if(-1!==e)e>n?t=e-1:d=e;else{o=r[vs]();d=o.contentArea.children.indexOf(r)}}}else flush(t)}this[ls].pageNumber+=1;o&&(o[Xs]()?o[ls].numberOfUse+=1:o=null);r=o||r[ks]();yield null}}}class Text extends ContentObject{constructor(e){super(Go,"text");this.id=e.id||"";this.maxChars=getInteger({data:e.maxChars,defaultValue:0,validate:e=>e>=0});this.name=e.name||"";this.rid=e.rid\ -||"";this.use=e.use||"";this.usehref=e.usehref||""}[Yn](){return!0}[$s](e){if(e[Hs]===go.xhtml.id){this[ss]=e;return!0}warn(`XFA - Invalid content in Text: ${e[Ws]}.`);return!1}[Vs](e){this[ss]instanceof XFAObject||super[Vs](e)}[hs](){"string"==typeof this[ss]&&(this[ss]=this[ss].replaceAll("\\r\\n","\\n"))}[ws](){return"string"==typeof this[ss]?this[ss].split(/[\\u2029\\u2028\\n]/).filter((e=>!!e)).join("\\n"):this[ss][so]()}[co](e){if("string"==typeof this[ss]){const e=valueToHtml(this[ss]).html;if(t\ -his[ss].includes("\\u2029")){e.name="div";e.children=[];this[ss].split("\\u2029").map((e=>e.split(/[\\u2028\\n]/).flatMap((e=>[{name:"span",value:e},{name:"br"}])))).forEach((t=>{e.children.push({name:"p",children:t})}))}else if(/[\\u2028\\n]/.test(this[ss])){e.name="div";e.children=[];this[ss].split(/[\\u2028\\n]/).forEach((t=>{e.children.push({name:"span",value:t},{name:"br"})}))}return HTMLResult.success(e)}return this[ss][co](e)}}class TextEdit extends XFAObject{constructor(e){super(Go,"textEdit",!0\ -);this.allowRichText=getInteger({data:e.allowRichText,defaultValue:0,validate:e=>1===e});this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.multiLine=getInteger({data:e.multiLine,defaultValue:"",validate:e=>0===e||1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.vScrollPolicy=getStringOption(e.vScrollPolicy,["auto","off","on"]);this.border=null;this.comb=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(this,"border","font","margi\ -n");let a;const r=this[vs]()[vs]();""===this.multiLine&&(this.multiLine=r instanceof Draw?1:0);a=1===this.multiLine?{name:"textarea",attributes:{dataId:r[os]?.[uo]||r[uo],fieldId:r[uo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(r),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:r[os]?.[uo]||r[uo],fieldId:r[uo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(r),"aria-required":!1}};if(isRequired(r)){a.attributes["aria-required"]=!0;a.attributes.required=!0}retur\ -n HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}class Time extends StringObject{constructor(e){super(Go,"time");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=this[ss].trim();this[ss]=e?new Date(e):null}[co](e){return valueToHtml(this[ss]?this[ss].toString():"")}}class TimeStamp extends XFAObject{constructor(e){super(Go,"timeStamp");this.id=e.id||"";this.server=e.server||"";this.type=getStringOption(e.type,["o\ -ptional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class ToolTip extends StringObject{constructor(e){super(Go,"toolTip");this.id=e.id||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Traversal extends XFAObject{constructor(e){super(Go,"traversal",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.traverse=new XFAObjectArray}}class Traverse extends XFAObject{constructor(e){super(Go,"traverse",!0);this.id=e.id||"";t\ -his.operation=getStringOption(e.operation,["next","back","down","first","left","right","up"]);this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.script=null}get name(){return this.operation}[Us](){return!1}}class Ui extends XFAObject{constructor(e){super(Go,"ui",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null;this.barcode=null;this.button=null;this.checkButton=null;this.choiceList=null;this.dateTimeEdit=nul\ -l;this.defaultUi=null;this.imageEdit=null;this.numericEdit=null;this.passwordEdit=null;this.signature=null;this.textEdit=null}[ws](){if(void 0===this[ls]){for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"picture"===e)continue;const t=this[e];if(t instanceof XFAObject){this[ls]=t;return t}}this[ls]=null}return this[ls]}[co](e){const t=this[ws]();return t?t[co](e):HTMLResult.EMPTY}}class Validate extends XFAObject{constructor(e){super(Go,"validate",!0);this.formatTest=getStringOp\ -tion(e.formatTest,["warning","disabled","error"]);this.id=e.id||"";this.nullTest=getStringOption(e.nullTest,["disabled","error","warning"]);this.scriptTest=getStringOption(e.scriptTest,["error","disabled","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.picture=null;this.script=null}}class Value extends XFAObject{constructor(e){super(Go,"value",!0);this.id=e.id||"";this.override=getInteger({data:e.override,defaultValue:0,validate:e=>1===e});this.r\ -elevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.arc=null;this.boolean=null;this.date=null;this.dateTime=null;this.decimal=null;this.exData=null;this.float=null;this.image=null;this.integer=null;this.line=null;this.rectangle=null;this.text=null;this.time=null}[io](e){const t=this[vs]();if(t instanceof Field&&t.ui?.imageEdit){if(!this.image){this.image=new Image({});this[Qn](this.image)}this.image[ss]=e[ss];return}const a=e[Ws];if(null===this[a]){for(const e of O\ -bject.getOwnPropertyNames(this)){const t=this[e];if(t instanceof XFAObject){this[e]=null;this[Zs](t)}}this[e[Ws]]=e;this[Qn](e)}else this[a][ss]=e[ss]}[so](){if(this.exData)return"string"==typeof this.exData[ss]?this.exData[ss].trim():this.exData[ss][so]().trim();for(const e of Object.getOwnPropertyNames(this)){if("image"===e)continue;const t=this[e];if(t instanceof XFAObject)return(t[ss]||"").toString().trim()}return null}[co](e){for(const t of Object.getOwnPropertyNames(this)){const a=this[t];\ -if(a instanceof XFAObject)return a[co](e)}return HTMLResult.EMPTY}}class Variables extends XFAObject{constructor(e){super(Go,"variables",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.manifest=new XFAObjectArray;this.script=ne\ -w XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[Us](){return!0}}class TemplateNamespace{static[fo](e,t){if(TemplateNamespace.hasOwnProperty(e)){const a=TemplateNamespace[e](t);a[ro](t);return a}}static appearanceFilter(e){return new AppearanceFilter(e)}static arc(e){return new Arc(e)}static area(e){return new Area(e)}static assist(e){return new Assist(e)}static barcode(e){return new Barcode(e)}static bind(e){return new Bind(e)}static bindItems(e){return new BindItems(\ -e)}static bookend(e){return new Bookend(e)}static boolean(e){return new BooleanElement(e)}static border(e){return new Border(e)}static break(e){return new Break(e)}static breakAfter(e){return new BreakAfter(e)}static breakBefore(e){return new BreakBefore(e)}static button(e){return new Button(e)}static calculate(e){return new Calculate(e)}static caption(e){return new Caption(e)}static certificate(e){return new Certificate(e)}static certificates(e){return new Certificates(e)}static checkButton(e){\ -return new CheckButton(e)}static choiceList(e){return new ChoiceList(e)}static color(e){return new Color(e)}static comb(e){return new Comb(e)}static connect(e){return new Connect(e)}static contentArea(e){return new ContentArea(e)}static corner(e){return new Corner(e)}static date(e){return new DateElement(e)}static dateTime(e){return new DateTime(e)}static dateTimeEdit(e){return new DateTimeEdit(e)}static decimal(e){return new Decimal(e)}static defaultUi(e){return new DefaultUi(e)}static desc(e){\ -return new Desc(e)}static digestMethod(e){return new DigestMethod(e)}static digestMethods(e){return new DigestMethods(e)}static draw(e){return new Draw(e)}static edge(e){return new Edge(e)}static encoding(e){return new Encoding(e)}static encodings(e){return new Encodings(e)}static encrypt(e){return new Encrypt(e)}static encryptData(e){return new EncryptData(e)}static encryption(e){return new Encryption(e)}static encryptionMethod(e){return new EncryptionMethod(e)}static encryptionMethods(e){retur\ -n new EncryptionMethods(e)}static event(e){return new Event(e)}static exData(e){return new ExData(e)}static exObject(e){return new ExObject(e)}static exclGroup(e){return new ExclGroup(e)}static execute(e){return new Execute(e)}static extras(e){return new Extras(e)}static field(e){return new Field(e)}static fill(e){return new Fill(e)}static filter(e){return new Filter(e)}static float(e){return new Float(e)}static font(e){return new template_Font(e)}static format(e){return new Format(e)}static han\ -dler(e){return new Handler(e)}static hyphenation(e){return new Hyphenation(e)}static image(e){return new Image(e)}static imageEdit(e){return new ImageEdit(e)}static integer(e){return new Integer(e)}static issuers(e){return new Issuers(e)}static items(e){return new Items(e)}static keep(e){return new Keep(e)}static keyUsage(e){return new KeyUsage(e)}static line(e){return new Line(e)}static linear(e){return new Linear(e)}static lockDocument(e){return new LockDocument(e)}static manifest(e){return ne\ -w Manifest(e)}static margin(e){return new Margin(e)}static mdp(e){return new Mdp(e)}static medium(e){return new Medium(e)}static message(e){return new Message(e)}static numericEdit(e){return new NumericEdit(e)}static occur(e){return new Occur(e)}static oid(e){return new Oid(e)}static oids(e){return new Oids(e)}static overflow(e){return new Overflow(e)}static pageArea(e){return new PageArea(e)}static pageSet(e){return new PageSet(e)}static para(e){return new Para(e)}static passwordEdit(e){return \ -new PasswordEdit(e)}static pattern(e){return new template_Pattern(e)}static picture(e){return new Picture(e)}static proto(e){return new Proto(e)}static radial(e){return new Radial(e)}static reason(e){return new Reason(e)}static reasons(e){return new Reasons(e)}static rectangle(e){return new Rectangle(e)}static ref(e){return new RefElement(e)}static script(e){return new Script(e)}static setProperty(e){return new SetProperty(e)}static signData(e){return new SignData(e)}static signature(e){return n\ -ew Signature(e)}static signing(e){return new Signing(e)}static solid(e){return new Solid(e)}static speak(e){return new Speak(e)}static stipple(e){return new Stipple(e)}static subform(e){return new Subform(e)}static subformSet(e){return new SubformSet(e)}static subjectDN(e){return new SubjectDN(e)}static subjectDNs(e){return new SubjectDNs(e)}static submit(e){return new Submit(e)}static template(e){return new Template(e)}static text(e){return new Text(e)}static textEdit(e){return new TextEdit(e)}\ -static time(e){return new Time(e)}static timeStamp(e){return new TimeStamp(e)}static toolTip(e){return new ToolTip(e)}static traversal(e){return new Traversal(e)}static traverse(e){return new Traverse(e)}static ui(e){return new Ui(e)}static validate(e){return new Validate(e)}static value(e){return new Value(e)}static variables(e){return new Variables(e)}}const Zo=go.datasets.id;function createText(e){const t=new Text({});t[ss]=e;return t}class Binder{constructor(e){this.root=e;this.datasets=e.da\ -tasets;this.data=e.datasets?.data||new XmlObject(go.datasets.id,"data");this.emptyMerge=0===this.data[Ss]().length;this.root.form=this.form=e.template[is]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){this._bindElement(this.form,this.data);return this.form}getData(){return this.data}_bindValue(e,t,a){e[os]=t;if(e[Ts]())if(t[Ns]()){const a=t[ys]();e[io](createText(a))}else if(e instanceof Field&&"multiSelect"===e.ui?.choiceList?.\ -open){const a=t[Ss]().map((e=>e[ss].trim())).join("\\n");e[io](createText(a))}else this._isConsumeData()&&warn("XFA - Nodes haven\'t the same type.");else!t[Ns]()||this._isMatchTemplate()?this._bindElement(e,t):warn("XFA - Nodes haven\'t the same type.")}_findDataByNameToConsume(e,t,a,r){if(!e)return null;let i,n;for(let r=0;r<3;r++){i=a[xs](e,!1,!0);for(;;){n=i.next().value;if(!n)break;if(t===n[Ns]())return n}if(a[Hs]===go.datasets.id&&"data"===a[Ws])break;a=a[vs]()}if(!r)return null;i=this.data[x\ -s](e,!0,!1);n=i.next().value;if(n)return n;i=this.data[ds](e,!0);n=i.next().value;return n?.[Ns]()?n:null}_setProperties(e,t){if(e.hasOwnProperty("setProperty"))for(const{ref:a,target:r,connection:i}of e.setProperty.children){if(i)continue;if(!a)continue;const n=searchNode(this.root,t,a,!1,!1);if(!n){warn(`XFA - Invalid reference: ${a}.`);continue}const[s]=n;if(!s[Es](this.data)){warn("XFA - Invalid node: must be a data node.");continue}const o=searchNode(this.root,e,r,!1,!1);if(!o){warn(`XFA - \ -Invalid target: ${r}.`);continue}const[c]=o;if(!c[Es](e)){warn("XFA - Invalid target: must be a property or subproperty.");continue}const l=c[vs]();if(c instanceof SetProperty||l instanceof SetProperty){warn("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(c instanceof BindItems||l instanceof BindItems){warn("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}const h=s[so](),u=c[Ws];if(c instanceof XFAAttribute){const e=Object.c\ -reate(null);e[u]=h;const t=Reflect.construct(Object.getPrototypeOf(l).constructor,[e]);l[u]=t[u]}else if(c.hasOwnProperty(ss)){c[os]=s;c[ss]=h;c[hs]()}else warn("XFA - Invalid node to use in setProperty")}}_bindItems(e,t){if(!e.hasOwnProperty("items")||!e.hasOwnProperty("bindItems")||e.bindItems.isEmpty())return;for(const t of e.items.children)e[Zs](t);e.items.clear();const a=new Items({}),r=new Items({});e[Qn](a);e.items.push(a);e[Qn](r);e.items.push(r);for(const{ref:i,labelRef:n,valueRef:s,con\ -nection:o}of e.bindItems.children){if(o)continue;if(!i)continue;const e=searchNode(this.root,t,i,!1,!1);if(e)for(const t of e){if(!t[Es](this.datasets)){warn(`XFA - Invalid ref (${i}): must be a datasets child.`);continue}const e=searchNode(this.root,t,n,!0,!1);if(!e){warn(`XFA - Invalid label: ${n}.`);continue}const[o]=e;if(!o[Es](this.datasets)){warn("XFA - Invalid label: must be a datasets child.");continue}const c=searchNode(this.root,t,s,!0,!1);if(!c){warn(`XFA - Invalid value: ${s}.`);cont\ -inue}const[l]=c;if(!l[Es](this.datasets)){warn("XFA - Invalid value: must be a datasets child.");continue}const h=createText(o[so]()),u=createText(l[so]());a[Qn](h);a.text.push(h);r[Qn](u);r.text.push(u)}else warn(`XFA - Invalid reference: ${i}.`)}}_bindOccurrences(e,t,a){let r;if(t.length>1){r=e[is]();r[Zs](r.occur);r.occur=null}this._bindValue(e,t[0],a);this._setProperties(e,t[0]);this._bindItems(e,t[0]);if(1===t.length)return;const i=e[vs](),n=e[Ws],s=i[Ms](e);for(let e=1,o=t.length;e<o;e++){\ -const o=t[e],c=r[is]();i[n].push(c);i[Ds](s+e,c);this._bindValue(c,o,a);this._setProperties(c,o);this._bindItems(c,o)}}_createOccurrences(e){if(!this.emptyMerge)return;const{occur:t}=e;if(!t||t.initial<=1)return;const a=e[vs](),r=e[Ws];if(!(a[r]instanceof XFAObjectArray))return;let i;i=e.name?a[r].children.filter((t=>t.name===e.name)).length:a[r].children.length;const n=a[Ms](e)+1,s=t.initial-i;if(s){const t=e[is]();t[Zs](t.occur);t.occur=null;a[r].push(t);a[Ds](n,t);for(let e=1;e<s;e++){const i\ -=t[is]();a[r].push(i);a[Ds](n+e,i)}}}_getOccurInfo(e){const{name:t,occur:a}=e;if(!a||!t)return[1,1];const r=-1===a.max?1/0:a.max;return[a.min,r]}_setAndBind(e,t){this._setProperties(e,t);this._bindItems(e,t);this._bindElement(e,t)}_bindElement(e,t){const a=[];this._createOccurrences(e);for(const r of e[Ss]()){if(r[os])continue;if(void 0===this._mergeMode&&"subform"===r[Ws]){this._mergeMode="consumeData"===r.mergeMode;const e=t[Ss]();if(e.length>0)this._bindOccurrences(r,[e[0]],null);else if(this\ -.emptyMerge){const e=t[Hs]===Zo?-1:t[Hs],a=r[os]=new XmlObject(e,r.name||"root");t[Qn](a);this._bindElement(r,a)}continue}if(!r[Rs]())continue;let e=!1,i=null,n=null,s=null;if(r.bind){switch(r.bind.match){case"none":this._setAndBind(r,t);continue;case"global":e=!0;break;case"dataRef":if(!r.bind.ref){warn(`XFA - ref is empty in node ${r[Ws]}.`);this._setAndBind(r,t);continue}n=r.bind.ref}r.bind.picture&&(i=r.bind.picture[ss])}const[o,c]=this._getOccurInfo(r);if(n){s=searchNode(this.root,t,n,!0,!1\ -);if(null===s){s=createDataNode(this.data,t,n);if(!s)continue;this._isConsumeData()&&(s[ns]=!0);this._setAndBind(r,s);continue}this._isConsumeData()&&(s=s.filter((e=>!e[ns])));s.length>c?s=s.slice(0,c):0===s.length&&(s=null);s&&this._isConsumeData()&&s.forEach((e=>{e[ns]=!0}))}else{if(!r.name){this._setAndBind(r,t);continue}if(this._isConsumeData()){const a=[];for(;a.length<c;){const i=this._findDataByNameToConsume(r.name,r[Ts](),t,e);if(!i)break;i[ns]=!0;a.push(i)}s=a.length>0?a:null}else{s=t[x\ -s](r.name,!1,this.emptyMerge).next().value;if(!s){if(0===o){a.push(r);continue}const e=t[Hs]===Zo?-1:t[Hs];s=r[os]=new XmlObject(e,r.name);this.emptyMerge&&(s[ns]=!0);t[Qn](s);this._setAndBind(r,s);continue}this.emptyMerge&&(s[ns]=!0);s=[s]}}s?this._bindOccurrences(r,s,i):o>0?this._setAndBind(r,t):a.push(r)}a.forEach((e=>e[vs]()[Zs](e)))}}class DataHandler{constructor(e,t){this.data=t;this.dataset=e.datasets||null}serialize(e){const t=[[-1,this.data[Ss]()]];for(;t.length>0;){const a=t.at(-1),[r,\ -i]=a;if(r+1===i.length){t.pop();continue}const n=i[++a[0]],s=e.get(n[uo]);if(s)n[io](s);else{const t=n[fs]();for(const a of t.values()){const t=e.get(a[uo]);if(t){a[io](t);break}}}const o=n[Ss]();o.length>0&&t.push([-1,o])}const a=[\'<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">\'];if(this.dataset)for(const e of this.dataset[Ss]())"data"!==e[Ws]&&e[lo](a);this.data[lo](a);a.push("</xfa:datasets>");return a.join("")}}const Qo=go.config.id;class Acrobat extends XFAObject{constru\ -ctor(e){super(Qo,"acrobat",!0);this.acrobat7=null;this.autoSave=null;this.common=null;this.validate=null;this.validateApprovalSignatures=null;this.submitUrl=new XFAObjectArray}}class Acrobat7 extends XFAObject{constructor(e){super(Qo,"acrobat7",!0);this.dynamicRender=null}}class ADBE_JSConsole extends OptionObject{constructor(e){super(Qo,"ADBE_JSConsole",["delegate","Enable","Disable"])}}class ADBE_JSDebugger extends OptionObject{constructor(e){super(Qo,"ADBE_JSDebugger",["delegate","Enable","Di\ -sable"])}}class AddSilentPrint extends Option01{constructor(e){super(Qo,"addSilentPrint")}}class AddViewerPreferences extends Option01{constructor(e){super(Qo,"addViewerPreferences")}}class AdjustData extends Option10{constructor(e){super(Qo,"adjustData")}}class AdobeExtensionLevel extends IntegerObject{constructor(e){super(Qo,"adobeExtensionLevel",0,(e=>e>=1&&e<=8))}}class Agent extends XFAObject{constructor(e){super(Qo,"agent",!0);this.name=e.name?e.name.trim():"";this.common=new XFAObjectArra\ -y}}class AlwaysEmbed extends ContentObject{constructor(e){super(Qo,"alwaysEmbed")}}class Amd extends StringObject{constructor(e){super(Qo,"amd")}}class config_Area extends XFAObject{constructor(e){super(Qo,"area");this.level=getInteger({data:e.level,defaultValue:0,validate:e=>e>=1&&e<=3});this.name=getStringOption(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}}class Attributes extends OptionObject{constructor(e\ -){super(Qo,"attributes",["preserve","delegate","ignore"])}}class AutoSave extends OptionObject{constructor(e){super(Qo,"autoSave",["disabled","enabled"])}}class Base extends StringObject{constructor(e){super(Qo,"base")}}class BatchOutput extends XFAObject{constructor(e){super(Qo,"batchOutput");this.format=getStringOption(e.format,["none","concat","zip","zipCompress"])}}class BehaviorOverride extends ContentObject{constructor(e){super(Qo,"behaviorOverride")}[hs](){this[ss]=new Map(this[ss].trim()\ -.split(/\\s+/).filter((e=>e.includes(":"))).map((e=>e.split(":",2))))}}class Cache extends XFAObject{constructor(e){super(Qo,"cache",!0);this.templateCache=null}}class Change extends Option01{constructor(e){super(Qo,"change")}}class Common extends XFAObject{constructor(e){super(Qo,"common",!0);this.data=null;this.locale=null;this.localeSet=null;this.messaging=null;this.suppressBanner=null;this.template=null;this.validationMessaging=null;this.versionControl=null;this.log=new XFAObjectArray}}class \ -Compress extends XFAObject{constructor(e){super(Qo,"compress");this.scope=getStringOption(e.scope,["imageOnly","document"])}}class CompressLogicalStructure extends Option01{constructor(e){super(Qo,"compressLogicalStructure")}}class CompressObjectStream extends Option10{constructor(e){super(Qo,"compressObjectStream")}}class Compression extends XFAObject{constructor(e){super(Qo,"compression",!0);this.compressLogicalStructure=null;this.compressObjectStream=null;this.level=null;this.type=null}}class\ - Config extends XFAObject{constructor(e){super(Qo,"config",!0);this.acrobat=null;this.present=null;this.trace=null;this.agent=new XFAObjectArray}}class Conformance extends OptionObject{constructor(e){super(Qo,"conformance",["A","B"])}}class ContentCopy extends Option01{constructor(e){super(Qo,"contentCopy")}}class Copies extends IntegerObject{constructor(e){super(Qo,"copies",1,(e=>e>=1))}}class Creator extends StringObject{constructor(e){super(Qo,"creator")}}class CurrentPage extends IntegerObje\ -ct{constructor(e){super(Qo,"currentPage",0,(e=>e>=0))}}class Data extends XFAObject{constructor(e){super(Qo,"data",!0);this.adjustData=null;this.attributes=null;this.incrementalLoad=null;this.outputXSL=null;this.range=null;this.record=null;this.startNode=null;this.uri=null;this.window=null;this.xsl=null;this.excludeNS=new XFAObjectArray;this.transform=new XFAObjectArray}}class Debug extends XFAObject{constructor(e){super(Qo,"debug",!0);this.uri=null}}class DefaultTypeface extends ContentObject{c\ -onstructor(e){super(Qo,"defaultTypeface");this.writingScript=getStringOption(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}}class Destination extends OptionObject{constructor(e){super(Qo,"destination",["pdf","pcl","ps","webClient","zpl"])}}class DocumentAssembly extends Option01{constructor(e){super(Qo,"documentAssembly")}}class Driver extends XFAObject{constructor(e){super(\ -Qo,"driver",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class DuplexOption extends OptionObject{constructor(e){super(Qo,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}}class DynamicRender extends OptionObject{constructor(e){super(Qo,"dynamicRender",["forbidden","required"])}}class Embed extends Option01{constructor(e){super(Qo,"embed")}}class config_Encrypt extends Option01{constructor(e){super(Qo,"encrypt")}}class config_Encryption extends XFA\ -Object{constructor(e){super(Qo,"encryption",!0);this.encrypt=null;this.encryptionLevel=null;this.permissions=null}}class EncryptionLevel extends OptionObject{constructor(e){super(Qo,"encryptionLevel",["40bit","128bit"])}}class Enforce extends StringObject{constructor(e){super(Qo,"enforce")}}class Equate extends XFAObject{constructor(e){super(Qo,"equate");this.force=getInteger({data:e.force,defaultValue:1,validate:e=>0===e});this.from=e.from||"";this.to=e.to||""}}class EquateRange extends XFAObje\ -ct{constructor(e){super(Qo,"equateRange");this.from=e.from||"";this.to=e.to||"";this._unicodeRange=e.unicodeRange||""}get unicodeRange(){const e=[],t=/U\\+([0-9a-fA-F]+)/,a=this._unicodeRange;for(let r of a.split(",").map((e=>e.trim())).filter((e=>!!e))){r=r.split("-",2).map((e=>{const a=e.match(t);return a?parseInt(a[1],16):0}));1===r.length&&r.push(r[0]);e.push(r)}return shadow(this,"unicodeRange",e)}}class Exclude extends ContentObject{constructor(e){super(Qo,"exclude")}[hs](){this[ss]=this[ss\ -].trim().split(/\\s+/).filter((e=>e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e)))}}class ExcludeNS extends StringObject{constructor(e){super(Qo,"excludeNS")}}class FlipLabel extends OptionObject{constructor(e){super(Qo,"flipLabel",["usePrinterSetting","on","off"])}}class config_FontInfo extends XFAObject{constructor(e){super(Qo,"fontInfo",!0);this.embed=null;this.map=null;this.subsetBelow=null;this.alwaysEmbed=new XFAObjectArray;this.defaultTypeface=new XFAOb\ -jectArray;this.neverEmbed=new XFAObjectArray}}class FormFieldFilling extends Option01{constructor(e){super(Qo,"formFieldFilling")}}class GroupParent extends StringObject{constructor(e){super(Qo,"groupParent")}}class IfEmpty extends OptionObject{constructor(e){super(Qo,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}}class IncludeXDPContent extends StringObject{constructor(e){super(Qo,"includeXDPContent")}}class IncrementalLoad extends OptionObject{constructor(e){super(Qo,"incrementalLoad"\ -,["none","forwardOnly"])}}class IncrementalMerge extends Option01{constructor(e){super(Qo,"incrementalMerge")}}class Interactive extends Option01{constructor(e){super(Qo,"interactive")}}class Jog extends OptionObject{constructor(e){super(Qo,"jog",["usePrinterSetting","none","pageSet"])}}class LabelPrinter extends XFAObject{constructor(e){super(Qo,"labelPrinter",!0);this.name=getStringOption(e.name,["zpl","dpl","ipl","tcpl"]);this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=n\ -ull}}class Layout extends OptionObject{constructor(e){super(Qo,"layout",["paginate","panel"])}}class Level extends IntegerObject{constructor(e){super(Qo,"level",0,(e=>e>0))}}class Linearized extends Option01{constructor(e){super(Qo,"linearized")}}class Locale extends StringObject{constructor(e){super(Qo,"locale")}}class LocaleSet extends StringObject{constructor(e){super(Qo,"localeSet")}}class Log extends XFAObject{constructor(e){super(Qo,"log",!0);this.mode=null;this.threshold=null;this.to=null\ -;this.uri=null}}class MapElement extends XFAObject{constructor(e){super(Qo,"map",!0);this.equate=new XFAObjectArray;this.equateRange=new XFAObjectArray}}class MediumInfo extends XFAObject{constructor(e){super(Qo,"mediumInfo",!0);this.map=null}}class config_Message extends XFAObject{constructor(e){super(Qo,"message",!0);this.msgId=null;this.severity=null}}class Messaging extends XFAObject{constructor(e){super(Qo,"messaging",!0);this.message=new XFAObjectArray}}class Mode extends OptionObject{cons\ -tructor(e){super(Qo,"mode",["append","overwrite"])}}class ModifyAnnots extends Option01{constructor(e){super(Qo,"modifyAnnots")}}class MsgId extends IntegerObject{constructor(e){super(Qo,"msgId",1,(e=>e>=1))}}class NameAttr extends StringObject{constructor(e){super(Qo,"nameAttr")}}class NeverEmbed extends ContentObject{constructor(e){super(Qo,"neverEmbed")}}class NumberOfCopies extends IntegerObject{constructor(e){super(Qo,"numberOfCopies",null,(e=>e>=2&&e<=5))}}class OpenAction extends XFAObjec\ -t{constructor(e){super(Qo,"openAction",!0);this.destination=null}}class Output extends XFAObject{constructor(e){super(Qo,"output",!0);this.to=null;this.type=null;this.uri=null}}class OutputBin extends StringObject{constructor(e){super(Qo,"outputBin")}}class OutputXSL extends XFAObject{constructor(e){super(Qo,"outputXSL",!0);this.uri=null}}class Overprint extends OptionObject{constructor(e){super(Qo,"overprint",["none","both","draw","field"])}}class Packets extends StringObject{constructor(e){sup\ -er(Qo,"packets")}[hs](){"*"!==this[ss]&&(this[ss]=this[ss].trim().split(/\\s+/).filter((e=>["config","datasets","template","xfdf","xslt"].includes(e))))}}class PageOffset extends XFAObject{constructor(e){super(Qo,"pageOffset");this.x=getInteger({data:e.x,defaultValue:"useXDCSetting",validate:e=>!0});this.y=getInteger({data:e.y,defaultValue:"useXDCSetting",validate:e=>!0})}}class PageRange extends StringObject{constructor(e){super(Qo,"pageRange")}[hs](){const e=this[ss].trim().split(/\\s+/).map((e=\ ->parseInt(e,10))),t=[];for(let a=0,r=e.length;a<r;a+=2)t.push(e.slice(a,a+2));this[ss]=t}}class Pagination extends OptionObject{constructor(e){super(Qo,"pagination",["simplex","duplexShortEdge","duplexLongEdge"])}}class PaginationOverride extends OptionObject{constructor(e){super(Qo,"paginationOverride",["none","forceDuplex","forceDuplexLongEdge","forceDuplexShortEdge","forceSimplex"])}}class Part extends IntegerObject{constructor(e){super(Qo,"part",1,(e=>!1))}}class Pcl extends XFAObject{constr\ -uctor(e){super(Qo,"pcl",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.pageOffset=null;this.staple=null;this.xdc=null}}class Pdf extends XFAObject{constructor(e){super(Qo,"pdf",!0);this.name=e.name||"";this.adobeExtensionLevel=null;this.batchOutput=null;this.compression=null;this.creator=null;this.encryption=null;this.fontInfo=null;this.interactive=null;this.linearized=null;this.openAction=null;this.pdfa=null;this.pro\ -ducer=null;this.renderPolicy=null;this.scriptModel=null;this.silentPrint=null;this.submitFormat=null;this.tagged=null;this.version=null;this.viewerPreferences=null;this.xdc=null}}class Pdfa extends XFAObject{constructor(e){super(Qo,"pdfa",!0);this.amd=null;this.conformance=null;this.includeXDPContent=null;this.part=null}}class Permissions extends XFAObject{constructor(e){super(Qo,"permissions",!0);this.accessibleContent=null;this.change=null;this.contentCopy=null;this.documentAssembly=null;this.\ -formFieldFilling=null;this.modifyAnnots=null;this.plaintextMetadata=null;this.print=null;this.printHighQuality=null}}class PickTrayByPDFSize extends Option01{constructor(e){super(Qo,"pickTrayByPDFSize")}}class config_Picture extends StringObject{constructor(e){super(Qo,"picture")}}class PlaintextMetadata extends Option01{constructor(e){super(Qo,"plaintextMetadata")}}class Presence extends OptionObject{constructor(e){super(Qo,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"\ -])}}class Present extends XFAObject{constructor(e){super(Qo,"present",!0);this.behaviorOverride=null;this.cache=null;this.common=null;this.copies=null;this.destination=null;this.incrementalMerge=null;this.layout=null;this.output=null;this.overprint=null;this.pagination=null;this.paginationOverride=null;this.script=null;this.validate=null;this.xdp=null;this.driver=new XFAObjectArray;this.labelPrinter=new XFAObjectArray;this.pcl=new XFAObjectArray;this.pdf=new XFAObjectArray;this.ps=new XFAObjectA\ -rray;this.submitUrl=new XFAObjectArray;this.webClient=new XFAObjectArray;this.zpl=new XFAObjectArray}}class Print extends Option01{constructor(e){super(Qo,"print")}}class PrintHighQuality extends Option01{constructor(e){super(Qo,"printHighQuality")}}class PrintScaling extends OptionObject{constructor(e){super(Qo,"printScaling",["appdefault","noScaling"])}}class PrinterName extends StringObject{constructor(e){super(Qo,"printerName")}}class Producer extends StringObject{constructor(e){super(Qo,"pr\ -oducer")}}class Ps extends XFAObject{constructor(e){super(Qo,"ps",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.staple=null;this.xdc=null}}class Range extends ContentObject{constructor(e){super(Qo,"range")}[hs](){this[ss]=this[ss].split(",",2).map((e=>e.split("-").map((e=>parseInt(e.trim(),10))))).filter((e=>e.every((e=>!isNaN(e))))).map((e=>{1===e.length&&e.push(e[0]);return e}))}}class Record extends ContentObject{\ -constructor(e){super(Qo,"record")}[hs](){this[ss]=this[ss].trim();const e=parseInt(this[ss],10);!isNaN(e)&&e>=0&&(this[ss]=e)}}class Relevant extends ContentObject{constructor(e){super(Qo,"relevant")}[hs](){this[ss]=this[ss].trim().split(/\\s+/)}}class Rename extends ContentObject{constructor(e){super(Qo,"rename")}[hs](){this[ss]=this[ss].trim();(this[ss].toLowerCase().startsWith("xml")||new RegExp("[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*","u").test(this[ss]))&&warn("XFA - Rename: invalid XFA name")}}clas\ -s RenderPolicy extends OptionObject{constructor(e){super(Qo,"renderPolicy",["server","client"])}}class RunScripts extends OptionObject{constructor(e){super(Qo,"runScripts",["both","client","none","server"])}}class config_Script extends XFAObject{constructor(e){super(Qo,"script",!0);this.currentPage=null;this.exclude=null;this.runScripts=null}}class ScriptModel extends OptionObject{constructor(e){super(Qo,"scriptModel",["XFA","none"])}}class Severity extends OptionObject{constructor(e){super(Qo,"\ -severity",["ignore","error","information","trace","warning"])}}class SilentPrint extends XFAObject{constructor(e){super(Qo,"silentPrint",!0);this.addSilentPrint=null;this.printerName=null}}class Staple extends XFAObject{constructor(e){super(Qo,"staple");this.mode=getStringOption(e.mode,["usePrinterSetting","on","off"])}}class StartNode extends StringObject{constructor(e){super(Qo,"startNode")}}class StartPage extends IntegerObject{constructor(e){super(Qo,"startPage",0,(e=>!0))}}class SubmitForma\ -t extends OptionObject{constructor(e){super(Qo,"submitFormat",["html","delegate","fdf","xml","pdf"])}}class SubmitUrl extends StringObject{constructor(e){super(Qo,"submitUrl")}}class SubsetBelow extends IntegerObject{constructor(e){super(Qo,"subsetBelow",100,(e=>e>=0&&e<=100))}}class SuppressBanner extends Option01{constructor(e){super(Qo,"suppressBanner")}}class Tagged extends Option01{constructor(e){super(Qo,"tagged")}}class config_Template extends XFAObject{constructor(e){super(Qo,"template",\ -!0);this.base=null;this.relevant=null;this.startPage=null;this.uri=null;this.xsl=null}}class Threshold extends OptionObject{constructor(e){super(Qo,"threshold",["trace","error","information","warning"])}}class To extends OptionObject{constructor(e){super(Qo,"to",["null","memory","stderr","stdout","system","uri"])}}class TemplateCache extends XFAObject{constructor(e){super(Qo,"templateCache");this.maxEntries=getInteger({data:e.maxEntries,defaultValue:5,validate:e=>e>=0})}}class Trace extends XFAO\ -bject{constructor(e){super(Qo,"trace",!0);this.area=new XFAObjectArray}}class Transform extends XFAObject{constructor(e){super(Qo,"transform",!0);this.groupParent=null;this.ifEmpty=null;this.nameAttr=null;this.picture=null;this.presence=null;this.rename=null;this.whitespace=null}}class Type extends OptionObject{constructor(e){super(Qo,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}}class Uri extends StringObject{constructor(e){super(Qo,"uri"\ -)}}class config_Validate extends OptionObject{constructor(e){super(Qo,"validate",["preSubmit","prePrint","preExecute","preSave"])}}class ValidateApprovalSignatures extends ContentObject{constructor(e){super(Qo,"validateApprovalSignatures")}[hs](){this[ss]=this[ss].trim().split(/\\s+/).filter((e=>["docReady","postSign"].includes(e)))}}class ValidationMessaging extends OptionObject{constructor(e){super(Qo,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noM\ -essages"])}}class Version extends OptionObject{constructor(e){super(Qo,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}}class VersionControl extends XFAObject{constructor(e){super(Qo,"VersionControl");this.outputBelow=getStringOption(e.outputBelow,["warn","error","update"]);this.sourceAbove=getStringOption(e.sourceAbove,["warn","error"]);this.sourceBelow=getStringOption(e.sourceBelow,["update","maintain"])}}class ViewerPreferences extends XFAObject{constructor(e){super(Qo,"viewerPreferences",!0\ -);this.ADBE_JSConsole=null;this.ADBE_JSDebugger=null;this.addViewerPreferences=null;this.duplexOption=null;this.enforce=null;this.numberOfCopies=null;this.pageRange=null;this.pickTrayByPDFSize=null;this.printScaling=null}}class WebClient extends XFAObject{constructor(e){super(Qo,"webClient",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class Whitespace extends OptionObject{constructor(e){super(Qo,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}}class Windo\ -w extends ContentObject{constructor(e){super(Qo,"window")}[hs](){const e=this[ss].split(",",2).map((e=>parseInt(e.trim(),10)));if(e.some((e=>isNaN(e))))this[ss]=[0,0];else{1===e.length&&e.push(e[0]);this[ss]=e}}}class Xdc extends XFAObject{constructor(e){super(Qo,"xdc",!0);this.uri=new XFAObjectArray;this.xsl=new XFAObjectArray}}class Xdp extends XFAObject{constructor(e){super(Qo,"xdp",!0);this.packets=null}}class Xsl extends XFAObject{constructor(e){super(Qo,"xsl",!0);this.debug=null;this.uri=n\ -ull}}class Zpl extends XFAObject{constructor(e){super(Qo,"zpl",!0);this.name=e.name?e.name.trim():"";this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class ConfigNamespace{static[fo](e,t){if(ConfigNamespace.hasOwnProperty(e))return ConfigNamespace[e](t)}static acrobat(e){return new Acrobat(e)}static acrobat7(e){return new Acrobat7(e)}static ADBE_JSConsole(e){return new ADBE_JSConsole(e)}static ADBE_JSDebugger(e){return new ADBE_JSDebugger(e)}static addSilentPrint(e){re\ -turn new AddSilentPrint(e)}static addViewerPreferences(e){return new AddViewerPreferences(e)}static adjustData(e){return new AdjustData(e)}static adobeExtensionLevel(e){return new AdobeExtensionLevel(e)}static agent(e){return new Agent(e)}static alwaysEmbed(e){return new AlwaysEmbed(e)}static amd(e){return new Amd(e)}static area(e){return new config_Area(e)}static attributes(e){return new Attributes(e)}static autoSave(e){return new AutoSave(e)}static base(e){return new Base(e)}static batchOutput\ -(e){return new BatchOutput(e)}static behaviorOverride(e){return new BehaviorOverride(e)}static cache(e){return new Cache(e)}static change(e){return new Change(e)}static common(e){return new Common(e)}static compress(e){return new Compress(e)}static compressLogicalStructure(e){return new CompressLogicalStructure(e)}static compressObjectStream(e){return new CompressObjectStream(e)}static compression(e){return new Compression(e)}static config(e){return new Config(e)}static conformance(e){return new\ - Conformance(e)}static contentCopy(e){return new ContentCopy(e)}static copies(e){return new Copies(e)}static creator(e){return new Creator(e)}static currentPage(e){return new CurrentPage(e)}static data(e){return new Data(e)}static debug(e){return new Debug(e)}static defaultTypeface(e){return new DefaultTypeface(e)}static destination(e){return new Destination(e)}static documentAssembly(e){return new DocumentAssembly(e)}static driver(e){return new Driver(e)}static duplexOption(e){return new Duplex\ -Option(e)}static dynamicRender(e){return new DynamicRender(e)}static embed(e){return new Embed(e)}static encrypt(e){return new config_Encrypt(e)}static encryption(e){return new config_Encryption(e)}static encryptionLevel(e){return new EncryptionLevel(e)}static enforce(e){return new Enforce(e)}static equate(e){return new Equate(e)}static equateRange(e){return new EquateRange(e)}static exclude(e){return new Exclude(e)}static excludeNS(e){return new ExcludeNS(e)}static flipLabel(e){return new FlipL\ -abel(e)}static fontInfo(e){return new config_FontInfo(e)}static formFieldFilling(e){return new FormFieldFilling(e)}static groupParent(e){return new GroupParent(e)}static ifEmpty(e){return new IfEmpty(e)}static includeXDPContent(e){return new IncludeXDPContent(e)}static incrementalLoad(e){return new IncrementalLoad(e)}static incrementalMerge(e){return new IncrementalMerge(e)}static interactive(e){return new Interactive(e)}static jog(e){return new Jog(e)}static labelPrinter(e){return new LabelPrin\ -ter(e)}static layout(e){return new Layout(e)}static level(e){return new Level(e)}static linearized(e){return new Linearized(e)}static locale(e){return new Locale(e)}static localeSet(e){return new LocaleSet(e)}static log(e){return new Log(e)}static map(e){return new MapElement(e)}static mediumInfo(e){return new MediumInfo(e)}static message(e){return new config_Message(e)}static messaging(e){return new Messaging(e)}static mode(e){return new Mode(e)}static modifyAnnots(e){return new ModifyAnnots(e)\ -}static msgId(e){return new MsgId(e)}static nameAttr(e){return new NameAttr(e)}static neverEmbed(e){return new NeverEmbed(e)}static numberOfCopies(e){return new NumberOfCopies(e)}static openAction(e){return new OpenAction(e)}static output(e){return new Output(e)}static outputBin(e){return new OutputBin(e)}static outputXSL(e){return new OutputXSL(e)}static overprint(e){return new Overprint(e)}static packets(e){return new Packets(e)}static pageOffset(e){return new PageOffset(e)}static pageRange(e)\ -{return new PageRange(e)}static pagination(e){return new Pagination(e)}static paginationOverride(e){return new PaginationOverride(e)}static part(e){return new Part(e)}static pcl(e){return new Pcl(e)}static pdf(e){return new Pdf(e)}static pdfa(e){return new Pdfa(e)}static permissions(e){return new Permissions(e)}static pickTrayByPDFSize(e){return new PickTrayByPDFSize(e)}static picture(e){return new config_Picture(e)}static plaintextMetadata(e){return new PlaintextMetadata(e)}static presence(e){r\ -eturn new Presence(e)}static present(e){return new Present(e)}static print(e){return new Print(e)}static printHighQuality(e){return new PrintHighQuality(e)}static printScaling(e){return new PrintScaling(e)}static printerName(e){return new PrinterName(e)}static producer(e){return new Producer(e)}static ps(e){return new Ps(e)}static range(e){return new Range(e)}static record(e){return new Record(e)}static relevant(e){return new Relevant(e)}static rename(e){return new Rename(e)}static renderPolicy(\ -e){return new RenderPolicy(e)}static runScripts(e){return new RunScripts(e)}static script(e){return new config_Script(e)}static scriptModel(e){return new ScriptModel(e)}static severity(e){return new Severity(e)}static silentPrint(e){return new SilentPrint(e)}static staple(e){return new Staple(e)}static startNode(e){return new StartNode(e)}static startPage(e){return new StartPage(e)}static submitFormat(e){return new SubmitFormat(e)}static submitUrl(e){return new SubmitUrl(e)}static subsetBelow(e)\ -{return new SubsetBelow(e)}static suppressBanner(e){return new SuppressBanner(e)}static tagged(e){return new Tagged(e)}static template(e){return new config_Template(e)}static templateCache(e){return new TemplateCache(e)}static threshold(e){return new Threshold(e)}static to(e){return new To(e)}static trace(e){return new Trace(e)}static transform(e){return new Transform(e)}static type(e){return new Type(e)}static uri(e){return new Uri(e)}static validate(e){return new config_Validate(e)}static vali\ -dateApprovalSignatures(e){return new ValidateApprovalSignatures(e)}static validationMessaging(e){return new ValidationMessaging(e)}static version(e){return new Version(e)}static versionControl(e){return new VersionControl(e)}static viewerPreferences(e){return new ViewerPreferences(e)}static webClient(e){return new WebClient(e)}static whitespace(e){return new Whitespace(e)}static window(e){return new Window(e)}static xdc(e){return new Xdc(e)}static xdp(e){return new Xdp(e)}static xsl(e){return ne\ -w Xsl(e)}static zpl(e){return new Zpl(e)}}const ec=go.connectionSet.id;class ConnectionSet extends XFAObject{constructor(e){super(ec,"connectionSet",!0);this.wsdlConnection=new XFAObjectArray;this.xmlConnection=new XFAObjectArray;this.xsdConnection=new XFAObjectArray}}class EffectiveInputPolicy extends XFAObject{constructor(e){super(ec,"effectiveInputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EffectiveOutputPolicy extends XFAObject{constru\ -ctor(e){super(ec,"effectiveOutputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Operation extends StringObject{constructor(e){super(ec,"operation");this.id=e.id||"";this.input=e.input||"";this.name=e.name||"";this.output=e.output||"";this.use=e.use||"";this.usehref=e.usehref||""}}class RootElement extends StringObject{constructor(e){super(ec,"rootElement");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}cla\ -ss SoapAction extends StringObject{constructor(e){super(ec,"soapAction");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAddress extends StringObject{constructor(e){super(ec,"soapAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class connection_set_Uri extends StringObject{constructor(e){super(ec,"uri");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlAddress\ - extends StringObject{constructor(e){super(ec,"wsdlAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlConnection extends XFAObject{constructor(e){super(ec,"wsdlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.effectiveInputPolicy=null;this.effectiveOutputPolicy=null;this.operation=null;this.soapAction=null;this.soapAddress=null;this.wsdlAddress=null}}class XmlConnection extends XFAObject{constructor(e){supe\ -r(ec,"xmlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.uri=null}}class XsdConnection extends XFAObject{constructor(e){super(ec,"xsdConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.rootElement=null;this.uri=null}}class ConnectionSetNamespace{static[fo](e,t){if(ConnectionSetNamespace.hasOwnProperty(e))return ConnectionSetNamespace[e](t)}static connectionSet(e){return new ConnectionSet(e)}static effectiveInputPolicy(e){retur\ -n new EffectiveInputPolicy(e)}static effectiveOutputPolicy(e){return new EffectiveOutputPolicy(e)}static operation(e){return new Operation(e)}static rootElement(e){return new RootElement(e)}static soapAction(e){return new SoapAction(e)}static soapAddress(e){return new SoapAddress(e)}static uri(e){return new connection_set_Uri(e)}static wsdlAddress(e){return new WsdlAddress(e)}static wsdlConnection(e){return new WsdlConnection(e)}static xmlConnection(e){return new XmlConnection(e)}static xsdConne\ -ction(e){return new XsdConnection(e)}}const tc=go.datasets.id;class datasets_Data extends XmlObject{constructor(e){super(tc,"data",e)}[Ls](){return!0}}class Datasets extends XFAObject{constructor(e){super(tc,"datasets",!0);this.data=null;this.Signature=null}[$s](e){const t=e[Ws];("data"===t&&e[Hs]===tc||"Signature"===t&&e[Hs]===go.signature.id)&&(this[t]=e);this[Qn](e)}}class DatasetsNamespace{static[fo](e,t){if(DatasetsNamespace.hasOwnProperty(e))return DatasetsNamespace[e](t)}static datasets(e\ -){return new Datasets(e)}static data(e){return new datasets_Data(e)}}const ac=go.localeSet.id;class CalendarSymbols extends XFAObject{constructor(e){super(ac,"calendarSymbols",!0);this.name="gregorian";this.dayNames=new XFAObjectArray(2);this.eraNames=null;this.meridiemNames=null;this.monthNames=new XFAObjectArray(2)}}class CurrencySymbol extends StringObject{constructor(e){super(ac,"currencySymbol");this.name=getStringOption(e.name,["symbol","isoname","decimal"])}}class CurrencySymbols extends \ -XFAObject{constructor(e){super(ac,"currencySymbols",!0);this.currencySymbol=new XFAObjectArray(3)}}class DatePattern extends StringObject{constructor(e){super(ac,"datePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class DatePatterns extends XFAObject{constructor(e){super(ac,"datePatterns",!0);this.datePattern=new XFAObjectArray(4)}}class DateTimeSymbols extends ContentObject{constructor(e){super(ac,"dateTimeSymbols")}}class Day extends StringObject{constructor(e){supe\ -r(ac,"day")}}class DayNames extends XFAObject{constructor(e){super(ac,"dayNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.day=new XFAObjectArray(7)}}class Era extends StringObject{constructor(e){super(ac,"era")}}class EraNames extends XFAObject{constructor(e){super(ac,"eraNames",!0);this.era=new XFAObjectArray(2)}}class locale_set_Locale extends XFAObject{constructor(e){super(ac,"locale",!0);this.desc=e.desc||"";this.name="isoname";this.calendarSymbols=null;t\ -his.currencySymbols=null;this.datePatterns=null;this.dateTimeSymbols=null;this.numberPatterns=null;this.numberSymbols=null;this.timePatterns=null;this.typeFaces=null}}class locale_set_LocaleSet extends XFAObject{constructor(e){super(ac,"localeSet",!0);this.locale=new XFAObjectArray}}class Meridiem extends StringObject{constructor(e){super(ac,"meridiem")}}class MeridiemNames extends XFAObject{constructor(e){super(ac,"meridiemNames",!0);this.meridiem=new XFAObjectArray(2)}}class Month extends Stri\ -ngObject{constructor(e){super(ac,"month")}}class MonthNames extends XFAObject{constructor(e){super(ac,"monthNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.month=new XFAObjectArray(12)}}class NumberPattern extends StringObject{constructor(e){super(ac,"numberPattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class NumberPatterns extends XFAObject{constructor(e){super(ac,"numberPatterns",!0);this.numberPattern=new XFAObjectArray(4)}}clas\ -s NumberSymbol extends StringObject{constructor(e){super(ac,"numberSymbol");this.name=getStringOption(e.name,["decimal","grouping","percent","minus","zero"])}}class NumberSymbols extends XFAObject{constructor(e){super(ac,"numberSymbols",!0);this.numberSymbol=new XFAObjectArray(5)}}class TimePattern extends StringObject{constructor(e){super(ac,"timePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class TimePatterns extends XFAObject{constructor(e){super(ac,"timePatterns"\ -,!0);this.timePattern=new XFAObjectArray(4)}}class TypeFace extends XFAObject{constructor(e){super(ac,"typeFace",!0);this.name=""|e.name}}class TypeFaces extends XFAObject{constructor(e){super(ac,"typeFaces",!0);this.typeFace=new XFAObjectArray}}class LocaleSetNamespace{static[fo](e,t){if(LocaleSetNamespace.hasOwnProperty(e))return LocaleSetNamespace[e](t)}static calendarSymbols(e){return new CalendarSymbols(e)}static currencySymbol(e){return new CurrencySymbol(e)}static currencySymbols(e){retur\ -n new CurrencySymbols(e)}static datePattern(e){return new DatePattern(e)}static datePatterns(e){return new DatePatterns(e)}static dateTimeSymbols(e){return new DateTimeSymbols(e)}static day(e){return new Day(e)}static dayNames(e){return new DayNames(e)}static era(e){return new Era(e)}static eraNames(e){return new EraNames(e)}static locale(e){return new locale_set_Locale(e)}static localeSet(e){return new locale_set_LocaleSet(e)}static meridiem(e){return new Meridiem(e)}static meridiemNames(e){ret\ -urn new MeridiemNames(e)}static month(e){return new Month(e)}static monthNames(e){return new MonthNames(e)}static numberPattern(e){return new NumberPattern(e)}static numberPatterns(e){return new NumberPatterns(e)}static numberSymbol(e){return new NumberSymbol(e)}static numberSymbols(e){return new NumberSymbols(e)}static timePattern(e){return new TimePattern(e)}static timePatterns(e){return new TimePatterns(e)}static typeFace(e){return new TypeFace(e)}static typeFaces(e){return new TypeFaces(e)}}\ -const rc=go.signature.id;class signature_Signature extends XFAObject{constructor(e){super(rc,"signature",!0)}}class SignatureNamespace{static[fo](e,t){if(SignatureNamespace.hasOwnProperty(e))return SignatureNamespace[e](t)}static signature(e){return new signature_Signature(e)}}const ic=go.stylesheet.id;class Stylesheet extends XFAObject{constructor(e){super(ic,"stylesheet",!0)}}class StylesheetNamespace{static[fo](e,t){if(StylesheetNamespace.hasOwnProperty(e))return StylesheetNamespace[e](t)}sta\ -tic stylesheet(e){return new Stylesheet(e)}}const nc=go.xdp.id;class xdp_Xdp extends XFAObject{constructor(e){super(nc,"xdp",!0);this.uuid=e.uuid||"";this.timeStamp=e.timeStamp||"";this.config=null;this.connectionSet=null;this.datasets=null;this.localeSet=null;this.stylesheet=new XFAObjectArray;this.template=null}[Gs](e){const t=go[e[Ws]];return t&&e[Hs]===t.id}}class XdpNamespace{static[fo](e,t){if(XdpNamespace.hasOwnProperty(e))return XdpNamespace[e](t)}static xdp(e){return new xdp_Xdp(e)}}con\ -st sc=go.xhtml.id,oc=Symbol(),cc=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-bottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),lc=new Ma\ -p([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>"none"===e?"none":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,parseInt(e)/100).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,parseInt(e)/100).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,t)=>measureToString(.99*(e=t.fontSize=Math.abs(getMeasurement(e))))],["letter-spacing",e=>measureToString(getMeasuremen\ -t(e))],["line-height",e=>measureToString(getMeasurement(e))],["margin",e=>measureToString(getMeasurement(e))],["margin-bottom",e=>measureToString(getMeasurement(e))],["margin-left",e=>measureToString(getMeasurement(e))],["margin-right",e=>measureToString(getMeasurement(e))],["margin-top",e=>measureToString(getMeasurement(e))],["text-indent",e=>measureToString(getMeasurement(e))],["font-family",e=>e],["vertical-align",e=>measureToString(getMeasurement(e))]]),hc=/\\s+/g,uc=/[\\r\\n]+/g,dc=/\\r\\n?/g;fu\ -nction mapStyle(e,t,a){const r=Object.create(null);if(!e)return r;const i=Object.create(null);for(const[t,a]of e.split(";").map((e=>e.split(":",2)))){const e=lc.get(t);if(""===e)continue;let n=a;e&&(n="string"==typeof e?e:e(a,i));t.endsWith("scale")?r.transform=r.transform?`${r[t]} ${n}`:n:r[t.replaceAll(/-([a-zA-Z])/g,((e,t)=>t.toUpperCase()))]=n}r.fontFamily&&setFontFamily({typeface:r.fontFamily,weight:r.fontWeight||"normal",posture:r.fontStyle||"normal",size:i.fontSize||0},t,t[Is].fontFinder,\ -r);if(a&&r.verticalAlign&&"0px"!==r.verticalAlign&&r.fontSize){const e=.583,t=.333,a=getMeasurement(r.fontSize);r.fontSize=measureToString(a*e);r.verticalAlign=measureToString(Math.sign(getMeasurement(r.verticalAlign))*a*t)}a&&r.fontSize&&(r.fontSize=`calc(${r.fontSize} * var(--total-scale-factor))`);fixTextIndent(r);return r}const fc=new Set(["body","html"]);class XhtmlObject extends XmlObject{constructor(e,t){super(sc,t);this[oc]=!1;this.style=e.style||""}[ts](e){super[ts](e);this.style=functi\ -on checkStyle(e){return e.style?e.style.split(";").filter((e=>!!e.trim())).map((e=>e.split(":",2).map((e=>e.trim())))).filter((([t,a])=>{"font-family"===t&&e[Is].usedTypefaces.add(a);return cc.has(t)})).map((e=>e.join(":"))).join(";"):""}(this)}[Yn](){return!fc.has(this[Ws])}[Vs](e,t=!1){if(t)this[oc]=!0;else{e=e.replaceAll(uc,"");this.style.includes("xfa-spacerun:yes")||(e=e.replaceAll(hc," "))}e&&(this[ss]+=e)}[Ks](e,t=!0){const a=Object.create(null),r={top:NaN,bottom:NaN,left:NaN,right:NaN};l\ -et i=null;for(const[e,t]of this.style.split(";").map((e=>e.split(":",2))))switch(e){case"font-family":a.typeface=stripQuotes(t);break;case"font-size":a.size=getMeasurement(t);break;case"font-weight":a.weight=t;break;case"font-style":a.posture=t;break;case"letter-spacing":a.letterSpacing=getMeasurement(t);break;case"margin":const e=t.split(/ \\t/).map((e=>getMeasurement(e)));switch(e.length){case 1:r.top=r.bottom=r.left=r.right=e[0];break;case 2:r.top=r.bottom=e[0];r.left=r.right=e[1];break;case 3\ -:r.top=e[0];r.bottom=e[2];r.left=r.right=e[1];break;case 4:r.top=e[0];r.left=e[1];r.bottom=e[2];r.right=e[3]}break;case"margin-top":r.top=getMeasurement(t);break;case"margin-bottom":r.bottom=getMeasurement(t);break;case"margin-left":r.left=getMeasurement(t);break;case"margin-right":r.right=getMeasurement(t);break;case"line-height":i=getMeasurement(t)}e.pushData(a,r,i);if(this[ss])e.addString(this[ss]);else for(const t of this[Ss]())"#text"!==t[Ws]?t[Ks](e):e.addString(t[ss]);t&&e.popFont()}[co](\ -e){const t=[];this[ls]={children:t};this[es]({});if(0===t.length&&!this[ss])return HTMLResult.EMPTY;let a;a=this[oc]?this[ss]?this[ss].replaceAll(dc,"\\n"):void 0:this[ss]||void 0;return HTMLResult.success({name:this[Ws],attributes:{href:this.href,style:mapStyle(this.style,this,this[oc])},children:t,value:a})}}class A extends XhtmlObject{constructor(e){super(e,"a");this.href=fixURL(e.href)||""}}class B extends XhtmlObject{constructor(e){super(e,"b")}[Ks](e){e.pushFont({weight:"bold"});super[Ks](e\ -);e.popFont()}}class Body extends XhtmlObject{constructor(e){super(e,"body")}[co](e){const t=super[co](e),{html:a}=t;if(!a)return HTMLResult.EMPTY;a.name="div";a.attributes.class=["xfaRich"];return t}}class Br extends XhtmlObject{constructor(e){super(e,"br")}[so](){return"\\n"}[Ks](e){e.addString("\\n")}[co](e){return HTMLResult.success({name:"br"})}}class Html extends XhtmlObject{constructor(e){super(e,"html")}[co](e){const t=[];this[ls]={children:t};this[es]({});if(0===t.length)return HTMLResult\ -.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[ss]||""});if(1===t.length){const e=t[0];if(e.attributes?.class.includes("xfaRich"))return HTMLResult.success(e)}return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}class I extends XhtmlObject{constructor(e){super(e,"i")}[Ks](e){e.pushFont({posture:"italic"});super[Ks](e);e.popFont()}}class Li extends XhtmlObject{constructor(e){super(e,"li")}}class Ol extends XhtmlObject{constructor(e){\ -super(e,"ol")}}class P extends XhtmlObject{constructor(e){super(e,"p")}[Ks](e){super[Ks](e,!1);e.addString("\\n");e.addPara();e.popFont()}[so](){return this[vs]()[Ss]().at(-1)===this?super[so]():super[so]()+"\\n"}}class Span extends XhtmlObject{constructor(e){super(e,"span")}}class Sub extends XhtmlObject{constructor(e){super(e,"sub")}}class Sup extends XhtmlObject{constructor(e){super(e,"sup")}}class Ul extends XhtmlObject{constructor(e){super(e,"ul")}}class XhtmlNamespace{static[fo](e,t){if(Xhtm\ -lNamespace.hasOwnProperty(e))return XhtmlNamespace[e](t)}static a(e){return new A(e)}static b(e){return new B(e)}static body(e){return new Body(e)}static br(e){return new Br(e)}static html(e){return new Html(e)}static i(e){return new I(e)}static li(e){return new Li(e)}static ol(e){return new Ol(e)}static p(e){return new P(e)}static span(e){return new Span(e)}static sub(e){return new Sub(e)}static sup(e){return new Sup(e)}static ul(e){return new Ul(e)}}const gc={config:ConfigNamespace,connection:\ -ConnectionSetNamespace,datasets:DatasetsNamespace,localeSet:LocaleSetNamespace,signature:SignatureNamespace,stylesheet:StylesheetNamespace,template:TemplateNamespace,xdp:XdpNamespace,xhtml:XhtmlNamespace};class UnknownNamespace{constructor(e){this.namespaceId=e}[fo](e,t){return new XmlObject(this.namespaceId,e,t)}}class Root extends XFAObject{constructor(e){super(-1,"root",Object.create(null));this.element=null;this[Os]=e}[$s](e){this.element=e;return!0}[hs](){super[hs]();if(this.element.templat\ -e instanceof Template){this[Os].set(Qs,this.element);this.element.template[eo](this[Os]);this.element.template[Os]=this[Os]}}}class Empty extends XFAObject{constructor(){super(-1,"",Object.create(null))}[$s](e){return!1}}class Builder{constructor(e=null){this._namespaceStack=[];this._nsAgnosticLevel=0;this._namespacePrefixes=new Map;this._namespaces=new Map;this._nextNsId=Math.max(...Object.values(go).map((({id:e})=>e)));this._currentNamespace=e||new UnknownNamespace(++this._nextNsId)}buildRoot(\ -e){return new Root(e)}build({nsPrefix:e,name:t,attributes:a,namespace:r,prefixes:i}){const n=null!==r;if(n){this._namespaceStack.push(this._currentNamespace);this._currentNamespace=this._searchNamespace(r)}i&&this._addNamespacePrefix(i);if(a.hasOwnProperty(zs)){const e=gc.datasets,t=a[zs];let r=null;for(const[a,i]of Object.entries(t)){if(this._getNamespaceToUse(a)===e){r={xfa:i};break}}r?a[zs]=r:delete a[zs]}const s=this._getNamespaceToUse(e),o=s?.[fo](t,a)||new Empty;o[Ls]()&&this._nsAgnosticLe\ -vel++;(n||i||o[Ls]())&&(o[rs]={hasNamespace:n,prefixes:i,nsAgnostic:o[Ls]()});return o}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(e){let t=this._namespaces.get(e);if(t)return t;for(const[a,{check:r}]of Object.entries(go))if(r(e)){t=gc[a];if(t){this._namespaces.set(e,t);return t}break}t=new UnknownNamespace(++this._nextNsId);this._namespaces.set(e,t);return t}_addNamespacePrefix(e){for(const{prefix:t,value:a}of e){const e=this._searchNamespace(a);let r=this._namespacePrefixes.\ -get(t);if(!r){r=[];this._namespacePrefixes.set(t,r)}r.push(e)}}_getNamespaceToUse(e){if(!e)return this._currentNamespace;const t=this._namespacePrefixes.get(e);if(t?.length>0)return t.at(-1);warn(`Unknown namespace prefix: ${e}.`);return null}clean(e){const{hasNamespace:t,prefixes:a,nsAgnostic:r}=e;t&&(this._currentNamespace=this._namespaceStack.pop());a&&a.forEach((({prefix:e})=>{this._namespacePrefixes.get(e).pop()}));r&&this._nsAgnosticLevel--}}class XFAParser extends XMLParserBase{constructo\ -r(e=null,t=!1){super();this._builder=new Builder(e);this._stack=[];this._globalData={usedTypefaces:new Set};this._ids=new Map;this._current=this._builder.buildRoot(this._ids);this._errorCode=jn;this._whiteRegex=/^\\s+$/;this._nbsps=/\\xa0+/g;this._richText=t}parse(e){this.parseXml(e);if(this._errorCode===jn){this._current[hs]();return this._current.element}}onText(e){e=e.replace(this._nbsps,(e=>e.slice(1)+" "));this._richText||this._current[Yn]()?this._current[Vs](e,this._richText):this._whiteRege\ -x.test(e)||this._current[Vs](e.trim())}onCdata(e){this._current[Vs](e)}_mkAttributes(e,t){let a=null,r=null;const i=Object.create({});for(const{name:n,value:s}of e)if("xmlns"===n)a?warn(`XFA - multiple namespace definition in <${t}>`):a=s;else if(n.startsWith("xmlns:")){const e=n.substring(6);r??=[];r.push({prefix:e,value:s})}else{const e=n.indexOf(":");if(-1===e)i[n]=s;else{const t=i[zs]??=Object.create(null),[a,r]=[n.slice(0,e),n.slice(e+1)];(t[a]||=Object.create(null))[r]=s}}return[a,r,i]}_ge\ -tNameAndPrefix(e,t){const a=e.indexOf(":");return-1===a?[e,null]:[e.substring(a+1),t?"":e.substring(0,a)]}onBeginElement(e,t,a){const[r,i,n]=this._mkAttributes(t,e),[s,o]=this._getNameAndPrefix(e,this._builder.isNsAgnostic()),c=this._builder.build({nsPrefix:o,name:s,attributes:n,namespace:r,prefixes:i});c[Is]=this._globalData;if(a){c[hs]();this._current[$s](c)&&c[ao](this._ids);c[ts](this._builder)}else{this._stack.push(this._current);this._current=c}}onEndElement(e){const t=this._current;if(t[B\ -s]()&&"string"==typeof t[ss]){const e=new XFAParser;e._globalData=this._globalData;const a=e.parse(t[ss]);t[ss]=null;t[$s](a)}t[hs]();this._current=this._stack.pop();this._current[$s](t)&&t[ao](this._ids);t[ts](this._builder)}onError(e){this._errorCode=e}}class XFAFactory{constructor(e){try{this.root=(new XFAParser).parse(XFAFactory._createDocument(e));const t=new Binder(this.root);this.form=t.bind();this.dataHandler=new DataHandler(this.root,t.getData());this.form[Is].template=this.form}catch(e\ -){warn(`XFA - an error occurred during parsing and binding: ${e}`)}}isValid(){return!(!this.root||!this.form)}_createPagesHelper(){const e=this.form[oo]();return new Promise(((t,a)=>{const nextIteration=()=>{try{const a=e.next();a.done?t(a.value):setTimeout(nextIteration,0)}catch(e){a(e)}};setTimeout(nextIteration,0)}))}async _createPages(){try{this.pages=await this._createPagesHelper();this.dims=this.pages.children.map((e=>{const{width:t,height:a}=e.attributes.style;return[0,0,parseInt(t),parse\ -Int(a)]}))}catch(e){warn(`XFA - an error occurred during layout: ${e}`)}}getBoundingBox(e){return this.dims[e]}async getNumPages(){this.pages||await this._createPages();return this.dims.length}setImages(e){this.form[Is].images=e}setFonts(e){this.form[Is].fontFinder=new FontFinder(e);const t=[];for(let e of this.form[Is].usedTypefaces){e=stripQuotes(e);this.form[Is].fontFinder.find(e)||t.push(e)}return t.length>0?t:null}appendFonts(e,t){this.form[Is].fontFinder.add(e,t)}async getPages(){this.page\ -s||await this._createPages();const e=this.pages;this.pages=null;return e}serializeData(e){return this.dataHandler.serialize(e)}static _createDocument(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}static getRichTextAsHtml(e){if(!e||"string"!=typeof e)return null;try{let t=new XFAParser(XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[Ws])){const e=XhtmlNamespace.body({});e[Qn](t);t=e}const a=t[co]();if(!a.success)return null;const{html:r}=a,{attributes:i}=r;if(i){i.cla\ -ss&&(i.class=i.class.filter((e=>!e.startsWith("xfa"))));i.dir="auto"}return{html:r,str:t[so]()}}catch(e){warn(`XFA - an error occurred during parsing of rich text: ${e}`)}return null}}class AnnotationFactory{static createGlobals(e){return Promise.all([e.ensureCatalog("acroForm"),e.ensureDoc("xfaDatasets"),e.ensureCatalog("structTreeRoot"),e.ensureCatalog("baseUrl"),e.ensureCatalog("attachments"),e.ensureCatalog("globalColorSpaceCache")]).then((([t,a,r,i,n,s])=>({pdfManager:e,acroForm:t instanceo\ -f Dict?t:Dict.empty,xfaDatasets:a,structTreeRoot:r,baseUrl:i,attachments:n,globalColorSpaceCache:s})),(e=>{warn(`createGlobals: "${e}".`);return null}))}static async create(e,t,a,r,i,n,s){const o=i?await this._getPageIndex(e,t,a.pdfManager):null;return a.pdfManager.ensure(this,"_create",[e,t,a,r,i,n,o,s])}static _create(e,t,a,r,i=!1,n=null,s=null,o=null){const c=e.fetchIfRef(t);if(!(c instanceof Dict))return;const{acroForm:l,pdfManager:h}=a,u=t instanceof Ref?t.toString():`annot_${r.createObjId(\ -)}`;let d=c.get("Subtype");d=d instanceof Name?d.name:null;const f={xref:e,ref:t,dict:c,subtype:d,id:u,annotationGlobals:a,collectFields:i,orphanFields:n,needAppearances:!i&&!0===l.get("NeedAppearances"),pageIndex:s,evaluatorOptions:h.evaluatorOptions,pageRef:o};switch(d){case"Link":return new LinkAnnotation(f);case"Text":return new TextAnnotation(f);case"Widget":let e=getInheritableProperty({dict:c,key:"FT"});e=e instanceof Name?e.name:null;switch(e){case"Tx":return new TextWidgetAnnotation(f);\ -case"Btn":return new ButtonWidgetAnnotation(f);case"Ch":return new ChoiceWidgetAnnotation(f);case"Sig":return new SignatureWidgetAnnotation(f)}warn(`Unimplemented widget field type "${e}", falling back to base field type.`);return new WidgetAnnotation(f);case"Popup":return new PopupAnnotation(f);case"FreeText":return new FreeTextAnnotation(f);case"Line":return new LineAnnotation(f);case"Square":return new SquareAnnotation(f);case"Circle":return new CircleAnnotation(f);case"PolyLine":return new P\ -olylineAnnotation(f);case"Polygon":return new PolygonAnnotation(f);case"Caret":return new CaretAnnotation(f);case"Ink":return new InkAnnotation(f);case"Highlight":return new HighlightAnnotation(f);case"Underline":return new UnderlineAnnotation(f);case"Squiggly":return new SquigglyAnnotation(f);case"StrikeOut":return new StrikeOutAnnotation(f);case"Stamp":return new StampAnnotation(f);case"FileAttachment":return new FileAttachmentAnnotation(f);default:i||warn(d?`Unimplemented annotation type "${d\ -}", falling back to base annotation.`:"Annotation is missing the required /Subtype.");return new Annotation(f)}}static async _getPageIndex(e,t,a){try{const r=await e.fetchIfRefAsync(t);if(!(r instanceof Dict))return-1;const i=r.getRaw("P");if(i instanceof Ref)try{return await a.ensureCatalog("getPageIndex",[i])}catch(e){info(`_getPageIndex -- not a valid page reference: "${e}".`)}if(r.has("Kids"))return-1;const n=await a.ensureDoc("numPages");for(let e=0;e<n;e++){const r=await a.getPage(e),i=awa\ -it a.ensure(r,"annotations");for(const a of i)if(a instanceof Ref&&isRefsEqual(a,t))return e}}catch(e){warn(`_getPageIndex: "${e}".`)}return-1}static generateImages(e,t,a){if(!a){warn("generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images.");return null}let r;for(const{bitmapId:a,bitmap:i}of e)if(i){r||=new Map;r.set(a,StampAnnotation.createImage(i,t))}return r}static async saveNewAnnotations(e,t,a,r,i){const n=e.xref;let s;const o=[],{isOffscreenCan\ -vasSupported:c}=e.options;for(const l of a)if(!l.deleted)switch(l.annotationType){case g:if(!s){const e=new Dict(n);e.setIfName("BaseFont","Helvetica");e.setIfName("Type","Font");e.setIfName("Subtype","Type1");e.setIfName("Encoding","WinAnsiEncoding");s=n.getNewTemporaryRef();i.put(s,{data:e})}o.push(FreeTextAnnotation.createNewAnnotation(n,l,i,{evaluator:e,task:t,baseFontRef:s}));break;case p:l.quadPoints?o.push(HighlightAnnotation.createNewAnnotation(n,l,i)):o.push(InkAnnotation.createNewAnnot\ -ation(n,l,i));break;case b:o.push(InkAnnotation.createNewAnnotation(n,l,i));break;case m:const a=c?await(r?.get(l.bitmapId)):null;if(a?.imageStream){const{imageStream:e,smaskStream:t}=a;if(t){const a=n.getNewTemporaryRef();i.put(a,{data:t});e.dict.set("SMask",a)}const r=a.imageRef=n.getNewTemporaryRef();i.put(r,{data:e});a.imageStream=a.smaskStream=null}o.push(StampAnnotation.createNewAnnotation(n,l,i,{image:a}));break;case y:o.push(StampAnnotation.createNewAnnotation(n,l,i,{}))}return{annotatio\ -ns:(await Promise.all(o)).flat()}}static async printNewAnnotations(e,t,a,r,i){if(!r)return null;const{options:n,xref:s}=t,o=[];for(const c of r)if(!c.deleted)switch(c.annotationType){case g:o.push(FreeTextAnnotation.createNewPrintAnnotation(e,s,c,{evaluator:t,task:a,evaluatorOptions:n}));break;case p:c.quadPoints?o.push(HighlightAnnotation.createNewPrintAnnotation(e,s,c,{evaluatorOptions:n})):o.push(InkAnnotation.createNewPrintAnnotation(e,s,c,{evaluatorOptions:n}));break;case b:o.push(InkAnnota\ -tion.createNewPrintAnnotation(e,s,c,{evaluatorOptions:n}));break;case m:const r=n.isOffscreenCanvasSupported?await(i?.get(c.bitmapId)):null;if(r?.imageStream){const{imageStream:e,smaskStream:t}=r;t&&e.dict.set("SMask",t);r.imageRef=new JpegStream(e,e.length);r.imageStream=r.smaskStream=null}o.push(StampAnnotation.createNewPrintAnnotation(e,s,c,{image:r,evaluatorOptions:n}));break;case y:o.push(StampAnnotation.createNewPrintAnnotation(e,s,c,{evaluatorOptions:n}))}return Promise.all(o)}}function g\ -etRgbColor(e,t=new Uint8ClampedArray(3)){if(!Array.isArray(e))return t;const a=t||new Uint8ClampedArray(3);switch(e.length){case 0:return null;case 1:ColorSpaceUtils.gray.getRgbItem(e,0,a,0);return a;case 3:ColorSpaceUtils.rgb.getRgbItem(e,0,a,0);return a;case 4:ColorSpaceUtils.cmyk.getRgbItem(e,0,a,0);return a;default:return t}}function getPdfColorArray(e,t=null){return e&&Array.from(e,(e=>e/255))||t}function getQuadPoints(e,t){const a=e.getArray("QuadPoints");if(!isNumberArray(a,null)||0===a.l\ -ength||a.length%8>0)return null;const r=new Float32Array(a.length);for(let e=0,i=a.length;e<i;e+=8){const[i,n,s,o,c,l,h,u]=a.slice(e,e+8),d=Math.min(i,s,c,h),f=Math.max(i,s,c,h),g=Math.min(n,o,l,u),p=Math.max(n,o,l,u);if(null!==t&&(d<t[0]||f>t[2]||g<t[1]||p>t[3]))return null;r.set([d,p,f,p,d,g,f,g],e)}return r}function getTransformMatrix(e,t,a){const r=new Float32Array([1/0,1/0,-1/0,-1/0]);Util.axialAlignedBoundingBox(t,a,r);const[i,n,s,o]=r;if(i===s||n===o)return[1,0,0,1,e[0],e[1]];const c=(e[2\ -]-e[0])/(s-i),l=(e[3]-e[1])/(o-n);return[c,0,0,l,e[0]-i*c,e[1]-n*l]}class Annotation{constructor(e){const{dict:t,xref:a,annotationGlobals:r,ref:i,orphanFields:n}=e,s=n?.get(i);s&&t.set("Parent",s);this.setTitle(t.get("T"));this.setContents(t.get("Contents"));this.setModificationDate(t.get("M"));this.setFlags(t.get("F"));this.setRectangle(t.getArray("Rect"));this.setColor(t.getArray("C"));this.setBorderStyle(t);this.setAppearance(t);this.setOptionalContent(t);const o=t.get("MK");this.setBorderAnd\ -BackgroundColors(o);this.setRotation(o,t);this.ref=e.ref instanceof Ref?e.ref:null;this._streams=[];this.appearance&&this._streams.push(this.appearance);const c=!!(this.flags&ee),l=!!(this.flags&te);this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:e.id,modificationDate:this.modificationDate,rect:this.rectangle,su\ -btype:e.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&Z),noHTML:c&&l,isEditable:!1,structParent:-1};if(r.structTreeRoot){let a=t.get("StructParent");this.data.structParent=a=Number.isInteger(a)&&a>=0?a:-1;r.structTreeRoot.addAnnotationIdToPage(e.pageRef,a)}if(e.collectFields){const r=t.get("Kids");if(Array.isArray(r)){const e=[];for(const t of r)t instanceof Ref&&e.push(t.toString());0!==e.length&&(this.data.kidIds=e)}this.data.actions=collectActions(a,t,ye);this.data.fieldName=this._constructF\ -ieldName(t);this.data.pageIndex=e.pageIndex}const h=t.get("IT");h instanceof Name&&(this.data.it=h.name);this._isOffscreenCanvasSupported=e.evaluatorOptions.isOffscreenCanvasSupported;this._fallbackFontDict=null;this._needAppearances=!1}_hasFlag(e,t){return!!(e&t)}_buildFlags(e,t){let{flags:a}=this;if(void 0===e){if(void 0===t)return;return t?a&~Y:a&~J|Y}if(e){a|=Y;return t?a&~Q|J:a&~J|Q}a&=~(J|Q);return t?a&~Y:a|Y}_isViewable(e){return!this._hasFlag(e,K)&&!this._hasFlag(e,Q)}_isPrintable(e){ret\ -urn this._hasFlag(e,Y)&&!this._hasFlag(e,J)&&!this._hasFlag(e,K)}mustBeViewed(e,t){const a=e?.get(this.data.id)?.noView;return void 0!==a?!a:this.viewable&&!this._hasFlag(this.flags,J)}mustBePrinted(e){const t=e?.get(this.data.id)?.noPrint;return void 0!==t?!t:this.printable}mustBeViewedWhenEditing(e,t=null){return e?!this.data.isEditable:!t?.has(this.data.id)}get viewable(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}get printable(){return null!==this.data\ -.quadPoints&&(0!==this.flags&&this._isPrintable(this.flags))}_parseStringHelper(e){const t="string"==typeof e?stringToPDFString(e):"";return{str:t,dir:t&&"rtl"===bidi(t).dir?"rtl":"ltr"}}setDefaultAppearance(e){const{dict:t,annotationGlobals:a}=e,r=getInheritableProperty({dict:t,key:"DA"})||a.acroForm.get("DA");this._defaultAppearance="string"==typeof r?r:"";this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance)}setTitle(e){this._title=this._parseStringHelper(e)}setConte\ -nts(e){this._contents=this._parseStringHelper(e)}setModificationDate(e){this.modificationDate="string"==typeof e?e:null}setFlags(e){this.flags=Number.isInteger(e)&&e>0?e:0;this.flags&K&&"Annotation"!==this.constructor.name&&(this.flags^=K)}hasFlag(e){return this._hasFlag(this.flags,e)}setRectangle(e){this.rectangle=lookupNormalRect(e,[0,0,0,0])}setColor(e){this.color=getRgbColor(e)}setLineEndings(e){this.lineEndings=["None","None"];if(Array.isArray(e)&&2===e.length)for(let t=0;t<2;t++){const a=e\ -[t];if(a instanceof Name)switch(a.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=a.name;continue}warn(`Ignoring invalid lineEnding: ${a}`)}}setRotation(e,t){this.rotation=0;let a=e instanceof Dict?e.get("R")||0:t.get("Rotate")||0;if(Number.isInteger(a)&&0!==a){a%=360;a<0&&(a+=360);a%90==0&&(this.rotation=a)}}setBorderAndBackgroundColors(e){if(e instanceof Dict){this\ -.borderColor=getRgbColor(e.getArray("BC"),null);this.backgroundColor=getRgbColor(e.getArray("BG"),null)}else this.borderColor=this.backgroundColor=null}setBorderStyle(e){this.borderStyle=new AnnotationBorderStyle;if(e instanceof Dict)if(e.has("BS")){const t=e.get("BS");if(t instanceof Dict){const e=t.get("Type");if(!e||isName(e,"Border")){this.borderStyle.setWidth(t.get("W"),this.rectangle);this.borderStyle.setStyle(t.get("S"));this.borderStyle.setDashArray(t.getArray("D"))}}}else if(e.has("Bord\ -er")){const t=e.getArray("Border");if(Array.isArray(t)&&t.length>=3){this.borderStyle.setHorizontalCornerRadius(t[0]);this.borderStyle.setVerticalCornerRadius(t[1]);this.borderStyle.setWidth(t[2],this.rectangle);4===t.length&&this.borderStyle.setDashArray(t[3],!0)}}else this.borderStyle.setWidth(0)}setAppearance(e){this.appearance=null;const t=e.get("AP");if(!(t instanceof Dict))return;const a=t.get("N");if(a instanceof BaseStream){this.appearance=a;return}if(!(a instanceof Dict))return;const r=\ -e.get("AS");if(!(r instanceof Name&&a.has(r.name)))return;const i=a.get(r.name);i instanceof BaseStream&&(this.appearance=i)}setOptionalContent(e){this.oc=null;const t=e.get("OC");t instanceof Name?warn("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof Dict&&(this.oc=t)}async loadResources(e,t){const a=await t.dict.getAsync("Resources");a&&await ObjectLoader.load(a,e,a.xref);return a}async getOperatorList(e,t,a,r){const{hasOwnCanvas:i,id:n,rect:o}=this.data;let c=th\ -is.appearance;const l=!!(i&&a&s);if(l&&(0===this.width||0===this.height)){this.data.hasOwnCanvas=!1;return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}if(!c){if(!l)return{opList:new OperatorList,separateForm:!1,separateCanvas:!1};c=new StringStream("");c.dict=new Dict}const h=c.dict,u=await this.loadResources(Ia,c),d=lookupRect(h.getArray("BBox"),[0,0,1,1]),f=lookupMatrix(h.getArray("Matrix"),Fa),g=getTransformMatrix(o,d,f),p=new OperatorList;let m;this.oc&&(m=await e.parseMarkedC\ -ontentProps(this.oc,null));void 0!==m&&p.addOp(jt,["OC",m]);p.addOp($t,[n,o,g,f,l]);await e.getOperatorList({stream:c,task:t,resources:u,operatorList:p,fallbackFontDict:this._fallbackFontDict});p.addOp(Gt,[]);void 0!==m&&p.addOp(_t,[]);this.reset();return{opList:p,separateForm:!1,separateCanvas:l}}async save(e,t,a,r){return null}get overlaysTextContent(){return!1}get hasTextContent(){return!1}async extractTextContent(e,t,a){if(!this.appearance)return;const r=await this.loadResources(Ta,this.appe\ -arance),i=[],n=[];let s=null;const o={desiredSize:Math.Infinity,ready:!0,enqueue(e,t){for(const t of e.items)if(void 0!==t.str){s||=t.transform.slice(-2);n.push(t.str);if(t.hasEOL){i.push(n.join("").trimEnd());n.length=0}}}};await e.getTextContent({stream:this.appearance,task:t,resources:r,includeMarkedContent:!0,keepWhiteSpace:!0,sink:o,viewBox:a});this.reset();n.length&&i.push(n.join("").trimEnd());if(i.length>1||i[0]){const e=this.appearance.dict,t=lookupRect(e.getArray("BBox"),null),a=lookup\ -Matrix(e.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(s,t,a);this.data.textContent=i}}_transformPoint(e,t,a){const{rect:r}=this.data;t||=[0,0,1,1];a||=[1,0,0,1,0,0];const i=getTransformMatrix(r,t,a);i[4]-=r[0];i[5]-=r[1];const n=e.slice();Util.applyTransform(n,i);Util.applyTransform(n,a);return n}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor\ -,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(const e of this._streams)e.reset()}_constructFieldName(e){if(!e.has("T")&&!e.has("Parent")){warn("Unknown field name, falling back to empty field name.");return""}if(!e.has("Parent"))return stringToPDFString(e.get("T"));const t=[];e.has("T")&&t.unshift(stringToPDFString(e.get("T")));let a=e;const r=new RefSet;e.objId&&r.put(e.objId);for(;a.has("Parent");){a=a.get("Parent");if(!(a instanceof Dict)||\ -a.objId&&r.has(a.objId))break;a.objId&&r.put(a.objId);a.has("T")&&t.unshift(stringToPDFString(a.get("T")))}return t.join(".")}get width(){return this.data.rect[2]-this.data.rect[0]}get height(){return this.data.rect[3]-this.data.rect[1]}}class AnnotationBorderStyle{constructor(){this.width=1;this.rawWidth=1;this.style=fe;this.dashArray=[3];this.horizontalCornerRadius=0;this.verticalCornerRadius=0}setWidth(e,t=[0,0,0,0]){if(e instanceof Name)this.width=0;else if("number"==typeof e){if(e>0){this.r\ -awWidth=e;const a=(t[2]-t[0])/2,r=(t[3]-t[1])/2;if(a>0&&r>0&&(e>a||e>r)){warn(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`);e=1}}this.width=e}}setStyle(e){if(e instanceof Name)switch(e.name){case"S":this.style=fe;break;case"D":this.style=ge;break;case"B":this.style=pe;break;case"I":this.style=me;break;case"U":this.style=be}}setDashArray(e,t=!1){if(Array.isArray(e)){let a=!0,r=!0;for(const t of e){if(!(+t>=0)){a=!1;break}t>0&&(r=!1)}if(0===e.length||a&&!r){this.dashArray=e;t&&this.setS\ -tyle(Name.get("D"))}else this.width=0}else e&&(this.width=0)}setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}class MarkupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;if(t.has("IRT")){const e=t.getRaw("IRT");this.data.inReplyTo=e instanceof Ref?e.toString():null;const a=t.get("RT");this.data.replyType=a instanceof Name?a.name:V}let a=null;if(this.data.replyType\ -===G){const e=t.get("IRT");this.setTitle(e.get("T"));this.data.titleObj=this._title;this.setContents(e.get("Contents"));this.data.contentsObj=this._contents;if(e.has("CreationDate")){this.setCreationDate(e.get("CreationDate"));this.data.creationDate=this.creationDate}else this.data.creationDate=null;if(e.has("M")){this.setModificationDate(e.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;a=e.getRaw("Popup");if(e.has("C")){this.setColor(e.getArray("\ -C"));this.data.color=this.color}else this.data.color=null}else{this.data.titleObj=this._title;this.setCreationDate(t.get("CreationDate"));this.data.creationDate=this.creationDate;a=t.getRaw("Popup");t.has("C")||(this.data.color=null)}this.data.popupRef=a instanceof Ref?a.toString():null;t.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(t.get("RC")))}setCreationDate(e){this.creationDate="string"==typeof e?e:null}_setDefaultAppearance({xref:e,extra:t,strokeColor:a,fillColor:r,blendMode\ -:i,strokeAlpha:n,fillAlpha:s,pointsCallback:o}){const c=this.data.rect=[1/0,1/0,-1/0,-1/0],l=["q"];t&&l.push(t);a&&l.push(`${a[0]} ${a[1]} ${a[2]} RG`);r&&l.push(`${r[0]} ${r[1]} ${r[2]} rg`);const h=this.data.quadPoints||Float32Array.from([this.rectangle[0],this.rectangle[3],this.rectangle[2],this.rectangle[3],this.rectangle[0],this.rectangle[1],this.rectangle[2],this.rectangle[1]]);for(let e=0,t=h.length;e<t;e+=8){const t=o(l,h.subarray(e,e+8));Util.rectBoundingBox(...t,c)}l.push("Q");const u=\ -new Dict(e),d=new Dict(e);d.setIfName("Subtype","Form");const f=new StringStream(l.join(" "));f.dict=d;u.set("Fm0",f);const g=new Dict(e);i&&g.setIfName("BM",i);g.setIfNumber("CA",n);g.setIfNumber("ca",s);const p=new Dict(e);p.set("GS0",g);const m=new Dict(e);m.set("ExtGState",p);m.set("XObject",u);const b=new Dict(e);b.set("Resources",m);b.set("BBox",c);this.appearance=new StringStream("/GS0 gs /Fm0 Do");this.appearance.dict=b;this._streams.push(this.appearance,f)}static async createNewAnnotati\ -on(e,t,a,r){const i=t.ref||=e.getNewTemporaryRef(),n=await this.createNewAppearanceStream(t,e,r);let s;if(n){const r=e.getNewTemporaryRef();s=this.createNewDict(t,e,{apRef:r});a.put(r,{data:n})}else s=this.createNewDict(t,e,{});Number.isInteger(t.parentTreeId)&&s.set("StructParent",t.parentTreeId);a.put(i,{data:s});const o={ref:i};if(t.popup){const r=t.popup;if(r.deleted){s.delete("Popup");s.delete("Contents");s.delete("RC");return o}const n=r.ref||=e.getNewTemporaryRef();r.parent=i;const c=Popu\ -pAnnotation.createNewDict(r,e);a.put(n,{data:c});s.setIfDefined("Contents",stringToAsciiOrUTF16BE(r.contents));s.set("Popup",n);return[o,{ref:n}]}return o}static async createNewPrintAnnotation(e,t,a,r){const i=await this.createNewAppearanceStream(a,t,r),n=this.createNewDict(a,t,i?{ap:i}:{}),s=new this.prototype.constructor({dict:n,xref:t,annotationGlobals:e,evaluatorOptions:r.evaluatorOptions});a.ref&&(s.ref=s.refToReplace=a.ref);return s}}class WidgetAnnotation extends Annotation{constructor(e)\ -{super(e);const{dict:t,xref:a,annotationGlobals:r}=e,i=this.data;this._needAppearances=e.needAppearances;i.annotationType=$;void 0===i.fieldName&&(i.fieldName=this._constructFieldName(t));void 0===i.actions&&(i.actions=collectActions(a,t,ye));let n=getInheritableProperty({dict:t,key:"V",getArray:!0});i.fieldValue=this._decodeFormValue(n);const s=getInheritableProperty({dict:t,key:"DV",getArray:!0});i.defaultFieldValue=this._decodeFormValue(s);if(void 0===n&&r.xfaDatasets){const e=this._title.str\ -;if(e){this._hasValueFromXFA=!0;i.fieldValue=n=r.xfaDatasets.getValue(e)}}void 0===n&&null!==i.defaultFieldValue&&(i.fieldValue=i.defaultFieldValue);i.alternativeText=stringToPDFString(t.get("TU")||"");this.setDefaultAppearance(e);i.hasAppearance||=this._needAppearances&&void 0!==i.fieldValue&&null!==i.fieldValue;const o=getInheritableProperty({dict:t,key:"FT"});i.fieldType=o instanceof Name?o.name:null;const c=getInheritableProperty({dict:t,key:"DR"}),l=r.acroForm.get("DR"),h=this.appearance?.d\ -ict.get("Resources");this._fieldResources={localResources:c,acroFormResources:l,appearanceResources:h,mergedResources:Dict.merge({xref:a,dictArray:[c,h,l],mergeSubDicts:!0})};i.fieldFlags=getInheritableProperty({dict:t,key:"Ff"});(!Number.isInteger(i.fieldFlags)||i.fieldFlags<0)&&(i.fieldFlags=0);i.password=this.hasFieldFlag(ne);i.readOnly=this.hasFieldFlag(ae);i.required=this.hasFieldFlag(re);i.hidden=this._hasFlag(i.annotationFlags,J)||this._hasFlag(i.annotationFlags,Q)}_decodeFormValue(e){ret\ -urn Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>stringToPDFString(e))):e instanceof Name?stringToPDFString(e.name):"string"==typeof e?stringToPDFString(e):null}hasFieldFlag(e){return!!(this.data.fieldFlags&e)}_isViewable(e){return!0}mustBeViewed(e,t){return t?this.viewable:super.mustBeViewed(e,t)&&!this._hasFlag(this.flags,Q)}getRotationMatrix(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);return 0===t?Fa:getRotationMatrix(t,this.width,this.height)}getBorder\ -AndBackgroundAppearances(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);if(!this.backgroundColor&&!this.borderColor)return"";const a=0===t||180===t?`0 0 ${this.width} ${this.height} re`:`0 0 ${this.height} ${this.width} re`;let r="";this.backgroundColor&&(r=`${getPdfColor(this.backgroundColor,!0)} ${a} f `);if(this.borderColor){r+=`${this.borderStyle.width||1} w ${getPdfColor(this.borderColor,!1)} ${a} S `}return r}async getOperatorList(e,t,a,r){if(a&l&&!(this instanceof S\ -ignatureWidgetAnnotation)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new OperatorList,separateForm:!0,separateCanvas:!1};if(!this._hasText)return super.getOperatorList(e,t,a,r);const i=await this._getAppearance(e,t,a,r);if(this.appearance&&null===i)return super.getOperatorList(e,t,a,r);const n=new OperatorList;if(!this._defaultAppearance||null===i)return{opList:n,separateForm:!1,separateCanvas:!1};const o=!!(this.data.hasOwnCanvas&&a&s),c=[0,0,this.width,this.height],h=getTransfor\ -mMatrix(this.data.rect,c,[1,0,0,1,0,0]);let u;this.oc&&(u=await e.parseMarkedContentProps(this.oc,null));void 0!==u&&n.addOp(jt,["OC",u]);n.addOp($t,[this.data.id,this.data.rect,h,this.getRotationMatrix(r),o]);const d=new StringStream(i);await e.getOperatorList({stream:d,task:t,resources:this._fieldResources.mergedResources,operatorList:n});n.addOp(Gt,[]);void 0!==u&&n.addOp(_t,[]);return{opList:n,separateForm:!1,separateCanvas:o}}_getMKDict(e){const t=new Dict(null);e&&t.set("R",e);t.setIfArray\ -("BC",getPdfColorArray(this.borderColor));t.setIfArray("BG",getPdfColorArray(this.backgroundColor));return t.size>0?t:null}amendSavedDict(e,t){}setValue(e,t,a,r){const{dict:i,ref:n}=function getParentToUpdate(e,t,a){const r=new RefSet,i=e,n={dict:null,ref:null};for(;e instanceof Dict&&!r.has(t);){r.put(t);if(e.has("T"))break;if(!((t=e.getRaw("Parent"))instanceof Ref))return n;e=a.fetch(t)}if(e instanceof Dict&&e!==i){n.dict=e;n.ref=t}return n}(e,this.ref,a);if(i){if(!r.has(n)){const e=i.clone();\ -e.set("V",t);r.put(n,{data:e});return e}}else e.set("V",t);return null}async save(e,t,a,r){const i=a?.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.value,o=i?.rotation;if(s===this.data.fieldValue||void 0===s){if(!this._hasValueFromXFA&&void 0===o&&void 0===n)return;s||=this.data.fieldValue}if(void 0===o&&!this._hasValueFromXFA&&Array.isArray(s)&&Array.isArray(this.data.fieldValue)&&isArrayEqual(s,this.data.fieldValue)&&void 0===n)return;void 0===o&&(o=this.rotation);let l=n\ -ull;if(!this._needAppearances){l=await this._getAppearance(e,t,c,a);if(null===l&&void 0===n)return}let h=!1;if(l?.needAppearances){h=!0;l=null}const{xref:u}=e,d=u.fetchIfRef(this.ref);if(!(d instanceof Dict))return;const f=new Dict(u);for(const e of d.getKeys())"AP"!==e&&f.set(e,d.getRaw(e));if(void 0!==n){f.set("F",n);if(null===l&&!h){const e=d.getRaw("AP");e&&f.set("AP",e)}}const g={path:this.data.fieldName,value:s},p=this.setValue(f,Array.isArray(s)?s.map(stringToAsciiOrUTF16BE):stringToAscii\ -OrUTF16BE(s),u,r);this.amendSavedDict(a,p||f);const m=this._getMKDict(o);m&&f.set("MK",m);r.put(this.ref,{data:f,xfa:g,needAppearances:h});if(null!==l){const e=u.getNewTemporaryRef(),t=new Dict(u);f.set("AP",t);t.set("N",e);const i=this._getSaveFieldResources(u),n=new StringStream(l),s=n.dict=new Dict(u);s.setIfName("Subtype","Form");s.set("Resources",i);const c=o%180==0?[0,0,this.width,this.height]:[0,0,this.height,this.width];s.set("BBox",c);const h=this.getRotationMatrix(a);h!==Fa&&s.set("Mat\ -rix",h);r.put(e,{data:n,xfa:null,needAppearances:!1})}f.set("M",`D:${getModificationDate()}`)}async _getAppearance(e,t,a,r){if(this.data.password)return null;const n=r?.get(this.data.id);let s,o;if(n){s=n.formattedValue||n.value;o=n.rotation}if(void 0===o&&void 0===s&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;const l=this.getBorderAndBackgroundAppearances(r);if(void 0===s){s=this.data.fieldValue;if(!s)return`/Tx BMC q ${l}Q EMC`}Array.isArray(s)&&1===s.length&\ -&(s=s[0]);assert("string"==typeof s,"Expected `value` to be a string.");s=s.trimEnd();if(this.data.combo){const e=this.data.options.find((({exportValue:e})=>s===e));s=e?.displayValue||s}if(""===s)return`/Tx BMC q ${l}Q EMC`;void 0===o&&(o=this.rotation);let h,u=-1;if(this.data.multiLine){h=s.split(/\\r\\n?|\\n/).map((e=>e.normalize("NFC")));u=h.length}else h=[s.replace(/\\r\\n?|\\n/,"").normalize("NFC")];let{width:d,height:f}=this;90!==o&&270!==o||([d,f]=[f,d]);this._defaultAppearance||(this.data.defa\ -ultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let g,p,m,b=await WidgetAnnotation._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);const y=[];let w=!1;for(const e of h){const t=b.encodeString(e);t.length>1&&(w=!0);y.push(t.join(""))}if(w&&a&c)return{needAppearances:!0};if(w&&this._isOffscreenCanvasSupported){const a=this.data.comb?"monospace":"sans-serif",r=new FakeUnicodeFont(e.xref,a),i=r.createFontResources(h.join\ -("")),n=i.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){const e=this._fieldResources.mergedResources.get("Font");for(const t of n.getKeys())e.set(t,n.getRaw(t))}else this._fieldResources.mergedResources.set("Font",n);const o=r.fontName.name;b=await WidgetAnnotation._getFontData(e,t,{fontName:o,fontSize:0},i);for(let e=0,t=y.length;e<t;e++)y[e]=stringToUTF16String(h[e]);const c=Object.assign(Object.create(null),this.data.defaultAppearanceData);this.data.defaultAppearanceData\ -.fontSize=0;this.data.defaultAppearanceData.fontName=o;[g,p,m]=this._computeFontSize(f-2,d-4,s,b,u);this.data.defaultAppearanceData=c}else{this._isOffscreenCanvasSupported||warn("_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly.");[g,p,m]=this._computeFontSize(f-2,d-4,s,b,u)}let x=b.descent;x=isNaN(x)?i*m:Math.max(i*m,Math.abs(x)*p);const S=Math.min(Math.floor((f-p)/2),1),k=this.data.textAlignment;if(this.data.multiLine)return this._getMultilineAppearance(g,y\ -,b,p,d,f,k,2,S,x,m,r);if(this.data.comb)return this._getCombAppearance(g,b,y[0],p,d,f,2,S,x,m,r);const C=S+x;if(0===k||k>2)return`/Tx BMC q ${l}BT `+g+` 1 0 0 1 ${numberToString(2)} ${numberToString(C)} Tm (${escapeString(y[0])}) Tj ET Q EMC`;return`/Tx BMC q ${l}BT `+g+` 1 0 0 1 0 0 Tm ${this._renderText(y[0],b,p,d,k,{shift:0},2,C)} ET Q EMC`}static async _getFontData(e,t,a,r){const i=new OperatorList,n={font:null,clone(){return this}},{fontName:s,fontSize:o}=a;await e.handleSetFont(r,[s&&Name.\ -get(s),o],null,i,t,n,null);return n.font}_getTextWidth(e,t){return Math.sumPrecise(t.charsToGlyphs(e).map((e=>e.width)))/1e3}_computeFontSize(e,t,r,i,n){let{fontSize:s}=this.data.defaultAppearanceData,o=(s||12)*a,c=Math.round(e/o);if(!s){const roundWithTwoDigits=e=>Math.floor(100*e)/100;if(-1===n){const n=this._getTextWidth(r,i);s=roundWithTwoDigits(Math.min(e/a,t/n));c=1}else{const l=r.split(/\\r\\n?|\\n/),h=[];for(const e of l){const t=i.encodeString(e).join(""),a=i.charsToGlyphs(t),r=i.getCharPo\ -sitions(t);h.push({line:t,glyphs:a,positions:r})}const isTooBig=a=>{let r=0;for(const n of h){r+=this._splitLine(null,i,a,t,n).length*a;if(r>e)return!0}return!1};c=Math.max(c,n);for(;;){o=e/c;s=roundWithTwoDigits(o/a);if(!isTooBig(s))break;c++}}const{fontName:l,fontColor:h}=this.data.defaultAppearanceData;this._defaultAppearance=function createDefaultAppearance({fontSize:e,fontName:t,fontColor:a}){return`/${escapePDFName(t)} ${e} Tf ${getPdfColor(a,!0)}`}({fontSize:s,fontName:l,fontColor:h})}ret\ -urn[this._defaultAppearance,s,e/c]}_renderText(e,t,a,r,i,n,s,o){let c;if(1===i){c=(r-this._getTextWidth(e,t)*a)/2}else if(2===i){c=r-this._getTextWidth(e,t)*a-s}else c=s;const l=numberToString(c-n.shift);n.shift=c;return`${l} ${o=numberToString(o)} Td (${escapeString(e)}) Tj`}_getSaveFieldResources(e){const{localResources:t,appearanceResources:a,acroFormResources:r}=this._fieldResources,i=this.data.defaultAppearanceData?.fontName;if(!i)return t||Dict.empty;for(const e of[t,a])if(e instanceof Dic\ -t){const t=e.get("Font");if(t instanceof Dict&&t.has(i))return e}if(r instanceof Dict){const a=r.get("Font");if(a instanceof Dict&&a.has(i)){const r=new Dict(e);r.set(i,a.getRaw(i));const n=new Dict(e);n.set("Font",r);return Dict.merge({xref:e,dictArray:[n,t],mergeSubDicts:!0})}}return t||Dict.empty}getFieldObject(){return null}}class TextWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t}=e;if(t.has("PMD")){this.flags|=J;this.data.hidden=!0;warn("Barcodes are not sup\ -ported")}this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML;this._hasText=!0;"string"!=typeof this.data.fieldValue&&(this.data.fieldValue="");let a=getInheritableProperty({dict:t,key:"Q"});(!Number.isInteger(a)||a<0||a>2)&&(a=null);this.data.textAlignment=a;let r=getInheritableProperty({dict:t,key:"MaxLen"});(!Number.isInteger(r)||r<0)&&(r=0);this.data.maxLen=r;this.data.multiLine=this.hasFieldFlag(ie);this.data.comb=this.hasFieldFlag(de)&&!this.data.multiLine&&!this.data.password&&!th\ -is.hasFieldFlag(le)&&0!==this.data.maxLen;this.data.doNotScroll=this.hasFieldFlag(ue);const{data:{actions:i}}=this;if(!i)return;const n=/^AF(Date|Time)_(?:Keystroke|Format)(?:Ex)?\\([\'"]?([^\'"]+)[\'"]?\\);$/;let s=!1;(1===i.Format?.length&&1===i.Keystroke?.length&&n.test(i.Format[0])&&n.test(i.Keystroke[0])||0===i.Format?.length&&1===i.Keystroke?.length&&n.test(i.Keystroke[0])||0===i.Keystroke?.length&&1===i.Format?.length&&n.test(i.Format[0]))&&(s=!0);const o=[];i.Format&&o.push(...i.Format);i.Key\ -stroke&&o.push(...i.Keystroke);if(s){delete i.Keystroke;i.Format=o}for(const e of o){const t=e.match(n);if(!t)continue;const a="Date"===t[1];let r=t[2];const i=parseInt(r,10);isNaN(i)||Math.floor(Math.log10(i))+1!==t[2].length||(r=(a?Pn:Ln)[i]??r);this.data.datetimeFormat=r;if(!s)break;if(a){if(/HH|MM|ss|h/.test(r)){this.data.datetimeType="datetime-local";this.data.timeStep=/ss/.test(r)?1:60}else this.data.datetimeType="date";break}this.data.datetimeType="time";this.data.timeStep=/ss/.test(r)?1:\ -60;break}}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(e,t,a,r,i,n,s,o,c,l,h){const u=i/this.data.maxLen,d=this.getBorderAndBackgroundAppearances(h),f=[],g=t.getCharPositions(a);for(const[e,t]of g)f.push(`(${escapeString(a.substring(e,t))}) Tj`);const p=f.join(` ${numberToString(u)} 0 Td `);return`/Tx BMC q ${d}BT `+e+` 1 0 0 1 ${numberToString(s)} ${numberToString(o+c)} Tm ${p} ET Q EMC`}_getMultilineAppearance(e,t,a,r,i,n,s,o,c,l,h,u){const d=[],f=i-2\ -*o,g={shift:0};for(let e=0,n=t.length;e<n;e++){const n=t[e],u=this._splitLine(n,a,r,f);for(let t=0,n=u.length;t<n;t++){const n=u[t],f=0===e&&0===t?-c-(h-l):-h;d.push(this._renderText(n,a,r,i,s,g,o,f))}}const p=this.getBorderAndBackgroundAppearances(u),m=d.join("\\n");return`/Tx BMC q ${p}BT `+e+` 1 0 0 1 0 ${numberToString(n)} Tm ${m} ET Q EMC`}_splitLine(e,t,a,r,i={}){e=i.line||e;const n=i.glyphs||t.charsToGlyphs(e);if(n.length<=1)return[e];const s=i.positions||t.getCharPositions(e),o=a/1e3,c=[]\ -;let l=-1,h=-1,u=-1,d=0,f=0;for(let t=0,a=n.length;t<a;t++){const[a,i]=s[t],g=n[t],p=g.width*o;if(" "===g.unicode)if(f+p>r){c.push(e.substring(d,a));d=a;f=p;l=-1;u=-1}else{f+=p;l=a;h=i;u=t}else if(f+p>r)if(-1!==l){c.push(e.substring(d,h));d=h;t=u+1;l=-1;f=0}else{c.push(e.substring(d,a));d=a;f=p}else f+=p}d<e.length&&c.push(e.substring(d,e.length));return c}async extractTextContent(e,t,a){await super.extractTextContent(e,t,a);const r=this.data.textContent;if(!r)return;const i=r.join("\\n");if(i===\ -this.data.fieldValue)return;const n=i.replaceAll(/([.*+?^${}()|[\\]\\\\])|(\\s+)/g,((e,t)=>t?`\\\\${t}`:"\\\\s+"));new RegExp(`^\\\\s*${n}\\\\s*$`).test(this.data.fieldValue)&&(this.data.textContent=this.data.fieldValue.split("\\n"))}getFieldObject(){return{id:this.data.id,value:this.data.fieldValue,defaultValue:this.data.defaultFieldValue||"",multiline:this.data.multiLine,password:this.data.password,charLimit:this.data.maxLen,comb:this.data.comb,editable:!this.data.readOnly,hidden:this.data.hidden,name:this\ -.data.fieldName,rect:this.data.rect,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,datetimeFormat:this.data.datetimeFormat,hasDatetimeHTML:!!this.data.datetimeType,type:"text"}}}class ButtonWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);this.checkedAppearance=null;this.uncheckedAppearance=null;const t=this.hasFieldFlag(se),a=this.hasFieldFlag(oe);this.data.checkBox=!t&&!a;this.data\ -.radioButton=t&&!a;this.data.pushButton=a;this.data.isTooltipOnly=!1;if(this.data.checkBox)this._processCheckBox(e);else if(this.data.radioButton)this._processRadioButton(e);else if(this.data.pushButton){this.data.hasOwnCanvas=!0;this.data.noHTML=!1;this._processPushButton(e)}else warn("Invalid field flags for button widget annotation")}async getOperatorList(e,t,a,r){if(this.data.pushButton)return super.getOperatorList(e,t,a,!1,r);let i=null,n=null;if(r){const e=r.get(this.data.id);i=e?e.value:n\ -ull;n=e?e.rotation:null}if(null===i&&this.appearance)return super.getOperatorList(e,t,a,r);null==i&&(i=this.data.checkBox?this.data.fieldValue===this.data.exportValue:this.data.fieldValue===this.data.buttonValue);const s=i?this.checkedAppearance:this.uncheckedAppearance;if(s){const i=this.appearance,o=lookupMatrix(s.dict.getArray("Matrix"),Fa);n&&s.dict.set("Matrix",this.getRotationMatrix(r));this.appearance=s;const c=super.getOperatorList(e,t,a,r);this.appearance=i;s.dict.set("Matrix",o);return\ - c}return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}async save(e,t,a,r){this.data.checkBox?this._saveCheckbox(e,t,a,r):this.data.radioButton&&this._saveRadioButton(e,t,a,r)}async _saveCheckbox(e,t,a,r){if(!a)return;const i=a.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.rotation,o=i?.value;if(void 0===s&&void 0===n){if(void 0===o)return;if(this.data.fieldValue===this.data.exportValue===o)return}let c=e.xref.fetchIfRef(this.ref);if(!(c instanceof Dict))retur\ -n;c=c.clone();void 0===s&&(s=this.rotation);void 0===o&&(o=this.data.fieldValue===this.data.exportValue);const l={path:this.data.fieldName,value:o?this.data.exportValue:""},h=Name.get(o?this.data.exportValue:"Off");this.setValue(c,h,e.xref,r);c.set("AS",h);c.set("M",`D:${getModificationDate()}`);void 0!==n&&c.set("F",n);const u=this._getMKDict(s);u&&c.set("MK",u);r.put(this.ref,{data:c,xfa:l,needAppearances:!1})}async _saveRadioButton(e,t,a,r){if(!a)return;const i=a.get(this.data.id),n=this._bui\ -ldFlags(i?.noView,i?.noPrint);let s=i?.rotation,o=i?.value;if(void 0===s&&void 0===n){if(void 0===o)return;if(this.data.fieldValue===this.data.buttonValue===o)return}let c=e.xref.fetchIfRef(this.ref);if(!(c instanceof Dict))return;c=c.clone();void 0===o&&(o=this.data.fieldValue===this.data.buttonValue);void 0===s&&(s=this.rotation);const l={path:this.data.fieldName,value:o?this.data.buttonValue:""},h=Name.get(o?this.data.buttonValue:"Off");o&&this.setValue(c,h,e.xref,r);c.set("AS",h);c.set("M",`\ -D:${getModificationDate()}`);void 0!==n&&c.set("F",n);const u=this._getMKDict(s);u&&c.set("MK",u);r.put(this.ref,{data:c,xfa:l,needAppearances:!1})}_getDefaultCheckedAppearance(e,t){const{width:a,height:r}=this,i=[0,0,a,r],n=.8*Math.min(a,r);let s,o;if("check"===t){s={width:.755*n,height:.705*n};o="3"}else if("disc"===t){s={width:.791*n,height:.705*n};o="l"}else unreachable(`_getDefaultCheckedAppearance - unsupported type: ${t}`);const c=`q BT /PdfJsZaDb ${n} Tf 0 g ${numberToString((a-s.width)/\ -2)} ${numberToString((r-s.height)/2)} Td (${o}) Tj ET Q`,l=new Dict(e.xref);l.set("FormType",1);l.setIfName("Subtype","Form");l.setIfName("Type","XObject");l.set("BBox",i);l.set("Matrix",[1,0,0,1,0,0]);l.set("Length",c.length);const h=new Dict(e.xref),u=new Dict(e.xref);u.set("PdfJsZaDb",this.fallbackFontDict);h.set("Font",u);l.set("Resources",h);this.checkedAppearance=new StringStream(c);this.checkedAppearance.dict=l;this._streams.push(this.checkedAppearance)}_processCheckBox(e){const t=e.dict.\ -get("AP");if(!(t instanceof Dict))return;const a=t.get("N");if(!(a instanceof Dict))return;const r=this._decodeFormValue(e.dict.get("AS"));"string"==typeof r&&(this.data.fieldValue=r);const i=null!==this.data.fieldValue&&"Off"!==this.data.fieldValue?this.data.fieldValue:"Yes",n=this._decodeFormValue(a.getKeys());if(0===n.length)n.push("Off",i);else if(1===n.length)"Off"===n[0]?n.push(i):n.unshift("Off");else if(n.includes(i)){n.length=0;n.push("Off",i)}else{const e=n.find((e=>"Off"!==e));n.lengt\ -h=0;n.push("Off",e)}n.includes(this.data.fieldValue)||(this.data.fieldValue="Off");this.data.exportValue=n[1];const s=a.get(this.data.exportValue);this.checkedAppearance=s instanceof BaseStream?s:null;const o=a.get("Off");this.uncheckedAppearance=o instanceof BaseStream?o:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"check");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFont\ -Dict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processRadioButton(e){this.data.buttonValue=null;const t=e.dict.get("Parent");if(t instanceof Dict){this.parent=e.dict.getRaw("Parent");const a=t.get("V");a instanceof Name&&(this.data.fieldValue=this._decodeFormValue(a))}const a=e.dict.get("AP");if(!(a instanceof Dict))return;const r=a.get("N");if(!(r instanceof Dict))return;for(const e of r.getKeys())if("Off"!==e){this.data.buttonValue=this._decodeFormValue(e);break}\ -const i=r.get(this.data.buttonValue);this.checkedAppearance=i instanceof BaseStream?i:null;const n=r.get("Off");this.uncheckedAppearance=n instanceof BaseStream?n:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"disc");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processPushButton(e){const{dict:t\ -,annotationGlobals:a}=e;if(t.has("A")||t.has("AA")||this.data.alternativeText){this.data.isTooltipOnly=!t.has("A")&&!t.has("AA");Catalog.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:a.baseUrl,docAttachments:a.attachments})}else warn("Push buttons without action dictionaries are not supported")}getFieldObject(){let e,t="button";if(this.data.checkBox){t="checkbox";e=this.data.exportValue}else if(this.data.radioButton){t="radiobutton";e=this.data.buttonValue}return{id:this.data.id\ -,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:e,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:t}}get fallbackFontDict(){const e=new Dict;e.setIfName("BaseFont","ZapfDingbats");e.setIfName("Type","FallbackType");e.setIfName("Subtype","FallbackType");e.setIf\ -Name("Encoding","ZapfDingbatsEncoding");return shadow(this,"fallbackFontDict",e)}}class ChoiceWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.indices=t.getArray("I");this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0;this.data.options=[];const r=getInheritableProperty({dict:t,key:"Opt"});if(Array.isArray(r))for(let e=0,t=r.length;e<t;e++){const t=a.fetchIfRef(r[e]),i=Array.isArray(t);this.data.options[e]={exportValue:this._decodeFormV\ -alue(i?a.fetchIfRef(t[0]):t),displayValue:this._decodeFormValue(i?a.fetchIfRef(t[1]):t)}}if(this.hasIndices){this.data.fieldValue=[];const e=this.data.options.length;for(const t of this.indices)Number.isInteger(t)&&t>=0&&t<e&&this.data.fieldValue.push(this.data.options[t].exportValue)}else"string"==typeof this.data.fieldValue?this.data.fieldValue=[this.data.fieldValue]:this.data.fieldValue||=[];0===this.data.options.length&&this.data.fieldValue.length>0&&(this.data.options=this.data.fieldValue.m\ -ap((e=>({exportValue:e,displayValue:e}))));this.data.combo=this.hasFieldFlag(ce);this.data.multiSelect=this.hasFieldFlag(he);this._hasText=!0}getFieldObject(){const e=this.data.combo?"combobox":"listbox",t=this.data.fieldValue.length>0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.\ -data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}amendSavedDict(e,t){if(!this.hasIndices)return;let a=e?.get(this.data.id)?.value;Array.isArray(a)||(a=[a]);const r=[],{options:i}=this.data;for(let e=0,t=0,n=i.length;e<n;e++)if(i[e].exportValue===a[t]){r.push(e);t+=1}t.set("I",r)}async _getAppearance(e,t,r,i){if(this.data.combo)return super._getAppearance(e,t,\ -r,i);let n,s;const o=i?.get(this.data.id);if(o){s=o.rotation;n=o.value}if(void 0===s&&void 0===n&&!this._needAppearances)return null;void 0===n?n=this.data.fieldValue:Array.isArray(n)||(n=[n]);let{width:c,height:l}=this;90!==s&&270!==s||([c,l]=[l,c]);const h=this.data.options.length,u=[];for(let e=0;e<h;e++){const{exportValue:t}=this.data.options[e];n.includes(t)&&u.push(e)}this._defaultAppearance||(this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0\ - g"));const d=await WidgetAnnotation._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);let f,{fontSize:g}=this.data.defaultAppearanceData;if(g)f=this._defaultAppearance;else{const e=(l-1)/h;let t,a=-1;for(const{displayValue:e}of this.data.options){const r=this._getTextWidth(e,d);if(r>a){a=r;t=e}}[f,g]=this._computeFontSize(e,c-4,t,d,-1)}const p=g*a,m=(p-g)/2,b=Math.floor(l/p);let y=0;if(u.length>0){const e=Math.min(...u),t=Math.max(...u);y=Math.max(0,t-b+1);y\ ->e&&(y=e)}const w=Math.min(y+b+1,h),x=["/Tx BMC q",`1 1 ${c} ${l} re W n`];if(u.length){x.push("0.600006 0.756866 0.854904 rg");for(const e of u)y<=e&&e<w&&x.push(`1 ${l-(e-y+1)*p} ${c} ${p} re f`)}x.push("BT",f,`1 0 0 1 0 ${l} Tm`);const S={shift:0};for(let e=y;e<w;e++){const{displayValue:t}=this.data.options[e],a=e===y?m:0;x.push(this._renderText(t,d,g,c,0,S,2,-p+a))}x.push("ET Q EMC");return x.join("\\n")}}class SignatureWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);this.da\ -ta.fieldValue=null;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!this.data.hasOwnCanvas}getFieldObject(){return{id:this.data.id,value:null,page:this.data.pageIndex,type:"signature"}}}class TextAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.noRotate=!0;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;const{dict:t}=e;this.data.annotationType=F;if(this.data.hasAppearance)this.data.name="NoIcon";else{this.data.rect[1]=this.data.rect[3]-22;this.data.r\ -ect[2]=this.data.rect[0]+22;this.data.name=t.has("Name")?t.get("Name").name:"Note"}if(t.has("State")){this.data.state=t.get("State")||null;this.data.stateModel=t.get("StateModel")||null}else{this.data.state=null;this.data.stateModel=null}}}class LinkAnnotation extends Annotation{constructor(e){super(e);const{dict:t,annotationGlobals:a}=e;this.data.annotationType=T;this.data.noHTML=!1;const r=getQuadPoints(t,this.rectangle);r&&(this.data.quadPoints=r);this.data.borderColor||=this.data.color;Catal\ -og.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:a.baseUrl,docAttachments:a.attachments})}get overlaysTextContent(){return!0}}class PopupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;this.data.annotationType=W;this.data.noHTML=!1;0!==this.width&&0!==this.height||(this.data.rect=null);let a=t.get("Parent");if(!a){warn("Popup annotation has a missing or invalid parent annotation.");return}this.data.parentRect=lookupNormalRect(a.getArray("Rect"),null);this.d\ -ata.creationDate=a.get("CreationDate")||"";isName(a.get("RT"),G)&&(a=a.get("IRT"));if(a.has("M")){this.setModificationDate(a.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;if(a.has("C")){this.setColor(a.getArray("C"));this.data.color=this.color}else this.data.color=null;if(!this.viewable){const e=a.get("F");this._isViewable(e)&&this.setFlags(e)}this.setTitle(a.get("T"));this.data.titleObj=this._title;this.setContents(a.get("Contents"));this.data.c\ -ontentsObj=this._contents;a.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(a.get("RC")));this.data.open=!!t.get("Open")}static createNewDict(e,t,a){const{oldAnnotation:r,rect:i,parent:n}=e,s=r||new Dict(t);s.setIfNotExists("Type",Name.get("Annot"));s.setIfNotExists("Subtype",Name.get("Popup"));s.setIfNotExists("Open",!1);s.setIfArray("Rect",i);s.set("Parent",n);return s}static async createNewAppearanceStream(e,t,a){return null}}class FreeTextAnnotation extends MarkupAnnotation{const\ -ructor(e){super(e);this.data.hasOwnCanvas=this.data.noRotate;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1;const{annotationGlobals:t,evaluatorOptions:a,xref:r}=e;this.data.annotationType=O;this.setDefaultAppearance(e);this._hasAppearance=!!this.appearance;if(this._hasAppearance){const{fontColor:e,fontSize:i}=function parseAppearanceStream(e,t,a,r){return new AppearanceStreamEvaluator(e,t,a,r).parse()}(this.appearance,a,r,t.globalColorSpaceCache);this.data.defaultAppearanceData.fontC\ -olor=e;this.data.defaultAppearanceData.fontSize=i||10}else{this.data.defaultAppearanceData.fontSize||=10;const{fontColor:t,fontSize:a}=this.data.defaultAppearanceData;if(this._contents.str){this.data.textContent=this._contents.str.split(/\\r\\n?|\\n/).map((e=>e.trimEnd()));const{coords:e,bbox:t,matrix:r}=FakeUnicodeFont.getFirstPositionInfo(this.rectangle,this.rotation,a);this.data.textPosition=this._transformPoint(e,t,r)}if(this._isOffscreenCanvasSupported){const i=e.dict.get("CA"),n=new FakeUnico\ -deFont(r,"sans-serif");this.appearance=n.createAppearance(this._contents.str,this.rectangle,this.rotation,a,t,i);this._streams.push(this.appearance)}else warn("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(e,t,{apRef:a,ap:r}){const{color:i,date:n,fontSize:s,oldAnnotation:o,rect:c,rotation:l,user:h,value:u}=e,d=o||new Dict(t);d.setIfNotExists("Type",Name.get("Annot"));d.setIfNotExi\ -sts("Subtype",Name.get("FreeText"));d.set(o?"M":"CreationDate",`D:${getModificationDate(n)}`);o&&d.delete("RC");d.setIfArray("Rect",c);const f=`/Helv ${s} Tf ${getPdfColor(i,!0)}`;d.set("DA",f);d.setIfDefined("Contents",stringToAsciiOrUTF16BE(u));d.setIfNotExists("F",4);d.setIfNotExists("Border",[0,0,0]);d.setIfNumber("Rotate",l);d.setIfDefined("T",stringToAsciiOrUTF16BE(h));if(a||r){const e=new Dict(t);d.set("AP",e);e.set("N",a||r)}return d}static async createNewAppearanceStream(e,t,r){const{ba\ -seFontRef:i,evaluator:n,task:s}=r,{color:o,fontSize:c,rect:l,rotation:h,value:u}=e;if(!o)return null;const d=new Dict(t),f=new Dict(t);if(i)f.set("Helv",i);else{const e=new Dict(t);e.setIfName("BaseFont","Helvetica");e.setIfName("Type","Font");e.setIfName("Subtype","Type1");e.setIfName("Encoding","WinAnsiEncoding");f.set("Helv",e)}d.set("Font",f);const g=await WidgetAnnotation._getFontData(n,s,{fontName:"Helv",fontSize:c},d),[p,m,b,y]=l;let w=b-p,x=y-m;h%180!=0&&([w,x]=[x,w]);const S=u.split("\\n\ -"),k=c/1e3;let C=-1/0;const v=[];for(let e of S){const t=g.encodeString(e);if(t.length>1)return null;e=t.join("");v.push(e);let a=0;const r=g.charsToGlyphs(e);for(const e of r)a+=e.width*k;C=Math.max(C,a)}let F=1;C>w&&(F=w/C);let T=1;const O=a*c,M=1*c,D=O*S.length;D>x&&(T=x/D);const R=c*Math.min(F,T);let N,E,L;switch(h){case 0:L=[1,0,0,1];E=[l[0],l[1],w,x];N=[l[0],l[3]-M];break;case 90:L=[0,1,-1,0];E=[l[1],-l[2],w,x];N=[l[1],-l[0]-M];break;case 180:L=[-1,0,0,-1];E=[-l[2],-l[3],w,x];N=[-l[2],-l[1\ -]-M];break;case 270:L=[0,-1,1,0];E=[-l[3],l[0],w,x];N=[-l[3],l[2]-M]}const j=["q",`${L.join(" ")} 0 0 cm`,`${E.join(" ")} re W n`,"BT",`${getPdfColor(o,!0)}`,`0 Tc /Helv ${numberToString(R)} Tf`];j.push(`${N.join(" ")} Td (${escapeString(v[0])}) Tj`);const _=numberToString(O);for(let e=1,t=v.length;e<t;e++){const t=v[e];j.push(`0 -${_} Td (${escapeString(t)}) Tj`)}j.push("ET","Q");const U=j.join("\\n"),X=new Dict(t);X.set("FormType",1);X.setIfName("Subtype","Form");X.setIfName("Type","XObject");X\ -.set("BBox",l);X.set("Resources",d);X.set("Matrix",[1,0,0,1,-l[0],-l[1]]);const q=new StringStream(U);q.dict=X;return q}}class LineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=M;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;const r=lookupRect(t.getArray("L"),[0,0,0,0]);this.data.lineCoordinates=Util.normalizeRect(r);this.setLineEndings(t.getArray("LE"));this.data.lineEndings=this.lineEndings;if(!this.appearance){const\ - e=getPdfColorArray(this.color,[0,0,0]),i=t.get("CA"),n=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),s=n?i:null,o=this.borderStyle.width||1,c=2*o,l=[this.data.lineCoordinates[0]-c,this.data.lineCoordinates[1]-c,this.data.lineCoordinates[2]+c,this.data.lineCoordinates[3]+c];Util.intersect(this.rectangle,l)||(this.rectangle=l);this._setDefaultAppearance({xref:a,extra:`${o} w`,strokeColor:e,fillColor:n,strokeAlpha:i,fillAlpha:s,pointsCallback:(e,t)=>{e.push(`${r[0]} ${r[1]} m`,`${r[2]} ${r[\ -3]} l`,"S");return[t[0]-o,t[7]-o,t[2]+o,t[3]+o]}})}}}class SquareAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=D;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA"),i=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),n=i?r:null;if(0===this.borderStyle.width&&!i)return;this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strok\ -eColor:e,fillColor:i,strokeAlpha:r,fillAlpha:n,pointsCallback:(e,t)=>{const a=t[4]+this.borderStyle.width/2,r=t[5]+this.borderStyle.width/2,n=t[6]-t[4]-this.borderStyle.width,s=t[3]-t[7]-this.borderStyle.width;e.push(`${a} ${r} ${n} ${s} re`);i?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class CircleAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=R;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("C\ -A"),i=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),n=i?r:null;if(0===this.borderStyle.width&&!i)return;const s=4/3*Math.tan(Math.PI/8);this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:i,strokeAlpha:r,fillAlpha:n,pointsCallback:(e,t)=>{const a=t[0]+this.borderStyle.width/2,r=t[1]-this.borderStyle.width/2,n=t[6]-this.borderStyle.width/2,o=t[7]+this.borderStyle.width/2,c=a+(n-a)/2,l=r+(o-r)/2,h=(n-a)/2*s,u=(o-r)/2*s;e.push(`${c} ${o} m`,`${c+h} \ -${o} ${n} ${l+u} ${n} ${l} c`,`${n} ${l-u} ${c+h} ${r} ${c} ${r} c`,`${c-h} ${r} ${a} ${l-u} ${a} ${l} c`,`${a} ${l+u} ${c-h} ${o} ${c} ${o} c`,"h");i?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class PolylineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=E;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.vertices=null;if(!(this instanceof PolygonAnnotation)){this.setLineEndings(t.getArray("LE"));thi\ -s.data.lineEndings=this.lineEndings}const r=t.getArray("Vertices");if(!isNumberArray(r,null))return;const i=this.data.vertices=Float32Array.from(r);if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA");let n,s=getRgbColor(t.getArray("IC"),null);s&&(s=getPdfColorArray(s));n=s?this.color?s.every(((t,a)=>t===e[a]))?"f":"B":"f":"S";const o=this.borderStyle.width||1,c=2*o,l=[1/0,1/0,-1/0,-1/0];for(let e=0,t=i.length;e<t;e+=2)Util.rectBoundingBox(i[e]-c,i[e+1]-c,i[e]+c,i[e+1]\ -+c,l);Util.intersect(this.rectangle,l)||(this.rectangle=l);this._setDefaultAppearance({xref:a,extra:`${o} w`,strokeColor:e,strokeAlpha:r,fillColor:s,fillAlpha:s?r:null,pointsCallback:(e,t)=>{for(let t=0,a=i.length;t<a;t+=2)e.push(`${i[t]} ${i[t+1]} ${0===t?"m":"l"}`);e.push(n);return[t[0],t[7],t[2],t[3]]}})}}}class PolygonAnnotation extends PolylineAnnotation{constructor(e){super(e);this.data.annotationType=N}}class CaretAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.annot\ -ationType=q}}class InkAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;const{dict:t,xref:a}=e;this.data.annotationType=H;this.data.inkLists=[];this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1;this.data.opacity=t.get("CA")||1;const r=t.getArray("InkList");if(Array.isArray(r)){for(let e=0,t=r.length;e<t;++e){if(!Array.isArray(r[e]))continue;const t=new Float32Array(r[e].length);this.data.inkLists.push(t);for(let i=0\ -,n=r[e].length;i<n;i+=2){const n=a.fetchIfRef(r[e][i]),s=a.fetchIfRef(r[e][i+1]);if("number"==typeof n&&"number"==typeof s){t[i]=n;t[i+1]=s}}}if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA"),i=this.borderStyle.width||1,n=2*i,s=[1/0,1/0,-1/0,-1/0];for(const e of this.data.inkLists)for(let t=0,a=e.length;t<a;t+=2)Util.rectBoundingBox(e[t]-n,e[t+1]-n,e[t]+n,e[t+1]+n,s);Util.intersect(this.rectangle,s)||(this.rectangle=s);this._setDefaultAppearance({xref:a,extra:`${i} \ -w`,strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{for(const t of this.data.inkLists){for(let a=0,r=t.length;a<r;a+=2)e.push(`${t[a]} ${t[a+1]} ${0===a?"m":"l"}`);e.push("S")}return[t[0],t[7],t[2],t[3]]}})}}}static createNewDict(e,t,{apRef:a,ap:r}){const{oldAnnotation:i,color:n,date:s,opacity:o,paths:c,outlines:l,rect:h,rotation:u,thickness:d,user:f}=e,g=i||new Dict(t);g.setIfNotExists("Type",Name.get("Annot"));g.setIfNotExists("Subtype",Name.get("Ink"));g.set(i?"M":"CreationDate",`D:${getMod\ -ificationDate(s)}`);g.setIfArray("Rect",h);g.setIfArray("InkList",l?.points||c?.points);g.setIfNotExists("F",4);g.setIfNumber("Rotate",u);g.setIfDefined("T",stringToAsciiOrUTF16BE(f));l&&g.setIfName("IT","InkHighlight");if(d>0){const e=new Dict(t);g.set("BS",e);e.set("W",d)}g.setIfArray("C",getPdfColorArray(n));g.setIfNumber("CA",o);if(r||a){const e=new Dict(t);g.set("AP",e);e.set("N",a||r)}return g}static async createNewAppearanceStream(e,t,a){if(e.outlines)return this.createNewAppearanceStream\ -ForHighlight(e,t,a);const{color:r,rect:i,paths:n,thickness:s,opacity:o}=e;if(!r)return null;const c=[`${s} w 1 J 1 j`,`${getPdfColor(r,!1)}`];1!==o&&c.push("/R0 gs");for(const e of n.lines){c.push(`${numberToString(e[4])} ${numberToString(e[5])} m`);for(let t=6,a=e.length;t<a;t+=6)if(isNaN(e[t]))c.push(`${numberToString(e[t+4])} ${numberToString(e[t+5])} l`);else{const[a,r,i,n,s,o]=e.slice(t,t+6);c.push([a,r,i,n,s,o].map(numberToString).join(" ")+" c")}6===e.length&&c.push(`${numberToString(e[4]\ -)} ${numberToString(e[5])} l`)}c.push("S");const l=c.join("\\n"),h=new Dict(t);h.set("FormType",1);h.setIfName("Subtype","Form");h.setIfName("Type","XObject");h.set("BBox",i);h.set("Length",l.length);if(1!==o){const e=new Dict(t),a=new Dict(t),r=new Dict(t);r.set("CA",o);r.setIfName("Type","ExtGState");a.set("R0",r);e.set("ExtGState",a);h.set("Resources",e)}const u=new StringStream(l);u.dict=h;return u}static async createNewAppearanceStreamForHighlight(e,t,a){const{color:r,rect:i,outlines:{outlin\ -e:n},opacity:s}=e;if(!r)return null;const o=[`${getPdfColor(r,!0)}`,"/R0 gs"];o.push(`${numberToString(n[4])} ${numberToString(n[5])} m`);for(let e=6,t=n.length;e<t;e+=6)if(isNaN(n[e]))o.push(`${numberToString(n[e+4])} ${numberToString(n[e+5])} l`);else{const[t,a,r,i,s,c]=n.slice(e,e+6);o.push([t,a,r,i,s,c].map(numberToString).join(" ")+" c")}o.push("h f");const c=o.join("\\n"),l=new Dict(t);l.set("FormType",1);l.setIfName("Subtype","Form");l.setIfName("Type","XObject");l.set("BBox",i);l.set("Len\ -gth",c.length);const h=new Dict(t),u=new Dict(t);h.set("ExtGState",u);l.set("Resources",h);const d=new Dict(t);u.set("R0",d);d.setIfName("BM","Multiply");if(1!==s){d.set("ca",s);d.setIfName("Type","ExtGState")}const f=new StringStream(c);f.dict=l;return f}}class HighlightAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=L;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1;this.data.opacity=t.get("CA")||1;if(this.data.quadPoints=ge\ -tQuadPoints(t,null)){const e=this.appearance?.dict.get("Resources");if(!this.appearance||!e?.has("ExtGState")){this.appearance&&warn("HighlightAnnotation - ignoring built-in appearance stream.");const e=getPdfColorArray(this.color,[1,1,0]),r=t.get("CA");this._setDefaultAppearance({xref:a,fillColor:e,blendMode:"Multiply",fillAlpha:r,pointsCallback:(e,t)=>{e.push(`${t[0]} ${t[1]} m`,`${t[2]} ${t[3]} l`,`${t[6]} ${t[7]} l`,`${t[4]} ${t[5]} l`,"f");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popu\ -pRef=null}get overlaysTextContent(){return!0}static createNewDict(e,t,{apRef:a,ap:r}){const{color:i,date:n,oldAnnotation:s,opacity:o,rect:c,rotation:l,user:h,quadPoints:u}=e,d=s||new Dict(t);d.setIfNotExists("Type",Name.get("Annot"));d.setIfNotExists("Subtype",Name.get("Highlight"));d.set(s?"M":"CreationDate",`D:${getModificationDate(n)}`);d.setIfArray("Rect",c);d.setIfNotExists("F",4);d.setIfNotExists("Border",[0,0,0]);d.setIfNumber("Rotate",l);d.setIfArray("QuadPoints",u);d.setIfArray("C",getP\ -dfColorArray(i));d.setIfNumber("CA",o);d.setIfDefined("T",stringToAsciiOrUTF16BE(h));if(a||r){const e=new Dict(t);d.set("AP",e);e.set("N",a||r)}return d}static async createNewAppearanceStream(e,t,a){const{color:r,rect:i,outlines:n,opacity:s}=e;if(!r)return null;const o=[`${getPdfColor(r,!0)}`,"/R0 gs"],c=[];for(const e of n){c.length=0;c.push(`${numberToString(e[0])} ${numberToString(e[1])} m`);for(let t=2,a=e.length;t<a;t+=2)c.push(`${numberToString(e[t])} ${numberToString(e[t+1])} l`);c.push("\ -h");o.push(c.join("\\n"))}o.push("f*");const l=o.join("\\n"),h=new Dict(t);h.set("FormType",1);h.setIfName("Subtype","Form");h.setIfName("Type","XObject");h.set("BBox",i);h.set("Length",l.length);const u=new Dict(t),d=new Dict(t);u.set("ExtGState",d);h.set("Resources",u);const f=new Dict(t);d.set("R0",f);f.setIfName("BM","Multiply");if(1!==s){f.set("ca",s);f.setIfName("Type","ExtGState")}const g=new StringStream(l);g.dict=h;return g}}class UnderlineAnnotation extends MarkupAnnotation{constructor(e\ -){super(e);const{dict:t,xref:a}=e;this.data.annotationType=j;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 0.571 w",strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{e.push(`${t[4]} ${t[5]+1.3} m`,`${t[6]} ${t[7]+1.3} l`,"S");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class SquigglyAnnotation extends MarkupAnnotat\ -ion{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=_;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{const a=(t[1]-t[5])/6;let r=a,i=t[4];const n=t[5],s=t[6];e.push(`${i} ${n+r} m`);do{i+=2;r=0===r?a:0;e.push(`${i} ${n+r} l`)}while(i<s);e.push("S");return[t[4],n-2*a,s,n+2*a]}})}}else this.d\ -ata.popupRef=null}get overlaysTextContent(){return!0}}class StrikeOutAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=U;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{e.push((t[0]+t[4])/2+" "+(t[1]+t[5])/2+" m",(t[2]+t[6])/2+" "+(t[3]+t[7])/2+" l","S");ret\ -urn[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class StampAnnotation extends MarkupAnnotation{#pe=null;constructor(e){super(e);this.data.annotationType=X;this.data.hasOwnCanvas=this.data.noRotate;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1}mustBeViewedWhenEditing(e,t=null){if(e){if(!this.data.isEditable)return!0;this.#pe??=this.data.hasOwnCanvas;this.data.hasOwnCanvas=!0;return!0}if(null!==this.#pe){this.data.hasOwnCanvas=this.#pe;thi\ -s.#pe=null}return!t?.has(this.data.id)}static async createImage(e,t){const{width:a,height:r}=e,i=new OffscreenCanvas(a,r),n=i.getContext("2d",{alpha:!0});n.drawImage(e,0,0);const s=n.getImageData(0,0,a,r).data,o=new Uint32Array(s.buffer),c=o.some(FeatureTest.isLittleEndian?e=>e>>>24!=255:e=>!!(255&~e));if(c){n.fillStyle="white";n.fillRect(0,0,a,r);n.drawImage(e,0,0)}const l=i.convertToBlob({type:"image/jpeg",quality:1}).then((e=>e.arrayBuffer())),h=Name.get("XObject"),u=Name.get("Image"),d=new D\ -ict(t);d.set("Type",h);d.set("Subtype",u);d.set("BitsPerComponent",8);d.setIfName("ColorSpace","DeviceRGB");d.setIfName("Filter","DCTDecode");d.set("BBox",[0,0,a,r]);d.set("Width",a);d.set("Height",r);let f=null;if(c){const e=new Uint8Array(o.length);if(FeatureTest.isLittleEndian)for(let t=0,a=o.length;t<a;t++)e[t]=o[t]>>>24;else for(let t=0,a=o.length;t<a;t++)e[t]=255&o[t];const i=new Dict(t);i.set("Type",h);i.set("Subtype",u);i.set("BitsPerComponent",8);i.setIfName("ColorSpace","DeviceGray");i\ -.set("Width",a);i.set("Height",r);f=new Stream(e,0,0,i)}return{imageStream:new Stream(await l,0,0,d),smaskStream:f,width:a,height:r}}static createNewDict(e,t,{apRef:a,ap:r}){const{date:i,oldAnnotation:n,rect:s,rotation:o,user:c}=e,l=n||new Dict(t);l.setIfNotExists("Type",Name.get("Annot"));l.setIfNotExists("Subtype",Name.get("Stamp"));l.set(n?"M":"CreationDate",`D:${getModificationDate(i)}`);l.setIfArray("Rect",s);l.setIfNotExists("F",4);l.setIfNotExists("Border",[0,0,0]);l.setIfNumber("Rotate",\ -o);l.setIfDefined("T",stringToAsciiOrUTF16BE(c));if(a||r){const e=new Dict(t);l.set("AP",e);e.set("N",a||r)}return l}static async#me(e,t){const{areContours:a,color:r,rect:i,lines:n,thickness:s}=e;if(!r)return null;const o=[`${s} w 1 J 1 j`,`${getPdfColor(r,a)}`];for(const e of n){o.push(`${numberToString(e[4])} ${numberToString(e[5])} m`);for(let t=6,a=e.length;t<a;t+=6)if(isNaN(e[t]))o.push(`${numberToString(e[t+4])} ${numberToString(e[t+5])} l`);else{const[a,r,i,n,s,c]=e.slice(t,t+6);o.push([a\ -,r,i,n,s,c].map(numberToString).join(" ")+" c")}6===e.length&&o.push(`${numberToString(e[4])} ${numberToString(e[5])} l`)}o.push(a?"F":"S");const c=o.join("\\n"),l=new Dict(t);l.set("FormType",1);l.setIfName("Subtype","Form");l.setIfName("Type","XObject");l.set("BBox",i);l.set("Length",c.length);const h=new StringStream(c);h.dict=l;return h}static async createNewAppearanceStream(e,t,a){if(e.oldAnnotation)return null;if(e.isSignature)return this.#me(e,t);const{rotation:r}=e,{imageRef:i,width:n,hei\ -ght:s}=a.image,o=new Dict(t),c=new Dict(t);o.set("XObject",c);c.set("Im0",i);const l=`q ${n} 0 0 ${s} 0 0 cm /Im0 Do Q`,h=new Dict(t);h.set("FormType",1);h.setIfName("Subtype","Form");h.setIfName("Type","XObject");h.set("BBox",[0,0,n,s]);h.set("Resources",o);if(r){const e=getRotationMatrix(r,n,s);h.set("Matrix",e)}const u=new StringStream(l);u.dict=h;return u}}class FileAttachmentAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e,r=new FileSpec(t.get("FS"),a);this\ -.data.annotationType=z;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.file=r.serializable;const i=t.get("Name");this.data.name=i instanceof Name?stringToPDFString(i.name):"PushPin";const n=t.get("ca");this.data.fillAlpha="number"==typeof n&&n>=0&&n<=1?n:null}}const pc={get r(){return shadow(this,"r",new Uint8Array([7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,\ -21,6,10,15,21]))},get k(){return shadow(this,"k",new Int32Array([-680876936,-389564586,606105819,-1044525330,-176418897,1200080426,-1473231341,-45705983,1770035416,-1958414417,-42063,-1990404162,1804603682,-40341101,-1502002290,1236535329,-165796510,-1069501632,643717713,-373897302,-701558691,38016083,-660478335,-405537848,568446438,-1019803690,-187363961,1163531501,-1444681467,-51403784,1735328473,-1926607734,-378558,-2022574463,1839030562,-35309556,-1530992060,1272893353,-155497632,-1094730640\ -,681279174,-358537222,-722521979,76029189,-640364487,-421815835,530742520,-995338651,-198630844,1126891415,-1416354905,-57434055,1700485571,-1894986606,-1051523,-2054922799,1873313359,-30611744,-1560198380,1309151649,-145523070,-1120210379,718787259,-343485551]))}};function calculateMD5(e,t,a){let r=1732584193,i=-271733879,n=-1732584194,s=271733878;const o=a+72&-64,c=new Uint8Array(o);let l,h;for(l=0;l<a;++l)c[l]=e[t++];c[l++]=128;const u=o-8;l<u&&(l=u);c[l++]=a<<3&255;c[l++]=a>>5&255;c[l++]=a>>\ -13&255;c[l++]=a>>21&255;c[l++]=a>>>29&255;l+=3;const d=new Int32Array(16),{k:f,r:g}=pc;for(l=0;l<o;){for(h=0;h<16;++h,l+=4)d[h]=c[l]|c[l+1]<<8|c[l+2]<<16|c[l+3]<<24;let e,t,a=r,o=i,u=n,p=s;for(h=0;h<64;++h){if(h<16){e=o&u|~o&p;t=h}else if(h<32){e=p&o|~p&u;t=5*h+1&15}else if(h<48){e=o^u^p;t=3*h+5&15}else{e=u^(o|~p);t=7*h&15}const r=p,i=a+e+f[h]+d[t]|0,n=g[h];p=u;u=o;o=o+(i<<n|i>>>32-n)|0;a=r}r=r+a|0;i=i+o|0;n=n+u|0;s=s+p|0}return new Uint8Array([255&r,r>>8&255,r>>16&255,r>>>24&255,255&i,i>>8&255,\ -i>>16&255,i>>>24&255,255&n,n>>8&255,n>>16&255,n>>>24&255,255&s,s>>8&255,s>>16&255,s>>>24&255])}function decodeString(e){try{return stringToUTF8String(e)}catch(t){warn(`UTF-8 decoding failed: "${t}".`);return e}}class DatasetXMLParser extends SimpleXMLParser{constructor(e){super(e);this.node=null}onEndElement(e){const t=super.onEndElement(e);if(t&&"xfa:datasets"===e){this.node=t;throw new Error("Aborting DatasetXMLParser.")}}}class DatasetReader{constructor(e){if(e.datasets)this.node=new SimpleXM\ -LParser({hasAttributes:!0}).parseFromString(e.datasets).documentElement;else{const t=new DatasetXMLParser({hasAttributes:!0});try{t.parseFromString(e["xdp:xdp"])}catch{}this.node=t.node}}getValue(e){if(!this.node||!e)return"";const t=this.node.searchNode(parseXFAPath(e),0);if(!t)return"";const a=t.firstChild;return"value"===a?.nodeName?t.children.map((e=>decodeString(e.textContent))):decodeString(t.textContent)}}class SingleIntersector{#be;#ye=1/0;#we=1/0;#xe=-1/0;#Se=-1/0;#Ae=null;#ke=[];#Ce=[]\ -;#ve=-1;#Fe=!1;constructor(e){this.#be=e;const t=e.data.quadPoints;if(t){for(let e=0,a=t.length;e<a;e+=8){this.#ye=Math.min(this.#ye,t[e]);this.#xe=Math.max(this.#xe,t[e+2]);this.#we=Math.min(this.#we,t[e+5]);this.#Se=Math.max(this.#Se,t[e+1])}t.length>8&&(this.#Ae=t)}else[this.#ye,this.#we,this.#xe,this.#Se]=e.data.rect}overlaps(e){return!(this.#ye>=e.#xe||this.#xe<=e.#ye||this.#we>=e.#Se||this.#Se<=e.#we)}#Ie(e,t){if(this.#ye>=e||this.#xe<=e||this.#we>=t||this.#Se<=t)return!1;const a=this.#Ae;\ -if(!a)return!0;if(this.#ve>=0){const r=this.#ve;if(!(a[r]>=e||a[r+2]<=e||a[r+5]>=t||a[r+1]<=t))return!0;this.#ve=-1}for(let r=0,i=a.length;r<i;r+=8)if(!(a[r]>=e||a[r+2]<=e||a[r+5]>=t||a[r+1]<=t)){this.#ve=r;return!0}return!1}addGlyph(e,t,a){if(!this.#Ie(e,t)){this.disableExtraChars();return!1}if(this.#Ce.length>0){this.#ke.push(this.#Ce.join(""));this.#Ce.length=0}this.#ke.push(a);this.#Fe=!0;return!0}addExtraChar(e){this.#Fe&&this.#Ce.push(e)}disableExtraChars(){if(this.#Fe){this.#Fe=!1;this.#C\ -e.length=0}}setText(){this.#be.data.overlaidText=this.#ke.join("")}}class Intersector{#Te=new Map;constructor(e){for(const t of e){if(!t.data.quadPoints&&!t.data.rect)continue;const e=new SingleIntersector(t);for(const[t,a]of this.#Te)t.overlaps(e)&&(a?a.add(e):this.#Te.set(t,new Set([e])));this.#Te.set(e,null)}}addGlyph(e,t,a,r){const i=e[4]+t/2,n=e[5]+a/2;let s;for(const[e,t]of this.#Te)s?s.has(e)?e.addGlyph(i,n,r):e.disableExtraChars():e.addGlyph(i,n,r)&&(s=t)}addExtraChar(e){for(const t of t\ -his.#Te.keys())t.addExtraChar(e)}setText(){for(const e of this.#Te.keys())e.setText()}}class Word64{constructor(e,t){this.high=0|e;this.low=0|t}and(e){this.high&=e.high;this.low&=e.low}xor(e){this.high^=e.high;this.low^=e.low}shiftRight(e){if(e>=32){this.low=this.high>>>e-32|0;this.high=0}else{this.low=this.low>>>e|this.high<<32-e;this.high=this.high>>>e|0}}rotateRight(e){let t,a;if(32&e){a=this.low;t=this.high}else{t=this.low;a=this.high}e&=31;this.low=t>>>e|a<<32-e;this.high=a>>>e|t<<32-e}not(\ -){this.high=~this.high;this.low=~this.low}add(e){const t=(this.low>>>0)+(e.low>>>0);let a=(this.high>>>0)+(e.high>>>0);t>4294967295&&(a+=1);this.low=0|t;this.high=0|a}copyTo(e,t){e[t]=this.high>>>24&255;e[t+1]=this.high>>16&255;e[t+2]=this.high>>8&255;e[t+3]=255&this.high;e[t+4]=this.low>>>24&255;e[t+5]=this.low>>16&255;e[t+6]=this.low>>8&255;e[t+7]=255&this.low}assign(e){this.high=e.high;this.low=e.low}}const mc={get k(){return shadow(this,"k",[new Word64(1116352408,3609767458),new Word64(18994\ -47441,602891725),new Word64(3049323471,3964484399),new Word64(3921009573,2173295548),new Word64(961987163,4081628472),new Word64(1508970993,3053834265),new Word64(2453635748,2937671579),new Word64(2870763221,3664609560),new Word64(3624381080,2734883394),new Word64(310598401,1164996542),new Word64(607225278,1323610764),new Word64(1426881987,3590304994),new Word64(1925078388,4068182383),new Word64(2162078206,991336113),new Word64(2614888103,633803317),new Word64(3248222580,3479774868),new Word64(3\ -835390401,2666613458),new Word64(4022224774,944711139),new Word64(264347078,2341262773),new Word64(604807628,2007800933),new Word64(770255983,1495990901),new Word64(1249150122,1856431235),new Word64(1555081692,3175218132),new Word64(1996064986,2198950837),new Word64(2554220882,3999719339),new Word64(2821834349,766784016),new Word64(2952996808,2566594879),new Word64(3210313671,3203337956),new Word64(3336571891,1034457026),new Word64(3584528711,2466948901),new Word64(113926993,3758326383),new Word\ -64(338241895,168717936),new Word64(666307205,1188179964),new Word64(773529912,1546045734),new Word64(1294757372,1522805485),new Word64(1396182291,2643833823),new Word64(1695183700,2343527390),new Word64(1986661051,1014477480),new Word64(2177026350,1206759142),new Word64(2456956037,344077627),new Word64(2730485921,1290863460),new Word64(2820302411,3158454273),new Word64(3259730800,3505952657),new Word64(3345764771,106217008),new Word64(3516065817,3606008344),new Word64(3600352804,1432725776),new \ -Word64(4094571909,1467031594),new Word64(275423344,851169720),new Word64(430227734,3100823752),new Word64(506948616,1363258195),new Word64(659060556,3750685593),new Word64(883997877,3785050280),new Word64(958139571,3318307427),new Word64(1322822218,3812723403),new Word64(1537002063,2003034995),new Word64(1747873779,3602036899),new Word64(1955562222,1575990012),new Word64(2024104815,1125592928),new Word64(2227730452,2716904306),new Word64(2361852424,442776044),new Word64(2428436474,593698344),new\ - Word64(2756734187,3733110249),new Word64(3204031479,2999351573),new Word64(3329325298,3815920427),new Word64(3391569614,3928383900),new Word64(3515267271,566280711),new Word64(3940187606,3454069534),new Word64(4118630271,4000239992),new Word64(116418474,1914138554),new Word64(174292421,2731055270),new Word64(289380356,3203993006),new Word64(460393269,320620315),new Word64(685471733,587496836),new Word64(852142971,1086792851),new Word64(1017036298,365543100),new Word64(1126000580,2618297676),new\ - Word64(1288033470,3409855158),new Word64(1501505948,4234509866),new Word64(1607167915,987167468),new Word64(1816402316,1246189591)])}};function ch(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.not();i.and(r);e.xor(i)}function maj(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.and(r);e.xor(i);i.assign(a);i.and(r);e.xor(i)}function sigma(e,t,a){e.assign(t);e.rotateRight(28);a.assign(t);a.rotateRight(34);e.xor(a);a.assign(t);a.rotateRight(39);e.xor(a)}function sigmaPrime(e,t,a){e.assign(t);e.rotate\ -Right(14);a.assign(t);a.rotateRight(18);e.xor(a);a.assign(t);a.rotateRight(41);e.xor(a)}function littleSigma(e,t,a){e.assign(t);e.rotateRight(1);a.assign(t);a.rotateRight(8);e.xor(a);a.assign(t);a.shiftRight(7);e.xor(a)}function littleSigmaPrime(e,t,a){e.assign(t);e.rotateRight(19);a.assign(t);a.rotateRight(61);e.xor(a);a.assign(t);a.shiftRight(6);e.xor(a)}function calculateSHA512(e,t,a,r=!1){let i,n,s,o,c,l,h,u;if(r){i=new Word64(3418070365,3238371032);n=new Word64(1654270250,914150663);s=new W\ -ord64(2438529370,812702999);o=new Word64(355462360,4144912697);c=new Word64(1731405415,4290775857);l=new Word64(2394180231,1750603025);h=new Word64(3675008525,1694076839);u=new Word64(1203062813,3204075428)}else{i=new Word64(1779033703,4089235720);n=new Word64(3144134277,2227873595);s=new Word64(1013904242,4271175723);o=new Word64(2773480762,1595750129);c=new Word64(1359893119,2917565137);l=new Word64(2600822924,725511199);h=new Word64(528734635,4215389547);u=new Word64(1541459225,327033209)}con\ -st d=128*Math.ceil((a+17)/128),f=new Uint8Array(d);let g,p;for(g=0;g<a;++g)f[g]=e[t++];f[g++]=128;const m=d-16;g<m&&(g=m);g+=11;f[g++]=a>>>29&255;f[g++]=a>>21&255;f[g++]=a>>13&255;f[g++]=a>>5&255;f[g++]=a<<3&255;const b=new Array(80);for(g=0;g<80;g++)b[g]=new Word64(0,0);const{k:y}=mc;let w=new Word64(0,0),x=new Word64(0,0),S=new Word64(0,0),k=new Word64(0,0),C=new Word64(0,0),v=new Word64(0,0),F=new Word64(0,0),T=new Word64(0,0);const O=new Word64(0,0),M=new Word64(0,0),D=new Word64(0,0),R=new \ -Word64(0,0);let N,E;for(g=0;g<d;){for(p=0;p<16;++p){b[p].high=f[g]<<24|f[g+1]<<16|f[g+2]<<8|f[g+3];b[p].low=f[g+4]<<24|f[g+5]<<16|f[g+6]<<8|f[g+7];g+=8}for(p=16;p<80;++p){N=b[p];littleSigmaPrime(N,b[p-2],R);N.add(b[p-7]);littleSigma(D,b[p-15],R);N.add(D);N.add(b[p-16])}w.assign(i);x.assign(n);S.assign(s);k.assign(o);C.assign(c);v.assign(l);F.assign(h);T.assign(u);for(p=0;p<80;++p){O.assign(T);sigmaPrime(D,C,R);O.add(D);ch(D,C,v,F,R);O.add(D);O.add(y[p]);O.add(b[p]);sigma(M,w,R);maj(D,w,x,S,R);M.\ -add(D);N=T;T=F;F=v;v=C;k.add(O);C=k;k=S;S=x;x=w;N.assign(O);N.add(M);w=N}i.add(w);n.add(x);s.add(S);o.add(k);c.add(C);l.add(v);h.add(F);u.add(T)}if(r){E=new Uint8Array(48);i.copyTo(E,0);n.copyTo(E,8);s.copyTo(E,16);o.copyTo(E,24);c.copyTo(E,32);l.copyTo(E,40)}else{E=new Uint8Array(64);i.copyTo(E,0);n.copyTo(E,8);s.copyTo(E,16);o.copyTo(E,24);c.copyTo(E,32);l.copyTo(E,40);h.copyTo(E,48);u.copyTo(E,56)}return E}const bc={get k(){return shadow(this,"k",[1116352408,1899447441,3049323471,3921009573,9\ -61987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,65906055\ -6,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298])}};function rotr(e,t){return e>>>t|e<<32-t}function calculate_sha256_ch(e,t,a){return e&t^~e&a}function calculate_sha256_maj(e,t,a){return e&t^e&a^t&a}function calculate_sha256_sigma(e){return rotr(e,2)^rotr(e,13)^rotr(e,22)}function calculate_sha256_sigmaPrime(e){return rotr(e,6)^rotr(e,11)^rotr(e,25)}function calculate_sha256_littleSigma(e){return rotr\ -(e,7)^rotr(e,18)^e>>>3}function calculateSHA256(e,t,a){let r=1779033703,i=3144134277,n=1013904242,s=2773480762,o=1359893119,c=2600822924,l=528734635,h=1541459225;const u=64*Math.ceil((a+9)/64),d=new Uint8Array(u);let f,g;for(f=0;f<a;++f)d[f]=e[t++];d[f++]=128;const p=u-8;f<p&&(f=p);f+=3;d[f++]=a>>>29&255;d[f++]=a>>21&255;d[f++]=a>>13&255;d[f++]=a>>5&255;d[f++]=a<<3&255;const m=new Uint32Array(64),{k:b}=bc;for(f=0;f<u;){for(g=0;g<16;++g){m[g]=d[f]<<24|d[f+1]<<16|d[f+2]<<8|d[f+3];f+=4}for(g=16;g<6\ -4;++g)m[g]=(rotr(y=m[g-2],17)^rotr(y,19)^y>>>10)+m[g-7]+calculate_sha256_littleSigma(m[g-15])+m[g-16]|0;let e,t,a=r,u=i,p=n,w=s,x=o,S=c,k=l,C=h;for(g=0;g<64;++g){e=C+calculate_sha256_sigmaPrime(x)+calculate_sha256_ch(x,S,k)+b[g]+m[g];t=calculate_sha256_sigma(a)+calculate_sha256_maj(a,u,p);C=k;k=S;S=x;x=w+e|0;w=p;p=u;u=a;a=e+t|0}r=r+a|0;i=i+u|0;n=n+p|0;s=s+w|0;o=o+x|0;c=c+S|0;l=l+k|0;h=h+C|0}var y;return new Uint8Array([r>>24&255,r>>16&255,r>>8&255,255&r,i>>24&255,i>>16&255,i>>8&255,255&i,n>>24&2\ -55,n>>16&255,n>>8&255,255&n,s>>24&255,s>>16&255,s>>8&255,255&s,o>>24&255,o>>16&255,o>>8&255,255&o,c>>24&255,c>>16&255,c>>8&255,255&c,l>>24&255,l>>16&255,l>>8&255,255&l,h>>24&255,h>>16&255,h>>8&255,255&h])}class DecryptStream extends DecodeStream{constructor(e,t,a){super(t);this.str=e;this.dict=e.dict;this.decrypt=a;this.nextChunk=null;this.initialized=!1}readBlock(){let e;if(this.initialized)e=this.nextChunk;else{e=this.str.getBytes(512);this.initialized=!0}if(!e?.length){this.eof=!0;return}this\ -.nextChunk=this.str.getBytes(512);const t=this.nextChunk?.length>0;e=(0,this.decrypt)(e,!t);const a=this.bufferLength,r=a+e.length;this.ensureBuffer(r).set(e,a);this.bufferLength=r}}class ARCFourCipher{constructor(e){this.a=0;this.b=0;const t=new Uint8Array(256),a=e.length;for(let e=0;e<256;++e)t[e]=e;for(let r=0,i=0;r<256;++r){const n=t[r];i=i+n+e[r%a]&255;t[r]=t[i];t[i]=n}this.s=t}encryptBlock(e){let t=this.a,a=this.b;const r=this.s,i=e.length,n=new Uint8Array(i);for(let s=0;s<i;++s){t=t+1&255\ -;const i=r[t];a=a+i&255;const o=r[a];r[t]=o;r[a]=i;n[s]=e[s]^r[i+o&255]}this.a=t;this.b=a;return n}decryptBlock(e){return this.encryptBlock(e)}encrypt(e){return this.encryptBlock(e)}}class NullCipher{decryptBlock(e){return e}encrypt(e){return e}}class AESBaseCipher{_s=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,2\ -26,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232\ -,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]);_inv_s=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93\ -,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,22\ -9,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]);_mix=new Uint32Array([0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,36\ -78124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178\ -062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,35\ -01741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,416\ -9408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,161\ -5861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795]);_mixCol=new Uint8Array(256).map(((e,t)=>t<128?t<<1:t<<1^27));constructor(){this.buffer=new U\ -int8Array(16);this.bufferPosition=0}_expandKey(e){unreachable("Cannot call `_expandKey` on the base class")}_decrypt(e,t){let a,r,i;const n=new Uint8Array(16);n.set(e);for(let e=0,a=this._keySize;e<16;++e,++a)n[e]^=t[a];for(let e=this._cyclesOfRepetition-1;e>=1;--e){a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e)n[e]=this._inv_s[n[e]];for(let a=0,r=16*e;a<16;++a,++r)n[a\ -]^=t[r];for(let e=0;e<16;e+=4){const t=this._mix[n[e]],r=this._mix[n[e+1]],i=this._mix[n[e+2]],s=this._mix[n[e+3]];a=t^r>>>8^r<<24^i>>>16^i<<16^s>>>24^s<<8;n[e]=a>>>24&255;n[e+1]=a>>16&255;n[e+2]=a>>8&255;n[e+3]=255&a}}a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e){n[e]=this._inv_s[n[e]];n[e]^=t[e]}return n}_encrypt(e,t){const a=this._s;let r,i,n;const s=new Uint8Array\ -(16);s.set(e);for(let e=0;e<16;++e)s[e]^=t[e];for(let e=1;e<this._cyclesOfRepetition;e++){for(let e=0;e<16;++e)s[e]=a[s[e]];n=s[1];s[1]=s[5];s[5]=s[9];s[9]=s[13];s[13]=n;n=s[2];i=s[6];s[2]=s[10];s[6]=s[14];s[10]=n;s[14]=i;n=s[3];i=s[7];r=s[11];s[3]=s[15];s[7]=n;s[11]=i;s[15]=r;for(let e=0;e<16;e+=4){const t=s[e],a=s[e+1],i=s[e+2],n=s[e+3];r=t^a^i^n;s[e]^=r^this._mixCol[t^a];s[e+1]^=r^this._mixCol[a^i];s[e+2]^=r^this._mixCol[i^n];s[e+3]^=r^this._mixCol[n^t]}for(let a=0,r=16*e;a<16;++a,++r)s[a]^=t\ -[r]}for(let e=0;e<16;++e)s[e]=a[s[e]];n=s[1];s[1]=s[5];s[5]=s[9];s[9]=s[13];s[13]=n;n=s[2];i=s[6];s[2]=s[10];s[6]=s[14];s[10]=n;s[14]=i;n=s[3];i=s[7];r=s[11];s[3]=s[15];s[7]=n;s[11]=i;s[15]=r;for(let e=0,a=this._keySize;e<16;++e,++a)s[e]^=t[a];return s}_decryptBlock2(e,t){const a=e.length;let r=this.buffer,i=this.bufferPosition;const n=[];let s=this.iv;for(let t=0;t<a;++t){r[i]=e[t];++i;if(i<16)continue;const a=this._decrypt(r,this._key);for(let e=0;e<16;++e)a[e]^=s[e];s=r;n.push(a);r=new Uint8A\ -rray(16);i=0}this.buffer=r;this.bufferLength=i;this.iv=s;if(0===n.length)return new Uint8Array(0);let o=16*n.length;if(t){const e=n.at(-1);let t=e[15];if(t<=16){for(let a=15,r=16-t;a>=r;--a)if(e[a]!==t){t=0;break}o-=t;n[n.length-1]=e.subarray(0,16-t)}}const c=new Uint8Array(o);for(let e=0,t=0,a=n.length;e<a;++e,t+=16)c.set(n[e],t);return c}decryptBlock(e,t,a=null){const r=e.length,i=this.buffer;let n=this.bufferPosition;if(a)this.iv=a;else{for(let t=0;n<16&&t<r;++t,++n)i[n]=e[t];if(n<16){this.bu\ -fferLength=n;return new Uint8Array(0)}this.iv=i;e=e.subarray(16)}this.buffer=new Uint8Array(16);this.bufferLength=0;this.decryptBlock=this._decryptBlock2;return this.decryptBlock(e,t)}encrypt(e,t){const a=e.length;let r=this.buffer,i=this.bufferPosition;const n=[];t||=new Uint8Array(16);for(let s=0;s<a;++s){r[i]=e[s];++i;if(i<16)continue;for(let e=0;e<16;++e)r[e]^=t[e];const a=this._encrypt(r,this._key);t=a;n.push(a);r=new Uint8Array(16);i=0}this.buffer=r;this.bufferLength=i;this.iv=t;if(0===n.l\ -ength)return new Uint8Array(0);const s=16*n.length,o=new Uint8Array(s);for(let e=0,t=0,a=n.length;e<a;++e,t+=16)o.set(n[e],t);return o}}class AES128Cipher extends AESBaseCipher{_rcon=new Uint8Array([141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,1\ -89,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179\ -,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141]);constructor(e){super();this._cyclesOfRepetition=10;this._keySize=160;this._key=this._expandKey(e)}_expandKey(e){const t=this._s,a=this._rcon,r=new Uint8Array(176);r.set(e);for(let e=16,i=1;e<176;++i){let n=r[e-3],s=r[e-2],o=r[e-1],c=r[e-4];n=t[n];s=t[s];o=t[o];c=t[c];n^=a[i];for(let t=0;t<4;++t){r[e]=n^=r[e-16];e++;r[e]=s^=r[e-16];e++;r[e]=o^=r[e-16];e++;r[e]=c^=r[e-16];e++}}return r}}class AES256\ -Cipher extends AESBaseCipher{constructor(e){super();this._cyclesOfRepetition=14;this._keySize=224;this._key=this._expandKey(e)}_expandKey(e){const t=this._s,a=new Uint8Array(240);a.set(e);let r,i,n,s,o=1;for(let e=32,c=1;e<240;++c){if(e%32==16){r=t[r];i=t[i];n=t[n];s=t[s]}else if(e%32==0){r=a[e-3];i=a[e-2];n=a[e-1];s=a[e-4];r=t[r];i=t[i];n=t[n];s=t[s];r^=o;(o<<=1)>=256&&(o=255&(27^o))}for(let t=0;t<4;++t){a[e]=r^=a[e-32];e++;a[e]=i^=a[e-32];e++;a[e]=n^=a[e-32];e++;a[e]=s^=a[e-32];e++}}return a}}\ -class PDFBase{_hash(e,t,a){unreachable("Abstract method `_hash` called")}checkOwnerPassword(e,t,a,r){const i=new Uint8Array(e.length+56);i.set(e,0);i.set(t,e.length);i.set(a,e.length+t.length);return isArrayEqual(this._hash(e,i,a),r)}checkUserPassword(e,t,a){const r=new Uint8Array(e.length+8);r.set(e,0);r.set(t,e.length);return isArrayEqual(this._hash(e,r,[]),a)}getOwnerKey(e,t,a,r){const i=new Uint8Array(e.length+56);i.set(e,0);i.set(t,e.length);i.set(a,e.length+t.length);const n=this._hash(e,i\ -,a);return new AES256Cipher(n).decryptBlock(r,!1,new Uint8Array(16))}getUserKey(e,t,a){const r=new Uint8Array(e.length+8);r.set(e,0);r.set(t,e.length);const i=this._hash(e,r,[]);return new AES256Cipher(i).decryptBlock(a,!1,new Uint8Array(16))}}class PDF17 extends PDFBase{_hash(e,t,a){return calculateSHA256(t,0,t.length)}}class PDF20 extends PDFBase{_hash(e,t,a){let r=calculateSHA256(t,0,t.length).subarray(0,32),i=[0],n=0;for(;n<64||i.at(-1)>n-32;){const t=e.length+r.length+a.length,l=new Uint8Ar\ -ray(t);let h=0;l.set(e,h);h+=e.length;l.set(r,h);h+=r.length;l.set(a,h);const u=new Uint8Array(64*t);for(let e=0,a=0;e<64;e++,a+=t)u.set(l,a);i=new AES128Cipher(r.subarray(0,16)).encrypt(u,r.subarray(16,32));const d=Math.sumPrecise(i.slice(0,16))%3;0===d?r=calculateSHA256(i,0,i.length):1===d?r=(s=i,o=0,c=i.length,calculateSHA512(s,o,c,!0)):2===d&&(r=calculateSHA512(i,0,i.length));n++}var s,o,c;return r.subarray(0,32)}}class CipherTransform{constructor(e,t){this.StringCipherConstructor=e;this.Str\ -eamCipherConstructor=t}createStream(e,t){const a=new this.StreamCipherConstructor;return new DecryptStream(e,t,(function cipherTransformDecryptStream(e,t){return a.decryptBlock(e,t)}))}decryptString(e){const t=new this.StringCipherConstructor;let a=stringToBytes(e);a=t.decryptBlock(a,!0);return bytesToString(a)}encryptString(e){const t=new this.StringCipherConstructor;if(t instanceof AESBaseCipher){const a=16-e.length%16;e+=String.fromCharCode(a).repeat(a);const r=new Uint8Array(16);crypto.getRa\ -ndomValues(r);let i=stringToBytes(e);i=t.encrypt(i,r);const n=new Uint8Array(16+i.length);n.set(r);n.set(i,16);return bytesToString(n)}let a=stringToBytes(e);a=t.encrypt(a);return bytesToString(a)}}class CipherTransformFactory{static get _defaultPasswordBytes(){return shadow(this,"_defaultPasswordBytes",new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]))}#Oe(e,t,a,r,i,n,s,o,c,l,h,u){if(t){const e=Math.min(127,t.length);t=t\ -.subarray(0,e)}else t=[];const d=6===e?new PDF20:new PDF17;return d.checkUserPassword(t,o,s)?d.getUserKey(t,c,h):t.length&&d.checkOwnerPassword(t,r,n,a)?d.getOwnerKey(t,i,n,l):null}#Me(e,t,a,r,i,n,s,o){const c=40+a.length+e.length,l=new Uint8Array(c);let h,u,d=0;if(t){u=Math.min(32,t.length);for(;d<u;++d)l[d]=t[d]}h=0;for(;d<32;)l[d++]=CipherTransformFactory._defaultPasswordBytes[h++];l.set(a,d);d+=a.length;l[d++]=255&i;l[d++]=i>>8&255;l[d++]=i>>16&255;l[d++]=i>>>24&255;l.set(e,d);d+=e.length;if\ -(n>=4&&!o){l.fill(255,d,d+4);d+=4}let f=calculateMD5(l,0,d);const g=s>>3;if(n>=3)for(h=0;h<50;++h)f=calculateMD5(f,0,g);const p=f.subarray(0,g);let m,b;if(n>=3){d=0;l.set(CipherTransformFactory._defaultPasswordBytes,d);d+=32;l.set(e,d);d+=e.length;m=new ARCFourCipher(p);b=m.encryptBlock(calculateMD5(l,0,d));u=p.length;const t=new Uint8Array(u);for(h=1;h<=19;++h){for(let e=0;e<u;++e)t[e]=p[e]^h;m=new ARCFourCipher(t);b=m.encryptBlock(b)}}else{m=new ARCFourCipher(p);b=m.encryptBlock(CipherTransfor\ -mFactory._defaultPasswordBytes)}return b.every(((e,t)=>r[t]===e))?p:null}#De(e,t,a,r){const i=new Uint8Array(32);let n=0;const s=Math.min(32,e.length);for(;n<s;++n)i[n]=e[n];let o=0;for(;n<32;)i[n++]=CipherTransformFactory._defaultPasswordBytes[o++];let c=calculateMD5(i,0,n);const l=r>>3;if(a>=3)for(o=0;o<50;++o)c=calculateMD5(c,0,c.length);let h,u;if(a>=3){u=t;const e=new Uint8Array(l);for(o=19;o>=0;o--){for(let t=0;t<l;++t)e[t]=c[t]^o;h=new ARCFourCipher(e);u=h.encryptBlock(u)}}else{h=new ARCF\ -ourCipher(c.subarray(0,l));u=h.encryptBlock(t)}return u}#Be(e,t,a,r=!1){const i=a.length,n=new Uint8Array(i+9);n.set(a);let s=i;n[s++]=255&e;n[s++]=e>>8&255;n[s++]=e>>16&255;n[s++]=255&t;n[s++]=t>>8&255;if(r){n[s++]=115;n[s++]=65;n[s++]=108;n[s++]=84}return calculateMD5(n,0,s).subarray(0,Math.min(i+5,16))}#Re(e,t,a,r,i){if(!(t instanceof Name))throw new FormatError("Invalid crypt filter name.");const n=this,s=e.get(t.name),o=s?.get("CFM");if(!o||"None"===o.name)return function(){return new NullC\ -ipher};if("V2"===o.name)return function(){return new ARCFourCipher(n.#Be(a,r,i,!1))};if("AESV2"===o.name)return function(){return new AES128Cipher(n.#Be(a,r,i,!0))};if("AESV3"===o.name)return function(){return new AES256Cipher(i)};throw new FormatError("Unknown crypto method")}constructor(e,t,a){const r=e.get("Filter");if(!isName(r,"Standard"))throw new FormatError("unknown encryption method");this.filterName=r.name;this.dict=e;const i=e.get("V");if(!Number.isInteger(i)||1!==i&&2!==i&&4!==i&&5!=\ -=i)throw new FormatError("unsupported encryption algorithm");this.algorithm=i;let n=e.get("Length");if(!n)if(i<=3)n=40;else{const t=e.get("CF"),a=e.get("StmF");if(t instanceof Dict&&a instanceof Name){t.suppressEncryption=!0;const e=t.get(a.name);n=e?.get("Length")||128;n<40&&(n<<=3)}}if(!Number.isInteger(n)||n<40||n%8!=0)throw new FormatError("invalid key length");const s=stringToBytes(e.get("O")),o=stringToBytes(e.get("U")),c=s.subarray(0,32),l=o.subarray(0,32),h=e.get("P"),u=e.get("R"),d=(4==\ -=i||5===i)&&!1!==e.get("EncryptMetadata");this.encryptMetadata=d;const f=stringToBytes(t);let g,p;if(a){if(6===u)try{a=utf8StringToString(a)}catch{warn("CipherTransformFactory: Unable to convert UTF8 encoded password.")}g=stringToBytes(a)}if(5!==i)p=this.#Me(f,g,c,l,h,u,n,d);else{const t=s.subarray(32,40),a=s.subarray(40,48),r=o.subarray(0,48),i=o.subarray(32,40),n=o.subarray(40,48),h=stringToBytes(e.get("OE")),d=stringToBytes(e.get("UE")),f=stringToBytes(e.get("Perms"));p=this.#Oe(u,g,c,t,a,r,l\ -,i,n,h,d,f)}if(!p){if(!a)throw new PasswordException("No password given",ha);const e=this.#De(g,c,u,n);p=this.#Me(f,e,c,l,h,u,n,d)}if(!p)throw new PasswordException("Incorrect Password",ua);if(4===i&&p.length<16){this.encryptionKey=new Uint8Array(16);this.encryptionKey.set(p)}else this.encryptionKey=p;if(i>=4){const t=e.get("CF");t instanceof Dict&&(t.suppressEncryption=!0);this.cf=t;this.stmf=e.get("StmF")||Name.get("Identity");this.strf=e.get("StrF")||Name.get("Identity");this.eff=e.get("EFF")\ -||this.stmf}}createCipherTransform(e,t){if(4===this.algorithm||5===this.algorithm)return new CipherTransform(this.#Re(this.cf,this.strf,e,t,this.encryptionKey),this.#Re(this.cf,this.stmf,e,t,this.encryptionKey));const a=this.#Be(e,t,this.encryptionKey,!1),cipherConstructor=function(){return new ARCFourCipher(a)};return new CipherTransform(cipherConstructor,cipherConstructor)}}class XRef{#Ne=null;constructor(e,t){this.stream=e;this.pdfManager=t;this.entries=[];this._xrefStms=new Set;this._cacheMa\ -p=new Map;this._pendingRefs=new RefSet;this._newPersistentRefNum=null;this._newTemporaryRefNum=null;this._persistentRefsCache=null}getNewPersistentRef(e){null===this._newPersistentRefNum&&(this._newPersistentRefNum=this.entries.length||1);const t=this._newPersistentRefNum++;this._cacheMap.set(t,e);return Ref.get(t,0)}getNewTemporaryRef(){if(null===this._newTemporaryRefNum){this._newTemporaryRefNum=this.entries.length||1;if(this._newPersistentRefNum){this._persistentRefsCache=new Map;for(let e=th\ -is._newTemporaryRefNum;e<this._newPersistentRefNum;e++){this._persistentRefsCache.set(e,this._cacheMap.get(e));this._cacheMap.delete(e)}}}return Ref.get(this._newTemporaryRefNum++,0)}resetNewTemporaryRef(){this._newTemporaryRefNum=null;if(this._persistentRefsCache)for(const[e,t]of this._persistentRefsCache)this._cacheMap.set(e,t);this._persistentRefsCache=null}setStartXRef(e){this.startXRefQueue=[e]}parse(e=!1){let t,a,r;if(e){warn("Indexing all PDF objects");t=this.indexObjects()}else t=this.re\ -adXRef();t.assignXref(this);this.trailer=t;try{a=t.get("Encrypt")}catch(e){if(e instanceof MissingDataException)throw e;warn(`XRef.parse - Invalid "Encrypt" reference: "${e}".`)}if(a instanceof Dict){const e=t.get("ID"),r=e?.length?e[0]:"";a.suppressEncryption=!0;this.encrypt=new CipherTransformFactory(a,r,this.pdfManager.password)}try{r=t.get("Root")}catch(e){if(e instanceof MissingDataException)throw e;warn(`XRef.parse - Invalid "Root" reference: "${e}".`)}if(r instanceof Dict)try{if(r.get("Pa\ -ges")instanceof Dict){this.root=r;return}}catch(e){if(e instanceof MissingDataException)throw e;warn(`XRef.parse - Invalid "Pages" reference: "${e}".`)}if(!e)throw new XRefParseException;throw new InvalidPDFException("Invalid Root reference.")}processXRefTable(e){"tableState"in this||(this.tableState={entryNum:0,streamPos:e.lexer.stream.pos,parserBuf1:e.buf1,parserBuf2:e.buf2});if(!isCmd(this.readXRefTable(e),"trailer"))throw new FormatError("Invalid XRef table: could not find trailer dictionary\ -");let t=e.getObj();t instanceof Dict||!t.dict||(t=t.dict);if(!(t instanceof Dict))throw new FormatError("Invalid XRef table: could not parse trailer dictionary");delete this.tableState;return t}readXRefTable(e){const t=e.lexer.stream,a=this.tableState;t.pos=a.streamPos;e.buf1=a.parserBuf1;e.buf2=a.parserBuf2;let r;for(;;){if(!("firstEntryNum"in a)||!("entryCount"in a)){if(isCmd(r=e.getObj(),"trailer"))break;a.firstEntryNum=r;a.entryCount=e.getObj()}let i=a.firstEntryNum;const n=a.entryCount;if(\ -!Number.isInteger(i)||!Number.isInteger(n))throw new FormatError("Invalid XRef table: wrong types in subsection header");for(let r=a.entryNum;r<n;r++){a.streamPos=t.pos;a.entryNum=r;a.parserBuf1=e.buf1;a.parserBuf2=e.buf2;const s={};s.offset=e.getObj();s.gen=e.getObj();const o=e.getObj();if(o instanceof Cmd)switch(o.cmd){case"f":s.free=!0;break;case"n":s.uncompressed=!0}if(!Number.isInteger(s.offset)||!Number.isInteger(s.gen)||!s.free&&!s.uncompressed)throw new FormatError(`Invalid entry in XRef\ - subsection: ${i}, ${n}`);0===r&&s.free&&1===i&&(i=0);this.entries[r+i]||(this.entries[r+i]=s)}a.entryNum=0;a.streamPos=t.pos;a.parserBuf1=e.buf1;a.parserBuf2=e.buf2;delete a.firstEntryNum;delete a.entryCount}if(this.entries[0]&&!this.entries[0].free)throw new FormatError("Invalid XRef table: unexpected first object");return r}processXRefStream(e){if(!("streamState"in this)){const{dict:t,pos:a}=e,r=t.get("W"),i=t.get("Index")||[0,t.get("Size")];this.streamState={entryRanges:i,byteWidths:r,entryN\ -um:0,streamPos:a}}this.readXRefStream(e);delete this.streamState;return e.dict}readXRefStream(e){const t=this.streamState;e.pos=t.streamPos;const[a,r,i]=t.byteWidths,n=t.entryRanges;for(;n.length>0;){const[s,o]=n;if(!Number.isInteger(s)||!Number.isInteger(o))throw new FormatError(`Invalid XRef range fields: ${s}, ${o}`);if(!Number.isInteger(a)||!Number.isInteger(r)||!Number.isInteger(i))throw new FormatError(`Invalid XRef entry fields length: ${s}, ${o}`);for(let n=t.entryNum;n<o;++n){t.entryNum\ -=n;t.streamPos=e.pos;let o=0,c=0,l=0;for(let t=0;t<a;++t){const t=e.getByte();if(-1===t)throw new FormatError("Invalid XRef byteWidths \'type\'.");o=o<<8|t}0===a&&(o=1);for(let t=0;t<r;++t){const t=e.getByte();if(-1===t)throw new FormatError("Invalid XRef byteWidths \'offset\'.");c=c<<8|t}for(let t=0;t<i;++t){const t=e.getByte();if(-1===t)throw new FormatError("Invalid XRef byteWidths \'generation\'.");l=l<<8|t}const h={};h.offset=c;h.gen=l;switch(o){case 0:h.free=!0;break;case 1:h.uncompressed=!0;bre\ -ak;case 2:break;default:throw new FormatError(`Invalid XRef entry type: ${o}`)}this.entries[s+n]||(this.entries[s+n]=h)}t.entryNum=0;t.streamPos=e.pos;n.splice(0,2)}}indexObjects(){function readToken(e,t){let a="",r=e[t];for(;10!==r&&13!==r&&60!==r&&!(++t>=e.length);){a+=String.fromCharCode(r);r=e[t]}return a}function skipUntil(e,t,a){const r=a.length,i=e.length;let n=0;for(;t<i;){let i=0;for(;i<r&&e[t+i]===a[i];)++i;if(i>=r)break;t++;n++}return n}const e=/\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer\\\ -s*<<)\\b/g,t=/\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g,a=/^(\\d+)\\s+(\\d+)\\s+obj\\b/,r=new Uint8Array([116,114,97,105,108,101,114]),i=new Uint8Array([115,116,97,114,116,120,114,101,102]),n=new Uint8Array([47,88,82,101,102]);this.entries.length=0;this._cacheMap.clear();const s=this.stream;s.pos=0;const o=s.getBytes(),c=bytesToString(o),l=o.length;let h=s.start;const u=[],d=[];for(;h<l;){let f=o[h];if(9===f||10===f||13===f||32===f){++h;continue}if(37===f){do{++h;if(h>=l)break;f=o[h]}while(10!==f&&13!==f);con\ -tinue}const g=readToken(o,h);let p;if(g.startsWith("xref")&&(4===g.length||/\\s/.test(g[4]))){h+=skipUntil(o,h,r);u.push(h);h+=skipUntil(o,h,i)}else if(p=a.exec(g)){const t=0|p[1],a=0|p[2],r=h+g.length;let i,u=!1;if(this.entries[t]){if(this.entries[t].gen===a)try{new Parser({lexer:new Lexer(s.makeSubStream(r))}).getObj();u=!0}catch(e){e instanceof ParserEOFException?warn(`indexObjects -- checking object (${g}): "${e}".`):u=!0}}else u=!0;u&&(this.entries[t]={offset:h-s.start,gen:a,uncompressed:!0}\ -);e.lastIndex=r;const f=e.exec(c);if(f){i=e.lastIndex+1-h;if("endobj"!==f[1]){warn(`indexObjects: Found "${f[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`);i-=f[1].length+1}}else i=l-h;const m=o.subarray(h,h+i),b=skipUntil(m,0,n);if(b<i&&m[b+5]<64){d.push(h-s.start);this._xrefStms.add(h-s.start)}h+=i}else if(g.startsWith("trailer")&&(7===g.length||/\\s/.test(g[7]))){u.push(h);const e=h+g.length;let a;t.lastIndex=e;const r=t.exec(c);if(r){a=t.lastIndex+1-h;if("sta\ -rtxref"!==r[1]){warn(`indexObjects: Found "${r[1]}" after "trailer", caused by missing "startxref" -- trying to recover.`);a-=r[1].length+1}}else a=l-h;h+=a}else h+=g.length+1}for(const e of d){this.startXRefQueue.push(e);this.readXRef(!0)}const f=[];let g,p,m=!1;for(const e of u){s.pos=e;const t=new Parser({lexer:new Lexer(s),xref:this,allowStreams:!0,recoveryMode:!0});if(!isCmd(t.getObj(),"trailer"))continue;const a=t.getObj();if(a instanceof Dict){f.push(a);a.has("Encrypt")&&(m=!0)}}for(const\ - e of[...f,"genFallback",...f]){if("genFallback"===e){if(!p)break;this._generationFallback=!0;continue}let t=!1;try{const a=e.get("Root");if(!(a instanceof Dict))continue;const r=a.get("Pages");if(!(r instanceof Dict))continue;const i=r.get("Count");Number.isInteger(i)&&(t=!0)}catch(e){p=e;continue}if(t&&(!m||e.has("Encrypt"))&&e.has("ID"))return e;g=e}if(g)return g;if(this.topDict)return this.topDict;if(!f.length)for(const[e,t]of this.entries.entries()){if(!t)continue;const a=Ref.get(e,t.gen);l\ -et r;try{r=this.fetch(a)}catch{continue}r instanceof BaseStream&&(r=r.dict);if(r instanceof Dict&&r.has("Root"))return r}throw new InvalidPDFException("Invalid PDF structure.")}readXRef(e=!1){const t=this.stream,a=new Set;for(;this.startXRefQueue.length;){try{const e=this.startXRefQueue[0];if(a.has(e)){warn("readXRef - skipping XRef table since it was already parsed.");this.startXRefQueue.shift();continue}a.add(e);t.pos=e+t.start;const r=new Parser({lexer:new Lexer(t),xref:this,allowStreams:!0})\ -;let i,n=r.getObj();if(isCmd(n,"xref")){i=this.processXRefTable(r);this.topDict||(this.topDict=i);n=i.get("XRefStm");if(Number.isInteger(n)&&!this._xrefStms.has(n)){this._xrefStms.add(n);this.startXRefQueue.push(n);this.#Ne??=n}}else{if(!Number.isInteger(n))throw new FormatError("Invalid XRef stream header");if(!(Number.isInteger(r.getObj())&&isCmd(r.getObj(),"obj")&&(n=r.getObj())instanceof BaseStream))throw new FormatError("Invalid XRef stream");i=this.processXRefStream(n);this.topDict||(this.\ -topDict=i);if(!i)throw new FormatError("Failed to read XRef stream")}n=i.get("Prev");Number.isInteger(n)?this.startXRefQueue.push(n):n instanceof Ref&&this.startXRefQueue.push(n.num)}catch(e){if(e instanceof MissingDataException)throw e;info("(while reading XRef): "+e)}this.startXRefQueue.shift()}if(this.topDict)return this.topDict;if(!e)throw new XRefParseException}get lastXRefStreamPos(){return this.#Ne??(this._xrefStms.size>0?Math.max(...this._xrefStms):null)}getEntry(e){const t=this.entries[\ -e];return t&&!t.free&&t.offset?t:null}fetchIfRef(e,t=!1){return e instanceof Ref?this.fetch(e,t):e}fetch(e,t=!1){if(!(e instanceof Ref))throw new Error("ref object is not a reference");const a=e.num,r=this._cacheMap.get(a);if(void 0!==r){r instanceof Dict&&!r.objId&&(r.objId=e.toString());return r}let i=this.getEntry(a);if(null===i)return i;if(this._pendingRefs.has(e)){this._pendingRefs.remove(e);warn(`Ignoring circular reference: ${e}.`);return ya}this._pendingRefs.put(e);try{i=i.uncompressed?t\ -his.fetchUncompressed(e,i,t):this.fetchCompressed(e,i,t);this._pendingRefs.remove(e)}catch(t){this._pendingRefs.remove(e);throw t}i instanceof Dict?i.objId=e.toString():i instanceof BaseStream&&(i.dict.objId=e.toString());return i}fetchUncompressed(e,t,a=!1){const r=e.gen;let i=e.num;if(t.gen!==r){const n=`Inconsistent generation in XRef: ${e}`;if(this._generationFallback&&t.gen<r){warn(n);return this.fetchUncompressed(Ref.get(i,t.gen),t,a)}throw new XRefEntryException(n)}const n=this.stream.mak\ -eSubStream(t.offset+this.stream.start),s=new Parser({lexer:new Lexer(n),xref:this,allowStreams:!0}),o=s.getObj(),c=s.getObj(),l=s.getObj();if(o!==i||c!==r||!(l instanceof Cmd))throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`);if("obj"!==l.cmd){if(l.cmd.startsWith("obj")){i=parseInt(l.cmd.substring(3),10);if(!Number.isNaN(i))return i}throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`)}(t=this.encrypt&&!a?s.getObj(this.encrypt.createCipherTransform(i,r)):s.getObj(\ -))instanceof BaseStream||this._cacheMap.set(i,t);return t}fetchCompressed(e,t,a=!1){const r=t.offset,i=this.fetch(Ref.get(r,0));if(!(i instanceof BaseStream))throw new FormatError("bad ObjStm stream");const n=i.dict.get("First"),s=i.dict.get("N");if(!Number.isInteger(n)||!Number.isInteger(s))throw new FormatError("invalid first and n parameters for ObjStm stream");let o=new Parser({lexer:new Lexer(i),xref:this,allowStreams:!0});const c=new Array(s),l=new Array(s);for(let e=0;e<s;++e){const t=o.g\ -etObj();if(!Number.isInteger(t))throw new FormatError(`invalid object number in the ObjStm stream: ${t}`);const a=o.getObj();if(!Number.isInteger(a))throw new FormatError(`invalid object offset in the ObjStm stream: ${a}`);c[e]=t;const i=this.getEntry(t);i?.offset===r&&i.gen!==e&&(i.gen=e);l[e]=a}const h=(i.start||0)+n,u=new Array(s);for(let e=0;e<s;++e){const t=e<s-1?l[e+1]-l[e]:void 0;if(t<0)throw new FormatError("Invalid offset in the ObjStm stream.");o=new Parser({lexer:new Lexer(i.makeSubSt\ -ream(h+l[e],t,i.dict)),xref:this,allowStreams:!0});const a=o.getObj();u[e]=a;if(a instanceof BaseStream)continue;const n=c[e],d=this.entries[n];d&&d.offset===r&&d.gen===e&&this._cacheMap.set(n,a)}if(void 0===(t=u[t.gen]))throw new XRefEntryException(`Bad (compressed) XRef entry: ${e}`);return t}async fetchIfRefAsync(e,t){return e instanceof Ref?this.fetchAsync(e,t):e}async fetchAsync(e,t){try{return this.fetch(e,t)}catch(a){if(!(a instanceof MissingDataException))throw a;await this.pdfManager.re\ -questRange(a.begin,a.end);return this.fetchAsync(e,t)}}getCatalogObj(){return this.root}}const yc=[0,0,612,792];class Page{#Ee=null;constructor({pdfManager:e,xref:t,pageIndex:a,pageDict:r,ref:i,globalIdFactory:n,fontCache:s,builtInCMapCache:o,standardFontDataCache:c,globalColorSpaceCache:l,globalImageCache:h,systemFontCache:u,nonBlendModesSet:d,xfaFactory:f}){this.pdfManager=e;this.pageIndex=a;this.pageDict=r;this.xref=t;this.ref=i;this.fontCache=s;this.builtInCMapCache=o;this.standardFontDataCa\ -che=c;this.globalColorSpaceCache=l;this.globalImageCache=h;this.systemFontCache=u;this.nonBlendModesSet=d;this.evaluatorOptions=e.evaluatorOptions;this.xfaFactory=f;const g={obj:0};this._localIdFactory=class extends n{static createObjId(){return`p${a}_${++g.obj}`}static getPageObjId(){return`p${i.toString()}`}}}#Pe(e){return new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standa\ -rdFontDataCache:this.standardFontDataCache,globalColorSpaceCache:this.globalColorSpaceCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions})}#Le(e,t=!1){const a=getInheritableProperty({dict:this.pageDict,key:e,getArray:t,stopWhenFound:!1});return Array.isArray(a)?1!==a.length&&a[0]instanceof Dict?Dict.merge({xref:this.xref,dictArray:a}):a[0]:a}get content(){return this.pageDict.getArray("Contents")}get resources(){const e=this.#Le("Resou\ -rces");return shadow(this,"resources",e instanceof Dict?e:Dict.empty)}#je(e){if(this.xfaData)return this.xfaData.bbox;const t=lookupNormalRect(this.#Le(e,!0),null);if(t){if(t[2]-t[0]>0&&t[3]-t[1]>0)return t;warn(`Empty, or invalid, /${e} entry.`)}return null}get mediaBox(){return shadow(this,"mediaBox",this.#je("MediaBox")||yc)}get cropBox(){return shadow(this,"cropBox",this.#je("CropBox")||this.mediaBox)}get userUnit(){const e=this.pageDict.get("UserUnit");return shadow(this,"userUnit","number"\ -==typeof e&&e>0?e:1)}get view(){const{cropBox:e,mediaBox:t}=this;if(e!==t&&!isArrayEqual(e,t)){const a=Util.intersect(e,t);if(a&&a[2]-a[0]>0&&a[3]-a[1]>0)return shadow(this,"view",a);warn("Empty /CropBox and /MediaBox intersection.")}return shadow(this,"view",t)}get rotate(){let e=this.#Le("Rotate")||0;e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360);return shadow(this,"rotate",e)}#_e(e,t){if(!this.evaluatorOptions.ignoreErrors)throw e;warn(`getContentStream - ignoring sub-stream (${t}): "${e}\ -".`)}async getContentStream(){const e=await this.pdfManager.ensure(this,"content");return e instanceof BaseStream?e:Array.isArray(e)?new StreamsSequenceStream(e,this.#_e.bind(this)):new NullStream}get xfaData(){return shadow(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async#Ue(e,t,a){const r=[];for(const i of e)if(i.id){const e=Ref.fromString(i.id);if(!e){warn(`A non-linked annotation cannot be modified: ${i.id}`);continue}if(i.deleted){t.put(e,e);i\ -f(i.popupRef){const e=Ref.fromString(i.popupRef);e&&t.put(e,e)}continue}if(i.popup?.deleted){const e=Ref.fromString(i.popupRef);e&&t.put(e,e)}a?.put(e);i.ref=e;r.push(this.xref.fetchAsync(e).then((e=>{e instanceof Dict&&(i.oldAnnotation=e.clone())}),(()=>{warn(`Cannot fetch \\`oldAnnotation\\` for: ${e}.`)})));delete i.id}await Promise.all(r)}async saveNewAnnotations(e,t,a,r,i){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");const n=this.#Pe(e),s=new RefSetCache,o=new RefSe\ -t;await this.#Ue(a,s,o);const c=this.pageDict,l=this.annotations.filter((e=>!(e instanceof Ref&&s.has(e)))),h=await AnnotationFactory.saveNewAnnotations(n,t,a,r,i);for(const{ref:e}of h.annotations)e instanceof Ref&&!o.has(e)&&l.push(e);const u=c.clone();u.set("Annots",l);i.put(this.ref,{data:u});for(const e of s)i.put(e,{data:null})}async save(e,t,a,r){const i=this.#Pe(e),n=await this._parsedAnnotations,s=[];for(const e of n)s.push(e.save(i,t,a,r).catch((function(e){warn(`save - ignoring annotat\ -ion data during "${t.name}" task: "${e}".`);return null})));return Promise.all(s)}async loadResources(e){await(this.#Ee??=this.pdfManager.ensure(this,"resources"));await ObjectLoader.load(this.resources,e,this.xref)}async#Xe(e,t){const a=e?.get("Resources");if(!(a instanceof Dict&&a.size))return this.resources;await ObjectLoader.load(a,t,this.xref);return Dict.merge({xref:this.xref,dictArray:[a,this.resources],mergeSubDicts:!0})}async getOperatorList({handler:e,sink:t,task:a,intent:r,cacheKey:i,\ -annotationStorage:c=null,modifiedIds:d=null}){const g=this.getContentStream(),p=this.loadResources(Ia),m=this.#Pe(e),b=this.xfaFactory?null:getNewAnnotationsMap(c),y=b?.get(this.pageIndex);let w=Promise.resolve(null),x=null;if(y){const e=this.pdfManager.ensureDoc("annotationGlobals");let t;const r=new Set;for(const{bitmapId:e,bitmap:t}of y)!e||t||r.has(e)||r.add(e);const{isOffscreenCanvasSupported:i}=this.evaluatorOptions;if(r.size>0){const e=y.slice();for(const[t,a]of c)t.startsWith(f)&&a.bitma\ -p&&r.has(a.bitmapId)&&e.push(a);t=AnnotationFactory.generateImages(e,this.xref,i)}else t=AnnotationFactory.generateImages(y,this.xref,i);x=new RefSet;w=Promise.all([e,this.#Ue(y,x,null)]).then((([e])=>e?AnnotationFactory.printNewAnnotations(e,m,a,y,t):null))}const S=Promise.all([g,p]).then((async([n])=>{const s=await this.#Xe(n.dict,Ia),o=new OperatorList(r,t);e.send("StartRenderPage",{transparency:m.hasBlendModes(s,this.nonBlendModesSet),pageIndex:this.pageIndex,cacheKey:i});await m.getOperator\ -List({stream:n,task:a,resources:s,operatorList:o});return o}));let[k,C,v]=await Promise.all([S,this._parsedAnnotations,w]);if(v){C=C.filter((e=>!(e.ref&&x.has(e.ref))));for(let e=0,t=v.length;e<t;e++){const a=v[e];if(a.refToReplace){const r=C.findIndex((e=>e.ref&&isRefsEqual(e.ref,a.refToReplace)));if(r>=0){C.splice(r,1,a);v.splice(e--,1);t--}}}C=C.concat(v)}if(0===C.length||r&h){k.flush(!0);return{length:k.totalLength}}const F=!!(r&l),T=!!(r&u),O=!!(r&n),M=!!(r&s),D=!!(r&o),R=[];for(const e of \ -C)(O||M&&e.mustBeViewed(c,F)&&e.mustBeViewedWhenEditing(T,d)||D&&e.mustBePrinted(c))&&R.push(e.getOperatorList(m,a,r,c).catch((function(e){warn(`getOperatorList - ignoring annotation data during "${a.name}" task: "${e}".`);return{opList:null,separateForm:!1,separateCanvas:!1}})));const N=await Promise.all(R);let E=!1,L=!1;for(const{opList:e,separateForm:t,separateCanvas:a}of N){k.addOpList(e);E||=t;L||=a}k.flush(!0,{form:E,canvas:L});return{length:k.totalLength}}async extractTextContent({handler\ -:e,task:t,includeMarkedContent:a,disableNormalization:r,sink:i,intersector:n=null}){const s=this.getContentStream(),o=this.loadResources(Ta),c=this.pdfManager.ensureCatalog("lang"),[l,,h]=await Promise.all([s,o,c]),u=await this.#Xe(l.dict,Ta);return this.#Pe(e).getTextContent({stream:l,task:t,resources:u,includeMarkedContent:a,disableNormalization:r,sink:i,viewBox:this.view,lang:h,intersector:n})}async getStructTree(){const e=await this.pdfManager.ensureCatalog("structTreeRoot");if(!e)return nul\ -l;await this._parsedAnnotations;try{const t=await this.pdfManager.ensure(this,"_parseStructTree",[e]);return await this.pdfManager.ensure(t,"serializable")}catch(e){warn(`getStructTree: "${e}".`);return null}}_parseStructTree(e){const t=new StructTreePage(e,this.pageDict);t.parse(this.ref);return t}async getAnnotationsData(e,t,a){const r=await this._parsedAnnotations;if(0===r.length)return r;const i=[],c=[];let l;const h=!!(a&n),u=!!(a&s),d=!!(a&o),f=[];for(const a of r){const r=h||u&&a.viewable\ -;(r||d&&a.printable)&&i.push(a.data);if(a.hasTextContent&&r){l??=this.#Pe(e);c.push(a.extractTextContent(l,t,[-1/0,-1/0,1/0,1/0]).catch((function(e){warn(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${e}".`)})))}else a.overlaysTextContent&&r&&f.push(a)}if(f.length>0){const a=new Intersector(f);c.push(this.extractTextContent({handler:e,task:t,includeMarkedContent:!1,disableNormalization:!1,sink:null,viewBox:this.view,lang:null,intersector:a}).then((()=>{a.setText()})))}awa\ -it Promise.all(c);return i}get annotations(){const e=this.#Le("Annots");return shadow(this,"annotations",Array.isArray(e)?e:[])}get _parsedAnnotations(){return shadow(this,"_parsedAnnotations",this.pdfManager.ensure(this,"annotations").then((async e=>{if(0===e.length)return e;const[t,a]=await Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureDoc("fieldObjects")]);if(!t)return[];const r=a?.orphanFields,i=[];for(const a of e)i.push(AnnotationFactory.create(this.xref\ -,a,t,this._localIdFactory,!1,r,this.ref).catch((function(e){warn(`_parsedAnnotations: "${e}".`);return null})));const n=[];let s,o;for(const e of await Promise.all(i))e&&(e instanceof WidgetAnnotation?(o||=[]).push(e):e instanceof PopupAnnotation?(s||=[]).push(e):n.push(e));o&&n.push(...o);s&&n.push(...s);return n})))}get jsActions(){return shadow(this,"jsActions",collectActions(this.xref,this.pageDict,xe))}}const wc=new Uint8Array([37,80,68,70,45]),xc=new Uint8Array([115,116,97,114,116,120,114,\ -101,102]),Sc=new Uint8Array([101,110,100,111,98,106]);function find(e,t,a=1024,r=!1){const i=t.length,n=e.peekBytes(a),s=n.length-i;if(s<=0)return!1;if(r){const a=i-1;let r=n.length-1;for(;r>=a;){let s=0;for(;s<i&&n[r-s]===t[a-s];)s++;if(s>=i){e.pos+=r-a;return!0}r--}}else{let a=0;for(;a<=s;){let r=0;for(;r<i&&n[a+r]===t[r];)r++;if(r>=i){e.pos+=a;return!0}a++}}return!1}class PDFDocument{#qe=new Map;#He=null;constructor(e,t){if(t.length<=0)throw new InvalidPDFException("The PDF file is empty, i.e\ -. its size is zero bytes.");this.pdfManager=e;this.stream=t;this.xref=new XRef(t,e);const a={font:0};this._globalIdFactory=class{static getDocId(){return`g_${e.docId}`}static createFontId(){return"f"+ ++a.font}static createObjId(){unreachable("Abstract method `createObjId` called.")}static getPageObjId(){unreachable("Abstract method `getPageObjId` called.")}}}parse(e){this.xref.parse(e);this.catalog=new Catalog(this.pdfManager,this.xref)}get linearization(){let e=null;try{e=Linearization.create(\ -this.stream)}catch(e){if(e instanceof MissingDataException)throw e;info(e)}return shadow(this,"linearization",e)}get startXRef(){const e=this.stream;let t=0;if(this.linearization){e.reset();if(find(e,Sc)){e.skip(6);let a=e.peekByte();for(;isWhiteSpace(a);){e.pos++;a=e.peekByte()}t=e.pos-e.start}}else{const a=1024,r=xc.length;let i=!1,n=e.end;for(;!i&&n>0;){n-=a-r;n<0&&(n=0);e.pos=n;i=find(e,xc,a,!0)}if(i){e.skip(9);let a;do{a=e.getByte()}while(isWhiteSpace(a));let r="";for(;a>=32&&a<=57;){r+=Str\ -ing.fromCharCode(a);a=e.getByte()}t=parseInt(r,10);isNaN(t)&&(t=0)}}return shadow(this,"startXRef",t)}checkHeader(){const e=this.stream;e.reset();if(!find(e,wc))return;e.moveStart();e.skip(wc.length);let t,a="";for(;(t=e.getByte())>32&&a.length<7;)a+=String.fromCharCode(t);Ca.test(a)?this.#He=a:warn(`Invalid PDF header version: ${a}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let e=0;e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFacto\ -ry.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages;return shadow(this,"numPages",e)}#We(e,t=0){return!!Array.isArray(e)&&e.every((e=>{if(!((e=this.xref.fetchIfRef(e))instanceof Dict))return!1;if(e.has("Kids")){if(++t>10){warn("#hasOnlyDocumentSignatures: maximum recursion depth reached");return!1}return this.#We(e.get("Kids"),t)}const a=isName(e.get("FT"),"Sig"),r=e.get("Rect"),i=Array.isArray(r)&&r.every((e=>0===e));return a&&i}))}#ze(e,t,a=new RefSet){if(Arra\ -y.isArray(e))for(let r of e){if(r instanceof Ref){if(a.has(r))continue;a.put(r)}r=this.xref.fetchIfRef(r);if(!(r instanceof Dict))continue;if(r.has("Kids")){this.#ze(r.get("Kids"),t,a);continue}if(!isName(r.get("FT"),"Sig"))continue;const e=r.get("V");if(!(e instanceof Dict))continue;const i=e.get("SubFilter");i instanceof Name&&t.add(i.name)}}get _xfaStreams(){const{acroForm:e}=this.catalog;if(!e)return null;const t=e.get("XFA"),a=new Map(["xdp:xdp","template","datasets","config","connectionSet\ -","localeSet","stylesheet","/xdp:xdp"].map((e=>[e,null])));if(t instanceof BaseStream&&!t.isEmpty){a.set("xdp:xdp",t);return a}if(!Array.isArray(t)||0===t.length)return null;for(let e=0,r=t.length;e<r;e+=2){let i;i=0===e?"xdp:xdp":e===r-2?"/xdp:xdp":t[e];if(!a.has(i))continue;const n=this.xref.fetchIfRef(t[e+1]);n instanceof BaseStream&&!n.isEmpty&&a.set(i,n)}return a}get xfaDatasets(){const e=this._xfaStreams;if(!e)return shadow(this,"xfaDatasets",null);for(const t of["datasets","xdp:xdp"]){con\ -st a=e.get(t);if(a)try{const e=stringToUTF8String(a.getString());return shadow(this,"xfaDatasets",new DatasetReader({[t]:e}))}catch{warn("XFA - Invalid utf-8 string.");break}}return shadow(this,"xfaDatasets",null)}get xfaData(){const e=this._xfaStreams;if(!e)return null;const t=Object.create(null);for(const[a,r]of e)if(r)try{t[a]=stringToUTF8String(r.getString())}catch{warn("XFA - Invalid utf-8 string.");return null}return t}get xfaFactory(){let e;this.pdfManager.enableXfa&&this.catalog.needsRen\ -dering&&this.formInfo.hasXfa&&!this.formInfo.hasAcroForm&&(e=this.xfaData);return shadow(this,"xfaFactory",e?new XFAFactory(e):null)}get isPureXfa(){return!!this.xfaFactory&&this.xfaFactory.isValid()}get htmlForXfa(){return this.xfaFactory?this.xfaFactory.getPages():null}async#$e(){const e=await this.pdfManager.ensureCatalog("xfaImages");e&&this.xfaFactory.setImages(e)}async#Ge(e,t){const a=await this.pdfManager.ensureCatalog("acroForm");if(!a)return;const r=await a.getAsync("DR");if(!(r instanc\ -eof Dict))return;await ObjectLoader.load(r,["Font"],this.xref);const i=r.get("Font");if(!(i instanceof Dict))return;const n=Object.assign(Object.create(null),this.pdfManager.evaluatorOptions,{useSystemFonts:!1}),{builtInCMapCache:s,fontCache:o,standardFontDataCache:c}=this.catalog,l=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:-1,idFactory:this._globalIdFactory,fontCache:o,builtInCMapCache:s,standardFontDataCache:c,options:n}),h=new OperatorList,u=[],d={get font(){return u.at(-1)},se\ -t font(e){u.push(e)},clone(){return this}},parseFont=(e,a,i)=>l.handleSetFont(r,[Name.get(e),1],null,h,t,d,a,i).catch((e=>{warn(`loadXfaFonts: "${e}".`);return null})),f=[];for(const[e,t]of i){const a=t.get("FontDescriptor");if(!(a instanceof Dict))continue;let r=a.get("FontFamily");r=r.replaceAll(/[ ]+(\\d)/g,"$1");const i={fontFamily:r,fontWeight:a.get("FontWeight"),italicAngle:-a.get("ItalicAngle")};validateCSSFont(i)&&f.push(parseFont(e,null,i))}await Promise.all(f);const g=this.xfaFactory.se\ -tFonts(u);if(!g)return;n.ignoreErrors=!0;f.length=0;u.length=0;const p=new Set;for(const e of g)getXfaFontName(`${e}-Regular`)||p.add(e);p.size&&g.push("PdfJS-Fallback");for(const e of g)if(!p.has(e))for(const t of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){const a=`${e}-${t.name}`;f.push(parseFont(a,getXfaFontDict(a),{fontFamily:e,fontWeight:t.fontWeigh\ -t,italicAngle:t.italicAngle}))}await Promise.all(f);this.xfaFactory.appendFonts(u,p)}loadXfaResources(e,t){return Promise.all([this.#Ge(e,t).catch((()=>{})),this.#$e()])}serializeXfaData(e){return this.xfaFactory?this.xfaFactory.serializeData(e):null}get version(){return this.catalog.version||this.#He}get formInfo(){const e={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},{acroForm:t}=this.catalog;if(!t)return shadow(this,"formInfo",e);try{const a=t.get("Fields"),r=Array.isArray(a)&&a.le\ -ngth>0;e.hasFields=r;const i=t.get("XFA");e.hasXfa=Array.isArray(i)&&i.length>0||i instanceof BaseStream&&!i.isEmpty;const n=!!(1&t.get("SigFlags")),s=n&&this.#We(a);e.hasAcroForm=r&&!s;e.hasSignatures=n}catch(e){if(e instanceof MissingDataException)throw e;warn(`Cannot fetch form information: "${e}".`)}return shadow(this,"formInfo",e)}get documentInfo(){const{catalog:e,formInfo:t,xref:a}=this,r={PDFFormatVersion:this.version,Language:e.lang,EncryptFilterName:a.encrypt?.filterName??null,IsLinear\ -ized:!!this.linearization,IsAcroFormPresent:t.hasAcroForm,IsXFAPresent:t.hasXfa,IsCollectionPresent:!!e.collection,IsSignaturesPresent:t.hasSignatures};let i;try{i=a.trailer.get("Info")}catch(e){if(e instanceof MissingDataException)throw e;info("The document information dictionary is invalid.")}if(!(i instanceof Dict))return shadow(this,"documentInfo",r);for(const[e,t]of i){switch(e){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDat\ -e":if("string"==typeof t){r[e]=stringToPDFString(t);continue}break;case"Trapped":if(t instanceof Name){r[e]=t;continue}break;default:let a;switch(typeof t){case"string":a=stringToPDFString(t);break;case"number":case"boolean":a=t;break;default:t instanceof Name&&(a=t)}if(void 0===a){warn(`Bad value, for custom key "${e}", in Info: ${t}.`);continue}r.Custom??=Object.create(null);r.Custom[e]=a;continue}warn(`Bad value, for key "${e}", in Info: ${t}.`)}return shadow(this,"documentInfo",r)}get finger\ -prints(){const e="\\0".repeat(16);function validate(t){return"string"==typeof t&&16===t.length&&t!==e}const t=this.xref.trailer.get("ID");let a,r;if(Array.isArray(t)&&validate(t[0])){a=stringToBytes(t[0]);t[1]!==t[0]&&validate(t[1])&&(r=stringToBytes(t[1]))}else a=calculateMD5(this.stream.getByteRange(0,1024),0,1024);return shadow(this,"fingerprints",[toHexUtil(a),r?toHexUtil(r):null])}async#Ve(e){const{catalog:t,linearization:a,xref:r}=this,i=Ref.get(a.objectNumberFirst,0);try{const e=await r.fe\ -tchAsync(i);if(e instanceof Dict){let a=e.getRaw("Type");a instanceof Ref&&(a=await r.fetchAsync(a));if(isName(a,"Page")||!e.has("Type")&&!e.has("Kids")&&e.has("Contents")){t.pageKidsCountCache.has(i)||t.pageKidsCountCache.put(i,1);t.pageIndexCache.has(i)||t.pageIndexCache.put(i,0);return[e,i]}}throw new FormatError("The Linearization dictionary doesn\'t point to a valid Page dictionary.")}catch(a){warn(`_getLinearizationPage: "${a.message}".`);return t.getPageDict(e)}}getPage(e){const t=this.#qe\ -.get(e);if(t)return t;const{catalog:a,linearization:r,xfaFactory:i}=this;let n;n=i?Promise.resolve([Dict.empty,null]):r?.pageFirst===e?this.#Ve(e):a.getPageDict(e);n=n.then((([t,r])=>new Page({pdfManager:this.pdfManager,xref:this.xref,pageIndex:e,pageDict:t,ref:r,globalIdFactory:this._globalIdFactory,fontCache:a.fontCache,builtInCMapCache:a.builtInCMapCache,standardFontDataCache:a.standardFontDataCache,globalColorSpaceCache:a.globalColorSpaceCache,globalImageCache:a.globalImageCache,systemFontCa\ -che:a.systemFontCache,nonBlendModesSet:a.nonBlendModesSet,xfaFactory:i})));this.#qe.set(e,n);return n}async checkFirstPage(e=!1){if(!e)try{await this.getPage(0)}catch(e){if(e instanceof XRefEntryException){this.#qe.delete(0);await this.cleanup();throw new XRefParseException}}}async checkLastPage(e=!1){const{catalog:t,pdfManager:a}=this;t.setActualNumPages();let r;try{await Promise.all([a.ensureDoc("xfaFactory"),a.ensureDoc("linearization"),a.ensureCatalog("numPages")]);if(this.xfaFactory)return;\ -r=this.linearization?this.linearization.numPages:t.numPages;if(!Number.isInteger(r))throw new FormatError("Page count is not an integer.");if(r<=1)return;await this.getPage(r-1)}catch(i){this.#qe.delete(r-1);await this.cleanup();if(i instanceof XRefEntryException&&!e)throw new XRefParseException;warn(`checkLastPage - invalid /Pages tree /Count: ${r}.`);let n;try{n=await t.getAllPageDicts(e)}catch(a){if(a instanceof XRefEntryException&&!e)throw new XRefParseException;t.setActualNumPages(1);return\ -}for(const[e,[r,i]]of n){let n;if(r instanceof Error){n=Promise.reject(r);n.catch((()=>{}))}else n=Promise.resolve(new Page({pdfManager:a,xref:this.xref,pageIndex:e,pageDict:r,ref:i,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalColorSpaceCache:this.globalColorSpaceCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null}));th\ -is.#qe.set(e,n)}t.setActualNumPages(n.size)}}async fontFallback(e,t){const{catalog:a,pdfManager:r}=this;for(const i of await Promise.all(a.fontCache))if(i.loadedName===e){i.fallback(t,r.evaluatorOptions);return}}async cleanup(e=!1){return this.catalog?this.catalog.cleanup(e):clearGlobalCaches()}async#Ke(e,t,a,r,i,n,s){const{xref:o}=this;if(!(a instanceof Ref)||n.has(a))return;n.put(a);const c=await o.fetchAsync(a);if(!(c instanceof Dict))return;let l=await c.getAsync("Subtype");l=l instanceof Na\ -me?l.name:null;if("Link"===l)return;if(c.has("T")){const t=stringToPDFString(await c.getAsync("T"));e=""===e?t:`${e}.${t}`}else{let a=c;for(;;){a=a.getRaw("Parent")||t;if(a instanceof Ref){if(n.has(a))break;a=await o.fetchAsync(a)}if(!(a instanceof Dict))break;if(a.has("T")){const t=stringToPDFString(await a.getAsync("T"));e=""===e?t:`${e}.${t}`;break}}}t&&!c.has("Parent")&&isName(c.get("Subtype"),"Widget")&&s.put(a,t);r.has(e)||r.set(e,[]);r.get(e).push(AnnotationFactory.create(o,a,i,null,!0,s,\ -null).then((e=>e?.getFieldObject())).catch((function(e){warn(`#collectFieldObjects: "${e}".`);return null})));if(!c.has("Kids"))return;const h=await c.getAsync("Kids");if(Array.isArray(h))for(const t of h)await this.#Ke(e,a,t,r,i,n,s)}get fieldObjects(){return shadow(this,"fieldObjects",this.pdfManager.ensureDoc("formInfo").then((async e=>{if(!e.hasFields)return null;const t=await this.annotationGlobals;if(!t)return null;const{acroForm:a}=t,r=new RefSet,i=Object.create(null),n=new Map,s=new RefS\ -etCache;for(const e of a.get("Fields"))await this.#Ke("",null,e,n,t,r,s);const o=[];for(const[e,t]of n)o.push(Promise.all(t).then((t=>{(t=t.filter((e=>!!e))).length>0&&(i[e]=t)})));await Promise.all(o);return{allFields:objectSize(i)>0?i:null,orphanFields:s}})))}get hasJSActions(){return shadow(this,"hasJSActions",this.pdfManager.ensureDoc("_parseHasJSActions"))}async _parseHasJSActions(){const[e,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObje\ -cts")]);return!!e||!!t?.allFields&&Object.values(t.allFields).some((e=>e.some((e=>null!==e.actions))))}get calculationOrderIds(){const e=this.catalog.acroForm?.get("CO");if(!Array.isArray(e)||0===e.length)return shadow(this,"calculationOrderIds",null);const t=[];for(const a of e)a instanceof Ref&&t.push(a.toString());return shadow(this,"calculationOrderIds",t.length?t:null)}get annotationGlobals(){return shadow(this,"annotationGlobals",AnnotationFactory.createGlobals(this.pdfManager))}}class Bas\ -ePdfManager{constructor({docBaseUrl:e,docId:t,enableXfa:a,evaluatorOptions:r,handler:i,password:n}){this._docBaseUrl=function parseDocBaseUrl(e){if(e){const t=createValidAbsoluteUrl(e);if(t)return t.href;warn(`Invalid absolute docBaseUrl: "${e}".`)}return null}(e);this._docId=t;this._password=n;this.enableXfa=a;r.isOffscreenCanvasSupported&&=FeatureTest.isOffscreenCanvasSupported;r.isImageDecoderSupported&&=FeatureTest.isImageDecoderSupported;this.evaluatorOptions=Object.freeze(r);ImageResizer.s\ -etOptions(r);JpegStream.setOptions(r);OperatorList.setOptions(r);const s={...r,handler:i};JpxImage.setOptions(s);IccColorSpace.setOptions(s);CmykICCBasedCS.setOptions(s)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)}ensureXRef(e,t){return this.ensure(this.pdfDocument.xref,e,t)}ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)}getPage(e){return this.pdfDocument.\ -getPage(e)}fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)}cleanup(e=!1){return this.pdfDocument.cleanup(e)}async ensure(e,t,a){unreachable("Abstract method `ensure` called")}requestRange(e,t){unreachable("Abstract method `requestRange` called")}requestLoadedStream(e=!1){unreachable("Abstract method `requestLoadedStream` called")}sendProgressiveData(e){unreachable("Abstract method `sendProgressiveData` called")}updatePassword(e){this._password=e}terminate(e){unreachable("Abstract met\ -hod `terminate` called")}}class LocalPdfManager extends BasePdfManager{constructor(e){super(e);const t=new Stream(e.source);this.pdfDocument=new PDFDocument(this,t);this._loadedStreamPromise=Promise.resolve(t)}async ensure(e,t,a){const r=e[t];return"function"==typeof r?r.apply(e,a):r}requestRange(e,t){return Promise.resolve()}requestLoadedStream(e=!1){return this._loadedStreamPromise}terminate(e){}}class NetworkPdfManager extends BasePdfManager{constructor(e){super(e);this.streamManager=new Chun\ -kedStreamManager(e.source,{msgHandler:e.handler,length:e.length,disableAutoFetch:e.disableAutoFetch,rangeChunkSize:e.rangeChunkSize});this.pdfDocument=new PDFDocument(this,this.streamManager.getStream())}async ensure(e,t,a){try{const r=e[t];return"function"==typeof r?r.apply(e,a):r}catch(r){if(!(r instanceof MissingDataException))throw r;await this.requestRange(r.begin,r.end);return this.ensure(e,t,a)}}requestRange(e,t){return this.streamManager.requestRange(e,t)}requestLoadedStream(e=!1){return\ - this.streamManager.requestAllChunks(e)}sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})}terminate(e){this.streamManager.abort(e)}}const Ac=1,kc=2,Cc=1,vc=2,Fc=3,Ic=4,Tc=5,Oc=6,Mc=7,Dc=8;function onFn(){}function wrapReason(e){if(e instanceof AbortException||e instanceof InvalidPDFException||e instanceof PasswordException||e instanceof ResponseException||e instanceof UnknownErrorException)return e;e instanceof Error||"object"==typeof e&&null!==e||unreachable(\'wrapReason: Expect\ -ed "reason" to be a (possibly cloned) Error.\');switch(e.name){case"AbortException":return new AbortException(e.message);case"InvalidPDFException":return new InvalidPDFException(e.message);case"PasswordException":return new PasswordException(e.message,e.code);case"ResponseException":return new ResponseException(e.message,e.status,e.missing);case"UnknownErrorException":return new UnknownErrorException(e.message,e.details)}return new UnknownErrorException(e.message,e.toString())}class MessageHandle\ -r{#Je=new AbortController;constructor(e,t,a){this.sourceName=e;this.targetName=t;this.comObj=a;this.callbackId=1;this.streamId=1;this.streamSinks=Object.create(null);this.streamControllers=Object.create(null);this.callbackCapabilities=Object.create(null);this.actionHandler=Object.create(null);a.addEventListener("message",this.#Ye.bind(this),{signal:this.#Je.signal})}#Ye({data:e}){if(e.targetName!==this.sourceName)return;if(e.stream){this.#Ze(e);return}if(e.callback){const t=e.callbackId,a=this.c\ -allbackCapabilities[t];if(!a)throw new Error(`Cannot resolve callback ${t}`);delete this.callbackCapabilities[t];if(e.callback===Ac)a.resolve(e.data);else{if(e.callback!==kc)throw new Error("Unexpected callback case");a.reject(wrapReason(e.reason))}return}const t=this.actionHandler[e.action];if(!t)throw new Error(`Unknown action from worker: ${e.action}`);if(e.callbackId){const a=this.sourceName,r=e.sourceName,i=this.comObj;Promise.try(t,e.data).then((function(t){i.postMessage({sourceName:a,targ\ -etName:r,callback:Ac,callbackId:e.callbackId,data:t})}),(function(t){i.postMessage({sourceName:a,targetName:r,callback:kc,callbackId:e.callbackId,reason:wrapReason(t)})}))}else e.streamId?this.#Qe(e):t(e.data)}on(e,t){const a=this.actionHandler;if(a[e])throw new Error(`There is already an actionName called "${e}"`);a[e]=t}send(e,t,a){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},a)}sendWithPromise(e,t,a){const r=this.callbackId++,i=Promise.withRe\ -solvers();this.callbackCapabilities[r]=i;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId:r,data:t},a)}catch(e){i.reject(e)}return i.promise}sendWithStream(e,t,a,r){const i=this.streamId++,n=this.sourceName,s=this.targetName,o=this.comObj;return new ReadableStream({start:a=>{const c=Promise.withResolvers();this.streamControllers[i]={controller:a,startCall:c,pullCall:null,cancelCall:null,isClosed:!1};o.postMessage({sourceName:n,targetName:s,ac\ -tion:e,streamId:i,data:t,desiredSize:a.desiredSize},r);return c.promise},pull:e=>{const t=Promise.withResolvers();this.streamControllers[i].pullCall=t;o.postMessage({sourceName:n,targetName:s,stream:Oc,streamId:i,desiredSize:e.desiredSize});return t.promise},cancel:e=>{assert(e instanceof Error,"cancel must have a valid reason");const t=Promise.withResolvers();this.streamControllers[i].cancelCall=t;this.streamControllers[i].isClosed=!0;o.postMessage({sourceName:n,targetName:s,stream:Cc,streamId:\ -i,reason:wrapReason(e)});return t.promise}},a)}#Qe(e){const t=e.streamId,a=this.sourceName,r=e.sourceName,i=this.comObj,n=this,s=this.actionHandler[e.action],o={enqueue(e,n=1,s){if(this.isCancelled)return;const o=this.desiredSize;this.desiredSize-=n;if(o>0&&this.desiredSize<=0){this.sinkCapability=Promise.withResolvers();this.ready=this.sinkCapability.promise}i.postMessage({sourceName:a,targetName:r,stream:Ic,streamId:t,chunk:e},s)},close(){if(!this.isCancelled){this.isCancelled=!0;i.postMessage\ -({sourceName:a,targetName:r,stream:Fc,streamId:t});delete n.streamSinks[t]}},error(e){assert(e instanceof Error,"error must have a valid reason");if(!this.isCancelled){this.isCancelled=!0;i.postMessage({sourceName:a,targetName:r,stream:Tc,streamId:t,reason:wrapReason(e)})}},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};o.sinkCapability.resolve();o.ready=o.sinkCapability.promise;this.streamSinks[t]=o;Promise.try(s,e.data,o).t\ -hen((function(){i.postMessage({sourceName:a,targetName:r,stream:Dc,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:a,targetName:r,stream:Dc,streamId:t,reason:wrapReason(e)})}))}#Ze(e){const t=e.streamId,a=this.sourceName,r=e.sourceName,i=this.comObj,n=this.streamControllers[t],s=this.streamSinks[t];switch(e.stream){case Dc:e.success?n.startCall.resolve():n.startCall.reject(wrapReason(e.reason));break;case Mc:e.success?n.pullCall.resolve():n.pullCall.reject(wrapReason(e.reason));\ -break;case Oc:if(!s){i.postMessage({sourceName:a,targetName:r,stream:Mc,streamId:t,success:!0});break}s.desiredSize<=0&&e.desiredSize>0&&s.sinkCapability.resolve();s.desiredSize=e.desiredSize;Promise.try(s.onPull||onFn).then((function(){i.postMessage({sourceName:a,targetName:r,stream:Mc,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:a,targetName:r,stream:Mc,streamId:t,reason:wrapReason(e)})}));break;case Ic:assert(n,"enqueue should have stream controller");if(n.isClosed)break;n\ -.controller.enqueue(e.chunk);break;case Fc:assert(n,"close should have stream controller");if(n.isClosed)break;n.isClosed=!0;n.controller.close();this.#et(n,t);break;case Tc:assert(n,"error should have stream controller");n.controller.error(wrapReason(e.reason));this.#et(n,t);break;case vc:e.success?n.cancelCall.resolve():n.cancelCall.reject(wrapReason(e.reason));this.#et(n,t);break;case Cc:if(!s)break;const o=wrapReason(e.reason);Promise.try(s.onCancel||onFn,o).then((function(){i.postMessage({s\ -ourceName:a,targetName:r,stream:vc,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:a,targetName:r,stream:vc,streamId:t,reason:wrapReason(e)})}));s.sinkCapability.reject(o);s.isCancelled=!0;delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}async#et(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall?.promise,e.cancelCall?.promise]);delete this.streamControllers[t]}destroy(){this.#Je?.abort();this.#Je=null}}async function writeObject(e,\ -t,a,{encrypt:r=null}){const i=r?.createCipherTransform(e.num,e.gen);a.push(`${e.num} ${e.gen} obj\\n`);t instanceof Dict?await writeDict(t,a,i):t instanceof BaseStream?await writeStream(t,a,i):(Array.isArray(t)||ArrayBuffer.isView(t))&&await writeArray(t,a,i);a.push("\\nendobj\\n")}async function writeDict(e,t,a){t.push("<<");for(const r of e.getKeys()){t.push(` /${escapePDFName(r)} `);await writeValue(e.getRaw(r),t,a)}t.push(">>")}async function writeStream(e,t,a){let r=e.getBytes();const{dict:i}=\ -e,[n,s]=await Promise.all([i.getAsync("Filter"),i.getAsync("DecodeParms")]),o=isName(Array.isArray(n)?await i.xref.fetchIfRefAsync(n[0]):n,"FlateDecode");if(r.length>=256||o)try{const e=new CompressionStream("deflate"),t=e.writable.getWriter();await t.ready;t.write(r).then((async()=>{await t.ready;await t.close()})).catch((()=>{}));const a=await new Response(e.readable).arrayBuffer();r=new Uint8Array(a);let c,l;if(n){if(!o){c=Array.isArray(n)?[Name.get("FlateDecode"),...n]:[Name.get("FlateDecode\ -"),n];s&&(l=Array.isArray(s)?[null,...s]:[null,s])}}else c=Name.get("FlateDecode");c&&i.set("Filter",c);l&&i.set("DecodeParms",l)}catch(e){info(`writeStream - cannot compress data: "${e}".`)}let c=bytesToString(r);a&&(c=a.encryptString(c));i.set("Length",c.length);await writeDict(i,t,a);t.push(" stream\\n",c,"\\nendstream")}async function writeArray(e,t,a){t.push("[");let r=!0;for(const i of e){r?r=!1:t.push(" ");await writeValue(i,t,a)}t.push("]")}async function writeValue(e,t,a){if(e instanceof \ -Name)t.push(`/${escapePDFName(e.name)}`);else if(e instanceof Ref)t.push(`${e.num} ${e.gen} R`);else if(Array.isArray(e)||ArrayBuffer.isView(e))await writeArray(e,t,a);else if("string"==typeof e){a&&(e=a.encryptString(e));t.push(`(${escapeString(e)})`)}else"number"==typeof e?t.push(numberToString(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof Dict?await writeDict(e,t,a):e instanceof BaseStream?await writeStream(e,t,a):null===e?t.push("null"):warn(`Unhandled value in writer: ${typeof e\ -}, please file a bug.`)}function writeInt(e,t,a,r){for(let i=t+a-1;i>a-1;i--){r[i]=255&e;e>>=8}return a+t}function writeString(e,t,a){const r=e.length;for(let i=0;i<r;i++)a[t+i]=255&e.charCodeAt(i);return t+r}function updateXFA({xfaData:e,xfaDatasetsRef:t,changes:a,xref:r}){if(null===e){e=function writeXFADataForAcroform(e,t){const a=new SimpleXMLParser({hasAttributes:!0}).parseFromString(e);for(const{xfa:e}of t){if(!e)continue;const{path:t,value:r}=e;if(!t)continue;const i=parseXFAPath(t);let n\ -=a.documentElement.searchNode(i,0);!n&&i.length>1&&(n=a.documentElement.searchNode([i.at(-1)],0));n?n.childNodes=Array.isArray(r)?r.map((e=>new SimpleDOMNode("value",e))):[new SimpleDOMNode("#text",r)]:warn(`Node not found for path: ${t}`)}const r=[];a.documentElement.dump(r);return r.join("")}(r.fetchIfRef(t).getString(),a)}const i=new StringStream(e);i.dict=new Dict(r);i.dict.setIfName("Type","EmbeddedFile");a.put(t,{data:i})}function getIndexes(e){const t=[];for(const{ref:a}of e)a.num===t.at(\ --2)+t.at(-1)?t[t.length-1]+=1:t.push(a.num,1);return t}function computeIDs(e,t,a){if(Array.isArray(t.fileIds)&&t.fileIds.length>0){const r=function computeMD5(e,t){const a=Math.floor(Date.now()/1e3),r=t.filename||"",i=[a.toString(),r,e.toString(),...t.infoMap.values()],n=Math.sumPrecise(i.map((e=>e.length))),s=new Uint8Array(n);let o=0;for(const e of i)o=writeString(e,o,s);return bytesToString(calculateMD5(s,0,s.length))}(e,t);a.set("ID",[t.fileIds[0],r])}}async function incrementalUpdate({origi\ -nalData:e,xrefInfo:t,changes:a,xref:r=null,hasXfa:i=!1,xfaDatasetsRef:n=null,hasXfaDatasetsEntry:s=!1,needAppearances:o,acroFormRef:c=null,acroForm:l=null,xfaData:h=null,useXrefStream:u=!1}){await async function updateAcroform({xref:e,acroForm:t,acroFormRef:a,hasXfa:r,hasXfaDatasetsEntry:i,xfaDatasetsRef:n,needAppearances:s,changes:o}){!r||i||n||warn("XFA - Cannot save it");if(!s&&(!r||!n||i))return;const c=t.clone();if(r&&!i){const e=t.get("XFA").slice();e.splice(2,0,"datasets");e.splice(3,0,n)\ -;c.set("XFA",e)}s&&c.set("NeedAppearances",!0);o.put(a,{data:c})}({xref:r,acroForm:l,acroFormRef:c,hasXfa:i,hasXfaDatasetsEntry:s,xfaDatasetsRef:n,needAppearances:o,changes:a});i&&updateXFA({xfaData:h,xfaDatasetsRef:n,changes:a,xref:r});const d=function getTrailerDict(e,t,a){const r=new Dict(null);r.set("Prev",e.startXRef);const i=e.newRef;if(a){t.put(i,{data:""});r.set("Size",i.num+1);r.setIfName("Type","XRef")}else r.set("Size",i.num);null!==e.rootRef&&r.set("Root",e.rootRef);null!==e.infoRef&\ -&r.set("Info",e.infoRef);null!==e.encryptRef&&r.set("Encrypt",e.encryptRef);return r}(t,a,u),f=[],g=await async function writeChanges(e,t,a=[]){const r=[];for(const[i,{data:n}]of e.items())if(null!==n&&"string"!=typeof n){await writeObject(i,n,a,t);r.push({ref:i,data:a.join("")});a.length=0}else r.push({ref:i,data:n});return r.sort(((e,t)=>e.ref.num-t.ref.num))}(a,r,f);let p=e.length;const m=e.at(-1);if(10!==m&&13!==m){f.push("\\n");p+=1}for(const{data:e}of g)null!==e&&f.push(e);await(u?async fun\ -ction getXRefStreamTable(e,t,a,r,i){const n=[];let s=0,o=0;for(const{ref:e,data:r}of a){let a;s=Math.max(s,t);if(null!==r){a=Math.min(e.gen,65535);n.push([1,t,a]);t+=r.length}else{a=Math.min(e.gen+1,65535);n.push([0,0,a])}o=Math.max(o,a)}r.set("Index",getIndexes(a));const c=[1,getSizeInBytes(s),getSizeInBytes(o)];r.set("W",c);computeIDs(t,e,r);const l=Math.sumPrecise(c),h=new Uint8Array(l*n.length),u=new Stream(h);u.dict=r;let d=0;for(const[e,t,a]of n){d=writeInt(e,c[0],d,h);d=writeInt(t,c[1],d,\ -h);d=writeInt(a,c[2],d,h)}await writeObject(e.newRef,u,i,{});i.push("startxref\\n",t.toString(),"\\n%%EOF\\n")}(t,p,g,d,f):async function getXRefTable(e,t,a,r,i){i.push("xref\\n");const n=getIndexes(a);let s=0;for(const{ref:e,data:r}of a){if(e.num===n[s]){i.push(`${n[s]} ${n[s+1]}\\n`);s+=2}if(null!==r){i.push(`${t.toString().padStart(10,"0")} ${Math.min(e.gen,65535).toString().padStart(5,"0")} n\\r\\n`);t+=r.length}else i.push(`0000000000 ${Math.min(e.gen+1,65535).toString().padStart(5,"0")} f\\r\\n`)}c\ -omputeIDs(t,e,r);i.push("trailer\\n");await writeDict(r,i);i.push("\\nstartxref\\n",t.toString(),"\\n%%EOF\\n")}(t,p,g,d,f));const b=e.length+Math.sumPrecise(f.map((e=>e.length))),y=new Uint8Array(b);y.set(e);let w=e.length;for(const e of f)w=writeString(e,w,y);return y}class PDFWorkerStream{constructor(e){this._msgHandler=e;this._contentLength=null;this._fullRequestReader=null;this._rangeRequestReaders=[]}getFullReader(){assert(!this._fullRequestReader,"PDFWorkerStream.getFullReader can only be call\ -ed once.");this._fullRequestReader=new PDFWorkerStreamReader(this._msgHandler);return this._fullRequestReader}getRangeReader(e,t){const a=new PDFWorkerStreamRangeReader(e,t,this._msgHandler);this._rangeRequestReaders.push(a);return a}cancelAllRequests(e){this._fullRequestReader?.cancel(e);for(const t of this._rangeRequestReaders.slice(0))t.cancel(e)}}class PDFWorkerStreamReader{constructor(e){this._msgHandler=e;this.onProgress=null;this._contentLength=null;this._isRangeSupported=!1;this._isStrea\ -mingSupported=!1;const t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader();this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then((e=>{this._isStreamingSupported=e.isStreamingSupported;this._isRangeSupported=e.isRangeSupported;this._contentLength=e.contentLength}))}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this.\ -_isRangeSupported}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class PDFWorkerStreamRangeReader{constructor(e,t,a){this._msgHandler=a;this.onProgress=null;const r=this._msgHandler.sendWithStream("GetRangeReader",{begin:e,end:t});this._reader=r.getReader()}get isStreamingSupported(){return!1}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e\ -.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class WorkerTask{constructor(e){this.name=e;this.terminated=!1;this._capability=Promise.withResolvers()}get finished(){return this._capability.promise}finish(){this._capability.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}}class WorkerMessageHandler{static{"undefined"==typeof window&&!e&&"undefined"!=typeof self&&"function"==typeof self.postMessage&&"onmessage"in \ -self&&this.initializeFromPort(self)}static setup(e,t){let a=!1;e.on("test",(t=>{if(!a){a=!0;e.send("test",t instanceof Uint8Array)}}));e.on("configure",(e=>{!function setVerbosityLevel(e){Number.isInteger(e)&&(da=e)}(e.verbosity)}));e.on("GetDocRequest",(e=>this.createDocumentHandler(e,t)))}static createDocumentHandler(e,t){let a,r=!1,i=null;const n=new Set,s=getVerbosityLevel(),{docId:o,apiVersion:c}=e,l="5.4.54";if(c!==l)throw new Error(`The API version "${c}" does not match the Worker version\ - "${l}".`);const buildMsg=(e,t)=>`The \\`${e}.prototype\\` contains unexpected enumerable property "${t}", thus breaking e.g. \\`for...in\\` iteration of ${e}s.`;for(const e in{})throw new Error(buildMsg("Object",e));for(const e in[])throw new Error(buildMsg("Array",e));const h=o+"_worker";let u=new MessageHandler(h,o,t);function ensureNotTerminated(){if(r)throw new Error("Worker was terminated")}function startWorkerTask(e){n.add(e)}function finishWorkerTask(e){e.finish();n.delete(e)}async function \ -loadDocument(e){await a.ensureDoc("checkHeader");await a.ensureDoc("parseStartXRef");await a.ensureDoc("parse",[e]);await a.ensureDoc("checkFirstPage",[e]);await a.ensureDoc("checkLastPage",[e]);const t=await a.ensureDoc("isPureXfa");if(t){const e=new WorkerTask("loadXfaResources");startWorkerTask(e);await a.ensureDoc("loadXfaResources",[u,e]);finishWorkerTask(e)}const[r,i]=await Promise.all([a.ensureDoc("numPages"),a.ensureDoc("fingerprints")]);return{numPages:r,fingerprints:i,htmlForXfa:t?awai\ -t a.ensureDoc("htmlForXfa"):null}}function setupDoc(e){function onSuccess(e){ensureNotTerminated();u.send("GetDoc",{pdfInfo:e})}function onFailure(e){ensureNotTerminated();if(e instanceof PasswordException){const t=new WorkerTask(`PasswordException: response ${e.code}`);startWorkerTask(t);u.sendWithPromise("PasswordRequest",e).then((function({password:e}){finishWorkerTask(t);a.updatePassword(e);pdfManagerReady()})).catch((function(){finishWorkerTask(t);u.send("DocException",e)}))}else u.send("Do\ -cException",wrapReason(e))}function pdfManagerReady(){ensureNotTerminated();loadDocument(!1).then(onSuccess,(function(e){ensureNotTerminated();e instanceof XRefParseException?a.requestLoadedStream().then((function(){ensureNotTerminated();loadDocument(!0).then(onSuccess,onFailure)})):onFailure(e)}))}ensureNotTerminated();(async function getPdfManager({data:e,password:t,disableAutoFetch:a,rangeChunkSize:r,length:n,docBaseUrl:s,enableXfa:c,evaluatorOptions:l}){const h={source:null,disableAutoFetch:\ -a,docBaseUrl:s,docId:o,enableXfa:c,evaluatorOptions:l,handler:u,length:n,password:t,rangeChunkSize:r};if(e){h.source=e;return new LocalPdfManager(h)}const d=new PDFWorkerStream(u),f=d.getFullReader(),g=Promise.withResolvers();let p,m=[],b=0;f.headersReady.then((function(){if(f.isRangeSupported){h.source=d;h.length=f.contentLength;h.disableAutoFetch||=f.isStreamingSupported;p=new NetworkPdfManager(h);for(const e of m)p.sendProgressiveData(e);m=[];g.resolve(p);i=null}})).catch((function(e){g.rejec\ -t(e);i=null}));new Promise((function(e,t){const readChunk=function({value:e,done:a}){try{ensureNotTerminated();if(a){if(!p){const e=arrayBuffersToBytes(m);m=[];n&&e.length!==n&&warn("reported HTTP length is different from actual");h.source=e;p=new LocalPdfManager(h);g.resolve(p)}i=null;return}b+=e.byteLength;f.isStreamingSupported||u.send("DocProgress",{loaded:b,total:Math.max(b,f.contentLength||0)});p?p.sendProgressiveData(e):m.push(e);f.read().then(readChunk,t)}catch(e){t(e)}};f.read().then(re\ -adChunk,t)})).catch((function(e){g.reject(e);i=null}));i=e=>{d.cancelAllRequests(e)};return g.promise})(e).then((function(e){if(r){e.terminate(new AbortException("Worker was terminated."));throw new Error("Worker was terminated")}a=e;a.requestLoadedStream(!0).then((e=>{u.send("DataLoaded",{length:e.bytes.byteLength})}))})).then(pdfManagerReady,onFailure)}u.on("GetPage",(function(e){return a.getPage(e.pageIndex).then((function(e){return Promise.all([a.ensure(e,"rotate"),a.ensure(e,"ref"),a.ensure\ -(e,"userUnit"),a.ensure(e,"view")]).then((function([e,t,a,r]){return{rotate:e,ref:t,refStr:t?.toString()??null,userUnit:a,view:r}}))}))}));u.on("GetPageIndex",(function(e){const t=Ref.get(e.num,e.gen);return a.ensureCatalog("getPageIndex",[t])}));u.on("GetDestinations",(function(e){return a.ensureCatalog("destinations")}));u.on("GetDestination",(function(e){return a.ensureCatalog("getDestination",[e.id])}));u.on("GetPageLabels",(function(e){return a.ensureCatalog("pageLabels")}));u.on("GetPageLa\ -yout",(function(e){return a.ensureCatalog("pageLayout")}));u.on("GetPageMode",(function(e){return a.ensureCatalog("pageMode")}));u.on("GetViewerPreferences",(function(e){return a.ensureCatalog("viewerPreferences")}));u.on("GetOpenAction",(function(e){return a.ensureCatalog("openAction")}));u.on("GetAttachments",(function(e){return a.ensureCatalog("attachments")}));u.on("GetDocJSActions",(function(e){return a.ensureCatalog("jsActions")}));u.on("GetPageJSActions",(function({pageIndex:e}){return a.\ -getPage(e).then((e=>a.ensure(e,"jsActions")))}));u.on("GetOutline",(function(e){return a.ensureCatalog("documentOutline")}));u.on("GetOptionalContentConfig",(function(e){return a.ensureCatalog("optionalContentConfig")}));u.on("GetPermissions",(function(e){return a.ensureCatalog("permissions")}));u.on("GetMetadata",(function(e){return Promise.all([a.ensureDoc("documentInfo"),a.ensureCatalog("metadata")])}));u.on("GetMarkInfo",(function(e){return a.ensureCatalog("markInfo")}));u.on("GetData",(func\ -tion(e){return a.requestLoadedStream().then((e=>e.bytes))}));u.on("GetAnnotations",(function({pageIndex:e,intent:t}){return a.getPage(e).then((function(a){const r=new WorkerTask(`GetAnnotations: page ${e}`);startWorkerTask(r);return a.getAnnotationsData(u,r,t).then((e=>{finishWorkerTask(r);return e}),(e=>{finishWorkerTask(r);throw e}))}))}));u.on("GetFieldObjects",(function(e){return a.ensureDoc("fieldObjects").then((e=>e?.allFields||null))}));u.on("HasJSActions",(function(e){return a.ensureDoc(\ -"hasJSActions")}));u.on("GetCalculationOrderIds",(function(e){return a.ensureDoc("calculationOrderIds")}));u.on("SaveDocument",(async function({isPureXfa:e,numPages:t,annotationStorage:r,filename:i}){const n=[a.requestLoadedStream(),a.ensureCatalog("acroForm"),a.ensureCatalog("acroFormRef"),a.ensureDoc("startXRef"),a.ensureDoc("xref"),a.ensureDoc("linearization"),a.ensureCatalog("structTreeRoot")],s=new RefSetCache,o=[],c=e?null:getNewAnnotationsMap(r),[l,h,d,f,g,p,m]=await Promise.all(n),b=g.tr\ -ailer.getRaw("Root")||null;let y;if(c){m?await m.canUpdateStructTree({pdfManager:a,newAnnotationsByPage:c})&&(y=m):await StructTreeRoot.canCreateStructureTree({catalogRef:b,pdfManager:a,newAnnotationsByPage:c})&&(y=null);const e=AnnotationFactory.generateImages(r.values(),g,a.evaluatorOptions.isOffscreenCanvasSupported),t=void 0===y?o:[];for(const[r,i]of c)t.push(a.getPage(r).then((t=>{const a=new WorkerTask(`Save (editor): page ${r}`);startWorkerTask(a);return t.saveNewAnnotations(u,a,i,e,s).fi\ -nally((function(){finishWorkerTask(a)}))})));null===y?o.push(Promise.all(t).then((async()=>{await StructTreeRoot.createStructureTree({newAnnotationsByPage:c,xref:g,catalogRef:b,pdfManager:a,changes:s})}))):y&&o.push(Promise.all(t).then((async()=>{await y.updateStructureTree({newAnnotationsByPage:c,pdfManager:a,changes:s})})))}if(e)o.push(a.ensureDoc("serializeXfaData",[r]));else for(let e=0;e<t;e++)o.push(a.getPage(e).then((function(t){const a=new WorkerTask(`Save: page ${e}`);startWorkerTask(a)\ -;return t.save(u,a,r,s).finally((function(){finishWorkerTask(a)}))})));const w=await Promise.all(o);let x=null;if(e){x=w[0];if(!x)return l.bytes}else if(0===s.size)return l.bytes;const S=d&&h instanceof Dict&&s.values().some((e=>e.needAppearances)),k=h instanceof Dict&&h.get("XFA")||null;let C=null,v=!1;if(Array.isArray(k)){for(let e=0,t=k.length;e<t;e+=2)if("datasets"===k[e]){C=k[e+1];v=!0}null===C&&(C=g.getNewTemporaryRef())}else k&&warn("Unsupported XFA type.");let F=Object.create(null);if(g.\ -trailer){const e=new Map,t=g.trailer.get("Info")||null;if(t instanceof Dict)for(const[a,r]of t)"string"==typeof r&&e.set(a,stringToPDFString(r));F={rootRef:b,encryptRef:g.trailer.getRaw("Encrypt")||null,newRef:g.getNewTemporaryRef(),infoRef:g.trailer.getRaw("Info")||null,infoMap:e,fileIds:g.trailer.get("ID")||null,startXRef:p?f:g.lastXRefStreamPos??f,filename:i}}return incrementalUpdate({originalData:l.bytes,xrefInfo:F,changes:s,xref:g,hasXfa:!!k,xfaDatasetsRef:C,hasXfaDatasetsEntry:v,needAppear\ -ances:S,acroFormRef:d,acroForm:h,xfaData:x,useXrefStream:isDict(g.topDict,"XRef")}).finally((()=>{g.resetNewTemporaryRef()}))}));u.on("GetOperatorList",(function(e,t){const r=e.pageIndex;a.getPage(r).then((function(a){const i=new WorkerTask(`GetOperatorList: page ${r}`);startWorkerTask(i);const n=s>=Ae?Date.now():0;a.getOperatorList({handler:u,sink:t,task:i,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage,modifiedIds:e.modifiedIds}).then((function(e){finishWorkerTask(i);\ -n&&info(`page=${r+1} - getOperatorList: time=${Date.now()-n}ms, len=${e.length}`);t.close()}),(function(e){finishWorkerTask(i);i.terminated||t.error(e)}))}))}));u.on("GetTextContent",(function(e,t){const{pageIndex:r,includeMarkedContent:i,disableNormalization:n}=e;a.getPage(r).then((function(e){const a=new WorkerTask("GetTextContent: page "+r);startWorkerTask(a);const o=s>=Ae?Date.now():0;e.extractTextContent({handler:u,task:a,sink:t,includeMarkedContent:i,disableNormalization:n}).then((function\ -(){finishWorkerTask(a);o&&info(`page=${r+1} - getTextContent: time=`+(Date.now()-o)+"ms");t.close()}),(function(e){finishWorkerTask(a);a.terminated||t.error(e)}))}))}));u.on("GetStructTree",(function(e){return a.getPage(e.pageIndex).then((e=>a.ensure(e,"getStructTree")))}));u.on("FontFallback",(function(e){return a.fontFallback(e.id,u)}));u.on("Cleanup",(function(e){return a.cleanup(!0)}));u.on("Terminate",(function(e){r=!0;const t=[];if(a){a.terminate(new AbortException("Worker was terminated."\ -));const e=a.cleanup();t.push(e);a=null}else clearGlobalCaches();i?.(new AbortException("Worker was terminated."));for(const e of n){t.push(e.finished);e.terminate()}return Promise.all(t).then((function(){u.destroy();u=null}))}));u.on("Ready",(function(t){setupDoc(e);e=null}));return h}static initializeFromPort(e){const t=new MessageHandler("worker","main",e);this.setup(t,e);t.send("ready",null)}}globalThis.pdfjsWorker={WorkerMessageHandler};export{WorkerMessageHandler};',pdf_worker_min$1=Object. -freeze(Object.defineProperty({__proto__:null,default:pdf_worker_min},Symbol.toStringTag,{value:"Module"}));export{app,start}; +onnection error - please try again"),setTimeout(()=>{set$1(apiKeyState,"idle")},3e3)}}}function handleApiKeyKeydown(event2){event2.key===KeyboardKey.ENTER&&handleSaveApiKey()}var div=root$4(),div_1=child(div),div_2=child(div_1),div_3=child(div_2),node2=child(div_3);Triangle_alert(node2,{class:"h-8 w-8 text-destructive"}),reset(div_3);var p2=sibling(div_3,4),text2=child(p2,!0);reset(p2),reset(div_2);var node_1=sibling(div_2,2);{var consequent=$$anchor2=>{var div_4=root_1$1(),node_2=child(div_4);Button( +node_2,{onclick:handleShowApiKeyInput,variant:"outline",class:"w-full",children:($$anchor3,$$slotProps)=>{var fragment=root_2$1(),node_3=first_child(fragment);Key(node_3,{class:"h-4 w-4"}),next$1(),append($$anchor3,fragment)},$$slots:{default:!0}}),reset(div_4),transition(1,div_4,()=>fly,()=>({y:10,duration:300,delay:200})),append($$anchor2,div_4)};if_block(node_1,$$render=>{get$3(isAccessDeniedError)&&!get$3(showApiKeyInput)&&$$render(consequent)})}var node_4=sibling(node_1,2);{var consequent_8=$$anchor2=>{ +var div_5=root_3$1(),div_6=child(div_5),node_5=child(div_6);Label(node_5,{for:"api-key-input",class:"text-sm font-medium",children:($$anchor3,$$slotProps)=>{next$1();var text_1=text$8("API Key");append($$anchor3,text_1)},$$slots:{default:!0}});var div_7=sibling(node_5,2),node_6=child(div_7);{let $0=user_derived(()=>get$3(apiKeyState)==="error"?"border-destructive":get$3(apiKeyState)==="success"?"border-green-500":""),$1=user_derived(()=>get$3(apiKeyState)==="validating");Input(node_6,{id:"api-ke\ +y-input",placeholder:"Enter your API key...",onkeydown:handleApiKeyKeydown,get class(){return`w-full pr-10 ${get$3($0)??""}`},get disabled(){return get$3($1)},get value(){return get$3(apiKeyInput)},set value($$value){set$1(apiKeyInput,$$value,!0)}})}var node_7=sibling(node_6,2);{var consequent_1=$$anchor3=>{var div_8=root_5$1(),node_8=child(div_8);Refresh_cw(node_8,{class:"h-4 w-4 animate-spin text-muted-foreground"}),reset(div_8),append($$anchor3,div_8)},consequent_2=$$anchor3=>{var div_9=root_6(), +node_9=child(div_9);Circle_check_big(node_9,{class:"h-4 w-4 text-green-500"}),reset(div_9),transition(1,div_9,()=>scale,()=>({duration:200,start:.8})),append($$anchor3,div_9)},consequent_3=$$anchor3=>{var div_10=root_7(),node_10=child(div_10);Circle_x(node_10,{class:"h-4 w-4 text-destructive"}),reset(div_10),transition(1,div_10,()=>scale,()=>({duration:200,start:.8})),append($$anchor3,div_10)};if_block(node_7,$$render=>{get$3(apiKeyState)==="validating"?$$render(consequent_1):get$3(apiKeyState)=== +"success"?$$render(consequent_2,1):get$3(apiKeyState)==="error"&&$$render(consequent_3,2)})}reset(div_7);var node_11=sibling(div_7,2);{var consequent_4=$$anchor3=>{var p_1=root_8(),text_2=child(p_1,!0);reset(p_1),template_effect(()=>set_text(text_2,get$3(apiKeyError))),transition(1,p_1,()=>fly,()=>({y:-10,duration:200})),append($$anchor3,p_1)};if_block(node_11,$$render=>{get$3(apiKeyError)&&$$render(consequent_4)})}var node_12=sibling(node_11,2);{var consequent_5=$$anchor3=>{var p_2=root_9();transition( +1,p_2,()=>fly,()=>({y:-10,duration:200})),append($$anchor3,p_2)};if_block(node_12,$$render=>{get$3(apiKeyState)==="success"&&$$render(consequent_5)})}reset(div_6);var div_11=sibling(div_6,2),node_13=child(div_11);{let $0=user_derived(()=>!get$3(apiKeyInput).trim()||get$3(apiKeyState)==="validating"||get$3(apiKeyState)==="success");Button(node_13,{onclick:handleSaveApiKey,get disabled(){return get$3($0)},class:"flex-1",children:($$anchor3,$$slotProps)=>{var fragment_1=comment$2(),node_14=first_child( +fragment_1);{var consequent_6=$$anchor4=>{var fragment_2=root_11(),node_15=first_child(fragment_2);Refresh_cw(node_15,{class:"h-4 w-4 animate-spin"}),next$1(),append($$anchor4,fragment_2)},consequent_7=$$anchor4=>{var text_3=text$8("Success!");append($$anchor4,text_3)},alternate=$$anchor4=>{var text_4=text$8("Save & Retry");append($$anchor4,text_4)};if_block(node_14,$$render=>{get$3(apiKeyState)==="validating"?$$render(consequent_6):get$3(apiKeyState)==="success"?$$render(consequent_7,1):$$render( +alternate,-1)})}append($$anchor3,fragment_1)},$$slots:{default:!0}})}var node_16=sibling(node_13,2);{let $0=user_derived(()=>get$3(apiKeyState)==="validating");Button(node_16,{onclick:()=>{set$1(showApiKeyInput,!1),set$1(apiKeyState,"idle"),set$1(apiKeyError,"")},variant:"outline",class:"flex-1",get disabled(){return get$3($0)},children:($$anchor3,$$slotProps)=>{next$1();var text_5=text$8("Cancel");append($$anchor3,text_5)},$$slots:{default:!0}})}reset(div_11),reset(div_5),transition(1,div_5,()=>fly, +()=>({y:10,duration:300,delay:200})),append($$anchor2,div_5)};if_block(node_4,$$render=>{get$3(showApiKeyInput)&&$$render(consequent_8)})}var node_17=sibling(node_4,2);{var consequent_10=$$anchor2=>{var div_12=root_15(),node_18=child(div_12);Button(node_18,{onclick:handleRetryConnection,get disabled(){return get$3(isServerLoading)},class:"w-full",children:($$anchor3,$$slotProps)=>{var fragment_3=comment$2(),node_19=first_child(fragment_3);{var consequent_9=$$anchor4=>{var fragment_4=root_17(),node_20=first_child( +fragment_4);Refresh_cw(node_20,{class:"h-4 w-4 animate-spin"}),next$1(),append($$anchor4,fragment_4)},alternate_1=$$anchor4=>{var fragment_5=root_18(),node_21=first_child(fragment_5);Refresh_cw(node_21,{class:"h-4 w-4"}),next$1(),append($$anchor4,fragment_5)};if_block(node_19,$$render=>{get$3(isServerLoading)?$$render(consequent_9):$$render(alternate_1,-1)})}append($$anchor3,fragment_3)},$$slots:{default:!0}}),reset(div_12),transition(1,div_12,()=>fly,()=>({y:10,duration:300,delay:200})),append( +$$anchor2,div_12)};if_block(node_17,$$render=>{showRetry()&&$$render(consequent_10)})}var node_22=sibling(node_17,2);{var consequent_11=$$anchor2=>{var div_13=root_19();transition(1,div_13,()=>fly,()=>({y:10,duration:300,delay:400})),append($$anchor2,div_13)};if_block(node_22,$$render=>{showTroubleshooting()&&$$render(consequent_11)})}reset(div_1),reset(div),template_effect(()=>{set_class(div,1,`flex h-full items-center justify-center ${className()??""}`),set_text(text2,$$props.error)}),transition( +1,div_2,()=>fade,()=>({duration:300})),append($$anchor,div),pop()}var root$3=from_html('<div><div class="text-center"><div class="mb-4"><div class="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-muted"><!></div> <h2 class="mb-2 text-xl font-semibold">Connecting to Server</h2> <p class="text-sm text-muted-foreground"> </p></div> <div class="mt-4"><!></div></div></div>');function ServerLoadingSplash($$anchor,$$props){let className=prop($$props,"class",3,""),message=prop($$props, +"message",3,"Initializing connection to llama.cpp server...");var div=root$3(),div_1=child(div),div_2=child(div_1),div_3=child(div_2),node2=child(div_3);Server(node2,{class:"h-8 w-8 animate-pulse text-muted-foreground"}),reset(div_3);var p2=sibling(div_3,4),text2=child(p2,!0);reset(p2),reset(div_2);var div_4=sibling(div_2,2),node_1=child(div_4);ServerStatus(node_1,{class:"justify-center"}),reset(div_4),reset(div_1),reset(div),template_effect(()=>{set_class(div,1,`flex h-full items-center justify\ +-center ${className()??""}`),set_text(text2,message())}),transition(1,div_2,()=>fade,()=>({duration:300})),append($$anchor,div)}function useSettingsNavigation(){const subroute=proxy({activePanel:"chat",chatSettingsRef:void 0}),isSettingsRoute=user_derived(()=>!!page$1.route.id?.startsWith("/settings"));return beforeNavigate(({to,from})=>{to?.route?.id?.startsWith("/settings/chat")&&!from?.route?.id?.startsWith("/settings/chat")&&(settingsReferrer.url=window.location.hash||"#/")}),user_effect(()=>{ +subroute.activePanel==="settings"&&subroute.chatSettingsRef&&subroute.chatSettingsRef.reset()}),user_effect(()=>{page$1.url,subroute.activePanel="chat"}),{get panel(){return subroute},get isSettingsRoute(){return get$3(isSettingsRoute)}}}var root_5=from_html("<div><!></div>"),root_2=from_html('<div class="flex h-screen w-full"><!> <!> <!> <!></div>'),root_1=from_html("<!> <!> <!> <!>",1);function _layout$2($$anchor,$$props){push$1($$props,!0);let alwaysShowSidebarOnDesktop=user_derived(()=>config$1(). +alwaysShowSidebarOnDesktop),isMobile=new IsMobile,isDesktop=user_derived(()=>!isMobile.current),sidebarOpen=state$1(!1),mounted=state$1(!1),innerHeight=state$1(void 0),chatSidebar=state$1(void 0),titleUpdateDialogOpen=state$1(!1),titleUpdateCurrentTitle=state$1(""),titleUpdateNewTitle=state$1(""),titleUpdateResolve=null;const panelNav=useSettingsNavigation(),{handleKeydown}=useKeyboardShortcuts({editActiveConversation:()=>get$3(chatSidebar)?.editActiveConversation?.()});function handleTitleUpdateCancel(){ +set$1(titleUpdateDialogOpen,!1),titleUpdateResolve&&(titleUpdateResolve(!1),titleUpdateResolve=null)}function handleTitleUpdateConfirm(){set$1(titleUpdateDialogOpen,!1),titleUpdateResolve&&(titleUpdateResolve(!0),titleUpdateResolve=null)}onMount$1(()=>{set$1(mounted,!0)}),user_effect(()=>{if(get$3(alwaysShowSidebarOnDesktop)&&get$3(isDesktop)){set$1(sidebarOpen,!0);return}}),user_effect(()=>{serverStore.props||untrack$1(()=>{serverStore.fetch()})}),user_effect(()=>{serverStore.props&&settingsStore. +syncWithServerDefaults()});let routerModelsFetched=!1;user_effect(()=>{const isRouter=isRouterMode(),modelsCount=modelsStore.models.length;isRouter&&modelsCount>0&&!routerModelsFetched&&(routerModelsFetched=!0,untrack$1(()=>{modelsStore.fetchRouterModels()}))}),user_effect(()=>{const enabledServers=mcpStore.getServers().filter(s2=>s2.enabled&&s2.url.trim());enabledServers.length>0&&untrack$1(()=>{mcpStore.runHealthChecksForServers(enabledServers,!1).catch(error2=>{console.warn("[layout] MCP heal\ +th checks failed:",error2)})})}),user_effect(()=>{const apiKey=config$1().apiKey;if((page$1.route.id==="/(chat)"||page$1.route.id==="/(chat)/chat/[id]")&&page$1.status!==401&&page$1.status!==403){const headers={"Content-Type":"application/json"};apiKey&&apiKey.trim()!==""&&(headers.Authorization=`Bearer ${apiKey.trim()}`),fetch(`${base}/props`,{headers}).then(response=>{(response.status===401||response.status===403)&&window.location.reload()}).catch(e=>{console.error("Error checking API key:",e)})}}), +user_effect(()=>{conversationsStore.setTitleUpdateConfirmationCallback(async(currentTitle,newTitle)=>new Promise(resolve2=>{set$1(titleUpdateCurrentTitle,currentTitle,!0),set$1(titleUpdateNewTitle,newTitle,!0),titleUpdateResolve=resolve2,set$1(titleUpdateDialogOpen,!0)}))});var fragment=comment$2();event("keydown",$window,handleKeydown);var node2=first_child(fragment);component(node2,()=>Provider,($$anchor2,Tooltip_Provider)=>{Tooltip_Provider($$anchor2,{get delayDuration(){return TOOLTIP_DELAY_DURATION}, +children:($$anchor3,$$slotProps)=>{var fragment_1=root_1(),node_1=first_child(fragment_1);Mode_watcher(node_1,{});var node_2=sibling(node_1,2);Toaster(node_2,{richColors:!0});var node_3=sibling(node_2,2);DialogConversationTitleUpdate(node_3,{get currentTitle(){return get$3(titleUpdateCurrentTitle)},get newTitle(){return get$3(titleUpdateNewTitle)},onConfirm:handleTitleUpdateConfirm,onCancel:handleTitleUpdateCancel,get open(){return get$3(titleUpdateDialogOpen)},set open($$value){set$1(titleUpdateDialogOpen, +$$value,!0)}});var node_4=sibling(node_3,2);component(node_4,()=>Sidebar_provider,($$anchor4,Sidebar_Provider)=>{Sidebar_Provider($$anchor4,{get open(){return get$3(sidebarOpen)},set open($$value){set$1(sidebarOpen,$$value,!0)},children:($$anchor5,$$slotProps2)=>{var div=root_2();let styles2;var node_5=child(div);component(node_5,()=>Sidebar,($$anchor6,Sidebar_Root)=>{Sidebar_Root($$anchor6,{variant:"floating",class:"h-full",children:($$anchor7,$$slotProps3)=>{bind_this(ChatSidebar($$anchor7,{}), +$$value=>set$1(chatSidebar,$$value,!0),()=>get$3(chatSidebar))},$$slots:{default:!0}})});var node_6=sibling(node_5,2);{var consequent_1=$$anchor6=>{var fragment_3=comment$2(),node_7=first_child(fragment_3);{var consequent=$$anchor7=>{var div_1=root_5(),node_8=child(div_1);{let $0=user_derived(()=>get$3(sidebarOpen)?"left-[calc(var(--sidebar-width)+0.75rem)] max-md:hidden":"left-0!");component(node_8,()=>Sidebar_trigger,($$anchor8,Sidebar_Trigger)=>{Sidebar_Trigger($$anchor8,{get class(){return`t\ +ransition-left absolute left-0 z-[900] duration-200 ease-linear ${get$3($0)??""}`},style:"translate: 1rem 1rem;"})})}reset(div_1),transition(1,div_1,()=>fade,()=>({duration:200})),append($$anchor7,div_1)};if_block(node_7,$$render=>{get$3(mounted)&&$$render(consequent)})}append($$anchor6,fragment_3)};if_block(node_6,$$render=>{!(get$3(alwaysShowSidebarOnDesktop)&&get$3(isDesktop))&&!(panelNav.isSettingsRoute&&!get$3(isDesktop))&&$$render(consequent_1)})}var node_9=sibling(node_6,2);{var consequent_2=$$anchor6=>{ +DesktopIconStrip($$anchor6,{get sidebarOpen(){return get$3(sidebarOpen)},onSearchClick:()=>{get$3(chatSidebar)?.activateSearchMode&&get$3(chatSidebar).activateSearchMode(),set$1(sidebarOpen,!0)}})};if_block(node_9,$$render=>{get$3(isDesktop)&&!get$3(alwaysShowSidebarOnDesktop)&&$$render(consequent_2)})}var node_10=sibling(node_9,2);component(node_10,()=>Sidebar_inset,($$anchor6,Sidebar_Inset)=>{Sidebar_Inset($$anchor6,{class:"flex flex-1 flex-col overflow-hidden",children:($$anchor7,$$slotProps3)=>{ +var fragment_5=comment$2(),node_11=first_child(fragment_5);snippet(node_11,()=>$$props.children??noop$3),append($$anchor7,fragment_5)},$$slots:{default:!0}})}),reset(div),template_effect(()=>styles2=set_style(div,"",styles2,{height:`${get$3(innerHeight)??""}px`})),append($$anchor5,div)},$$slots:{default:!0}})}),append($$anchor3,fragment_1)},$$slots:{default:!0}})}),bind_window_size("innerHeight",$$value=>set$1(innerHeight,$$value,!0)),append($$anchor,fragment),pop()}const _0=Object.freeze(Object. +defineProperty({__proto__:null,component:_layout$2},Symbol.toStringTag,{value:"Module"})),getStores=()=>{const stores$1=stores;return{page:{subscribe:stores$1.page.subscribe},navigating:{subscribe:stores$1.navigating.subscribe},updated:stores$1.updated}},page={subscribe(fn){return getStores().page.subscribe(fn)}};var root_3=from_html('<div class="flex h-full items-center justify-center"><div class="w-full max-w-md px-4 text-center"><div class="mb-6"><div class="mx-auto mb-4 flex h-16 w-16 items-\ +center justify-center rounded-full bg-destructive/10"><svg class="h-8 w-8 text-destructive" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"></path></svg></div> <h1 class="mb-2 text-2xl font-bold"> </h1> <p class="text-muted-foreground"> </p></div> <button class="rounded-md bg-prima\ +ry px-4 py-2 text-primary-foreground hover:bg-primary/90">Go Home</button></div></div>');function _error($$anchor,$$props){push$1($$props,!0);const $page=()=>store_get(page,"$page",$$stores),[$$stores,$$cleanup]=setup_stores();let error2=user_derived(()=>$page().error),status=user_derived(()=>$page().status),isApiKeyError=user_derived(()=>get$3(status)===401||get$3(status)===403||get$3(error2)?.message?.toLowerCase().includes("access denied")||get$3(error2)?.message?.toLowerCase().includes("unau\ +thorized")||get$3(error2)?.message?.toLowerCase().includes("invalid api key"));function handleRetry(){goto("#/")}var fragment=comment$2();head$1("1j96wlh",$$anchor2=>{deferred_template_effect(()=>{$document.title=`Error ${get$3(status)??""} - WebUI`})});var node2=first_child(fragment);{var consequent=$$anchor2=>{{let $0=user_derived(()=>get$3(error2)?.message||"Access denied - check server permissions");ServerErrorSplash($$anchor2,{get error(){return get$3($0)},onRetry:handleRetry,showRetry:!1,showTroubleshooting:!1})}}, +alternate=$$anchor2=>{var div=root_3(),div_1=child(div),div_2=child(div_1),h1=sibling(child(div_2),2),text2=child(h1);reset(h1);var p2=sibling(h1,2),text_1=child(p2,!0);reset(p2),reset(div_2);var button=sibling(div_2,2);reset(div_1),reset(div),template_effect(()=>{set_text(text2,`Error ${get$3(status)??""}`),set_text(text_1,get$3(error2)?.message||"Something went wrong")}),delegated("click",button,()=>goto("#/")),append($$anchor2,div)};if_block(node2,$$render=>{get$3(isApiKeyError)?$$render(consequent): +$$render(alternate,-1)})}append($$anchor,fragment),pop(),$$cleanup()}delegate(["click"]);const _1=Object.freeze(Object.defineProperty({__proto__:null,component:_error},Symbol.toStringTag,{value:"Module"}));var root$2=from_html("<!> <!>",1);function _layout$1($$anchor,$$props){push$1($$props,!0);let showCenteredEmpty=user_derived(()=>!page$1.params.id);var fragment=root$2(),node2=first_child(fragment);ChatScreen(node2,{get showCenteredEmpty(){return get$3(showCenteredEmpty)}});var node_1=sibling( +node2,2);snippet(node_1,()=>$$props.children??noop$3),append($$anchor,fragment),pop()}const _2=Object.freeze(Object.defineProperty({__proto__:null,component:_layout$1},Symbol.toStringTag,{value:"Module"}));var root$1=from_html('<div class="relative h-full"><div class="fixed top-4.5 right-4 z-50 md:hidden"><!></div> <div class="min-h-full"><!></div></div>');function _layout($$anchor,$$props){push$1($$props,!0);let previousRouteId=state$1(null);user_effect(()=>{const currentId=page$1.route.id;return()=>{ +set$1(previousRouteId,currentId,!0)}});function handleClose(){const prevIsSettings=get$3(previousRouteId)?.startsWith("/settings");window.history.length>1&&!prevIsSettings?history.back():goto("#/")}var div=root$1(),div_1=child(div),node2=child(div_1);ActionIcon(node2,{get icon(){return X},tooltip:"Close",onclick:handleClose}),reset(div_1);var div_2=sibling(div_1,2),node_1=child(div_2);snippet(node_1,()=>$$props.children??noop$3),reset(div_2),reset(div),append($$anchor,div),pop()}const _3=Object. +freeze(Object.defineProperty({__proto__:null,component:_layout},Symbol.toStringTag,{value:"Module"})),load$1=async({fetch:fetch2})=>{await validateApiKey(fetch2)},_page$6=Object.freeze(Object.defineProperty({__proto__:null,load:load$1},Symbol.toStringTag,{value:"Module"}));function _page$5($$anchor,$$props){push$1($$props,!0);let qParam=user_derived(()=>page$1.url.searchParams.get("q")),modelParam=user_derived(()=>page$1.url.searchParams.get("model")),newChatParam=user_derived(()=>page$1.url.searchParams. +get("new_chat")),showModelNotAvailable=state$1(!1),requestedModelName=state$1(""),availableModelNames=user_derived(()=>modelOptions().map(m=>m.model));function clearUrlParams(){const url2=new URL(page$1.url);url2.searchParams.delete("q"),url2.searchParams.delete("model"),url2.searchParams.delete("new_chat"),replaceState(url2.toString(),{})}async function handleUrlParams(){if(await modelsStore.fetch(),get$3(modelParam)){const model=modelsStore.findModelByName(get$3(modelParam));if(model)try{await modelsStore. +selectModelById(model.id)}catch(error2){console.error("Failed to select model:",error2),set$1(requestedModelName,get$3(modelParam),!0),set$1(showModelNotAvailable,!0);return}else{set$1(requestedModelName,get$3(modelParam),!0),set$1(showModelNotAvailable,!0);return}}get$3(qParam)!==null?(await conversationsStore.createConversation(),clearUrlParams()):(get$3(modelParam)||get$3(newChatParam)==="true")&&clearUrlParams()}onMount$1(async()=>{if(isConversationsInitialized()||await conversationsStore.initialize(), +conversationsStore.clearActiveConversation(),chatStore.clearUIState(),isRouterMode()&&modelsStore.selectedModelName&&!modelsStore.isModelLoaded(modelsStore.selectedModelName)){modelsStore.clearSelection();const first=modelOptions().find(m=>modelsStore.loadedModelIds.includes(m.model));first&&await modelsStore.selectModelById(first.id)}(get$3(qParam)!==null||get$3(modelParam)!==null||get$3(newChatParam)==="true")&&await handleUrlParams()}),head$1("ku01nm",$$anchor2=>{deferred_template_effect(()=>{ +$document.title=APP_NAME})}),DialogModelNotAvailable($$anchor,{get modelName(){return get$3(requestedModelName)},get availableModels(){return get$3(availableModelNames)},get open(){return get$3(showModelNotAvailable)},set open($$value){set$1(showModelNotAvailable,$$value,!0)}}),pop()}const _4=Object.freeze(Object.defineProperty({__proto__:null,component:_page$5,universal:_page$6},Symbol.toStringTag,{value:"Module"})),load=async({fetch:fetch2})=>{await validateApiKey(fetch2)},_page$4=Object.freeze( +Object.defineProperty({__proto__:null,load},Symbol.toStringTag,{value:"Module"}));function _page$3($$anchor,$$props){push$1($$props,!0);let chatId=user_derived(()=>page$1.params.id),currentChatId,qParam=user_derived(()=>page$1.url.searchParams.get("q")),modelParam=user_derived(()=>page$1.url.searchParams.get("model")),showModelNotAvailable=state$1(!1),requestedModelName=state$1(""),availableModelNames=user_derived(()=>modelOptions().map(m=>m.model)),urlParamsProcessed=state$1(!1);function clearUrlParams(){ +const url2=new URL(page$1.url);url2.searchParams.delete("q"),url2.searchParams.delete("model"),replaceState(url2.toString(),{})}async function handleUrlParams(){if(await modelsStore.fetch(),get$3(modelParam)){const model=modelsStore.findModelByName(get$3(modelParam));if(model)try{await modelsStore.selectModelById(model.id)}catch(error2){console.error("Failed to select model:",error2),set$1(requestedModelName,get$3(modelParam),!0),set$1(showModelNotAvailable,!0);return}else{set$1(requestedModelName, +get$3(modelParam),!0),set$1(showModelNotAvailable,!0);return}}get$3(qParam)!==null?(await chatStore.sendMessage(get$3(qParam)),clearUrlParams()):get$3(modelParam)&&clearUrlParams(),set$1(urlParamsProcessed,!0)}async function selectModelFromLastAssistantResponse(){const messages=activeMessages();if(messages.length===0)return;let lastMessageWithModel;for(let i=messages.length-1;i>=0;i--)if(messages[i].model){lastMessageWithModel=messages[i];break}if(!lastMessageWithModel)return;const currentModelId=selectedModelId(); +if(modelOptions().find(m=>m.id===currentModelId)?.model===lastMessageWithModel.model)return;const matchingModel=modelOptions().find(option2=>option2.model===lastMessageWithModel.model);if(matchingModel&&modelsStore.isModelLoaded(matchingModel.model))try{await modelsStore.selectModelById(matchingModel.id),console.log(`Automatically selected model: ${lastMessageWithModel.model} from last message`)}catch(error2){console.warn("Failed to automatically select model from last message:",error2)}}afterNavigate( +()=>{setTimeout(()=>{selectModelFromLastAssistantResponse()},100)}),user_effect(()=>{if(get$3(chatId)&&get$3(chatId)!==currentChatId){if(currentChatId=get$3(chatId),set$1(urlParamsProcessed,!1),activeConversation()?.id===get$3(chatId)){(get$3(qParam)!==null||get$3(modelParam)!==null)&&!get$3(urlParamsProcessed)&&handleUrlParams();return}(async()=>await conversationsStore.loadConversation(get$3(chatId))?(chatStore.syncLoadingStateForChat(get$3(chatId)),(get$3(qParam)!==null||get$3(modelParam)!==null)&& +!get$3(urlParamsProcessed)&&await handleUrlParams()):await goto("#/"))()}}),user_effect(()=>{if(typeof window<"u"){const handleBeforeUnload=()=>{isLoading()&&(console.log("Page unload detected while streaming - aborting stream"),chatStore.stopGeneration())};return window.addEventListener("beforeunload",handleBeforeUnload),()=>{window.removeEventListener("beforeunload",handleBeforeUnload)}}}),head$1("jib4ir",$$anchor2=>{deferred_template_effect($0=>{$document.title=`${$0??""} - llama.cpp`},[()=>activeConversation()?. +name||"Chat"])}),DialogModelNotAvailable($$anchor,{get modelName(){return get$3(requestedModelName)},get availableModels(){return get$3(availableModelNames)},get open(){return get$3(showModelNotAvailable)},set open($$value){set$1(showModelNotAvailable,$$value,!0)}}),pop()}const _5=Object.freeze(Object.defineProperty({__proto__:null,component:_page$3,universal:_page$4},Symbol.toStringTag,{value:"Module"}));function _page$2($$anchor,$$props){push$1($$props,!1),init(),SettingsChat($$anchor,{get initialSection(){ +return page$1.params.section}}),pop()}const _6=Object.freeze(Object.defineProperty({__proto__:null,component:_page$2},Symbol.toStringTag,{value:"Module"}));var root=from_html('<div class="mx-auto w-full p-4 md:p-8 md:py-10"><!></div>');function _page$1($$anchor){var div=root(),node2=child(div);SettingsImportExport(node2,{}),reset(div),append($$anchor,div)}const _7=Object.freeze(Object.defineProperty({__proto__:null,component:_page$1},Symbol.toStringTag,{value:"Module"}));function _page($$anchor){ +SettingsMcpServers($$anchor,{class:"mx-auto w-full p-4 md:p-8 md:py-8"})}const _8=Object.freeze(Object.defineProperty({__proto__:null,component:_page},Symbol.toStringTag,{value:"Module"})),pdf_worker_min='/**\n * @licstart The following is the entire license notice for the\n * JavaScript code in this page\n *\n * Copyright 2024 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain\ + a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @licend The above is the entire license notice for the\n * JavaScript code in this page\n */\n\ +/**\n * pdfjsVersion = 5.4.54\n * pdfjsBuild = 295fb3ec4\n */\nconst e=!("object"!=typeof process||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type),t=[.001,0,0,.001,0,0],a=1.35,r=.35,i=.25925925925925924,n=1,s=2,o=4,c=8,l=16,h=64,u=128,d=256,f="pdfjs_internal_editor_",g=3,p=9,m=13,b=15,y=101,w={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QU\ +ALITY:2048},x=0,S=4,k=1,C=2,v=3,F=1,T=2,O=3,M=4,D=5,R=6,N=7,E=8,L=9,j=10,_=11,U=12,X=13,q=14,H=15,W=16,z=17,$=20,G="Group",V="R",K=1,J=2,Y=4,Z=16,Q=32,ee=128,te=512,ae=1,re=2,ie=4096,ne=8192,se=32768,oe=65536,ce=131072,le=1048576,he=2097152,ue=8388608,de=16777216,fe=1,ge=2,pe=3,me=4,be=5,ye={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"},we={WC:"W\ +illClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},xe={O:"PageOpen",C:"PageClose"},Se=1,Ae=5,ke=1,Ce=2,ve=3,Fe=4,Ie=5,Te=6,Oe=7,Me=8,De=9,Be=10,Re=11,Ne=12,Ee=13,Pe=14,Le=15,je=16,_e=17,Ue=18,Xe=19,qe=20,He=21,We=22,ze=23,$e=24,Ge=25,Ve=26,Ke=27,Je=28,Ye=29,Ze=30,Qe=31,et=32,tt=33,at=34,rt=35,it=36,nt=37,st=38,ot=39,ct=40,lt=41,ht=42,ut=43,dt=44,ft=45,gt=46,pt=47,mt=48,bt=49,yt=50,wt=51,xt=52,St=53,At=54,kt=55,Ct=56,vt=57,Ft=58,It=59,Tt=60,Ot=61,Mt=62,Dt=63,Bt=64,Rt=65,Nt=66,Et=6\ +7,Pt=68,Lt=69,jt=70,_t=71,Ut=72,Xt=73,qt=74,Ht=75,Wt=76,zt=77,$t=80,Gt=81,Vt=83,Kt=84,Jt=85,Yt=86,Zt=87,Qt=88,ea=89,ta=90,aa=91,ra=92,ia=93,na=94,sa=0,oa=1,ca=2,la=3,ha=1,ua=2;let da=Se;function getVerbosityLevel(){return da}function info(e){da>=Ae&&console.log(`Info: ${e}`)}function warn(e){da>=Se&&console.log(`Warning: ${e}`)}function unreachable(e){throw new Error(e)}function assert(e,t){e||unreachable(t)}function createValidAbsoluteUrl(e,t=null,a=null){if(!e)return null;if(a&&"string"==typeo\ +f e){if(a.addDefaultProtocol&&e.startsWith("www.")){const t=e.match(/\\./g);t?.length>=2&&(e=`http://${e}`)}if(a.tryConvertEncoding)try{e=stringToUTF8String(e)}catch{}}const r=t?URL.parse(e,t):URL.parse(e);return function _isValidProtocol(e){switch(e?.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(r)?r:null}function shadow(e,t,a,r=!1){Object.defineProperty(e,t,{value:a,enumerable:!r,configurable:!0,writable:!1});return a}const fa=function BaseEx\ +ceptionClosure(){function BaseException(e,t){this.message=e;this.name=t}BaseException.prototype=new Error;BaseException.constructor=BaseException;return BaseException}();class PasswordException extends fa{constructor(e,t){super(e,"PasswordException");this.code=t}}class UnknownErrorException extends fa{constructor(e,t){super(e,"UnknownErrorException");this.details=t}}class InvalidPDFException extends fa{constructor(e){super(e,"InvalidPDFException")}}class ResponseException extends fa{constructor(\ +e,t,a){super(e,"ResponseException");this.status=t;this.missing=a}}class FormatError extends fa{constructor(e){super(e,"FormatError")}}class AbortException extends fa{constructor(e){super(e,"AbortException")}}function bytesToString(e){"object"==typeof e&&void 0!==e?.length||unreachable("Invalid argument for bytesToString");const t=e.length,a=8192;if(t<a)return String.fromCharCode.apply(null,e);const r=[];for(let i=0;i<t;i+=a){const n=Math.min(i+a,t),s=e.subarray(i,n);r.push(String.fromCharCode.ap\ +ply(null,s))}return r.join("")}function stringToBytes(e){"string"!=typeof e&&unreachable("Invalid argument for stringToBytes");const t=e.length,a=new Uint8Array(t);for(let r=0;r<t;++r)a[r]=255&e.charCodeAt(r);return a}function string32(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)}function objectSize(e){return Object.keys(e).length}class FeatureTest{static get isLittleEndian(){return shadow(this,"isLittleEndian",function isLittleEndian(){const e=new Uint8Array(4);e[0]=1;retur\ +n 1===new Uint32Array(e.buffer,0,1)[0]}())}static get isEvalSupported(){return shadow(this,"isEvalSupported",function isEvalSupported(){try{new Function("");return!0}catch{return!1}}())}static get isOffscreenCanvasSupported(){return shadow(this,"isOffscreenCanvasSupported","undefined"!=typeof OffscreenCanvas)}static get isImageDecoderSupported(){return shadow(this,"isImageDecoderSupported","undefined"!=typeof ImageDecoder)}static get platform(){const{platform:e,userAgent:t}=navigator;return shad\ +ow(this,"platform",{isAndroid:t.includes("Android"),isLinux:e.includes("Linux"),isMac:e.includes("Mac"),isWindows:e.includes("Win"),isFirefox:t.includes("Firefox")})}static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupported",globalThis.CSS?.supports?.("width: round(1.5px, 1px)"))}}const ga=Array.from(Array(256).keys(),(e=>e.toString(16).padStart(2,"0")));class Util{static makeHexColor(e,t,a){return`#${ga[e]}${ga[t]}${ga[a]}`}static scaleMinMax(e,t){let a;if(e[0]){if(e[0]<0){a=t[0]\ +;t[0]=t[2];t[2]=a}t[0]*=e[0];t[2]*=e[0];if(e[3]<0){a=t[1];t[1]=t[3];t[3]=a}t[1]*=e[3];t[3]*=e[3]}else{a=t[0];t[0]=t[1];t[1]=a;a=t[2];t[2]=t[3];t[3]=a;if(e[1]<0){a=t[1];t[1]=t[3];t[3]=a}t[1]*=e[1];t[3]*=e[1];if(e[2]<0){a=t[0];t[0]=t[2];t[2]=a}t[0]*=e[2];t[2]*=e[2]}t[0]+=e[4];t[1]+=e[5];t[2]+=e[4];t[3]+=e[5]}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static applyTransform(e,t,a=0){c\ +onst r=e[a],i=e[a+1];e[a]=r*t[0]+i*t[2]+t[4];e[a+1]=r*t[1]+i*t[3]+t[5]}static applyTransformToBezier(e,t,a=0){const r=t[0],i=t[1],n=t[2],s=t[3],o=t[4],c=t[5];for(let t=0;t<6;t+=2){const l=e[a+t],h=e[a+t+1];e[a+t]=l*r+h*n+o;e[a+t+1]=l*i+h*s+c}}static applyInverseTransform(e,t){const a=e[0],r=e[1],i=t[0]*t[3]-t[1]*t[2];e[0]=(a*t[3]-r*t[2]+t[2]*t[5]-t[4]*t[3])/i;e[1]=(-a*t[1]+r*t[0]+t[4]*t[1]-t[5]*t[0])/i}static axialAlignedBoundingBox(e,t,a){const r=t[0],i=t[1],n=t[2],s=t[3],o=t[4],c=t[5],l=e[0],h\ +=e[1],u=e[2],d=e[3];let f=r*l+o,g=f,p=r*u+o,m=p,b=s*h+c,y=b,w=s*d+c,x=w;if(0!==i||0!==n){const e=i*l,t=i*u,a=n*h,r=n*d;f+=a;m+=a;p+=r;g+=r;b+=e;x+=e;w+=t;y+=t}a[0]=Math.min(a[0],f,p,g,m);a[1]=Math.min(a[1],b,w,y,x);a[2]=Math.max(a[2],f,p,g,m);a[3]=Math.max(a[3],b,w,y,x)}static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e,t){const a=e[0],r=e[1],i=e[2],n=e[3],s=a**2+r**2,\ +o=a*i+r*n,c=i**2+n**2,l=(s+c)/2,h=Math.sqrt(l**2-(s*c-o**2));t[0]=Math.sqrt(l+h||1);t[1]=Math.sqrt(l-h||1)}static normalizeRect(e){const t=e.slice(0);if(e[0]>e[2]){t[0]=e[2];t[2]=e[0]}if(e[1]>e[3]){t[1]=e[3];t[3]=e[1]}return t}static intersect(e,t){const a=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),r=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(a>r)return null;const i=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),n=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return i>n?n\ +ull:[a,i,r,n]}static pointBoundingBox(e,t,a){a[0]=Math.min(a[0],e);a[1]=Math.min(a[1],t);a[2]=Math.max(a[2],e);a[3]=Math.max(a[3],t)}static rectBoundingBox(e,t,a,r,i){i[0]=Math.min(i[0],e,a);i[1]=Math.min(i[1],t,r);i[2]=Math.max(i[2],e,a);i[3]=Math.max(i[3],t,r)}static#e(e,t,a,r,i,n,s,o,c,l){if(c<=0||c>=1)return;const h=1-c,u=c*c,d=u*c,f=h*(h*(h*e+3*c*t)+3*u*a)+d*r,g=h*(h*(h*i+3*c*n)+3*u*s)+d*o;l[0]=Math.min(l[0],f);l[1]=Math.min(l[1],g);l[2]=Math.max(l[2],f);l[3]=Math.max(l[3],g)}static#t(e,t,a\ +,r,i,n,s,o,c,l,h,u){if(Math.abs(c)<1e-12){Math.abs(l)>=1e-12&&this.#e(e,t,a,r,i,n,s,o,-h/l,u);return}const d=l**2-4*h*c;if(d<0)return;const f=Math.sqrt(d),g=2*c;this.#e(e,t,a,r,i,n,s,o,(-l+f)/g,u);this.#e(e,t,a,r,i,n,s,o,(-l-f)/g,u)}static bezierBoundingBox(e,t,a,r,i,n,s,o,c){c[0]=Math.min(c[0],e,s);c[1]=Math.min(c[1],t,o);c[2]=Math.max(c[2],e,s);c[3]=Math.max(c[3],t,o);this.#t(e,a,i,s,t,r,n,o,3*(3*(a-i)-e+s),6*(e-2*a+i),3*(a-e),c);this.#t(e,a,i,s,t,r,n,o,3*(3*(r-n)-t+o),6*(t-2*r+n),3*(r-t),c)}}\ +const pa=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function stringToPDFString(e,t=!1){if(e[0]>="ï"){let a;if("þ"===\ +e[0]&&"ÿ"===e[1]){a="utf-16be";e.length%2==1&&(e=e.slice(0,-1))}else if("ÿ"===e[0]&&"þ"===e[1]){a="utf-16le";e.length%2==1&&(e=e.slice(0,-1))}else"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(a="utf-8");if(a)try{const r=new TextDecoder(a,{fatal:!0}),i=stringToBytes(e),n=r.decode(i);return t||!n.includes("\x1B")?n:n.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g,"")}catch(e){warn(`stringToPDFString: "${e}".`)}}const a=[];for(let r=0,i=e.length;r<i;r++){const n=e.charCodeAt(r);if(!t&&27===n){for(;++r<i&&27!==e.charCode\ +At(r););continue}const s=pa[n];a.push(s?String.fromCharCode(s):e.charAt(r))}return a.join("")}function stringToUTF8String(e){return decodeURIComponent(escape(e))}function utf8StringToString(e){return unescape(encodeURIComponent(e))}function isArrayEqual(e,t){if(e.length!==t.length)return!1;for(let a=0,r=e.length;a<r;a++)if(e[a]!==t[a])return!1;return!0}function getModificationDate(e=new Date){e instanceof Date||(e=new Date(e));return[e.getUTCFullYear().toString(),(e.getUTCMonth()+1).toString().p\ +adStart(2,"0"),e.getUTCDate().toString().padStart(2,"0"),e.getUTCHours().toString().padStart(2,"0"),e.getUTCMinutes().toString().padStart(2,"0"),e.getUTCSeconds().toString().padStart(2,"0")].join("")}let ma=null,ba=null;function MathClamp(e,t,a){return Math.min(Math.max(e,t),a)}function toHexUtil(e){return Uint8Array.prototype.toHex?e.toHex():Array.from(e,(e=>ga[e])).join("")}"function"!=typeof Promise.try&&(Promise.try=function(e,...t){return new Promise((a=>{a(e(...t))}))});"function"!=typeof \ +Math.sumPrecise&&(Math.sumPrecise=function(e){return e.reduce(((e,t)=>e+t),0)});const ya=Symbol("CIRCULAR_REF"),wa=Symbol("EOF");let xa=Object.create(null),Sa=Object.create(null),Aa=Object.create(null);class Name{constructor(e){this.name=e}static get(e){return Sa[e]||=new Name(e)}}class Cmd{constructor(e){this.cmd=e}static get(e){return xa[e]||=new Cmd(e)}}const ka=function nonSerializableClosure(){return ka};class Dict{constructor(e=null){this._map=new Map;this.xref=e;this.objId=null;this.suppr\ +essEncryption=!1;this.__nonSerializable__=ka}assignXref(e){this.xref=e}get size(){return this._map.size}get(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}return r instanceof Ref&&this.xref?this.xref.fetch(r,this.suppressEncryption):r}async getAsync(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}return r instanceof Ref&&this.xref?this.xref.fetchAsync\ +(r,this.suppressEncryption):r}getArray(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}r instanceof Ref&&this.xref&&(r=this.xref.fetch(r,this.suppressEncryption));if(Array.isArray(r)){r=r.slice();for(let e=0,t=r.length;e<t;e++)r[e]instanceof Ref&&this.xref&&(r[e]=this.xref.fetch(r[e],this.suppressEncryption))}return r}getRaw(e){return this._map.get(e)}getKeys(){return[...this._map.keys()]}getRawValues(){return[...this._map.\ +values()]}set(e,t){this._map.set(e,t)}setIfNotExists(e,t){this.has(e)||this.set(e,t)}setIfNumber(e,t){"number"==typeof t&&this.set(e,t)}setIfArray(e,t){(Array.isArray(t)||ArrayBuffer.isView(t))&&this.set(e,t)}setIfDefined(e,t){null!=t&&this.set(e,t)}setIfName(e,t){"string"==typeof t?this.set(e,Name.get(t)):t instanceof Name&&this.set(e,t)}has(e){return this._map.has(e)}*[Symbol.iterator](){for(const[e,t]of this._map)yield[e,t instanceof Ref&&this.xref?this.xref.fetch(t,this.suppressEncryption):t\ +]}static get empty(){const e=new Dict(null);e.set=(e,t)=>{unreachable("Should not call `set` on the empty dictionary.")};return shadow(this,"empty",e)}static merge({xref:e,dictArray:t,mergeSubDicts:a=!1}){const r=new Dict(e),i=new Map;for(const e of t)if(e instanceof Dict)for(const[t,r]of e._map){let e=i.get(t);if(void 0===e){e=[];i.set(t,e)}else if(!(a&&r instanceof Dict))continue;e.push(r)}for(const[t,a]of i){if(1===a.length||!(a[0]instanceof Dict)){r._map.set(t,a[0]);continue}const i=new Dict\ +(e);for(const e of a)for(const[t,a]of e._map)i._map.has(t)||i._map.set(t,a);i.size>0&&r._map.set(t,i)}i.clear();return r.size>0?r:Dict.empty}clone(){const e=new Dict(this.xref);for(const t of this.getKeys())e.set(t,this.getRaw(t));return e}delete(e){delete this._map[e]}}class Ref{constructor(e,t){this.num=e;this.gen=t}toString(){return 0===this.gen?`${this.num}R`:`${this.num}R${this.gen}`}static fromString(e){const t=Aa[e];if(t)return t;const a=/^(\\d+)R(\\d*)$/.exec(e);return a&&"0"!==a[1]?Aa[e]=\ +new Ref(parseInt(a[1]),a[2]?parseInt(a[2]):0):null}static get(e,t){const a=0===t?`${e}R`:`${e}R${t}`;return Aa[a]||=new Ref(e,t)}}class RefSet{constructor(e=null){this._set=new Set(e?._set)}has(e){return this._set.has(e.toString())}put(e){this._set.add(e.toString())}remove(e){this._set.delete(e.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}}class RefSetCache{constructor(){this._map=new Map}get size(){return this._map.size}get(e){return this._map.get(e.toStri\ +ng())}has(e){return this._map.has(e.toString())}put(e,t){this._map.set(e.toString(),t)}putAlias(e,t){this._map.set(e.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*values(){yield*this._map.values()}*items(){for(const[e,t]of this._map)yield[Ref.fromString(e),t]}}function isName(e,t){return e instanceof Name&&(void 0===t||e.name===t)}function isCmd(e,t){return e instanceof Cmd&&(void 0===t||e.cmd===t)}function isDict(e,t){return e instanceof Dict&&\ +(void 0===t||isName(e.get("Type"),t))}function isRefsEqual(e,t){return e.num===t.num&&e.gen===t.gen}class BaseStream{get length(){unreachable("Abstract getter `length` accessed")}get isEmpty(){unreachable("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return shadow(this,"isDataLoaded",!0)}getByte(){unreachable("Abstract method `getByte` called")}getBytes(e){unreachable("Abstract method `getBytes` called")}async getImageData(e,t){return this.getBytes(e,t)}async asyncGetBytes(){unreachab\ +le("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get isAsyncDecoder(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}async getTransferableImage(){return null}peekByte(){const e=this.getByte();-1!==e&&this.pos--;return e}peekBytes(e){const t=this.getBytes(e);this.pos-=t.length;return t}getUint16(){const e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t}getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()}getByteRa\ +nge(e,t){unreachable("Abstract method `getByteRange` called")}getString(e){return bytesToString(this.getBytes(e))}skip(e){this.pos+=e||1}reset(){unreachable("Abstract method `reset` called")}moveStart(){unreachable("Abstract method `moveStart` called")}makeSubStream(e,t,a=null){unreachable("Abstract method `makeSubStream` called")}getBaseStreams(){return null}}const Ca=/^[1-9]\\.\\d$/,va=2**31-1,Fa=[1,0,0,1,0,0],Ia=["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"],Ta=["E\ +xtGState","Font","Properties","XObject"];function getLookupTableFactory(e){let t;return function(){if(e){t=Object.create(null);e(t);e=null}return t}}class MissingDataException extends fa{constructor(e,t){super(`Missing data [${e}, ${t})`,"MissingDataException");this.begin=e;this.end=t}}class ParserEOFException extends fa{constructor(e){super(e,"ParserEOFException")}}class XRefEntryException extends fa{constructor(e){super(e,"XRefEntryException")}}class XRefParseException extends fa{constructor(e\ +){super(e,"XRefParseException")}}function arrayBuffersToBytes(e){const t=e.length;if(0===t)return new Uint8Array(0);if(1===t)return new Uint8Array(e[0]);let a=0;for(let r=0;r<t;r++)a+=e[r].byteLength;const r=new Uint8Array(a);let i=0;for(let a=0;a<t;a++){const t=new Uint8Array(e[a]);r.set(t,i);i+=t.byteLength}return r}async function fetchBinaryData(e){const t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch file "${e}" with "${t.statusText}".`);return new Uint8Array(await t.arrayBuffer()\ +)}function getInheritableProperty({dict:e,key:t,getArray:a=!1,stopWhenFound:r=!0}){let i;const n=new RefSet;for(;e instanceof Dict&&(!e.objId||!n.has(e.objId));){e.objId&&n.put(e.objId);const s=a?e.getArray(t):e.get(t);if(void 0!==s){if(r)return s;(i||=[]).push(s)}e=e.get("Parent")}return i}const Oa=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV","V","VI","VII","VIII","IX"];function toRomanNumerals(e,t=!1){assert(Number.\ +isInteger(e)&&e>0,"The number should be a positive integer.");const a="M".repeat(e/1e3|0)+Oa[e%1e3/100|0]+Oa[10+(e%100/10|0)]+Oa[20+e%10];return t?a.toLowerCase():a}function log2(e){return e>0?Math.ceil(Math.log2(e)):0}function readInt8(e,t){return e[t]<<24>>24}function readInt16(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function readUint16(e,t){return e[t]<<8|e[t+1]}function readUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function isWhiteSpace(e){return 32===e||9===e||13===e||10===e\ +}function isNumberArray(e,t){return Array.isArray(e)?(null===t||e.length===t)&&e.every((e=>"number"==typeof e)):ArrayBuffer.isView(e)&&!(e instanceof BigInt64Array||e instanceof BigUint64Array)&&(null===t||e.length===t)}function lookupMatrix(e,t){return isNumberArray(e,6)?e:t}function lookupRect(e,t){return isNumberArray(e,4)?e:t}function lookupNormalRect(e,t){return isNumberArray(e,4)?Util.normalizeRect(e):t}function parseXFAPath(e){const t=/(.+)\\[(\\d+)\\]$/;return e.split(".").map((e=>{const a=\ +e.match(t);return a?{name:a[1],pos:parseInt(a[2],10)}:{name:e,pos:0}}))}function escapePDFName(e){const t=[];let a=0;for(let r=0,i=e.length;r<i;r++){const i=e.charCodeAt(r);if(i<33||i>126||35===i||40===i||41===i||60===i||62===i||91===i||93===i||123===i||125===i||47===i||37===i){a<r&&t.push(e.substring(a,r));t.push(`#${i.toString(16)}`);a=r+1}}if(0===t.length)return e;a<e.length&&t.push(e.substring(a,e.length));return t.join("")}function escapeString(e){return e.replaceAll(/([()\\\\\\n\\r])/g,(e=>"\\n\ +"===e?"\\\\n":"\\r"===e?"\\\\r":`\\\\${e}`))}function _collectJS(e,t,a,r){if(!e)return;let i=null;if(e instanceof Ref){if(r.has(e))return;i=e;r.put(i);e=t.fetch(e)}if(Array.isArray(e))for(const i of e)_collectJS(i,t,a,r);else if(e instanceof Dict){if(isName(e.get("S"),"JavaScript")){const t=e.get("JS");let r;t instanceof BaseStream?r=t.getString():"string"==typeof t&&(r=t);r&&=stringToPDFString(r,!0).replaceAll("\\0","");r&&a.push(r.trim())}_collectJS(e.getRaw("Next"),t,a,r)}i&&r.remove(i)}function coll\ +ectActions(e,t,a){const r=Object.create(null),i=getInheritableProperty({dict:t,key:"AA",stopWhenFound:!1});if(i)for(let t=i.length-1;t>=0;t--){const n=i[t];if(n instanceof Dict)for(const t of n.getKeys()){const i=a[t];if(!i)continue;const s=[];_collectJS(n.getRaw(t),e,s,new RefSet);s.length>0&&(r[i]=s)}}if(t.has("A")){const a=[];_collectJS(t.get("A"),e,a,new RefSet);a.length>0&&(r.Action=a)}return objectSize(r)>0?r:null}const Ma={60:"<",62:">",38:"&",34:""",39:"'"};function*c\ +odePointIter(e){for(let t=0,a=e.length;t<a;t++){const a=e.codePointAt(t);a>55295&&(a<57344||a>65533)&&t++;yield a}}function encodeToXmlString(e){const t=[];let a=0;for(let r=0,i=e.length;r<i;r++){const i=e.codePointAt(r);if(32<=i&&i<=126){const n=Ma[i];if(n){a<r&&t.push(e.substring(a,r));t.push(n);a=r+1}}else{a<r&&t.push(e.substring(a,r));t.push(`&#x${i.toString(16).toUpperCase()};`);i>55295&&(i<57344||i>65533)&&r++;a=r+1}}if(0===t.length)return e;a<e.length&&t.push(e.substring(a,e.length));retu\ +rn t.join("")}function validateFontName(e,t=!1){const a=/^("|\').*("|\')$/.exec(e);if(a&&a[1]===a[2]){if(new RegExp(`[^\\\\\\\\]${a[1]}`).test(e.slice(1,-1))){t&&warn(`FontFamily contains unescaped ${a[1]}: ${e}.`);return!1}}else for(const a of e.split(/[ \\t]+/))if(/^(\\d|(-(\\d|-)))/.test(a)||!/^[\\w-\\\\]+$/.test(a)){t&&warn(`FontFamily contains invalid <custom-ident>: ${e}.`);return!1}return!0}function validateCSSFont(e){const t=new Set(["100","200","300","400","500","600","700","800","900","1000","norm\ +al","bold","bolder","lighter"]),{fontFamily:a,fontWeight:r,italicAngle:i}=e;if(!validateFontName(a,!0))return!1;const n=r?r.toString():"";e.fontWeight=t.has(n)?n:"400";const s=parseFloat(i);e.italicAngle=isNaN(s)||s<-90||s>90?"14":i.toString();return!0}function recoverJsURL(e){const t=new RegExp("^\\\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").replaceAll(".","\\\\.")+")\\\\((?:\'|\\")([^\'\\"]*)(?:\'|\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))","i").exec(e);return t?.[2]?{url:t[2],newWindow:"app.launc\ +hURL"===t[1]&&"true"===t[3]}:null}function numberToString(e){if(Number.isInteger(e))return e.toString();const t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)}function getNewAnnotationsMap(e){if(!e)return null;const t=new Map;for(const[a,r]of e){if(!a.startsWith(f))continue;let e=t.get(r.pageIndex);if(!e){e=[];t.set(r.pageIndex,e)}e.push(r)}return t.size>0?t:null}function stringToAsciiOrUTF16BE(e){return null==e||function isAscii(e){if("string"!=typeof e)r\ +eturn!1;return!e||/^[\\x00-\\x7F]*$/.test(e)}(e)?e:stringToUTF16String(e,!0)}function stringToUTF16HexString(e){const t=[];for(let a=0,r=e.length;a<r;a++){const r=e.charCodeAt(a);t.push(ga[r>>8&255],ga[255&r])}return t.join("")}function stringToUTF16String(e,t=!1){const a=[];t&&a.push("þÿ");for(let t=0,r=e.length;t<r;t++){const r=e.charCodeAt(t);a.push(String.fromCharCode(r>>8&255),String.fromCharCode(255&r))}return a.join("")}function getRotationMatrix(e,t,a){switch(e){case 90:return[0,1,-1,0,t,0\ +];case 180:return[-1,0,0,-1,t,a];case 270:return[0,-1,1,0,0,a];default:throw new Error("Invalid rotation")}}function getSizeInBytes(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}class QCMS{static#a=null;static _memory=null;static _mustAddAlpha=!1;static _destBuffer=null;static _destOffset=0;static _destLength=0;static _cssColor="";static _makeHexColor=null;static get _memoryArray(){const e=this.#a;return e?.byteLength?e:this.#a=new Uint8Array(this._memory.buffer)}}let Da;const Ba="undefined"!\ +=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&Ba.decode();let Ra=null;function getUint8ArrayMemory0(){null!==Ra&&0!==Ra.byteLength||(Ra=new Uint8Array(Da.memory.buffer));return Ra}let Na=0;function passArray8ToWasm0(e,t){const a=t(1*e.length,1)>>>0;getUint8ArrayMemory0().set(e,a/1);Na=e.length;return a}const Ea=Object.freeze({RGB8:0,0:"RGB8",RGBA8:1,1:"RGBA8",BGRA8:2,2:"BGRA8",Gray8:3,\ +3:"Gray8",GrayA8:4,4:"GrayA8",CMYK:5,5:"CMYK"}),Pa=Object.freeze({Perceptual:0,0:"Perceptual",RelativeColorimetric:1,1:"RelativeColorimetric",Saturation:2,2:"Saturation",AbsoluteColorimetric:3,3:"AbsoluteColorimetric"});function __wbg_get_imports(){const e={wbg:{}};e.wbg.__wbg_copyresult_b08ee7d273f295dd=function(e,t){!function copy_result(e,t){const{_mustAddAlpha:a,_destBuffer:r,_destOffset:i,_destLength:n,_memoryArray:s}=QCMS;if(t!==n)if(a)for(let a=e,n=e+t,o=i;a<n;a+=3,o+=4){r[o]=s[a];r[o+1]=\ +s[a+1];r[o+2]=s[a+2];r[o+3]=255}else for(let a=e,n=e+t,o=i;a<n;a+=3,o+=4){r[o]=s[a];r[o+1]=s[a+1];r[o+2]=s[a+2]}else r.set(s.subarray(e,e+t),i)}(e>>>0,t>>>0)};e.wbg.__wbg_copyrgb_d60ce17bb05d9b67=function(e){!function copy_rgb(e){const{_destBuffer:t,_destOffset:a,_memoryArray:r}=QCMS;t[a]=r[e];t[a+1]=r[e+1];t[a+2]=r[e+2]}(e>>>0)};e.wbg.__wbg_makecssRGB_893bf0cd9fdb302d=function(e){!function make_cssRGB(e){const{_memoryArray:t}=QCMS;QCMS._cssColor=QCMS._makeHexColor(t[e],t[e+1],t[e+2])}(e>>>0)};e\ +.wbg.__wbindgen_init_externref_table=function(){const e=Da.__wbindgen_export_0,t=e.grow(4);e.set(0,void 0);e.set(t+0,void 0);e.set(t+1,null);e.set(t+2,!0);e.set(t+3,!1)};e.wbg.__wbindgen_throw=function(e,t){throw new Error(function getStringFromWasm0(e,t){e>>>=0;return Ba.decode(getUint8ArrayMemory0().subarray(e,e+t))}(e,t))};return e}function __wbg_finalize_init(e,t){Da=e.exports;__wbg_init.__wbindgen_wasm_module=t;Ra=null;Da.__wbindgen_start();return Da}async function __wbg_init(e){if(void 0!=\ +=Da)return Da;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?({module_or_path:e}=e):console.warn("using deprecated parameters for the initialization function; pass a single object instead"));const t=__wbg_get_imports();("string"==typeof e||"function"==typeof Request&&e instanceof Request||"function"==typeof URL&&e instanceof URL)&&(e=fetch(e));const{instance:a,module:r}=await async function __wbg_load(e,t){if("function"==typeof Response&&e instanceof Response){if("function"==typeof Web\ +Assembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if("application/wasm"==e.headers.get("Content-Type"))throw t;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n",t)}const a=await e.arrayBuffer();return await WebAssembly.instantiate(a,t)}{const a=await WebAssembly.instantiate(e,t);return a instance\ +of WebAssembly.Instance?{instance:a,module:e}:a}}(await e,t);return __wbg_finalize_init(a,r)}class ColorSpace{static#r=new Uint8ClampedArray(3);constructor(e,t){this.name=e;this.numComps=t}getRgb(e,t,a=new Uint8ClampedArray(3)){this.getRgbItem(e,t,a,0);return a}getRgbHex(e,t){const a=this.getRgb(e,t,ColorSpace.#r);return Util.makeHexColor(a[0],a[1],a[2])}getRgbItem(e,t,a,r){unreachable("Should not call ColorSpace.getRgbItem")}getRgbBuffer(e,t,a,r,i,n,s){unreachable("Should not call ColorSpace.ge\ +tRgbBuffer")}getOutputLength(e,t){unreachable("Should not call ColorSpace.getOutputLength")}isPassthrough(e){return!1}isDefaultDecode(e,t){return ColorSpace.isDefaultDecode(e,this.numComps)}fillRgb(e,t,a,r,i,n,s,o,c){const l=t*a;let h=null;const u=1<<s,d=a!==i||t!==r;if(this.isPassthrough(s))h=o;else if(1===this.numComps&&l>u&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){const t=s<=8?new Uint8Array(u):new Uint16Array(u);for(let e=0;e<u;e++)t[e]=e;const a=new Uint8ClampedArray(3*u);this.get\ +RgbBuffer(t,0,u,a,0,s,0);if(d){h=new Uint8Array(3*l);let e=0;for(let t=0;t<l;++t){const r=3*o[t];h[e++]=a[r];h[e++]=a[r+1];h[e++]=a[r+2]}}else{let t=0;for(let r=0;r<l;++r){const i=3*o[r];e[t++]=a[i];e[t++]=a[i+1];e[t++]=a[i+2];t+=c}}}else if(d){h=new Uint8ClampedArray(3*l);this.getRgbBuffer(o,0,l,h,0,s,0)}else this.getRgbBuffer(o,0,r*n,e,0,s,c);if(h)if(d)!function resizeRgbImage(e,t,a,r,i,n,s){s=1!==s?0:s;const o=a/i,c=r/n;let l,h=0;const u=new Uint16Array(i),d=3*a;for(let e=0;e<i;e++)u[e]=3*Mat\ +h.floor(e*o);for(let a=0;a<n;a++){const r=Math.floor(a*c)*d;for(let a=0;a<i;a++){l=r+u[a];t[h++]=e[l++];t[h++]=e[l++];t[h++]=e[l++];h+=s}}}(h,e,t,a,r,i,c);else{let t=0,a=0;for(let i=0,s=r*n;i<s;i++){e[t++]=h[a++];e[t++]=h[a++];e[t++]=h[a++];t+=c}}}get usesZeroToOneRange(){return shadow(this,"usesZeroToOneRange",!0)}static isDefaultDecode(e,t){if(!Array.isArray(e))return!0;if(2*t!==e.length){warn("The decode map is not the correct length");return!0}for(let t=0,a=e.length;t<a;t+=2)if(0!==e[t]||1!=\ +=e[t+1])return!1;return!0}}class AlternateCS extends ColorSpace{constructor(e,t,a){super("Alternate",e);this.base=t;this.tintFn=a;this.tmpBuf=new Float32Array(t.numComps)}getRgbItem(e,t,a,r){const i=this.tmpBuf;this.tintFn(e,t,i,0);this.base.getRgbItem(i,0,a,r)}getRgbBuffer(e,t,a,r,i,n,s){const o=this.tintFn,c=this.base,l=1/((1<<n)-1),h=c.numComps,u=c.usesZeroToOneRange,d=(c.isPassthrough(8)||!u)&&0===s;let f=d?i:0;const g=d?r:new Uint8ClampedArray(h*a),p=this.numComps,m=new Float32Array(p),b=ne\ +w Float32Array(h);let y,w;for(y=0;y<a;y++){for(w=0;w<p;w++)m[w]=e[t++]*l;o(m,0,b,0);if(u)for(w=0;w<h;w++)g[f++]=255*b[w];else{c.getRgbItem(b,0,g,f);f+=h}}d||c.getRgbBuffer(g,0,a,r,i,8,s)}getOutputLength(e,t){return this.base.getOutputLength(e*this.base.numComps/this.numComps,t)}}class PatternCS extends ColorSpace{constructor(e){super("Pattern",null);this.base=e}isDefaultDecode(e,t){unreachable("Should not call PatternCS.isDefaultDecode")}}class IndexedCS extends ColorSpace{constructor(e,t,a){sup\ +er("Indexed",1);this.base=e;this.highVal=t;const r=e.numComps*(t+1);this.lookup=new Uint8Array(r);if(a instanceof BaseStream){const e=a.getBytes(r);this.lookup.set(e)}else{if("string"!=typeof a)throw new FormatError(`IndexedCS - unrecognized lookup table: ${a}`);for(let e=0;e<r;++e)this.lookup[e]=255&a.charCodeAt(e)}}getRgbItem(e,t,a,r){const{base:i,highVal:n,lookup:s}=this,o=MathClamp(Math.round(e[t]),0,n)*i.numComps;i.getRgbBuffer(s,o,1,a,r,8,0)}getRgbBuffer(e,t,a,r,i,n,s){const{base:o,highVal\ +:c,lookup:l}=this,{numComps:h}=o,u=o.getOutputLength(h,s);for(let n=0;n<a;++n){const a=MathClamp(Math.round(e[t++]),0,c)*h;o.getRgbBuffer(l,a,1,r,i,8,s);i+=u}}getOutputLength(e,t){return this.base.getOutputLength(e*this.base.numComps,t)}isDefaultDecode(e,t){if(!Array.isArray(e))return!0;if(2!==e.length){warn("Decode map length is not correct");return!0}if(!Number.isInteger(t)||t<1){warn("Bits per component is not correct");return!0}return 0===e[0]&&e[1]===(1<<t)-1}}class DeviceGrayCS extends Col\ +orSpace{constructor(){super("DeviceGray",1)}getRgbItem(e,t,a,r){const i=255*e[t];a[r]=a[r+1]=a[r+2]=i}getRgbBuffer(e,t,a,r,i,n,s){const o=255/((1<<n)-1);let c=t,l=i;for(let t=0;t<a;++t){const t=o*e[c++];r[l++]=t;r[l++]=t;r[l++]=t;l+=s}}getOutputLength(e,t){return e*(3+t)}}class DeviceRgbCS extends ColorSpace{constructor(){super("DeviceRGB",3)}getRgbItem(e,t,a,r){a[r]=255*e[t];a[r+1]=255*e[t+1];a[r+2]=255*e[t+2]}getRgbBuffer(e,t,a,r,i,n,s){if(8===n&&0===s){r.set(e.subarray(t,t+3*a),i);return}cons\ +t o=255/((1<<n)-1);let c=t,l=i;for(let t=0;t<a;++t){r[l++]=o*e[c++];r[l++]=o*e[c++];r[l++]=o*e[c++];l+=s}}getOutputLength(e,t){return e*(3+t)/3|0}isPassthrough(e){return 8===e}}class DeviceRgbaCS extends ColorSpace{constructor(){super("DeviceRGBA",4)}getOutputLength(e,t){return 4*e}isPassthrough(e){return 8===e}fillRgb(e,t,a,r,i,n,s,o,c){a!==i||t!==r?function resizeRgbaImage(e,t,a,r,i,n,s){const o=a/i,c=r/n;let l=0;const h=new Uint16Array(i);if(1===s){for(let e=0;e<i;e++)h[e]=Math.floor(e*o);con\ +st r=new Uint32Array(e.buffer),s=new Uint32Array(t.buffer),u=FeatureTest.isLittleEndian?16777215:4294967040;for(let e=0;e<n;e++){const t=r.subarray(Math.floor(e*c)*a);for(let e=0;e<i;e++)s[l++]|=t[h[e]]&u}}else{const r=4,s=a*r;for(let e=0;e<i;e++)h[e]=Math.floor(e*o)*r;for(let a=0;a<n;a++){const r=e.subarray(Math.floor(a*c)*s);for(let e=0;e<i;e++){const a=h[e];t[l++]=r[a];t[l++]=r[a+1];t[l++]=r[a+2]}}}}(o,e,t,a,r,i,c):function copyRgbaImage(e,t,a){if(1===a){const a=new Uint32Array(e.buffer),r=ne\ +w Uint32Array(t.buffer),i=FeatureTest.isLittleEndian?16777215:4294967040;for(let e=0,t=a.length;e<t;e++)r[e]|=a[e]&i}else{let a=0;for(let r=0,i=e.length;r<i;r+=4){t[a++]=e[r];t[a++]=e[r+1];t[a++]=e[r+2]}}}(o,e,c)}}class DeviceCmykCS extends ColorSpace{constructor(){super("DeviceCMYK",4)}#i(e,t,a,r,i){const n=e[t]*a,s=e[t+1]*a,o=e[t+2]*a,c=e[t+3]*a;r[i]=255+n*(-4.387332384609988*n+54.48615194189176*s+18.82290502165302*o+212.25662451639585*c-285.2331026137004)+s*(1.7149763477362134*s-5.60967369040\ +47315*o+-17.873870861415444*c-5.497006427196366)+o*(-2.5217340131683033*o-21.248923337353073*c+17.5119270841813)+c*(-21.86122147463605*c-189.48180835922747);r[i+1]=255+n*(8.841041422036149*n+60.118027045597366*s+6.871425592049007*o+31.159100130055922*c-79.2970844816548)+s*(-15.310361306967817*s+17.575251261109482*o+131.35250912493976*c-190.9453302588951)+o*(4.444339102852739*o+9.8632861493405*c-24.86741582555878)+c*(-20.737325471181034*c-187.80453709719578);r[i+2]=255+n*(.8842522430003296*n+8.07\ +8677503112928*s+30.89978309703729*o-.23883238689178934*c-14.183576799673286)+s*(10.49593273432072*s+63.02378494754052*o+50.606957656360734*c-112.23884253719248)+o*(.03296041114873217*o+115.60384449646641*c-193.58209356861505)+c*(-22.33816807309886*c-180.12613974708367)}getRgbItem(e,t,a,r){this.#i(e,t,1,a,r)}getRgbBuffer(e,t,a,r,i,n,s){const o=1/((1<<n)-1);for(let n=0;n<a;n++){this.#i(e,t,o,r,i);t+=4;i+=3+s}}getOutputLength(e,t){return e/4*(3+t)|0}}class CalGrayCS extends ColorSpace{constructor(e\ +,t,a){super("CalGray",1);if(!e)throw new FormatError("WhitePoint missing - required for color space CalGray");[this.XW,this.YW,this.ZW]=e;[this.XB,this.YB,this.ZB]=t||[0,0,0];this.G=a||1;if(this.XW<0||this.ZW<0||1!==this.YW)throw new FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);if(this.XB<0||this.YB<0||this.ZB<0){info(`Invalid BlackPoint for ${this.name}, falling back to default.`);this.XB=this.YB=this.ZB=0}0===this.XB&&0===this.YB&&0===this.ZB||warn(`${th\ +is.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ZB: ${this.ZB}, only default values are supported.`);if(this.G<1){info(`Invalid Gamma: ${this.G} for ${this.name}, falling back to default.`);this.G=1}}#i(e,t,a,r,i){const n=(e[t]*i)**this.G,s=this.YW*n,o=Math.max(295.8*s**.3333333333333333-40.8,0);a[r]=o;a[r+1]=o;a[r+2]=o}getRgbItem(e,t,a,r){this.#i(e,t,a,r,1)}getRgbBuffer(e,t,a,r,i,n,s){const o=1/((1<<n)-1);for(let n=0;n<a;++n){this.#i(e,t,r,i,o);t+=1;i+=3+s}}getOutputLength(e,t){return e*(\ +3+t)}}class CalRGBCS extends ColorSpace{static#n=new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296]);static#s=new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867]);static#o=new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252]);static#c=new Float32Array([1,1,1]);static#l=new Float32Array(3);static#h=new Float32Array(3);static#u=new Float32Array(3);static#d=(24/116)**3/8\ +;constructor(e,t,a,r){super("CalRGB",3);if(!e)throw new FormatError("WhitePoint missing - required for color space CalRGB");const[i,n,s]=this.whitePoint=e,[o,c,l]=this.blackPoint=t||new Float32Array(3);[this.GR,this.GG,this.GB]=a||new Float32Array([1,1,1]);[this.MXA,this.MYA,this.MZA,this.MXB,this.MYB,this.MZB,this.MXC,this.MYC,this.MZC]=r||new Float32Array([1,0,0,0,1,0,0,0,1]);if(i<0||s<0||1!==n)throw new FormatError(`Invalid WhitePoint components for ${this.name}, no fallback available`);if(o<\ +0||c<0||l<0){info(`Invalid BlackPoint for ${this.name} [${o}, ${c}, ${l}], falling back to default.`);this.blackPoint=new Float32Array(3)}if(this.GR<0||this.GG<0||this.GB<0){info(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ${this.name}, falling back to default.`);this.GR=this.GG=this.GB=1}}#f(e,t,a){a[0]=e[0]*t[0]+e[1]*t[1]+e[2]*t[2];a[1]=e[3]*t[0]+e[4]*t[1]+e[5]*t[2];a[2]=e[6]*t[0]+e[7]*t[1]+e[8]*t[2]}#g(e,t,a){a[0]=1*t[0]/e[0];a[1]=1*t[1]/e[1];a[2]=1*t[2]/e[2]}#p(e,t,a){a[0]=.95047\ +*t[0]/e[0];a[1]=1*t[1]/e[1];a[2]=1.08883*t[2]/e[2]}#m(e){return e<=.0031308?MathClamp(12.92*e,0,1):e>=.99554525?1:MathClamp(1.055*e**(1/2.4)-.055,0,1)}#b(e){return e<0?-this.#b(-e):e>8?((e+16)/116)**3:e*CalRGBCS.#d}#y(e,t,a){if(0===e[0]&&0===e[1]&&0===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const r=this.#b(0),i=(1-r)/(1-this.#b(e[0])),n=1-i,s=(1-r)/(1-this.#b(e[1])),o=1-s,c=(1-r)/(1-this.#b(e[2])),l=1-c;a[0]=t[0]*i+n;a[1]=t[1]*s+o;a[2]=t[2]*c+l}#w(e,t,a){if(1===e[0]&&1===e[2]){a[0]=t[0];a[1]=\ +t[1];a[2]=t[2];return}const r=a;this.#f(CalRGBCS.#n,t,r);const i=CalRGBCS.#l;this.#g(e,r,i);this.#f(CalRGBCS.#s,i,a)}#x(e,t,a){const r=a;this.#f(CalRGBCS.#n,t,r);const i=CalRGBCS.#l;this.#p(e,r,i);this.#f(CalRGBCS.#s,i,a)}#i(e,t,a,r,i){const n=MathClamp(e[t]*i,0,1),s=MathClamp(e[t+1]*i,0,1),o=MathClamp(e[t+2]*i,0,1),c=1===n?1:n**this.GR,l=1===s?1:s**this.GG,h=1===o?1:o**this.GB,u=this.MXA*c+this.MXB*l+this.MXC*h,d=this.MYA*c+this.MYB*l+this.MYC*h,f=this.MZA*c+this.MZB*l+this.MZC*h,g=CalRGBCS.#h;\ +g[0]=u;g[1]=d;g[2]=f;const p=CalRGBCS.#u;this.#w(this.whitePoint,g,p);const m=CalRGBCS.#h;this.#y(this.blackPoint,p,m);const b=CalRGBCS.#u;this.#x(CalRGBCS.#c,m,b);const y=CalRGBCS.#h;this.#f(CalRGBCS.#o,b,y);a[r]=255*this.#m(y[0]);a[r+1]=255*this.#m(y[1]);a[r+2]=255*this.#m(y[2])}getRgbItem(e,t,a,r){this.#i(e,t,a,r,1)}getRgbBuffer(e,t,a,r,i,n,s){const o=1/((1<<n)-1);for(let n=0;n<a;++n){this.#i(e,t,r,i,o);t+=3;i+=3+s}}getOutputLength(e,t){return e*(3+t)/3|0}}class LabCS extends ColorSpace{const\ +ructor(e,t,a){super("Lab",3);if(!e)throw new FormatError("WhitePoint missing - required for color space Lab");[this.XW,this.YW,this.ZW]=e;[this.amin,this.amax,this.bmin,this.bmax]=a||[-100,100,-100,100];[this.XB,this.YB,this.ZB]=t||[0,0,0];if(this.XW<0||this.ZW<0||1!==this.YW)throw new FormatError("Invalid WhitePoint components, no fallback available");if(this.XB<0||this.YB<0||this.ZB<0){info("Invalid BlackPoint, falling back to default");this.XB=this.YB=this.ZB=0}if(this.amin>this.amax||this.bm\ +in>this.bmax){info("Invalid Range, falling back to defaults");this.amin=-100;this.amax=100;this.bmin=-100;this.bmax=100}}#S(e){return e>=6/29?e**3:108/841*(e-4/29)}#A(e,t,a,r){return a+e*(r-a)/t}#i(e,t,a,r,i){let n=e[t],s=e[t+1],o=e[t+2];if(!1!==a){n=this.#A(n,a,0,100);s=this.#A(s,a,this.amin,this.amax);o=this.#A(o,a,this.bmin,this.bmax)}s>this.amax?s=this.amax:s<this.amin&&(s=this.amin);o>this.bmax?o=this.bmax:o<this.bmin&&(o=this.bmin);const c=(n+16)/116,l=c+s/500,h=c-o/200,u=this.XW*this.#S(l\ +),d=this.YW*this.#S(c),f=this.ZW*this.#S(h);let g,p,m;if(this.ZW<1){g=3.1339*u+-1.617*d+-.4906*f;p=-.9785*u+1.916*d+.0333*f;m=.072*u+-.229*d+1.4057*f}else{g=3.2406*u+-1.5372*d+-.4986*f;p=-.9689*u+1.8758*d+.0415*f;m=.0557*u+-.204*d+1.057*f}r[i]=255*Math.sqrt(g);r[i+1]=255*Math.sqrt(p);r[i+2]=255*Math.sqrt(m)}getRgbItem(e,t,a,r){this.#i(e,t,!1,a,r)}getRgbBuffer(e,t,a,r,i,n,s){const o=(1<<n)-1;for(let n=0;n<a;n++){this.#i(e,t,o,r,i);t+=3;i+=3+s}}getOutputLength(e,t){return e*(3+t)/3|0}isDefaultDeco\ +de(e,t){return!0}get usesZeroToOneRange(){return shadow(this,"usesZeroToOneRange",!1)}}function fetchSync(e){const t=new XMLHttpRequest;t.open("GET",e,!1);t.responseType="arraybuffer";t.send(null);return t.response}class IccColorSpace extends ColorSpace{#k;#C;static#v=!0;static#F=null;static#I=new FinalizationRegistry((e=>{!function qcms_drop_transformer(e){Da.qcms_drop_transformer(e)}(e)}));constructor(e,t,a){if(!IccColorSpace.isUsable)throw new Error("No ICC color space support");super(t,a);le\ +t r;switch(a){case 1:r=Ea.Gray8;this.#C=(e,t,a)=>function qcms_convert_one(e,t,a){Da.qcms_convert_one(e,t,a)}(this.#k,255*e[t],a);break;case 3:r=Ea.RGB8;this.#C=(e,t,a)=>function qcms_convert_three(e,t,a,r,i){Da.qcms_convert_three(e,t,a,r,i)}(this.#k,255*e[t],255*e[t+1],255*e[t+2],a);break;case 4:r=Ea.CMYK;this.#C=(e,t,a)=>function qcms_convert_four(e,t,a,r,i,n){Da.qcms_convert_four(e,t,a,r,i,n)}(this.#k,255*e[t],255*e[t+1],255*e[t+2],255*e[t+3],a);break;default:throw new Error(`Unsupported numb\ +er of components: ${a}`)}this.#k=function qcms_transformer_from_memory(e,t,a){const r=passArray8ToWasm0(e,Da.__wbindgen_malloc),i=Na;return Da.qcms_transformer_from_memory(r,i,t,a)>>>0}(e,r,Pa.Perceptual);if(!this.#k)throw new Error("Failed to create ICC color space");IccColorSpace.#I.register(this,this.#k)}getRgbHex(e,t){this.#C(e,t,!0);return QCMS._cssColor}getRgbItem(e,t,a,r){QCMS._destBuffer=a;QCMS._destOffset=r;QCMS._destLength=3;this.#C(e,t,!1);QCMS._destBuffer=null}getRgbBuffer(e,t,a,r,i,\ +n,s){e=e.subarray(t,t+a*this.numComps);if(8!==n){const t=255/((1<<n)-1);for(let a=0,r=e.length;a<r;a++)e[a]*=t}QCMS._mustAddAlpha=s&&r.buffer===e.buffer;QCMS._destBuffer=r;QCMS._destOffset=i;QCMS._destLength=a*(3+s);!function qcms_convert_array(e,t){const a=passArray8ToWasm0(t,Da.__wbindgen_malloc),r=Na;Da.qcms_convert_array(e,a,r)}(this.#k,e);QCMS._mustAddAlpha=!1;QCMS._destBuffer=null}getOutputLength(e,t){return e/this.numComps*(3+t)|0}static setOptions({useWasm:e,useWorkerFetch:t,wasmUrl:a}){\ +if(t){this.#v=e;this.#F=a}else this.#v=!1}static get isUsable(){let e=!1;if(this.#v)if(this.#F)try{this._module=function initSync(e){if(void 0!==Da)return Da;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?({module:e}=e):console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const t=__wbg_get_imports();e instanceof WebAssembly.Module||(e=new WebAssembly.Module(e));return __wbg_finalize_init(new WebAssembly.Instance(e,t),e)}({module:fetchSync(`${this.\ +#F}qcms_bg.wasm`)});e=!!this._module;QCMS._memory=this._module.memory;QCMS._makeHexColor=Util.makeHexColor}catch(e){warn(`ICCBased color space: "${e}".`)}else warn("No ICC color space support due to missing `wasmUrl` API option");return shadow(this,"isUsable",e)}}class CmykICCBasedCS extends IccColorSpace{static#T;constructor(){super(new Uint8Array(fetchSync(`${CmykICCBasedCS.#T}CGATS001Compat-v2-micro.icc`)),"DeviceCMYK",4)}static setOptions({iccUrl:e}){this.#T=e}static get isUsable(){let e=!1;\ +IccColorSpace.isUsable&&(this.#T?e=!0:warn("No CMYK ICC profile support due to missing `iccUrl` API option"));return shadow(this,"isUsable",e)}}class Stream extends BaseStream{constructor(e,t,a,r){super();this.bytes=e instanceof Uint8Array?e:new Uint8Array(e);this.start=t||0;this.pos=this.start;this.end=t+a||this.bytes.length;this.dict=r}get length(){return this.end-this.start}get isEmpty(){return 0===this.length}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(e){const t=t\ +his.bytes,a=this.pos,r=this.end;if(!e)return t.subarray(a,r);let i=a+e;i>r&&(i=r);this.pos=i;return t.subarray(a,i)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);return this.bytes.subarray(e,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(e,t,a=null){return new Stream(this.bytes.buffer,e,t,a)}}class StringStream extends Stream{constructor(e){super(stringToBytes(e))}}class NullStream extends Stream{constructor(){super(new Uint8Array(0))}}class ChunkedStream ex\ +tends Stream{constructor(e,t,a){super(new Uint8Array(e),0,e,null);this.chunkSize=t;this._loadedChunks=new Set;this.numChunks=Math.ceil(e/t);this.manager=a;this.progressiveDataLength=0;this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){const e=[];for(let t=0,a=this.numChunks;t<a;++t)this._loadedChunks.has(t)||e.push(t);return e}get numChunksLoaded(){return this._loadedChunks.size}get isDataLoaded(){return this.numChunksLoaded===this.numChunks}onReceiveData(e,t){const a=this.chunkSize;if(e%a\ +!=0)throw new Error(`Bad begin offset: ${e}`);const r=e+t.byteLength;if(r%a!=0&&r!==this.bytes.length)throw new Error(`Bad end offset: ${r}`);this.bytes.set(new Uint8Array(t),e);const i=Math.floor(e/a),n=Math.floor((r-1)/a)+1;for(let e=i;e<n;++e)this._loadedChunks.add(e)}onReceiveProgressiveData(e){let t=this.progressiveDataLength;const a=Math.floor(t/this.chunkSize);this.bytes.set(new Uint8Array(e),t);t+=e.byteLength;this.progressiveDataLength=t;const r=t>=this.end?this.numChunks:Math.floor(t/t\ +his.chunkSize);for(let e=a;e<r;++e)this._loadedChunks.add(e)}ensureByte(e){if(e<this.progressiveDataLength)return;const t=Math.floor(e/this.chunkSize);if(!(t>this.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(e,t){if(e>=t)return;if(t<=this.progressiveDataLength)return;const a=Math.floor(e/this.chunkSize);if(a>this.numChunks)return;const r=Math.min(Math.floor((t-1)/this.chun\ +kSize)+1,this.numChunks);for(let i=a;i<r;++i)if(!this._loadedChunks.has(i))throw new MissingDataException(e,t)}nextEmptyChunk(e){const t=this.numChunks;for(let a=0;a<t;++a){const r=(e+a)%t;if(!this._loadedChunks.has(r))return r}return null}hasChunk(e){return this._loadedChunks.has(e)}getByte(){const e=this.pos;if(e>=this.end)return-1;e>=this.progressiveDataLength&&this.ensureByte(e);return this.bytes[this.pos++]}getBytes(e){const t=this.bytes,a=this.pos,r=this.end;if(!e){r>this.progressiveDataLe\ +ngth&&this.ensureRange(a,r);return t.subarray(a,r)}let i=a+e;i>r&&(i=r);i>this.progressiveDataLength&&this.ensureRange(a,i);this.pos=i;return t.subarray(a,i)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);t>this.progressiveDataLength&&this.ensureRange(e,t);return this.bytes.subarray(e,t)}makeSubStream(e,t,a=null){t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e);function ChunkedStreamSubstream(){}ChunkedStreamSubstream.prototype=Ob\ +ject.create(this);ChunkedStreamSubstream.prototype.getMissingChunks=function(){const e=this.chunkSize,t=Math.floor(this.start/e),a=Math.floor((this.end-1)/e)+1,r=[];for(let e=t;e<a;++e)this._loadedChunks.has(e)||r.push(e);return r};Object.defineProperty(ChunkedStreamSubstream.prototype,"isDataLoaded",{get(){return this.numChunksLoaded===this.numChunks||0===this.getMissingChunks().length},configurable:!0});const r=new ChunkedStreamSubstream;r.pos=r.start=e;r.end=e+t||this.end;r.dict=a;return r}ge\ +tBaseStreams(){return[this]}}class ChunkedStreamManager{constructor(e,t){this.length=t.length;this.chunkSize=t.rangeChunkSize;this.stream=new ChunkedStream(this.length,this.chunkSize,this);this.pdfNetworkStream=e;this.disableAutoFetch=t.disableAutoFetch;this.msgHandler=t.msgHandler;this.currRequestId=0;this._chunksNeededByRequest=new Map;this._requestsByChunk=new Map;this._promisesByRequest=new Map;this.progressiveDataLength=0;this.aborted=!1;this._loadedStreamCapability=Promise.withResolvers()}\ +sendRequest(e,t){const a=this.pdfNetworkStream.getRangeReader(e,t);a.isStreamingSupported||(a.onProgress=this.onProgress.bind(this));let r=[],i=0;return new Promise(((e,t)=>{const readChunk=({value:n,done:s})=>{try{if(s){const t=arrayBuffersToBytes(r);r=null;e(t);return}i+=n.byteLength;a.isStreamingSupported&&this.onProgress({loaded:i});r.push(n);a.read().then(readChunk,t)}catch(e){t(e)}};a.read().then(readChunk,t)})).then((t=>{this.aborted||this.onReceiveData({chunk:t,begin:e})}))}requestAllChu\ +nks(e=!1){if(!e){const e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}_requestChunks(e){const t=this.currRequestId++,a=new Set;this._chunksNeededByRequest.set(t,a);for(const t of e)this.stream.hasChunk(t)||a.add(t);if(0===a.size)return Promise.resolve();const r=Promise.withResolvers();this._promisesByRequest.set(t,r);const i=[];for(const e of a){let a=this._requestsByChunk.get(e);if(!a){a=[];this._requestsByChunk.set(e,a);i.push(e)}a.push(t)}i\ +f(i.length>0){const e=this.groupChunks(i);for(const t of e){const e=t.beginChunk*this.chunkSize,a=Math.min(t.endChunk*this.chunkSize,this.length);this.sendRequest(e,a).catch(r.reject)}}return r.promise.catch((e=>{if(!this.aborted)throw e}))}getStream(){return this.stream}requestRange(e,t){t=Math.min(t,this.length);const a=this.getBeginChunk(e),r=this.getEndChunk(t),i=[];for(let e=a;e<r;++e)i.push(e);return this._requestChunks(i)}requestRanges(e=[]){const t=[];for(const a of e){const e=this.getBe\ +ginChunk(a.begin),r=this.getEndChunk(a.end);for(let a=e;a<r;++a)t.includes(a)||t.push(a)}t.sort(((e,t)=>e-t));return this._requestChunks(t)}groupChunks(e){const t=[];let a=-1,r=-1;for(let i=0,n=e.length;i<n;++i){const n=e[i];a<0&&(a=n);if(r>=0&&r+1!==n){t.push({beginChunk:a,endChunk:r+1});a=n}i+1===e.length&&t.push({beginChunk:a,endChunk:n+1});r=n}return t}onProgress(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}onReceiveDat\ +a(e){const t=e.chunk,a=void 0===e.begin,r=a?this.progressiveDataLength:e.begin,i=r+t.byteLength,n=Math.floor(r/this.chunkSize),s=i<this.length?Math.floor(i/this.chunkSize):Math.ceil(i/this.chunkSize);if(a){this.stream.onReceiveProgressiveData(t);this.progressiveDataLength=i}else this.stream.onReceiveData(r,t);this.stream.isDataLoaded&&this._loadedStreamCapability.resolve(this.stream);const o=[];for(let e=n;e<s;++e){const t=this._requestsByChunk.get(e);if(t){this._requestsByChunk.delete(e);for(co\ +nst a of t){const t=this._chunksNeededByRequest.get(a);t.has(e)&&t.delete(e);t.size>0||o.push(a)}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){let e;if(1===this.stream.numChunksLoaded){const t=this.stream.numChunks-1;this.stream.hasChunk(t)||(e=t)}else e=this.stream.nextEmptyChunk(s);Number.isInteger(e)&&this._requestChunks([e])}for(const e of o){const t=this._promisesByRequest.get(e);this._promisesByRequest.delete(e);t.resolve()}this.msgHandler.send("DocProgress",{loaded:this.str\ +eam.numChunksLoaded*this.chunkSize,total:this.length})}onError(e){this._loadedStreamCapability.reject(e)}getBeginChunk(e){return Math.floor(e/this.chunkSize)}getEndChunk(e){return Math.floor((e-1)/this.chunkSize)+1}abort(e){this.aborted=!0;this.pdfNetworkStream?.cancelAllRequests(e);for(const t of this._promisesByRequest.values())t.reject(e)}}function convertToRGBA(e){switch(e.kind){case k:return convertBlackAndWhiteToRGBA(e);case C:return function convertRGBToRGBA({src:e,srcPos:t=0,dest:a,destP\ +os:r=0,width:i,height:n}){let s=0;const o=i*n*3,c=o>>2,l=new Uint32Array(e.buffer,t,c);if(FeatureTest.isLittleEndian){for(;s<c-2;s+=3,r+=4){const e=l[s],t=l[s+1],i=l[s+2];a[r]=4278190080|e;a[r+1]=e>>>24|t<<8|4278190080;a[r+2]=t>>>16|i<<16|4278190080;a[r+3]=i>>>8|4278190080}for(let i=4*s,n=t+o;i<n;i+=3)a[r++]=e[i]|e[i+1]<<8|e[i+2]<<16|4278190080}else{for(;s<c-2;s+=3,r+=4){const e=l[s],t=l[s+1],i=l[s+2];a[r]=255|e;a[r+1]=e<<24|t>>>8|255;a[r+2]=t<<16|i>>>16|255;a[r+3]=i<<8|255}for(let i=4*s,n=t+o;i\ +<n;i+=3)a[r++]=e[i]<<24|e[i+1]<<16|e[i+2]<<8|255}return{srcPos:t+o,destPos:r}}(e)}return null}function convertBlackAndWhiteToRGBA({src:e,srcPos:t=0,dest:a,width:r,height:i,nonBlackColor:n=4294967295,inverseDecode:s=!1}){const o=FeatureTest.isLittleEndian?4278190080:255,[c,l]=s?[n,o]:[o,n],h=r>>3,u=7&r,d=e.length;a=new Uint32Array(a.buffer);let f=0;for(let r=0;r<i;r++){for(const r=t+h;t<r;t++){const r=t<d?e[t]:255;a[f++]=128&r?l:c;a[f++]=64&r?l:c;a[f++]=32&r?l:c;a[f++]=16&r?l:c;a[f++]=8&r?l:c;a[f\ +++]=4&r?l:c;a[f++]=2&r?l:c;a[f++]=1&r?l:c}if(0===u)continue;const r=t<d?e[t++]:255;for(let e=0;e<u;e++)a[f++]=r&1<<7-e?l:c}return{srcPos:t,destPos:f}}class ImageResizer{static#O=2048;static#M=FeatureTest.isImageDecoderSupported;constructor(e,t){this._imgData=e;this._isMask=t}static get canUseImageDecoder(){return shadow(this,"canUseImageDecoder",this.#M?ImageDecoder.isTypeSupported("image/bmp"):Promise.resolve(!1))}static needsToBeResized(e,t){if(e<=this.#O&&t<=this.#O)return!1;const{MAX_DIM:a}=\ +this;if(e>a||t>a)return!0;const r=e*t;if(this._hasMaxArea)return r>this.MAX_AREA;if(r<this.#O**2)return!1;if(this._areGoodDims(e,t)){this.#O=Math.max(this.#O,Math.floor(Math.sqrt(e*t)));return!1}this.#O=this._guessMax(this.#O,a,128,0);return r>(this.MAX_AREA=this.#O**2)}static getReducePowerForJPX(e,t,a){const r=e*t,i=2**30/(4*a);if(!this.needsToBeResized(e,t))return r>i?Math.ceil(Math.log2(r/i)):0;const{MAX_DIM:n,MAX_AREA:s}=this,o=Math.max(e/n,t/n,Math.sqrt(r/Math.min(i,s)));return Math.ceil(M\ +ath.log2(o))}static get MAX_DIM(){return shadow(this,"MAX_DIM",this._guessMax(2048,65537,0,1))}static get MAX_AREA(){this._hasMaxArea=!0;return shadow(this,"MAX_AREA",this._guessMax(this.#O,this.MAX_DIM,128,0)**2)}static set MAX_AREA(e){if(e>=0){this._hasMaxArea=!0;shadow(this,"MAX_AREA",e)}}static setOptions({canvasMaxAreaInBytes:e=-1,isImageDecoderSupported:t=!1}){this._hasMaxArea||(this.MAX_AREA=e>>2);this.#M=t}static _areGoodDims(e,t){try{const a=new OffscreenCanvas(e,t),r=a.getContext("2d")\ +;r.fillRect(0,0,1,1);const i=r.getImageData(0,0,1,1).data[3];a.width=a.height=1;return 0!==i}catch{return!1}}static _guessMax(e,t,a,r){for(;e+a+1<t;){const a=Math.floor((e+t)/2),i=r||a;this._areGoodDims(a,i)?e=a:t=a}return e}static async createImage(e,t=!1){return new ImageResizer(e,t)._createImage()}async _createImage(){const{_imgData:e}=this,{width:t,height:a}=e;if(t*a*4>va){const e=this.#D();if(e)return e}const r=this._encodeBMP();let i,n;if(await ImageResizer.canUseImageDecoder){i=new ImageD\ +ecoder({data:r,type:"image/bmp",preferAnimation:!1,transfer:[r.buffer]});n=i.decode().catch((e=>{warn(`BMP image decoding failed: ${e}`);return createImageBitmap(new Blob([this._encodeBMP().buffer],{type:"image/bmp"}))})).finally((()=>{i.close()}))}else n=createImageBitmap(new Blob([r.buffer],{type:"image/bmp"}));const{MAX_AREA:s,MAX_DIM:o}=ImageResizer,c=Math.max(t/o,a/o,Math.sqrt(t*a/s)),l=Math.max(c,2),h=Math.round(10*(c+1.25))/10/l,u=Math.floor(Math.log2(h)),d=new Array(u+2).fill(2);d[0]=l;d\ +.splice(-1,1,h/(1<<u));let f=t,g=a;const p=await n;let m=p.image||p;for(const e of d){const t=f,a=g;f=Math.floor(f/e)-1;g=Math.floor(g/e)-1;const r=new OffscreenCanvas(f,g);r.getContext("2d").drawImage(m,0,0,t,a,0,0,f,g);m.close();m=r.transferToImageBitmap()}e.data=null;e.bitmap=m;e.width=f;e.height=g;return e}#D(){const{_imgData:e}=this,{data:t,width:a,height:r,kind:i}=e,n=a*r*4,s=Math.ceil(Math.log2(n/va)),o=a>>s,c=r>>s;let l,h=r;try{l=new Uint8Array(n)}catch{let e=Math.floor(Math.log2(n+1));f\ +or(;;)try{l=new Uint8Array(2**e-1);break}catch{e-=1}h=Math.floor((2**e-1)/(4*a));const t=a*h*4;t<l.length&&(l=new Uint8Array(t))}const u=new Uint32Array(l.buffer),d=new Uint32Array(o*c);let f=0,g=0;const p=Math.ceil(r/h),m=r%h==0?r:r%h;for(let e=0;e<p;e++){const r=e<p-1?h:m;({srcPos:f}=convertToRGBA({kind:i,src:t,dest:u,width:a,height:r,inverseDecode:this._isMask,srcPos:f}));for(let e=0,t=r>>s;e<t;e++){const t=u.subarray((e<<s)*a);for(let e=0;e<o;e++)d[g++]=t[e<<s]}}if(ImageResizer.needsToBeResi\ +zed(o,c)){e.data=d;e.width=o;e.height=c;e.kind=v;return null}const b=new OffscreenCanvas(o,c);b.getContext("2d",{willReadFrequently:!0}).putImageData(new ImageData(new Uint8ClampedArray(d.buffer),o,c),0,0);e.data=null;e.bitmap=b.transferToImageBitmap();e.width=o;e.height=c;return e}_encodeBMP(){const{width:e,height:t,kind:a}=this._imgData;let r,i=this._imgData.data,n=new Uint8Array(0),s=n,o=0;switch(a){case k:{r=1;n=new Uint8Array(this._isMask?[255,255,255,255,0,0,0,0]:[0,0,0,0,255,255,255,255])\ +;const a=e+7>>3,s=a+3&-4;if(a!==s){const e=new Uint8Array(s*t);let r=0;for(let n=0,o=t*a;n<o;n+=a,r+=s)e.set(i.subarray(n,n+a),r);i=e}break}case C:r=24;if(3&e){const a=3*e,r=a+3&-4,n=r-a,s=new Uint8Array(r*t);let o=0;for(let e=0,r=t*a;e<r;e+=a){const t=i.subarray(e,e+a);for(let e=0;e<a;e+=3){s[o++]=t[e+2];s[o++]=t[e+1];s[o++]=t[e]}o+=n}i=s}else for(let e=0,t=i.length;e<t;e+=3){const t=i[e];i[e]=i[e+2];i[e+2]=t}break;case v:r=32;o=3;s=new Uint8Array(68);const a=new DataView(s.buffer);if(FeatureTe\ +st.isLittleEndian){a.setUint32(0,255,!0);a.setUint32(4,65280,!0);a.setUint32(8,16711680,!0);a.setUint32(12,4278190080,!0)}else{a.setUint32(0,4278190080,!0);a.setUint32(4,16711680,!0);a.setUint32(8,65280,!0);a.setUint32(12,255,!0)}break;default:throw new Error("invalid format")}let c=0;const l=40+s.length,h=14+l+n.length+i.length,u=new Uint8Array(h),d=new DataView(u.buffer);d.setUint16(c,19778,!0);c+=2;d.setUint32(c,h,!0);c+=4;d.setUint32(c,0,!0);c+=4;d.setUint32(c,14+l+n.length,!0);c+=4;d.setUin\ +t32(c,l,!0);c+=4;d.setInt32(c,e,!0);c+=4;d.setInt32(c,-t,!0);c+=4;d.setUint16(c,1,!0);c+=2;d.setUint16(c,r,!0);c+=2;d.setUint32(c,o,!0);c+=4;d.setUint32(c,0,!0);c+=4;d.setInt32(c,0,!0);c+=4;d.setInt32(c,0,!0);c+=4;d.setUint32(c,n.length/4,!0);c+=4;d.setUint32(c,0,!0);c+=4;u.set(s,c);c+=s.length;u.set(n,c);c+=n.length;u.set(i,c);return u}}const La=new Uint8Array(0);class DecodeStream extends BaseStream{constructor(e){super();this._rawMinBufferLength=e||0;this.pos=0;this.bufferLength=0;this.eof=!1\ +;this.buffer=La;this.minBufferLength=512;if(e)for(;this.minBufferLength<e;)this.minBufferLength*=2}get isEmpty(){for(;!this.eof&&0===this.bufferLength;)this.readBlock();return 0===this.bufferLength}ensureBuffer(e){const t=this.buffer;if(e<=t.byteLength)return t;let a=this.minBufferLength;for(;a<e;)a*=2;const r=new Uint8Array(a);r.set(t);return this.buffer=r}getByte(){const e=this.pos;for(;this.bufferLength<=e;){if(this.eof)return-1;this.readBlock()}return this.buffer[this.pos++]}getBytes(e,t=nul\ +l){const a=this.pos;let r;if(e){this.ensureBuffer(a+e);r=a+e;for(;!this.eof&&this.bufferLength<r;)this.readBlock(t);const i=this.bufferLength;r>i&&(r=i)}else{for(;!this.eof;)this.readBlock(t);r=this.bufferLength}this.pos=r;return this.buffer.subarray(a,r)}async getImageData(e,t){if(!this.canAsyncDecodeImageFromBuffer)return this.isAsyncDecoder?this.decodeImage(null,t):this.getBytes(e,t);const a=await this.stream.asyncGetBytes();return this.decodeImage(a,t)}reset(){this.pos=0}makeSubStream(e,t,a=\ +null){if(void 0===t)for(;!this.eof;)this.readBlock();else{const a=e+t;for(;this.bufferLength<=a&&!this.eof;)this.readBlock()}return new Stream(this.buffer,e,t,a)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}}class StreamsSequenceStream extends DecodeStream{constructor(e,t=null){e=e.filter((e=>e instanceof BaseStream));let a=0;for(const t of e)a+=t instanceof DecodeStream?t._rawMinBufferLength:t.length;super(a);this.streams=e;this._onError=t}readBlock(){const e=this.streams;if(\ +0===e.length){this.eof=!0;return}const t=e.shift();let a;try{a=t.getBytes()}catch(e){if(this._onError){this._onError(e,t.dict?.objId);return}throw e}const r=this.bufferLength,i=r+a.length;this.ensureBuffer(i).set(a,r);this.bufferLength=i}getBaseStreams(){const e=[];for(const t of this.streams){const a=t.getBaseStreams();a&&e.push(...a)}return e.length>0?e:null}}class ColorSpaceUtils{static parse({cs:e,xref:t,resources:a=null,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n,asy\ +ncIfNotCached:s=!1}){const o={xref:t,resources:a,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n};let c,l,h;if(e instanceof Ref){l=e;const a=i.getByRef(l)||n.getByRef(l);if(a)return a;e=t.fetch(e)}if(e instanceof Name){c=e.name;const t=n.getByName(c);if(t)return t}try{h=this.#B(e,o)}catch(e){if(s&&!(e instanceof MissingDataException))return Promise.reject(e);throw e}if(c||l){n.set(c,l,h);l&&i.set(null,l,h)}return s?Promise.resolve(h):h}static#R(e,t){const{globalColorSpaceCach\ +e:a}=t;let r;if(e instanceof Ref){r=e;const t=a.getByRef(r);if(t)return t}const i=this.#B(e,t);r&&a.set(null,r,i);return i}static#B(e,t){const{xref:a,resources:r,pdfFunctionFactory:i,globalColorSpaceCache:n}=t;if((e=a.fetchIfRef(e))instanceof Name)switch(e.name){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"DeviceRGBA":return this.rgba;case"CMYK":case"DeviceCMYK":return this.cmyk;case"Pattern":return new PatternCS(null);default:if(r instanceof Dict){con\ +st a=r.get("ColorSpace");if(a instanceof Dict){const r=a.get(e.name);if(r){if(r instanceof Name)return this.#B(r,t);e=r;break}}}warn(`Unrecognized ColorSpace: ${e.name}`);return this.gray}if(Array.isArray(e)){const r=a.fetchIfRef(e[0]).name;let s,o,c,l,h,u;switch(r){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"CMYK":case"DeviceCMYK":return this.cmyk;case"CalGray":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");u=s.get("Gamma"\ +);return new CalGrayCS(l,h,u);case"CalRGB":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");u=s.getArray("Gamma");const d=s.getArray("Matrix");return new CalRGBCS(l,h,u,d);case"ICCBased":const f=e[1]instanceof Ref;if(f){const t=n.getByRef(e[1]);if(t)return t}const g=a.fetchIfRef(e[1]),p=g.dict;o=p.get("N");if(IccColorSpace.isUsable)try{const t=new IccColorSpace(g.getBytes(),"ICCBased",o);f&&n.set(null,e[1],t);return t}catch(t){if(t instanceof MissingDataException)throw \ +t;warn(`ICCBased color space (${e[1]}): "${t}".`)}const m=p.getRaw("Alternate");if(m){const e=this.#R(m,t);if(e.numComps===o)return e;warn("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===o)return this.gray;if(3===o)return this.rgb;if(4===o)return this.cmyk;break;case"Pattern":c=e[1]||null;c&&(c=this.#R(c,t));return new PatternCS(c);case"I":case"Indexed":c=this.#R(e[1],t);const b=MathClamp(a.fetchIfRef(e[2]),0,255),y=a.fetchIfRef(e[3]);return new IndexedCS(c,b,y);case"Separat\ +ion":case"DeviceN":const w=a.fetchIfRef(e[1]);o=Array.isArray(w)?w.length:1;c=this.#R(e[2],t);const x=i.create(e[3]);return new AlternateCS(o,c,x);case"Lab":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");const S=s.getArray("Range");return new LabCS(l,h,S);default:warn(`Unimplemented ColorSpace object: ${r}`);return this.gray}}warn(`Unrecognized ColorSpace object: ${e}`);return this.gray}static get gray(){return shadow(this,"gray",new DeviceGrayCS)}static get rgb(){ret\ +urn shadow(this,"rgb",new DeviceRgbCS)}static get rgba(){return shadow(this,"rgba",new DeviceRgbaCS)}static get cmyk(){if(CmykICCBasedCS.isUsable)try{return shadow(this,"cmyk",new CmykICCBasedCS)}catch{warn("CMYK fallback: DeviceCMYK")}return shadow(this,"cmyk",new DeviceCmykCS)}}class JpegError extends fa{constructor(e){super(e,"JpegError")}}class DNLMarkerError extends fa{constructor(e,t){super(e,"DNLMarkerError");this.scanLines=t}}class EOIMarkerError extends fa{constructor(e){super(e,"EOIMar\ +kerError")}}const ja=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),_a=4017,Ua=799,Xa=3406,qa=2276,Ha=1567,Wa=3784,za=5793,$a=2896;function buildHuffmanTable(e,t){let a,r,i=0,n=16;for(;n>0&&!e[n-1];)n--;const s=[{children:[],index:0}];let o,c=s[0];for(a=0;a<n;a++){for(r=0;r<e[a];r++){c=s.pop();c.children[c.index]=t[i];for(;c.index>0;)c=s.pop();c\ +.index++;s.push(c);for(;s.length<=a;){s.push(o={children:[],index:0});c.children[c.index]=o.children;c=o}i++}if(a+1<n){s.push(o={children:[],index:0});c.children[c.index]=o.children;c=o}}return s[0].children}function getBlockBufferOffset(e,t,a){return 64*((e.blocksPerLine+1)*t+a)}function decodeScan(e,t,a,r,i,n,s,o,c,l=!1){const h=a.mcusPerLine,u=a.progressive,d=t;let f=0,g=0;function readBit(){if(g>0){g--;return f>>g&1}f=e[t++];if(255===f){const r=e[t++];if(r){if(220===r&&l){const r=readUint16(\ +e,t+=2);t+=2;if(r>0&&r!==a.scanLines)throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",r)}else if(217===r){if(l){const e=y*(8===a.precision?8:0);if(e>0&&Math.round(a.scanLines/e)>=5)throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",e)}throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new JpegError(`unexpected marker ${(f<<8|r).toString(16)}`)}}g=7;return f>>\ +>7}function decodeHuffman(e){let t=e;for(;;){t=t[readBit()];switch(typeof t){case"number":return t;case"object":continue}throw new JpegError("invalid huffman sequence")}}function receive(e){let t=0;for(;e>0;){t=t<<1|readBit();e--}return t}function receiveAndExtend(e){if(1===e)return 1===readBit()?1:-1;const t=receive(e);return t>=1<<e-1?t:t+(-1<<e)+1}let p=0;let m,b=0;let y=0;function decodeMcu(e,t,a,r,i){const n=a%h;y=(a/h|0)*e.v+r;const s=n*e.h+i;t(e,getBlockBufferOffset(e,y,s))}function decod\ +eBlock(e,t,a){y=a/e.blocksPerLine|0;const r=a%e.blocksPerLine;t(e,getBlockBufferOffset(e,y,r))}const w=r.length;let x,S,k,C,v,F;F=u?0===n?0===o?function decodeDCFirst(e,t){const a=decodeHuffman(e.huffmanTableDC),r=0===a?0:receiveAndExtend(a)<<c;e.blockData[t]=e.pred+=r}:function decodeDCSuccessive(e,t){e.blockData[t]|=readBit()<<c}:0===o?function decodeACFirst(e,t){if(p>0){p--;return}let a=n;const r=s;for(;a<=r;){const r=decodeHuffman(e.huffmanTableAC),i=15&r,n=r>>4;if(0===i){if(n<15){p=receive(\ +n)+(1<<n)-1;break}a+=16;continue}a+=n;const s=ja[a];e.blockData[t+s]=receiveAndExtend(i)*(1<<c);a++}}:function decodeACSuccessive(e,t){let a=n;const r=s;let i,o,l=0;for(;a<=r;){const r=t+ja[a],n=e.blockData[r]<0?-1:1;switch(b){case 0:o=decodeHuffman(e.huffmanTableAC);i=15&o;l=o>>4;if(0===i)if(l<15){p=receive(l)+(1<<l);b=4}else{l=16;b=1}else{if(1!==i)throw new JpegError("invalid ACn encoding");m=receiveAndExtend(i);b=l?2:3}continue;case 1:case 2:if(e.blockData[r])e.blockData[r]+=n*(readBit()<<c);\ +else{l--;0===l&&(b=2===b?3:0)}break;case 3:if(e.blockData[r])e.blockData[r]+=n*(readBit()<<c);else{e.blockData[r]=m<<c;b=0}break;case 4:e.blockData[r]&&(e.blockData[r]+=n*(readBit()<<c))}a++}if(4===b){p--;0===p&&(b=0)}}:function decodeBaseline(e,t){const a=decodeHuffman(e.huffmanTableDC),r=0===a?0:receiveAndExtend(a);e.blockData[t]=e.pred+=r;let i=1;for(;i<64;){const a=decodeHuffman(e.huffmanTableAC),r=15&a,n=a>>4;if(0===r){if(n<15)break;i+=16;continue}i+=n;const s=ja[i];e.blockData[t+s]=receive\ +AndExtend(r);i++}};let T,O=0;const M=1===w?r[0].blocksPerLine*r[0].blocksPerColumn:h*a.mcusPerColumn;let D,R;for(;O<=M;){const a=i?Math.min(M-O,i):M;if(a>0){for(S=0;S<w;S++)r[S].pred=0;p=0;if(1===w){x=r[0];for(v=0;v<a;v++){decodeBlock(x,F,O);O++}}else for(v=0;v<a;v++){for(S=0;S<w;S++){x=r[S];D=x.h;R=x.v;for(k=0;k<R;k++)for(C=0;C<D;C++)decodeMcu(x,F,O,k,C)}O++}}g=0;T=findNextFileMarker(e,t);if(!T)break;if(T.invalid){warn(`decodeScan - ${a>0?"unexpected":"excessive"} MCU data, current marker is: $\ +{T.invalid}`);t=T.offset}if(!(T.marker>=65488&&T.marker<=65495))break;t+=2}return t-d}function quantizeAndInverse(e,t,a){const r=e.quantizationTable,i=e.blockData;let n,s,o,c,l,h,u,d,f,g,p,m,b,y,w,x,S;if(!r)throw new JpegError("missing required Quantization Table.");for(let e=0;e<64;e+=8){f=i[t+e];g=i[t+e+1];p=i[t+e+2];m=i[t+e+3];b=i[t+e+4];y=i[t+e+5];w=i[t+e+6];x=i[t+e+7];f*=r[e];if(g|p|m|b|y|w|x){g*=r[e+1];p*=r[e+2];m*=r[e+3];b*=r[e+4];y*=r[e+5];w*=r[e+6];x*=r[e+7];n=za*f+128>>8;s=za*b+128>>8;\ +o=p;c=w;l=$a*(g-x)+128>>8;d=$a*(g+x)+128>>8;h=m<<4;u=y<<4;n=n+s+1>>1;s=n-s;S=o*Wa+c*Ha+128>>8;o=o*Ha-c*Wa+128>>8;c=S;l=l+u+1>>1;u=l-u;d=d+h+1>>1;h=d-h;n=n+c+1>>1;c=n-c;s=s+o+1>>1;o=s-o;S=l*qa+d*Xa+2048>>12;l=l*Xa-d*qa+2048>>12;d=S;S=h*Ua+u*_a+2048>>12;h=h*_a-u*Ua+2048>>12;u=S;a[e]=n+d;a[e+7]=n-d;a[e+1]=s+u;a[e+6]=s-u;a[e+2]=o+h;a[e+5]=o-h;a[e+3]=c+l;a[e+4]=c-l}else{S=za*f+512>>10;a[e]=S;a[e+1]=S;a[e+2]=S;a[e+3]=S;a[e+4]=S;a[e+5]=S;a[e+6]=S;a[e+7]=S}}for(let e=0;e<8;++e){f=a[e];g=a[e+8];p=a[e+16]\ +;m=a[e+24];b=a[e+32];y=a[e+40];w=a[e+48];x=a[e+56];if(g|p|m|b|y|w|x){n=za*f+2048>>12;s=za*b+2048>>12;o=p;c=w;l=$a*(g-x)+2048>>12;d=$a*(g+x)+2048>>12;h=m;u=y;n=4112+(n+s+1>>1);s=n-s;S=o*Wa+c*Ha+2048>>12;o=o*Ha-c*Wa+2048>>12;c=S;l=l+u+1>>1;u=l-u;d=d+h+1>>1;h=d-h;n=n+c+1>>1;c=n-c;s=s+o+1>>1;o=s-o;S=l*qa+d*Xa+2048>>12;l=l*Xa-d*qa+2048>>12;d=S;S=h*Ua+u*_a+2048>>12;h=h*_a-u*Ua+2048>>12;u=S;f=n+d;x=n-d;g=s+u;w=s-u;p=o+h;y=o-h;m=c+l;b=c-l;f<16?f=0:f>=4080?f=255:f>>=4;g<16?g=0:g>=4080?g=255:g>>=4;p<16?p=\ +0:p>=4080?p=255:p>>=4;m<16?m=0:m>=4080?m=255:m>>=4;b<16?b=0:b>=4080?b=255:b>>=4;y<16?y=0:y>=4080?y=255:y>>=4;w<16?w=0:w>=4080?w=255:w>>=4;x<16?x=0:x>=4080?x=255:x>>=4;i[t+e]=f;i[t+e+8]=g;i[t+e+16]=p;i[t+e+24]=m;i[t+e+32]=b;i[t+e+40]=y;i[t+e+48]=w;i[t+e+56]=x}else{S=za*f+8192>>14;S=S<-2040?0:S>=2024?255:S+2056>>4;i[t+e]=S;i[t+e+8]=S;i[t+e+16]=S;i[t+e+24]=S;i[t+e+32]=S;i[t+e+40]=S;i[t+e+48]=S;i[t+e+56]=S}}}function buildComponentData(e,t){const a=t.blocksPerLine,r=t.blocksPerColumn,i=new Int16Arra\ +y(64);for(let e=0;e<r;e++)for(let r=0;r<a;r++){quantizeAndInverse(t,getBlockBufferOffset(t,e,r),i)}return t.blockData}function findNextFileMarker(e,t,a=t){const r=e.length-1;let i=a<t?a:t;if(t>=r)return null;const n=readUint16(e,t);if(n>=65472&&n<=65534)return{invalid:null,marker:n,offset:t};let s=readUint16(e,i);for(;!(s>=65472&&s<=65534);){if(++i>=r)return null;s=readUint16(e,i)}return{invalid:n.toString(16),marker:s,offset:i}}function prepareComponents(e){const t=Math.ceil(e.samplesPerLine/8/\ +e.maxH),a=Math.ceil(e.scanLines/8/e.maxV);for(const r of e.components){const i=Math.ceil(Math.ceil(e.samplesPerLine/8)*r.h/e.maxH),n=Math.ceil(Math.ceil(e.scanLines/8)*r.v/e.maxV),s=t*r.h,o=64*(a*r.v)*(s+1);r.blockData=new Int16Array(o);r.blocksPerLine=i;r.blocksPerColumn=n}e.mcusPerLine=t;e.mcusPerColumn=a}function readDataBlock(e,t){const a=readUint16(e,t);let r=(t+=2)+a-2;const i=findNextFileMarker(e,r,t);if(i?.invalid){warn("readDataBlock - incorrect length, current marker is: "+i.invalid);r\ +=i.offset}const n=e.subarray(t,r);return{appData:n,oldOffset:t,newOffset:t+n.length}}function skipData(e,t){const a=readUint16(e,t),r=(t+=2)+a-2,i=findNextFileMarker(e,r,t);return i?.invalid?i.offset:r}class JpegImage{constructor({decodeTransform:e=null,colorTransform:t=-1}={}){this._decodeTransform=e;this._colorTransform=t}static canUseImageDecoder(e,t=-1){let a=null,r=0,i=null,n=readUint16(e,r);r+=2;if(65496!==n)throw new JpegError("SOI not found");n=readUint16(e,r);r+=2;e:for(;65497!==n;){swi\ +tch(n){case 65505:const{appData:t,oldOffset:s,newOffset:o}=readDataBlock(e,r);r=o;if(69===t[0]&&120===t[1]&&105===t[2]&&102===t[3]&&0===t[4]&&0===t[5]){if(a)throw new JpegError("Duplicate EXIF-blocks found.");a={exifStart:s+6,exifEnd:o}}n=readUint16(e,r);r+=2;continue;case 65472:case 65473:case 65474:i=e[r+7];break e;case 65535:255!==e[r]&&r--}r=skipData(e,r);n=readUint16(e,r);r+=2}return 4===i||3===i&&0===t?null:a||{}}parse(e,{dnlScanLines:t=null}={}){let a,r,i=0,n=null,s=null,o=0;const c=[],l=\ +[],h=[];let u=readUint16(e,i);i+=2;if(65496!==u)throw new JpegError("SOI not found");u=readUint16(e,i);i+=2;e:for(;65497!==u;){let d,f,g;switch(u){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:const{appData:p,newOffset:m}=readDataBlock(e,i);i=m;65504===u&&74===p[0]&&70===p[1]&&73===p[2]&&70===p[3]&&0===p[4]&&(n={version:{major:p[5],minor:p[6]},densityUnits:\ +p[7],xDensity:p[8]<<8|p[9],yDensity:p[10]<<8|p[11],thumbWidth:p[12],thumbHeight:p[13],thumbData:p.subarray(14,14+3*p[12]*p[13])});65518===u&&65===p[0]&&100===p[1]&&111===p[2]&&98===p[3]&&101===p[4]&&(s={version:p[5]<<8|p[6],flags0:p[7]<<8|p[8],flags1:p[9]<<8|p[10],transformCode:p[11]});break;case 65499:const b=readUint16(e,i);i+=2;const y=b+i-2;let w;for(;i<y;){const t=e[i++],a=new Uint16Array(64);if(t>>4){if(t>>4!=1)throw new JpegError("DQT - invalid table spec");for(f=0;f<64;f++){w=ja[f];a[w]=\ +readUint16(e,i);i+=2}}else for(f=0;f<64;f++){w=ja[f];a[w]=e[i++]}c[15&t]=a}break;case 65472:case 65473:case 65474:if(a)throw new JpegError("Only single frame JPEGs supported");i+=2;a={};a.extended=65473===u;a.progressive=65474===u;a.precision=e[i++];const x=readUint16(e,i);i+=2;a.scanLines=t||x;a.samplesPerLine=readUint16(e,i);i+=2;a.components=[];a.componentIds={};const S=e[i++];let k=0,C=0;for(d=0;d<S;d++){const t=e[i],r=e[i+1]>>4,n=15&e[i+1];k<r&&(k=r);C<n&&(C=n);const s=e[i+2];g=a.components\ +.push({h:r,v:n,quantizationId:s,quantizationTable:null});a.componentIds[t]=g-1;i+=3}a.maxH=k;a.maxV=C;prepareComponents(a);break;case 65476:const v=readUint16(e,i);i+=2;for(d=2;d<v;){const t=e[i++],a=new Uint8Array(16);let r=0;for(f=0;f<16;f++,i++)r+=a[f]=e[i];const n=new Uint8Array(r);for(f=0;f<r;f++,i++)n[f]=e[i];d+=17+r;(t>>4?l:h)[15&t]=buildHuffmanTable(a,n)}break;case 65501:i+=2;r=readUint16(e,i);i+=2;break;case 65498:const F=1==++o&&!t;i+=2;const T=e[i++],O=[];for(d=0;d<T;d++){const t=e[i+\ ++],r=a.componentIds[t],n=a.components[r];n.index=t;const s=e[i++];n.huffmanTableDC=h[s>>4];n.huffmanTableAC=l[15&s];O.push(n)}const M=e[i++],D=e[i++],R=e[i++];try{i+=decodeScan(e,i,a,O,r,M,D,R>>4,15&R,F)}catch(t){if(t instanceof DNLMarkerError){warn(`${t.message} -- attempting to re-parse the JPEG image.`);return this.parse(e,{dnlScanLines:t.scanLines})}if(t instanceof EOIMarkerError){warn(`${t.message} -- ignoring the rest of the image data.`);break e}throw t}break;case 65500:i+=4;break;case 65\ +535:255!==e[i]&&i--;break;default:const N=findNextFileMarker(e,i-2,i-3);if(N?.invalid){warn("JpegImage.parse - unexpected data, current marker is: "+N.invalid);i=N.offset;break}if(!N||i>=e.length-1){warn("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new JpegError("JpegImage.parse - unknown marker: "+u.toString(16))}u=readUint16(e,i);i+=2}if(!a)throw new JpegError("JpegImage.parse - no frame data found.");this.width=a.samplesPerLine;t\ +his.height=a.scanLines;this.jfif=n;this.adobe=s;this.components=[];for(const e of a.components){const t=c[e.quantizationId];t&&(e.quantizationTable=t);this.components.push({index:e.index,output:buildComponentData(0,e),scaleX:e.h/a.maxH,scaleY:e.v/a.maxV,blocksPerLine:e.blocksPerLine,blocksPerColumn:e.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(e,t,a=!1){const r=this.width/e,i=this.height/t;let n,s,o,c,l,h,u,d,f,g,p,m=0;const b=this.components.length,y=e*t*\ +b,w=new Uint8ClampedArray(y),x=new Uint32Array(e),S=4294967288;let k;for(u=0;u<b;u++){n=this.components[u];s=n.scaleX*r;o=n.scaleY*i;m=u;p=n.output;c=n.blocksPerLine+1<<3;if(s!==k){for(l=0;l<e;l++){d=0|l*s;x[l]=(d&S)<<3|7&d}k=s}for(h=0;h<t;h++){d=0|h*o;g=c*(d&S)|(7&d)<<3;for(l=0;l<e;l++){w[m]=p[g+x[l]];m+=b}}}let C=this._decodeTransform;a||4!==b||C||(C=new Int32Array([-256,255,-256,255,-256,255,-256,255]));if(C)for(u=0;u<y;)for(d=0,f=0;d<b;d++,u++,f+=2)w[u]=(w[u]*C[f]>>8)+C[f+1];return w}get _is\ +ColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}_convertYccToRgb(e){let t,a,r;for(let i=0,n=e.length;i<n;i+=3){t=e[i];a=e[i+1];r=e[i+2];e[i]=t-179.456+1.402*r;e[i+1]=t+135.459-.344*a-.714*r;e[i+2]=t-226.816+1.772*a}return e}_convertYccToRgba(e,t){for(let a=0,r=0,i=e.length;a<i;a+=3,r+=4){const i=e[a],n=e[a+1],\ +s=e[a+2];t[r]=i-179.456+1.402*s;t[r+1]=i+135.459-.344*n-.714*s;t[r+2]=i-226.816+1.772*n;t[r+3]=255}return t}_convertYcckToRgb(e){this._convertYcckToCmyk(e);return this._convertCmykToRgb(e)}_convertYcckToRgba(e){this._convertYcckToCmyk(e);return this._convertCmykToRgba(e)}_convertYcckToCmyk(e){let t,a,r;for(let i=0,n=e.length;i<n;i+=4){t=e[i];a=e[i+1];r=e[i+2];e[i]=434.456-t-1.402*r;e[i+1]=119.541-t+.344*a+.714*r;e[i+2]=481.816-t-1.772*a}return e}_convertCmykToRgb(e){const t=e.length/4;ColorSpace\ +Utils.cmyk.getRgbBuffer(e,0,t,e,0,8,0);return e.subarray(0,3*t)}_convertCmykToRgba(e){ColorSpaceUtils.cmyk.getRgbBuffer(e,0,e.length/4,e,0,8,1);if(ColorSpaceUtils.cmyk instanceof DeviceCmykCS)for(let t=3,a=e.length;t<a;t+=4)e[t]=255;return e}getData({width:e,height:t,forceRGBA:a=!1,forceRGB:r=!1,isSourcePDF:i=!1}){if(this.numComponents>4)throw new JpegError("Unsupported color mode");const n=this._getLinearizedBlockData(e,t,i);if(1===this.numComponents&&(a||r)){const e=n.length*(a?4:3),t=new Uint\ +8ClampedArray(e);let r=0;if(a)!function grayToRGBA(e,t){if(FeatureTest.isLittleEndian)for(let a=0,r=e.length;a<r;a++)t[a]=65793*e[a]|4278190080;else for(let a=0,r=e.length;a<r;a++)t[a]=16843008*e[a]|255}(n,new Uint32Array(t.buffer));else for(const e of n){t[r++]=e;t[r++]=e;t[r++]=e}return t}if(3===this.numComponents&&this._isColorConversionNeeded){if(a){const e=new Uint8ClampedArray(n.length/3*4);return this._convertYccToRgba(n,e)}return this._convertYccToRgb(n)}if(4===this.numComponents){if(thi\ +s._isColorConversionNeeded)return a?this._convertYcckToRgba(n):r?this._convertYcckToRgb(n):this._convertYcckToCmyk(n);if(a)return this._convertCmykToRgba(n);if(r)return this._convertCmykToRgb(n)}return n}}class JpegStream extends DecodeStream{static#M=FeatureTest.isImageDecoderSupported;constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.maybeLength=t;this.params=a}static get canUseImageDecoder(){return shadow(this,"canUseImageDecoder",this.#M?ImageDecoder.isTypeSupported("image/jpeg\ +"):Promise.resolve(!1))}static setOptions({isImageDecoderSupported:e=!1}){this.#M=e}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(){this.decodeImage()}get jpegOptions(){const e={decodeTransform:void 0,colorTransform:void 0},t=this.dict.getArray("D","Decode");if((this.forceRGBA||this.forceRGB)&&Array.isArray(t)){const a=this.dict.get("BPC","BitsPerComponent")||8,r=t.length,i=new Int32Array(r);let n=!1;const s=(1<<a)-1;for(let e=0;e<r;e+=\ +2){i[e]=256*(t[e+1]-t[e])|0;i[e+1]=t[e]*s|0;256===i[e]&&0===i[e+1]||(n=!0)}n&&(e.decodeTransform=i)}if(this.params instanceof Dict){const t=this.params.get("ColorTransform");Number.isInteger(t)&&(e.colorTransform=t)}return shadow(this,"jpegOptions",e)}#N(e){for(let t=0,a=e.length-1;t<a;t++)if(255===e[t]&&216===e[t+1]){t>0&&(e=e.subarray(t));break}return e}decodeImage(e){if(this.eof)return this.buffer;e=this.#N(e||this.bytes);const t=new JpegImage(this.jpegOptions);t.parse(e);const a=t.getData({w\ +idth:this.drawWidth,height:this.drawHeight,forceRGBA:this.forceRGBA,forceRGB:this.forceRGB,isSourcePDF:!0});this.buffer=a;this.bufferLength=a.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}async getTransferableImage(){if(!await JpegStream.canUseImageDecoder)return null;const e=this.jpegOptions;if(e.decodeTransform)return null;let t;try{const a=this.canAsyncDecodeImageFromBuffer&&await this.stream.asyncGetBytes()||this.bytes;if(!a)return null;\ +let r=this.#N(a);const i=JpegImage.canUseImageDecoder(r,e.colorTransform);if(!i)return null;if(i.exifStart){r=r.slice();r.fill(0,i.exifStart,i.exifEnd)}t=new ImageDecoder({data:r,type:"image/jpeg",preferAnimation:!1});return(await t.decode()).image}catch(e){warn(`getTransferableImage - failed: "${e}".`);return null}finally{t?.close()}}}var OpenJPEG=async function(e={}){var t,a,r=e,i=new Promise(((e,r)=>{t=e;a=r})),n="./this.program",quit_=(e,t)=>{throw t},s=import.meta.url;try{new URL(".",s).hre\ +f}catch{}var o,c,l,h,u,d,f=console.log.bind(console),g=console.error.bind(console),p=!1;function updateMemoryViews(){var e=o.buffer;l=new Int8Array(e);new Int16Array(e);h=new Uint8Array(e);new Uint16Array(e);u=new Int32Array(e);d=new Uint32Array(e);new Float32Array(e);new Float64Array(e);new BigInt64Array(e);new BigUint64Array(e)}var m=0,b=null;class ExitStatus{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`;this.status=e}}var callRuntimeCallbacks=e=>{for(;e.le\ +ngth>0;)e.shift()(r)},y=[],addOnPostRun=e=>y.push(e),w=[],addOnPreRun=e=>w.push(e),x=!0,S=0,k={},handleException=e=>{if(e instanceof ExitStatus||"unwind"==e)return c;quit_(0,e)},keepRuntimeAlive=()=>x||S>0,_proc_exit=e=>{c=e;if(!keepRuntimeAlive()){r.onExit?.(e);p=!0}quit_(0,new ExitStatus(e))},_exit=(e,t)=>{c=e;_proc_exit(e)},callUserCallback=e=>{if(!p)try{e();(()=>{if(!keepRuntimeAlive())try{_exit(c)}catch(e){handleException(e)}})()}catch(e){handleException(e)}},growMemory=e=>{var t=(e-o.buffe\ +r.byteLength+65535)/65536|0;try{o.grow(t);updateMemoryViews();return 1}catch(e){}},C={},getEnvStrings=()=>{if(!getEnvStrings.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:n||"./this.program"};for(var t in C)void 0===C[t]?delete e[t]:e[t]=C[t];var a=[];for(var t in e)a.push(`${t}=${e[t]}`);getEnvStrings.strings=a}return getEnvStrings.strings},\ +lengthBytesUTF8=e=>{for(var t=0,a=0;a<e.length;++a){var r=e.charCodeAt(a);if(r<=127)t++;else if(r<=2047)t+=2;else if(r>=55296&&r<=57343){t+=4;++a}else t+=3}return t},v=[null,[],[]],F="undefined"!=typeof TextDecoder?new TextDecoder:void 0,UTF8ArrayToString=(e,t=0,a=NaN)=>{for(var r=t+a,i=t;e[i]&&!(i>=r);)++i;if(i-t>16&&e.buffer&&F)return F.decode(e.subarray(t,i));for(var n="";t<i;){var s=e[t++];if(128&s){var o=63&e[t++];if(192!=(224&s)){var c=63&e[t++];if((s=224==(240&s)?(15&s)<<12|o<<6|c:(7&s)<<\ +18|o<<12|c<<6|63&e[t++])<65536)n+=String.fromCharCode(s);else{var l=s-65536;n+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else n+=String.fromCharCode((31&s)<<6|o)}else n+=String.fromCharCode(s)}return n},printChar=(e,t)=>{var a=v[e];if(0===t||10===t){(1===e?f:g)(UTF8ArrayToString(a));a.length=0}else a.push(t)},UTF8ToString=(e,t)=>e?UTF8ArrayToString(h,e,t):"";r.noExitRuntime&&(x=r.noExitRuntime);r.print&&(f=r.print);r.printErr&&(g=r.printErr);r.wasmBinary&&r.wasmBinary;r.arguments&&r.argumen\ +ts;r.thisProgram&&(n=r.thisProgram);r.writeArrayToMemory=(e,t)=>{l.set(e,t)};var T={l:()=>function abort(e){r.onAbort?.(e);g(e="Aborted("+e+")");p=!0;e+=". Build with -sASSERTIONS for more info.";var t=new WebAssembly.RuntimeError(e);a(t);throw t}(""),k:()=>{x=!1;S=0},m:(e,t)=>{if(k[e]){clearTimeout(k[e].id);delete k[e]}if(!t)return 0;var a=setTimeout((()=>{delete k[e];callUserCallback((()=>M(e,performance.now())))}),t);k[e]={id:a,timeout_ms:t};return 0},g:function _copy_pixels_1(e,t){e>>=2;cons\ +t a=r.imageData=new Uint8ClampedArray(t),i=u.subarray(e,e+t);a.set(i)},f:function _copy_pixels_3(e,t,a,i){e>>=2;t>>=2;a>>=2;const n=r.imageData=new Uint8ClampedArray(3*i),s=u.subarray(e,e+i),o=u.subarray(t,t+i),c=u.subarray(a,a+i);for(let e=0;e<i;e++){n[3*e]=s[e];n[3*e+1]=o[e];n[3*e+2]=c[e]}},e:function _copy_pixels_4(e,t,a,i,n){e>>=2;t>>=2;a>>=2;i>>=2;const s=r.imageData=new Uint8ClampedArray(4*n),o=u.subarray(e,e+n),c=u.subarray(t,t+n),l=u.subarray(a,a+n),h=u.subarray(i,i+n);for(let e=0;e<n;e+\ ++){s[4*e]=o[e];s[4*e+1]=c[e];s[4*e+2]=l[e];s[4*e+3]=h[e]}},n:e=>{var t,a,r=h.length,i=2147483648;if((e>>>=0)>i)return!1;for(var n=1;n<=4;n*=2){var s=r*(1+.2/n);s=Math.min(s,e+100663296);var o=Math.min(i,(t=Math.max(e,s),a=65536,Math.ceil(t/a)*a));if(growMemory(o))return!0}return!1},p:(e,t)=>{var a=0,r=0;for(var i of getEnvStrings()){var n=t+a;d[e+r>>2]=n;a+=((e,t,a,r)=>{if(!(r>0))return 0;for(var i=a,n=a+r-1,s=0;s<e.length;++s){var o=e.charCodeAt(s);o>=55296&&o<=57343&&(o=65536+((1023&o)<<10)|10\ +23&e.charCodeAt(++s));if(o<=127){if(a>=n)break;t[a++]=o}else if(o<=2047){if(a+1>=n)break;t[a++]=192|o>>6;t[a++]=128|63&o}else if(o<=65535){if(a+2>=n)break;t[a++]=224|o>>12;t[a++]=128|o>>6&63;t[a++]=128|63&o}else{if(a+3>=n)break;t[a++]=240|o>>18;t[a++]=128|o>>12&63;t[a++]=128|o>>6&63;t[a++]=128|63&o}}t[a]=0;return a-i})(i,h,n,1/0)+1;r+=4}return 0},q:(e,t)=>{var a=getEnvStrings();d[e>>2]=a.length;var r=0;for(var i of a)r+=lengthBytesUTF8(i)+1;d[t>>2]=r;return 0},b:e=>52,o:function _fd_seek(e,t,a,r\ +){t=(i=t)<-9007199254740992||i>9007199254740992?NaN:Number(i);var i;return 70},c:(e,t,a,r)=>{for(var i=0,n=0;n<a;n++){var s=d[t>>2],o=d[t+4>>2];t+=8;for(var c=0;c<o;c++)printChar(e,h[s+c]);i+=o}d[r>>2]=i;return 0},r:function _gray_to_rgba(e,t){e>>=2;const a=r.imageData=new Uint8ClampedArray(4*t),i=u.subarray(e,e+t);for(let e=0;e<t;e++){a[4*e]=a[4*e+1]=a[4*e+2]=i[e];a[4*e+3]=255}},i:function _graya_to_rgba(e,t,a){e>>=2;t>>=2;const i=r.imageData=new Uint8ClampedArray(4*a),n=u.subarray(e,e+a),s=u.s\ +ubarray(t,t+a);for(let e=0;e<a;e++){i[4*e]=i[4*e+1]=i[4*e+2]=n[e];i[4*e+3]=s[e]}},d:function _jsPrintWarning(e){const t=UTF8ToString(e);(r.warn||console.warn)(`OpenJPEG: ${t}`)},j:_proc_exit,h:function _rgb_to_rgba(e,t,a,i){e>>=2;t>>=2;a>>=2;const n=r.imageData=new Uint8ClampedArray(4*i),s=u.subarray(e,e+i),o=u.subarray(t,t+i),c=u.subarray(a,a+i);for(let e=0;e<i;e++){n[4*e]=s[e];n[4*e+1]=o[e];n[4*e+2]=c[e];n[4*e+3]=255}},a:function _storeErrorMessage(e){const t=UTF8ToString(e);r.errorMessages?r.\ +errorMessages+="\\n"+t:r.errorMessages=t}},O=await async function createWasm(){function receiveInstance(e,t){O=e.exports;o=O.s;updateMemoryViews();!function removeRunDependency(e){m--;r.monitorRunDependencies?.(m);if(0==m&&b){var t=b;b=null;t()}}();return O}!function addRunDependency(e){m++;r.monitorRunDependencies?.(m)}();var e=function getWasmImports(){return{a:T}}();return new Promise(((t,a)=>{r.instantiateWasm(e,((e,a)=>{t(receiveInstance(e))}))}))}(),M=(O.t,r._malloc=O.u,r._free=O.v,r._jp2_d\ +ecode=O.w,O.x);!function preInit(){if(r.preInit){"function"==typeof r.preInit&&(r.preInit=[r.preInit]);for(;r.preInit.length>0;)r.preInit.shift()()}}();!function run(){if(m>0)b=run;else{!function preRun(){if(r.preRun){"function"==typeof r.preRun&&(r.preRun=[r.preRun]);for(;r.preRun.length;)addOnPreRun(r.preRun.shift())}callRuntimeCallbacks(w)}();if(m>0)b=run;else if(r.setStatus){r.setStatus("Running...");setTimeout((()=>{setTimeout((()=>r.setStatus("")),1);doRun()}),1)}else doRun()}function doRu\ +n(){r.calledRun=!0;if(!p){!function initRuntime(){O.t()}();t(r);r.onRuntimeInitialized?.();!function postRun(){if(r.postRun){"function"==typeof r.postRun&&(r.postRun=[r.postRun]);for(;r.postRun.length;)addOnPostRun(r.postRun.shift())}callRuntimeCallbacks(y)}()}}}();return i};const Ga=OpenJPEG;class JpxError extends fa{constructor(e){super(e,"JpxError")}}class JpxImage{static#E=null;static#P=null;static#L=null;static#v=!0;static#j=!0;static#F=null;static setOptions({handler:e,useWasm:t,useWorkerF\ +etch:a,wasmUrl:r}){this.#v=t;this.#j=a;this.#F=r;a||(this.#P=e)}static async#_(e){const t=`${this.#F}openjpeg_nowasm_fallback.js`;let a=null;try{a=(await import(\n/*webpackIgnore: true*/\n/*@vite-ignore*/\nt)).default()}catch(e){warn(`JpxImage#getJsModule: ${e}`)}e(a)}static async#U(e,t,a){const r="openjpeg.wasm";try{this.#E||(this.#j?this.#E=await fetchBinaryData(`${this.#F}${r}`):this.#E=await this.#P.sendWithPromise("FetchBinaryData",{type:"wasmFactory",filename:r}));return a((await WebAssembly.\ +instantiate(this.#E,t)).instance)}catch(t){warn(`JpxImage#instantiateWasm: ${t}`);this.#_(e);return null}finally{this.#P=null}}static async decode(e,{numComponents:t=4,isIndexedColormap:a=!1,smaskInData:r=!1,reducePower:i=0}={}){if(!this.#L){const{promise:e,resolve:t}=Promise.withResolvers(),a=[e];this.#v?a.push(Ga({warn,instantiateWasm:this.#U.bind(this,t)})):this.#_(t);this.#L=Promise.race(a)}const n=await this.#L;if(!n)throw new JpxError("OpenJPEG failed to initialize");let s;try{const o=e.le\ +ngth;s=n._malloc(o);n.writeArrayToMemory(e,s);if(n._jp2_decode(s,o,t>0?t:0,!!a,!!r,i)){const{errorMessages:e}=n;if(e){delete n.errorMessages;throw new JpxError(e)}throw new JpxError("Unknown error")}const{imageData:c}=n;n.imageData=null;return c}finally{s&&n._free(s)}}static cleanup(){this.#L=null}static parseImageProperties(e){let t=e.getByte();for(;t>=0;){const a=t;t=e.getByte();if(65361===(a<<8|t)){e.skip(4);const t=e.getInt32()>>>0,a=e.getInt32()>>>0,r=e.getInt32()>>>0,i=e.getInt32()>>>0;e.s\ +kip(16);return{width:t-r,height:a-i,bitsPerComponent:8,componentsCount:e.getUint16()}}}throw new JpxError("No size marker found in JPX stream")}}function addState(e,t,a,r,i){let n=e;for(let e=0,a=t.length-1;e<a;e++){const a=t[e];n=n[a]||=[]}n[t.at(-1)]={checkFn:a,iterateFn:r,processFn:i}}const Va=[];addState(Va,[Be,Ne,Yt,Re],null,(function iterateInlineImageGroup(e,t){const a=e.fnArray,r=(t-(e.iCurr-3))%4;switch(r){case 0:return a[t]===Be;case 1:return a[t]===Ne;case 2:return a[t]===Yt;case 3:re\ +turn a[t]===Re}throw new Error(`iterateInlineImageGroup - invalid pos: ${r}`)}),(function foundInlineImageGroup(e,t){const a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-3,s=i-2,o=i-1,c=Math.min(Math.floor((t-n)/4),200);if(c<10)return t-(t-n)%4;let l=0;const h=[];let u=0,d=1,f=1;for(let e=0;e<c;e++){const t=r[s+(e<<2)],a=r[o+(e<<2)][0];if(d+a.width>1e3){l=Math.max(l,d);f+=u+2;d=0;u=0}h.push({transform:t,x:d,y:f,w:a.width,h:a.height});d+=a.width+2;u=Math.max(u,a.height)}const g=Math.max(l,d)+1,p=f+u+1,m\ +=new Uint8Array(g*p*4),b=g<<2;for(let e=0;e<c;e++){const t=r[o+(e<<2)][0].data,a=h[e].w<<2;let i=0,n=h[e].x+h[e].y*g<<2;m.set(t.subarray(0,a),n-b);for(let r=0,s=h[e].h;r<s;r++){m.set(t.subarray(i,i+a),n);i+=a;n+=b}m.set(t.subarray(i-a,i),n);for(;n>=0;){t[n-4]=t[n];t[n-3]=t[n+1];t[n-2]=t[n+2];t[n-1]=t[n+3];t[n+a]=t[n+a-4];t[n+a+1]=t[n+a-3];t[n+a+2]=t[n+a-2];t[n+a+3]=t[n+a-1];n-=b}}const y={width:g,height:p};if(e.isOffscreenCanvasSupported){const e=new OffscreenCanvas(g,p);e.getContext("2d").putIm\ +ageData(new ImageData(new Uint8ClampedArray(m.buffer),g,p),0,0);y.bitmap=e.transferToImageBitmap();y.data=null}else{y.kind=v;y.data=m}a.splice(n,4*c,Zt);r.splice(n,4*c,[y,h]);return n+1}));addState(Va,[Be,Ne,Vt,Re],null,(function iterateImageMaskGroup(e,t){const a=e.fnArray,r=(t-(e.iCurr-3))%4;switch(r){case 0:return a[t]===Be;case 1:return a[t]===Ne;case 2:return a[t]===Vt;case 3:return a[t]===Re}throw new Error(`iterateImageMaskGroup - invalid pos: ${r}`)}),(function foundImageMaskGroup(e,t){c\ +onst a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-3,s=i-2,o=i-1;let c=Math.floor((t-n)/4);if(c<10)return t-(t-n)%4;let l,h,u=!1;const d=r[o][0],f=r[s][0],g=r[s][1],p=r[s][2],m=r[s][3];if(g===p){u=!0;l=s+4;let e=o+4;for(let t=1;t<c;t++,l+=4,e+=4){h=r[l];if(r[e][0]!==d||h[0]!==f||h[1]!==g||h[2]!==p||h[3]!==m){t<10?u=!1:c=t;break}}}if(u){c=Math.min(c,1e3);const e=new Float32Array(2*c);l=s;for(let t=0;t<c;t++,l+=4){h=r[l];e[t<<1]=h[4];e[1+(t<<1)]=h[5]}a.splice(n,4*c,ea);r.splice(n,4*c,[d,f,g,p,m,e])}else\ +{c=Math.min(c,100);const e=[];for(let t=0;t<c;t++){h=r[s+(t<<2)];const a=r[o+(t<<2)][0];e.push({data:a.data,width:a.width,height:a.height,interpolate:a.interpolate,count:a.count,transform:h})}a.splice(n,4*c,Kt);r.splice(n,4*c,[e])}return n+1}));addState(Va,[Be,Ne,Jt,Re],(function(e){const t=e.argsArray,a=e.iCurr-2;return 0===t[a][1]&&0===t[a][2]}),(function iterateImageGroup(e,t){const a=e.fnArray,r=e.argsArray,i=(t-(e.iCurr-3))%4;switch(i){case 0:return a[t]===Be;case 1:if(a[t]!==Ne)return!1;co\ +nst i=e.iCurr-2,n=r[i][0],s=r[i][3];return r[t][0]===n&&0===r[t][1]&&0===r[t][2]&&r[t][3]===s;case 2:if(a[t]!==Jt)return!1;const o=r[e.iCurr-1][0];return r[t][0]===o;case 3:return a[t]===Re}throw new Error(`iterateImageGroup - invalid pos: ${i}`)}),(function(e,t){const a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-3,s=i-2,o=r[i-1][0],c=r[s][0],l=r[s][3],h=Math.min(Math.floor((t-n)/4),1e3);if(h<3)return t-(t-n)%4;const u=new Float32Array(2*h);let d=s;for(let e=0;e<h;e++,d+=4){const t=r[d];u[e<<1]=t[4];\ +u[1+(e<<1)]=t[5]}const f=[o,c,l,u];a.splice(n,4*h,Qt);r.splice(n,4*h,f);return n+1}));addState(Va,[Qe,nt,ht,dt,et],null,(function iterateShowTextGroup(e,t){const a=e.fnArray,r=e.argsArray,i=(t-(e.iCurr-4))%5;switch(i){case 0:return a[t]===Qe;case 1:return a[t]===nt;case 2:return a[t]===ht;case 3:if(a[t]!==dt)return!1;const i=e.iCurr-3,n=r[i][0],s=r[i][1];return r[t][0]===n&&r[t][1]===s;case 4:return a[t]===et}throw new Error(`iterateShowTextGroup - invalid pos: ${i}`)}),(function(e,t){const a=e.\ +fnArray,r=e.argsArray,i=e.iCurr,n=i-4,s=i-3,o=i-2,c=i-1,l=i,h=r[s][0],u=r[s][1];let d=Math.min(Math.floor((t-n)/5),1e3);if(d<3)return t-(t-n)%5;let f=n;if(n>=4&&a[n-4]===a[s]&&a[n-3]===a[o]&&a[n-2]===a[c]&&a[n-1]===a[l]&&r[n-4][0]===h&&r[n-4][1]===u){d++;f-=5}let g=f+4;for(let e=1;e<d;e++){a.splice(g,3);r.splice(g,3);g+=2}return g+1}));addState(Va,[Be,Ne,aa,Re],(e=>{const t=e.argsArray,a=t[e.iCurr-1][0];if(a!==qe&&a!==He&&a!==$e&&a!==Ge&&a!==Ve&&a!==Ke)return!0;const r=t[e.iCurr-2];return 1===r[\ +0]&&0===r[1]&&0===r[2]&&1===r[3]}),(()=>!1),((e,t)=>{const{fnArray:a,argsArray:r}=e,i=e.iCurr,n=i-3,s=i-2,o=r[i-1],c=r[s],[,[l],h]=o;if(h){Util.scaleMinMax(c,h);for(let e=0,t=l.length;e<t;)switch(l[e++]){case sa:case oa:Util.applyTransform(l,c,e);e+=2;break;case ca:Util.applyTransformToBezier(l,c,e);e+=6}}a.splice(n,4,aa);r.splice(n,4,o);return n+1}));class NullOptimizer{constructor(e){this.queue=e}_optimize(){}push(e,t){this.queue.fnArray.push(e);this.queue.argsArray.push(t);this._optimize()}fl\ +ush(){}reset(){}}class QueueOptimizer extends NullOptimizer{constructor(e){super(e);this.state=null;this.context={iCurr:0,fnArray:e.fnArray,argsArray:e.argsArray,isOffscreenCanvasSupported:OperatorList.isOffscreenCanvasSupported};this.match=null;this.lastProcessed=0}_optimize(){const e=this.queue.fnArray;let t=this.lastProcessed,a=e.length,r=this.state,i=this.match;if(!r&&!i&&t+1===a&&!Va[e[t]]){this.lastProcessed=a;return}const n=this.context;for(;t<a;){if(i){if((0,i.iterateFn)(n,t)){t++;contin\ +ue}t=(0,i.processFn)(n,t+1);a=e.length;i=null;r=null;if(t>=a)break}r=(r||Va)[e[t]];if(r&&!Array.isArray(r)){n.iCurr=t;t++;if(!r.checkFn||(0,r.checkFn)(n)){i=r;r=null}else r=null}else t++}this.state=r;this.match=i;this.lastProcessed=t}flush(){for(;this.match;){const e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e);this.match=null;this.state=null;this._optimize()}}reset(){this.state=null;this.match=null;this.lastProcessed=0}}class OperatorList{static CHUNK_SI\ +ZE=1e3;static CHUNK_SIZE_ABOUT=this.CHUNK_SIZE-5;static isOffscreenCanvasSupported=!1;constructor(e=0,t){this._streamSink=t;this.fnArray=[];this.argsArray=[];this.optimizer=!t||e&d?new NullOptimizer(this):new QueueOptimizer(this);this.dependencies=new Set;this._totalLength=0;this.weight=0;this._resolved=t?null:Promise.resolve()}static setOptions({isOffscreenCanvasSupported:e}){this.isOffscreenCanvasSupported=e}get length(){return this.argsArray.length}get ready(){return this._resolved||this._str\ +eamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(e,t){this.optimizer.push(e,t);this.weight++;this._streamSink&&(this.weight>=OperatorList.CHUNK_SIZE||this.weight>=OperatorList.CHUNK_SIZE_ABOUT&&(e===Re||e===et))&&this.flush()}addImageOps(e,t,a,r=!1){if(r){this.addOp(Be);this.addOp(De,[[["SMask",!1]]])}void 0!==a&&this.addOp(jt,["OC",a]);this.addOp(e,t);void 0!==a&&this.addOp(_t,[]);r&&this.addOp(Re)}addDependency(e){if(!this.dependencies.has(e)){this.dependencies.add(e)\ +;this.addOp(ke,[e])}}addDependencies(e){for(const t of e)this.addDependency(t)}addOpList(e){if(e instanceof OperatorList){for(const t of e.dependencies)this.dependencies.add(t);for(let t=0,a=e.length;t<a;t++)this.addOp(e.fnArray[t],e.argsArray[t])}else warn(\'addOpList - ignoring invalid "opList" parameter.\')}getIR(){return{fnArray:this.fnArray,argsArray:this.argsArray,length:this.length}}get _transfers(){const e=[],{fnArray:t,argsArray:a,length:r}=this;for(let i=0;i<r;i++)switch(t[i]){case Yt:ca\ +se Zt:case Vt:{const{bitmap:t,data:r}=a[i][0];(t||r?.buffer)&&e.push(t||r.buffer);break}case aa:{const[,[t],r]=a[i];t&&e.push(t.buffer,r.buffer);break}case qt:const[t,r]=a[i];t&&e.push(t.buffer);r&&e.push(r.buffer);break;case ht:e.push(a[i][0].buffer)}return e}flush(e=!1,t=null){this.optimizer.flush();const a=this.length;this._totalLength+=a;this._streamSink.enqueue({fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:e,separateAnnots:t,length:a},1,this._transfers);this.dependencies.clear();\ +this.fnArray.length=0;this.argsArray.length=0;this.weight=0;this.optimizer.reset()}}function hexToInt(e,t){let a=0;for(let r=0;r<=t;r++)a=a<<8|e[r];return a>>>0}function hexToStr(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,t+1))}function addHex(e,t,a){let r=0;for(let i=a;i>=0;i--){r+=e[i]+t[i];e[i]=255&r;r>>=8}}function incHex(e,t){let a=1;for(let r=t;r>=0&&a>0;r--){a+=e[r];e[r]=255&a;a>>=8}}const Ka=16;class\ + BinaryCMapStream{constructor(e){this.buffer=e;this.pos=0;this.end=e.length;this.tmpBuf=new Uint8Array(19)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let e,t=0;do{const a=this.readByte();if(a<0)throw new FormatError("unexpected EOF in bcmap");e=!(128&a);t=t<<7|127&a}while(!e);return t}readSigned(){const e=this.readNumber();return 1&e?~(e>>>1):e>>>1}readHex(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1));this.pos+=t+1}readHexNumber(e,t){let a;const r=this\ +.tmpBuf;let i=0;do{const e=this.readByte();if(e<0)throw new FormatError("unexpected EOF in bcmap");a=!(128&e);r[i++]=127&e}while(!a);let n=t,s=0,o=0;for(;n>=0;){for(;o<8&&r.length>0;){s|=r[--i]<<o;o+=7}e[n]=255&s;n--;s>>=8;o-=8}}readHexSigned(e,t){this.readHexNumber(e,t);const a=1&e[t]?255:0;let r=0;for(let i=0;i<=t;i++){r=(1&r)<<8|e[i];e[i]=r>>1^a}}readString(){const e=this.readNumber(),t=new Array(e);for(let a=0;a<e;a++)t[a]=this.readNumber();return String.fromCharCode(...t)}}class BinaryCMapR\ +eader{async process(e,t,a){const r=new BinaryCMapStream(e),i=r.readByte();t.vertical=!!(1&i);let n=null;const s=new Uint8Array(Ka),o=new Uint8Array(Ka),c=new Uint8Array(Ka),l=new Uint8Array(Ka),h=new Uint8Array(Ka);let u,d;for(;(d=r.readByte())>=0;){const e=d>>5;if(7===e){switch(31&d){case 0:r.readString();break;case 1:n=r.readString()}continue}const a=!!(16&d),i=15&d;if(i+1>Ka)throw new Error("BinaryCMapReader.process: Invalid dataSize.");const f=1,g=r.readNumber();switch(e){case 0:r.readHex(s,\ +i);r.readHexNumber(o,i);addHex(o,s,i);t.addCodespaceRange(i+1,hexToInt(s,i),hexToInt(o,i));for(let e=1;e<g;e++){incHex(o,i);r.readHexNumber(s,i);addHex(s,o,i);r.readHexNumber(o,i);addHex(o,s,i);t.addCodespaceRange(i+1,hexToInt(s,i),hexToInt(o,i))}break;case 1:r.readHex(s,i);r.readHexNumber(o,i);addHex(o,s,i);r.readNumber();for(let e=1;e<g;e++){incHex(o,i);r.readHexNumber(s,i);addHex(s,o,i);r.readHexNumber(o,i);addHex(o,s,i);r.readNumber()}break;case 2:r.readHex(c,i);u=r.readNumber();t.mapOne(hex\ +ToInt(c,i),u);for(let e=1;e<g;e++){incHex(c,i);if(!a){r.readHexNumber(h,i);addHex(c,h,i)}u=r.readSigned()+(u+1);t.mapOne(hexToInt(c,i),u)}break;case 3:r.readHex(s,i);r.readHexNumber(o,i);addHex(o,s,i);u=r.readNumber();t.mapCidRange(hexToInt(s,i),hexToInt(o,i),u);for(let e=1;e<g;e++){incHex(o,i);if(a)s.set(o);else{r.readHexNumber(s,i);addHex(s,o,i)}r.readHexNumber(o,i);addHex(o,s,i);u=r.readNumber();t.mapCidRange(hexToInt(s,i),hexToInt(o,i),u)}break;case 4:r.readHex(c,f);r.readHex(l,i);t.mapOne(h\ +exToInt(c,f),hexToStr(l,i));for(let e=1;e<g;e++){incHex(c,f);if(!a){r.readHexNumber(h,f);addHex(c,h,f)}incHex(l,i);r.readHexSigned(h,i);addHex(l,h,i);t.mapOne(hexToInt(c,f),hexToStr(l,i))}break;case 5:r.readHex(s,f);r.readHexNumber(o,f);addHex(o,s,f);r.readHex(l,i);t.mapBfRange(hexToInt(s,f),hexToInt(o,f),hexToStr(l,i));for(let e=1;e<g;e++){incHex(o,f);if(a)s.set(o);else{r.readHexNumber(s,f);addHex(s,o,f)}r.readHexNumber(o,f);addHex(o,s,f);r.readHex(l,i);t.mapBfRange(hexToInt(s,f),hexToInt(o,f),\ +hexToStr(l,i))}break;default:throw new Error(`BinaryCMapReader.process - unknown type: ${e}`)}}return n?a(n):t}}class Ascii85Stream extends DecodeStream{constructor(e,t){t&&(t*=.8);super(t);this.str=e;this.dict=e.dict;this.input=new Uint8Array(5)}readBlock(){const e=this.str;let t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();if(-1===t||126===t){this.eof=!0;return}const a=this.bufferLength;let r,i;if(122===t){r=this.ensureBuffer(a+4);for(i=0;i<4;++i)r[a+i]=0;this.bufferLength+=4}else{const n=t\ +his.input;n[0]=t;for(i=1;i<5;++i){t=e.getByte();for(;isWhiteSpace(t);)t=e.getByte();n[i]=t;if(-1===t||126===t)break}r=this.ensureBuffer(a+i-1);this.bufferLength+=i-1;if(i<5){for(;i<5;++i)n[i]=117;this.eof=!0}let s=0;for(i=0;i<5;++i)s=85*s+(n[i]-33);for(i=3;i>=0;--i){r[a+i]=255&s;s>>=8}}}}class AsciiHexStream extends DecodeStream{constructor(e,t){t&&(t*=.5);super(t);this.str=e;this.dict=e.dict;this.firstDigit=-1}readBlock(){const e=this.str.getBytes(8e3);if(!e.length){this.eof=!0;return}const t=e\ +.length+1>>1,a=this.ensureBuffer(this.bufferLength+t);let r=this.bufferLength,i=this.firstDigit;for(const t of e){let e;if(t>=48&&t<=57)e=15&t;else{if(!(t>=65&&t<=70||t>=97&&t<=102)){if(62===t){this.eof=!0;break}continue}e=9+(15&t)}if(i<0)i=e;else{a[r++]=i<<4|e;i=-1}}if(i>=0&&this.eof){a[r++]=i<<4;i=-1}this.firstDigit=i;this.bufferLength=r}}const Ja=-1,Ya=[[-1,-1],[-1,-1],[7,8],[7,7],[6,6],[6,6],[6,5],[6,5],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1]\ +,[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[\ +1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]],Za=[[-1,-1],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],Qa=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,4\ +5],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[\ +8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],\ +[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[\ +9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5\ +,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],\ +[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],\ +[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],er=[[-1,-1],[-1,-1],[12,-2],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[\ +-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,1\ +8],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],tr\ +=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,\ +10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,\ +192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],ar=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4\ +,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];class CCITTFaxDecoder{constructor(e,t={}){if("function"!=typeof e?.next)throw new Error(\'CCITTFaxDecoder - invalid "source" parameter.\');this.source=e;this.eof=!1;this.encoding=t.K||0;this.eoline=t.End\ +OfLine||!1;this.byteAlign=t.EncodedByteAlign||!1;this.columns=t.Columns||1728;this.rows=t.Rows||0;this.eoblock=t.EndOfBlock??!0;this.black=t.BlackIs1||!1;this.codingLine=new Uint32Array(this.columns+1);this.refLine=new Uint32Array(this.columns+2);this.codingLine[0]=this.columns;this.codingPos=0;this.row=0;this.nextLine2D=this.encoding<0;this.inputBits=0;this.inputBuf=0;this.outputBits=0;this.rowsDone=!1;let a;for(;0===(a=this._lookBits(12));)this._eatBits(1);1===a&&this._eatBits(12);if(this.enco\ +ding>0){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}}readNextChar(){if(this.eof)return-1;const e=this.refLine,t=this.codingLine,a=this.columns;let r,i,n,s,o;if(0===this.outputBits){this.rowsDone&&(this.eof=!0);if(this.eof)return-1;this.err=!1;let n,o,c;if(this.nextLine2D){for(s=0;t[s]<a;++s)e[s]=t[s];e[s++]=a;e[s]=a;t[0]=0;this.codingPos=0;r=0;i=0;for(;t[this.codingPos]<a;){n=this._getTwoDimCode();switch(n){case 0:this._addPixels(e[r+1],i);e[r+1]<a&&(r+=2);break;case 1:n=o=0;if(i){do{n+=\ +c=this._getBlackCode()}while(c>=64);do{o+=c=this._getWhiteCode()}while(c>=64)}else{do{n+=c=this._getWhiteCode()}while(c>=64);do{o+=c=this._getBlackCode()}while(c>=64)}this._addPixels(t[this.codingPos]+n,i);t[this.codingPos]<a&&this._addPixels(t[this.codingPos]+o,1^i);for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2;break;case 7:this._addPixels(e[r]+3,i);i^=1;if(t[this.codingPos]<a){++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 5:this._addPixels(e[r]+2,i);i^=1;if(t[this.codingPos]<a){++r;fo\ +r(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 3:this._addPixels(e[r]+1,i);i^=1;if(t[this.codingPos]<a){++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 2:this._addPixels(e[r],i);i^=1;if(t[this.codingPos]<a){++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 8:this._addPixelsNeg(e[r]-3,i);i^=1;if(t[this.codingPos]<a){r>0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case 6:this._addPixelsNeg(e[r]-2,i);i^=1;if(t[this.codingPos]<a){r>0?--r:++r;for(;e[r]<=t[this.codi\ +ngPos]&&e[r]<a;)r+=2}break;case 4:this._addPixelsNeg(e[r]-1,i);i^=1;if(t[this.codingPos]<a){r>0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]<a;)r+=2}break;case Ja:this._addPixels(a,0);this.eof=!0;break;default:info("bad 2d code");this._addPixels(a,0);this.err=!0}}}else{t[0]=0;this.codingPos=0;i=0;for(;t[this.codingPos]<a;){n=0;if(i)do{n+=c=this._getBlackCode()}while(c>=64);else do{n+=c=this._getWhiteCode()}while(c>=64);this._addPixels(t[this.codingPos]+n,i);i^=1}}let l=!1;this.byteAlign&&(this.inp\ +utBits&=-8);if(this.eoblock||this.row!==this.rows-1){n=this._lookBits(12);if(this.eoline)for(;n!==Ja&&1!==n;){this._eatBits(1);n=this._lookBits(12)}else for(;0===n;){this._eatBits(1);n=this._lookBits(12)}if(1===n){this._eatBits(12);l=!0}else n===Ja&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}if(this.eoblock&&l&&this.byteAlign){n=this._lookBits(12);if(1===n){this._eatBits(12);if(this.encoding>0){this._look\ +Bits(1);this._eatBits(1)}if(this.encoding>=0)for(s=0;s<4;++s){n=this._lookBits(12);1!==n&&info("bad rtc code: "+n);this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}}this.eof=!0}}else if(this.err&&this.eoline){for(;;){n=this._lookBits(13);if(n===Ja){this.eof=!0;return-1}if(n>>1==1)break;this._eatBits(1)}this._eatBits(12);if(this.encoding>0){this._eatBits(1);this.nextLine2D=!(1&n)}}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1];this.row++}if(this.outputBits>\ +=8){o=1&this.codingPos?0:255;this.outputBits-=8;if(0===this.outputBits&&t[this.codingPos]<a){this.codingPos++;this.outputBits=t[this.codingPos]-t[this.codingPos-1]}}else{n=8;o=0;do{if("number"!=typeof this.outputBits)throw new FormatError(\'Invalid /CCITTFaxDecode data, "outputBits" must be a number.\');if(this.outputBits>n){o<<=n;1&this.codingPos||(o|=255>>8-n);this.outputBits-=n;n=0}else{o<<=this.outputBits;1&this.codingPos||(o|=255>>8-this.outputBits);n-=this.outputBits;this.outputBits=0;if(t[t\ +his.codingPos]<a){this.codingPos++;this.outputBits=t[this.codingPos]-t[this.codingPos-1]}else if(n>0){o<<=n;n=0}}}while(n)}this.black&&(o^=255);return o}_addPixels(e,t){const a=this.codingLine;let r=this.codingPos;if(e>a[r]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&r^t&&++r;a[r]=e}this.codingPos=r}_addPixelsNeg(e,t){const a=this.codingLine;let r=this.codingPos;if(e>a[r]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&r^t&&++r;a[r]=e\ +}else if(e<a[r]){if(e<0){info("invalid code");this.err=!0;e=0}for(;r>0&&e<a[r-1];)--r;a[r]=e}this.codingPos=r}_findTableCode(e,t,a,r){const i=r||0;for(let r=e;r<=t;++r){let e=this._lookBits(r);if(e===Ja)return[!0,1,!1];r<t&&(e<<=t-r);if(!i||e>=i){const t=a[e-i];if(t[0]===r){this._eatBits(r);return[!0,t[1],!0]}}}return[!1,0,!1]}_getTwoDimCode(){let e,t=0;if(this.eoblock){t=this._lookBits(7);e=Ya[t];if(e?.[0]>0){this._eatBits(e[0]);return e[1]}}else{const e=this._findTableCode(1,7,Ya);if(e[0]&&e[2\ +])return e[1]}info("Bad two dim code");return Ja}_getWhiteCode(){let e,t=0;if(this.eoblock){t=this._lookBits(12);if(t===Ja)return 1;e=t>>5?Qa[t>>3]:Za[t];if(e[0]>0){this._eatBits(e[0]);return e[1]}}else{let e=this._findTableCode(1,9,Qa);if(e[0])return e[1];e=this._findTableCode(11,12,Za);if(e[0])return e[1]}info("bad white code");this._eatBits(1);return 1}_getBlackCode(){let e,t;if(this.eoblock){e=this._lookBits(13);if(e===Ja)return 1;t=e>>7?!(e>>9)&&e>>7?tr[(e>>1)-64]:ar[e>>7]:er[e];if(t[0]>0){\ +this._eatBits(t[0]);return t[1]}}else{let e=this._findTableCode(2,6,ar);if(e[0])return e[1];e=this._findTableCode(7,12,tr,64);if(e[0])return e[1];e=this._findTableCode(10,13,er);if(e[0])return e[1]}info("bad black code");this._eatBits(1);return 1}_lookBits(e){let t;for(;this.inputBits<e;){if(-1===(t=this.source.next()))return 0===this.inputBits?Ja:this.inputBuf<<e-this.inputBits&65535>>16-e;this.inputBuf=this.inputBuf<<8|t;this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}_eat\ +Bits(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}class CCITTFaxStream extends DecodeStream{constructor(e,t,a){super(t);this.str=e;this.dict=e.dict;a instanceof Dict||(a=Dict.empty);const r={next:()=>e.getByte()};this.ccittFaxDecoder=new CCITTFaxDecoder(r,{K:a.get("K"),EndOfLine:a.get("EndOfLine"),EncodedByteAlign:a.get("EncodedByteAlign"),Columns:a.get("Columns"),Rows:a.get("Rows"),EndOfBlock:a.get("EndOfBlock"),BlackIs1:a.get("BlackIs1")})}readBlock(){for(;!this.eof;){const e=this.ccittFaxDec\ +oder.readNextChar();if(-1===e){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1);this.buffer[this.bufferLength++]=e}}}const rr=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ir=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),nr=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,45900\ +9,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),sr=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,59\ +0040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,52436\ +6,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,5\ +24339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,5244\ +16,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,\ +524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524\ +297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575\ +,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],or=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];class FlateStream extends DecodeStream{constructor(e,t){sup\ +er(t);this.str=e;this.dict=e.dict;const a=e.getByte(),r=e.getByte();if(-1===a||-1===r)throw new FormatError(`Invalid header in flate stream: ${a}, ${r}`);if(8!=(15&a))throw new FormatError(`Unknown compression method in flate stream: ${a}, ${r}`);if(((a<<8)+r)%31!=0)throw new FormatError(`Bad FCHECK in flate stream: ${a}, ${r}`);if(32&r)throw new FormatError(`FDICT bit set in flate stream: ${a}, ${r}`);this.codeSize=0;this.codeBuf=0}async getImageData(e,t){const a=await this.asyncGetBytes();retu\ +rn a?a.length<=e?a:a.subarray(0,e):this.getBytes(e)}async asyncGetBytes(){this.str.reset();const e=this.str.getBytes();try{const{readable:t,writable:a}=new DecompressionStream("deflate"),r=a.getWriter();await r.ready;r.write(e).then((async()=>{await r.ready;await r.close()})).catch((()=>{}));const i=[];let n=0;for await(const e of t){i.push(e);n+=e.byteLength}const s=new Uint8Array(n);let o=0;for(const e of i){s.set(e,o);o+=e.byteLength}return s}catch{this.str=new Stream(e,2,e.length,this.str.di\ +ct);this.reset();return null}}get isAsync(){return!0}getBits(e){const t=this.str;let a,r=this.codeSize,i=this.codeBuf;for(;r<e;){if(-1===(a=t.getByte()))throw new FormatError("Bad encoding in flate stream");i|=a<<r;r+=8}a=i&(1<<e)-1;this.codeBuf=i>>e;this.codeSize=r-=e;return a}getCode(e){const t=this.str,a=e[0],r=e[1];let i,n=this.codeSize,s=this.codeBuf;for(;n<r&&-1!==(i=t.getByte());){s|=i<<n;n+=8}const o=a[s&(1<<r)-1],c=o>>16,l=65535&o;if(c<1||n<c)throw new FormatError("Bad encoding in flate\ + stream");this.codeBuf=s>>c;this.codeSize=n-c;return l}generateHuffmanTable(e){const t=e.length;let a,r=0;for(a=0;a<t;++a)e[a]>r&&(r=e[a]);const i=1<<r,n=new Int32Array(i);for(let s=1,o=0,c=2;s<=r;++s,o<<=1,c<<=1)for(let r=0;r<t;++r)if(e[r]===s){let e=0,t=o;for(a=0;a<s;++a){e=e<<1|1&t;t>>=1}for(a=e;a<i;a+=c)n[a]=s<<16|r;++o}return[n,r]}#X(e){info(e);this.eof=!0}readBlock(){let e,t,a;const r=this.str;try{t=this.getBits(3)}catch(e){this.#X(e.message);return}1&t&&(this.eof=!0);t>>=1;if(0===t){let t\ +;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}let a=t;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}a|=t<<8;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}let i=t;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}i|=t<<8;if(i!==(65535&~a)&&(0!==a||0!==i))throw new FormatError("Bad uncompressed block length in flate stream");this.codeBuf=0;this.codeSize=0;const n=this.bufferLength,s\ +=n+a;e=this.ensureBuffer(s);this.bufferLength=s;if(0===a)-1===r.peekByte()&&(this.eof=!0);else{const t=r.getBytes(a);e.set(t,n);t.length<a&&(this.eof=!0)}return}let i,n;if(1===t){i=sr;n=or}else{if(2!==t)throw new FormatError("Unknown block type in flate stream");{const e=this.getBits(5)+257,t=this.getBits(5)+1,r=this.getBits(4)+4,s=new Uint8Array(rr.length);let o;for(o=0;o<r;++o)s[rr[o]]=this.getBits(3);const c=this.generateHuffmanTable(s);a=0;o=0;const l=e+t,h=new Uint8Array(l);let u,d,f;for(;o\ +<l;){const e=this.getCode(c);if(16===e){u=2;d=3;f=a}else if(17===e){u=3;d=3;f=a=0}else{if(18!==e){h[o++]=a=e;continue}u=7;d=11;f=a=0}let t=this.getBits(u)+d;for(;t-- >0;)h[o++]=f}i=this.generateHuffmanTable(h.subarray(0,e));n=this.generateHuffmanTable(h.subarray(e,l))}}e=this.buffer;let s=e?e.length:0,o=this.bufferLength;for(;;){let t=this.getCode(i);if(t<256){if(o+1>=s){e=this.ensureBuffer(o+1);s=e.length}e[o++]=t;continue}if(256===t){this.bufferLength=o;return}t-=257;t=ir[t];let r=t>>16;r>0&&(\ +r=this.getBits(r));a=(65535&t)+r;t=this.getCode(n);t=nr[t];r=t>>16;r>0&&(r=this.getBits(r));const c=(65535&t)+r;if(o+a>=s){e=this.ensureBuffer(o+a);s=e.length}for(let t=0;t<a;++t,++o)e[o]=e[o-c]}}}const cr=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,swi\ +tchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmp\ +s:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:\ +1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46\ +,nlps:46,switchFlag:0}];class ArithmeticDecoder{constructor(e,t,a){this.data=e;this.bp=t;this.dataEnd=a;this.chigh=e[t];this.clow=0;this.byteIn();this.chigh=this.chigh<<7&65535|this.clow>>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768}byteIn(){const e=this.data;let t=this.bp;if(255===e[t])if(e[t+1]>143){this.clow+=65280;this.ct=8}else{t++;this.clow+=e[t]<<9;this.ct=7;this.bp=t}else{t++;this.clow+=t<this.dataEnd?e[t]<<8:65280;this.ct=8;this.bp=t}if(this.clow>65535){this.chigh+=this.cl\ +ow>>16;this.clow&=65535}}readBit(e,t){let a=e[t]>>1,r=1&e[t];const i=cr[a],n=i.qe;let s,o=this.a-n;if(this.chigh<n)if(o<n){o=n;s=r;a=i.nmps}else{o=n;s=1^r;1===i.switchFlag&&(r=s);a=i.nlps}else{this.chigh-=n;if(32768&o){this.a=o;return r}if(o<n){s=1^r;1===i.switchFlag&&(r=s);a=i.nlps}else{s=r;a=i.nmps}}do{0===this.ct&&this.byteIn();o<<=1;this.chigh=this.chigh<<1&65535|this.clow>>15&1;this.clow=this.clow<<1&65535;this.ct--}while(!(32768&o));this.a=o;e[t]=a<<1|r;return s}}class Jbig2Error extends f\ +a{constructor(e){super(e,"Jbig2Error")}}class ContextCache{getContexts(e){return e in this?this[e]:this[e]=new Int8Array(65536)}}class DecodingContext{constructor(e,t,a){this.data=e;this.start=t;this.end=a}get decoder(){return shadow(this,"decoder",new ArithmeticDecoder(this.data,this.start,this.end))}get contextCache(){return shadow(this,"contextCache",new ContextCache)}}function decodeInteger(e,t,a){const r=e.getContexts(t);let i=1;function readBits(e){let t=0;for(let n=0;n<e;n++){const e=a.re\ +adBit(r,i);i=i<256?i<<1|e:511&(i<<1|e)|256;t=t<<1|e}return t>>>0}const n=readBits(1),s=readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(32)+4436:readBits(12)+340:readBits(8)+84:readBits(6)+20:readBits(4)+4:readBits(2);let o;0===n?o=s:s>0&&(o=-s);return o>=-2147483648&&o<=va?o:null}function decodeIAID(e,t,a){const r=e.getContexts("IAID");let i=1;for(let e=0;e<a;e++){i=i<<1|t.readBit(r,i)}return a<31?i&(1<<a)-1:2147483647&i}const lr=["SymbolDictionary",null,null,null,"Intermedi\ +ateTextRegion",null,"ImmediateTextRegion","ImmediateLosslessTextRegion",null,null,null,null,null,null,null,null,"PatternDictionary",null,null,null,"IntermediateHalftoneRegion",null,"ImmediateHalftoneRegion","ImmediateLosslessHalftoneRegion",null,null,null,null,null,null,null,null,null,null,null,null,"IntermediateGenericRegion",null,"ImmediateGenericRegion","ImmediateLosslessGenericRegion","IntermediateGenericRefinementRegion",null,"ImmediateGenericRefinementRegion","ImmediateLosslessGenericRefin\ +ementRegion",null,null,null,null,"PageInformation","EndOfPage","EndOfStripe","EndOfFile","Profiles","Tables",null,null,null,null,null,null,null,null,"Extension"],hr=[[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:2,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{\ +x:0,y:-1},{x:1,y:-1},{x:-2,y:0},{x:-1,y:0}],[{x:-3,y:-1},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}]],ur=[{coding:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:-1,y:1},{x:0,y:1},{x:1,y:1}]},{coding:[{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:0,y:1},{x:1,y:1}]}],dr=[39717,1941,229,405],fr=[32,8];function decodeBitmap(e,t,a,r,i,n,s,o){if(\ +e){return decodeMMRBitmap(new Reader(o.data,o.start,o.end),t,a,!1)}if(0===r&&!n&&!i&&4===s.length&&3===s[0].x&&-1===s[0].y&&-3===s[1].x&&-1===s[1].y&&2===s[2].x&&-2===s[2].y&&-2===s[3].x&&-2===s[3].y)return function decodeBitmapTemplate0(e,t,a){const r=a.decoder,i=a.contextCache.getContexts("GB"),n=[];let s,o,c,l,h,u,d;for(o=0;o<t;o++){h=n[o]=new Uint8Array(e);u=o<1?h:n[o-1];d=o<2?h:n[o-2];s=d[0]<<13|d[1]<<12|d[2]<<11|u[0]<<7|u[1]<<6|u[2]<<5|u[3]<<4;for(c=0;c<e;c++){h[c]=l=r.readBit(i,s);s=(3173\ +5&s)<<1|(c+3<e?d[c+3]<<11:0)|(c+4<e?u[c+4]<<4:0)|l}}return n}(t,a,o);const c=!!n,l=hr[r].concat(s);l.sort(((e,t)=>e.y-t.y||e.x-t.x));const h=l.length,u=new Int8Array(h),d=new Int8Array(h),f=[];let g,p,m=0,b=0,y=0,w=0;for(p=0;p<h;p++){u[p]=l[p].x;d[p]=l[p].y;b=Math.min(b,l[p].x);y=Math.max(y,l[p].x);w=Math.min(w,l[p].y);p<h-1&&l[p].y===l[p+1].y&&l[p].x===l[p+1].x-1?m|=1<<h-1-p:f.push(p)}const x=f.length,S=new Int8Array(x),k=new Int8Array(x),C=new Uint16Array(x);for(g=0;g<x;g++){p=f[g];S[g]=l[p].x\ +;k[g]=l[p].y;C[g]=1<<h-1-p}const v=-b,F=-w,T=t-y,O=dr[r];let M=new Uint8Array(t);const D=[],R=o.decoder,N=o.contextCache.getContexts("GB");let E,L,j,_,U,X=0,q=0;for(let e=0;e<a;e++){if(i){X^=R.readBit(N,O);if(X){D.push(M);continue}}M=new Uint8Array(M);D.push(M);for(E=0;E<t;E++){if(c&&n[e][E]){M[E]=0;continue}if(E>=v&&E<T&&e>=F){q=q<<1&m;for(p=0;p<x;p++){L=e+k[p];j=E+S[p];_=D[L][j];if(_){_=C[p];q|=_}}}else{q=0;U=h-1;for(p=0;p<h;p++,U--){j=E+u[p];if(j>=0&&j<t){L=e+d[p];if(L>=0){_=D[L][j];_&&(q|=_<\ +<U)}}}}const a=R.readBit(N,q);M[E]=a}}return D}function decodeRefinement(e,t,a,r,i,n,s,o,c){let l=ur[a].coding;0===a&&(l=l.concat([o[0]]));const h=l.length,u=new Int32Array(h),d=new Int32Array(h);let f;for(f=0;f<h;f++){u[f]=l[f].x;d[f]=l[f].y}let g=ur[a].reference;0===a&&(g=g.concat([o[1]]));const p=g.length,m=new Int32Array(p),b=new Int32Array(p);for(f=0;f<p;f++){m[f]=g[f].x;b[f]=g[f].y}const y=r[0].length,w=r.length,x=fr[a],S=[],k=c.decoder,C=c.contextCache.getContexts("GR");let v=0;for(let a=\ +0;a<t;a++){if(s){v^=k.readBit(C,x);if(v)throw new Jbig2Error("prediction is not supported")}const t=new Uint8Array(e);S.push(t);for(let s=0;s<e;s++){let o,c,l=0;for(f=0;f<h;f++){o=a+d[f];c=s+u[f];o<0||c<0||c>=e?l<<=1:l=l<<1|S[o][c]}for(f=0;f<p;f++){o=a+b[f]-n;c=s+m[f]-i;o<0||o>=w||c<0||c>=y?l<<=1:l=l<<1|r[o][c]}const g=k.readBit(C,l);t[s]=g}}return S}function decodeTextRegion(e,t,a,r,i,n,s,o,c,l,h,u,d,f,g,p,m,b,y){if(e&&t)throw new Jbig2Error("refinement with Huffman is not supported");const w=[\ +];let x,S;for(x=0;x<r;x++){S=new Uint8Array(a);i&&S.fill(i);w.push(S)}const k=m.decoder,C=m.contextCache;let v=e?-f.tableDeltaT.decode(y):-decodeInteger(C,"IADT",k),F=0;x=0;for(;x<n;){v+=e?f.tableDeltaT.decode(y):decodeInteger(C,"IADT",k);F+=e?f.tableFirstS.decode(y):decodeInteger(C,"IAFS",k);let r=F;for(;;){let i=0;s>1&&(i=e?y.readBits(b):decodeInteger(C,"IAIT",k));const n=s*v+i,F=e?f.symbolIDTable.decode(y):decodeIAID(C,k,c),T=t&&(e?y.readBit():decodeInteger(C,"IARI",k));let O=o[F],M=O[0].leng\ +th,D=O.length;if(T){const e=decodeInteger(C,"IARDW",k),t=decodeInteger(C,"IARDH",k);M+=e;D+=t;O=decodeRefinement(M,D,g,O,(e>>1)+decodeInteger(C,"IARDX",k),(t>>1)+decodeInteger(C,"IARDY",k),!1,p,m)}let R=0;l?1&u?R=D-1:r+=D-1:u>1?r+=M-1:R=M-1;const N=n-(1&u?0:D-1),E=r-(2&u?M-1:0);let L,j,_;if(l)for(L=0;L<D;L++){S=w[E+L];if(!S)continue;_=O[L];const e=Math.min(a-N,M);switch(d){case 0:for(j=0;j<e;j++)S[N+j]|=_[j];break;case 2:for(j=0;j<e;j++)S[N+j]^=_[j];break;default:throw new Jbig2Error(`operator $\ +{d} is not supported`)}}else for(j=0;j<D;j++){S=w[N+j];if(S){_=O[j];switch(d){case 0:for(L=0;L<M;L++)S[E+L]|=_[L];break;case 2:for(L=0;L<M;L++)S[E+L]^=_[L];break;default:throw new Jbig2Error(`operator ${d} is not supported`)}}}x++;const U=e?f.tableDeltaS.decode(y):decodeInteger(C,"IADS",k);if(null===U)break;r+=R+U+h}}return w}function readSegmentHeader(e,t){const a={};a.number=readUint32(e,t);const r=e[t+4],i=63&r;if(!lr[i])throw new Jbig2Error("invalid segment type: "+i);a.type=i;a.typeName=lr[\ +i];a.deferredNonRetain=!!(128&r);const n=!!(64&r),s=e[t+5];let o=s>>5&7;const c=[31&s];let l=t+6;if(7===s){o=536870911&readUint32(e,l-1);l+=3;let t=o+7>>3;c[0]=e[l++];for(;--t>0;)c.push(e[l++])}else if(5===s||6===s)throw new Jbig2Error("invalid referred-to flags");a.retainBits=c;let h=4;a.number<=256?h=1:a.number<=65536&&(h=2);const u=[];let d,f;for(d=0;d<o;d++){let t;t=1===h?e[l]:2===h?readUint16(e,l):readUint32(e,l);u.push(t);l+=h}a.referredTo=u;if(n){a.pageAssociation=readUint32(e,l);l+=4}els\ +e a.pageAssociation=e[l++];a.length=readUint32(e,l);l+=4;if(4294967295===a.length){if(38!==i)throw new Jbig2Error("invalid unknown segment length");{const t=readRegionSegmentInformation(e,l),r=!!(1&e[l+gr]),i=6,n=new Uint8Array(i);if(!r){n[0]=255;n[1]=172}n[2]=t.height>>>24&255;n[3]=t.height>>16&255;n[4]=t.height>>8&255;n[5]=255&t.height;for(d=l,f=e.length;d<f;d++){let t=0;for(;t<i&&n[t]===e[d+t];)t++;if(t===i){a.length=d+i;break}}if(4294967295===a.length)throw new Jbig2Error("segment end was no\ +t found")}}a.headerEnd=l;return a}function readSegments(e,t,a,r){const i=[];let n=a;for(;n<r;){const a=readSegmentHeader(t,n);n=a.headerEnd;const r={header:a,data:t};if(!e.randomAccess){r.start=n;n+=a.length;r.end=n}i.push(r);if(51===a.type)break}if(e.randomAccess)for(let e=0,t=i.length;e<t;e++){i[e].start=n;n+=i[e].header.length;i[e].end=n}return i}function readRegionSegmentInformation(e,t){return{width:readUint32(e,t),height:readUint32(e,t+4),x:readUint32(e,t+8),y:readUint32(e,t+12),combinatio\ +nOperator:7&e[t+16]}}const gr=17;function processSegment(e,t){const a=e.header,r=e.data,i=e.end;let n,s,o,c,l=e.start;switch(a.type){case 0:const e={},t=readUint16(r,l);e.huffman=!!(1&t);e.refinement=!!(2&t);e.huffmanDHSelector=t>>2&3;e.huffmanDWSelector=t>>4&3;e.bitmapSizeSelector=t>>6&1;e.aggregationInstancesSelector=t>>7&1;e.bitmapCodingContextUsed=!!(256&t);e.bitmapCodingContextRetained=!!(512&t);e.template=t>>10&3;e.refinementTemplate=t>>12&1;l+=2;if(!e.huffman){c=0===e.template?4:1;s=[];fo\ +r(o=0;o<c;o++){s.push({x:readInt8(r,l),y:readInt8(r,l+1)});l+=2}e.at=s}if(e.refinement&&!e.refinementTemplate){s=[];for(o=0;o<2;o++){s.push({x:readInt8(r,l),y:readInt8(r,l+1)});l+=2}e.refinementAt=s}e.numberOfExportedSymbols=readUint32(r,l);l+=4;e.numberOfNewSymbols=readUint32(r,l);l+=4;n=[e,a.number,a.referredTo,r,l,i];break;case 6:case 7:const h={};h.info=readRegionSegmentInformation(r,l);l+=gr;const u=readUint16(r,l);l+=2;h.huffman=!!(1&u);h.refinement=!!(2&u);h.logStripSize=u>>2&3;h.stripSiz\ +e=1<<h.logStripSize;h.referenceCorner=u>>4&3;h.transposed=!!(64&u);h.combinationOperator=u>>7&3;h.defaultPixelValue=u>>9&1;h.dsOffset=u<<17>>27;h.refinementTemplate=u>>15&1;if(h.huffman){const e=readUint16(r,l);l+=2;h.huffmanFS=3&e;h.huffmanDS=e>>2&3;h.huffmanDT=e>>4&3;h.huffmanRefinementDW=e>>6&3;h.huffmanRefinementDH=e>>8&3;h.huffmanRefinementDX=e>>10&3;h.huffmanRefinementDY=e>>12&3;h.huffmanRefinementSizeSelector=!!(16384&e)}if(h.refinement&&!h.refinementTemplate){s=[];for(o=0;o<2;o++){s.push\ +({x:readInt8(r,l),y:readInt8(r,l+1)});l+=2}h.refinementAt=s}h.numberOfSymbolInstances=readUint32(r,l);l+=4;n=[h,a.referredTo,r,l,i];break;case 16:const d={},f=r[l++];d.mmr=!!(1&f);d.template=f>>1&3;d.patternWidth=r[l++];d.patternHeight=r[l++];d.maxPatternIndex=readUint32(r,l);l+=4;n=[d,a.number,r,l,i];break;case 22:case 23:const g={};g.info=readRegionSegmentInformation(r,l);l+=gr;const p=r[l++];g.mmr=!!(1&p);g.template=p>>1&3;g.enableSkip=!!(8&p);g.combinationOperator=p>>4&7;g.defaultPixelValue=\ +p>>7&1;g.gridWidth=readUint32(r,l);l+=4;g.gridHeight=readUint32(r,l);l+=4;g.gridOffsetX=4294967295&readUint32(r,l);l+=4;g.gridOffsetY=4294967295&readUint32(r,l);l+=4;g.gridVectorX=readUint16(r,l);l+=2;g.gridVectorY=readUint16(r,l);l+=2;n=[g,a.referredTo,r,l,i];break;case 38:case 39:const m={};m.info=readRegionSegmentInformation(r,l);l+=gr;const b=r[l++];m.mmr=!!(1&b);m.template=b>>1&3;m.prediction=!!(8&b);if(!m.mmr){c=0===m.template?4:1;s=[];for(o=0;o<c;o++){s.push({x:readInt8(r,l),y:readInt8(r,\ +l+1)});l+=2}m.at=s}n=[m,r,l,i];break;case 48:const y={width:readUint32(r,l),height:readUint32(r,l+4),resolutionX:readUint32(r,l+8),resolutionY:readUint32(r,l+12)};4294967295===y.height&&delete y.height;const w=r[l+16];readUint16(r,l+17);y.lossless=!!(1&w);y.refinement=!!(2&w);y.defaultPixelValue=w>>2&1;y.combinationOperator=w>>3&3;y.requiresBuffer=!!(32&w);y.combinationOperatorOverride=!!(64&w);n=[y];break;case 49:case 50:case 51:case 62:break;case 53:n=[a.number,r,l,i];break;default:throw new J\ +big2Error(`segment type ${a.typeName}(${a.type}) is not implemented`)}const h="on"+a.typeName;h in t&&t[h].apply(t,n)}function processSegments(e,t){for(let a=0,r=e.length;a<r;a++)processSegment(e[a],t)}class SimpleSegmentVisitor{onPageInformation(e){this.currentPageInfo=e;const t=e.width+7>>3,a=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&a.fill(255);this.buffer=a}drawBitmap(e,t){const a=this.currentPageInfo,r=e.width,i=e.height,n=a.width+7>>3,s=a.combinationOperatorOverride?e.combinat\ +ionOperator:a.combinationOperator,o=this.buffer,c=128>>(7&e.x);let l,h,u,d,f=e.y*n+(e.x>>3);switch(s){case 0:for(l=0;l<i;l++){u=c;d=f;for(h=0;h<r;h++){t[l][h]&&(o[d]|=u);u>>=1;if(!u){u=128;d++}}f+=n}break;case 2:for(l=0;l<i;l++){u=c;d=f;for(h=0;h<r;h++){t[l][h]&&(o[d]^=u);u>>=1;if(!u){u=128;d++}}f+=n}break;default:throw new Jbig2Error(`operator ${s} is not supported`)}}onImmediateGenericRegion(e,t,a,r){const i=e.info,n=new DecodingContext(t,a,r),s=decodeBitmap(e.mmr,i.width,i.height,e.template,e\ +.prediction,null,e.at,n);this.drawBitmap(i,s)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(e,t,a,r,i,n){let s,o;if(e.huffman){s=function getSymbolDictionaryHuffmanTables(e,t,a){let r,i,n,s,o=0;switch(e.huffmanDHSelector){case 0:case 1:r=getStandardTable(e.huffmanDHSelector+4);break;case 3:r=getCustomHuffmanTable(o,t,a);o++;break;default:throw new Jbig2Error("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:i=getStandardT\ +able(e.huffmanDWSelector+2);break;case 3:i=getCustomHuffmanTable(o,t,a);o++;break;default:throw new Jbig2Error("invalid Huffman DW selector")}if(e.bitmapSizeSelector){n=getCustomHuffmanTable(o,t,a);o++}else n=getStandardTable(1);s=e.aggregationInstancesSelector?getCustomHuffmanTable(o,t,a):getStandardTable(1);return{tableDeltaHeight:r,tableDeltaWidth:i,tableBitmapSize:n,tableAggregateInstances:s}}(e,a,this.customTables);o=new Reader(r,i,n)}let c=this.symbols;c||(this.symbols=c={});const l=[];for\ +(const e of a){const t=c[e];t&&l.push(...t)}const h=new DecodingContext(r,i,n);c[t]=function decodeSymbolDictionary(e,t,a,r,i,n,s,o,c,l,h,u){if(e&&t)throw new Jbig2Error("symbol refinement with Huffman is not supported");const d=[];let f=0,g=log2(a.length+r);const p=h.decoder,m=h.contextCache;let b,y;if(e){b=getStandardTable(1);y=[];g=Math.max(g,1)}for(;d.length<r;){f+=e?n.tableDeltaHeight.decode(u):decodeInteger(m,"IADH",p);let r=0,i=0;const b=e?y.length:0;for(;;){const b=e?n.tableDeltaWidth.de\ +code(u):decodeInteger(m,"IADW",p);if(null===b)break;r+=b;i+=r;let w;if(t){const i=decodeInteger(m,"IAAI",p);if(i>1)w=decodeTextRegion(e,t,r,f,0,i,1,a.concat(d),g,0,0,1,0,n,c,l,h,0,u);else{const e=decodeIAID(m,p,g),t=decodeInteger(m,"IARDX",p),i=decodeInteger(m,"IARDY",p);w=decodeRefinement(r,f,c,e<a.length?a[e]:d[e-a.length],t,i,!1,l,h)}d.push(w)}else if(e)y.push(r);else{w=decodeBitmap(!1,r,f,s,!1,null,o,h);d.push(w)}}if(e&&!t){const e=n.tableBitmapSize.decode(u);u.byteAlign();let t;if(0===e)t=r\ +eadUncompressedBitmap(u,i,f);else{const a=u.end,r=u.position+e;u.end=r;t=decodeMMRBitmap(u,i,f,!1);u.end=a;u.position=r}const a=y.length;if(b===a-1)d.push(t);else{let e,r,i,n,s,o=0;for(e=b;e<a;e++){n=y[e];i=o+n;s=[];for(r=0;r<f;r++)s.push(t[r].subarray(o,i));d.push(s);o=i}}}}const w=[],x=[];let S,k,C=!1;const v=a.length+r;for(;x.length<v;){let t=e?b.decode(u):decodeInteger(m,"IAEX",p);for(;t--;)x.push(C);C=!C}for(S=0,k=a.length;S<k;S++)x[S]&&w.push(a[S]);for(let e=0;e<r;S++,e++)x[S]&&w.push(d[e]\ +);return w}(e.huffman,e.refinement,l,e.numberOfNewSymbols,e.numberOfExportedSymbols,s,e.template,e.at,e.refinementTemplate,e.refinementAt,h,o)}onImmediateTextRegion(e,t,a,r,i){const n=e.info;let s,o;const c=this.symbols,l=[];for(const e of t){const t=c[e];t&&l.push(...t)}const h=log2(l.length);if(e.huffman){o=new Reader(a,r,i);s=function getTextRegionHuffmanTables(e,t,a,r,i){const n=[];for(let e=0;e<=34;e++){const t=i.readBits(4);n.push(new HuffmanLine([e,t,0,0]))}const s=new HuffmanTable(n,!1);\ +n.length=0;for(let e=0;e<r;){const t=s.decode(i);if(t>=32){let a,r,s;switch(t){case 32:if(0===e)throw new Jbig2Error("no previous value in symbol ID table");r=i.readBits(2)+3;a=n[e-1].prefixLength;break;case 33:r=i.readBits(3)+3;a=0;break;case 34:r=i.readBits(7)+11;a=0;break;default:throw new Jbig2Error("invalid code length in symbol ID table")}for(s=0;s<r;s++){n.push(new HuffmanLine([e,a,0,0]));e++}}else{n.push(new HuffmanLine([e,t,0,0]));e++}}i.byteAlign();const o=new HuffmanTable(n,!1);let c,\ +l,h,u=0;switch(e.huffmanFS){case 0:case 1:c=getStandardTable(e.huffmanFS+6);break;case 3:c=getCustomHuffmanTable(u,t,a);u++;break;default:throw new Jbig2Error("invalid Huffman FS selector")}switch(e.huffmanDS){case 0:case 1:case 2:l=getStandardTable(e.huffmanDS+8);break;case 3:l=getCustomHuffmanTable(u,t,a);u++;break;default:throw new Jbig2Error("invalid Huffman DS selector")}switch(e.huffmanDT){case 0:case 1:case 2:h=getStandardTable(e.huffmanDT+11);break;case 3:h=getCustomHuffmanTable(u,t,a);u\ +++;break;default:throw new Jbig2Error("invalid Huffman DT selector")}if(e.refinement)throw new Jbig2Error("refinement with Huffman is not supported");return{symbolIDTable:o,tableFirstS:c,tableDeltaS:l,tableDeltaT:h}}(e,t,this.customTables,l.length,o)}const u=new DecodingContext(a,r,i),d=decodeTextRegion(e.huffman,e.refinement,n.width,n.height,e.defaultPixelValue,e.numberOfSymbolInstances,e.stripSize,l,h,e.transposed,e.dsOffset,e.referenceCorner,e.combinationOperator,s,e.refinementTemplate,e.refi\ +nementAt,u,e.logStripSize,o);this.drawBitmap(n,d)}onImmediateLosslessTextRegion(){this.onImmediateTextRegion(...arguments)}onPatternDictionary(e,t,a,r,i){let n=this.patterns;n||(this.patterns=n={});const s=new DecodingContext(a,r,i);n[t]=function decodePatternDictionary(e,t,a,r,i,n){const s=[];if(!e){s.push({x:-t,y:0});0===i&&s.push({x:-3,y:-1},{x:2,y:-2},{x:-2,y:-2})}const o=decodeBitmap(e,(r+1)*t,a,i,!1,null,s,n),c=[];for(let e=0;e<=r;e++){const r=[],i=t*e,n=i+t;for(let e=0;e<a;e++)r.push(o[e]\ +.subarray(i,n));c.push(r)}return c}(e.mmr,e.patternWidth,e.patternHeight,e.maxPatternIndex,e.template,s)}onImmediateHalftoneRegion(e,t,a,r,i){const n=this.patterns[t[0]],s=e.info,o=new DecodingContext(a,r,i),c=function decodeHalftoneRegion(e,t,a,r,i,n,s,o,c,l,h,u,d,f,g){if(s)throw new Jbig2Error("skip is not supported");if(0!==o)throw new Jbig2Error(`operator "${o}" is not supported in halftone region`);const p=[];let m,b,y;for(m=0;m<i;m++){y=new Uint8Array(r);n&&y.fill(n);p.push(y)}const w=t.le\ +ngth,x=t[0],S=x[0].length,k=x.length,C=log2(w),v=[];if(!e){v.push({x:a<=1?3:2,y:-1});0===a&&v.push({x:-3,y:-1},{x:2,y:-2},{x:-2,y:-2})}const F=[];let T,O,M,D,R,N,E,L,j,_,U;e&&(T=new Reader(g.data,g.start,g.end));for(m=C-1;m>=0;m--){O=e?decodeMMRBitmap(T,c,l,!0):decodeBitmap(!1,c,l,a,!1,null,v,g);F[m]=O}for(M=0;M<l;M++)for(D=0;D<c;D++){R=0;N=0;for(b=C-1;b>=0;b--){R^=F[b][M][D];N|=R<<b}E=t[N];L=h+M*f+D*d>>8;j=u+M*d-D*f>>8;if(L>=0&&L+S<=r&&j>=0&&j+k<=i)for(m=0;m<k;m++){U=p[j+m];_=E[m];for(b=0;b<S;b\ +++)U[L+b]|=_[b]}else{let e,t;for(m=0;m<k;m++){t=j+m;if(!(t<0||t>=i)){U=p[t];_=E[m];for(b=0;b<S;b++){e=L+b;e>=0&&e<r&&(U[e]|=_[b])}}}}}return p}(e.mmr,n,e.template,s.width,s.height,e.defaultPixelValue,e.enableSkip,e.combinationOperator,e.gridWidth,e.gridHeight,e.gridOffsetX,e.gridOffsetY,e.gridVectorX,e.gridVectorY,o);this.drawBitmap(s,c)}onImmediateLosslessHalftoneRegion(){this.onImmediateHalftoneRegion(...arguments)}onTables(e,t,a,r){let i=this.customTables;i||(this.customTables=i={});i[e]=func\ +tion decodeTablesSegment(e,t,a){const r=e[t],i=4294967295&readUint32(e,t+1),n=4294967295&readUint32(e,t+5),s=new Reader(e,t+9,a),o=1+(r>>1&7),c=1+(r>>4&7),l=[];let h,u,d=i;do{h=s.readBits(o);u=s.readBits(c);l.push(new HuffmanLine([d,h,u,0]));d+=1<<u}while(d<n);h=s.readBits(o);l.push(new HuffmanLine([i-1,h,32,0,"lower"]));h=s.readBits(o);l.push(new HuffmanLine([n,h,32,0]));if(1&r){h=s.readBits(o);l.push(new HuffmanLine([h,0]))}return new HuffmanTable(l,!1)}(t,a,r)}}class HuffmanLine{constructor(e\ +){if(2===e.length){this.isOOB=!0;this.rangeLow=0;this.prefixLength=e[0];this.rangeLength=0;this.prefixCode=e[1];this.isLowerRange=!1}else{this.isOOB=!1;this.rangeLow=e[0];this.prefixLength=e[1];this.rangeLength=e[2];this.prefixCode=e[3];this.isLowerRange="lower"===e[4]}}}class HuffmanTreeNode{constructor(e){this.children=[];if(e){this.isLeaf=!0;this.rangeLength=e.rangeLength;this.rangeLow=e.rangeLow;this.isLowerRange=e.isLowerRange;this.isOOB=e.isOOB}else this.isLeaf=!1}buildTree(e,t){const a=e.\ +prefixCode>>t&1;if(t<=0)this.children[a]=new HuffmanTreeNode(e);else{let r=this.children[a];r||(this.children[a]=r=new HuffmanTreeNode(null));r.buildTree(e,t-1)}}decodeNode(e){if(this.isLeaf){if(this.isOOB)return null;const t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}const t=this.children[e.readBit()];if(!t)throw new Jbig2Error("invalid Huffman data");return t.decodeNode(e)}}class HuffmanTable{constructor(e,t){t||this.assignPrefixCodes(e);this.rootNode=new Huffma\ +nTreeNode(null);for(let t=0,a=e.length;t<a;t++){const a=e[t];a.prefixLength>0&&this.rootNode.buildTree(a,a.prefixLength-1)}}decode(e){return this.rootNode.decodeNode(e)}assignPrefixCodes(e){const t=e.length;let a=0;for(let r=0;r<t;r++)a=Math.max(a,e[r].prefixLength);const r=new Uint32Array(a+1);for(let a=0;a<t;a++)r[e[a].prefixLength]++;let i,n,s,o=1,c=0;r[0]=0;for(;o<=a;){c=c+r[o-1]<<1;i=c;n=0;for(;n<t;){s=e[n];if(s.prefixLength===o){s.prefixCode=i;i++}n++}o++}}}const pr={};function getStandard\ +Table(e){let t,a=pr[e];if(a)return a;switch(e){case 1:t=[[0,1,4,0],[16,2,8,2],[272,3,16,6],[65808,3,32,7]];break;case 2:t=[[0,1,0,0],[1,2,0,2],[2,3,0,6],[3,4,3,14],[11,5,6,30],[75,6,32,62],[6,63]];break;case 3:t=[[-256,8,8,254],[0,1,0,0],[1,2,0,2],[2,3,0,6],[3,4,3,14],[11,5,6,30],[-257,8,32,255,"lower"],[75,7,32,126],[6,62]];break;case 4:t=[[1,1,0,0],[2,2,0,2],[3,3,0,6],[4,4,3,14],[12,5,6,30],[76,5,32,31]];break;case 5:t=[[-255,7,8,126],[1,1,0,0],[2,2,0,2],[3,3,0,6],[4,4,3,14],[12,5,6,30],[-256,\ +7,32,127,"lower"],[76,6,32,62]];break;case 6:t=[[-2048,5,10,28],[-1024,4,9,8],[-512,4,8,9],[-256,4,7,10],[-128,5,6,29],[-64,5,5,30],[-32,4,5,11],[0,2,7,0],[128,3,7,2],[256,3,8,3],[512,4,9,12],[1024,4,10,13],[-2049,6,32,62,"lower"],[2048,6,32,63]];break;case 7:t=[[-1024,4,9,8],[-512,3,8,0],[-256,4,7,9],[-128,5,6,26],[-64,5,5,27],[-32,4,5,10],[0,4,5,11],[32,5,5,28],[64,5,6,29],[128,4,7,12],[256,3,8,1],[512,3,9,2],[1024,3,10,3],[-1025,5,32,30,"lower"],[2048,5,32,31]];break;case 8:t=[[-15,8,3,252],[\ +-7,9,1,508],[-5,8,1,253],[-3,9,0,509],[-2,7,0,124],[-1,4,0,10],[0,2,1,0],[2,5,0,26],[3,6,0,58],[4,3,4,4],[20,6,1,59],[22,4,4,11],[38,4,5,12],[70,5,6,27],[134,5,7,28],[262,6,7,60],[390,7,8,125],[646,6,10,61],[-16,9,32,510,"lower"],[1670,9,32,511],[2,1]];break;case 9:t=[[-31,8,4,252],[-15,9,2,508],[-11,8,2,253],[-7,9,1,509],[-5,7,1,124],[-3,4,1,10],[-1,3,1,2],[1,3,1,3],[3,5,1,26],[5,6,1,58],[7,3,5,4],[39,6,2,59],[43,4,5,11],[75,4,6,12],[139,5,7,27],[267,5,8,28],[523,6,8,60],[779,7,9,125],[1291,6,1\ +1,61],[-32,9,32,510,"lower"],[3339,9,32,511],[2,0]];break;case 10:t=[[-21,7,4,122],[-5,8,0,252],[-4,7,0,123],[-3,5,0,24],[-2,2,2,0],[2,5,0,25],[3,6,0,54],[4,7,0,124],[5,8,0,253],[6,2,6,1],[70,5,5,26],[102,6,5,55],[134,6,6,56],[198,6,7,57],[326,6,8,58],[582,6,9,59],[1094,6,10,60],[2118,7,11,125],[-22,8,32,254,"lower"],[4166,8,32,255],[2,2]];break;case 11:t=[[1,1,0,0],[2,2,1,2],[4,4,0,12],[5,4,1,13],[7,5,1,28],[9,5,2,29],[13,6,2,60],[17,7,2,122],[21,7,3,123],[29,7,4,124],[45,7,5,125],[77,7,6,126],\ +[141,7,32,127]];break;case 12:t=[[1,1,0,0],[2,2,0,2],[3,3,1,6],[5,5,0,28],[6,5,1,29],[8,6,1,60],[10,7,0,122],[11,7,1,123],[13,7,2,124],[17,7,3,125],[25,7,4,126],[41,8,5,254],[73,8,32,255]];break;case 13:t=[[1,1,0,0],[2,3,0,4],[3,4,0,12],[4,5,0,28],[5,4,1,13],[7,3,3,5],[15,6,1,58],[17,6,2,59],[21,6,3,60],[29,6,4,61],[45,6,5,62],[77,7,6,126],[141,7,32,127]];break;case 14:t=[[-2,3,0,4],[-1,3,0,5],[0,1,0,0],[1,3,0,6],[2,3,0,7]];break;case 15:t=[[-24,7,4,124],[-8,6,2,60],[-4,5,1,28],[-2,4,0,12],[-1,3\ +,0,4],[0,1,0,0],[1,3,0,5],[2,4,0,13],[3,5,1,29],[5,6,2,61],[9,7,4,125],[-25,7,32,126,"lower"],[25,7,32,127]];break;default:throw new Jbig2Error(`standard table B.${e} does not exist`)}for(let e=0,a=t.length;e<a;e++)t[e]=new HuffmanLine(t[e]);a=new HuffmanTable(t,!0);pr[e]=a;return a}class Reader{constructor(e,t,a){this.data=e;this.start=t;this.end=a;this.position=t;this.shift=-1;this.currentByte=0}readBit(){if(this.shift<0){if(this.position>=this.end)throw new Jbig2Error("end of data while readi\ +ng bit");this.currentByte=this.data[this.position++];this.shift=7}const e=this.currentByte>>this.shift&1;this.shift--;return e}readBits(e){let t,a=0;for(t=e-1;t>=0;t--)a|=this.readBit()<<t;return a}byteAlign(){this.shift=-1}next(){return this.position>=this.end?-1:this.data[this.position++]}}function getCustomHuffmanTable(e,t,a){let r=0;for(let i=0,n=t.length;i<n;i++){const n=a[t[i]];if(n){if(e===r)return n;r++}}throw new Jbig2Error("can\'t find custom Huffman table")}function readUncompressedBit\ +map(e,t,a){const r=[];for(let i=0;i<a;i++){const a=new Uint8Array(t);r.push(a);for(let r=0;r<t;r++)a[r]=e.readBit();e.byteAlign()}return r}function decodeMMRBitmap(e,t,a,r){const i=new CCITTFaxDecoder(e,{K:-1,Columns:t,Rows:a,BlackIs1:!0,EndOfBlock:r}),n=[];let s,o=!1;for(let e=0;e<a;e++){const e=new Uint8Array(t);n.push(e);let a=-1;for(let r=0;r<t;r++){if(a<0){s=i.readNextChar();if(-1===s){s=0;o=!0}a=7}e[r]=s>>a&1;a--}}if(r&&!o){const e=5;for(let t=0;t<e&&-1!==i.readNextChar();t++);}return n}cl\ +ass Jbig2Image{parseChunks(e){return function parseJbig2Chunks(e){const t=new SimpleSegmentVisitor;for(let a=0,r=e.length;a<r;a++){const r=e[a];processSegments(readSegments({},r.data,r.start,r.end),t)}return t.buffer}(e)}parse(e){throw new Error("Not implemented: Jbig2Image.parse")}}class Jbig2Stream extends DecodeStream{constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.maybeLength=t;this.params=a}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensure\ +Buffer(e){}readBlock(){this.decodeImage()}decodeImage(e){if(this.eof)return this.buffer;e||=this.bytes;const t=new Jbig2Image,a=[];if(this.params instanceof Dict){const e=this.params.get("JBIG2Globals");if(e instanceof BaseStream){const t=e.getBytes();a.push({data:t,start:0,end:t.length})}}a.push({data:e,start:0,end:e.length});const r=t.parseChunks(a),i=r.length;for(let e=0;e<i;e++)r[e]^=255;this.buffer=r;this.bufferLength=i;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){retu\ +rn this.stream.isAsync}}class JpxStream extends DecodeStream{constructor(e,t,a){super(t);this.stream=e;this.dict=e.dict;this.maybeLength=t;this.params=a}get bytes(){return shadow(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(e){unreachable("JpxStream.readBlock")}get isAsyncDecoder(){return!0}async decodeImage(e,t){if(this.eof)return this.buffer;e||=this.bytes;this.buffer=await JpxImage.decode(e,t);this.bufferLength=this.buffer.length;this.eof=!0;return this.buff\ +er}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}}class LZWStream extends DecodeStream{constructor(e,t,a){super(t);this.str=e;this.dict=e.dict;this.cachedData=0;this.bitsCached=0;const r=4096,i={earlyChange:a,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(r),dictionaryLengths:new Uint16Array(r),dictionaryPrevCodes:new Uint16Array(r),currentSequence:new Uint8Array(r),currentSequenceLength:0};for(let e=0;e<256;++e){i.dictionaryValues[e]=e;i.dictionaryLengths[e]=1}this.l\ +zwState=i}readBits(e){let t=this.bitsCached,a=this.cachedData;for(;t<e;){const e=this.str.getByte();if(-1===e){this.eof=!0;return null}a=a<<8|e;t+=8}this.bitsCached=t-=e;this.cachedData=a;this.lastCode=null;return a>>>t&(1<<e)-1}readBlock(){let e,t,a,r=1024;const i=this.lzwState;if(!i)return;const n=i.earlyChange;let s=i.nextCode;const o=i.dictionaryValues,c=i.dictionaryLengths,l=i.dictionaryPrevCodes;let h=i.codeLength,u=i.prevCode;const d=i.currentSequence;let f=i.currentSequenceLength,g=0,p=t\ +his.bufferLength,m=this.ensureBuffer(this.bufferLength+r);for(e=0;e<512;e++){const e=this.readBits(h),i=f>0;if(e<256){d[0]=e;f=1}else{if(!(e>=258)){if(256===e){h=9;s=258;f=0;continue}this.eof=!0;delete this.lzwState;break}if(e<s){f=c[e];for(t=f-1,a=e;t>=0;t--){d[t]=o[a];a=l[a]}}else d[f++]=d[0]}if(i){l[s]=u;c[s]=c[u]+1;o[s]=d[0];s++;h=s+n&s+n-1?h:0|Math.min(Math.log(s+n)/.6931471805599453+1,12)}u=e;g+=f;if(r<g){do{r+=512}while(r<g);m=this.ensureBuffer(this.bufferLength+r)}for(t=0;t<f;t++)m[p++]=\ +d[t]}i.nextCode=s;i.codeLength=h;i.prevCode=u;i.currentSequenceLength=f;this.bufferLength=p}}class PredictorStream extends DecodeStream{constructor(e,t,a){super(t);if(!(a instanceof Dict))return e;const r=this.predictor=a.get("Predictor")||1;if(r<=1)return e;if(2!==r&&(r<10||r>15))throw new FormatError(`Unsupported predictor: ${r}`);this.readBlock=2===r?this.readBlockTiff:this.readBlockPng;this.str=e;this.dict=e.dict;const i=this.colors=a.get("Colors")||1,n=this.bits=a.get("BPC","BitsPerComponen\ +t")||8,s=this.columns=a.get("Columns")||1;this.pixBytes=i*n+7>>3;this.rowBytes=s*i*n+7>>3;return this}readBlockTiff(){const e=this.rowBytes,t=this.bufferLength,a=this.ensureBuffer(t+e),r=this.bits,i=this.colors,n=this.str.getBytes(e);this.eof=!n.length;if(this.eof)return;let s,o=0,c=0,l=0,h=0,u=t;if(1===r&&1===i)for(s=0;s<e;++s){let e=n[s]^o;e^=e>>1;e^=e>>2;e^=e>>4;o=(1&e)<<7;a[u++]=e}else if(8===r){for(s=0;s<i;++s)a[u++]=n[s];for(;s<e;++s){a[u]=a[u-i]+n[s];u++}}else if(16===r){const t=2*i;for(s\ +=0;s<t;++s)a[u++]=n[s];for(;s<e;s+=2){const e=((255&n[s])<<8)+(255&n[s+1])+((255&a[u-t])<<8)+(255&a[u-t+1]);a[u++]=e>>8&255;a[u++]=255&e}}else{const e=new Uint8Array(i+1),u=(1<<r)-1;let d=0,f=t;const g=this.columns;for(s=0;s<g;++s)for(let t=0;t<i;++t){if(l<r){o=o<<8|255&n[d++];l+=8}e[t]=e[t]+(o>>l-r)&u;l-=r;c=c<<r|e[t];h+=r;if(h>=8){a[f++]=c>>h-8&255;h-=8}}h>0&&(a[f++]=(c<<8-h)+(o&(1<<8-h)-1))}this.bufferLength+=e}readBlockPng(){const e=this.rowBytes,t=this.pixBytes,a=this.str.getByte(),r=this.s\ +tr.getBytes(e);this.eof=!r.length;if(this.eof)return;const i=this.bufferLength,n=this.ensureBuffer(i+e);let s=n.subarray(i-e,i);0===s.length&&(s=new Uint8Array(e));let o,c,l,h=i;switch(a){case 0:for(o=0;o<e;++o)n[h++]=r[o];break;case 1:for(o=0;o<t;++o)n[h++]=r[o];for(;o<e;++o){n[h]=n[h-t]+r[o]&255;h++}break;case 2:for(o=0;o<e;++o)n[h++]=s[o]+r[o]&255;break;case 3:for(o=0;o<t;++o)n[h++]=(s[o]>>1)+r[o];for(;o<e;++o){n[h]=(s[o]+n[h-t]>>1)+r[o]&255;h++}break;case 4:for(o=0;o<t;++o){c=s[o];l=r[o];n[h\ +++]=c+l}for(;o<e;++o){c=s[o];const e=s[o-t],a=n[h-t],i=a+c-e;let u=i-a;u<0&&(u=-u);let d=i-c;d<0&&(d=-d);let f=i-e;f<0&&(f=-f);l=r[o];n[h++]=u<=d&&u<=f?a+l:d<=f?c+l:e+l}break;default:throw new FormatError(`Unsupported predictor: ${a}`)}this.bufferLength+=e}}class RunLengthStream extends DecodeStream{constructor(e,t){super(t);this.str=e;this.dict=e.dict}readBlock(){const e=this.str.getBytes(2);if(!e||e.length<2||128===e[0]){this.eof=!0;return}let t,a=this.bufferLength,r=e[0];if(r<128){t=this.ensu\ +reBuffer(a+r+1);t[a++]=e[1];if(r>0){const e=this.str.getBytes(r);t.set(e,a);a+=r}}else{r=257-r;t=this.ensureBuffer(a+r+1);t.fill(e[1],a,a+r);a+=r}this.bufferLength=a}}class Parser{constructor({lexer:e,xref:t,allowStreams:a=!1,recoveryMode:r=!1}){this.lexer=e;this.xref=t;this.allowStreams=a;this.recoveryMode=r;this.imageCache=Object.create(null);this._imageId=0;this.refill()}refill(){this.buf1=this.lexer.getObj();this.buf2=this.lexer.getObj()}shift(){if(this.buf2 instanceof Cmd&&"ID"===this.buf2.\ +cmd){this.buf1=this.buf2;this.buf2=null}else{this.buf1=this.buf2;this.buf2=this.lexer.getObj()}}tryShift(){try{this.shift();return!0}catch(e){if(e instanceof MissingDataException)throw e;return!1}}getObj(e=null){const t=this.buf1;this.shift();if(t instanceof Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":const a=[];for(;!isCmd(this.buf1,"]")&&this.buf1!==wa;)a.push(this.getObj(e));if(this.buf1===wa){if(this.recoveryMode)return a;throw new ParserEOFException("End of file inside\ + array.")}this.shift();return a;case"<<":const r=new Dict(this.xref);for(;!isCmd(this.buf1,">>")&&this.buf1!==wa;){if(!(this.buf1 instanceof Name)){info("Malformed dictionary: key must be a name object");this.shift();continue}const t=this.buf1.name;this.shift();if(this.buf1===wa)break;r.set(t,this.getObj(e))}if(this.buf1===wa){if(this.recoveryMode)return r;throw new ParserEOFException("End of file inside dictionary.")}if(isCmd(this.buf2,"stream"))return this.allowStreams?this.makeStream(r,e):r;t\ +his.shift();return r;default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&isCmd(this.buf2,"R")){const e=Ref.get(t,this.buf1);this.shift();this.shift();return e}return t}return"string"==typeof t&&e?e.decryptString(t):t}findDefaultInlineStreamEnd(e){const{knownCommands:t}=this.lexer,a=e.pos;let r,i,n=0;for(;-1!==(r=e.getByte());)if(0===n)n=69===r?1:0;else if(1===n)n=73===r?2:0;else if(32===r||10===r||13===r){i=e.pos;const a=e.peekBytes(15),s=a.length;if(0===s)break;for(let e=0;\ +e<s;e++){r=a[e];if((0!==r||0===a[e+1])&&(10!==r&&13!==r&&(r<32||r>127))){n=0;break}}if(2!==n)continue;if(!t){warn("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}const o=new Lexer(new Stream(e.peekBytes(75)),t);o._hexStringWarn=()=>{};let c=0;for(;;){const e=o.getObj();if(e===wa){n=0;break}if(e instanceof Cmd){const a=t[e.cmd];if(!a){n=0;break}if(a.variableArgs?c<=a.numArgs:c===a.numArgs)break;c=0}else c++}if(2===n)break}else n=0;if(-1===r){warn("findDefaultInlineStr\ +eamEnd: Reached the end of the stream without finding a valid EI marker");if(i){warn(\'... trying to recover by using the last "EI" occurrence.\');e.skip(-(e.pos-i))}}let s=4;e.skip(-s);r=e.peekByte();e.skip(s);isWhiteSpace(r)||s--;return e.pos-s-a}findDCTDecodeInlineStreamEnd(e){const t=e.pos;let a,r,i=!1;for(;-1!==(a=e.getByte());)if(255===a){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case\ + 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:r=e.getUint16();r>2?e.skip(r-2):e.skip(-2)}if(i)break}const n=e.pos-t;if(-1===a){warn("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead.");e.skip(-n);return this.findDefaultInlineStreamEnd(e)}this.inline\ +StreamSkipEI(e);return n}findASCII85DecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte());)if(126===a){const t=e.pos;a=e.peekByte();for(;isWhiteSpace(a);){e.skip();a=e.peekByte()}if(62===a){e.skip();break}if(e.pos>t){const t=e.peekBytes(2);if(69===t[0]&&73===t[1])break}}const r=e.pos-t;if(-1===a){warn("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}fin\ +dASCIIHexDecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte())&&62!==a;);const r=e.pos-t;if(-1===a){warn("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}inlineStreamSkipEI(e){let t,a=0;for(;-1!==(t=e.getByte());)if(0===a)a=69===t?1:0;else if(1===a)a=73===t?2:0;else if(2===a)break}makeInlineImage(e){const t=this.lexer,a=t.stream,r=Object.create(null);l\ +et i;for(;!isCmd(this.buf1,"ID")&&this.buf1!==wa;){if(!(this.buf1 instanceof Name))throw new FormatError("Dictionary key must be a name object");const t=this.buf1.name;this.shift();if(this.buf1===wa)break;r[t]=this.getObj(e)}-1!==t.beginInlineImagePos&&(i=a.pos-t.beginInlineImagePos);const n=this.xref.fetchIfRef(r.F||r.Filter);let s;if(n instanceof Name)s=n.name;else if(Array.isArray(n)){const e=this.xref.fetchIfRef(n[0]);e instanceof Name&&(s=e.name)}const o=a.pos;let c,l;switch(s){case"DCT":ca\ +se"DCTDecode":c=this.findDCTDecodeInlineStreamEnd(a);break;case"A85":case"ASCII85Decode":c=this.findASCII85DecodeInlineStreamEnd(a);break;case"AHx":case"ASCIIHexDecode":c=this.findASCIIHexDecodeInlineStreamEnd(a);break;default:c=this.findDefaultInlineStreamEnd(a)}if(c<1e3&&i>0){const e=a.pos;a.pos=t.beginInlineImagePos;l=function getInlineImageCacheKey(e){const t=[],a=e.length;let r=0;for(;r<a-1;)t.push(e[r++]<<8|e[r++]);r<a&&t.push(e[r]);return a+"_"+String.fromCharCode.apply(null,t)}(a.getByte\ +s(i+c));a.pos=e;const r=this.imageCache[l];if(void 0!==r){this.buf2=Cmd.get("EI");this.shift();r.reset();return r}}const h=new Dict(this.xref);for(const e in r)h.set(e,r[e]);let u=a.makeSubStream(o,c,h);e&&(u=e.createStream(u,c));u=this.filter(u,h,c);u.dict=h;if(void 0!==l){u.cacheKey="inline_img_"+ ++this._imageId;this.imageCache[l]=u}this.buf2=Cmd.get("EI");this.shift();return u}#q(e){const{stream:t}=this.lexer;t.pos=e;const a=new Uint8Array([101,110,100]),r=a.length,i=[new Uint8Array([115,116\ +,114,101,97,109]),new Uint8Array([115,116,101,97,109]),new Uint8Array([115,116,114,101,97])],n=9-r;for(;t.pos<t.end;){const s=t.peekBytes(2048),o=s.length-9;if(o<=0)break;let c=0;for(;c<o;){let o=0;for(;o<r&&s[c+o]===a[o];)o++;if(o>=r){let r=!1;for(const e of i){const t=e.length;let i=0;for(;i<t&&s[c+o+i]===e[i];)i++;if(i>=n){r=!0;break}if(i>=t){if(isWhiteSpace(s[c+o+i])){info(`Found "${bytesToString([...a,...e])}" when searching for endstream command.`);r=!0}break}}if(r){t.pos+=c;return t.pos-e\ +}}c++}t.pos+=o}return-1}makeStream(e,t){const a=this.lexer;let r=a.stream;a.skipToNextLine();const i=r.pos-1;let n=e.get("Length");if(!Number.isInteger(n)){info(`Bad length "${n&&n.toString()}" in stream.`);n=0}r.pos=i+n;a.nextChar();if(this.tryShift()&&isCmd(this.buf2,"endstream"))this.shift();else{n=this.#q(i);if(n<0)throw new FormatError("Missing endstream command.");a.nextChar();this.shift();this.shift()}this.shift();r=r.makeSubStream(i,n,e);t&&(r=t.createStream(r,n));r=this.filter(r,e,n);r.\ +dict=e;return r}filter(e,t,a){let r=t.get("F","Filter"),i=t.get("DP","DecodeParms");if(r instanceof Name){Array.isArray(i)&&warn("/DecodeParms should not be an Array, when /Filter is a Name.");return this.makeFilter(e,r.name,a,i)}let n=a;if(Array.isArray(r)){const t=r,a=i;for(let s=0,o=t.length;s<o;++s){r=this.xref.fetchIfRef(t[s]);if(!(r instanceof Name))throw new FormatError(`Bad filter name "${r}"`);i=null;Array.isArray(a)&&s in a&&(i=this.xref.fetchIfRef(a[s]));e=this.makeFilter(e,r.name,n,i\ +);n=null}}return e}makeFilter(e,t,a,r){if(0===a){warn(`Empty "${t}" stream.`);return new NullStream}try{switch(t){case"Fl":case"FlateDecode":return r?new PredictorStream(new FlateStream(e,a),a,r):new FlateStream(e,a);case"LZW":case"LZWDecode":let t=1;if(r){r.has("EarlyChange")&&(t=r.get("EarlyChange"));return new PredictorStream(new LZWStream(e,a,t),a,r)}return new LZWStream(e,a,t);case"DCT":case"DCTDecode":return new JpegStream(e,a,r);case"JPX":case"JPXDecode":return new JpxStream(e,a,r);case"A\ +85":case"ASCII85Decode":return new Ascii85Stream(e,a);case"AHx":case"ASCIIHexDecode":return new AsciiHexStream(e,a);case"CCF":case"CCITTFaxDecode":return new CCITTFaxStream(e,a,r);case"RL":case"RunLengthDecode":return new RunLengthStream(e,a);case"JBIG2Decode":return new Jbig2Stream(e,a,r)}warn(`Filter "${t}" is not supported.`);return e}catch(e){if(e instanceof MissingDataException)throw e;warn(`Invalid stream: "${e}"`);return new NullStream}}}const mr=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0\ +,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function toHexDigit(e){retur\ +n e>=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}class Lexer{constructor(e,t=null){this.stream=e;this.nextChar();this.strBuf=[];this.knownCommands=t;this._hexStringNumWarn=0;this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let e=this.currentChar,t=!1,a=0,r=1;if(45===e){r=-1;e=this.nextChar();45===e&&(e=this.nextChar())}else 43===e&&(e=this.nextChar());if(10===e||13===e)do{e=this.nextChar()}while(1\ +0===e||13===e);if(46===e){a=10;e=this.nextChar()}if(e<48||e>57){const t=`Invalid number: ${String.fromCharCode(e)} (charCode ${e})`;if(isWhiteSpace(e)||40===e||60===e||-1===e){info(`Lexer.getNumber - "${t}".`);return 0}throw new FormatError(t)}let i=e-48,n=0,s=1;for(;(e=this.nextChar())>=0;)if(e>=48&&e<=57){const r=e-48;if(t)n=10*n+r;else{0!==a&&(a*=10);i=10*i+r}}else if(46===e){if(0!==a)break;a=1}else if(45===e)warn("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)bre\ +ak;e=this.peekChar();if(43===e||45===e){s=45===e?-1:1;this.nextChar()}else if(e<48||e>57)break;t=!0}0!==a&&(i/=a);t&&(i*=10**(s*n));return r*i}getString(){let e=1,t=!1;const a=this.strBuf;a.length=0;let r=this.nextChar();for(;;){let i=!1;switch(0|r){case-1:warn("Unterminated string");t=!0;break;case 40:++e;a.push("(");break;case 41:if(0==--e){this.nextChar();t=!0}else a.push(")");break;case 92:r=this.nextChar();switch(r){case-1:warn("Unterminated string");t=!0;break;case 110:a.push("\\n");break;c\ +ase 114:a.push("\\r");break;case 116:a.push("\\t");break;case 98:a.push("\\b");break;case 102:a.push("\\f");break;case 92:case 40:case 41:a.push(String.fromCharCode(r));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let e=15&r;r=this.nextChar();i=!0;if(r>=48&&r<=55){e=(e<<3)+(15&r);r=this.nextChar();if(r>=48&&r<=55){i=!1;e=(e<<3)+(15&r)}}a.push(String.fromCharCode(e));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:a.push(String.fromCharCode(r))\ +}break;default:a.push(String.fromCharCode(r))}if(t)break;i||(r=this.nextChar())}return a.join("")}getName(){let e,t;const a=this.strBuf;a.length=0;for(;(e=this.nextChar())>=0&&!mr[e];)if(35===e){e=this.nextChar();if(mr[e]){warn("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.");a.push("#");break}const r=toHexDigit(e);if(-1!==r){t=e;e=this.nextChar();const i=toHexDigit(e);if(-1===i){warn(`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) in hexadecimal number.`);\ +a.push("#",String.fromCharCode(t));if(mr[e])break;a.push(String.fromCharCode(e));continue}a.push(String.fromCharCode(r<<4|i))}else a.push("#",String.fromCharCode(e))}else a.push(String.fromCharCode(e));a.length>127&&warn(`Name token is longer than allowed by the spec: ${a.length}`);return Name.get(a.join(""))}_hexStringWarn(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5||warn(`getHexString - ignoring invalid character: ${e}`):warn("getHexString - ignoring additional invalid characters."\ +)}getHexString(){const e=this.strBuf;e.length=0;let t=this.currentChar,a=-1,r=-1;this._hexStringNumWarn=0;for(;;){if(t<0){warn("Unterminated hex string");break}if(62===t){this.nextChar();break}if(1!==mr[t]){r=toHexDigit(t);if(-1===r)this._hexStringWarn(t);else if(-1===a)a=r;else{e.push(String.fromCharCode(a<<4|r));a=-1}t=this.nextChar()}else t=this.nextChar()}-1!==a&&e.push(String.fromCharCode(a<<4));return e.join("")}getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return wa;if(e)10!==t&&13!\ +==t||(e=!1);else if(37===t)e=!0;else if(1!==mr[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:this.nextChar();return Cmd.get("[");case 93:this.nextChar();return Cmd.get("]");case 60:t=this.nextChar();if(60===t){this.nextChar();return Cmd.get("<<")}return this.getHexString();case 62:t=this.nextChar();if(62===t\ +){this.nextChar();return Cmd.get(">>")}return Cmd.get(">");case 123:this.nextChar();return Cmd.get("{");case 125:this.nextChar();return Cmd.get("}");case 41:this.nextChar();throw new FormatError(`Illegal character: ${t}`)}let a=String.fromCharCode(t);if(t<32||t>127){const e=this.peekChar();if(e>=32&&e<=127){this.nextChar();return Cmd.get(a)}}const r=this.knownCommands;let i=void 0!==r?.[a];for(;(t=this.nextChar())>=0&&!mr[t];){const e=a+String.fromCharCode(t);if(i&&void 0===r[e])break;if(128===a\ +.length)throw new FormatError(`Command token too long: ${a.length}`);a=e;i=void 0!==r?.[a]}if("true"===a)return!0;if("false"===a)return!1;if("null"===a)return null;"BI"===a&&(this.beginInlineImagePos=this.stream.pos);return Cmd.get(a)}skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.nextChar();10===e&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}class Linearization{static create(e){function getInt(e,t,a=!1){const r=e.get(t);if(Number.isInteger(r\ +)&&(a?r>=0:r>0))return r;throw new Error(`The "${t}" parameter in the linearization dictionary is invalid.`)}const t=new Parser({lexer:new Lexer(e),xref:null}),a=t.getObj(),r=t.getObj(),i=t.getObj(),n=t.getObj();let s,o;if(!(Number.isInteger(a)&&Number.isInteger(r)&&isCmd(i,"obj")&&n instanceof Dict&&"number"==typeof(s=n.get("Linearized"))&&s>0))return null;if((o=getInt(n,"L"))!==e.length)throw new Error(\'The "L" parameter in the linearization dictionary does not equal the stream length.\');retur\ +n{length:o,hints:function getHints(e){const t=e.get("H");let a;if(Array.isArray(t)&&(2===(a=t.length)||4===a)){for(let e=0;e<a;e++){const a=t[e];if(!(Number.isInteger(a)&&a>0))throw new Error(`Hint (${e}) in the linearization dictionary is invalid.`)}return t}throw new Error("Hint array in the linearization dictionary is invalid.")}(n),objectNumberFirst:getInt(n,"O"),endFirst:getInt(n,"E"),numPages:getInt(n,"N"),mainXRefEntriesOffset:getInt(n,"T"),pageFirst:n.has("P")?getInt(n,"P",!0):0}}}const \ +br=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","A\ +dobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V",\ +"GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-\ +UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V\ +","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],yr=2**24-1;class CMap{constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.numCodespaceRanges=0;this._map=[];this.name="";this.vertical=!1;this.useCMap=null\ +;this.builtInCMap=e}addCodespaceRange(e,t,a){this.codespaceRanges[e-1].push(t,a);this.numCodespaceRanges++}mapCidRange(e,t,a){if(t-e>yr)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=a++}mapBfRange(e,t,a){if(t-e>yr)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");const r=a.length-1;for(;e<=t;){this._map[e++]=a;const t=a.charCodeAt(r)+1;t>255?a=a.substring(0,r-1)+String.fromCharCode(a.charCodeAt(r-1)+1)+"\\0":a=a.substring(0,r)+Strin\ +g.fromCharCode(t)}}mapBfRangeToArray(e,t,a){if(t-e>yr)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");const r=a.length;let i=0;for(;e<=t&&i<r;){this._map[e]=a[i++];++e}}mapOne(e,t){this._map[e]=t}lookup(e){return this._map[e]}contains(e){return void 0!==this._map[e]}forEach(e){const t=this._map,a=t.length;if(a<=65536)for(let r=0;r<a;r++)void 0!==t[r]&&e(r,t[r]);else for(const a in t)e(a,t[a])}charCodeOf(e){const t=this._map;if(t.length<=65536)return t.indexOf(e);for(con\ +st a in t)if(t[a]===e)return 0|a;return-1}getMap(){return this._map}readCharCode(e,t,a){let r=0;const i=this.codespaceRanges;for(let n=0,s=i.length;n<s;n++){r=(r<<8|e.charCodeAt(t+n))>>>0;const s=i[n];for(let e=0,t=s.length;e<t;){const t=s[e++],i=s[e++];if(r>=t&&r<=i){a.charcode=r;a.length=n+1;return}}}a.charcode=0;a.length=1}getCharCodeLength(e){const t=this.codespaceRanges;for(let a=0,r=t.length;a<r;a++){const r=t[a];for(let t=0,i=r.length;t<i;){const i=r[t++],n=r[t++];if(e>=i&&e<=n)return a+1\ +}}return 1}get length(){return this._map.length}get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(let e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}class IdentityCMap extends CMap{constructor(e,t){super();this.vertical=e;this.addCodespaceRange(t,0,65535)}mapCidRange(e,t,a){unreachable("should not call mapCidRange")}mapBfRange(e,t,a){unreachable("should not call mapBfRange")}mapBfRangeToArray(e,t,a){unreachable("s\ +hould not call mapBfRangeToArray")}mapOne(e,t){unreachable("should not call mapCidOne")}lookup(e){return Number.isInteger(e)&&e<=65535?e:void 0}contains(e){return Number.isInteger(e)&&e<=65535}forEach(e){for(let t=0;t<=65535;t++)e(t,t)}charCodeOf(e){return Number.isInteger(e)&&e<=65535?e:-1}getMap(){const e=new Array(65536);for(let t=0;t<=65535;t++)e[t]=t;return e}get length(){return 65536}get isIdentityCMap(){unreachable("should not access .isIdentityCMap")}}function strToInt(e){let t=0;for(let\ + a=0;a<e.length;a++)t=t<<8|e.charCodeAt(a);return t>>>0}function expectString(e){if("string"!=typeof e)throw new FormatError("Malformed CMap: expected string.")}function expectInt(e){if(!Number.isInteger(e))throw new FormatError("Malformed CMap: expected int.")}function parseBfChar(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endbfchar"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=a;e.mapOne(r,i)}}function parseBfRange(e,t){for(;;){let a=t.getObj(\ +);if(a===wa)break;if(isCmd(a,"endbfrange"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=strToInt(a);a=t.getObj();if(Number.isInteger(a)||"string"==typeof a){const t=Number.isInteger(a)?String.fromCharCode(a):a;e.mapBfRange(r,i,t)}else{if(!isCmd(a,"["))break;{a=t.getObj();const n=[];for(;!isCmd(a,"]")&&a!==wa;){n.push(a);a=t.getObj()}e.mapBfRangeToArray(r,i,n)}}}throw new FormatError("Invalid bf range.")}function parseCidChar(e,t){for(;;){let a=t.getObj();if(a==\ +=wa)break;if(isCmd(a,"endcidchar"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectInt(a);const i=a;e.mapOne(r,i)}}function parseCidRange(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endcidrange"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=strToInt(a);a=t.getObj();expectInt(a);const n=a;e.mapCidRange(r,i,n)}}function parseCodespaceRange(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endcodespacerange"))return;if("string"!\ +=typeof a)break;const r=strToInt(a);a=t.getObj();if("string"!=typeof a)break;const i=strToInt(a);e.addCodespaceRange(a.length,r,i)}throw new FormatError("Invalid codespace range.")}function parseWMode(e,t){const a=t.getObj();Number.isInteger(a)&&(e.vertical=!!a)}function parseCMapName(e,t){const a=t.getObj();a instanceof Name&&(e.name=a.name)}async function parseCMap(e,t,a,r){let i,n;e:for(;;)try{const a=t.getObj();if(a===wa)break;if(a instanceof Name){"WMode"===a.name?parseWMode(e,t):"CMapName"\ +===a.name&&parseCMapName(e,t);i=a}else if(a instanceof Cmd)switch(a.cmd){case"endcmap":break e;case"usecmap":i instanceof Name&&(n=i.name);break;case"begincodespacerange":parseCodespaceRange(e,t);break;case"beginbfchar":parseBfChar(e,t);break;case"begincidchar":parseCidChar(e,t);break;case"beginbfrange":parseBfRange(e,t);break;case"begincidrange":parseCidRange(e,t)}}catch(e){if(e instanceof MissingDataException)throw e;warn("Invalid cMap data: "+e);continue}!r&&n&&(r=n);return r?extendCMap(e,a,r\ +):e}async function extendCMap(e,t,a){e.useCMap=await createBuiltInCMap(a,t);if(0===e.numCodespaceRanges){const t=e.useCMap.codespaceRanges;for(let a=0;a<t.length;a++)e.codespaceRanges[a]=t[a].slice();e.numCodespaceRanges=e.useCMap.numCodespaceRanges}e.useCMap.forEach((function(t,a){e.contains(t)||e.mapOne(t,a)}));return e}async function createBuiltInCMap(e,t){if("Identity-H"===e)return new IdentityCMap(!1,2);if("Identity-V"===e)return new IdentityCMap(!0,2);if(!br.includes(e))throw new Error("Un\ +known CMap name: "+e);if(!t)throw new Error("Built-in CMap parameters are not provided.");const{cMapData:a,isCompressed:r}=await t(e),i=new CMap(!0);if(r)return(new BinaryCMapReader).process(a,i,(e=>extendCMap(i,t,e)));const n=new Lexer(new Stream(a));return parseCMap(i,n,t,null)}class CMapFactory{static async create({encoding:e,fetchBuiltInCMap:t,useCMap:a}){if(e instanceof Name)return createBuiltInCMap(e.name,t);if(e instanceof BaseStream){const r=await parseCMap(new CMap,new Lexer(e),t,a);ret\ +urn r.isIdentityCMap?createBuiltInCMap(r.name,t):r}throw new Error("Encoding required.")}}const wr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveolds\ +tyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","\ +Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","M\ +acronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior"\ +,"seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","\ +Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],xr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle"\ +,"fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Is\ +mall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmal\ +l","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Osla\ +shsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuper\ +ior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],Sr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","grave","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","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edier\ +esis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exc\ +lamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis\ +","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],Ar=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","si\ +x","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","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","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","",\ +"","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","car\ +on","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],kr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","o\ +ne","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","grave","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","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin"\ +,"quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus"\ +,"twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","ge\ +rmandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],Cr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent"\ +,"ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore\ +","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdo\ +wn","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","\ +dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketri\ +ghtbt","bracerighttp","bracerightmid","bracerightbt",""],vr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a5\ +2","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126",\ +"a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187",\ +"a188","a189","a190","a191",""];function getEncoding(e){switch(e){case"WinAnsiEncoding":return kr;case"StandardEncoding":return Ar;case"MacRomanEncoding":return Sr;case"SymbolSetEncoding":return Cr;case"ZapfDingbatsEncoding":return vr;case"ExpertEncoding":return wr;case"MacExpertEncoding":return xr;default:return null}}const Fr=getLookupTableFactory((function(e){e.A=65;e.AE=198;e.AEacute=508;e.AEmacron=482;e.AEsmall=63462;e.Aacute=193;e.Aacutesmall=63457;e.Abreve=258;e.Abreveacute=7854;e.Abrevec\ +yrillic=1232;e.Abrevedotbelow=7862;e.Abrevegrave=7856;e.Abrevehookabove=7858;e.Abrevetilde=7860;e.Acaron=461;e.Acircle=9398;e.Acircumflex=194;e.Acircumflexacute=7844;e.Acircumflexdotbelow=7852;e.Acircumflexgrave=7846;e.Acircumflexhookabove=7848;e.Acircumflexsmall=63458;e.Acircumflextilde=7850;e.Acute=63177;e.Acutesmall=63412;e.Acyrillic=1040;e.Adblgrave=512;e.Adieresis=196;e.Adieresiscyrillic=1234;e.Adieresismacron=478;e.Adieresissmall=63460;e.Adotbelow=7840;e.Adotmacron=480;e.Agrave=192;e.Agrav\ +esmall=63456;e.Ahookabove=7842;e.Aiecyrillic=1236;e.Ainvertedbreve=514;e.Alpha=913;e.Alphatonos=902;e.Amacron=256;e.Amonospace=65313;e.Aogonek=260;e.Aring=197;e.Aringacute=506;e.Aringbelow=7680;e.Aringsmall=63461;e.Asmall=63329;e.Atilde=195;e.Atildesmall=63459;e.Aybarmenian=1329;e.B=66;e.Bcircle=9399;e.Bdotaccent=7682;e.Bdotbelow=7684;e.Becyrillic=1041;e.Benarmenian=1330;e.Beta=914;e.Bhook=385;e.Blinebelow=7686;e.Bmonospace=65314;e.Brevesmall=63220;e.Bsmall=63330;e.Btopbar=386;e.C=67;e.Caarmenia\ +n=1342;e.Cacute=262;e.Caron=63178;e.Caronsmall=63221;e.Ccaron=268;e.Ccedilla=199;e.Ccedillaacute=7688;e.Ccedillasmall=63463;e.Ccircle=9400;e.Ccircumflex=264;e.Cdot=266;e.Cdotaccent=266;e.Cedillasmall=63416;e.Chaarmenian=1353;e.Cheabkhasiancyrillic=1212;e.Checyrillic=1063;e.Chedescenderabkhasiancyrillic=1214;e.Chedescendercyrillic=1206;e.Chedieresiscyrillic=1268;e.Cheharmenian=1347;e.Chekhakassiancyrillic=1227;e.Cheverticalstrokecyrillic=1208;e.Chi=935;e.Chook=391;e.Circumflexsmall=63222;e.Cmonos\ +pace=65315;e.Coarmenian=1361;e.Csmall=63331;e.D=68;e.DZ=497;e.DZcaron=452;e.Daarmenian=1332;e.Dafrican=393;e.Dcaron=270;e.Dcedilla=7696;e.Dcircle=9401;e.Dcircumflexbelow=7698;e.Dcroat=272;e.Ddotaccent=7690;e.Ddotbelow=7692;e.Decyrillic=1044;e.Deicoptic=1006;e.Delta=8710;e.Deltagreek=916;e.Dhook=394;e.Dieresis=63179;e.DieresisAcute=63180;e.DieresisGrave=63181;e.Dieresissmall=63400;e.Digammagreek=988;e.Djecyrillic=1026;e.Dlinebelow=7694;e.Dmonospace=65316;e.Dotaccentsmall=63223;e.Dslash=272;e.Dsma\ +ll=63332;e.Dtopbar=395;e.Dz=498;e.Dzcaron=453;e.Dzeabkhasiancyrillic=1248;e.Dzecyrillic=1029;e.Dzhecyrillic=1039;e.E=69;e.Eacute=201;e.Eacutesmall=63465;e.Ebreve=276;e.Ecaron=282;e.Ecedillabreve=7708;e.Echarmenian=1333;e.Ecircle=9402;e.Ecircumflex=202;e.Ecircumflexacute=7870;e.Ecircumflexbelow=7704;e.Ecircumflexdotbelow=7878;e.Ecircumflexgrave=7872;e.Ecircumflexhookabove=7874;e.Ecircumflexsmall=63466;e.Ecircumflextilde=7876;e.Ecyrillic=1028;e.Edblgrave=516;e.Edieresis=203;e.Edieresissmall=63467;\ +e.Edot=278;e.Edotaccent=278;e.Edotbelow=7864;e.Efcyrillic=1060;e.Egrave=200;e.Egravesmall=63464;e.Eharmenian=1335;e.Ehookabove=7866;e.Eightroman=8551;e.Einvertedbreve=518;e.Eiotifiedcyrillic=1124;e.Elcyrillic=1051;e.Elevenroman=8554;e.Emacron=274;e.Emacronacute=7702;e.Emacrongrave=7700;e.Emcyrillic=1052;e.Emonospace=65317;e.Encyrillic=1053;e.Endescendercyrillic=1186;e.Eng=330;e.Enghecyrillic=1188;e.Enhookcyrillic=1223;e.Eogonek=280;e.Eopen=400;e.Epsilon=917;e.Epsilontonos=904;e.Ercyrillic=1056;e\ +.Ereversed=398;e.Ereversedcyrillic=1069;e.Escyrillic=1057;e.Esdescendercyrillic=1194;e.Esh=425;e.Esmall=63333;e.Eta=919;e.Etarmenian=1336;e.Etatonos=905;e.Eth=208;e.Ethsmall=63472;e.Etilde=7868;e.Etildebelow=7706;e.Euro=8364;e.Ezh=439;e.Ezhcaron=494;e.Ezhreversed=440;e.F=70;e.Fcircle=9403;e.Fdotaccent=7710;e.Feharmenian=1366;e.Feicoptic=996;e.Fhook=401;e.Fitacyrillic=1138;e.Fiveroman=8548;e.Fmonospace=65318;e.Fourroman=8547;e.Fsmall=63334;e.G=71;e.GBsquare=13191;e.Gacute=500;e.Gamma=915;e.Gammaa\ +frican=404;e.Gangiacoptic=1002;e.Gbreve=286;e.Gcaron=486;e.Gcedilla=290;e.Gcircle=9404;e.Gcircumflex=284;e.Gcommaaccent=290;e.Gdot=288;e.Gdotaccent=288;e.Gecyrillic=1043;e.Ghadarmenian=1346;e.Ghemiddlehookcyrillic=1172;e.Ghestrokecyrillic=1170;e.Gheupturncyrillic=1168;e.Ghook=403;e.Gimarmenian=1331;e.Gjecyrillic=1027;e.Gmacron=7712;e.Gmonospace=65319;e.Grave=63182;e.Gravesmall=63328;e.Gsmall=63335;e.Gsmallhook=667;e.Gstroke=484;e.H=72;e.H18533=9679;e.H18543=9642;e.H18551=9643;e.H22073=9633;e.HPs\ +quare=13259;e.Haabkhasiancyrillic=1192;e.Hadescendercyrillic=1202;e.Hardsigncyrillic=1066;e.Hbar=294;e.Hbrevebelow=7722;e.Hcedilla=7720;e.Hcircle=9405;e.Hcircumflex=292;e.Hdieresis=7718;e.Hdotaccent=7714;e.Hdotbelow=7716;e.Hmonospace=65320;e.Hoarmenian=1344;e.Horicoptic=1e3;e.Hsmall=63336;e.Hungarumlaut=63183;e.Hungarumlautsmall=63224;e.Hzsquare=13200;e.I=73;e.IAcyrillic=1071;e.IJ=306;e.IUcyrillic=1070;e.Iacute=205;e.Iacutesmall=63469;e.Ibreve=300;e.Icaron=463;e.Icircle=9406;e.Icircumflex=206;e.\ +Icircumflexsmall=63470;e.Icyrillic=1030;e.Idblgrave=520;e.Idieresis=207;e.Idieresisacute=7726;e.Idieresiscyrillic=1252;e.Idieresissmall=63471;e.Idot=304;e.Idotaccent=304;e.Idotbelow=7882;e.Iebrevecyrillic=1238;e.Iecyrillic=1045;e.Ifraktur=8465;e.Igrave=204;e.Igravesmall=63468;e.Ihookabove=7880;e.Iicyrillic=1048;e.Iinvertedbreve=522;e.Iishortcyrillic=1049;e.Imacron=298;e.Imacroncyrillic=1250;e.Imonospace=65321;e.Iniarmenian=1339;e.Iocyrillic=1025;e.Iogonek=302;e.Iota=921;e.Iotaafrican=406;e.Iotad\ +ieresis=938;e.Iotatonos=906;e.Ismall=63337;e.Istroke=407;e.Itilde=296;e.Itildebelow=7724;e.Izhitsacyrillic=1140;e.Izhitsadblgravecyrillic=1142;e.J=74;e.Jaarmenian=1345;e.Jcircle=9407;e.Jcircumflex=308;e.Jecyrillic=1032;e.Jheharmenian=1355;e.Jmonospace=65322;e.Jsmall=63338;e.K=75;e.KBsquare=13189;e.KKsquare=13261;e.Kabashkircyrillic=1184;e.Kacute=7728;e.Kacyrillic=1050;e.Kadescendercyrillic=1178;e.Kahookcyrillic=1219;e.Kappa=922;e.Kastrokecyrillic=1182;e.Kaverticalstrokecyrillic=1180;e.Kcaron=488\ +;e.Kcedilla=310;e.Kcircle=9408;e.Kcommaaccent=310;e.Kdotbelow=7730;e.Keharmenian=1364;e.Kenarmenian=1343;e.Khacyrillic=1061;e.Kheicoptic=998;e.Khook=408;e.Kjecyrillic=1036;e.Klinebelow=7732;e.Kmonospace=65323;e.Koppacyrillic=1152;e.Koppagreek=990;e.Ksicyrillic=1134;e.Ksmall=63339;e.L=76;e.LJ=455;e.LL=63167;e.Lacute=313;e.Lambda=923;e.Lcaron=317;e.Lcedilla=315;e.Lcircle=9409;e.Lcircumflexbelow=7740;e.Lcommaaccent=315;e.Ldot=319;e.Ldotaccent=319;e.Ldotbelow=7734;e.Ldotbelowmacron=7736;e.Liwnarmeni\ +an=1340;e.Lj=456;e.Ljecyrillic=1033;e.Llinebelow=7738;e.Lmonospace=65324;e.Lslash=321;e.Lslashsmall=63225;e.Lsmall=63340;e.M=77;e.MBsquare=13190;e.Macron=63184;e.Macronsmall=63407;e.Macute=7742;e.Mcircle=9410;e.Mdotaccent=7744;e.Mdotbelow=7746;e.Menarmenian=1348;e.Mmonospace=65325;e.Msmall=63341;e.Mturned=412;e.Mu=924;e.N=78;e.NJ=458;e.Nacute=323;e.Ncaron=327;e.Ncedilla=325;e.Ncircle=9411;e.Ncircumflexbelow=7754;e.Ncommaaccent=325;e.Ndotaccent=7748;e.Ndotbelow=7750;e.Nhookleft=413;e.Nineroman=85\ +52;e.Nj=459;e.Njecyrillic=1034;e.Nlinebelow=7752;e.Nmonospace=65326;e.Nowarmenian=1350;e.Nsmall=63342;e.Ntilde=209;e.Ntildesmall=63473;e.Nu=925;e.O=79;e.OE=338;e.OEsmall=63226;e.Oacute=211;e.Oacutesmall=63475;e.Obarredcyrillic=1256;e.Obarreddieresiscyrillic=1258;e.Obreve=334;e.Ocaron=465;e.Ocenteredtilde=415;e.Ocircle=9412;e.Ocircumflex=212;e.Ocircumflexacute=7888;e.Ocircumflexdotbelow=7896;e.Ocircumflexgrave=7890;e.Ocircumflexhookabove=7892;e.Ocircumflexsmall=63476;e.Ocircumflextilde=7894;e.Ocy\ +rillic=1054;e.Odblacute=336;e.Odblgrave=524;e.Odieresis=214;e.Odieresiscyrillic=1254;e.Odieresissmall=63478;e.Odotbelow=7884;e.Ogoneksmall=63227;e.Ograve=210;e.Ogravesmall=63474;e.Oharmenian=1365;e.Ohm=8486;e.Ohookabove=7886;e.Ohorn=416;e.Ohornacute=7898;e.Ohorndotbelow=7906;e.Ohorngrave=7900;e.Ohornhookabove=7902;e.Ohorntilde=7904;e.Ohungarumlaut=336;e.Oi=418;e.Oinvertedbreve=526;e.Omacron=332;e.Omacronacute=7762;e.Omacrongrave=7760;e.Omega=8486;e.Omegacyrillic=1120;e.Omegagreek=937;e.Omegaroun\ +dcyrillic=1146;e.Omegatitlocyrillic=1148;e.Omegatonos=911;e.Omicron=927;e.Omicrontonos=908;e.Omonospace=65327;e.Oneroman=8544;e.Oogonek=490;e.Oogonekmacron=492;e.Oopen=390;e.Oslash=216;e.Oslashacute=510;e.Oslashsmall=63480;e.Osmall=63343;e.Ostrokeacute=510;e.Otcyrillic=1150;e.Otilde=213;e.Otildeacute=7756;e.Otildedieresis=7758;e.Otildesmall=63477;e.P=80;e.Pacute=7764;e.Pcircle=9413;e.Pdotaccent=7766;e.Pecyrillic=1055;e.Peharmenian=1354;e.Pemiddlehookcyrillic=1190;e.Phi=934;e.Phook=420;e.Pi=928;e\ +.Piwrarmenian=1363;e.Pmonospace=65328;e.Psi=936;e.Psicyrillic=1136;e.Psmall=63344;e.Q=81;e.Qcircle=9414;e.Qmonospace=65329;e.Qsmall=63345;e.R=82;e.Raarmenian=1356;e.Racute=340;e.Rcaron=344;e.Rcedilla=342;e.Rcircle=9415;e.Rcommaaccent=342;e.Rdblgrave=528;e.Rdotaccent=7768;e.Rdotbelow=7770;e.Rdotbelowmacron=7772;e.Reharmenian=1360;e.Rfraktur=8476;e.Rho=929;e.Ringsmall=63228;e.Rinvertedbreve=530;e.Rlinebelow=7774;e.Rmonospace=65330;e.Rsmall=63346;e.Rsmallinverted=641;e.Rsmallinvertedsuperior=694;e.\ +S=83;e.SF010000=9484;e.SF020000=9492;e.SF030000=9488;e.SF040000=9496;e.SF050000=9532;e.SF060000=9516;e.SF070000=9524;e.SF080000=9500;e.SF090000=9508;e.SF100000=9472;e.SF110000=9474;e.SF190000=9569;e.SF200000=9570;e.SF210000=9558;e.SF220000=9557;e.SF230000=9571;e.SF240000=9553;e.SF250000=9559;e.SF260000=9565;e.SF270000=9564;e.SF280000=9563;e.SF360000=9566;e.SF370000=9567;e.SF380000=9562;e.SF390000=9556;e.SF400000=9577;e.SF410000=9574;e.SF420000=9568;e.SF430000=9552;e.SF440000=9580;e.SF450000=9575\ +;e.SF460000=9576;e.SF470000=9572;e.SF480000=9573;e.SF490000=9561;e.SF500000=9560;e.SF510000=9554;e.SF520000=9555;e.SF530000=9579;e.SF540000=9578;e.Sacute=346;e.Sacutedotaccent=7780;e.Sampigreek=992;e.Scaron=352;e.Scarondotaccent=7782;e.Scaronsmall=63229;e.Scedilla=350;e.Schwa=399;e.Schwacyrillic=1240;e.Schwadieresiscyrillic=1242;e.Scircle=9416;e.Scircumflex=348;e.Scommaaccent=536;e.Sdotaccent=7776;e.Sdotbelow=7778;e.Sdotbelowdotaccent=7784;e.Seharmenian=1357;e.Sevenroman=8550;e.Shaarmenian=1351;\ +e.Shacyrillic=1064;e.Shchacyrillic=1065;e.Sheicoptic=994;e.Shhacyrillic=1210;e.Shimacoptic=1004;e.Sigma=931;e.Sixroman=8549;e.Smonospace=65331;e.Softsigncyrillic=1068;e.Ssmall=63347;e.Stigmagreek=986;e.T=84;e.Tau=932;e.Tbar=358;e.Tcaron=356;e.Tcedilla=354;e.Tcircle=9417;e.Tcircumflexbelow=7792;e.Tcommaaccent=354;e.Tdotaccent=7786;e.Tdotbelow=7788;e.Tecyrillic=1058;e.Tedescendercyrillic=1196;e.Tenroman=8553;e.Tetsecyrillic=1204;e.Theta=920;e.Thook=428;e.Thorn=222;e.Thornsmall=63486;e.Threeroman=8\ +546;e.Tildesmall=63230;e.Tiwnarmenian=1359;e.Tlinebelow=7790;e.Tmonospace=65332;e.Toarmenian=1337;e.Tonefive=444;e.Tonesix=388;e.Tonetwo=423;e.Tretroflexhook=430;e.Tsecyrillic=1062;e.Tshecyrillic=1035;e.Tsmall=63348;e.Twelveroman=8555;e.Tworoman=8545;e.U=85;e.Uacute=218;e.Uacutesmall=63482;e.Ubreve=364;e.Ucaron=467;e.Ucircle=9418;e.Ucircumflex=219;e.Ucircumflexbelow=7798;e.Ucircumflexsmall=63483;e.Ucyrillic=1059;e.Udblacute=368;e.Udblgrave=532;e.Udieresis=220;e.Udieresisacute=471;e.Udieresisbelo\ +w=7794;e.Udieresiscaron=473;e.Udieresiscyrillic=1264;e.Udieresisgrave=475;e.Udieresismacron=469;e.Udieresissmall=63484;e.Udotbelow=7908;e.Ugrave=217;e.Ugravesmall=63481;e.Uhookabove=7910;e.Uhorn=431;e.Uhornacute=7912;e.Uhorndotbelow=7920;e.Uhorngrave=7914;e.Uhornhookabove=7916;e.Uhorntilde=7918;e.Uhungarumlaut=368;e.Uhungarumlautcyrillic=1266;e.Uinvertedbreve=534;e.Ukcyrillic=1144;e.Umacron=362;e.Umacroncyrillic=1262;e.Umacrondieresis=7802;e.Umonospace=65333;e.Uogonek=370;e.Upsilon=933;e.Upsilon\ +1=978;e.Upsilonacutehooksymbolgreek=979;e.Upsilonafrican=433;e.Upsilondieresis=939;e.Upsilondieresishooksymbolgreek=980;e.Upsilonhooksymbol=978;e.Upsilontonos=910;e.Uring=366;e.Ushortcyrillic=1038;e.Usmall=63349;e.Ustraightcyrillic=1198;e.Ustraightstrokecyrillic=1200;e.Utilde=360;e.Utildeacute=7800;e.Utildebelow=7796;e.V=86;e.Vcircle=9419;e.Vdotbelow=7806;e.Vecyrillic=1042;e.Vewarmenian=1358;e.Vhook=434;e.Vmonospace=65334;e.Voarmenian=1352;e.Vsmall=63350;e.Vtilde=7804;e.W=87;e.Wacute=7810;e.Wcir\ +cle=9420;e.Wcircumflex=372;e.Wdieresis=7812;e.Wdotaccent=7814;e.Wdotbelow=7816;e.Wgrave=7808;e.Wmonospace=65335;e.Wsmall=63351;e.X=88;e.Xcircle=9421;e.Xdieresis=7820;e.Xdotaccent=7818;e.Xeharmenian=1341;e.Xi=926;e.Xmonospace=65336;e.Xsmall=63352;e.Y=89;e.Yacute=221;e.Yacutesmall=63485;e.Yatcyrillic=1122;e.Ycircle=9422;e.Ycircumflex=374;e.Ydieresis=376;e.Ydieresissmall=63487;e.Ydotaccent=7822;e.Ydotbelow=7924;e.Yericyrillic=1067;e.Yerudieresiscyrillic=1272;e.Ygrave=7922;e.Yhook=435;e.Yhookabove=7\ +926;e.Yiarmenian=1349;e.Yicyrillic=1031;e.Yiwnarmenian=1362;e.Ymonospace=65337;e.Ysmall=63353;e.Ytilde=7928;e.Yusbigcyrillic=1130;e.Yusbigiotifiedcyrillic=1132;e.Yuslittlecyrillic=1126;e.Yuslittleiotifiedcyrillic=1128;e.Z=90;e.Zaarmenian=1334;e.Zacute=377;e.Zcaron=381;e.Zcaronsmall=63231;e.Zcircle=9423;e.Zcircumflex=7824;e.Zdot=379;e.Zdotaccent=379;e.Zdotbelow=7826;e.Zecyrillic=1047;e.Zedescendercyrillic=1176;e.Zedieresiscyrillic=1246;e.Zeta=918;e.Zhearmenian=1338;e.Zhebrevecyrillic=1217;e.Zhecy\ +rillic=1046;e.Zhedescendercyrillic=1174;e.Zhedieresiscyrillic=1244;e.Zlinebelow=7828;e.Zmonospace=65338;e.Zsmall=63354;e.Zstroke=437;e.a=97;e.aabengali=2438;e.aacute=225;e.aadeva=2310;e.aagujarati=2694;e.aagurmukhi=2566;e.aamatragurmukhi=2622;e.aarusquare=13059;e.aavowelsignbengali=2494;e.aavowelsigndeva=2366;e.aavowelsigngujarati=2750;e.abbreviationmarkarmenian=1375;e.abbreviationsigndeva=2416;e.abengali=2437;e.abopomofo=12570;e.abreve=259;e.abreveacute=7855;e.abrevecyrillic=1233;e.abrevedotbel\ +ow=7863;e.abrevegrave=7857;e.abrevehookabove=7859;e.abrevetilde=7861;e.acaron=462;e.acircle=9424;e.acircumflex=226;e.acircumflexacute=7845;e.acircumflexdotbelow=7853;e.acircumflexgrave=7847;e.acircumflexhookabove=7849;e.acircumflextilde=7851;e.acute=180;e.acutebelowcmb=791;e.acutecmb=769;e.acutecomb=769;e.acutedeva=2388;e.acutelowmod=719;e.acutetonecmb=833;e.acyrillic=1072;e.adblgrave=513;e.addakgurmukhi=2673;e.adeva=2309;e.adieresis=228;e.adieresiscyrillic=1235;e.adieresismacron=479;e.adotbelow\ +=7841;e.adotmacron=481;e.ae=230;e.aeacute=509;e.aekorean=12624;e.aemacron=483;e.afii00208=8213;e.afii08941=8356;e.afii10017=1040;e.afii10018=1041;e.afii10019=1042;e.afii10020=1043;e.afii10021=1044;e.afii10022=1045;e.afii10023=1025;e.afii10024=1046;e.afii10025=1047;e.afii10026=1048;e.afii10027=1049;e.afii10028=1050;e.afii10029=1051;e.afii10030=1052;e.afii10031=1053;e.afii10032=1054;e.afii10033=1055;e.afii10034=1056;e.afii10035=1057;e.afii10036=1058;e.afii10037=1059;e.afii10038=1060;e.afii10039=10\ +61;e.afii10040=1062;e.afii10041=1063;e.afii10042=1064;e.afii10043=1065;e.afii10044=1066;e.afii10045=1067;e.afii10046=1068;e.afii10047=1069;e.afii10048=1070;e.afii10049=1071;e.afii10050=1168;e.afii10051=1026;e.afii10052=1027;e.afii10053=1028;e.afii10054=1029;e.afii10055=1030;e.afii10056=1031;e.afii10057=1032;e.afii10058=1033;e.afii10059=1034;e.afii10060=1035;e.afii10061=1036;e.afii10062=1038;e.afii10063=63172;e.afii10064=63173;e.afii10065=1072;e.afii10066=1073;e.afii10067=1074;e.afii10068=1075;e.\ +afii10069=1076;e.afii10070=1077;e.afii10071=1105;e.afii10072=1078;e.afii10073=1079;e.afii10074=1080;e.afii10075=1081;e.afii10076=1082;e.afii10077=1083;e.afii10078=1084;e.afii10079=1085;e.afii10080=1086;e.afii10081=1087;e.afii10082=1088;e.afii10083=1089;e.afii10084=1090;e.afii10085=1091;e.afii10086=1092;e.afii10087=1093;e.afii10088=1094;e.afii10089=1095;e.afii10090=1096;e.afii10091=1097;e.afii10092=1098;e.afii10093=1099;e.afii10094=1100;e.afii10095=1101;e.afii10096=1102;e.afii10097=1103;e.afii100\ +98=1169;e.afii10099=1106;e.afii10100=1107;e.afii10101=1108;e.afii10102=1109;e.afii10103=1110;e.afii10104=1111;e.afii10105=1112;e.afii10106=1113;e.afii10107=1114;e.afii10108=1115;e.afii10109=1116;e.afii10110=1118;e.afii10145=1039;e.afii10146=1122;e.afii10147=1138;e.afii10148=1140;e.afii10192=63174;e.afii10193=1119;e.afii10194=1123;e.afii10195=1139;e.afii10196=1141;e.afii10831=63175;e.afii10832=63176;e.afii10846=1241;e.afii299=8206;e.afii300=8207;e.afii301=8205;e.afii57381=1642;e.afii57388=1548;e.\ +afii57392=1632;e.afii57393=1633;e.afii57394=1634;e.afii57395=1635;e.afii57396=1636;e.afii57397=1637;e.afii57398=1638;e.afii57399=1639;e.afii57400=1640;e.afii57401=1641;e.afii57403=1563;e.afii57407=1567;e.afii57409=1569;e.afii57410=1570;e.afii57411=1571;e.afii57412=1572;e.afii57413=1573;e.afii57414=1574;e.afii57415=1575;e.afii57416=1576;e.afii57417=1577;e.afii57418=1578;e.afii57419=1579;e.afii57420=1580;e.afii57421=1581;e.afii57422=1582;e.afii57423=1583;e.afii57424=1584;e.afii57425=1585;e.afii574\ +26=1586;e.afii57427=1587;e.afii57428=1588;e.afii57429=1589;e.afii57430=1590;e.afii57431=1591;e.afii57432=1592;e.afii57433=1593;e.afii57434=1594;e.afii57440=1600;e.afii57441=1601;e.afii57442=1602;e.afii57443=1603;e.afii57444=1604;e.afii57445=1605;e.afii57446=1606;e.afii57448=1608;e.afii57449=1609;e.afii57450=1610;e.afii57451=1611;e.afii57452=1612;e.afii57453=1613;e.afii57454=1614;e.afii57455=1615;e.afii57456=1616;e.afii57457=1617;e.afii57458=1618;e.afii57470=1607;e.afii57505=1700;e.afii57506=1662\ +;e.afii57507=1670;e.afii57508=1688;e.afii57509=1711;e.afii57511=1657;e.afii57512=1672;e.afii57513=1681;e.afii57514=1722;e.afii57519=1746;e.afii57534=1749;e.afii57636=8362;e.afii57645=1470;e.afii57658=1475;e.afii57664=1488;e.afii57665=1489;e.afii57666=1490;e.afii57667=1491;e.afii57668=1492;e.afii57669=1493;e.afii57670=1494;e.afii57671=1495;e.afii57672=1496;e.afii57673=1497;e.afii57674=1498;e.afii57675=1499;e.afii57676=1500;e.afii57677=1501;e.afii57678=1502;e.afii57679=1503;e.afii57680=1504;e.afii\ +57681=1505;e.afii57682=1506;e.afii57683=1507;e.afii57684=1508;e.afii57685=1509;e.afii57686=1510;e.afii57687=1511;e.afii57688=1512;e.afii57689=1513;e.afii57690=1514;e.afii57694=64298;e.afii57695=64299;e.afii57700=64331;e.afii57705=64287;e.afii57716=1520;e.afii57717=1521;e.afii57718=1522;e.afii57723=64309;e.afii57793=1460;e.afii57794=1461;e.afii57795=1462;e.afii57796=1467;e.afii57797=1464;e.afii57798=1463;e.afii57799=1456;e.afii57800=1458;e.afii57801=1457;e.afii57802=1459;e.afii57803=1474;e.afii57\ +804=1473;e.afii57806=1465;e.afii57807=1468;e.afii57839=1469;e.afii57841=1471;e.afii57842=1472;e.afii57929=700;e.afii61248=8453;e.afii61289=8467;e.afii61352=8470;e.afii61573=8236;e.afii61574=8237;e.afii61575=8238;e.afii61664=8204;e.afii63167=1645;e.afii64937=701;e.agrave=224;e.agujarati=2693;e.agurmukhi=2565;e.ahiragana=12354;e.ahookabove=7843;e.aibengali=2448;e.aibopomofo=12574;e.aideva=2320;e.aiecyrillic=1237;e.aigujarati=2704;e.aigurmukhi=2576;e.aimatragurmukhi=2632;e.ainarabic=1593;e.ainfinal\ +arabic=65226;e.aininitialarabic=65227;e.ainmedialarabic=65228;e.ainvertedbreve=515;e.aivowelsignbengali=2504;e.aivowelsigndeva=2376;e.aivowelsigngujarati=2760;e.akatakana=12450;e.akatakanahalfwidth=65393;e.akorean=12623;e.alef=1488;e.alefarabic=1575;e.alefdageshhebrew=64304;e.aleffinalarabic=65166;e.alefhamzaabovearabic=1571;e.alefhamzaabovefinalarabic=65156;e.alefhamzabelowarabic=1573;e.alefhamzabelowfinalarabic=65160;e.alefhebrew=1488;e.aleflamedhebrew=64335;e.alefmaddaabovearabic=1570;e.alefm\ +addaabovefinalarabic=65154;e.alefmaksuraarabic=1609;e.alefmaksurafinalarabic=65264;e.alefmaksurainitialarabic=65267;e.alefmaksuramedialarabic=65268;e.alefpatahhebrew=64302;e.alefqamatshebrew=64303;e.aleph=8501;e.allequal=8780;e.alpha=945;e.alphatonos=940;e.amacron=257;e.amonospace=65345;e.ampersand=38;e.ampersandmonospace=65286;e.ampersandsmall=63270;e.amsquare=13250;e.anbopomofo=12578;e.angbopomofo=12580;e.angbracketleft=12296;e.angbracketright=12297;e.angkhankhuthai=3674;e.angle=8736;e.anglebr\ +acketleft=12296;e.anglebracketleftvertical=65087;e.anglebracketright=12297;e.anglebracketrightvertical=65088;e.angleleft=9001;e.angleright=9002;e.angstrom=8491;e.anoteleia=903;e.anudattadeva=2386;e.anusvarabengali=2434;e.anusvaradeva=2306;e.anusvaragujarati=2690;e.aogonek=261;e.apaatosquare=13056;e.aparen=9372;e.apostrophearmenian=1370;e.apostrophemod=700;e.apple=63743;e.approaches=8784;e.approxequal=8776;e.approxequalorimage=8786;e.approximatelyequal=8773;e.araeaekorean=12686;e.araeakorean=1268\ +5;e.arc=8978;e.arighthalfring=7834;e.aring=229;e.aringacute=507;e.aringbelow=7681;e.arrowboth=8596;e.arrowdashdown=8675;e.arrowdashleft=8672;e.arrowdashright=8674;e.arrowdashup=8673;e.arrowdblboth=8660;e.arrowdbldown=8659;e.arrowdblleft=8656;e.arrowdblright=8658;e.arrowdblup=8657;e.arrowdown=8595;e.arrowdownleft=8601;e.arrowdownright=8600;e.arrowdownwhite=8681;e.arrowheaddownmod=709;e.arrowheadleftmod=706;e.arrowheadrightmod=707;e.arrowheadupmod=708;e.arrowhorizex=63719;e.arrowleft=8592;e.arrowl\ +eftdbl=8656;e.arrowleftdblstroke=8653;e.arrowleftoverright=8646;e.arrowleftwhite=8678;e.arrowright=8594;e.arrowrightdblstroke=8655;e.arrowrightheavy=10142;e.arrowrightoverleft=8644;e.arrowrightwhite=8680;e.arrowtableft=8676;e.arrowtabright=8677;e.arrowup=8593;e.arrowupdn=8597;e.arrowupdnbse=8616;e.arrowupdownbase=8616;e.arrowupleft=8598;e.arrowupleftofdown=8645;e.arrowupright=8599;e.arrowupwhite=8679;e.arrowvertex=63718;e.asciicircum=94;e.asciicircummonospace=65342;e.asciitilde=126;e.asciitildem\ +onospace=65374;e.ascript=593;e.ascriptturned=594;e.asmallhiragana=12353;e.asmallkatakana=12449;e.asmallkatakanahalfwidth=65383;e.asterisk=42;e.asteriskaltonearabic=1645;e.asteriskarabic=1645;e.asteriskmath=8727;e.asteriskmonospace=65290;e.asterisksmall=65121;e.asterism=8258;e.asuperior=63209;e.asymptoticallyequal=8771;e.at=64;e.atilde=227;e.atmonospace=65312;e.atsmall=65131;e.aturned=592;e.aubengali=2452;e.aubopomofo=12576;e.audeva=2324;e.augujarati=2708;e.augurmukhi=2580;e.aulengthmarkbengali=2\ +519;e.aumatragurmukhi=2636;e.auvowelsignbengali=2508;e.auvowelsigndeva=2380;e.auvowelsigngujarati=2764;e.avagrahadeva=2365;e.aybarmenian=1377;e.ayin=1506;e.ayinaltonehebrew=64288;e.ayinhebrew=1506;e.b=98;e.babengali=2476;e.backslash=92;e.backslashmonospace=65340;e.badeva=2348;e.bagujarati=2732;e.bagurmukhi=2604;e.bahiragana=12400;e.bahtthai=3647;e.bakatakana=12496;e.bar=124;e.barmonospace=65372;e.bbopomofo=12549;e.bcircle=9425;e.bdotaccent=7683;e.bdotbelow=7685;e.beamedsixteenthnotes=9836;e.beca\ +use=8757;e.becyrillic=1073;e.beharabic=1576;e.behfinalarabic=65168;e.behinitialarabic=65169;e.behiragana=12409;e.behmedialarabic=65170;e.behmeeminitialarabic=64671;e.behmeemisolatedarabic=64520;e.behnoonfinalarabic=64621;e.bekatakana=12505;e.benarmenian=1378;e.bet=1489;e.beta=946;e.betasymbolgreek=976;e.betdagesh=64305;e.betdageshhebrew=64305;e.bethebrew=1489;e.betrafehebrew=64332;e.bhabengali=2477;e.bhadeva=2349;e.bhagujarati=2733;e.bhagurmukhi=2605;e.bhook=595;e.bihiragana=12403;e.bikatakana=1\ +2499;e.bilabialclick=664;e.bindigurmukhi=2562;e.birusquare=13105;e.blackcircle=9679;e.blackdiamond=9670;e.blackdownpointingtriangle=9660;e.blackleftpointingpointer=9668;e.blackleftpointingtriangle=9664;e.blacklenticularbracketleft=12304;e.blacklenticularbracketleftvertical=65083;e.blacklenticularbracketright=12305;e.blacklenticularbracketrightvertical=65084;e.blacklowerlefttriangle=9699;e.blacklowerrighttriangle=9698;e.blackrectangle=9644;e.blackrightpointingpointer=9658;e.blackrightpointingtria\ +ngle=9654;e.blacksmallsquare=9642;e.blacksmilingface=9787;e.blacksquare=9632;e.blackstar=9733;e.blackupperlefttriangle=9700;e.blackupperrighttriangle=9701;e.blackuppointingsmalltriangle=9652;e.blackuppointingtriangle=9650;e.blank=9251;e.blinebelow=7687;e.block=9608;e.bmonospace=65346;e.bobaimaithai=3610;e.bohiragana=12412;e.bokatakana=12508;e.bparen=9373;e.bqsquare=13251;e.braceex=63732;e.braceleft=123;e.braceleftbt=63731;e.braceleftmid=63730;e.braceleftmonospace=65371;e.braceleftsmall=65115;e.b\ +racelefttp=63729;e.braceleftvertical=65079;e.braceright=125;e.bracerightbt=63742;e.bracerightmid=63741;e.bracerightmonospace=65373;e.bracerightsmall=65116;e.bracerighttp=63740;e.bracerightvertical=65080;e.bracketleft=91;e.bracketleftbt=63728;e.bracketleftex=63727;e.bracketleftmonospace=65339;e.bracketlefttp=63726;e.bracketright=93;e.bracketrightbt=63739;e.bracketrightex=63738;e.bracketrightmonospace=65341;e.bracketrighttp=63737;e.breve=728;e.brevebelowcmb=814;e.brevecmb=774;e.breveinvertedbelowc\ +mb=815;e.breveinvertedcmb=785;e.breveinverteddoublecmb=865;e.bridgebelowcmb=810;e.bridgeinvertedbelowcmb=826;e.brokenbar=166;e.bstroke=384;e.bsuperior=63210;e.btopbar=387;e.buhiragana=12406;e.bukatakana=12502;e.bullet=8226;e.bulletinverse=9688;e.bulletoperator=8729;e.bullseye=9678;e.c=99;e.caarmenian=1390;e.cabengali=2458;e.cacute=263;e.cadeva=2330;e.cagujarati=2714;e.cagurmukhi=2586;e.calsquare=13192;e.candrabindubengali=2433;e.candrabinducmb=784;e.candrabindudeva=2305;e.candrabindugujarati=268\ +9;e.capslock=8682;e.careof=8453;e.caron=711;e.caronbelowcmb=812;e.caroncmb=780;e.carriagereturn=8629;e.cbopomofo=12568;e.ccaron=269;e.ccedilla=231;e.ccedillaacute=7689;e.ccircle=9426;e.ccircumflex=265;e.ccurl=597;e.cdot=267;e.cdotaccent=267;e.cdsquare=13253;e.cedilla=184;e.cedillacmb=807;e.cent=162;e.centigrade=8451;e.centinferior=63199;e.centmonospace=65504;e.centoldstyle=63394;e.centsuperior=63200;e.chaarmenian=1401;e.chabengali=2459;e.chadeva=2331;e.chagujarati=2715;e.chagurmukhi=2587;e.chbop\ +omofo=12564;e.cheabkhasiancyrillic=1213;e.checkmark=10003;e.checyrillic=1095;e.chedescenderabkhasiancyrillic=1215;e.chedescendercyrillic=1207;e.chedieresiscyrillic=1269;e.cheharmenian=1395;e.chekhakassiancyrillic=1228;e.cheverticalstrokecyrillic=1209;e.chi=967;e.chieuchacirclekorean=12919;e.chieuchaparenkorean=12823;e.chieuchcirclekorean=12905;e.chieuchkorean=12618;e.chieuchparenkorean=12809;e.chochangthai=3594;e.chochanthai=3592;e.chochingthai=3593;e.chochoethai=3596;e.chook=392;e.cieucacirclek\ +orean=12918;e.cieucaparenkorean=12822;e.cieuccirclekorean=12904;e.cieuckorean=12616;e.cieucparenkorean=12808;e.cieucuparenkorean=12828;e.circle=9675;e.circlecopyrt=169;e.circlemultiply=8855;e.circleot=8857;e.circleplus=8853;e.circlepostalmark=12342;e.circlewithlefthalfblack=9680;e.circlewithrighthalfblack=9681;e.circumflex=710;e.circumflexbelowcmb=813;e.circumflexcmb=770;e.clear=8999;e.clickalveolar=450;e.clickdental=448;e.clicklateral=449;e.clickretroflex=451;e.club=9827;e.clubsuitblack=9827;e.\ +clubsuitwhite=9831;e.cmcubedsquare=13220;e.cmonospace=65347;e.cmsquaredsquare=13216;e.coarmenian=1409;e.colon=58;e.colonmonetary=8353;e.colonmonospace=65306;e.colonsign=8353;e.colonsmall=65109;e.colontriangularhalfmod=721;e.colontriangularmod=720;e.comma=44;e.commaabovecmb=787;e.commaaboverightcmb=789;e.commaaccent=63171;e.commaarabic=1548;e.commaarmenian=1373;e.commainferior=63201;e.commamonospace=65292;e.commareversedabovecmb=788;e.commareversedmod=701;e.commasmall=65104;e.commasuperior=63202;\ +e.commaturnedabovecmb=786;e.commaturnedmod=699;e.compass=9788;e.congruent=8773;e.contourintegral=8750;e.control=8963;e.controlACK=6;e.controlBEL=7;e.controlBS=8;e.controlCAN=24;e.controlCR=13;e.controlDC1=17;e.controlDC2=18;e.controlDC3=19;e.controlDC4=20;e.controlDEL=127;e.controlDLE=16;e.controlEM=25;e.controlENQ=5;e.controlEOT=4;e.controlESC=27;e.controlETB=23;e.controlETX=3;e.controlFF=12;e.controlFS=28;e.controlGS=29;e.controlHT=9;e.controlLF=10;e.controlNAK=21;e.controlNULL=0;e.controlRS=3\ +0;e.controlSI=15;e.controlSO=14;e.controlSOT=2;e.controlSTX=1;e.controlSUB=26;e.controlSYN=22;e.controlUS=31;e.controlVT=11;e.copyright=169;e.copyrightsans=63721;e.copyrightserif=63193;e.cornerbracketleft=12300;e.cornerbracketlefthalfwidth=65378;e.cornerbracketleftvertical=65089;e.cornerbracketright=12301;e.cornerbracketrighthalfwidth=65379;e.cornerbracketrightvertical=65090;e.corporationsquare=13183;e.cosquare=13255;e.coverkgsquare=13254;e.cparen=9374;e.cruzeiro=8354;e.cstretched=663;e.curlyand\ +=8911;e.curlyor=8910;e.currency=164;e.cyrBreve=63185;e.cyrFlex=63186;e.cyrbreve=63188;e.cyrflex=63189;e.d=100;e.daarmenian=1380;e.dabengali=2470;e.dadarabic=1590;e.dadeva=2342;e.dadfinalarabic=65214;e.dadinitialarabic=65215;e.dadmedialarabic=65216;e.dagesh=1468;e.dageshhebrew=1468;e.dagger=8224;e.daggerdbl=8225;e.dagujarati=2726;e.dagurmukhi=2598;e.dahiragana=12384;e.dakatakana=12480;e.dalarabic=1583;e.dalet=1491;e.daletdagesh=64307;e.daletdageshhebrew=64307;e.dalethebrew=1491;e.dalfinalarabic=6\ +5194;e.dammaarabic=1615;e.dammalowarabic=1615;e.dammatanaltonearabic=1612;e.dammatanarabic=1612;e.danda=2404;e.dargahebrew=1447;e.dargalefthebrew=1447;e.dasiapneumatacyrilliccmb=1157;e.dblGrave=63187;e.dblanglebracketleft=12298;e.dblanglebracketleftvertical=65085;e.dblanglebracketright=12299;e.dblanglebracketrightvertical=65086;e.dblarchinvertedbelowcmb=811;e.dblarrowleft=8660;e.dblarrowright=8658;e.dbldanda=2405;e.dblgrave=63190;e.dblgravecmb=783;e.dblintegral=8748;e.dbllowline=8215;e.dbllowlin\ +ecmb=819;e.dbloverlinecmb=831;e.dblprimemod=698;e.dblverticalbar=8214;e.dblverticallineabovecmb=782;e.dbopomofo=12553;e.dbsquare=13256;e.dcaron=271;e.dcedilla=7697;e.dcircle=9427;e.dcircumflexbelow=7699;e.dcroat=273;e.ddabengali=2465;e.ddadeva=2337;e.ddagujarati=2721;e.ddagurmukhi=2593;e.ddalarabic=1672;e.ddalfinalarabic=64393;e.dddhadeva=2396;e.ddhabengali=2466;e.ddhadeva=2338;e.ddhagujarati=2722;e.ddhagurmukhi=2594;e.ddotaccent=7691;e.ddotbelow=7693;e.decimalseparatorarabic=1643;e.decimalsepar\ +atorpersian=1643;e.decyrillic=1076;e.degree=176;e.dehihebrew=1453;e.dehiragana=12391;e.deicoptic=1007;e.dekatakana=12487;e.deleteleft=9003;e.deleteright=8998;e.delta=948;e.deltaturned=397;e.denominatorminusonenumeratorbengali=2552;e.dezh=676;e.dhabengali=2471;e.dhadeva=2343;e.dhagujarati=2727;e.dhagurmukhi=2599;e.dhook=599;e.dialytikatonos=901;e.dialytikatonoscmb=836;e.diamond=9830;e.diamondsuitwhite=9826;e.dieresis=168;e.dieresisacute=63191;e.dieresisbelowcmb=804;e.dieresiscmb=776;e.dieresisgra\ +ve=63192;e.dieresistonos=901;e.dihiragana=12386;e.dikatakana=12482;e.dittomark=12291;e.divide=247;e.divides=8739;e.divisionslash=8725;e.djecyrillic=1106;e.dkshade=9619;e.dlinebelow=7695;e.dlsquare=13207;e.dmacron=273;e.dmonospace=65348;e.dnblock=9604;e.dochadathai=3598;e.dodekthai=3604;e.dohiragana=12393;e.dokatakana=12489;e.dollar=36;e.dollarinferior=63203;e.dollarmonospace=65284;e.dollaroldstyle=63268;e.dollarsmall=65129;e.dollarsuperior=63204;e.dong=8363;e.dorusquare=13094;e.dotaccent=729;e.d\ +otaccentcmb=775;e.dotbelowcmb=803;e.dotbelowcomb=803;e.dotkatakana=12539;e.dotlessi=305;e.dotlessj=63166;e.dotlessjstrokehook=644;e.dotmath=8901;e.dottedcircle=9676;e.doubleyodpatah=64287;e.doubleyodpatahhebrew=64287;e.downtackbelowcmb=798;e.downtackmod=725;e.dparen=9375;e.dsuperior=63211;e.dtail=598;e.dtopbar=396;e.duhiragana=12389;e.dukatakana=12485;e.dz=499;e.dzaltone=675;e.dzcaron=454;e.dzcurl=677;e.dzeabkhasiancyrillic=1249;e.dzecyrillic=1109;e.dzhecyrillic=1119;e.e=101;e.eacute=233;e.earth\ +=9793;e.ebengali=2447;e.ebopomofo=12572;e.ebreve=277;e.ecandradeva=2317;e.ecandragujarati=2701;e.ecandravowelsigndeva=2373;e.ecandravowelsigngujarati=2757;e.ecaron=283;e.ecedillabreve=7709;e.echarmenian=1381;e.echyiwnarmenian=1415;e.ecircle=9428;e.ecircumflex=234;e.ecircumflexacute=7871;e.ecircumflexbelow=7705;e.ecircumflexdotbelow=7879;e.ecircumflexgrave=7873;e.ecircumflexhookabove=7875;e.ecircumflextilde=7877;e.ecyrillic=1108;e.edblgrave=517;e.edeva=2319;e.edieresis=235;e.edot=279;e.edotaccent\ +=279;e.edotbelow=7865;e.eegurmukhi=2575;e.eematragurmukhi=2631;e.efcyrillic=1092;e.egrave=232;e.egujarati=2703;e.eharmenian=1383;e.ehbopomofo=12573;e.ehiragana=12360;e.ehookabove=7867;e.eibopomofo=12575;e.eight=56;e.eightarabic=1640;e.eightbengali=2542;e.eightcircle=9319;e.eightcircleinversesansserif=10129;e.eightdeva=2414;e.eighteencircle=9329;e.eighteenparen=9349;e.eighteenperiod=9369;e.eightgujarati=2798;e.eightgurmukhi=2670;e.eighthackarabic=1640;e.eighthangzhou=12328;e.eighthnotebeamed=9835\ +;e.eightideographicparen=12839;e.eightinferior=8328;e.eightmonospace=65304;e.eightoldstyle=63288;e.eightparen=9339;e.eightperiod=9359;e.eightpersian=1784;e.eightroman=8567;e.eightsuperior=8312;e.eightthai=3672;e.einvertedbreve=519;e.eiotifiedcyrillic=1125;e.ekatakana=12456;e.ekatakanahalfwidth=65396;e.ekonkargurmukhi=2676;e.ekorean=12628;e.elcyrillic=1083;e.element=8712;e.elevencircle=9322;e.elevenparen=9342;e.elevenperiod=9362;e.elevenroman=8570;e.ellipsis=8230;e.ellipsisvertical=8942;e.emacron\ +=275;e.emacronacute=7703;e.emacrongrave=7701;e.emcyrillic=1084;e.emdash=8212;e.emdashvertical=65073;e.emonospace=65349;e.emphasismarkarmenian=1371;e.emptyset=8709;e.enbopomofo=12579;e.encyrillic=1085;e.endash=8211;e.endashvertical=65074;e.endescendercyrillic=1187;e.eng=331;e.engbopomofo=12581;e.enghecyrillic=1189;e.enhookcyrillic=1224;e.enspace=8194;e.eogonek=281;e.eokorean=12627;e.eopen=603;e.eopenclosed=666;e.eopenreversed=604;e.eopenreversedclosed=606;e.eopenreversedhook=605;e.eparen=9376;e.e\ +psilon=949;e.epsilontonos=941;e.equal=61;e.equalmonospace=65309;e.equalsmall=65126;e.equalsuperior=8316;e.equivalence=8801;e.erbopomofo=12582;e.ercyrillic=1088;e.ereversed=600;e.ereversedcyrillic=1101;e.escyrillic=1089;e.esdescendercyrillic=1195;e.esh=643;e.eshcurl=646;e.eshortdeva=2318;e.eshortvowelsigndeva=2374;e.eshreversedloop=426;e.eshsquatreversed=645;e.esmallhiragana=12359;e.esmallkatakana=12455;e.esmallkatakanahalfwidth=65386;e.estimated=8494;e.esuperior=63212;e.eta=951;e.etarmenian=1384\ +;e.etatonos=942;e.eth=240;e.etilde=7869;e.etildebelow=7707;e.etnahtafoukhhebrew=1425;e.etnahtafoukhlefthebrew=1425;e.etnahtahebrew=1425;e.etnahtalefthebrew=1425;e.eturned=477;e.eukorean=12641;e.euro=8364;e.evowelsignbengali=2503;e.evowelsigndeva=2375;e.evowelsigngujarati=2759;e.exclam=33;e.exclamarmenian=1372;e.exclamdbl=8252;e.exclamdown=161;e.exclamdownsmall=63393;e.exclammonospace=65281;e.exclamsmall=63265;e.existential=8707;e.ezh=658;e.ezhcaron=495;e.ezhcurl=659;e.ezhreversed=441;e.ezhtail=4\ +42;e.f=102;e.fadeva=2398;e.fagurmukhi=2654;e.fahrenheit=8457;e.fathaarabic=1614;e.fathalowarabic=1614;e.fathatanarabic=1611;e.fbopomofo=12552;e.fcircle=9429;e.fdotaccent=7711;e.feharabic=1601;e.feharmenian=1414;e.fehfinalarabic=65234;e.fehinitialarabic=65235;e.fehmedialarabic=65236;e.feicoptic=997;e.female=9792;e.ff=64256;e.f_f=64256;e.ffi=64259;e.f_f_i=64259;e.ffl=64260;e.f_f_l=64260;e.fi=64257;e.f_i=64257;e.fifteencircle=9326;e.fifteenparen=9346;e.fifteenperiod=9366;e.figuredash=8210;e.filledb\ +ox=9632;e.filledrect=9644;e.finalkaf=1498;e.finalkafdagesh=64314;e.finalkafdageshhebrew=64314;e.finalkafhebrew=1498;e.finalmem=1501;e.finalmemhebrew=1501;e.finalnun=1503;e.finalnunhebrew=1503;e.finalpe=1507;e.finalpehebrew=1507;e.finaltsadi=1509;e.finaltsadihebrew=1509;e.firsttonechinese=713;e.fisheye=9673;e.fitacyrillic=1139;e.five=53;e.fivearabic=1637;e.fivebengali=2539;e.fivecircle=9316;e.fivecircleinversesansserif=10126;e.fivedeva=2411;e.fiveeighths=8541;e.fivegujarati=2795;e.fivegurmukhi=26\ +67;e.fivehackarabic=1637;e.fivehangzhou=12325;e.fiveideographicparen=12836;e.fiveinferior=8325;e.fivemonospace=65301;e.fiveoldstyle=63285;e.fiveparen=9336;e.fiveperiod=9356;e.fivepersian=1781;e.fiveroman=8564;e.fivesuperior=8309;e.fivethai=3669;e.fl=64258;e.f_l=64258;e.florin=402;e.fmonospace=65350;e.fmsquare=13209;e.fofanthai=3615;e.fofathai=3613;e.fongmanthai=3663;e.forall=8704;e.four=52;e.fourarabic=1636;e.fourbengali=2538;e.fourcircle=9315;e.fourcircleinversesansserif=10125;e.fourdeva=2410;e\ +.fourgujarati=2794;e.fourgurmukhi=2666;e.fourhackarabic=1636;e.fourhangzhou=12324;e.fourideographicparen=12835;e.fourinferior=8324;e.fourmonospace=65300;e.fournumeratorbengali=2551;e.fouroldstyle=63284;e.fourparen=9335;e.fourperiod=9355;e.fourpersian=1780;e.fourroman=8563;e.foursuperior=8308;e.fourteencircle=9325;e.fourteenparen=9345;e.fourteenperiod=9365;e.fourthai=3668;e.fourthtonechinese=715;e.fparen=9377;e.fraction=8260;e.franc=8355;e.g=103;e.gabengali=2455;e.gacute=501;e.gadeva=2327;e.gafar\ +abic=1711;e.gaffinalarabic=64403;e.gafinitialarabic=64404;e.gafmedialarabic=64405;e.gagujarati=2711;e.gagurmukhi=2583;e.gahiragana=12364;e.gakatakana=12460;e.gamma=947;e.gammalatinsmall=611;e.gammasuperior=736;e.gangiacoptic=1003;e.gbopomofo=12557;e.gbreve=287;e.gcaron=487;e.gcedilla=291;e.gcircle=9430;e.gcircumflex=285;e.gcommaaccent=291;e.gdot=289;e.gdotaccent=289;e.gecyrillic=1075;e.gehiragana=12370;e.gekatakana=12466;e.geometricallyequal=8785;e.gereshaccenthebrew=1436;e.gereshhebrew=1523;e.g\ +ereshmuqdamhebrew=1437;e.germandbls=223;e.gershayimaccenthebrew=1438;e.gershayimhebrew=1524;e.getamark=12307;e.ghabengali=2456;e.ghadarmenian=1394;e.ghadeva=2328;e.ghagujarati=2712;e.ghagurmukhi=2584;e.ghainarabic=1594;e.ghainfinalarabic=65230;e.ghaininitialarabic=65231;e.ghainmedialarabic=65232;e.ghemiddlehookcyrillic=1173;e.ghestrokecyrillic=1171;e.gheupturncyrillic=1169;e.ghhadeva=2394;e.ghhagurmukhi=2650;e.ghook=608;e.ghzsquare=13203;e.gihiragana=12366;e.gikatakana=12462;e.gimarmenian=1379;e\ +.gimel=1490;e.gimeldagesh=64306;e.gimeldageshhebrew=64306;e.gimelhebrew=1490;e.gjecyrillic=1107;e.glottalinvertedstroke=446;e.glottalstop=660;e.glottalstopinverted=662;e.glottalstopmod=704;e.glottalstopreversed=661;e.glottalstopreversedmod=705;e.glottalstopreversedsuperior=740;e.glottalstopstroke=673;e.glottalstopstrokereversed=674;e.gmacron=7713;e.gmonospace=65351;e.gohiragana=12372;e.gokatakana=12468;e.gparen=9378;e.gpasquare=13228;e.gradient=8711;e.grave=96;e.gravebelowcmb=790;e.gravecmb=768;\ +e.gravecomb=768;e.gravedeva=2387;e.gravelowmod=718;e.gravemonospace=65344;e.gravetonecmb=832;e.greater=62;e.greaterequal=8805;e.greaterequalorless=8923;e.greatermonospace=65310;e.greaterorequivalent=8819;e.greaterorless=8823;e.greateroverequal=8807;e.greatersmall=65125;e.gscript=609;e.gstroke=485;e.guhiragana=12368;e.guillemotleft=171;e.guillemotright=187;e.guilsinglleft=8249;e.guilsinglright=8250;e.gukatakana=12464;e.guramusquare=13080;e.gysquare=13257;e.h=104;e.haabkhasiancyrillic=1193;e.haalt\ +onearabic=1729;e.habengali=2489;e.hadescendercyrillic=1203;e.hadeva=2361;e.hagujarati=2745;e.hagurmukhi=2617;e.haharabic=1581;e.hahfinalarabic=65186;e.hahinitialarabic=65187;e.hahiragana=12399;e.hahmedialarabic=65188;e.haitusquare=13098;e.hakatakana=12495;e.hakatakanahalfwidth=65418;e.halantgurmukhi=2637;e.hamzaarabic=1569;e.hamzalowarabic=1569;e.hangulfiller=12644;e.hardsigncyrillic=1098;e.harpoonleftbarbup=8636;e.harpoonrightbarbup=8640;e.hasquare=13258;e.hatafpatah=1458;e.hatafpatah16=1458;e.\ +hatafpatah23=1458;e.hatafpatah2f=1458;e.hatafpatahhebrew=1458;e.hatafpatahnarrowhebrew=1458;e.hatafpatahquarterhebrew=1458;e.hatafpatahwidehebrew=1458;e.hatafqamats=1459;e.hatafqamats1b=1459;e.hatafqamats28=1459;e.hatafqamats34=1459;e.hatafqamatshebrew=1459;e.hatafqamatsnarrowhebrew=1459;e.hatafqamatsquarterhebrew=1459;e.hatafqamatswidehebrew=1459;e.hatafsegol=1457;e.hatafsegol17=1457;e.hatafsegol24=1457;e.hatafsegol30=1457;e.hatafsegolhebrew=1457;e.hatafsegolnarrowhebrew=1457;e.hatafsegolquarte\ +rhebrew=1457;e.hatafsegolwidehebrew=1457;e.hbar=295;e.hbopomofo=12559;e.hbrevebelow=7723;e.hcedilla=7721;e.hcircle=9431;e.hcircumflex=293;e.hdieresis=7719;e.hdotaccent=7715;e.hdotbelow=7717;e.he=1492;e.heart=9829;e.heartsuitblack=9829;e.heartsuitwhite=9825;e.hedagesh=64308;e.hedageshhebrew=64308;e.hehaltonearabic=1729;e.heharabic=1607;e.hehebrew=1492;e.hehfinalaltonearabic=64423;e.hehfinalalttwoarabic=65258;e.hehfinalarabic=65258;e.hehhamzaabovefinalarabic=64421;e.hehhamzaaboveisolatedarabic=644\ +20;e.hehinitialaltonearabic=64424;e.hehinitialarabic=65259;e.hehiragana=12408;e.hehmedialaltonearabic=64425;e.hehmedialarabic=65260;e.heiseierasquare=13179;e.hekatakana=12504;e.hekatakanahalfwidth=65421;e.hekutaarusquare=13110;e.henghook=615;e.herutusquare=13113;e.het=1495;e.hethebrew=1495;e.hhook=614;e.hhooksuperior=689;e.hieuhacirclekorean=12923;e.hieuhaparenkorean=12827;e.hieuhcirclekorean=12909;e.hieuhkorean=12622;e.hieuhparenkorean=12813;e.hihiragana=12402;e.hikatakana=12498;e.hikatakanahal\ +fwidth=65419;e.hiriq=1460;e.hiriq14=1460;e.hiriq21=1460;e.hiriq2d=1460;e.hiriqhebrew=1460;e.hiriqnarrowhebrew=1460;e.hiriqquarterhebrew=1460;e.hiriqwidehebrew=1460;e.hlinebelow=7830;e.hmonospace=65352;e.hoarmenian=1392;e.hohipthai=3627;e.hohiragana=12411;e.hokatakana=12507;e.hokatakanahalfwidth=65422;e.holam=1465;e.holam19=1465;e.holam26=1465;e.holam32=1465;e.holamhebrew=1465;e.holamnarrowhebrew=1465;e.holamquarterhebrew=1465;e.holamwidehebrew=1465;e.honokhukthai=3630;e.hookabovecomb=777;e.hookc\ +mb=777;e.hookpalatalizedbelowcmb=801;e.hookretroflexbelowcmb=802;e.hoonsquare=13122;e.horicoptic=1001;e.horizontalbar=8213;e.horncmb=795;e.hotsprings=9832;e.house=8962;e.hparen=9379;e.hsuperior=688;e.hturned=613;e.huhiragana=12405;e.huiitosquare=13107;e.hukatakana=12501;e.hukatakanahalfwidth=65420;e.hungarumlaut=733;e.hungarumlautcmb=779;e.hv=405;e.hyphen=45;e.hypheninferior=63205;e.hyphenmonospace=65293;e.hyphensmall=65123;e.hyphensuperior=63206;e.hyphentwo=8208;e.i=105;e.iacute=237;e.iacyrilli\ +c=1103;e.ibengali=2439;e.ibopomofo=12583;e.ibreve=301;e.icaron=464;e.icircle=9432;e.icircumflex=238;e.icyrillic=1110;e.idblgrave=521;e.ideographearthcircle=12943;e.ideographfirecircle=12939;e.ideographicallianceparen=12863;e.ideographiccallparen=12858;e.ideographiccentrecircle=12965;e.ideographicclose=12294;e.ideographiccomma=12289;e.ideographiccommaleft=65380;e.ideographiccongratulationparen=12855;e.ideographiccorrectcircle=12963;e.ideographicearthparen=12847;e.ideographicenterpriseparen=12861;\ +e.ideographicexcellentcircle=12957;e.ideographicfestivalparen=12864;e.ideographicfinancialcircle=12950;e.ideographicfinancialparen=12854;e.ideographicfireparen=12843;e.ideographichaveparen=12850;e.ideographichighcircle=12964;e.ideographiciterationmark=12293;e.ideographiclaborcircle=12952;e.ideographiclaborparen=12856;e.ideographicleftcircle=12967;e.ideographiclowcircle=12966;e.ideographicmedicinecircle=12969;e.ideographicmetalparen=12846;e.ideographicmoonparen=12842;e.ideographicnameparen=12852;\ +e.ideographicperiod=12290;e.ideographicprintcircle=12958;e.ideographicreachparen=12867;e.ideographicrepresentparen=12857;e.ideographicresourceparen=12862;e.ideographicrightcircle=12968;e.ideographicsecretcircle=12953;e.ideographicselfparen=12866;e.ideographicsocietyparen=12851;e.ideographicspace=12288;e.ideographicspecialparen=12853;e.ideographicstockparen=12849;e.ideographicstudyparen=12859;e.ideographicsunparen=12848;e.ideographicsuperviseparen=12860;e.ideographicwaterparen=12844;e.ideographic\ +woodparen=12845;e.ideographiczero=12295;e.ideographmetalcircle=12942;e.ideographmooncircle=12938;e.ideographnamecircle=12948;e.ideographsuncircle=12944;e.ideographwatercircle=12940;e.ideographwoodcircle=12941;e.ideva=2311;e.idieresis=239;e.idieresisacute=7727;e.idieresiscyrillic=1253;e.idotbelow=7883;e.iebrevecyrillic=1239;e.iecyrillic=1077;e.ieungacirclekorean=12917;e.ieungaparenkorean=12821;e.ieungcirclekorean=12903;e.ieungkorean=12615;e.ieungparenkorean=12807;e.igrave=236;e.igujarati=2695;e.i\ +gurmukhi=2567;e.ihiragana=12356;e.ihookabove=7881;e.iibengali=2440;e.iicyrillic=1080;e.iideva=2312;e.iigujarati=2696;e.iigurmukhi=2568;e.iimatragurmukhi=2624;e.iinvertedbreve=523;e.iishortcyrillic=1081;e.iivowelsignbengali=2496;e.iivowelsigndeva=2368;e.iivowelsigngujarati=2752;e.ij=307;e.ikatakana=12452;e.ikatakanahalfwidth=65394;e.ikorean=12643;e.ilde=732;e.iluyhebrew=1452;e.imacron=299;e.imacroncyrillic=1251;e.imageorapproximatelyequal=8787;e.imatragurmukhi=2623;e.imonospace=65353;e.increment=\ +8710;e.infinity=8734;e.iniarmenian=1387;e.integral=8747;e.integralbottom=8993;e.integralbt=8993;e.integralex=63733;e.integraltop=8992;e.integraltp=8992;e.intersection=8745;e.intisquare=13061;e.invbullet=9688;e.invcircle=9689;e.invsmileface=9787;e.iocyrillic=1105;e.iogonek=303;e.iota=953;e.iotadieresis=970;e.iotadieresistonos=912;e.iotalatin=617;e.iotatonos=943;e.iparen=9380;e.irigurmukhi=2674;e.ismallhiragana=12355;e.ismallkatakana=12451;e.ismallkatakanahalfwidth=65384;e.issharbengali=2554;e.ist\ +roke=616;e.isuperior=63213;e.iterationhiragana=12445;e.iterationkatakana=12541;e.itilde=297;e.itildebelow=7725;e.iubopomofo=12585;e.iucyrillic=1102;e.ivowelsignbengali=2495;e.ivowelsigndeva=2367;e.ivowelsigngujarati=2751;e.izhitsacyrillic=1141;e.izhitsadblgravecyrillic=1143;e.j=106;e.jaarmenian=1393;e.jabengali=2460;e.jadeva=2332;e.jagujarati=2716;e.jagurmukhi=2588;e.jbopomofo=12560;e.jcaron=496;e.jcircle=9433;e.jcircumflex=309;e.jcrossedtail=669;e.jdotlessstroke=607;e.jecyrillic=1112;e.jeemarab\ +ic=1580;e.jeemfinalarabic=65182;e.jeeminitialarabic=65183;e.jeemmedialarabic=65184;e.jeharabic=1688;e.jehfinalarabic=64395;e.jhabengali=2461;e.jhadeva=2333;e.jhagujarati=2717;e.jhagurmukhi=2589;e.jheharmenian=1403;e.jis=12292;e.jmonospace=65354;e.jparen=9381;e.jsuperior=690;e.k=107;e.kabashkircyrillic=1185;e.kabengali=2453;e.kacute=7729;e.kacyrillic=1082;e.kadescendercyrillic=1179;e.kadeva=2325;e.kaf=1499;e.kafarabic=1603;e.kafdagesh=64315;e.kafdageshhebrew=64315;e.kaffinalarabic=65242;e.kafhebr\ +ew=1499;e.kafinitialarabic=65243;e.kafmedialarabic=65244;e.kafrafehebrew=64333;e.kagujarati=2709;e.kagurmukhi=2581;e.kahiragana=12363;e.kahookcyrillic=1220;e.kakatakana=12459;e.kakatakanahalfwidth=65398;e.kappa=954;e.kappasymbolgreek=1008;e.kapyeounmieumkorean=12657;e.kapyeounphieuphkorean=12676;e.kapyeounpieupkorean=12664;e.kapyeounssangpieupkorean=12665;e.karoriisquare=13069;e.kashidaautoarabic=1600;e.kashidaautonosidebearingarabic=1600;e.kasmallkatakana=12533;e.kasquare=13188;e.kasraarabic=16\ +16;e.kasratanarabic=1613;e.kastrokecyrillic=1183;e.katahiraprolongmarkhalfwidth=65392;e.kaverticalstrokecyrillic=1181;e.kbopomofo=12558;e.kcalsquare=13193;e.kcaron=489;e.kcedilla=311;e.kcircle=9434;e.kcommaaccent=311;e.kdotbelow=7731;e.keharmenian=1412;e.kehiragana=12369;e.kekatakana=12465;e.kekatakanahalfwidth=65401;e.kenarmenian=1391;e.kesmallkatakana=12534;e.kgreenlandic=312;e.khabengali=2454;e.khacyrillic=1093;e.khadeva=2326;e.khagujarati=2710;e.khagurmukhi=2582;e.khaharabic=1582;e.khahfinal\ +arabic=65190;e.khahinitialarabic=65191;e.khahmedialarabic=65192;e.kheicoptic=999;e.khhadeva=2393;e.khhagurmukhi=2649;e.khieukhacirclekorean=12920;e.khieukhaparenkorean=12824;e.khieukhcirclekorean=12906;e.khieukhkorean=12619;e.khieukhparenkorean=12810;e.khokhaithai=3586;e.khokhonthai=3589;e.khokhuatthai=3587;e.khokhwaithai=3588;e.khomutthai=3675;e.khook=409;e.khorakhangthai=3590;e.khzsquare=13201;e.kihiragana=12365;e.kikatakana=12461;e.kikatakanahalfwidth=65399;e.kiroguramusquare=13077;e.kiromeet\ +orusquare=13078;e.kirosquare=13076;e.kiyeokacirclekorean=12910;e.kiyeokaparenkorean=12814;e.kiyeokcirclekorean=12896;e.kiyeokkorean=12593;e.kiyeokparenkorean=12800;e.kiyeoksioskorean=12595;e.kjecyrillic=1116;e.klinebelow=7733;e.klsquare=13208;e.kmcubedsquare=13222;e.kmonospace=65355;e.kmsquaredsquare=13218;e.kohiragana=12371;e.kohmsquare=13248;e.kokaithai=3585;e.kokatakana=12467;e.kokatakanahalfwidth=65402;e.kooposquare=13086;e.koppacyrillic=1153;e.koreanstandardsymbol=12927;e.koroniscmb=835;e.k\ +paren=9382;e.kpasquare=13226;e.ksicyrillic=1135;e.ktsquare=13263;e.kturned=670;e.kuhiragana=12367;e.kukatakana=12463;e.kukatakanahalfwidth=65400;e.kvsquare=13240;e.kwsquare=13246;e.l=108;e.labengali=2482;e.lacute=314;e.ladeva=2354;e.lagujarati=2738;e.lagurmukhi=2610;e.lakkhangyaothai=3653;e.lamaleffinalarabic=65276;e.lamalefhamzaabovefinalarabic=65272;e.lamalefhamzaaboveisolatedarabic=65271;e.lamalefhamzabelowfinalarabic=65274;e.lamalefhamzabelowisolatedarabic=65273;e.lamalefisolatedarabic=65275\ +;e.lamalefmaddaabovefinalarabic=65270;e.lamalefmaddaaboveisolatedarabic=65269;e.lamarabic=1604;e.lambda=955;e.lambdastroke=411;e.lamed=1500;e.lameddagesh=64316;e.lameddageshhebrew=64316;e.lamedhebrew=1500;e.lamfinalarabic=65246;e.lamhahinitialarabic=64714;e.laminitialarabic=65247;e.lamjeeminitialarabic=64713;e.lamkhahinitialarabic=64715;e.lamlamhehisolatedarabic=65010;e.lammedialarabic=65248;e.lammeemhahinitialarabic=64904;e.lammeeminitialarabic=64716;e.largecircle=9711;e.lbar=410;e.lbelt=620;e.\ +lbopomofo=12556;e.lcaron=318;e.lcedilla=316;e.lcircle=9435;e.lcircumflexbelow=7741;e.lcommaaccent=316;e.ldot=320;e.ldotaccent=320;e.ldotbelow=7735;e.ldotbelowmacron=7737;e.leftangleabovecmb=794;e.lefttackbelowcmb=792;e.less=60;e.lessequal=8804;e.lessequalorgreater=8922;e.lessmonospace=65308;e.lessorequivalent=8818;e.lessorgreater=8822;e.lessoverequal=8806;e.lesssmall=65124;e.lezh=622;e.lfblock=9612;e.lhookretroflex=621;e.lira=8356;e.liwnarmenian=1388;e.lj=457;e.ljecyrillic=1113;e.ll=63168;e.llad\ +eva=2355;e.llagujarati=2739;e.llinebelow=7739;e.llladeva=2356;e.llvocalicbengali=2529;e.llvocalicdeva=2401;e.llvocalicvowelsignbengali=2531;e.llvocalicvowelsigndeva=2403;e.lmiddletilde=619;e.lmonospace=65356;e.lmsquare=13264;e.lochulathai=3628;e.logicaland=8743;e.logicalnot=172;e.logicalnotreversed=8976;e.logicalor=8744;e.lolingthai=3621;e.longs=383;e.lowlinecenterline=65102;e.lowlinecmb=818;e.lowlinedashed=65101;e.lozenge=9674;e.lparen=9383;e.lslash=322;e.lsquare=8467;e.lsuperior=63214;e.ltshad\ +e=9617;e.luthai=3622;e.lvocalicbengali=2444;e.lvocalicdeva=2316;e.lvocalicvowelsignbengali=2530;e.lvocalicvowelsigndeva=2402;e.lxsquare=13267;e.m=109;e.mabengali=2478;e.macron=175;e.macronbelowcmb=817;e.macroncmb=772;e.macronlowmod=717;e.macronmonospace=65507;e.macute=7743;e.madeva=2350;e.magujarati=2734;e.magurmukhi=2606;e.mahapakhhebrew=1444;e.mahapakhlefthebrew=1444;e.mahiragana=12414;e.maichattawalowleftthai=63637;e.maichattawalowrightthai=63636;e.maichattawathai=3659;e.maichattawaupperleftt\ +hai=63635;e.maieklowleftthai=63628;e.maieklowrightthai=63627;e.maiekthai=3656;e.maiekupperleftthai=63626;e.maihanakatleftthai=63620;e.maihanakatthai=3633;e.maitaikhuleftthai=63625;e.maitaikhuthai=3655;e.maitholowleftthai=63631;e.maitholowrightthai=63630;e.maithothai=3657;e.maithoupperleftthai=63629;e.maitrilowleftthai=63634;e.maitrilowrightthai=63633;e.maitrithai=3658;e.maitriupperleftthai=63632;e.maiyamokthai=3654;e.makatakana=12510;e.makatakanahalfwidth=65423;e.male=9794;e.mansyonsquare=13127;\ +e.maqafhebrew=1470;e.mars=9794;e.masoracirclehebrew=1455;e.masquare=13187;e.mbopomofo=12551;e.mbsquare=13268;e.mcircle=9436;e.mcubedsquare=13221;e.mdotaccent=7745;e.mdotbelow=7747;e.meemarabic=1605;e.meemfinalarabic=65250;e.meeminitialarabic=65251;e.meemmedialarabic=65252;e.meemmeeminitialarabic=64721;e.meemmeemisolatedarabic=64584;e.meetorusquare=13133;e.mehiragana=12417;e.meizierasquare=13182;e.mekatakana=12513;e.mekatakanahalfwidth=65426;e.mem=1502;e.memdagesh=64318;e.memdageshhebrew=64318;e.\ +memhebrew=1502;e.menarmenian=1396;e.merkhahebrew=1445;e.merkhakefulahebrew=1446;e.merkhakefulalefthebrew=1446;e.merkhalefthebrew=1445;e.mhook=625;e.mhzsquare=13202;e.middledotkatakanahalfwidth=65381;e.middot=183;e.mieumacirclekorean=12914;e.mieumaparenkorean=12818;e.mieumcirclekorean=12900;e.mieumkorean=12609;e.mieumpansioskorean=12656;e.mieumparenkorean=12804;e.mieumpieupkorean=12654;e.mieumsioskorean=12655;e.mihiragana=12415;e.mikatakana=12511;e.mikatakanahalfwidth=65424;e.minus=8722;e.minusbe\ +lowcmb=800;e.minuscircle=8854;e.minusmod=727;e.minusplus=8723;e.minute=8242;e.miribaarusquare=13130;e.mirisquare=13129;e.mlonglegturned=624;e.mlsquare=13206;e.mmcubedsquare=13219;e.mmonospace=65357;e.mmsquaredsquare=13215;e.mohiragana=12418;e.mohmsquare=13249;e.mokatakana=12514;e.mokatakanahalfwidth=65427;e.molsquare=13270;e.momathai=3617;e.moverssquare=13223;e.moverssquaredsquare=13224;e.mparen=9384;e.mpasquare=13227;e.mssquare=13235;e.msuperior=63215;e.mturned=623;e.mu=181;e.mu1=181;e.muasquar\ +e=13186;e.muchgreater=8811;e.muchless=8810;e.mufsquare=13196;e.mugreek=956;e.mugsquare=13197;e.muhiragana=12416;e.mukatakana=12512;e.mukatakanahalfwidth=65425;e.mulsquare=13205;e.multiply=215;e.mumsquare=13211;e.munahhebrew=1443;e.munahlefthebrew=1443;e.musicalnote=9834;e.musicalnotedbl=9835;e.musicflatsign=9837;e.musicsharpsign=9839;e.mussquare=13234;e.muvsquare=13238;e.muwsquare=13244;e.mvmegasquare=13241;e.mvsquare=13239;e.mwmegasquare=13247;e.mwsquare=13245;e.n=110;e.nabengali=2472;e.nabla=8\ +711;e.nacute=324;e.nadeva=2344;e.nagujarati=2728;e.nagurmukhi=2600;e.nahiragana=12394;e.nakatakana=12490;e.nakatakanahalfwidth=65413;e.napostrophe=329;e.nasquare=13185;e.nbopomofo=12555;e.nbspace=160;e.ncaron=328;e.ncedilla=326;e.ncircle=9437;e.ncircumflexbelow=7755;e.ncommaaccent=326;e.ndotaccent=7749;e.ndotbelow=7751;e.nehiragana=12397;e.nekatakana=12493;e.nekatakanahalfwidth=65416;e.newsheqelsign=8362;e.nfsquare=13195;e.ngabengali=2457;e.ngadeva=2329;e.ngagujarati=2713;e.ngagurmukhi=2585;e.ng\ +onguthai=3591;e.nhiragana=12435;e.nhookleft=626;e.nhookretroflex=627;e.nieunacirclekorean=12911;e.nieunaparenkorean=12815;e.nieuncieuckorean=12597;e.nieuncirclekorean=12897;e.nieunhieuhkorean=12598;e.nieunkorean=12596;e.nieunpansioskorean=12648;e.nieunparenkorean=12801;e.nieunsioskorean=12647;e.nieuntikeutkorean=12646;e.nihiragana=12395;e.nikatakana=12491;e.nikatakanahalfwidth=65414;e.nikhahitleftthai=63641;e.nikhahitthai=3661;e.nine=57;e.ninearabic=1641;e.ninebengali=2543;e.ninecircle=9320;e.ni\ +necircleinversesansserif=10130;e.ninedeva=2415;e.ninegujarati=2799;e.ninegurmukhi=2671;e.ninehackarabic=1641;e.ninehangzhou=12329;e.nineideographicparen=12840;e.nineinferior=8329;e.ninemonospace=65305;e.nineoldstyle=63289;e.nineparen=9340;e.nineperiod=9360;e.ninepersian=1785;e.nineroman=8568;e.ninesuperior=8313;e.nineteencircle=9330;e.nineteenparen=9350;e.nineteenperiod=9370;e.ninethai=3673;e.nj=460;e.njecyrillic=1114;e.nkatakana=12531;e.nkatakanahalfwidth=65437;e.nlegrightlong=414;e.nlinebelow=\ +7753;e.nmonospace=65358;e.nmsquare=13210;e.nnabengali=2467;e.nnadeva=2339;e.nnagujarati=2723;e.nnagurmukhi=2595;e.nnnadeva=2345;e.nohiragana=12398;e.nokatakana=12494;e.nokatakanahalfwidth=65417;e.nonbreakingspace=160;e.nonenthai=3603;e.nonuthai=3609;e.noonarabic=1606;e.noonfinalarabic=65254;e.noonghunnaarabic=1722;e.noonghunnafinalarabic=64415;e.nooninitialarabic=65255;e.noonjeeminitialarabic=64722;e.noonjeemisolatedarabic=64587;e.noonmedialarabic=65256;e.noonmeeminitialarabic=64725;e.noonmeemis\ +olatedarabic=64590;e.noonnoonfinalarabic=64653;e.notcontains=8716;e.notelement=8713;e.notelementof=8713;e.notequal=8800;e.notgreater=8815;e.notgreaternorequal=8817;e.notgreaternorless=8825;e.notidentical=8802;e.notless=8814;e.notlessnorequal=8816;e.notparallel=8742;e.notprecedes=8832;e.notsubset=8836;e.notsucceeds=8833;e.notsuperset=8837;e.nowarmenian=1398;e.nparen=9385;e.nssquare=13233;e.nsuperior=8319;e.ntilde=241;e.nu=957;e.nuhiragana=12396;e.nukatakana=12492;e.nukatakanahalfwidth=65415;e.nuk\ +tabengali=2492;e.nuktadeva=2364;e.nuktagujarati=2748;e.nuktagurmukhi=2620;e.numbersign=35;e.numbersignmonospace=65283;e.numbersignsmall=65119;e.numeralsigngreek=884;e.numeralsignlowergreek=885;e.numero=8470;e.nun=1504;e.nundagesh=64320;e.nundageshhebrew=64320;e.nunhebrew=1504;e.nvsquare=13237;e.nwsquare=13243;e.nyabengali=2462;e.nyadeva=2334;e.nyagujarati=2718;e.nyagurmukhi=2590;e.o=111;e.oacute=243;e.oangthai=3629;e.obarred=629;e.obarredcyrillic=1257;e.obarreddieresiscyrillic=1259;e.obengali=24\ +51;e.obopomofo=12571;e.obreve=335;e.ocandradeva=2321;e.ocandragujarati=2705;e.ocandravowelsigndeva=2377;e.ocandravowelsigngujarati=2761;e.ocaron=466;e.ocircle=9438;e.ocircumflex=244;e.ocircumflexacute=7889;e.ocircumflexdotbelow=7897;e.ocircumflexgrave=7891;e.ocircumflexhookabove=7893;e.ocircumflextilde=7895;e.ocyrillic=1086;e.odblacute=337;e.odblgrave=525;e.odeva=2323;e.odieresis=246;e.odieresiscyrillic=1255;e.odotbelow=7885;e.oe=339;e.oekorean=12634;e.ogonek=731;e.ogonekcmb=808;e.ograve=242;e.o\ +gujarati=2707;e.oharmenian=1413;e.ohiragana=12362;e.ohookabove=7887;e.ohorn=417;e.ohornacute=7899;e.ohorndotbelow=7907;e.ohorngrave=7901;e.ohornhookabove=7903;e.ohorntilde=7905;e.ohungarumlaut=337;e.oi=419;e.oinvertedbreve=527;e.okatakana=12458;e.okatakanahalfwidth=65397;e.okorean=12631;e.olehebrew=1451;e.omacron=333;e.omacronacute=7763;e.omacrongrave=7761;e.omdeva=2384;e.omega=969;e.omega1=982;e.omegacyrillic=1121;e.omegalatinclosed=631;e.omegaroundcyrillic=1147;e.omegatitlocyrillic=1149;e.omeg\ +atonos=974;e.omgujarati=2768;e.omicron=959;e.omicrontonos=972;e.omonospace=65359;e.one=49;e.onearabic=1633;e.onebengali=2535;e.onecircle=9312;e.onecircleinversesansserif=10122;e.onedeva=2407;e.onedotenleader=8228;e.oneeighth=8539;e.onefitted=63196;e.onegujarati=2791;e.onegurmukhi=2663;e.onehackarabic=1633;e.onehalf=189;e.onehangzhou=12321;e.oneideographicparen=12832;e.oneinferior=8321;e.onemonospace=65297;e.onenumeratorbengali=2548;e.oneoldstyle=63281;e.oneparen=9332;e.oneperiod=9352;e.onepersia\ +n=1777;e.onequarter=188;e.oneroman=8560;e.onesuperior=185;e.onethai=3665;e.onethird=8531;e.oogonek=491;e.oogonekmacron=493;e.oogurmukhi=2579;e.oomatragurmukhi=2635;e.oopen=596;e.oparen=9386;e.openbullet=9702;e.option=8997;e.ordfeminine=170;e.ordmasculine=186;e.orthogonal=8735;e.oshortdeva=2322;e.oshortvowelsigndeva=2378;e.oslash=248;e.oslashacute=511;e.osmallhiragana=12361;e.osmallkatakana=12457;e.osmallkatakanahalfwidth=65387;e.ostrokeacute=511;e.osuperior=63216;e.otcyrillic=1151;e.otilde=245;e\ +.otildeacute=7757;e.otildedieresis=7759;e.oubopomofo=12577;e.overline=8254;e.overlinecenterline=65098;e.overlinecmb=773;e.overlinedashed=65097;e.overlinedblwavy=65100;e.overlinewavy=65099;e.overscore=175;e.ovowelsignbengali=2507;e.ovowelsigndeva=2379;e.ovowelsigngujarati=2763;e.p=112;e.paampssquare=13184;e.paasentosquare=13099;e.pabengali=2474;e.pacute=7765;e.padeva=2346;e.pagedown=8671;e.pageup=8670;e.pagujarati=2730;e.pagurmukhi=2602;e.pahiragana=12401;e.paiyannoithai=3631;e.pakatakana=12497;e\ +.palatalizationcyrilliccmb=1156;e.palochkacyrillic=1216;e.pansioskorean=12671;e.paragraph=182;e.parallel=8741;e.parenleft=40;e.parenleftaltonearabic=64830;e.parenleftbt=63725;e.parenleftex=63724;e.parenleftinferior=8333;e.parenleftmonospace=65288;e.parenleftsmall=65113;e.parenleftsuperior=8317;e.parenlefttp=63723;e.parenleftvertical=65077;e.parenright=41;e.parenrightaltonearabic=64831;e.parenrightbt=63736;e.parenrightex=63735;e.parenrightinferior=8334;e.parenrightmonospace=65289;e.parenrightsmal\ +l=65114;e.parenrightsuperior=8318;e.parenrighttp=63734;e.parenrightvertical=65078;e.partialdiff=8706;e.paseqhebrew=1472;e.pashtahebrew=1433;e.pasquare=13225;e.patah=1463;e.patah11=1463;e.patah1d=1463;e.patah2a=1463;e.patahhebrew=1463;e.patahnarrowhebrew=1463;e.patahquarterhebrew=1463;e.patahwidehebrew=1463;e.pazerhebrew=1441;e.pbopomofo=12550;e.pcircle=9439;e.pdotaccent=7767;e.pe=1508;e.pecyrillic=1087;e.pedagesh=64324;e.pedageshhebrew=64324;e.peezisquare=13115;e.pefinaldageshhebrew=64323;e.peha\ +rabic=1662;e.peharmenian=1402;e.pehebrew=1508;e.pehfinalarabic=64343;e.pehinitialarabic=64344;e.pehiragana=12410;e.pehmedialarabic=64345;e.pekatakana=12506;e.pemiddlehookcyrillic=1191;e.perafehebrew=64334;e.percent=37;e.percentarabic=1642;e.percentmonospace=65285;e.percentsmall=65130;e.period=46;e.periodarmenian=1417;e.periodcentered=183;e.periodhalfwidth=65377;e.periodinferior=63207;e.periodmonospace=65294;e.periodsmall=65106;e.periodsuperior=63208;e.perispomenigreekcmb=834;e.perpendicular=8869\ +;e.perthousand=8240;e.peseta=8359;e.pfsquare=13194;e.phabengali=2475;e.phadeva=2347;e.phagujarati=2731;e.phagurmukhi=2603;e.phi=966;e.phi1=981;e.phieuphacirclekorean=12922;e.phieuphaparenkorean=12826;e.phieuphcirclekorean=12908;e.phieuphkorean=12621;e.phieuphparenkorean=12812;e.philatin=632;e.phinthuthai=3642;e.phisymbolgreek=981;e.phook=421;e.phophanthai=3614;e.phophungthai=3612;e.phosamphaothai=3616;e.pi=960;e.pieupacirclekorean=12915;e.pieupaparenkorean=12819;e.pieupcieuckorean=12662;e.pieupc\ +irclekorean=12901;e.pieupkiyeokkorean=12658;e.pieupkorean=12610;e.pieupparenkorean=12805;e.pieupsioskiyeokkorean=12660;e.pieupsioskorean=12612;e.pieupsiostikeutkorean=12661;e.pieupthieuthkorean=12663;e.pieuptikeutkorean=12659;e.pihiragana=12404;e.pikatakana=12500;e.pisymbolgreek=982;e.piwrarmenian=1411;e.planckover2pi=8463;e.planckover2pi1=8463;e.plus=43;e.plusbelowcmb=799;e.pluscircle=8853;e.plusminus=177;e.plusmod=726;e.plusmonospace=65291;e.plussmall=65122;e.plussuperior=8314;e.pmonospace=653\ +60;e.pmsquare=13272;e.pohiragana=12413;e.pointingindexdownwhite=9759;e.pointingindexleftwhite=9756;e.pointingindexrightwhite=9758;e.pointingindexupwhite=9757;e.pokatakana=12509;e.poplathai=3611;e.postalmark=12306;e.postalmarkface=12320;e.pparen=9387;e.precedes=8826;e.prescription=8478;e.primemod=697;e.primereversed=8245;e.product=8719;e.projective=8965;e.prolongedkana=12540;e.propellor=8984;e.propersubset=8834;e.propersuperset=8835;e.proportion=8759;e.proportional=8733;e.psi=968;e.psicyrillic=11\ +37;e.psilipneumatacyrilliccmb=1158;e.pssquare=13232;e.puhiragana=12407;e.pukatakana=12503;e.pvsquare=13236;e.pwsquare=13242;e.q=113;e.qadeva=2392;e.qadmahebrew=1448;e.qafarabic=1602;e.qaffinalarabic=65238;e.qafinitialarabic=65239;e.qafmedialarabic=65240;e.qamats=1464;e.qamats10=1464;e.qamats1a=1464;e.qamats1c=1464;e.qamats27=1464;e.qamats29=1464;e.qamats33=1464;e.qamatsde=1464;e.qamatshebrew=1464;e.qamatsnarrowhebrew=1464;e.qamatsqatanhebrew=1464;e.qamatsqatannarrowhebrew=1464;e.qamatsqatanquart\ +erhebrew=1464;e.qamatsqatanwidehebrew=1464;e.qamatsquarterhebrew=1464;e.qamatswidehebrew=1464;e.qarneyparahebrew=1439;e.qbopomofo=12561;e.qcircle=9440;e.qhook=672;e.qmonospace=65361;e.qof=1511;e.qofdagesh=64327;e.qofdageshhebrew=64327;e.qofhebrew=1511;e.qparen=9388;e.quarternote=9833;e.qubuts=1467;e.qubuts18=1467;e.qubuts25=1467;e.qubuts31=1467;e.qubutshebrew=1467;e.qubutsnarrowhebrew=1467;e.qubutsquarterhebrew=1467;e.qubutswidehebrew=1467;e.question=63;e.questionarabic=1567;e.questionarmenian=1\ +374;e.questiondown=191;e.questiondownsmall=63423;e.questiongreek=894;e.questionmonospace=65311;e.questionsmall=63295;e.quotedbl=34;e.quotedblbase=8222;e.quotedblleft=8220;e.quotedblmonospace=65282;e.quotedblprime=12318;e.quotedblprimereversed=12317;e.quotedblright=8221;e.quoteleft=8216;e.quoteleftreversed=8219;e.quotereversed=8219;e.quoteright=8217;e.quoterightn=329;e.quotesinglbase=8218;e.quotesingle=39;e.quotesinglemonospace=65287;e.r=114;e.raarmenian=1404;e.rabengali=2480;e.racute=341;e.radev\ +a=2352;e.radical=8730;e.radicalex=63717;e.radoverssquare=13230;e.radoverssquaredsquare=13231;e.radsquare=13229;e.rafe=1471;e.rafehebrew=1471;e.ragujarati=2736;e.ragurmukhi=2608;e.rahiragana=12425;e.rakatakana=12521;e.rakatakanahalfwidth=65431;e.ralowerdiagonalbengali=2545;e.ramiddlediagonalbengali=2544;e.ramshorn=612;e.ratio=8758;e.rbopomofo=12566;e.rcaron=345;e.rcedilla=343;e.rcircle=9441;e.rcommaaccent=343;e.rdblgrave=529;e.rdotaccent=7769;e.rdotbelow=7771;e.rdotbelowmacron=7773;e.referencemar\ +k=8251;e.reflexsubset=8838;e.reflexsuperset=8839;e.registered=174;e.registersans=63720;e.registerserif=63194;e.reharabic=1585;e.reharmenian=1408;e.rehfinalarabic=65198;e.rehiragana=12428;e.rekatakana=12524;e.rekatakanahalfwidth=65434;e.resh=1512;e.reshdageshhebrew=64328;e.reshhebrew=1512;e.reversedtilde=8765;e.reviahebrew=1431;e.reviamugrashhebrew=1431;e.revlogicalnot=8976;e.rfishhook=638;e.rfishhookreversed=639;e.rhabengali=2525;e.rhadeva=2397;e.rho=961;e.rhook=637;e.rhookturned=635;e.rhookturn\ +edsuperior=693;e.rhosymbolgreek=1009;e.rhotichookmod=734;e.rieulacirclekorean=12913;e.rieulaparenkorean=12817;e.rieulcirclekorean=12899;e.rieulhieuhkorean=12608;e.rieulkiyeokkorean=12602;e.rieulkiyeoksioskorean=12649;e.rieulkorean=12601;e.rieulmieumkorean=12603;e.rieulpansioskorean=12652;e.rieulparenkorean=12803;e.rieulphieuphkorean=12607;e.rieulpieupkorean=12604;e.rieulpieupsioskorean=12651;e.rieulsioskorean=12605;e.rieulthieuthkorean=12606;e.rieultikeutkorean=12650;e.rieulyeorinhieuhkorean=126\ +53;e.rightangle=8735;e.righttackbelowcmb=793;e.righttriangle=8895;e.rihiragana=12426;e.rikatakana=12522;e.rikatakanahalfwidth=65432;e.ring=730;e.ringbelowcmb=805;e.ringcmb=778;e.ringhalfleft=703;e.ringhalfleftarmenian=1369;e.ringhalfleftbelowcmb=796;e.ringhalfleftcentered=723;e.ringhalfright=702;e.ringhalfrightbelowcmb=825;e.ringhalfrightcentered=722;e.rinvertedbreve=531;e.rittorusquare=13137;e.rlinebelow=7775;e.rlongleg=636;e.rlonglegturned=634;e.rmonospace=65362;e.rohiragana=12429;e.rokatakana\ +=12525;e.rokatakanahalfwidth=65435;e.roruathai=3619;e.rparen=9389;e.rrabengali=2524;e.rradeva=2353;e.rragurmukhi=2652;e.rreharabic=1681;e.rrehfinalarabic=64397;e.rrvocalicbengali=2528;e.rrvocalicdeva=2400;e.rrvocalicgujarati=2784;e.rrvocalicvowelsignbengali=2500;e.rrvocalicvowelsigndeva=2372;e.rrvocalicvowelsigngujarati=2756;e.rsuperior=63217;e.rtblock=9616;e.rturned=633;e.rturnedsuperior=692;e.ruhiragana=12427;e.rukatakana=12523;e.rukatakanahalfwidth=65433;e.rupeemarkbengali=2546;e.rupeesignben\ +gali=2547;e.rupiah=63197;e.ruthai=3620;e.rvocalicbengali=2443;e.rvocalicdeva=2315;e.rvocalicgujarati=2699;e.rvocalicvowelsignbengali=2499;e.rvocalicvowelsigndeva=2371;e.rvocalicvowelsigngujarati=2755;e.s=115;e.sabengali=2488;e.sacute=347;e.sacutedotaccent=7781;e.sadarabic=1589;e.sadeva=2360;e.sadfinalarabic=65210;e.sadinitialarabic=65211;e.sadmedialarabic=65212;e.sagujarati=2744;e.sagurmukhi=2616;e.sahiragana=12373;e.sakatakana=12469;e.sakatakanahalfwidth=65403;e.sallallahoualayhewasallamarabic=\ +65018;e.samekh=1505;e.samekhdagesh=64321;e.samekhdageshhebrew=64321;e.samekhhebrew=1505;e.saraaathai=3634;e.saraaethai=3649;e.saraaimaimalaithai=3652;e.saraaimaimuanthai=3651;e.saraamthai=3635;e.saraathai=3632;e.saraethai=3648;e.saraiileftthai=63622;e.saraiithai=3637;e.saraileftthai=63621;e.saraithai=3636;e.saraothai=3650;e.saraueeleftthai=63624;e.saraueethai=3639;e.saraueleftthai=63623;e.sarauethai=3638;e.sarauthai=3640;e.sarauuthai=3641;e.sbopomofo=12569;e.scaron=353;e.scarondotaccent=7783;e.s\ +cedilla=351;e.schwa=601;e.schwacyrillic=1241;e.schwadieresiscyrillic=1243;e.schwahook=602;e.scircle=9442;e.scircumflex=349;e.scommaaccent=537;e.sdotaccent=7777;e.sdotbelow=7779;e.sdotbelowdotaccent=7785;e.seagullbelowcmb=828;e.second=8243;e.secondtonechinese=714;e.section=167;e.seenarabic=1587;e.seenfinalarabic=65202;e.seeninitialarabic=65203;e.seenmedialarabic=65204;e.segol=1462;e.segol13=1462;e.segol1f=1462;e.segol2c=1462;e.segolhebrew=1462;e.segolnarrowhebrew=1462;e.segolquarterhebrew=1462;e.\ +segoltahebrew=1426;e.segolwidehebrew=1462;e.seharmenian=1405;e.sehiragana=12379;e.sekatakana=12475;e.sekatakanahalfwidth=65406;e.semicolon=59;e.semicolonarabic=1563;e.semicolonmonospace=65307;e.semicolonsmall=65108;e.semivoicedmarkkana=12444;e.semivoicedmarkkanahalfwidth=65439;e.sentisquare=13090;e.sentosquare=13091;e.seven=55;e.sevenarabic=1639;e.sevenbengali=2541;e.sevencircle=9318;e.sevencircleinversesansserif=10128;e.sevendeva=2413;e.seveneighths=8542;e.sevengujarati=2797;e.sevengurmukhi=266\ +9;e.sevenhackarabic=1639;e.sevenhangzhou=12327;e.sevenideographicparen=12838;e.seveninferior=8327;e.sevenmonospace=65303;e.sevenoldstyle=63287;e.sevenparen=9338;e.sevenperiod=9358;e.sevenpersian=1783;e.sevenroman=8566;e.sevensuperior=8311;e.seventeencircle=9328;e.seventeenparen=9348;e.seventeenperiod=9368;e.seventhai=3671;e.sfthyphen=173;e.shaarmenian=1399;e.shabengali=2486;e.shacyrillic=1096;e.shaddaarabic=1617;e.shaddadammaarabic=64609;e.shaddadammatanarabic=64606;e.shaddafathaarabic=64608;e.s\ +haddakasraarabic=64610;e.shaddakasratanarabic=64607;e.shade=9618;e.shadedark=9619;e.shadelight=9617;e.shademedium=9618;e.shadeva=2358;e.shagujarati=2742;e.shagurmukhi=2614;e.shalshelethebrew=1427;e.shbopomofo=12565;e.shchacyrillic=1097;e.sheenarabic=1588;e.sheenfinalarabic=65206;e.sheeninitialarabic=65207;e.sheenmedialarabic=65208;e.sheicoptic=995;e.sheqel=8362;e.sheqelhebrew=8362;e.sheva=1456;e.sheva115=1456;e.sheva15=1456;e.sheva22=1456;e.sheva2e=1456;e.shevahebrew=1456;e.shevanarrowhebrew=145\ +6;e.shevaquarterhebrew=1456;e.shevawidehebrew=1456;e.shhacyrillic=1211;e.shimacoptic=1005;e.shin=1513;e.shindagesh=64329;e.shindageshhebrew=64329;e.shindageshshindot=64300;e.shindageshshindothebrew=64300;e.shindageshsindot=64301;e.shindageshsindothebrew=64301;e.shindothebrew=1473;e.shinhebrew=1513;e.shinshindot=64298;e.shinshindothebrew=64298;e.shinsindot=64299;e.shinsindothebrew=64299;e.shook=642;e.sigma=963;e.sigma1=962;e.sigmafinal=962;e.sigmalunatesymbolgreek=1010;e.sihiragana=12375;e.sikata\ +kana=12471;e.sikatakanahalfwidth=65404;e.siluqhebrew=1469;e.siluqlefthebrew=1469;e.similar=8764;e.sindothebrew=1474;e.siosacirclekorean=12916;e.siosaparenkorean=12820;e.sioscieuckorean=12670;e.sioscirclekorean=12902;e.sioskiyeokkorean=12666;e.sioskorean=12613;e.siosnieunkorean=12667;e.siosparenkorean=12806;e.siospieupkorean=12669;e.siostikeutkorean=12668;e.six=54;e.sixarabic=1638;e.sixbengali=2540;e.sixcircle=9317;e.sixcircleinversesansserif=10127;e.sixdeva=2412;e.sixgujarati=2796;e.sixgurmukhi=\ +2668;e.sixhackarabic=1638;e.sixhangzhou=12326;e.sixideographicparen=12837;e.sixinferior=8326;e.sixmonospace=65302;e.sixoldstyle=63286;e.sixparen=9337;e.sixperiod=9357;e.sixpersian=1782;e.sixroman=8565;e.sixsuperior=8310;e.sixteencircle=9327;e.sixteencurrencydenominatorbengali=2553;e.sixteenparen=9347;e.sixteenperiod=9367;e.sixthai=3670;e.slash=47;e.slashmonospace=65295;e.slong=383;e.slongdotaccent=7835;e.smileface=9786;e.smonospace=65363;e.sofpasuqhebrew=1475;e.softhyphen=173;e.softsigncyrillic=\ +1100;e.sohiragana=12381;e.sokatakana=12477;e.sokatakanahalfwidth=65407;e.soliduslongoverlaycmb=824;e.solidusshortoverlaycmb=823;e.sorusithai=3625;e.sosalathai=3624;e.sosothai=3595;e.sosuathai=3626;e.space=32;e.spacehackarabic=32;e.spade=9824;e.spadesuitblack=9824;e.spadesuitwhite=9828;e.sparen=9390;e.squarebelowcmb=827;e.squarecc=13252;e.squarecm=13213;e.squarediagonalcrosshatchfill=9641;e.squarehorizontalfill=9636;e.squarekg=13199;e.squarekm=13214;e.squarekmcapital=13262;e.squareln=13265;e.squa\ +relog=13266;e.squaremg=13198;e.squaremil=13269;e.squaremm=13212;e.squaremsquared=13217;e.squareorthogonalcrosshatchfill=9638;e.squareupperlefttolowerrightfill=9639;e.squareupperrighttolowerleftfill=9640;e.squareverticalfill=9637;e.squarewhitewithsmallblack=9635;e.srsquare=13275;e.ssabengali=2487;e.ssadeva=2359;e.ssagujarati=2743;e.ssangcieuckorean=12617;e.ssanghieuhkorean=12677;e.ssangieungkorean=12672;e.ssangkiyeokkorean=12594;e.ssangnieunkorean=12645;e.ssangpieupkorean=12611;e.ssangsioskorean=\ +12614;e.ssangtikeutkorean=12600;e.ssuperior=63218;e.sterling=163;e.sterlingmonospace=65505;e.strokelongoverlaycmb=822;e.strokeshortoverlaycmb=821;e.subset=8834;e.subsetnotequal=8842;e.subsetorequal=8838;e.succeeds=8827;e.suchthat=8715;e.suhiragana=12377;e.sukatakana=12473;e.sukatakanahalfwidth=65405;e.sukunarabic=1618;e.summation=8721;e.sun=9788;e.superset=8835;e.supersetnotequal=8843;e.supersetorequal=8839;e.svsquare=13276;e.syouwaerasquare=13180;e.t=116;e.tabengali=2468;e.tackdown=8868;e.tackl\ +eft=8867;e.tadeva=2340;e.tagujarati=2724;e.tagurmukhi=2596;e.taharabic=1591;e.tahfinalarabic=65218;e.tahinitialarabic=65219;e.tahiragana=12383;e.tahmedialarabic=65220;e.taisyouerasquare=13181;e.takatakana=12479;e.takatakanahalfwidth=65408;e.tatweelarabic=1600;e.tau=964;e.tav=1514;e.tavdages=64330;e.tavdagesh=64330;e.tavdageshhebrew=64330;e.tavhebrew=1514;e.tbar=359;e.tbopomofo=12554;e.tcaron=357;e.tccurl=680;e.tcedilla=355;e.tcheharabic=1670;e.tchehfinalarabic=64379;e.tchehinitialarabic=64380;e.\ +tchehmedialarabic=64381;e.tcircle=9443;e.tcircumflexbelow=7793;e.tcommaaccent=355;e.tdieresis=7831;e.tdotaccent=7787;e.tdotbelow=7789;e.tecyrillic=1090;e.tedescendercyrillic=1197;e.teharabic=1578;e.tehfinalarabic=65174;e.tehhahinitialarabic=64674;e.tehhahisolatedarabic=64524;e.tehinitialarabic=65175;e.tehiragana=12390;e.tehjeeminitialarabic=64673;e.tehjeemisolatedarabic=64523;e.tehmarbutaarabic=1577;e.tehmarbutafinalarabic=65172;e.tehmedialarabic=65176;e.tehmeeminitialarabic=64676;e.tehmeemisola\ +tedarabic=64526;e.tehnoonfinalarabic=64627;e.tekatakana=12486;e.tekatakanahalfwidth=65411;e.telephone=8481;e.telephoneblack=9742;e.telishagedolahebrew=1440;e.telishaqetanahebrew=1449;e.tencircle=9321;e.tenideographicparen=12841;e.tenparen=9341;e.tenperiod=9361;e.tenroman=8569;e.tesh=679;e.tet=1496;e.tetdagesh=64312;e.tetdageshhebrew=64312;e.tethebrew=1496;e.tetsecyrillic=1205;e.tevirhebrew=1435;e.tevirlefthebrew=1435;e.thabengali=2469;e.thadeva=2341;e.thagujarati=2725;e.thagurmukhi=2597;e.thalar\ +abic=1584;e.thalfinalarabic=65196;e.thanthakhatlowleftthai=63640;e.thanthakhatlowrightthai=63639;e.thanthakhatthai=3660;e.thanthakhatupperleftthai=63638;e.theharabic=1579;e.thehfinalarabic=65178;e.thehinitialarabic=65179;e.thehmedialarabic=65180;e.thereexists=8707;e.therefore=8756;e.theta=952;e.theta1=977;e.thetasymbolgreek=977;e.thieuthacirclekorean=12921;e.thieuthaparenkorean=12825;e.thieuthcirclekorean=12907;e.thieuthkorean=12620;e.thieuthparenkorean=12811;e.thirteencircle=9324;e.thirteenpare\ +n=9344;e.thirteenperiod=9364;e.thonangmonthothai=3601;e.thook=429;e.thophuthaothai=3602;e.thorn=254;e.thothahanthai=3607;e.thothanthai=3600;e.thothongthai=3608;e.thothungthai=3606;e.thousandcyrillic=1154;e.thousandsseparatorarabic=1644;e.thousandsseparatorpersian=1644;e.three=51;e.threearabic=1635;e.threebengali=2537;e.threecircle=9314;e.threecircleinversesansserif=10124;e.threedeva=2409;e.threeeighths=8540;e.threegujarati=2793;e.threegurmukhi=2665;e.threehackarabic=1635;e.threehangzhou=12323;e.\ +threeideographicparen=12834;e.threeinferior=8323;e.threemonospace=65299;e.threenumeratorbengali=2550;e.threeoldstyle=63283;e.threeparen=9334;e.threeperiod=9354;e.threepersian=1779;e.threequarters=190;e.threequartersemdash=63198;e.threeroman=8562;e.threesuperior=179;e.threethai=3667;e.thzsquare=13204;e.tihiragana=12385;e.tikatakana=12481;e.tikatakanahalfwidth=65409;e.tikeutacirclekorean=12912;e.tikeutaparenkorean=12816;e.tikeutcirclekorean=12898;e.tikeutkorean=12599;e.tikeutparenkorean=12802;e.ti\ +lde=732;e.tildebelowcmb=816;e.tildecmb=771;e.tildecomb=771;e.tildedoublecmb=864;e.tildeoperator=8764;e.tildeoverlaycmb=820;e.tildeverticalcmb=830;e.timescircle=8855;e.tipehahebrew=1430;e.tipehalefthebrew=1430;e.tippigurmukhi=2672;e.titlocyrilliccmb=1155;e.tiwnarmenian=1407;e.tlinebelow=7791;e.tmonospace=65364;e.toarmenian=1385;e.tohiragana=12392;e.tokatakana=12488;e.tokatakanahalfwidth=65412;e.tonebarextrahighmod=741;e.tonebarextralowmod=745;e.tonebarhighmod=742;e.tonebarlowmod=744;e.tonebarmidm\ +od=743;e.tonefive=445;e.tonesix=389;e.tonetwo=424;e.tonos=900;e.tonsquare=13095;e.topatakthai=3599;e.tortoiseshellbracketleft=12308;e.tortoiseshellbracketleftsmall=65117;e.tortoiseshellbracketleftvertical=65081;e.tortoiseshellbracketright=12309;e.tortoiseshellbracketrightsmall=65118;e.tortoiseshellbracketrightvertical=65082;e.totaothai=3605;e.tpalatalhook=427;e.tparen=9391;e.trademark=8482;e.trademarksans=63722;e.trademarkserif=63195;e.tretroflexhook=648;e.triagdn=9660;e.triaglf=9668;e.triagrt=9\ +658;e.triagup=9650;e.ts=678;e.tsadi=1510;e.tsadidagesh=64326;e.tsadidageshhebrew=64326;e.tsadihebrew=1510;e.tsecyrillic=1094;e.tsere=1461;e.tsere12=1461;e.tsere1e=1461;e.tsere2b=1461;e.tserehebrew=1461;e.tserenarrowhebrew=1461;e.tserequarterhebrew=1461;e.tserewidehebrew=1461;e.tshecyrillic=1115;e.tsuperior=63219;e.ttabengali=2463;e.ttadeva=2335;e.ttagujarati=2719;e.ttagurmukhi=2591;e.tteharabic=1657;e.ttehfinalarabic=64359;e.ttehinitialarabic=64360;e.ttehmedialarabic=64361;e.tthabengali=2464;e.t\ +thadeva=2336;e.tthagujarati=2720;e.tthagurmukhi=2592;e.tturned=647;e.tuhiragana=12388;e.tukatakana=12484;e.tukatakanahalfwidth=65410;e.tusmallhiragana=12387;e.tusmallkatakana=12483;e.tusmallkatakanahalfwidth=65391;e.twelvecircle=9323;e.twelveparen=9343;e.twelveperiod=9363;e.twelveroman=8571;e.twentycircle=9331;e.twentyhangzhou=21316;e.twentyparen=9351;e.twentyperiod=9371;e.two=50;e.twoarabic=1634;e.twobengali=2536;e.twocircle=9313;e.twocircleinversesansserif=10123;e.twodeva=2408;e.twodotenleader\ +=8229;e.twodotleader=8229;e.twodotleadervertical=65072;e.twogujarati=2792;e.twogurmukhi=2664;e.twohackarabic=1634;e.twohangzhou=12322;e.twoideographicparen=12833;e.twoinferior=8322;e.twomonospace=65298;e.twonumeratorbengali=2549;e.twooldstyle=63282;e.twoparen=9333;e.twoperiod=9353;e.twopersian=1778;e.tworoman=8561;e.twostroke=443;e.twosuperior=178;e.twothai=3666;e.twothirds=8532;e.u=117;e.uacute=250;e.ubar=649;e.ubengali=2441;e.ubopomofo=12584;e.ubreve=365;e.ucaron=468;e.ucircle=9444;e.ucircumfl\ +ex=251;e.ucircumflexbelow=7799;e.ucyrillic=1091;e.udattadeva=2385;e.udblacute=369;e.udblgrave=533;e.udeva=2313;e.udieresis=252;e.udieresisacute=472;e.udieresisbelow=7795;e.udieresiscaron=474;e.udieresiscyrillic=1265;e.udieresisgrave=476;e.udieresismacron=470;e.udotbelow=7909;e.ugrave=249;e.ugujarati=2697;e.ugurmukhi=2569;e.uhiragana=12358;e.uhookabove=7911;e.uhorn=432;e.uhornacute=7913;e.uhorndotbelow=7921;e.uhorngrave=7915;e.uhornhookabove=7917;e.uhorntilde=7919;e.uhungarumlaut=369;e.uhungaruml\ +autcyrillic=1267;e.uinvertedbreve=535;e.ukatakana=12454;e.ukatakanahalfwidth=65395;e.ukcyrillic=1145;e.ukorean=12636;e.umacron=363;e.umacroncyrillic=1263;e.umacrondieresis=7803;e.umatragurmukhi=2625;e.umonospace=65365;e.underscore=95;e.underscoredbl=8215;e.underscoremonospace=65343;e.underscorevertical=65075;e.underscorewavy=65103;e.union=8746;e.universal=8704;e.uogonek=371;e.uparen=9392;e.upblock=9600;e.upperdothebrew=1476;e.upsilon=965;e.upsilondieresis=971;e.upsilondieresistonos=944;e.upsilon\ +latin=650;e.upsilontonos=973;e.uptackbelowcmb=797;e.uptackmod=724;e.uragurmukhi=2675;e.uring=367;e.ushortcyrillic=1118;e.usmallhiragana=12357;e.usmallkatakana=12453;e.usmallkatakanahalfwidth=65385;e.ustraightcyrillic=1199;e.ustraightstrokecyrillic=1201;e.utilde=361;e.utildeacute=7801;e.utildebelow=7797;e.uubengali=2442;e.uudeva=2314;e.uugujarati=2698;e.uugurmukhi=2570;e.uumatragurmukhi=2626;e.uuvowelsignbengali=2498;e.uuvowelsigndeva=2370;e.uuvowelsigngujarati=2754;e.uvowelsignbengali=2497;e.uvo\ +welsigndeva=2369;e.uvowelsigngujarati=2753;e.v=118;e.vadeva=2357;e.vagujarati=2741;e.vagurmukhi=2613;e.vakatakana=12535;e.vav=1493;e.vavdagesh=64309;e.vavdagesh65=64309;e.vavdageshhebrew=64309;e.vavhebrew=1493;e.vavholam=64331;e.vavholamhebrew=64331;e.vavvavhebrew=1520;e.vavyodhebrew=1521;e.vcircle=9445;e.vdotbelow=7807;e.vecyrillic=1074;e.veharabic=1700;e.vehfinalarabic=64363;e.vehinitialarabic=64364;e.vehmedialarabic=64365;e.vekatakana=12537;e.venus=9792;e.verticalbar=124;e.verticallineabovecm\ +b=781;e.verticallinebelowcmb=809;e.verticallinelowmod=716;e.verticallinemod=712;e.vewarmenian=1406;e.vhook=651;e.vikatakana=12536;e.viramabengali=2509;e.viramadeva=2381;e.viramagujarati=2765;e.visargabengali=2435;e.visargadeva=2307;e.visargagujarati=2691;e.vmonospace=65366;e.voarmenian=1400;e.voicediterationhiragana=12446;e.voicediterationkatakana=12542;e.voicedmarkkana=12443;e.voicedmarkkanahalfwidth=65438;e.vokatakana=12538;e.vparen=9393;e.vtilde=7805;e.vturned=652;e.vuhiragana=12436;e.vukatak\ +ana=12532;e.w=119;e.wacute=7811;e.waekorean=12633;e.wahiragana=12431;e.wakatakana=12527;e.wakatakanahalfwidth=65436;e.wakorean=12632;e.wasmallhiragana=12430;e.wasmallkatakana=12526;e.wattosquare=13143;e.wavedash=12316;e.wavyunderscorevertical=65076;e.wawarabic=1608;e.wawfinalarabic=65262;e.wawhamzaabovearabic=1572;e.wawhamzaabovefinalarabic=65158;e.wbsquare=13277;e.wcircle=9446;e.wcircumflex=373;e.wdieresis=7813;e.wdotaccent=7815;e.wdotbelow=7817;e.wehiragana=12433;e.weierstrass=8472;e.wekatakan\ +a=12529;e.wekorean=12638;e.weokorean=12637;e.wgrave=7809;e.whitebullet=9702;e.whitecircle=9675;e.whitecircleinverse=9689;e.whitecornerbracketleft=12302;e.whitecornerbracketleftvertical=65091;e.whitecornerbracketright=12303;e.whitecornerbracketrightvertical=65092;e.whitediamond=9671;e.whitediamondcontainingblacksmalldiamond=9672;e.whitedownpointingsmalltriangle=9663;e.whitedownpointingtriangle=9661;e.whiteleftpointingsmalltriangle=9667;e.whiteleftpointingtriangle=9665;e.whitelenticularbracketleft\ +=12310;e.whitelenticularbracketright=12311;e.whiterightpointingsmalltriangle=9657;e.whiterightpointingtriangle=9655;e.whitesmallsquare=9643;e.whitesmilingface=9786;e.whitesquare=9633;e.whitestar=9734;e.whitetelephone=9743;e.whitetortoiseshellbracketleft=12312;e.whitetortoiseshellbracketright=12313;e.whiteuppointingsmalltriangle=9653;e.whiteuppointingtriangle=9651;e.wihiragana=12432;e.wikatakana=12528;e.wikorean=12639;e.wmonospace=65367;e.wohiragana=12434;e.wokatakana=12530;e.wokatakanahalfwidth=\ +65382;e.won=8361;e.wonmonospace=65510;e.wowaenthai=3623;e.wparen=9394;e.wring=7832;e.wsuperior=695;e.wturned=653;e.wynn=447;e.x=120;e.xabovecmb=829;e.xbopomofo=12562;e.xcircle=9447;e.xdieresis=7821;e.xdotaccent=7819;e.xeharmenian=1389;e.xi=958;e.xmonospace=65368;e.xparen=9395;e.xsuperior=739;e.y=121;e.yaadosquare=13134;e.yabengali=2479;e.yacute=253;e.yadeva=2351;e.yaekorean=12626;e.yagujarati=2735;e.yagurmukhi=2607;e.yahiragana=12420;e.yakatakana=12516;e.yakatakanahalfwidth=65428;e.yakorean=1262\ +5;e.yamakkanthai=3662;e.yasmallhiragana=12419;e.yasmallkatakana=12515;e.yasmallkatakanahalfwidth=65388;e.yatcyrillic=1123;e.ycircle=9448;e.ycircumflex=375;e.ydieresis=255;e.ydotaccent=7823;e.ydotbelow=7925;e.yeharabic=1610;e.yehbarreearabic=1746;e.yehbarreefinalarabic=64431;e.yehfinalarabic=65266;e.yehhamzaabovearabic=1574;e.yehhamzaabovefinalarabic=65162;e.yehhamzaaboveinitialarabic=65163;e.yehhamzaabovemedialarabic=65164;e.yehinitialarabic=65267;e.yehmedialarabic=65268;e.yehmeeminitialarabic=6\ +4733;e.yehmeemisolatedarabic=64600;e.yehnoonfinalarabic=64660;e.yehthreedotsbelowarabic=1745;e.yekorean=12630;e.yen=165;e.yenmonospace=65509;e.yeokorean=12629;e.yeorinhieuhkorean=12678;e.yerahbenyomohebrew=1450;e.yerahbenyomolefthebrew=1450;e.yericyrillic=1099;e.yerudieresiscyrillic=1273;e.yesieungkorean=12673;e.yesieungpansioskorean=12675;e.yesieungsioskorean=12674;e.yetivhebrew=1434;e.ygrave=7923;e.yhook=436;e.yhookabove=7927;e.yiarmenian=1397;e.yicyrillic=1111;e.yikorean=12642;e.yinyang=9775;\ +e.yiwnarmenian=1410;e.ymonospace=65369;e.yod=1497;e.yoddagesh=64313;e.yoddageshhebrew=64313;e.yodhebrew=1497;e.yodyodhebrew=1522;e.yodyodpatahhebrew=64287;e.yohiragana=12424;e.yoikorean=12681;e.yokatakana=12520;e.yokatakanahalfwidth=65430;e.yokorean=12635;e.yosmallhiragana=12423;e.yosmallkatakana=12519;e.yosmallkatakanahalfwidth=65390;e.yotgreek=1011;e.yoyaekorean=12680;e.yoyakorean=12679;e.yoyakthai=3618;e.yoyingthai=3597;e.yparen=9396;e.ypogegrammeni=890;e.ypogegrammenigreekcmb=837;e.yr=422;e.\ +yring=7833;e.ysuperior=696;e.ytilde=7929;e.yturned=654;e.yuhiragana=12422;e.yuikorean=12684;e.yukatakana=12518;e.yukatakanahalfwidth=65429;e.yukorean=12640;e.yusbigcyrillic=1131;e.yusbigiotifiedcyrillic=1133;e.yuslittlecyrillic=1127;e.yuslittleiotifiedcyrillic=1129;e.yusmallhiragana=12421;e.yusmallkatakana=12517;e.yusmallkatakanahalfwidth=65389;e.yuyekorean=12683;e.yuyeokorean=12682;e.yyabengali=2527;e.yyadeva=2399;e.z=122;e.zaarmenian=1382;e.zacute=378;e.zadeva=2395;e.zagurmukhi=2651;e.zaharabi\ +c=1592;e.zahfinalarabic=65222;e.zahinitialarabic=65223;e.zahiragana=12374;e.zahmedialarabic=65224;e.zainarabic=1586;e.zainfinalarabic=65200;e.zakatakana=12470;e.zaqefgadolhebrew=1429;e.zaqefqatanhebrew=1428;e.zarqahebrew=1432;e.zayin=1494;e.zayindagesh=64310;e.zayindageshhebrew=64310;e.zayinhebrew=1494;e.zbopomofo=12567;e.zcaron=382;e.zcircle=9449;e.zcircumflex=7825;e.zcurl=657;e.zdot=380;e.zdotaccent=380;e.zdotbelow=7827;e.zecyrillic=1079;e.zedescendercyrillic=1177;e.zedieresiscyrillic=1247;e.z\ +ehiragana=12380;e.zekatakana=12476;e.zero=48;e.zeroarabic=1632;e.zerobengali=2534;e.zerodeva=2406;e.zerogujarati=2790;e.zerogurmukhi=2662;e.zerohackarabic=1632;e.zeroinferior=8320;e.zeromonospace=65296;e.zerooldstyle=63280;e.zeropersian=1776;e.zerosuperior=8304;e.zerothai=3664;e.zerowidthjoiner=65279;e.zerowidthnonjoiner=8204;e.zerowidthspace=8203;e.zeta=950;e.zhbopomofo=12563;e.zhearmenian=1386;e.zhebrevecyrillic=1218;e.zhecyrillic=1078;e.zhedescendercyrillic=1175;e.zhedieresiscyrillic=1245;e.z\ +ihiragana=12376;e.zikatakana=12472;e.zinorhebrew=1454;e.zlinebelow=7829;e.zmonospace=65370;e.zohiragana=12382;e.zokatakana=12478;e.zparen=9397;e.zretroflexhook=656;e.zstroke=438;e.zuhiragana=12378;e.zukatakana=12474;e[".notdef"]=0;e.angbracketleftbig=9001;e.angbracketleftBig=9001;e.angbracketleftbigg=9001;e.angbracketleftBigg=9001;e.angbracketrightBig=9002;e.angbracketrightbig=9002;e.angbracketrightBigg=9002;e.angbracketrightbigg=9002;e.arrowhookleft=8618;e.arrowhookright=8617;e.arrowlefttophalf\ +=8636;e.arrowleftbothalf=8637;e.arrownortheast=8599;e.arrownorthwest=8598;e.arrowrighttophalf=8640;e.arrowrightbothalf=8641;e.arrowsoutheast=8600;e.arrowsouthwest=8601;e.backslashbig=8726;e.backslashBig=8726;e.backslashBigg=8726;e.backslashbigg=8726;e.bardbl=8214;e.bracehtipdownleft=65079;e.bracehtipdownright=65079;e.bracehtipupleft=65080;e.bracehtipupright=65080;e.braceleftBig=123;e.braceleftbig=123;e.braceleftbigg=123;e.braceleftBigg=123;e.bracerightBig=125;e.bracerightbig=125;e.bracerightbigg\ +=125;e.bracerightBigg=125;e.bracketleftbig=91;e.bracketleftBig=91;e.bracketleftbigg=91;e.bracketleftBigg=91;e.bracketrightBig=93;e.bracketrightbig=93;e.bracketrightbigg=93;e.bracketrightBigg=93;e.ceilingleftbig=8968;e.ceilingleftBig=8968;e.ceilingleftBigg=8968;e.ceilingleftbigg=8968;e.ceilingrightbig=8969;e.ceilingrightBig=8969;e.ceilingrightbigg=8969;e.ceilingrightBigg=8969;e.circledotdisplay=8857;e.circledottext=8857;e.circlemultiplydisplay=8855;e.circlemultiplytext=8855;e.circleplusdisplay=88\ +53;e.circleplustext=8853;e.contintegraldisplay=8750;e.contintegraltext=8750;e.coproductdisplay=8720;e.coproducttext=8720;e.floorleftBig=8970;e.floorleftbig=8970;e.floorleftbigg=8970;e.floorleftBigg=8970;e.floorrightbig=8971;e.floorrightBig=8971;e.floorrightBigg=8971;e.floorrightbigg=8971;e.hatwide=770;e.hatwider=770;e.hatwidest=770;e.intercal=7488;e.integraldisplay=8747;e.integraltext=8747;e.intersectiondisplay=8898;e.intersectiontext=8898;e.logicalanddisplay=8743;e.logicalandtext=8743;e.logical\ +ordisplay=8744;e.logicalortext=8744;e.parenleftBig=40;e.parenleftbig=40;e.parenleftBigg=40;e.parenleftbigg=40;e.parenrightBig=41;e.parenrightbig=41;e.parenrightBigg=41;e.parenrightbigg=41;e.prime=8242;e.productdisplay=8719;e.producttext=8719;e.radicalbig=8730;e.radicalBig=8730;e.radicalBigg=8730;e.radicalbigg=8730;e.radicalbt=8730;e.radicaltp=8730;e.radicalvertex=8730;e.slashbig=47;e.slashBig=47;e.slashBigg=47;e.slashbigg=47;e.summationdisplay=8721;e.summationtext=8721;e.tildewide=732;e.tildewid\ +er=732;e.tildewidest=732;e.uniondisplay=8899;e.unionmultidisplay=8846;e.unionmultitext=8846;e.unionsqdisplay=8852;e.unionsqtext=8852;e.uniontext=8899;e.vextenddouble=8741;e.vextendsingle=8739})),Ir=getLookupTableFactory((function(e){e.space=32;e.a1=9985;e.a2=9986;e.a202=9987;e.a3=9988;e.a4=9742;e.a5=9990;e.a119=9991;e.a118=9992;e.a117=9993;e.a11=9755;e.a12=9758;e.a13=9996;e.a14=9997;e.a15=9998;e.a16=9999;e.a105=1e4;e.a17=10001;e.a18=10002;e.a19=10003;e.a20=10004;e.a21=10005;e.a22=10006;e.a23=100\ +07;e.a24=10008;e.a25=10009;e.a26=10010;e.a27=10011;e.a28=10012;e.a6=10013;e.a7=10014;e.a8=10015;e.a9=10016;e.a10=10017;e.a29=10018;e.a30=10019;e.a31=10020;e.a32=10021;e.a33=10022;e.a34=10023;e.a35=9733;e.a36=10025;e.a37=10026;e.a38=10027;e.a39=10028;e.a40=10029;e.a41=10030;e.a42=10031;e.a43=10032;e.a44=10033;e.a45=10034;e.a46=10035;e.a47=10036;e.a48=10037;e.a49=10038;e.a50=10039;e.a51=10040;e.a52=10041;e.a53=10042;e.a54=10043;e.a55=10044;e.a56=10045;e.a57=10046;e.a58=10047;e.a59=10048;e.a60=1004\ +9;e.a61=10050;e.a62=10051;e.a63=10052;e.a64=10053;e.a65=10054;e.a66=10055;e.a67=10056;e.a68=10057;e.a69=10058;e.a70=10059;e.a71=9679;e.a72=10061;e.a73=9632;e.a74=10063;e.a203=10064;e.a75=10065;e.a204=10066;e.a76=9650;e.a77=9660;e.a78=9670;e.a79=10070;e.a81=9687;e.a82=10072;e.a83=10073;e.a84=10074;e.a97=10075;e.a98=10076;e.a99=10077;e.a100=10078;e.a101=10081;e.a102=10082;e.a103=10083;e.a104=10084;e.a106=10085;e.a107=10086;e.a108=10087;e.a112=9827;e.a111=9830;e.a110=9829;e.a109=9824;e.a120=9312;e.\ +a121=9313;e.a122=9314;e.a123=9315;e.a124=9316;e.a125=9317;e.a126=9318;e.a127=9319;e.a128=9320;e.a129=9321;e.a130=10102;e.a131=10103;e.a132=10104;e.a133=10105;e.a134=10106;e.a135=10107;e.a136=10108;e.a137=10109;e.a138=10110;e.a139=10111;e.a140=10112;e.a141=10113;e.a142=10114;e.a143=10115;e.a144=10116;e.a145=10117;e.a146=10118;e.a147=10119;e.a148=10120;e.a149=10121;e.a150=10122;e.a151=10123;e.a152=10124;e.a153=10125;e.a154=10126;e.a155=10127;e.a156=10128;e.a157=10129;e.a158=10130;e.a159=10131;e.a1\ +60=10132;e.a161=8594;e.a163=8596;e.a164=8597;e.a196=10136;e.a165=10137;e.a192=10138;e.a166=10139;e.a167=10140;e.a168=10141;e.a169=10142;e.a170=10143;e.a171=10144;e.a172=10145;e.a173=10146;e.a162=10147;e.a174=10148;e.a175=10149;e.a176=10150;e.a177=10151;e.a178=10152;e.a179=10153;e.a193=10154;e.a180=10155;e.a199=10156;e.a181=10157;e.a200=10158;e.a182=10159;e.a201=10161;e.a183=10162;e.a184=10163;e.a197=10164;e.a185=10165;e.a194=10166;e.a198=10167;e.a186=10168;e.a195=10169;e.a187=10170;e.a188=10171;\ +e.a189=10172;e.a190=10173;e.a191=10174;e.a89=10088;e.a90=10089;e.a93=10090;e.a94=10091;e.a91=10092;e.a92=10093;e.a205=10094;e.a85=10095;e.a206=10096;e.a86=10097;e.a87=10098;e.a88=10099;e.a95=10100;e.a96=10101;e[".notdef"]=0})),Tr=getLookupTableFactory((function(e){e[63721]=169;e[63193]=169;e[63720]=174;e[63194]=174;e[63722]=8482;e[63195]=8482;e[63729]=9127;e[63730]=9128;e[63731]=9129;e[63740]=9131;e[63741]=9132;e[63742]=9133;e[63726]=9121;e[63727]=9122;e[63728]=9123;e[63737]=9124;e[63738]=9125;e\ +[63739]=9126;e[63723]=9115;e[63724]=9116;e[63725]=9117;e[63734]=9118;e[63735]=9119;e[63736]=9120}));function getUnicodeForGlyph(e,t){let a=t[e];if(void 0!==a)return a;if(!e)return-1;if("u"===e[0]){const t=e.length;let r;if(7===t&&"n"===e[1]&&"i"===e[2])r=e.substring(3);else{if(!(t>=5&&t<=7))return-1;r=e.substring(1)}if(r===r.toUpperCase()){a=parseInt(r,16);if(a>=0)return a}}return-1}const Or=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,\ +7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,1100\ +8,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],\ +[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6\ +400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function getUnic\ +odeRangeFor(e,t=-1){if(-1!==t){const a=Or[t];for(let r=0,i=a.length;r<i;r+=2)if(e>=a[r]&&e<=a[r+1])return t}for(let t=0,a=Or.length;t<a;t++){const a=Or[t];for(let r=0,i=a.length;r<i;r+=2)if(e>=a[r]&&e<=a[r+1])return t}return-1}const Mr=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),Dr=new Map;const Rr=!0,Nr=1,Er=2,Pr=4,Lr=32,jr=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","com\ +ma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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","bracketleft","backslash","bracketright","asciicircum","underscore","grave","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","braceleft","bar","braceright","asciitilde","Adieresis"\ +,"Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity",\ +"plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsingl\ +right","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","mul\ +tiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function recoverGlyphName(e,t){if(void 0!==t[e])return e;const a=getUnicodeForGlyph(e,t);if(-1!==a)for(const e in t)if(t[e]===a)return e;info("Unable to recover a standard glyph name for: "+e);return e}function type1FontGlyphMapping(e,t,a){const r=Object.create(null);let i,n,s;const o=!!(e.flags&Pr);if\ +(e.isInternalFont){s=t;for(n=0;n<s.length;n++){i=a.indexOf(s[n]);r[n]=i>=0?i:0}}else if(e.baseEncodingName){s=getEncoding(e.baseEncodingName);for(n=0;n<s.length;n++){i=a.indexOf(s[n]);r[n]=i>=0?i:0}}else if(o)for(n in t)r[n]=t[n];else{s=Ar;for(n=0;n<s.length;n++){i=a.indexOf(s[n]);r[n]=i>=0?i:0}}const c=e.differences;let l;if(c)for(n in c){const e=c[n];i=a.indexOf(e);if(-1===i){l||(l=Fr());const t=recoverGlyphName(e,l);t!==e&&(i=a.indexOf(t))}r[n]=i>=0?i:0}return r}function normalizeFontName(e){\ +return e.replaceAll(/[,_]/g,"-").replaceAll(/\\s/g,"")}const _r=getLookupTableFactory((e=>{e[8211]=65074;e[8212]=65073;e[8229]=65072;e[8230]=65049;e[12289]=65041;e[12290]=65042;e[12296]=65087;e[12297]=65088;e[12298]=65085;e[12299]=65086;e[12300]=65089;e[12301]=65090;e[12302]=65091;e[12303]=65092;e[12304]=65083;e[12305]=65084;e[12308]=65081;e[12309]=65082;e[12310]=65047;e[12311]=65048;e[65103]=65076;e[65281]=65045;e[65288]=65077;e[65289]=65078;e[65292]=65040;e[65306]=65043;e[65307]=65044;e[65311]=\ +65046;e[65339]=65095;e[65341]=65096;e[65343]=65075;e[65371]=65079;e[65373]=65080}));const Ur=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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"\ +,"bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","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","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quot\ +edblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth",\ +"multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igra\ +ve","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],Xr=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle"\ +,"eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Ls\ +mall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths"\ +,"seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsm\ +all","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],qr=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","\ +onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinfer\ +ior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinf\ +erior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],Hr=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","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","\ +bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","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","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quoted\ +blright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","m\ +ultiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave\ +","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequarters\ +emdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsma\ +ll","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","\ +ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","\ +Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Wr=391,zr=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},\ +{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcur\ +veline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],$r=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]+e[t-1]}},{id:"sub",min:2,stack\ +Delta:-1,stackFn(e,t){e[t-2]=e[t-2]-e[t-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]/e[t-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,t){e[t-1]=-e[t-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]*e[t-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,st\ +ackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];class CFFParser{constructor(e,t,a){this.bytes=e.getBytes();this.properties=t;this.seacAnalysisEnabled=!!a}parse(){const e=this.properties,t=new CFF;this.cff=t;const a=this.parseHeader(),r=this.parseIndex(a.endPos),i=this.parseIndex(r.endPos),n\ +=this.parseIndex(i.endPos),s=this.parseIndex(n.endPos),o=this.parseDict(i.obj.get(0)),c=this.createDict(CFFTopDict,o,t.strings);t.header=a.obj;t.names=this.parseNameIndex(r.obj);t.strings=this.parseStringIndex(n.obj);t.topDict=c;t.globalSubrIndex=s.obj;this.parsePrivateDict(t.topDict);t.isCIDFont=c.hasName("ROS");const l=c.getByName("CharStrings"),h=this.parseIndex(l).obj,u=c.getByName("FontMatrix");u&&(e.fontMatrix=u);const d=c.getByName("FontBBox");if(d){e.ascent=Math.max(d[3],d[1]);e.descent=\ +Math.min(d[1],d[3]);e.ascentScaled=!0}let f,g;if(t.isCIDFont){const e=this.parseIndex(c.getByName("FDArray")).obj;for(let a=0,r=e.count;a<r;++a){const r=e.get(a),i=this.createDict(CFFTopDict,this.parseDict(r),t.strings);this.parsePrivateDict(i);t.fdArray.push(i)}g=null;f=this.parseCharsets(c.getByName("charset"),h.count,t.strings,!0);t.fdSelect=this.parseFDSelect(c.getByName("FDSelect"),h.count)}else{f=this.parseCharsets(c.getByName("charset"),h.count,t.strings,!1);g=this.parseEncoding(c.getByNa\ +me("Encoding"),e,t.strings,f.charset)}t.charset=f;t.encoding=g;const p=this.parseCharStrings({charStrings:h,localSubrIndex:c.privateDict.subrsIndex,globalSubrIndex:s.obj,fdSelect:t.fdSelect,fdArray:t.fdArray,privateDict:c.privateDict});t.charStrings=p.charStrings;t.seacs=p.seacs;t.widths=p.widths;return t}parseHeader(){let e=this.bytes;const t=e.length;let a=0;for(;a<t&&1!==e[a];)++a;if(a>=t)throw new FormatError("Invalid CFF header");if(0!==a){info("cff data is shifted");e=e.subarray(a);this.by\ +tes=e}const r=e[0],i=e[1],n=e[2],s=e[3];return{obj:new CFFHeader(r,i,n,s),endPos:n}}parseDict(e){let t=0;function parseOperand(){let a=e[t++];if(30===a)return function parseFloatOperand(){let a="";const r=15,i=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],n=e.length;for(;t<n;){const n=e[t++],s=n>>4,o=15&n;if(s===r)break;a+=i[s];if(o===r)break;a+=i[o]}return parseFloat(a)}();if(28===a){a=readInt16(e,t);t+=2;return a}if(29===a){a=e[t++];a=a<<8|e[t++];a=a<<8|e[t++];a=a<<8|e[t++];r\ +eturn a}if(a>=32&&a<=246)return a-139;if(a>=247&&a<=250)return 256*(a-247)+e[t++]+108;if(a>=251&&a<=254)return-256*(a-251)-e[t++]-108;warn(\'CFFParser_parseDict: "\'+a+\'" is a reserved command.\');return NaN}let a=[];const r=[];t=0;const i=e.length;for(;t<i;){let i=e[t];if(i<=21){12===i&&(i=i<<8|e[++t]);r.push([i,a]);a=[];++t}else a.push(parseOperand())}return r}parseIndex(e){const t=new CFFIndex,a=this.bytes,r=a[e++]<<8|a[e++],i=[];let n,s,o=e;if(0!==r){const t=a[e++],c=e+(r+1)*t-1;for(n=0,s=r+1;n\ +<s;++n){let r=0;for(let i=0;i<t;++i){r<<=8;r+=a[e++]}i.push(c+r)}o=i[r]}for(n=0,s=i.length-1;n<s;++n){const e=i[n],r=i[n+1];t.add(a.subarray(e,r))}return{obj:t,endPos:o}}parseNameIndex(e){const t=[];for(let a=0,r=e.count;a<r;++a){const r=e.get(a);t.push(bytesToString(r))}return t}parseStringIndex(e){const t=new CFFStrings;for(let a=0,r=e.count;a<r;++a){const r=e.get(a);t.add(bytesToString(r))}return t}createDict(e,t,a){const r=new e(a);for(const[e,a]of t)r.setByKey(e,a);return r}parseCharString(\ +e,t,a,r){if(!t||e.callDepth>10)return!1;let i=e.stackSize;const n=e.stack;let s=t.length;for(let o=0;o<s;){const c=t[o++];let l=null;if(12===c){const e=t[o++];if(0===e){t[o-2]=139;t[o-1]=22;i=0}else l=$r[e]}else if(28===c){n[i]=readInt16(t,o);o+=2;i++}else if(14===c){if(i>=4){i-=4;if(this.seacAnalysisEnabled){e.seac=n.slice(i,i+4);return!1}}l=zr[c]}else if(c>=32&&c<=246){n[i]=c-139;i++}else if(c>=247&&c<=254){n[i]=c<251?(c-247<<8)+t[o]+108:-(c-251<<8)-t[o]-108;o++;i++}else if(255===c){n[i]=(t[o]\ +<<24|t[o+1]<<16|t[o+2]<<8|t[o+3])/65536;o+=4;i++}else if(19===c||20===c){e.hints+=i>>1;if(0===e.hints){t.copyWithin(o-1,o,-1);o-=1;s-=1;continue}o+=e.hints+7>>3;i%=2;l=zr[c]}else{if(10===c||29===c){const t=10===c?a:r;if(!t){l=zr[c];warn("Missing subrsIndex for "+l.id);return!1}let s=32768;t.count<1240?s=107:t.count<33900&&(s=1131);const o=n[--i]+s;if(o<0||o>=t.count||isNaN(o)){l=zr[c];warn("Out of bounds subrIndex for "+l.id);return!1}e.stackSize=i;e.callDepth++;if(!this.parseCharString(e,t.get(\ +o),a,r))return!1;e.callDepth--;i=e.stackSize;continue}if(11===c){e.stackSize=i;return!0}if(0===c&&o===t.length){t[o-1]=14;l=zr[14]}else{if(9===c){t.copyWithin(o-1,o,-1);o-=1;s-=1;continue}l=zr[c]}}if(l){if(l.stem){e.hints+=i>>1;if(3===c||23===c)e.hasVStems=!0;else if(e.hasVStems&&(1===c||18===c)){warn("CFF stem hints are in wrong order");t[o-1]=1===c?3:23}}if("min"in l&&!e.undefStack&&i<l.min){warn("Not enough parameters for "+l.id+"; actual: "+i+", expected: "+l.min);if(0===i){t[o-1]=14;return!\ +0}return!1}if(e.firstStackClearing&&l.stackClearing){e.firstStackClearing=!1;i-=l.min;i>=2&&l.stem?i%=2:i>1&&warn("Found too many parameters for stack-clearing command");i>0&&(e.width=n[i-1])}if("stackDelta"in l){"stackFn"in l&&l.stackFn(n,i);i+=l.stackDelta}else if(l.stackClearing)i=0;else if(l.resetStack){i=0;e.undefStack=!1}else if(l.undefStack){i=0;e.undefStack=!0;e.firstStackClearing=!1}}}s<t.length&&t.fill(14,s);e.stackSize=i;return!0}parseCharStrings({charStrings:e,localSubrIndex:t,global\ +SubrIndex:a,fdSelect:r,fdArray:i,privateDict:n}){const s=[],o=[],c=e.count;for(let l=0;l<c;l++){const c=e.get(l),h={callDepth:0,stackSize:0,stack:[],undefStack:!0,hints:0,firstStackClearing:!0,seac:null,width:null,hasVStems:!1};let u=!0,d=null,f=n;if(r&&i.length){const e=r.getFDIndex(l);if(-1===e){warn("Glyph index is not in fd select.");u=!1}if(e>=i.length){warn("Invalid fd index for glyph index.");u=!1}if(u){f=i[e].privateDict;d=f.subrsIndex}}else t&&(d=t);u&&(u=this.parseCharString(h,c,d,a));\ +if(null!==h.width){const e=f.getByName("nominalWidthX");o[l]=e+h.width}else{const e=f.getByName("defaultWidthX");o[l]=e}null!==h.seac&&(s[l]=h.seac);u||e.set(l,new Uint8Array([14]))}return{charStrings:e,seacs:s,widths:o}}emptyPrivateDictionary(e){const t=this.createDict(CFFPrivateDict,[],e.strings);e.setByKey(18,[0,0]);e.privateDict=t}parsePrivateDict(e){if(!e.hasName("Private")){this.emptyPrivateDictionary(e);return}const t=e.getByName("Private");if(!Array.isArray(t)||2!==t.length){e.removeByNa\ +me("Private");return}const a=t[0],r=t[1];if(0===a||r>=this.bytes.length){this.emptyPrivateDictionary(e);return}const i=r+a,n=this.bytes.subarray(r,i),s=this.parseDict(n),o=this.createDict(CFFPrivateDict,s,e.strings);e.privateDict=o;0===o.getByName("ExpansionFactor")&&o.setByName("ExpansionFactor",.06);if(!o.getByName("Subrs"))return;const c=o.getByName("Subrs"),l=r+c;if(0===c||l>=this.bytes.length){this.emptyPrivateDictionary(e);return}const h=this.parseIndex(l);o.subrsIndex=h.obj}parseCharsets(\ +e,t,a,r){if(0===e)return new CFFCharset(!0,Kr.ISO_ADOBE,Ur);if(1===e)return new CFFCharset(!0,Kr.EXPERT,Xr);if(2===e)return new CFFCharset(!0,Kr.EXPERT_SUBSET,qr);const i=this.bytes,n=e,s=i[e++],o=[r?0:".notdef"];let c,l,h;t-=1;switch(s){case 0:for(h=0;h<t;h++){c=i[e++]<<8|i[e++];o.push(r?c:a.get(c))}break;case 1:for(;o.length<=t;){c=i[e++]<<8|i[e++];l=i[e++];for(h=0;h<=l;h++)o.push(r?c++:a.get(c++))}break;case 2:for(;o.length<=t;){c=i[e++]<<8|i[e++];l=i[e++]<<8|i[e++];for(h=0;h<=l;h++)o.push(r?\ +c++:a.get(c++))}break;default:throw new FormatError("Unknown charset format")}const u=e,d=i.subarray(n,u);return new CFFCharset(!1,s,o,d)}parseEncoding(e,t,a,r){const i=Object.create(null),n=this.bytes;let s,o,c,l=!1,h=null;if(0===e||1===e){l=!0;s=e;const t=e?wr:Ar;for(o=0,c=r.length;o<c;o++){const e=t.indexOf(r[o]);-1!==e&&(i[e]=o)}}else{const t=e;s=n[e++];switch(127&s){case 0:const t=n[e++];for(o=1;o<=t;o++)i[n[e++]]=o;break;case 1:const a=n[e++];let r=1;for(o=0;o<a;o++){const t=n[e++],a=n[e++\ +];for(let e=t;e<=t+a;e++)i[e]=r++}break;default:throw new FormatError(`Unknown encoding format: ${s} in CFF`)}const c=e;if(128&s){n[t]&=127;!function readSupplement(){const t=n[e++];for(o=0;o<t;o++){const t=n[e++],s=(n[e++]<<8)+(255&n[e++]);i[t]=r.indexOf(a.get(s))}}()}h=n.subarray(t,c)}s&=127;return new CFFEncoding(l,s,i,h)}parseFDSelect(e,t){const a=this.bytes,r=a[e++],i=[];let n;switch(r){case 0:for(n=0;n<t;++n){const t=a[e++];i.push(t)}break;case 3:const s=a[e++]<<8|a[e++];for(n=0;n<s;++n){l\ +et t=a[e++]<<8|a[e++];if(0===n&&0!==t){warn("parseFDSelect: The first range must have a first GID of 0 -- trying to recover.");t=0}const r=a[e++],s=a[e]<<8|a[e+1];for(let e=t;e<s;++e)i.push(r)}e+=2;break;default:throw new FormatError(`parseFDSelect: Unknown format "${r}".`)}if(i.length!==t)throw new FormatError("parseFDSelect: Invalid font data.");return new CFFFDSelect(r,i)}}class CFF{constructor(){this.header=null;this.names=[];this.topDict=null;this.strings=new CFFStrings;this.globalSubrIndex\ +=null;this.encoding=null;this.charset=null;this.charStrings=null;this.fdArray=[];this.fdSelect=null;this.isCIDFont=!1}duplicateFirstGlyph(){if(this.charStrings.count>=65535){warn("Not enough space in charstrings to duplicate first glyph.");return}const e=this.charStrings.get(0);this.charStrings.add(e);this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(e){if(e<0||e>=this.charStrings.count)return!1;return this.charStrings.get(e).length>0}}class CFFHeader{constructor(\ +e,t,a,r){this.major=e;this.minor=t;this.hdrSize=a;this.offSize=r}}class CFFStrings{constructor(){this.strings=[]}get(e){return e>=0&&e<=390?Hr[e]:e-Wr<=this.strings.length?this.strings[e-Wr]:Hr[0]}getSID(e){let t=Hr.indexOf(e);if(-1!==t)return t;t=this.strings.indexOf(e);return-1!==t?t+Wr:-1}add(e){this.strings.push(e)}get count(){return this.strings.length}}class CFFIndex{constructor(){this.objects=[];this.length=0}add(e){this.length+=e.length;this.objects.push(e)}set(e,t){this.length+=t.length\ +-this.objects[e].length;this.objects[e]=t}get(e){return this.objects[e]}get count(){return this.objects.length}}class CFFDict{constructor(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.nameToKeyMap;this.defaults=e.defaults;this.types=e.types;this.opcodes=e.opcodes;this.order=e.order;this.strings=t;this.values=Object.create(null)}setByKey(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;for(const a of t)if(isNaN(a)){warn(`Invalid CFFDict value: "${t}" for key "${e}".\ +`);return!0}const a=this.types[e];"num"!==a&&"sid"!==a&&"offset"!==a||(t=t[0]);this.values[e]=t;return!0}setByName(e,t){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name "${e}"`);this.values[this.nameToKeyMap[e]]=t}hasName(e){return this.nameToKeyMap[e]in this.values}getByName(e){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name ${e}"`);const t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}removeByName(e){delete t\ +his.values[this.nameToKeyMap[e]]}static createTables(e){const t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(const a of e){const e=Array.isArray(a[0])?(a[0][0]<<8)+a[0][1]:a[0];t.keyToNameMap[e]=a[1];t.nameToKeyMap[a[1]]=e;t.types[e]=a[2];t.defaults[e]=a[3];t.opcodes[e]=Array.isArray(a[0])?a[0]:[a[0]];t.order.push(e)}return t}}const Gr=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],\ +[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num"\ +,0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12\ +,38],"FontName","sid",null]];class CFFTopDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Gr))}constructor(e){super(CFFTopDict.tables,e);this.privateDict=null}}const Vr=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","d\ +elta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]];class CFFPrivateDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Vr))}constructor(e){super(CFFPrivateDict.tables,e);this.subrsIndex=null}}const Kr={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2};cla\ +ss CFFCharset{constructor(e,t,a,r){this.predefined=e;this.format=t;this.charset=a;this.raw=r}}class CFFEncoding{constructor(e,t,a,r){this.predefined=e;this.format=t;this.encoding=a;this.raw=r}}class CFFFDSelect{constructor(e,t){this.format=e;this.fdSelect=t}getFDIndex(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}class CFFOffsetTracker{constructor(){this.offsets=Object.create(null)}isTracking(e){return e in this.offsets}track(e,t){if(e in this.offsets)throw new FormatError(`Already\ + tracking location of ${e}`);this.offsets[e]=t}offset(e){for(const t in this.offsets)this.offsets[t]+=e}setEntryLocation(e,t,a){if(!(e in this.offsets))throw new FormatError(`Not tracking location of ${e}`);const r=a.data,i=this.offsets[e];for(let e=0,a=t.length;e<a;++e){const a=5*e+i,n=a+1,s=a+2,o=a+3,c=a+4;if(29!==r[a]||0!==r[n]||0!==r[s]||0!==r[o]||0!==r[c])throw new FormatError("writing to an offset that is not empty");const l=t[e];r[a]=29;r[n]=l>>24&255;r[s]=l>>16&255;r[o]=l>>8&255;r[c]=255\ +&l}}}class CFFCompiler{constructor(e){this.cff=e}compile(){const e=this.cff,t={data:[],length:0,add(e){try{this.data.push(...e)}catch{this.data=this.data.concat(e)}this.length=this.data.length}},a=this.compileHeader(e.header);t.add(a);const r=this.compileNameIndex(e.names);t.add(r);if(e.isCIDFont&&e.topDict.hasName("FontMatrix")){const t=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");for(const a of e.fdArray){let e=t.slice(0);a.hasName("FontMatrix")&&(e=Util.transform(e,a\ +.getByName("FontMatrix")));a.setByName("FontMatrix",e)}}const i=e.topDict.getByName("XUID");i?.length>16&&e.topDict.removeByName("XUID");e.topDict.setByName("charset",0);let n=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(n.output);const s=n.trackers[0],o=this.compileStringIndex(e.strings.strings);t.add(o);const c=this.compileIndex(e.globalSubrIndex);t.add(c);if(e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)s.setEntryLocation("Encoding",[e.encoding.format],t);\ +else{const a=this.compileEncoding(e.encoding);s.setEntryLocation("Encoding",[t.length],t);t.add(a)}const l=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);s.setEntryLocation("charset",[t.length],t);t.add(l);const h=this.compileCharStrings(e.charStrings);s.setEntryLocation("CharStrings",[t.length],t);t.add(h);if(e.isCIDFont){s.setEntryLocation("FDSelect",[t.length],t);const a=this.compileFDSelect(e.fdSelect);t.add(a);n=this.compileTopDicts(e.fdArray,t.length,!0);s.setEntr\ +yLocation("FDArray",[t.length],t);t.add(n.output);const r=n.trackers;this.compilePrivateDicts(e.fdArray,r,t)}this.compilePrivateDicts([e.topDict],[s],t);t.add([0]);return t.data}encodeNumber(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}static get EncodeFloatRegExp(){return shadow(this,"EncodeFloatRegExp",/\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/)}encodeFloat(e){let t=e.toString();const a=CFFCompiler.EncodeFloatRegExp.exec(t);if(a){const r=parseFloat("1e"+((a[2]?+\ +a[2]:0)+a[1].length));t=(Math.round(e*r)/r).toString()}let r,i,n="";for(r=0,i=t.length;r<i;++r){const e=t[r];n+="e"===e?"-"===t[++r]?"c":"b":"."===e?"a":"-"===e?"e":e}n+=1&n.length?"f":"ff";const s=[30];for(r=0,i=n.length;r<i;r+=2)s.push(parseInt(n.substring(r,r+2),16));return s}encodeInteger(e){let t;t=e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e];ret\ +urn t}compileHeader(e){return[e.major,e.minor,4,e.offSize]}compileNameIndex(e){const t=new CFFIndex;for(const a of e){const e=Math.min(a.length,127);let r=new Array(e);for(let t=0;t<e;t++){let e=a[t];(e<"!"||e>"~"||"["===e||"]"===e||"("===e||")"===e||"{"===e||"}"===e||"<"===e||">"===e||"/"===e||"%"===e)&&(e="_");r[t]=e}r=r.join("");""===r&&(r="Bad_Font_Name");t.add(stringToBytes(r))}return this.compileIndex(t)}compileTopDicts(e,t,a){const r=[];let i=new CFFIndex;for(const n of e){if(a){n.removeB\ +yName("CIDFontVersion");n.removeByName("CIDFontRevision");n.removeByName("CIDFontType");n.removeByName("CIDCount");n.removeByName("UIDBase")}const e=new CFFOffsetTracker,s=this.compileDict(n,e);r.push(e);i.add(s);e.offset(t)}i=this.compileIndex(i,r);return{trackers:r,output:i}}compilePrivateDicts(e,t,a){for(let r=0,i=e.length;r<i;++r){const i=e[r],n=i.privateDict;if(!n||!i.hasName("Private"))throw new FormatError("There must be a private dictionary.");const s=new CFFOffsetTracker,o=this.compileD\ +ict(n,s);let c=a.length;s.offset(c);o.length||(c=0);t[r].setEntryLocation("Private",[o.length,c],a);a.add(o);if(n.subrsIndex&&n.hasName("Subrs")){const e=this.compileIndex(n.subrsIndex);s.setEntryLocation("Subrs",[o.length],a);a.add(e)}}}compileDict(e,t){const a=[];for(const r of e.order){if(!(r in e.values))continue;let i=e.values[r],n=e.types[r];Array.isArray(n)||(n=[n]);Array.isArray(i)||(i=[i]);if(0!==i.length){for(let s=0,o=n.length;s<o;++s){const o=n[s],c=i[s];switch(o){case"num":case"sid"\ +:a.push(...this.encodeNumber(c));break;case"offset":const n=e.keyToNameMap[r];t.isTracking(n)||t.track(n,a.length);a.push(29,0,0,0,0);break;case"array":case"delta":a.push(...this.encodeNumber(c));for(let e=1,t=i.length;e<t;++e)a.push(...this.encodeNumber(i[e]));break;default:throw new FormatError(`Unknown data type of ${o}`)}}a.push(...e.opcodes[r])}}return a}compileStringIndex(e){const t=new CFFIndex;for(const a of e)t.add(stringToBytes(a));return this.compileIndex(t)}compileCharStrings(e){cons\ +t t=new CFFIndex;for(let a=0;a<e.count;a++){const r=e.get(a);0!==r.length?t.add(r):t.add(new Uint8Array([139,14]))}return this.compileIndex(t)}compileCharset(e,t,a,r){let i;const n=t-1;if(r){const e=n-1;i=new Uint8Array([2,0,1,e>>8&255,255&e])}else{i=new Uint8Array(1+2*n);i[0]=0;let t=0;const r=e.charset.length;let s=!1;for(let n=1;n<i.length;n+=2){let o=0;if(t<r){const r=e.charset[t++];o=a.getSID(r);if(-1===o){o=0;if(!s){s=!0;warn(`Couldn\'t find ${r} in CFF strings`)}}}i[n]=o>>8&255;i[n+1]=255&\ +o}}return this.compileTypedArray(i)}compileEncoding(e){return this.compileTypedArray(e.raw)}compileFDSelect(e){const t=e.format;let a,r;switch(t){case 0:a=new Uint8Array(1+e.fdSelect.length);a[0]=t;for(r=0;r<e.fdSelect.length;r++)a[r+1]=e.fdSelect[r];break;case 3:const i=0;let n=e.fdSelect[0];const s=[t,0,0,i>>8&255,255&i,n];for(r=1;r<e.fdSelect.length;r++){const t=e.fdSelect[r];if(t!==n){s.push(r>>8&255,255&r,t);n=t}}const o=(s.length-3)/3;s[1]=o>>8&255;s[2]=255&o;s.push(r>>8&255,255&r);a=new U\ +int8Array(s)}return this.compileTypedArray(a)}compileTypedArray(e){return Array.from(e)}compileIndex(e,t=[]){const a=e.objects,r=a.length;if(0===r)return[0,0];const i=[r>>8&255,255&r];let n,s,o=1;for(n=0;n<r;++n)o+=a[n].length;s=o<256?1:o<65536?2:o<16777216?3:4;i.push(s);let c=1;for(n=0;n<r+1;n++){1===s?i.push(255&c):2===s?i.push(c>>8&255,255&c):3===s?i.push(c>>16&255,c>>8&255,255&c):i.push(c>>>24&255,c>>16&255,c>>8&255,255&c);a[n]&&(c+=a[n].length)}for(n=0;n<r;n++){t[n]&&t[n].offset(i.length);i\ +.push(...a[n])}return i}}const Jr=getLookupTableFactory((function(e){e["Times-Roman"]="Times-Roman";e.Helvetica="Helvetica";e.Courier="Courier";e.Symbol="Symbol";e["Times-Bold"]="Times-Bold";e["Helvetica-Bold"]="Helvetica-Bold";e["Courier-Bold"]="Courier-Bold";e.ZapfDingbats="ZapfDingbats";e["Times-Italic"]="Times-Italic";e["Helvetica-Oblique"]="Helvetica-Oblique";e["Courier-Oblique"]="Courier-Oblique";e["Times-BoldItalic"]="Times-BoldItalic";e["Helvetica-BoldOblique"]="Helvetica-BoldOblique";e[\ +"Courier-BoldOblique"]="Courier-BoldOblique";e.ArialNarrow="Helvetica";e["ArialNarrow-Bold"]="Helvetica-Bold";e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique";e["ArialNarrow-Italic"]="Helvetica-Oblique";e.ArialBlack="Helvetica";e["ArialBlack-Bold"]="Helvetica-Bold";e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique";e["ArialBlack-Italic"]="Helvetica-Oblique";e["Arial-Black"]="Helvetica";e["Arial-Black-Bold"]="Helvetica-Bold";e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Black-It\ +alic"]="Helvetica-Oblique";e.Arial="Helvetica";e["Arial-Bold"]="Helvetica-Bold";e["Arial-BoldItalic"]="Helvetica-BoldOblique";e["Arial-Italic"]="Helvetica-Oblique";e.ArialMT="Helvetica";e["Arial-BoldItalicMT"]="Helvetica-BoldOblique";e["Arial-BoldMT"]="Helvetica-Bold";e["Arial-ItalicMT"]="Helvetica-Oblique";e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-BoldOblique";e["Arial-BoldMT-Bold"]="Helvetica-Bold";e["Arial-ItalicMT-Italic"]="Helvetica-Oblique";e.ArialUnicodeMS="Helvetica";e["ArialUnicodeM\ +S-Bold"]="Helvetica-Bold";e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique";e["ArialUnicodeMS-Italic"]="Helvetica-Oblique";e["Courier-BoldItalic"]="Courier-BoldOblique";e["Courier-Italic"]="Courier-Oblique";e.CourierNew="Courier";e["CourierNew-Bold"]="Courier-Bold";e["CourierNew-BoldItalic"]="Courier-BoldOblique";e["CourierNew-Italic"]="Courier-Oblique";e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique";e["CourierNewPS-BoldMT"]="Courier-Bold";e["CourierNewPS-ItalicMT"]="Courier-Oblique";e\ +.CourierNewPSMT="Courier";e["Helvetica-BoldItalic"]="Helvetica-BoldOblique";e["Helvetica-Italic"]="Helvetica-Oblique";e["HelveticaLTStd-Bold"]="Helvetica-Bold";e["Symbol-Bold"]="Symbol";e["Symbol-BoldItalic"]="Symbol";e["Symbol-Italic"]="Symbol";e.TimesNewRoman="Times-Roman";e["TimesNewRoman-Bold"]="Times-Bold";e["TimesNewRoman-BoldItalic"]="Times-BoldItalic";e["TimesNewRoman-Italic"]="Times-Italic";e.TimesNewRomanPS="Times-Roman";e["TimesNewRomanPS-Bold"]="Times-Bold";e["TimesNewRomanPS-BoldIta\ +lic"]="Times-BoldItalic";e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic";e["TimesNewRomanPS-BoldMT"]="Times-Bold";e["TimesNewRomanPS-Italic"]="Times-Italic";e["TimesNewRomanPS-ItalicMT"]="Times-Italic";e.TimesNewRomanPSMT="Times-Roman";e["TimesNewRomanPSMT-Bold"]="Times-Bold";e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic";e["TimesNewRomanPSMT-Italic"]="Times-Italic"})),Yr=getLookupTableFactory((function(e){e.Courier="FoxitFixed.pfb";e["Courier-Bold"]="FoxitFixedBold.pfb";e["Courier-Bo\ +ldOblique"]="FoxitFixedBoldItalic.pfb";e["Courier-Oblique"]="FoxitFixedItalic.pfb";e.Helvetica="LiberationSans-Regular.ttf";e["Helvetica-Bold"]="LiberationSans-Bold.ttf";e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf";e["Helvetica-Oblique"]="LiberationSans-Italic.ttf";e["Times-Roman"]="FoxitSerif.pfb";e["Times-Bold"]="FoxitSerifBold.pfb";e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb";e["Times-Italic"]="FoxitSerifItalic.pfb";e.Symbol="FoxitSymbol.pfb";e.ZapfDingbats="FoxitDingbats.pf\ +b";e["LiberationSans-Regular"]="LiberationSans-Regular.ttf";e["LiberationSans-Bold"]="LiberationSans-Bold.ttf";e["LiberationSans-Italic"]="LiberationSans-Italic.ttf";e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"})),Zr=getLookupTableFactory((function(e){e.Calibri="Helvetica";e["Calibri-Bold"]="Helvetica-Bold";e["Calibri-BoldItalic"]="Helvetica-BoldOblique";e["Calibri-Italic"]="Helvetica-Oblique";e.CenturyGothic="Helvetica";e["CenturyGothic-Bold"]="Helvetica-Bold";e["CenturyGothic\ +-BoldItalic"]="Helvetica-BoldOblique";e["CenturyGothic-Italic"]="Helvetica-Oblique";e.ComicSansMS="Comic Sans MS";e["ComicSansMS-Bold"]="Comic Sans MS-Bold";e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic";e["ComicSansMS-Italic"]="Comic Sans MS-Italic";e.GillSansMT="Helvetica";e["GillSansMT-Bold"]="Helvetica-Bold";e["GillSansMT-BoldItalic"]="Helvetica-BoldOblique";e["GillSansMT-Italic"]="Helvetica-Oblique";e.Impact="Helvetica";e["ItcSymbol-Bold"]="Helvetica-Bold";e["ItcSymbol-BoldItalic"]=\ +"Helvetica-BoldOblique";e["ItcSymbol-Book"]="Helvetica";e["ItcSymbol-BookItalic"]="Helvetica-Oblique";e["ItcSymbol-Medium"]="Helvetica";e["ItcSymbol-MediumItalic"]="Helvetica-Oblique";e.LucidaConsole="Courier";e["LucidaConsole-Bold"]="Courier-Bold";e["LucidaConsole-BoldItalic"]="Courier-BoldOblique";e["LucidaConsole-Italic"]="Courier-Oblique";e["LucidaSans-Demi"]="Helvetica-Bold";e["MS-Gothic"]="MS Gothic";e["MS-Gothic-Bold"]="MS Gothic-Bold";e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic";e["M\ +S-Gothic-Italic"]="MS Gothic-Italic";e["MS-Mincho"]="MS Mincho";e["MS-Mincho-Bold"]="MS Mincho-Bold";e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic";e["MS-Mincho-Italic"]="MS Mincho-Italic";e["MS-PGothic"]="MS PGothic";e["MS-PGothic-Bold"]="MS PGothic-Bold";e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic";e["MS-PGothic-Italic"]="MS PGothic-Italic";e["MS-PMincho"]="MS PMincho";e["MS-PMincho-Bold"]="MS PMincho-Bold";e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic";e["MS-PMincho-Italic"]="MS P\ +Mincho-Italic";e.NuptialScript="Times-Italic";e.SegoeUISymbol="Helvetica"})),Qr=getLookupTableFactory((function(e){e["Adobe Jenson"]=!0;e["Adobe Text"]=!0;e.Albertus=!0;e.Aldus=!0;e.Alexandria=!0;e.Algerian=!0;e["American Typewriter"]=!0;e.Antiqua=!0;e.Apex=!0;e.Arno=!0;e.Aster=!0;e.Aurora=!0;e.Baskerville=!0;e.Bell=!0;e.Bembo=!0;e["Bembo Schoolbook"]=!0;e.Benguiat=!0;e["Berkeley Old Style"]=!0;e["Bernhard Modern"]=!0;e["Berthold City"]=!0;e.Bodoni=!0;e["Bauer Bodoni"]=!0;e["Book Antiqua"]=!0;e.\ +Bookman=!0;e["Bordeaux Roman"]=!0;e["Californian FB"]=!0;e.Calisto=!0;e.Calvert=!0;e.Capitals=!0;e.Cambria=!0;e.Cartier=!0;e.Caslon=!0;e.Catull=!0;e.Centaur=!0;e["Century Old Style"]=!0;e["Century Schoolbook"]=!0;e.Chaparral=!0;e["Charis SIL"]=!0;e.Cheltenham=!0;e["Cholla Slab"]=!0;e.Clarendon=!0;e.Clearface=!0;e.Cochin=!0;e.Colonna=!0;e["Computer Modern"]=!0;e["Concrete Roman"]=!0;e.Constantia=!0;e["Cooper Black"]=!0;e.Corona=!0;e.Ecotype=!0;e.Egyptienne=!0;e.Elephant=!0;e.Excelsior=!0;e.Fairfi\ +eld=!0;e["FF Scala"]=!0;e.Folkard=!0;e.Footlight=!0;e.FreeSerif=!0;e["Friz Quadrata"]=!0;e.Garamond=!0;e.Gentium=!0;e.Georgia=!0;e.Gloucester=!0;e["Goudy Old Style"]=!0;e["Goudy Schoolbook"]=!0;e["Goudy Pro Font"]=!0;e.Granjon=!0;e["Guardian Egyptian"]=!0;e.Heather=!0;e.Hercules=!0;e["High Tower Text"]=!0;e.Hiroshige=!0;e["Hoefler Text"]=!0;e["Humana Serif"]=!0;e.Imprint=!0;e["Ionic No. 5"]=!0;e.Janson=!0;e.Joanna=!0;e.Korinna=!0;e.Lexicon=!0;e.LiberationSerif=!0;e["Liberation Serif"]=!0;e["Linu\ +x Libertine"]=!0;e.Literaturnaya=!0;e.Lucida=!0;e["Lucida Bright"]=!0;e.Melior=!0;e.Memphis=!0;e.Miller=!0;e.Minion=!0;e.Modern=!0;e["Mona Lisa"]=!0;e["Mrs Eaves"]=!0;e["MS Serif"]=!0;e["Museo Slab"]=!0;e["New York"]=!0;e["Nimbus Roman"]=!0;e["NPS Rawlinson Roadway"]=!0;e.NuptialScript=!0;e.Palatino=!0;e.Perpetua=!0;e.Plantin=!0;e["Plantin Schoolbook"]=!0;e.Playbill=!0;e["Poor Richard"]=!0;e["Rawlinson Roadway"]=!0;e.Renault=!0;e.Requiem=!0;e.Rockwell=!0;e.Roman=!0;e["Rotis Serif"]=!0;e.Sabon=!0\ +;e.Scala=!0;e.Seagull=!0;e.Sistina=!0;e.Souvenir=!0;e.STIX=!0;e["Stone Informal"]=!0;e["Stone Serif"]=!0;e.Sylfaen=!0;e.Times=!0;e.Trajan=!0;e["Trinité"]=!0;e["Trump Mediaeval"]=!0;e.Utopia=!0;e["Vale Type"]=!0;e["Bitstream Vera"]=!0;e["Vera Serif"]=!0;e.Versailles=!0;e.Wanted=!0;e.Weiss=!0;e["Wide Latin"]=!0;e.Windsor=!0;e.XITS=!0})),ei=getLookupTableFactory((function(e){e.Dingbats=!0;e.Symbol=!0;e.ZapfDingbats=!0;e.Wingdings=!0;e["Wingdings-Bold"]=!0;e["Wingdings-Regular"]=!0})),ti=getLookupTa\ +bleFactory((function(e){e[2]=10;e[3]=32;e[4]=33;e[5]=34;e[6]=35;e[7]=36;e[8]=37;e[9]=38;e[10]=39;e[11]=40;e[12]=41;e[13]=42;e[14]=43;e[15]=44;e[16]=45;e[17]=46;e[18]=47;e[19]=48;e[20]=49;e[21]=50;e[22]=51;e[23]=52;e[24]=53;e[25]=54;e[26]=55;e[27]=56;e[28]=57;e[29]=58;e[30]=894;e[31]=60;e[32]=61;e[33]=62;e[34]=63;e[35]=64;e[36]=65;e[37]=66;e[38]=67;e[39]=68;e[40]=69;e[41]=70;e[42]=71;e[43]=72;e[44]=73;e[45]=74;e[46]=75;e[47]=76;e[48]=77;e[49]=78;e[50]=79;e[51]=80;e[52]=81;e[53]=82;e[54]=83;e[55]=\ +84;e[56]=85;e[57]=86;e[58]=87;e[59]=88;e[60]=89;e[61]=90;e[62]=91;e[63]=92;e[64]=93;e[65]=94;e[66]=95;e[67]=96;e[68]=97;e[69]=98;e[70]=99;e[71]=100;e[72]=101;e[73]=102;e[74]=103;e[75]=104;e[76]=105;e[77]=106;e[78]=107;e[79]=108;e[80]=109;e[81]=110;e[82]=111;e[83]=112;e[84]=113;e[85]=114;e[86]=115;e[87]=116;e[88]=117;e[89]=118;e[90]=119;e[91]=120;e[92]=121;e[93]=122;e[94]=123;e[95]=124;e[96]=125;e[97]=126;e[98]=196;e[99]=197;e[100]=199;e[101]=201;e[102]=209;e[103]=214;e[104]=220;e[105]=225;e[106]\ +=224;e[107]=226;e[108]=228;e[109]=227;e[110]=229;e[111]=231;e[112]=233;e[113]=232;e[114]=234;e[115]=235;e[116]=237;e[117]=236;e[118]=238;e[119]=239;e[120]=241;e[121]=243;e[122]=242;e[123]=244;e[124]=246;e[125]=245;e[126]=250;e[127]=249;e[128]=251;e[129]=252;e[130]=8224;e[131]=176;e[132]=162;e[133]=163;e[134]=167;e[135]=8226;e[136]=182;e[137]=223;e[138]=174;e[139]=169;e[140]=8482;e[141]=180;e[142]=168;e[143]=8800;e[144]=198;e[145]=216;e[146]=8734;e[147]=177;e[148]=8804;e[149]=8805;e[150]=165;e[15\ +1]=181;e[152]=8706;e[153]=8721;e[154]=8719;e[156]=8747;e[157]=170;e[158]=186;e[159]=8486;e[160]=230;e[161]=248;e[162]=191;e[163]=161;e[164]=172;e[165]=8730;e[166]=402;e[167]=8776;e[168]=8710;e[169]=171;e[170]=187;e[171]=8230;e[179]=8220;e[180]=8221;e[181]=8216;e[182]=8217;e[200]=193;e[203]=205;e[207]=211;e[210]=218;e[223]=711;e[224]=321;e[225]=322;e[226]=352;e[227]=353;e[228]=381;e[229]=382;e[233]=221;e[234]=253;e[252]=263;e[253]=268;e[254]=269;e[258]=258;e[260]=260;e[261]=261;e[265]=280;e[266]=\ +281;e[267]=282;e[268]=283;e[269]=313;e[275]=323;e[276]=324;e[278]=328;e[283]=344;e[284]=345;e[285]=346;e[286]=347;e[292]=367;e[295]=377;e[296]=378;e[298]=380;e[305]=963;e[306]=964;e[307]=966;e[308]=8215;e[309]=8252;e[310]=8319;e[311]=8359;e[312]=8592;e[313]=8593;e[337]=9552;e[493]=1039;e[494]=1040;e[570]=1040;e[571]=1041;e[572]=1042;e[573]=1043;e[574]=1044;e[575]=1045;e[576]=1046;e[577]=1047;e[578]=1048;e[579]=1049;e[580]=1050;e[581]=1051;e[582]=1052;e[583]=1053;e[584]=1054;e[585]=1055;e[586]=10\ +56;e[587]=1057;e[588]=1058;e[589]=1059;e[590]=1060;e[591]=1061;e[592]=1062;e[593]=1063;e[594]=1064;e[595]=1065;e[596]=1066;e[597]=1067;e[598]=1068;e[599]=1069;e[600]=1070;e[672]=1488;e[673]=1489;e[674]=1490;e[675]=1491;e[676]=1492;e[677]=1493;e[678]=1494;e[679]=1495;e[680]=1496;e[681]=1497;e[682]=1498;e[683]=1499;e[684]=1500;e[685]=1501;e[686]=1502;e[687]=1503;e[688]=1504;e[689]=1505;e[690]=1506;e[691]=1507;e[692]=1508;e[693]=1509;e[694]=1510;e[695]=1511;e[696]=1512;e[697]=1513;e[698]=1514;e[705\ +]=1524;e[706]=8362;e[710]=64288;e[711]=64298;e[759]=1617;e[761]=1776;e[763]=1778;e[775]=1652;e[777]=1764;e[778]=1780;e[779]=1781;e[780]=1782;e[782]=771;e[783]=64726;e[786]=8363;e[788]=8532;e[790]=768;e[791]=769;e[792]=768;e[795]=803;e[797]=64336;e[798]=64337;e[799]=64342;e[800]=64343;e[801]=64344;e[802]=64345;e[803]=64362;e[804]=64363;e[805]=64364;e[2424]=7821;e[2425]=7822;e[2426]=7823;e[2427]=7824;e[2428]=7825;e[2429]=7826;e[2430]=7827;e[2433]=7682;e[2678]=8045;e[2679]=8046;e[2830]=1552;e[2838]\ +=686;e[2840]=751;e[2842]=753;e[2843]=754;e[2844]=755;e[2846]=757;e[2856]=767;e[2857]=848;e[2858]=849;e[2862]=853;e[2863]=854;e[2864]=855;e[2865]=861;e[2866]=862;e[2906]=7460;e[2908]=7462;e[2909]=7463;e[2910]=7464;e[2912]=7466;e[2913]=7467;e[2914]=7468;e[2916]=7470;e[2917]=7471;e[2918]=7472;e[2920]=7474;e[2921]=7475;e[2922]=7476;e[2924]=7478;e[2925]=7479;e[2926]=7480;e[2928]=7482;e[2929]=7483;e[2930]=7484;e[2932]=7486;e[2933]=7487;e[2934]=7488;e[2936]=7490;e[2937]=7491;e[2938]=7492;e[2940]=7494;e\ +[2941]=7495;e[2942]=7496;e[2944]=7498;e[2946]=7500;e[2948]=7502;e[2950]=7504;e[2951]=7505;e[2952]=7506;e[2954]=7508;e[2955]=7509;e[2956]=7510;e[2958]=7512;e[2959]=7513;e[2960]=7514;e[2962]=7516;e[2963]=7517;e[2964]=7518;e[2966]=7520;e[2967]=7521;e[2968]=7522;e[2970]=7524;e[2971]=7525;e[2972]=7526;e[2974]=7528;e[2975]=7529;e[2976]=7530;e[2978]=1537;e[2979]=1538;e[2980]=1539;e[2982]=1549;e[2983]=1551;e[2984]=1552;e[2986]=1554;e[2987]=1555;e[2988]=1556;e[2990]=1623;e[2991]=1624;e[2995]=1775;e[2999]\ +=1791;e[3002]=64290;e[3003]=64291;e[3004]=64292;e[3006]=64294;e[3007]=64295;e[3008]=64296;e[3011]=1900;e[3014]=8223;e[3015]=8244;e[3017]=7532;e[3018]=7533;e[3019]=7534;e[3075]=7590;e[3076]=7591;e[3079]=7594;e[3080]=7595;e[3083]=7598;e[3084]=7599;e[3087]=7602;e[3088]=7603;e[3091]=7606;e[3092]=7607;e[3095]=7610;e[3096]=7611;e[3099]=7614;e[3100]=7615;e[3103]=7618;e[3104]=7619;e[3107]=8337;e[3108]=8338;e[3116]=1884;e[3119]=1885;e[3120]=1885;e[3123]=1886;e[3124]=1886;e[3127]=1887;e[3128]=1887;e[3131]\ +=1888;e[3132]=1888;e[3135]=1889;e[3136]=1889;e[3139]=1890;e[3140]=1890;e[3143]=1891;e[3144]=1891;e[3147]=1892;e[3148]=1892;e[3153]=580;e[3154]=581;e[3157]=584;e[3158]=585;e[3161]=588;e[3162]=589;e[3165]=891;e[3166]=892;e[3169]=1274;e[3170]=1275;e[3173]=1278;e[3174]=1279;e[3181]=7622;e[3182]=7623;e[3282]=11799;e[3316]=578;e[3379]=42785;e[3393]=1159;e[3416]=8377})),ai=getLookupTableFactory((function(e){e[227]=322;e[264]=261;e[291]=346})),ri=getLookupTableFactory((function(e){e[1]=32;e[4]=65;e[5]=1\ +92;e[6]=193;e[9]=196;e[17]=66;e[18]=67;e[21]=268;e[24]=68;e[28]=69;e[29]=200;e[30]=201;e[32]=282;e[38]=70;e[39]=71;e[44]=72;e[47]=73;e[48]=204;e[49]=205;e[58]=74;e[60]=75;e[62]=76;e[68]=77;e[69]=78;e[75]=79;e[76]=210;e[80]=214;e[87]=80;e[89]=81;e[90]=82;e[92]=344;e[94]=83;e[97]=352;e[100]=84;e[104]=85;e[109]=220;e[115]=86;e[116]=87;e[121]=88;e[122]=89;e[124]=221;e[127]=90;e[129]=381;e[258]=97;e[259]=224;e[260]=225;e[263]=228;e[268]=261;e[271]=98;e[272]=99;e[273]=263;e[275]=269;e[282]=100;e[286]=\ +101;e[287]=232;e[288]=233;e[290]=283;e[295]=281;e[296]=102;e[336]=103;e[346]=104;e[349]=105;e[350]=236;e[351]=237;e[361]=106;e[364]=107;e[367]=108;e[371]=322;e[373]=109;e[374]=110;e[381]=111;e[382]=242;e[383]=243;e[386]=246;e[393]=112;e[395]=113;e[396]=114;e[398]=345;e[400]=115;e[401]=347;e[403]=353;e[410]=116;e[437]=117;e[442]=252;e[448]=118;e[449]=119;e[454]=120;e[455]=121;e[457]=253;e[460]=122;e[462]=382;e[463]=380;e[853]=44;e[855]=58;e[856]=46;e[876]=47;e[878]=45;e[882]=45;e[894]=40;e[895]=4\ +1;e[896]=91;e[897]=93;e[923]=64;e[940]=163;e[1004]=48;e[1005]=49;e[1006]=50;e[1007]=51;e[1008]=52;e[1009]=53;e[1010]=54;e[1011]=55;e[1012]=56;e[1013]=57;e[1081]=37;e[1085]=43;e[1086]=45}));function getStandardFontName(e){const t=normalizeFontName(e);return Jr()[t]}function isKnownFontName(e){const t=normalizeFontName(e);return!!(Jr()[t]||Zr()[t]||Qr()[t]||ei()[t])}class ToUnicodeMap{constructor(e=[]){this._map=e}get length(){return this._map.length}forEach(e){for(const t in this._map)e(t,this._m\ +ap[t].codePointAt(0))}has(e){return void 0!==this._map[e]}get(e){return this._map[e]}charCodeOf(e){const t=this._map;if(t.length<=65536)return t.indexOf(e);for(const a in t)if(t[a]===e)return 0|a;return-1}amend(e){for(const t in e)this._map[t]=e[t]}}class IdentityToUnicodeMap{constructor(e,t){this.firstChar=e;this.lastChar=t}get length(){return this.lastChar+1-this.firstChar}forEach(e){for(let t=this.firstChar,a=this.lastChar;t<=a;t++)e(t,t)}has(e){return this.firstChar<=e&&e<=this.lastChar}get(\ +e){if(this.firstChar<=e&&e<=this.lastChar)return String.fromCharCode(e)}charCodeOf(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1}amend(e){unreachable("Should not call amend()")}}class CFFFont{constructor(e,t){this.properties=t;const a=new CFFParser(e,t,Rr);this.cff=a.parse();this.cff.duplicateFirstGlyph();const r=new CFFCompiler(this.cff);this.seacs=this.cff.seacs;try{this.data=r.compile()}catch{warn("Failed to compile font "+t.loadedName);this.data=e}this._createBuiltI\ +nEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){const e=this.cff,t=this.properties,{cidToGidMap:a,cMap:r}=t,i=e.charset.charset;let n,s;if(t.composite){let t,o;if(a?.length>0){t=Object.create(null);for(let e=0,r=a.length;e<r;e++){const r=a[e];void 0!==r&&(t[r]=e)}}n=Object.create(null);if(e.isCIDFont)for(s=0;s<i.length;s++){const e=i[s];o=r.charCodeOf(e);void 0!==t?.[o]&&(o=t[o]);n[o]=s}else for(s=0;s<e.charStrings.coun\ +t;s++){o=r.charCodeOf(s);n[o]=s}return n}let o=e.encoding?e.encoding.encoding:null;t.isInternalFont&&(o=t.defaultEncoding);n=type1FontGlyphMapping(t,o,i);return n}hasGlyphId(e){return this.cff.hasGlyphId(e)}_createBuiltInEncoding(){const{charset:e,encoding:t}=this.cff;if(!e||!t)return;const a=e.charset,r=t.encoding,i=[];for(const e in r){const t=r[e];if(t>=0){const r=a[t];r&&(i[e]=r)}}i.length>0&&(this.properties.builtInEncoding=i)}}function getFloat214(e,t){return readInt16(e,t)/16384}function \ +getSubroutineBias(e){const t=e.length;let a=32768;t<1240?a=107:t<33900&&(a=1131);return a}function parseCmap(e,t,a){const r=1===readUint16(e,t+2)?readUint32(e,t+8):readUint32(e,t+16),i=readUint16(e,t+r);let n,s,o;if(4===i){readUint16(e,t+r+2);const a=readUint16(e,t+r+6)>>1;s=t+r+14;n=[];for(o=0;o<a;o++,s+=2)n[o]={end:readUint16(e,s)};s+=2;for(o=0;o<a;o++,s+=2)n[o].start=readUint16(e,s);for(o=0;o<a;o++,s+=2)n[o].idDelta=readUint16(e,s);for(o=0;o<a;o++,s+=2){let t=readUint16(e,s);if(0!==t){n[o].id\ +s=[];for(let a=0,r=n[o].end-n[o].start+1;a<r;a++){n[o].ids[a]=readUint16(e,s+t);t+=2}}}return n}if(12===i){const a=readUint32(e,t+r+12);s=t+r+16;n=[];for(o=0;o<a;o++){t=readUint32(e,s);n.push({start:t,end:readUint32(e,s+4),idDelta:readUint32(e,s+8)-t});s+=12}return n}throw new FormatError(`unsupported cmap: ${i}`)}function parseCff(e,t,a,r){const i=new CFFParser(new Stream(e,t,a-t),{},r).parse();return{glyphs:i.charStrings.objects,subrs:i.topDict.privateDict?.subrsIndex?.objects,gsubrs:i.globalS\ +ubrIndex?.objects,isCFFCIDFont:i.isCIDFont,fdSelect:i.fdSelect,fdArray:i.fdArray}}function lookupCmap(e,t){const a=t.codePointAt(0);let r=0,i=0,n=e.length-1;for(;i<n;){const t=i+n+1>>1;a<e[t].start?n=t-1:i=t}e[i].start<=a&&a<=e[i].end&&(r=e[i].idDelta+(e[i].ids?e[i].ids[a-e[i].start]:a)&65535);return{charCode:a,glyphId:r}}function compileGlyf(e,t,a){function moveTo(e,a){s&&t.add("L",s);s=[e,a];t.add("M",[e,a])}function lineTo(e,a){t.add("L",[e,a])}function quadraticCurveTo(e,a,r,i){t.add("Q",[e,\ +a,r,i])}let r=0;const i=readInt16(e,r);let n,s=null,o=0,c=0;r+=10;if(i<0)do{n=readUint16(e,r);const i=readUint16(e,r+2);r+=4;let s,l;if(1&n){if(2&n){s=readInt16(e,r);l=readInt16(e,r+2)}else{s=readUint16(e,r);l=readUint16(e,r+2)}r+=4}else if(2&n){s=readInt8(e,r++);l=readInt8(e,r++)}else{s=e[r++];l=e[r++]}if(2&n){o=s;c=l}else{o=0;c=0}let h=1,u=1,d=0,f=0;if(8&n){h=u=getFloat214(e,r);r+=2}else if(64&n){h=getFloat214(e,r);u=getFloat214(e,r+2);r+=4}else if(128&n){h=getFloat214(e,r);d=getFloat214(e,r+2\ +);f=getFloat214(e,r+4);u=getFloat214(e,r+6);r+=8}const g=a.glyphs[i];if(g){t.save();t.transform([h,d,f,u,o,c]);compileGlyf(g,t,a);t.restore()}}while(32&n);else{const t=[];let a,s;for(a=0;a<i;a++){t.push(readUint16(e,r));r+=2}r+=2+readUint16(e,r);const l=t.at(-1)+1,h=[];for(;h.length<l;){n=e[r++];let t=1;8&n&&(t+=e[r++]);for(;t-- >0;)h.push({flags:n})}for(a=0;a<l;a++){switch(18&h[a].flags){case 0:o+=readInt16(e,r);r+=2;break;case 2:o-=e[r++];break;case 18:o+=e[r++]}h[a].x=o}for(a=0;a<l;a++){switc\ +h(36&h[a].flags){case 0:c+=readInt16(e,r);r+=2;break;case 4:c-=e[r++];break;case 36:c+=e[r++]}h[a].y=c}let u=0;for(r=0;r<i;r++){const e=t[r],i=h.slice(u,e+1);if(1&i[0].flags)i.push(i[0]);else if(1&i.at(-1).flags)i.unshift(i.at(-1));else{const e={flags:1,x:(i[0].x+i.at(-1).x)/2,y:(i[0].y+i.at(-1).y)/2};i.unshift(e);i.push(e)}moveTo(i[0].x,i[0].y);for(a=1,s=i.length;a<s;a++)if(1&i[a].flags)lineTo(i[a].x,i[a].y);else if(1&i[a+1].flags){quadraticCurveTo(i[a].x,i[a].y,i[a+1].x,i[a+1].y);a++}else quad\ +raticCurveTo(i[a].x,i[a].y,(i[a].x+i[a+1].x)/2,(i[a].y+i[a+1].y)/2);u=e+1}}}function compileCharString(e,t,a,r){function moveTo(e,a){c&&t.add("L",c);c=[e,a];t.add("M",[e,a])}function lineTo(e,a){t.add("L",[e,a])}function bezierCurveTo(e,a,r,i,n,s){t.add("C",[e,a,r,i,n,s])}const i=[];let n=0,s=0,o=0,c=null;!function parse(e){let c=0;for(;c<e.length;){let l,h,u,d,f,g,p,m,b,y=!1,w=e[c++];switch(w){case 1:case 3:case 18:case 23:o+=i.length>>1;y=!0;break;case 4:s+=i.pop();moveTo(n,s);y=!0;break;case \ +5:for(;i.length>0;){n+=i.shift();s+=i.shift();lineTo(n,s)}break;case 6:for(;i.length>0;){n+=i.shift();lineTo(n,s);if(0===i.length)break;s+=i.shift();lineTo(n,s)}break;case 7:for(;i.length>0;){s+=i.shift();lineTo(n,s);if(0===i.length)break;n+=i.shift();lineTo(n,s)}break;case 8:for(;i.length>0;){l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}break;case 10:m=i.pop();b=null;if(a.isCFFCIDFont){const e=a.fdSelect.getFDIndex(r);if(e>=0&&e<\ +a.fdArray.length){const t=a.fdArray[e];let r;t.privateDict?.subrsIndex&&(r=t.privateDict.subrsIndex.objects);if(r){m+=getSubroutineBias(r);b=r[m]}}else warn("Invalid fd index for glyph index.")}else b=a.subrs[m+a.subrsBias];b&&parse(b);break;case 11:return;case 12:w=e[c++];switch(w){case 34:l=n+i.shift();h=l+i.shift();f=s+i.shift();n=h+i.shift();bezierCurveTo(l,s,h,f,n,f);l=n+i.shift();h=l+i.shift();n=h+i.shift();bezierCurveTo(l,f,h,s,n,s);break;case 35:l=n+i.shift();u=s+i.shift();h=l+i.shift();\ +d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s);l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s);i.pop();break;case 36:l=n+i.shift();f=s+i.shift();h=l+i.shift();g=f+i.shift();n=h+i.shift();bezierCurveTo(l,f,h,g,n,g);l=n+i.shift();h=l+i.shift();p=g+i.shift();n=h+i.shift();bezierCurveTo(l,g,h,p,n,s);break;case 37:const e=n,t=s;l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezier\ +CurveTo(l,u,h,d,n,s);l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h;s=d;Math.abs(n-e)>Math.abs(s-t)?n+=i.shift():s+=i.shift();bezierCurveTo(l,u,h,d,n,s);break;default:throw new FormatError(`unknown operator: 12 ${w}`)}break;case 14:if(i.length>=4){const e=i.pop(),r=i.pop();s=i.pop();n=i.pop();t.save();t.translate(n,s);let o=lookupCmap(a.cmap,String.fromCharCode(a.glyphNameMap[Ar[e]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId);t.restore();o=lookupCmap(a.cmap,String.fromCha\ +rCode(a.glyphNameMap[Ar[r]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId)}return;case 19:case 20:o+=i.length>>1;c+=o+7>>3;y=!0;break;case 21:s+=i.pop();n+=i.pop();moveTo(n,s);y=!0;break;case 22:n+=i.pop();moveTo(n,s);y=!0;break;case 24:for(;i.length>2;){l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}n+=i.shift();s+=i.shift();lineTo(n,s);break;case 25:for(;i.length>6;){n+=i.shift();s+=i.shift();lineTo(n,s)}l=n+i.shift();u=s+\ +i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s);break;case 26:i.length%2&&(n+=i.shift());for(;i.length>0;){l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h;s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}break;case 27:i.length%2&&(s+=i.shift());for(;i.length>0;){l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d;bezierCurveTo(l,u,h,d,n,s)}break;case 28:i.push(readInt16(e,c));c+=2;break;case 29:m=i.pop()+a.gsubrsBias;b=a.gsubrs[m];b&&parse(b);br\ +eak;case 30:for(;i.length>0;){l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s);if(0===i.length)break;l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();s=d+i.shift();n=h+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s)}break;case 31:for(;i.length>0;){l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();s=d+i.shift();n=h+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s);if(0===i.length)break;l=n;u=s+i.shift();h=l+i.shift();d=u+i.sh\ +ift();n=h+i.shift();s=d+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s)}break;default:if(w<32)throw new FormatError(`unknown operator: ${w}`);if(w<247)i.push(w-139);else if(w<251)i.push(256*(w-247)+e[c++]+108);else if(w<255)i.push(256*-(w-251)-e[c++]-108);else{i.push((e[c]<<24|e[c+1]<<16|e[c+2]<<8|e[c+3])/65536);c+=4}}y&&(i.length=0)}}(e)}class Commands{cmds=[];transformStack=[];currentTransform=[1,0,0,1,0,0];add(e,t){if(t){const{currentTransform:a}=this;for(let e=0,r=t.length;e<r;e+=2)Uti\ +l.applyTransform(t,a,e);this.cmds.push(`${e}${t.join(" ")}`)}else this.cmds.push(e)}transform(e){this.currentTransform=Util.transform(this.currentTransform,e)}translate(e,t){this.transform([1,0,0,1,e,t])}save(){this.transformStack.push(this.currentTransform.slice())}restore(){this.currentTransform=this.transformStack.pop()||[1,0,0,1,0,0]}getSVG(){return this.cmds.join("")}}class CompiledFont{constructor(e){this.fontMatrix=e;this.compiledGlyphs=Object.create(null);this.compiledCharCodeToGlyphId=O\ +bject.create(null)}getPathJs(e){const{charCode:t,glyphId:a}=lookupCmap(this.cmap,e);let r,i=this.compiledGlyphs[a];if(void 0===i){try{i=this.compileGlyph(this.glyphs[a],a)}catch(e){i="";r=e}this.compiledGlyphs[a]=i}this.compiledCharCodeToGlyphId[t]??=a;if(r)throw r;return i}compileGlyph(e,a){if(!e?.length||14===e[0])return"";let r=this.fontMatrix;if(this.isCFFCIDFont){const e=this.fdSelect.getFDIndex(a);if(e>=0&&e<this.fdArray.length){r=this.fdArray[e].getByName("FontMatrix")||t}else warn("Inval\ +id fd index for glyph index.")}assert(isNumberArray(r,6),"Expected a valid fontMatrix.");const i=new Commands;i.transform(r.slice());this.compileGlyphImpl(e,i,a);i.add("Z");return i.getSVG()}compileGlyphImpl(){unreachable("Children classes should implement this.")}hasBuiltPath(e){const{charCode:t,glyphId:a}=lookupCmap(this.cmap,e);return void 0!==this.compiledGlyphs[a]&&void 0!==this.compiledCharCodeToGlyphId[t]}}class TrueTypeCompiled extends CompiledFont{constructor(e,t,a){super(a||[488e-6,0,0\ +,488e-6,0,0]);this.glyphs=e;this.cmap=t}compileGlyphImpl(e,t){compileGlyf(e,t,this)}}class Type2Compiled extends CompiledFont{constructor(e,t,a){super(a||[.001,0,0,.001,0,0]);this.glyphs=e.glyphs;this.gsubrs=e.gsubrs||[];this.subrs=e.subrs||[];this.cmap=t;this.glyphNameMap=Fr();this.gsubrsBias=getSubroutineBias(this.gsubrs);this.subrsBias=getSubroutineBias(this.subrs);this.isCFFCIDFont=e.isCFFCIDFont;this.fdSelect=e.fdSelect;this.fdArray=e.fdArray}compileGlyphImpl(e,t,a){compileCharString(e,t,th\ +is,a)}}class FontRendererFactory{static create(e,t){const a=new Uint8Array(e.data);let r,i,n,s,o,c;const l=readUint16(a,4);for(let e=0,h=12;e<l;e++,h+=16){const e=bytesToString(a.subarray(h,h+4)),l=readUint32(a,h+8),u=readUint32(a,h+12);switch(e){case"cmap":r=parseCmap(a,l);break;case"glyf":i=a.subarray(l,l+u);break;case"loca":n=a.subarray(l,l+u);break;case"head":c=readUint16(a,l+18);o=readUint16(a,l+50);break;case"CFF ":s=parseCff(a,l,l+u,t)}}if(i){const t=c?[1/c,0,0,1/c,0,0]:e.fontMatrix;retur\ +n new TrueTypeCompiled(function parseGlyfTable(e,t,a){let r,i;if(a){r=4;i=readUint32}else{r=2;i=(e,t)=>2*readUint16(e,t)}const n=[];let s=i(t,0);for(let a=r;a<t.length;a+=r){const r=i(t,a);n.push(e.subarray(s,r));s=r}return n}(i,n,o),r,t)}return new Type2Compiled(s,r,e.fontMatrix)}}const ii=getLookupTableFactory((function(e){e.Courier=600;e["Courier-Bold"]=600;e["Courier-BoldOblique"]=600;e["Courier-Oblique"]=600;e.Helvetica=getLookupTableFactory((function(e){e.space=278;e.exclam=278;e.quotedbl=\ +355;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=667;e.quoteright=222;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=278;e.semicolon=278;e.less=584;e.equal=584;e.greater=584;e.question=556;e.at=1015;e.A=667;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=500;e.K=667;e.L=556;e.M=833;e.N=72\ +2;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=278;e.backslash=278;e.bracketright=278;e.asciicircum=469;e.underscore=556;e.quoteleft=222;e.a=556;e.b=556;e.c=500;e.d=556;e.e=556;e.f=278;e.g=556;e.h=556;e.i=222;e.j=222;e.k=500;e.l=222;e.m=833;e.n=556;e.o=556;e.p=556;e.q=556;e.r=333;e.s=500;e.t=278;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=500;e.braceleft=334;e.bar=260;e.braceright=334;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.\ +sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=191;e.quotedblleft=333;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=537;e.bullet=350;e.quotesinglbase=222;e.quotedblbase=333;e.quotedblright=333;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e\ +.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=556;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=222;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=556;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=667;e.aacute=556;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=500;e.ecircumflex=556;e.Uring=722;e.U\ +dieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=500;e.aring=556;e.Ncommaaccent=722;e.lacute=222;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=500;e.scedilla=500;e.iacute=278;e.lozenge=471;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=556;e.Amacron=667;e.rcaron=333;e.ccedilla=500;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.d\ +caron=643;e.Umacron=722;e.uring=556;e.threesuperior=333;e.Ograve=778;e.Agrave=667;e.Abreve=667;e.multiply=584;e.uacute=556;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=500;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=260;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=333;e.omacron=556;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.E\ +th=722;e.Ccedilla=722;e.lcommaaccent=222;e.tcaron=317;e.eogonek=556;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=556;e.zacute=500;e.iogonek=222;e.Oacute=778;e.oacute=556;e.amacron=556;e.sacute=500;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=333;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=556;e.Eogonek=667;e.dcroat=556;e.threequarters=834;e.Scedilla=667;e.lcaron=299;e.Kcommaaccent=667;e.Lacute=556;e.trademark=1e3;e.edotaccent=556;e.Igrave=\ +278;e.Imacron=278;e.Lcaron=556;e.onehalf=834;e.lessequal=549;e.ocircumflex=556;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=556;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=556;e.Ccaron=722;e.ugrave=556;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=556;e.Rcommaaccent=722;e.Lcommaaccent=556;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=500;e.\ +minus=584;e.Icircumflex=278;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=584;e.odieresis=556;e.udieresis=556;e.notequal=549;e.gcommaaccent=556;e.eth=556;e.zcaron=500;e.ncommaaccent=556;e.onesuperior=333;e.imacron=278;e.Euro=556}));e["Helvetica-Bold"]=getLookupTableFactory((function(e){e.space=278;e.exclam=333;e.quotedbl=474;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=722;e.quoteright=278;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;\ +e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=333;e.semicolon=333;e.less=584;e.equal=584;e.greater=584;e.question=611;e.at=975;e.A=722;e.B=722;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=556;e.K=722;e.L=611;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=584;e.undersco\ +re=556;e.quoteleft=278;e.a=556;e.b=611;e.c=556;e.d=611;e.e=556;e.f=333;e.g=611;e.h=611;e.i=278;e.j=278;e.k=556;e.l=278;e.m=889;e.n=611;e.o=611;e.p=611;e.q=611;e.r=389;e.s=556;e.t=333;e.u=611;e.v=556;e.w=778;e.x=556;e.y=556;e.z=500;e.braceleft=389;e.bar=280;e.braceright=389;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=238;e.quotedblleft=500;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e\ +.fi=611;e.fl=611;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=556;e.bullet=350;e.quotesinglbase=278;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=611;e.Oslash=778;e.OE=1e3;e.ord\ +masculine=365;e.ae=889;e.dotlessi=278;e.lslash=278;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=611;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=722;e.aacute=556;e.Ucircumflex=722;e.yacute=556;e.scommaaccent=556;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=611;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=556;e.aring=556;e.Ncommaaccent=722;e.la\ +cute=278;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=556;e.scedilla=556;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=611;e.acircumflex=556;e.Amacron=722;e.rcaron=389;e.ccedilla=556;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=743;e.Umacron=722;e.uring=611;e.threesuperior=333;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=584;e.uacute=611;e.Tcaron=611;e.partialdiff=494;e.ydieresis=556;e.Nacute=\ +722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=556;e.nacute=611;e.umacron=611;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=280;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=611;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=389;e.eogonek=556;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=556;e.zacute=500;e.iogonek=278;e.Oacute=778;e.oacute=611;e.\ +amacron=556;e.sacute=556;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=611;e.twosuperior=333;e.Odieresis=778;e.mu=611;e.igrave=278;e.ohungarumlaut=611;e.Eogonek=667;e.dcroat=611;e.threequarters=834;e.Scedilla=667;e.lcaron=400;e.Kcommaaccent=722;e.Lacute=611;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=611;e.onehalf=834;e.lessequal=549;e.ocircumflex=611;e.ntilde=611;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=611;e.onequarter=834;e.Scaron=6\ +67;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=611;e.Ccaron=722;e.ugrave=611;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=611;e.Rcommaaccent=722;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=556;e.minus=584;e.Icircumflex=278;e.ncaron=611;e.tcommaaccent=333;e.logicalnot=584;e.odieresis=611;e.udieresis=611;e.notequal=549;e.gcommaaccent=611;e.eth=611;e.zcaron=500;e.ncommaaccen\ +t=611;e.onesuperior=333;e.imacron=278;e.Euro=556}));e["Helvetica-BoldOblique"]=getLookupTableFactory((function(e){e.space=278;e.exclam=333;e.quotedbl=474;e.numbersign=556;e.dollar=556;e.percent=889;e.ampersand=722;e.quoteright=278;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=333;e.semicolon=333;e.less=584;e.equal=584\ +;e.greater=584;e.question=611;e.at=975;e.A=722;e.B=722;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=556;e.K=722;e.L=611;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=584;e.underscore=556;e.quoteleft=278;e.a=556;e.b=611;e.c=556;e.d=611;e.e=556;e.f=333;e.g=611;e.h=611;e.i=278;e.j=278;e.k=556;e.l=278;e.m=889;e.n=611;e.o=611;e.p=611;e.q=611;e.r=389;e.s=5\ +56;e.t=333;e.u=611;e.v=556;e.w=778;e.x=556;e.y=556;e.z=500;e.braceleft=389;e.bar=280;e.braceright=389;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=167;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=238;e.quotedblleft=500;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=611;e.fl=611;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=556;e.bullet=350;e.quotesinglbase=278;e.quotedblbase=500;e.quotedblright=500;e.g\ +uillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=611;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=278;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=611;e.ecaron=556;e.Ydier\ +esis=667;e.divide=584;e.Yacute=667;e.Acircumflex=722;e.aacute=556;e.Ucircumflex=722;e.yacute=556;e.scommaaccent=556;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556;e.Uacute=722;e.uogonek=611;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=556;e.aring=556;e.Ncommaaccent=722;e.lacute=278;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=556;e.scedilla=556;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e\ +.ucircumflex=611;e.acircumflex=556;e.Amacron=722;e.rcaron=389;e.ccedilla=556;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=743;e.Umacron=722;e.uring=611;e.threesuperior=333;e.Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=584;e.uacute=611;e.Tcaron=611;e.partialdiff=494;e.ydieresis=556;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=556;e.nacute=611;e.umacron=611;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=280;e.\ +registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=611;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=389;e.eogonek=556;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=556;e.zacute=500;e.iogonek=278;e.Oacute=778;e.oacute=611;e.amacron=556;e.sacute=556;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=611;e.twosuperior=333;e.Odieresis=778;e.mu=611;e.igrave=278;e.ohungarumlaut=611;\ +e.Eogonek=667;e.dcroat=611;e.threequarters=834;e.Scedilla=667;e.lcaron=400;e.Kcommaaccent=722;e.Lacute=611;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron=611;e.onehalf=834;e.lessequal=549;e.ocircumflex=611;e.ntilde=611;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=611;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=611;e.Ccaron=722;e.ugrave=611;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=611;e.Rcom\ +maaccent=722;e.Lcommaaccent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=556;e.minus=584;e.Icircumflex=278;e.ncaron=611;e.tcommaaccent=333;e.logicalnot=584;e.odieresis=611;e.udieresis=611;e.notequal=549;e.gcommaaccent=611;e.eth=611;e.zcaron=500;e.ncommaaccent=611;e.onesuperior=333;e.imacron=278;e.Euro=556}));e["Helvetica-Oblique"]=getLookupTableFactory((function(e){e.space=278;e.exclam=278;e.quotedbl=355;e.numbersign=556;e.dol\ +lar=556;e.percent=889;e.ampersand=667;e.quoteright=222;e.parenleft=333;e.parenright=333;e.asterisk=389;e.plus=584;e.comma=278;e.hyphen=333;e.period=278;e.slash=278;e.zero=556;e.one=556;e.two=556;e.three=556;e.four=556;e.five=556;e.six=556;e.seven=556;e.eight=556;e.nine=556;e.colon=278;e.semicolon=278;e.less=584;e.equal=584;e.greater=584;e.question=556;e.at=1015;e.A=667;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=722;e.I=278;e.J=500;e.K=667;e.L=556;e.M=833;e.N=722;e.O=778;e.P=667;e.Q=778;\ +e.R=722;e.S=667;e.T=611;e.U=722;e.V=667;e.W=944;e.X=667;e.Y=667;e.Z=611;e.bracketleft=278;e.backslash=278;e.bracketright=278;e.asciicircum=469;e.underscore=556;e.quoteleft=222;e.a=556;e.b=556;e.c=500;e.d=556;e.e=556;e.f=278;e.g=556;e.h=556;e.i=222;e.j=222;e.k=500;e.l=222;e.m=833;e.n=556;e.o=556;e.p=556;e.q=556;e.r=333;e.s=500;e.t=278;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=500;e.braceleft=334;e.bar=260;e.braceright=334;e.asciitilde=584;e.exclamdown=333;e.cent=556;e.sterling=556;e.fraction=16\ +7;e.yen=556;e.florin=556;e.section=556;e.currency=556;e.quotesingle=191;e.quotedblleft=333;e.guillemotleft=556;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=556;e.dagger=556;e.daggerdbl=556;e.periodcentered=278;e.paragraph=537;e.bullet=350;e.quotesinglbase=222;e.quotedblbase=333;e.quotedblright=333;e.guillemotright=556;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=611;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=\ +333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=370;e.Lslash=556;e.Oslash=778;e.OE=1e3;e.ordmasculine=365;e.ae=889;e.dotlessi=278;e.lslash=222;e.oslash=611;e.oe=944;e.germandbls=611;e.Idieresis=278;e.eacute=556;e.abreve=556;e.uhungarumlaut=556;e.ecaron=556;e.Ydieresis=667;e.divide=584;e.Yacute=667;e.Acircumflex=667;e.aacute=556;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=500;e.ecircumflex=556;e.Uring=722;e.Udieresis=722;e.aogonek=556\ +;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=737;e.Emacron=667;e.ccaron=500;e.aring=556;e.Ncommaaccent=722;e.lacute=222;e.agrave=556;e.Tcommaaccent=611;e.Cacute=722;e.atilde=556;e.Edotaccent=667;e.scaron=500;e.scedilla=500;e.iacute=278;e.lozenge=471;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=556;e.Amacron=667;e.rcaron=333;e.ccedilla=500;e.Zdotaccent=611;e.Thorn=667;e.Omacron=778;e.Racute=722;e.Sacute=667;e.dcaron=643;e.Umacron=722;e.\ +uring=556;e.threesuperior=333;e.Ograve=778;e.Agrave=667;e.Abreve=667;e.multiply=584;e.uacute=556;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=556;e.edieresis=556;e.cacute=500;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=278;e.plusminus=584;e.brokenbar=260;e.registered=737;e.Gbreve=778;e.Idotaccent=278;e.summation=600;e.Egrave=667;e.racute=333;e.omacron=556;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lc\ +ommaaccent=222;e.tcaron=317;e.eogonek=556;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=556;e.zacute=500;e.iogonek=222;e.Oacute=778;e.oacute=556;e.amacron=556;e.sacute=500;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=333;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=556;e.Eogonek=667;e.dcroat=556;e.threequarters=834;e.Scedilla=667;e.lcaron=299;e.Kcommaaccent=667;e.Lacute=556;e.trademark=1e3;e.edotaccent=556;e.Igrave=278;e.Imacron=278;e.Lcaron\ +=556;e.onehalf=834;e.lessequal=549;e.ocircumflex=556;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=556;e.gbreve=556;e.onequarter=834;e.Scaron=667;e.Scommaaccent=667;e.Ohungarumlaut=778;e.degree=400;e.ograve=556;e.Ccaron=722;e.ugrave=556;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=556;e.Rcommaaccent=722;e.Lcommaaccent=556;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=778;e.zdotaccent=500;e.Ecaron=667;e.Iogonek=278;e.kcommaaccent=500;e.minus=584;e.Icircumflex=27\ +8;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=584;e.odieresis=556;e.udieresis=556;e.notequal=549;e.gcommaaccent=556;e.eth=556;e.zcaron=500;e.ncommaaccent=556;e.onesuperior=333;e.imacron=278;e.Euro=556}));e.Symbol=getLookupTableFactory((function(e){e.space=250;e.exclam=333;e.universal=713;e.numbersign=500;e.existential=549;e.percent=833;e.ampersand=778;e.suchthat=439;e.parenleft=333;e.parenright=333;e.asteriskmath=500;e.plus=549;e.comma=250;e.minus=549;e.period=250;e.slash=278;e.zero=500;e.one=5\ +00;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=278;e.semicolon=278;e.less=549;e.equal=549;e.greater=549;e.question=444;e.congruent=549;e.Alpha=722;e.Beta=667;e.Chi=722;e.Delta=612;e.Epsilon=611;e.Phi=763;e.Gamma=603;e.Eta=722;e.Iota=333;e.theta1=631;e.Kappa=722;e.Lambda=686;e.Mu=889;e.Nu=722;e.Omicron=722;e.Pi=768;e.Theta=741;e.Rho=556;e.Sigma=592;e.Tau=611;e.Upsilon=690;e.sigma1=439;e.Omega=768;e.Xi=645;e.Psi=795;e.Zeta=611;e.bracketleft=333;\ +e.therefore=863;e.bracketright=333;e.perpendicular=658;e.underscore=500;e.radicalex=500;e.alpha=631;e.beta=549;e.chi=549;e.delta=494;e.epsilon=439;e.phi=521;e.gamma=411;e.eta=603;e.iota=329;e.phi1=603;e.kappa=549;e.lambda=549;e.mu=576;e.nu=521;e.omicron=549;e.pi=549;e.theta=521;e.rho=549;e.sigma=603;e.tau=439;e.upsilon=576;e.omega1=713;e.omega=686;e.xi=493;e.psi=686;e.zeta=494;e.braceleft=480;e.bar=200;e.braceright=480;e.similar=549;e.Euro=750;e.Upsilon1=620;e.minute=247;e.lessequal=549;e.fracti\ +on=167;e.infinity=713;e.florin=500;e.club=753;e.diamond=753;e.heart=753;e.spade=753;e.arrowboth=1042;e.arrowleft=987;e.arrowup=603;e.arrowright=987;e.arrowdown=603;e.degree=400;e.plusminus=549;e.second=411;e.greaterequal=549;e.multiply=549;e.proportional=713;e.partialdiff=494;e.bullet=460;e.divide=549;e.notequal=549;e.equivalence=549;e.approxequal=549;e.ellipsis=1e3;e.arrowvertex=603;e.arrowhorizex=1e3;e.carriagereturn=658;e.aleph=823;e.Ifraktur=686;e.Rfraktur=795;e.weierstrass=987;e.circlemulti\ +ply=768;e.circleplus=768;e.emptyset=823;e.intersection=768;e.union=768;e.propersuperset=713;e.reflexsuperset=713;e.notsubset=713;e.propersubset=713;e.reflexsubset=713;e.element=713;e.notelement=713;e.angle=768;e.gradient=713;e.registerserif=790;e.copyrightserif=790;e.trademarkserif=890;e.product=823;e.radical=549;e.dotmath=250;e.logicalnot=713;e.logicaland=603;e.logicalor=603;e.arrowdblboth=1042;e.arrowdblleft=987;e.arrowdblup=603;e.arrowdblright=987;e.arrowdbldown=603;e.lozenge=494;e.angleleft=\ +329;e.registersans=790;e.copyrightsans=790;e.trademarksans=786;e.summation=713;e.parenlefttp=384;e.parenleftex=384;e.parenleftbt=384;e.bracketlefttp=384;e.bracketleftex=384;e.bracketleftbt=384;e.bracelefttp=494;e.braceleftmid=494;e.braceleftbt=494;e.braceex=494;e.angleright=329;e.integral=274;e.integraltp=686;e.integralex=686;e.integralbt=686;e.parenrighttp=384;e.parenrightex=384;e.parenrightbt=384;e.bracketrighttp=384;e.bracketrightex=384;e.bracketrightbt=384;e.bracerighttp=494;e.bracerightmid=\ +494;e.bracerightbt=494;e.apple=790}));e["Times-Roman"]=getLookupTableFactory((function(e){e.space=250;e.exclam=333;e.quotedbl=408;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=564;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=278;e.semicolon=278;e.less=564;e.equal=564;e.greater=564;e.questio\ +n=444;e.at=921;e.A=722;e.B=667;e.C=667;e.D=722;e.E=611;e.F=556;e.G=722;e.H=722;e.I=333;e.J=389;e.K=722;e.L=611;e.M=889;e.N=722;e.O=722;e.P=556;e.Q=722;e.R=667;e.S=556;e.T=611;e.U=722;e.V=722;e.W=944;e.X=722;e.Y=722;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=469;e.underscore=500;e.quoteleft=333;e.a=444;e.b=500;e.c=444;e.d=500;e.e=444;e.f=333;e.g=500;e.h=500;e.i=278;e.j=278;e.k=500;e.l=278;e.m=778;e.n=500;e.o=500;e.p=500;e.q=500;e.r=333;e.s=389;e.t=278;e.u=500;e.v=5\ +00;e.w=722;e.x=500;e.y=500;e.z=444;e.braceleft=480;e.bar=200;e.braceright=480;e.asciitilde=541;e.exclamdown=333;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=180;e.quotedblleft=444;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=453;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=444;e.quotedblright=444;e.guillemotright=500;e.elli\ +psis=1e3;e.perthousand=1e3;e.questiondown=444;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=889;e.ordfeminine=276;e.Lslash=611;e.Oslash=722;e.OE=889;e.ordmasculine=310;e.ae=667;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=500;e.Idieresis=333;e.eacute=444;e.abreve=444;e.uhungarumlaut=500;e.ecaron=444;e.Ydieresis=722;e.divide=564;e.\ +Yacute=722;e.Acircumflex=722;e.aacute=444;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=444;e.Uacute=722;e.uogonek=500;e.Edieresis=611;e.Dcroat=722;e.commaaccent=250;e.copyright=760;e.Emacron=611;e.ccaron=444;e.aring=444;e.Ncommaaccent=722;e.lacute=278;e.agrave=444;e.Tcommaaccent=611;e.Cacute=667;e.atilde=444;e.Edotaccent=611;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=471;e.Rcaron=667;e.Gcommaaccent=722;e.ucircumflex=500;e.acirc\ +umflex=444;e.Amacron=722;e.rcaron=333;e.ccedilla=444;e.Zdotaccent=611;e.Thorn=556;e.Omacron=722;e.Racute=667;e.Sacute=556;e.dcaron=588;e.Umacron=722;e.uring=500;e.threesuperior=300;e.Ograve=722;e.Agrave=722;e.Abreve=722;e.multiply=564;e.uacute=500;e.Tcaron=611;e.partialdiff=476;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=611;e.adieresis=444;e.edieresis=444;e.cacute=444;e.nacute=500;e.umacron=500;e.Ncaron=722;e.Iacute=333;e.plusminus=564;e.brokenbar=200;e.registered=760;e.Gbreve=\ +722;e.Idotaccent=333;e.summation=600;e.Egrave=611;e.racute=333;e.omacron=500;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=326;e.eogonek=444;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=444;e.zacute=444;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=444;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=500;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=611;e.dcroat=5\ +00;e.threequarters=750;e.Scedilla=556;e.lcaron=344;e.Kcommaaccent=722;e.Lacute=611;e.trademark=980;e.edotaccent=444;e.Igrave=333;e.Imacron=333;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=500;e.Uhungarumlaut=722;e.Eacute=611;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=500;e.radical=453;e.Dcaron=722;e.rcommaaccent=333;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=667;e.Lcommaacc\ +ent=611;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=722;e.zdotaccent=444;e.Ecaron=611;e.Iogonek=333;e.kcommaaccent=500;e.minus=564;e.Icircumflex=333;e.ncaron=500;e.tcommaaccent=278;e.logicalnot=564;e.odieresis=500;e.udieresis=500;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=444;e.ncommaaccent=500;e.onesuperior=300;e.imacron=278;e.Euro=500}));e["Times-Bold"]=getLookupTableFactory((function(e){e.space=250;e.exclam=333;e.quotedbl=555;e.numbersign=500;e.dollar=500;e.percent=1e3;e.ampersa\ +nd=833;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=570;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=570;e.equal=570;e.greater=570;e.question=500;e.at=930;e.A=722;e.B=667;e.C=722;e.D=722;e.E=667;e.F=611;e.G=778;e.H=778;e.I=389;e.J=500;e.K=778;e.L=667;e.M=944;e.N=722;e.O=778;e.P=611;e.Q=778;e.R=722;e.S=556;e.T=667;e.U=722;\ +e.V=722;e.W=1e3;e.X=722;e.Y=722;e.Z=667;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=581;e.underscore=500;e.quoteleft=333;e.a=500;e.b=556;e.c=444;e.d=556;e.e=444;e.f=333;e.g=500;e.h=556;e.i=278;e.j=333;e.k=556;e.l=278;e.m=833;e.n=556;e.o=500;e.p=556;e.q=556;e.r=444;e.s=389;e.t=333;e.u=556;e.v=500;e.w=722;e.x=500;e.y=500;e.z=444;e.braceleft=394;e.bar=220;e.braceright=394;e.asciitilde=520;e.exclamdown=333;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.secti\ +on=500;e.currency=500;e.quotesingle=278;e.quotedblleft=500;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=540;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.h\ +ungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=1e3;e.ordfeminine=300;e.Lslash=667;e.Oslash=778;e.OE=1e3;e.ordmasculine=330;e.ae=722;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=722;e.germandbls=556;e.Idieresis=389;e.eacute=444;e.abreve=500;e.uhungarumlaut=556;e.ecaron=444;e.Ydieresis=722;e.divide=570;e.Yacute=722;e.Acircumflex=722;e.aacute=500;e.Ucircumflex=722;e.yacute=500;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=556;e.Ed\ +ieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=747;e.Emacron=667;e.ccaron=444;e.aring=500;e.Ncommaaccent=722;e.lacute=278;e.agrave=500;e.Tcommaaccent=667;e.Cacute=722;e.atilde=500;e.Edotaccent=667;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=494;e.Rcaron=722;e.Gcommaaccent=778;e.ucircumflex=556;e.acircumflex=500;e.Amacron=722;e.rcaron=444;e.ccedilla=444;e.Zdotaccent=667;e.Thorn=611;e.Omacron=778;e.Racute=722;e.Sacute=556;e.dcaron=672;e.Umacron=722;e.uring=556;e.threesuperior=300;e.\ +Ograve=778;e.Agrave=722;e.Abreve=722;e.multiply=570;e.uacute=556;e.Tcaron=667;e.partialdiff=494;e.ydieresis=500;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=389;e.plusminus=570;e.brokenbar=220;e.registered=747;e.Gbreve=778;e.Idotaccent=389;e.summation=600;e.Egrave=667;e.racute=444;e.omacron=500;e.Zacute=667;e.Zcaron=667;e.greaterequal=549;e.Eth=722;e.Ccedilla=722;e.lcommaaccent=278;e.tcaron=416;e.eo\ +gonek=444;e.Uogonek=722;e.Aacute=722;e.Adieresis=722;e.egrave=444;e.zacute=444;e.iogonek=278;e.Oacute=778;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=778;e.Ugrave=722;e.Delta=612;e.thorn=556;e.twosuperior=300;e.Odieresis=778;e.mu=556;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=667;e.dcroat=556;e.threequarters=750;e.Scedilla=556;e.lcaron=394;e.Kcommaaccent=778;e.Lacute=667;e.trademark=1e3;e.edotaccent=444;e.Igrave=389;e.Imacron=389;e.Lcaron=667;e.onehalf=750;e.lessequal=5\ +49;e.ocircumflex=500;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=778;e.degree=400;e.ograve=500;e.Ccaron=722;e.ugrave=556;e.radical=549;e.Dcaron=722;e.rcommaaccent=444;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=722;e.Lcommaaccent=667;e.Atilde=722;e.Aogonek=722;e.Aring=722;e.Otilde=778;e.zdotaccent=444;e.Ecaron=667;e.Iogonek=389;e.kcommaaccent=556;e.minus=570;e.Icircumflex=389;e.ncaron=556;e.tcommaaccent=33\ +3;e.logicalnot=570;e.odieresis=500;e.udieresis=556;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=444;e.ncommaaccent=556;e.onesuperior=300;e.imacron=278;e.Euro=500}));e["Times-BoldItalic"]=getLookupTableFactory((function(e){e.space=250;e.exclam=389;e.quotedbl=555;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=570;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e\ +.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=570;e.equal=570;e.greater=570;e.question=500;e.at=832;e.A=667;e.B=667;e.C=667;e.D=722;e.E=667;e.F=667;e.G=722;e.H=778;e.I=389;e.J=500;e.K=667;e.L=611;e.M=889;e.N=722;e.O=722;e.P=611;e.Q=722;e.R=667;e.S=556;e.T=611;e.U=722;e.V=667;e.W=889;e.X=667;e.Y=611;e.Z=611;e.bracketleft=333;e.backslash=278;e.bracketright=333;e.asciicircum=570;e.underscore=500;e.quoteleft=333;e.a=500;e.b=500;e.c=444;e.d=500;e\ +.e=444;e.f=333;e.g=500;e.h=556;e.i=278;e.j=278;e.k=500;e.l=278;e.m=778;e.n=556;e.o=500;e.p=500;e.q=500;e.r=389;e.s=389;e.t=278;e.u=556;e.v=444;e.w=667;e.x=500;e.y=444;e.z=389;e.braceleft=348;e.bar=220;e.braceright=348;e.asciitilde=570;e.exclamdown=389;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=278;e.quotedblleft=500;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=556;e.fl=556;e.endash=500;e.dagger=500;e.daggerdbl=5\ +00;e.periodcentered=250;e.paragraph=500;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=500;e.quotedblright=500;e.guillemotright=500;e.ellipsis=1e3;e.perthousand=1e3;e.questiondown=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=1e3;e.AE=944;e.ordfeminine=266;e.Lslash=611;e.Oslash=722;e.OE=944;e.ordmasculine=300;e.ae=722;e.dotlessi=278;e.lslash=278;e.osl\ +ash=500;e.oe=722;e.germandbls=500;e.Idieresis=389;e.eacute=444;e.abreve=500;e.uhungarumlaut=556;e.ecaron=444;e.Ydieresis=611;e.divide=570;e.Yacute=611;e.Acircumflex=667;e.aacute=500;e.Ucircumflex=722;e.yacute=444;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=556;e.Edieresis=667;e.Dcroat=722;e.commaaccent=250;e.copyright=747;e.Emacron=667;e.ccaron=444;e.aring=500;e.Ncommaaccent=722;e.lacute=278;e.agrave=500;e.Tcommaaccent=611;e.Cacute=667;e.\ +atilde=500;e.Edotaccent=667;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=494;e.Rcaron=667;e.Gcommaaccent=722;e.ucircumflex=556;e.acircumflex=500;e.Amacron=667;e.rcaron=389;e.ccedilla=444;e.Zdotaccent=611;e.Thorn=611;e.Omacron=722;e.Racute=667;e.Sacute=556;e.dcaron=608;e.Umacron=722;e.uring=556;e.threesuperior=300;e.Ograve=722;e.Agrave=667;e.Abreve=667;e.multiply=570;e.uacute=556;e.Tcaron=611;e.partialdiff=494;e.ydieresis=444;e.Nacute=722;e.icircumflex=278;e.Ecircumflex=667;e.adieresis=500;\ +e.edieresis=444;e.cacute=444;e.nacute=556;e.umacron=556;e.Ncaron=722;e.Iacute=389;e.plusminus=570;e.brokenbar=220;e.registered=747;e.Gbreve=722;e.Idotaccent=389;e.summation=600;e.Egrave=667;e.racute=389;e.omacron=500;e.Zacute=611;e.Zcaron=611;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=366;e.eogonek=444;e.Uogonek=722;e.Aacute=667;e.Adieresis=667;e.egrave=444;e.zacute=389;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=7\ +22;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=576;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=667;e.dcroat=500;e.threequarters=750;e.Scedilla=556;e.lcaron=382;e.Kcommaaccent=667;e.Lacute=611;e.trademark=1e3;e.edotaccent=444;e.Igrave=389;e.Imacron=389;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=556;e.Uhungarumlaut=722;e.Eacute=667;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=556;e.Scommaaccent=556;e.Ohungarumlaut=722;e.degree=400;e\ +.ograve=500;e.Ccaron=667;e.ugrave=556;e.radical=549;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=722;e.otilde=500;e.Rcommaaccent=667;e.Lcommaaccent=611;e.Atilde=667;e.Aogonek=667;e.Aring=667;e.Otilde=722;e.zdotaccent=389;e.Ecaron=667;e.Iogonek=389;e.kcommaaccent=500;e.minus=606;e.Icircumflex=389;e.ncaron=556;e.tcommaaccent=278;e.logicalnot=606;e.odieresis=500;e.udieresis=556;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=389;e.ncommaaccent=556;e.onesuperior=300;e.imacron=278;e.Euro=500}));e["T\ +imes-Italic"]=getLookupTableFactory((function(e){e.space=250;e.exclam=333;e.quotedbl=420;e.numbersign=500;e.dollar=500;e.percent=833;e.ampersand=778;e.quoteright=333;e.parenleft=333;e.parenright=333;e.asterisk=500;e.plus=675;e.comma=250;e.hyphen=333;e.period=250;e.slash=278;e.zero=500;e.one=500;e.two=500;e.three=500;e.four=500;e.five=500;e.six=500;e.seven=500;e.eight=500;e.nine=500;e.colon=333;e.semicolon=333;e.less=675;e.equal=675;e.greater=675;e.question=500;e.at=920;e.A=611;e.B=611;e.C=667;e.\ +D=722;e.E=611;e.F=611;e.G=722;e.H=722;e.I=333;e.J=444;e.K=667;e.L=556;e.M=833;e.N=667;e.O=722;e.P=611;e.Q=722;e.R=611;e.S=500;e.T=556;e.U=722;e.V=611;e.W=833;e.X=611;e.Y=556;e.Z=556;e.bracketleft=389;e.backslash=278;e.bracketright=389;e.asciicircum=422;e.underscore=500;e.quoteleft=333;e.a=500;e.b=500;e.c=444;e.d=500;e.e=444;e.f=278;e.g=500;e.h=500;e.i=278;e.j=278;e.k=444;e.l=278;e.m=722;e.n=500;e.o=500;e.p=500;e.q=500;e.r=389;e.s=389;e.t=278;e.u=500;e.v=444;e.w=667;e.x=444;e.y=444;e.z=389;e.brac\ +eleft=400;e.bar=275;e.braceright=400;e.asciitilde=541;e.exclamdown=389;e.cent=500;e.sterling=500;e.fraction=167;e.yen=500;e.florin=500;e.section=500;e.currency=500;e.quotesingle=214;e.quotedblleft=556;e.guillemotleft=500;e.guilsinglleft=333;e.guilsinglright=333;e.fi=500;e.fl=500;e.endash=500;e.dagger=500;e.daggerdbl=500;e.periodcentered=250;e.paragraph=523;e.bullet=350;e.quotesinglbase=333;e.quotedblbase=556;e.quotedblright=556;e.guillemotright=500;e.ellipsis=889;e.perthousand=1e3;e.questiondown\ +=500;e.grave=333;e.acute=333;e.circumflex=333;e.tilde=333;e.macron=333;e.breve=333;e.dotaccent=333;e.dieresis=333;e.ring=333;e.cedilla=333;e.hungarumlaut=333;e.ogonek=333;e.caron=333;e.emdash=889;e.AE=889;e.ordfeminine=276;e.Lslash=556;e.Oslash=722;e.OE=944;e.ordmasculine=310;e.ae=667;e.dotlessi=278;e.lslash=278;e.oslash=500;e.oe=667;e.germandbls=500;e.Idieresis=333;e.eacute=444;e.abreve=500;e.uhungarumlaut=500;e.ecaron=444;e.Ydieresis=556;e.divide=675;e.Yacute=556;e.Acircumflex=611;e.aacute=500\ +;e.Ucircumflex=722;e.yacute=444;e.scommaaccent=389;e.ecircumflex=444;e.Uring=722;e.Udieresis=722;e.aogonek=500;e.Uacute=722;e.uogonek=500;e.Edieresis=611;e.Dcroat=722;e.commaaccent=250;e.copyright=760;e.Emacron=611;e.ccaron=444;e.aring=500;e.Ncommaaccent=667;e.lacute=278;e.agrave=500;e.Tcommaaccent=556;e.Cacute=667;e.atilde=500;e.Edotaccent=611;e.scaron=389;e.scedilla=389;e.iacute=278;e.lozenge=471;e.Rcaron=611;e.Gcommaaccent=722;e.ucircumflex=500;e.acircumflex=500;e.Amacron=611;e.rcaron=389;e.c\ +cedilla=444;e.Zdotaccent=556;e.Thorn=611;e.Omacron=722;e.Racute=611;e.Sacute=500;e.dcaron=544;e.Umacron=722;e.uring=500;e.threesuperior=300;e.Ograve=722;e.Agrave=611;e.Abreve=611;e.multiply=675;e.uacute=500;e.Tcaron=556;e.partialdiff=476;e.ydieresis=444;e.Nacute=667;e.icircumflex=278;e.Ecircumflex=611;e.adieresis=500;e.edieresis=444;e.cacute=444;e.nacute=500;e.umacron=500;e.Ncaron=667;e.Iacute=333;e.plusminus=675;e.brokenbar=275;e.registered=760;e.Gbreve=722;e.Idotaccent=333;e.summation=600;e.Eg\ +rave=611;e.racute=389;e.omacron=500;e.Zacute=556;e.Zcaron=556;e.greaterequal=549;e.Eth=722;e.Ccedilla=667;e.lcommaaccent=278;e.tcaron=300;e.eogonek=444;e.Uogonek=722;e.Aacute=611;e.Adieresis=611;e.egrave=444;e.zacute=389;e.iogonek=278;e.Oacute=722;e.oacute=500;e.amacron=500;e.sacute=389;e.idieresis=278;e.Ocircumflex=722;e.Ugrave=722;e.Delta=612;e.thorn=500;e.twosuperior=300;e.Odieresis=722;e.mu=500;e.igrave=278;e.ohungarumlaut=500;e.Eogonek=611;e.dcroat=500;e.threequarters=750;e.Scedilla=500;e.l\ +caron=300;e.Kcommaaccent=667;e.Lacute=556;e.trademark=980;e.edotaccent=444;e.Igrave=333;e.Imacron=333;e.Lcaron=611;e.onehalf=750;e.lessequal=549;e.ocircumflex=500;e.ntilde=500;e.Uhungarumlaut=722;e.Eacute=611;e.emacron=444;e.gbreve=500;e.onequarter=750;e.Scaron=500;e.Scommaaccent=500;e.Ohungarumlaut=722;e.degree=400;e.ograve=500;e.Ccaron=667;e.ugrave=500;e.radical=453;e.Dcaron=722;e.rcommaaccent=389;e.Ntilde=667;e.otilde=500;e.Rcommaaccent=611;e.Lcommaaccent=556;e.Atilde=611;e.Aogonek=611;e.Arin\ +g=611;e.Otilde=722;e.zdotaccent=389;e.Ecaron=611;e.Iogonek=333;e.kcommaaccent=444;e.minus=675;e.Icircumflex=333;e.ncaron=500;e.tcommaaccent=278;e.logicalnot=675;e.odieresis=500;e.udieresis=500;e.notequal=549;e.gcommaaccent=500;e.eth=500;e.zcaron=389;e.ncommaaccent=500;e.onesuperior=300;e.imacron=278;e.Euro=500}));e.ZapfDingbats=getLookupTableFactory((function(e){e.space=278;e.a1=974;e.a2=961;e.a202=974;e.a3=980;e.a4=719;e.a5=789;e.a119=790;e.a118=791;e.a117=690;e.a11=960;e.a12=939;e.a13=549;e.a1\ +4=855;e.a15=911;e.a16=933;e.a105=911;e.a17=945;e.a18=974;e.a19=755;e.a20=846;e.a21=762;e.a22=761;e.a23=571;e.a24=677;e.a25=763;e.a26=760;e.a27=759;e.a28=754;e.a6=494;e.a7=552;e.a8=537;e.a9=577;e.a10=692;e.a29=786;e.a30=788;e.a31=788;e.a32=790;e.a33=793;e.a34=794;e.a35=816;e.a36=823;e.a37=789;e.a38=841;e.a39=823;e.a40=833;e.a41=816;e.a42=831;e.a43=923;e.a44=744;e.a45=723;e.a46=749;e.a47=790;e.a48=792;e.a49=695;e.a50=776;e.a51=768;e.a52=792;e.a53=759;e.a54=707;e.a55=708;e.a56=682;e.a57=701;e.a58=8\ +26;e.a59=815;e.a60=789;e.a61=789;e.a62=707;e.a63=687;e.a64=696;e.a65=689;e.a66=786;e.a67=787;e.a68=713;e.a69=791;e.a70=785;e.a71=791;e.a72=873;e.a73=761;e.a74=762;e.a203=762;e.a75=759;e.a204=759;e.a76=892;e.a77=892;e.a78=788;e.a79=784;e.a81=438;e.a82=138;e.a83=277;e.a84=415;e.a97=392;e.a98=392;e.a99=668;e.a100=668;e.a89=390;e.a90=390;e.a93=317;e.a94=317;e.a91=276;e.a92=276;e.a205=509;e.a85=509;e.a206=410;e.a86=410;e.a87=234;e.a88=234;e.a95=334;e.a96=334;e.a101=732;e.a102=544;e.a103=544;e.a104=91\ +0;e.a106=667;e.a107=760;e.a108=760;e.a112=776;e.a111=595;e.a110=694;e.a109=626;e.a120=788;e.a121=788;e.a122=788;e.a123=788;e.a124=788;e.a125=788;e.a126=788;e.a127=788;e.a128=788;e.a129=788;e.a130=788;e.a131=788;e.a132=788;e.a133=788;e.a134=788;e.a135=788;e.a136=788;e.a137=788;e.a138=788;e.a139=788;e.a140=788;e.a141=788;e.a142=788;e.a143=788;e.a144=788;e.a145=788;e.a146=788;e.a147=788;e.a148=788;e.a149=788;e.a150=788;e.a151=788;e.a152=788;e.a153=788;e.a154=788;e.a155=788;e.a156=788;e.a157=788;e.a\ +158=788;e.a159=788;e.a160=894;e.a161=838;e.a163=1016;e.a164=458;e.a196=748;e.a165=924;e.a192=748;e.a166=918;e.a167=927;e.a168=928;e.a169=928;e.a170=834;e.a171=873;e.a172=828;e.a173=924;e.a162=924;e.a174=917;e.a175=930;e.a176=931;e.a177=463;e.a178=883;e.a179=836;e.a193=836;e.a180=867;e.a199=867;e.a181=696;e.a200=696;e.a182=874;e.a201=874;e.a183=760;e.a184=946;e.a197=771;e.a185=865;e.a194=771;e.a198=888;e.a186=967;e.a195=888;e.a187=831;e.a188=873;e.a189=927;e.a190=970;e.a191=918}))})),ni=getLookup\ +TableFactory((function(e){e.Courier={ascent:629,descent:-157,capHeight:562,xHeight:-426};e["Courier-Bold"]={ascent:629,descent:-157,capHeight:562,xHeight:439};e["Courier-Oblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426};e["Courier-BoldOblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426};e.Helvetica={ascent:718,descent:-207,capHeight:718,xHeight:523};e["Helvetica-Bold"]={ascent:718,descent:-207,capHeight:718,xHeight:532};e["Helvetica-Oblique"]={ascent:718,descent:-207,capHeig\ +ht:718,xHeight:523};e["Helvetica-BoldOblique"]={ascent:718,descent:-207,capHeight:718,xHeight:532};e["Times-Roman"]={ascent:683,descent:-217,capHeight:662,xHeight:450};e["Times-Bold"]={ascent:683,descent:-217,capHeight:676,xHeight:461};e["Times-Italic"]={ascent:683,descent:-217,capHeight:653,xHeight:441};e["Times-BoldItalic"]={ascent:683,descent:-217,capHeight:669,xHeight:462};e.Symbol={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN};e.ZapfDingbats={ascent:Math.NaN,descent:\ +Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN}}));class GlyfTable{constructor({glyfTable:e,isGlyphLocationsLong:t,locaTable:a,numGlyphs:r}){this.glyphs=[];const i=new DataView(a.buffer,a.byteOffset,a.byteLength),n=new DataView(e.buffer,e.byteOffset,e.byteLength),s=t?4:2;let o=t?i.getUint32(0):2*i.getUint16(0),c=0;for(let e=0;e<r;e++){c+=s;const e=t?i.getUint32(c):2*i.getUint16(c);if(e===o){this.glyphs.push(new Glyph({}));continue}const a=Glyph.parse(o,n);this.glyphs.push(a);o=e}}getSize(){return \ +Math.sumPrecise(this.glyphs.map((e=>e.getSize()+3&-4)))}write(){const e=this.getSize(),t=new DataView(new ArrayBuffer(e)),a=e>131070,r=a?4:2,i=new DataView(new ArrayBuffer((this.glyphs.length+1)*r));a?i.setUint32(0,0):i.setUint16(0,0);let n=0,s=0;for(const e of this.glyphs){n+=e.write(n,t);n=n+3&-4;s+=r;a?i.setUint32(s,n):i.setUint16(s,n>>1)}return{isLocationLong:a,loca:new Uint8Array(i.buffer),glyf:new Uint8Array(t.buffer)}}scale(e){for(let t=0,a=this.glyphs.length;t<a;t++)this.glyphs[t].scale(\ +e[t])}}class Glyph{constructor({header:e=null,simple:t=null,composites:a=null}){this.header=e;this.simple=t;this.composites=a}static parse(e,t){const[a,r]=GlyphHeader.parse(e,t);e+=a;if(r.numberOfContours<0){const a=[];for(;;){const[r,i]=CompositeGlyph.parse(e,t);e+=r;a.push(i);if(!(32&i.flags))break}return new Glyph({header:r,composites:a})}const i=SimpleGlyph.parse(e,t,r.numberOfContours);return new Glyph({header:r,simple:i})}getSize(){if(!this.header)return 0;const e=this.simple?this.simple.g\ +etSize():Math.sumPrecise(this.composites.map((e=>e.getSize())));return this.header.getSize()+e}write(e,t){if(!this.header)return 0;const a=e;e+=this.header.write(e,t);if(this.simple)e+=this.simple.write(e,t);else for(const a of this.composites)e+=a.write(e,t);return e-a}scale(e){if(!this.header)return;const t=(this.header.xMin+this.header.xMax)/2;this.header.scale(t,e);if(this.simple)this.simple.scale(t,e);else for(const a of this.composites)a.scale(t,e)}}class GlyphHeader{constructor({numberOfC\ +ontours:e,xMin:t,yMin:a,xMax:r,yMax:i}){this.numberOfContours=e;this.xMin=t;this.yMin=a;this.xMax=r;this.yMax=i}static parse(e,t){return[10,new GlyphHeader({numberOfContours:t.getInt16(e),xMin:t.getInt16(e+2),yMin:t.getInt16(e+4),xMax:t.getInt16(e+6),yMax:t.getInt16(e+8)})]}getSize(){return 10}write(e,t){t.setInt16(e,this.numberOfContours);t.setInt16(e+2,this.xMin);t.setInt16(e+4,this.yMin);t.setInt16(e+6,this.xMax);t.setInt16(e+8,this.yMax);return 10}scale(e,t){this.xMin=Math.round(e+(this.xMin\ +-e)*t);this.xMax=Math.round(e+(this.xMax-e)*t)}}class Contour{constructor({flags:e,xCoordinates:t,yCoordinates:a}){this.xCoordinates=t;this.yCoordinates=a;this.flags=e}}class SimpleGlyph{constructor({contours:e,instructions:t}){this.contours=e;this.instructions=t}static parse(e,t,a){const r=[];for(let i=0;i<a;i++){const a=t.getUint16(e);e+=2;r.push(a)}const i=r[a-1]+1,n=t.getUint16(e);e+=2;const s=new Uint8Array(t).slice(e,e+n);e+=n;const o=[];for(let a=0;a<i;e++,a++){let r=t.getUint8(e);o.push(\ +r);if(8&r){const i=t.getUint8(++e);r^=8;for(let e=0;e<i;e++)o.push(r);a+=i}}const c=[];let l=[],h=[],u=[];const d=[];let f=0,g=0;for(let a=0;a<i;a++){const i=o[a];if(2&i){const a=t.getUint8(e++);g+=16&i?a:-a;l.push(g)}else if(16&i)l.push(g);else{g+=t.getInt16(e);e+=2;l.push(g)}if(r[f]===a){f++;c.push(l);l=[]}}g=0;f=0;for(let a=0;a<i;a++){const i=o[a];if(4&i){const a=t.getUint8(e++);g+=32&i?a:-a;h.push(g)}else if(32&i)h.push(g);else{g+=t.getInt16(e);e+=2;h.push(g)}u.push(1&i|64&i);if(r[f]===a){l=\ +c[f];f++;d.push(new Contour({flags:u,xCoordinates:l,yCoordinates:h}));h=[];u=[]}}return new SimpleGlyph({contours:d,instructions:s})}getSize(){let e=2*this.contours.length+2+this.instructions.length,t=0,a=0;for(const r of this.contours){e+=r.flags.length;for(let i=0,n=r.xCoordinates.length;i<n;i++){const n=r.xCoordinates[i],s=r.yCoordinates[i];let o=Math.abs(n-t);o>255?e+=2:o>0&&(e+=1);t=n;o=Math.abs(s-a);o>255?e+=2:o>0&&(e+=1);a=s}}return e}write(e,t){const a=e,r=[],i=[],n=[];let s=0,o=0;for(co\ +nst a of this.contours){for(let e=0,t=a.xCoordinates.length;e<t;e++){let t=a.flags[e];const c=a.xCoordinates[e];let l=c-s;if(0===l){t|=16;r.push(0)}else{const e=Math.abs(l);if(e<=255){t|=l>=0?18:2;r.push(e)}else r.push(l)}s=c;const h=a.yCoordinates[e];l=h-o;if(0===l){t|=32;i.push(0)}else{const e=Math.abs(l);if(e<=255){t|=l>=0?36:4;i.push(e)}else i.push(l)}o=h;n.push(t)}t.setUint16(e,r.length-1);e+=2}t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer\ +,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}for(const a of n)t.setUint8(e++,a);for(let a=0,i=r.length;a<i;a++){const i=r[a],s=n[a];if(2&s)t.setUint8(e++,i);else if(!(16&s)){t.setInt16(e,i);e+=2}}for(let a=0,r=i.length;a<r;a++){const r=i[a],s=n[a];if(4&s)t.setUint8(e++,r);else if(!(32&s)){t.setInt16(e,r);e+=2}}return e-a}scale(e,t){for(const a of this.contours)if(0!==a.xCoordinates.length)for(let r=0,i=a.xCoordinates.length;r<i;r++)a.xCoordinates[r]=Math.round(e+(\ +a.xCoordinates[r]-e)*t)}}class CompositeGlyph{constructor({flags:e,glyphIndex:t,argument1:a,argument2:r,transf:i,instructions:n}){this.flags=e;this.glyphIndex=t;this.argument1=a;this.argument2=r;this.transf=i;this.instructions=n}static parse(e,t){const a=e,r=[];let i=t.getUint16(e);const n=t.getUint16(e+2);e+=4;let s,o;if(1&i){if(2&i){s=t.getInt16(e);o=t.getInt16(e+2)}else{s=t.getUint16(e);o=t.getUint16(e+2)}e+=4;i^=1}else{if(2&i){s=t.getInt8(e);o=t.getInt8(e+1)}else{s=t.getUint8(e);o=t.getUint8\ +(e+1)}e+=2}if(8&i){r.push(t.getUint16(e));e+=2}else if(64&i){r.push(t.getUint16(e),t.getUint16(e+2));e+=4}else if(128&i){r.push(t.getUint16(e),t.getUint16(e+2),t.getUint16(e+4),t.getUint16(e+6));e+=8}let c=null;if(256&i){const a=t.getUint16(e);e+=2;c=new Uint8Array(t).slice(e,e+a);e+=a}return[e-a,new CompositeGlyph({flags:i,glyphIndex:n,argument1:s,argument2:o,transf:r,instructions:c})]}getSize(){let e=4+2*this.transf.length;256&this.flags&&(e+=2+this.instructions.length);e+=2;2&this.flags?this.\ +argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2);return e}write(e,t){const a=e;2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1);t.setUint16(e,this.flags);t.setUint16(e+2,this.glyphIndex);e+=4;if(1&this.flags){if(\ +2&this.flags){t.setInt16(e,this.argument1);t.setInt16(e+2,this.argument2)}else{t.setUint16(e,this.argument1);t.setUint16(e+2,this.argument2)}e+=4}else{t.setUint8(e,this.argument1);t.setUint8(e+1,this.argument2);e+=2}if(256&this.flags){t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}}return e-a}scale(e,t){}}function writeInt16(e,t,a){e[t]=a>>8&255;e[t+1]=255&a}function wri\ +teInt32(e,t,a){e[t]=a>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}function writeData(e,t,a){if(a instanceof Uint8Array)e.set(a,t);else if("string"==typeof a)for(let r=0,i=a.length;r<i;r++)e[t++]=255&a.charCodeAt(r);else for(const r of a)e[t++]=255&r}class OpenTypeFileBuilder{constructor(e){this.sfnt=e;this.tables=Object.create(null)}static getSearchParams(e,t){let a=1,r=0;for(;(a^e)>a;){a<<=1;r++}const i=a*t;return{range:i,entry:r,rangeShift:t*e-i}}toArray(){let e=this.sfnt;const t=thi\ +s.tables,a=Object.keys(t);a.sort();const r=a.length;let i,n,s,o,c,l=12+16*r;const h=[l];for(i=0;i<r;i++){o=t[a[i]];l+=(o.length+3&-4)>>>0;h.push(l)}const u=new Uint8Array(l);for(i=0;i<r;i++){o=t[a[i]];writeData(u,h[i],o)}"true"===e&&(e=string32(65536));u[0]=255&e.charCodeAt(0);u[1]=255&e.charCodeAt(1);u[2]=255&e.charCodeAt(2);u[3]=255&e.charCodeAt(3);writeInt16(u,4,r);const d=OpenTypeFileBuilder.getSearchParams(r,16);writeInt16(u,6,d.range);writeInt16(u,8,d.entry);writeInt16(u,10,d.rangeShift);l\ +=12;for(i=0;i<r;i++){c=a[i];u[l]=255&c.charCodeAt(0);u[l+1]=255&c.charCodeAt(1);u[l+2]=255&c.charCodeAt(2);u[l+3]=255&c.charCodeAt(3);let e=0;for(n=h[i],s=h[i+1];n<s;n+=4){e=e+readUint32(u,n)>>>0}writeInt32(u,l+4,e);writeInt32(u,l+8,h[i]);writeInt32(u,l+12,t[c].length);l+=16}return u}addTable(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}}const si=[4],oi=[5],ci=[6],li=[7],hi=[8],ui=[12,35],di=[14],fi=[21],gi=[22],pi=[30],mi=[31];class Type1CharString{con\ +structor(){this.width=0;this.lsb=0;this.flexing=!1;this.output=[];this.stack=[]}convert(e,t,a){const r=e.length;let i,n,s,o=!1;for(let c=0;c<r;c++){let r=e[c];if(r<32){12===r&&(r=(r<<8)+e[++c]);switch(r){case 1:case 3:case 9:case 3072:case 3073:case 3074:case 3105:this.stack=[];break;case 4:if(this.flexing){if(this.stack.length<1){o=!0;break}const e=this.stack.pop();this.stack.push(0,e);break}o=this.executeCommand(1,si);break;case 5:o=this.executeCommand(2,oi);break;case 6:o=this.executeCommand(\ +1,ci);break;case 7:o=this.executeCommand(1,li);break;case 8:o=this.executeCommand(6,hi);break;case 10:if(this.stack.length<1){o=!0;break}s=this.stack.pop();if(!t[s]){o=!0;break}o=this.convert(t[s],t,a);break;case 11:return o;case 13:if(this.stack.length<2){o=!0;break}i=this.stack.pop();n=this.stack.pop();this.lsb=n;this.width=i;this.stack.push(i,n);o=this.executeCommand(2,gi);break;case 14:this.output.push(di[0]);break;case 21:if(this.flexing)break;o=this.executeCommand(2,fi);break;case 22:if(th\ +is.flexing){this.stack.push(0);break}o=this.executeCommand(1,gi);break;case 30:o=this.executeCommand(4,pi);break;case 31:o=this.executeCommand(4,mi);break;case 3078:if(a){const e=this.stack.at(-5);this.seac=this.stack.splice(-4,4);this.seac[0]+=this.lsb-e;o=this.executeCommand(0,di)}else o=this.executeCommand(4,di);break;case 3079:if(this.stack.length<4){o=!0;break}this.stack.pop();i=this.stack.pop();const e=this.stack.pop();n=this.stack.pop();this.lsb=n;this.width=i;this.stack.push(i,n,e);o=thi\ +s.executeCommand(3,fi);break;case 3084:if(this.stack.length<2){o=!0;break}const c=this.stack.pop(),l=this.stack.pop();this.stack.push(l/c);break;case 3088:if(this.stack.length<2){o=!0;break}s=this.stack.pop();const h=this.stack.pop();if(0===s&&3===h){const e=this.stack.splice(-17,17);this.stack.push(e[2]+e[0],e[3]+e[1],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14]);o=this.executeCommand(13,ui,!0);this.flexing=!1;this.stack.push(e[15],e[16])}else 1===s&&0===h&&(this.flexing=!0);brea\ +k;case 3089:break;default:warn(\'Unknown type 1 charstring command of "\'+r+\'"\')}if(o)break}else{r<=246?r-=139:r=r<=250?256*(r-247)+e[++c]+108:r<=254?-256*(r-251)-e[++c]-108:(255&e[++c])<<24|(255&e[++c])<<16|(255&e[++c])<<8|255&e[++c];this.stack.push(r)}}return o}executeCommand(e,t,a){const r=this.stack.length;if(e>r)return!0;const i=r-e;for(let e=i;e<r;e++){let t=this.stack[e];if(Number.isInteger(t))this.output.push(28,t>>8&255,255&t);else{t=65536*t|0;this.output.push(255,t>>24&255,t>>16&255,t>>8\ +&255,255&t)}}this.output.push(...t);a?this.stack.splice(i,e):this.stack.length=0;return!1}}function isHexDigit(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function decrypt(e,t,a){if(a>=e.length)return new Uint8Array(0);let r,i,n=0|t;for(r=0;r<a;r++)n=52845*(e[r]+n)+22719&65535;const s=e.length-a,o=new Uint8Array(s);for(r=a,i=0;i<s;r++,i++){const t=e[r];o[i]=t^n>>8;n=52845*(t+n)+22719&65535}return o}function isSpecial(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}clas\ +s Type1Parser{constructor(e,t,a){if(t){const t=e.getBytes(),a=!((isHexDigit(t[0])||isWhiteSpace(t[0]))&&isHexDigit(t[1])&&isHexDigit(t[2])&&isHexDigit(t[3])&&isHexDigit(t[4])&&isHexDigit(t[5])&&isHexDigit(t[6])&&isHexDigit(t[7]));e=new Stream(a?decrypt(t,55665,4):function decryptAscii(e,t,a){let r=0|t;const i=e.length,n=new Uint8Array(i>>>1);let s,o;for(s=0,o=0;s<i;s++){const t=e[s];if(!isHexDigit(t))continue;s++;let a;for(;s<i&&!isHexDigit(a=e[s]);)s++;if(s<i){const e=parseInt(String.fromCharCo\ +de(t,a),16);n[o++]=e^r>>8;r=52845*(e+r)+22719&65535}}return n.slice(a,o)}(t,55665,4))}this.seacAnalysisEnabled=!!a;this.stream=e;this.nextChar()}readNumberArray(){this.getToken();const e=[];for(;;){const t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}readNumber(){const e=this.getToken();return parseFloat(e||0)}readInt(){const e=this.getToken();return 0|parseInt(e||0,10)}readBoolean(){return"true"===this.getToken()?1:0}nextChar(){return this.currentChar=th\ +is.stream.getByte()}prevChar(){this.stream.skip(-2);return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}if(isSpecial(t)){this.nextChar();return String.fromCharCode(t)}let a="";do{a+=String.fromCharCode(t);t=this.nextChar()}while(t>=0&&!isWhiteSpace(t)&&!isSpecial(t));return a}readCharStrings(e,t){return-1===t?e:decrypt(e,4330,t)}extractFo\ +ntProgram(e){const t=this.stream,a=[],r=[],i=Object.create(null);i.lenIV=4;const n={subrs:[],charstrings:[],properties:{privateData:i}};let s,o,c,l;for(;null!==(s=this.getToken());)if("/"===s){s=this.getToken();switch(s){case"CharStrings":this.getToken();this.getToken();this.getToken();this.getToken();for(;;){s=this.getToken();if(null===s||"end"===s)break;if("/"!==s)continue;const e=this.getToken();o=this.readInt();this.getToken();c=o>0?t.getBytes(o):new Uint8Array(0);l=n.properties.privateData.\ +lenIV;const a=this.readCharStrings(c,l);this.nextChar();s=this.getToken();"noaccess"===s?this.getToken():"/"===s&&this.prevChar();r.push({glyph:e,encoded:a})}break;case"Subrs":this.readInt();this.getToken();for(;"dup"===this.getToken();){const e=this.readInt();o=this.readInt();this.getToken();c=o>0?t.getBytes(o):new Uint8Array(0);l=n.properties.privateData.lenIV;const r=this.readCharStrings(c,l);this.nextChar();s=this.getToken();"noaccess"===s&&this.getToken();a[e]=r}break;case"BlueValues":case"\ +OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":const e=this.readNumberArray();e.length>0&&e.length,0;break;case"StemSnapH":case"StemSnapV":n.properties.privateData[s]=this.readNumberArray();break;case"StdHW":case"StdVW":n.properties.privateData[s]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":n.properties.privateData[s]=this.readNumber();break;case"ExpansionFactor":n.properties.privateData[s]=this.readNumber()||.06;break;case\ +"ForceBold":n.properties.privateData[s]=this.readBoolean()}}for(const{encoded:t,glyph:i}of r){const r=new Type1CharString,s=r.convert(t,a,this.seacAnalysisEnabled);let o=r.output;s&&(o=[14]);const c={glyphName:i,charstring:o,width:r.width,lsb:r.lsb,seac:r.seac};".notdef"===i?n.charstrings.unshift(c):n.charstrings.push(c);if(e.builtInEncoding){const t=e.builtInEncoding.indexOf(i);t>-1&&void 0===e.widths[t]&&t>=e.firstChar&&t<=e.lastChar&&(e.widths[t]=r.width)}}return n}extractFontHeader(e){let t;\ +for(;null!==(t=this.getToken());)if("/"===t){t=this.getToken();switch(t){case"FontMatrix":const a=this.readNumberArray();e.fontMatrix=a;break;case"Encoding":const r=this.getToken();let i;if(/^\\d+$/.test(r)){i=[];const e=0|parseInt(r,10);this.getToken();for(let a=0;a<e;a++){t=this.getToken();for(;"dup"!==t&&"def"!==t;){t=this.getToken();if(null===t)return}if("def"===t)break;const e=this.readInt();this.getToken();const a=this.getToken();i[e]=a;this.getToken()}}else i=getEncoding(r);e.builtInEncodi\ +ng=i;break;case"FontBBox":const n=this.readNumberArray();e.ascent=Math.max(n[3],n[1]);e.descent=Math.min(n[1],n[3]);e.ascentScaled=!0}}}}function findBlock(e,t,a){const r=e.length,i=t.length,n=r-i;let s=a,o=!1;for(;s<n;){let a=0;for(;a<i&&e[s+a]===t[a];)a++;if(a>=i){s+=a;for(;s<r&&isWhiteSpace(e[s]);)s++;o=!0;break}s++}return{found:o,length:s}}class Type1Font{constructor(e,t,a){let r=a.length1,i=a.length2,n=t.peekBytes(6);const s=128===n[0]&&1===n[1];if(s){t.skip(6);r=n[5]<<24|n[4]<<16|n[3]<<8|n\ +[2]}const o=function getHeaderBlock(e,t){const a=[101,101,120,101,99],r=e.pos;let i,n,s,o;try{i=e.getBytes(t);n=i.length}catch{}if(n===t){s=findBlock(i,a,t-2*a.length);if(s.found&&s.length===t)return{stream:new Stream(i),length:t}}warn(\'Invalid "Length1" property in Type1 font -- trying to recover.\');e.pos=r;for(;;){s=findBlock(e.peekBytes(2048),a,0);if(0===s.length)break;e.pos+=s.length;if(s.found){o=e.pos-r;break}}e.pos=r;if(o)return{stream:new Stream(e.getBytes(o)),length:o};warn(\'Unable to r\ +ecover "Length1" property in Type1 font -- using as is.\');return{stream:new Stream(e.getBytes(t)),length:t}}(t,r);new Type1Parser(o.stream,!1,Rr).extractFontHeader(a);if(s){n=t.getBytes(6);i=n[5]<<24|n[4]<<16|n[3]<<8|n[2]}const c=function getEexecBlock(e,t){const a=e.getBytes();if(0===a.length)throw new FormatError("getEexecBlock - no font program found.");return{stream:new Stream(a),length:a.length}}(t),l=new Type1Parser(c.stream,!0,Rr).extractFontProgram(a);for(const e in l.properties)a[e]=l.p\ +roperties[e];const h=l.charstrings,u=this.getType2Charstrings(h),d=this.getType2Subrs(l.subrs);this.charstrings=h;this.data=this.wrap(e,u,this.charstrings,d,a);this.seacs=this.getSeacs(l.charstrings)}get numGlyphs(){return this.charstrings.length+1}getCharset(){const e=[".notdef"];for(const{glyphName:t}of this.charstrings)e.push(t);return e}getGlyphMapping(e){const t=this.charstrings;if(e.composite){const a=Object.create(null);for(let r=0,i=t.length;r<i;r++){a[e.cMap.charCodeOf(r)]=r+1}return a}\ +const a=[".notdef"];let r,i;for(i=0;i<t.length;i++)a.push(t[i].glyphName);const n=e.builtInEncoding;if(n){r=Object.create(null);for(const e in n){i=a.indexOf(n[e]);i>=0&&(r[e]=i)}}return type1FontGlyphMapping(e,r,a)}hasGlyphId(e){if(e<0||e>=this.numGlyphs)return!1;if(0===e)return!0;return this.charstrings[e-1].charstring.length>0}getSeacs(e){const t=[];for(let a=0,r=e.length;a<r;a++){const r=e[a];r.seac&&(t[a+1]=r.seac)}return t}getType2Charstrings(e){const t=[];for(const a of e)t.push(a.charstr\ +ing);return t}getType2Subrs(e){let t=0;const a=e.length;t=a<1133?107:a<33769?1131:32768;const r=[];let i;for(i=0;i<t;i++)r.push([11]);for(i=0;i<a;i++)r.push(e[i]);return r}wrap(e,t,a,r,i){const n=new CFF;n.header=new CFFHeader(1,0,4,4);n.names=[e];const s=new CFFTopDict;s.setByName("version",391);s.setByName("Notice",392);s.setByName("FullName",393);s.setByName("FamilyName",394);s.setByName("Weight",395);s.setByName("Encoding",null);s.setByName("FontMatrix",i.fontMatrix);s.setByName("FontBBox",i\ +.bbox);s.setByName("charset",null);s.setByName("CharStrings",null);s.setByName("Private",null);n.topDict=s;const o=new CFFStrings;o.add("Version 0.11");o.add("See original notice");o.add(e);o.add(e);o.add("Medium");n.strings=o;n.globalSubrIndex=new CFFIndex;const c=t.length,l=[".notdef"];let h,u;for(h=0;h<c;h++){const e=a[h].glyphName;-1===Hr.indexOf(e)&&o.add(e);l.push(e)}n.charset=new CFFCharset(!1,0,l);const d=new CFFIndex;d.add([139,14]);for(h=0;h<c;h++)d.add(t[h]);n.charStrings=d;const f=ne\ +w CFFPrivateDict;f.setByName("Subrs",null);const g=["BlueValues","OtherBlues","FamilyBlues","FamilyOtherBlues","StemSnapH","StemSnapV","BlueShift","BlueFuzz","BlueScale","LanguageGroup","ExpansionFactor","ForceBold","StdHW","StdVW"];for(h=0,u=g.length;h<u;h++){const e=g[h];if(!(e in i.privateData))continue;const t=i.privateData[e];if(Array.isArray(t))for(let e=t.length-1;e>0;e--)t[e]-=t[e-1];f.setByName(e,t)}n.topDict.privateDict=f;const p=new CFFIndex;for(h=0,u=r.length;h<u;h++)p.add(r[h]);f.su\ +brsIndex=p;return new CFFCompiler(n).compile()}}const bi=[[57344,63743],[1048576,1114109]],yi=1e3,wi=["ascent","bbox","black","bold","charProcOperatorList","cssFontInfo","data","defaultVMetrics","defaultWidth","descent","disableFontFace","fallbackName","fontExtraProperties","fontMatrix","isInvalidPDFjsFont","isType3Font","italic","loadedName","mimetype","missingFile","name","remeasure","systemFontInfo","vertical"],xi=["cMap","composite","defaultEncoding","differences","isMonospace","isSerifFont"\ +,"isSymbolicFont","seacMap","subtype","toFontChar","toUnicode","type","vmetrics","widths"];function adjustWidths(e){if(!e.fontMatrix)return;if(e.fontMatrix[0]===t[0])return;const a=.001/e.fontMatrix[0],r=e.widths;for(const e in r)r[e]*=a;e.defaultWidth*=a}function amendFallbackToUnicode(e){if(!e.fallbackToUnicode)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;const t=[];for(const a in e.fallbackToUnicode)e.toUnicode.has(a)||(t[a]=e.fallbackToUnicode[a]);t.length>0&&e.toUnicode.amen\ +d(t)}class fonts_Glyph{constructor(e,t,a,r,i,n,s,o,c){this.originalCharCode=e;this.fontChar=t;this.unicode=a;this.accent=r;this.width=i;this.vmetric=n;this.operatorListId=s;this.isSpace=o;this.isInFont=c}get category(){return shadow(this,"category",function getCharUnicodeCategory(e){const t=Dr.get(e);if(t)return t;const a=e.match(Mr),r={isWhitespace:!!a?.[1],isZeroWidthDiacritic:!!a?.[2],isInvisibleFormatMark:!!a?.[3]};Dr.set(e,r);return r}(this.unicode),!0)}}function int16(e,t){return(e<<8)+t}f\ +unction writeSignedInt16(e,t,a){e[t+1]=a;e[t]=a>>>8}function signedInt16(e,t){const a=(e<<8)+t;return 32768&a?a-65536:a}function string16(e){return String.fromCharCode(e>>8&255,255&e)}function safeString16(e){e>32767?e=32767:e<-32768&&(e=-32768);return String.fromCharCode(e>>8&255,255&e)}function isTrueTypeCollectionFile(e){return"ttcf"===bytesToString(e.peekBytes(4))}function getFontFileType(e,{type:t,subtype:a,composite:r}){let i,n;if(function isTrueTypeFile(e){const t=e.peekBytes(4);return 65\ +536===readUint32(t,0)||"true"===bytesToString(t)}(e)||isTrueTypeCollectionFile(e))i=r?"CIDFontType2":"TrueType";else if(function isOpenTypeFile(e){return"OTTO"===bytesToString(e.peekBytes(4))}(e))i=r?"CIDFontType2":"OpenType";else if(function isType1File(e){const t=e.peekBytes(2);return 37===t[0]&&33===t[1]||128===t[0]&&1===t[1]}(e))i=r?"CIDFontType0":"MMType1"===t?"MMType1":"Type1";else if(function isCFFFile(e){const t=e.peekBytes(4);return t[0]>=1&&t[3]>=1&&t[3]<=4}(e))if(r){i="CIDFontType0";n\ +="CIDFontType0C"}else{i="MMType1"===t?"MMType1":"Type1";n="Type1C"}else{warn("getFontFileType: Unable to detect correct font file Type/Subtype.");i=t;n=a}return[i,n]}function applyStandardFontGlyphMap(e,t){for(const a in t)e[+a]=t[a]}function buildToFontChar(e,t,a){const r=[];let i;for(let a=0,n=e.length;a<n;a++){i=getUnicodeForGlyph(e[a],t);-1!==i&&(r[a]=i)}for(const e in a){i=getUnicodeForGlyph(a[e],t);-1!==i&&(r[+e]=i)}return r}function isMacNameRecord(e){return 1===e.platform&&0===e.encoding\ +&&0===e.language}function isWinNameRecord(e){return 3===e.platform&&1===e.encoding&&1033===e.language}function convertCidString(e,t,a=!1){switch(t.length){case 1:return t.charCodeAt(0);case 2:return t.charCodeAt(0)<<8|t.charCodeAt(1)}const r=`Unsupported CID string (charCode ${e}): "${t}".`;if(a)throw new FormatError(r);warn(r);return t}function adjustMapping(e,t,a,r){const i=Object.create(null),n=new Map,s=[],o=new Set;let c=0;let l=bi[c][0],h=bi[c][1];let u=null;for(const f in e){let g=e[f];if\ +(!t(g))continue;if(l>h){c++;if(c>=bi.length){warn("Ran out of space in font private use area.");break}l=bi[c][0];h=bi[c][1]}const p=l++;0===g&&(g=a);let m=r.get(f);if("string"==typeof m)if(1===m.length)m=m.codePointAt(0);else{if(!u){u=new Map;for(let e=64256;e<=64335;e++){const t=String.fromCharCode(e).normalize("NFKD");t.length>1&&u.set(t,e)}}m=u.get(m)||m.codePointAt(0)}if(m&&!(d=m,bi[0][0]<=d&&d<=bi[0][1]||bi[1][0]<=d&&d<=bi[1][1])&&!o.has(g)){n.set(m,g);o.add(g)}i[p]=g;s[f]=p}var d;return{to\ +FontChar:s,charCodeToGlyphId:i,toUnicodeExtraMap:n,nextAvailableFontCharCode:l}}function createCmapTable(e,t,a){const r=function getRanges(e,t,a){const r=[];for(const t in e)e[t]>=a||r.push({fontCharCode:0|t,glyphId:e[t]});if(t)for(const[e,i]of t)i>=a||r.push({fontCharCode:e,glyphId:i});0===r.length&&r.push({fontCharCode:0,glyphId:0});r.sort(((e,t)=>e.fontCharCode-t.fontCharCode));const i=[],n=r.length;for(let e=0;e<n;){const t=r[e].fontCharCode,a=[r[e].glyphId];++e;let s=t;for(;e<n&&s+1===r[e].\ +fontCharCode;){a.push(r[e].glyphId);++s;++e;if(65535===s)break}i.push([t,s,a])}return i}(e,t,a),i=r.at(-1)[1]>65535?2:1;let n,s,o,c,l="\\0\\0"+string16(i)+"\\0\\0"+string32(4+8*i);for(n=r.length-1;n>=0&&!(r[n][0]<=65535);--n);const h=n+1;r[n][0]<65535&&65535===r[n][1]&&(r[n][1]=65534);const u=r[n][1]<65535?1:0,d=h+u,f=OpenTypeFileBuilder.getSearchParams(d,2);let g,p,m,b,y="",w="",x="",S="",k="",C=0;for(n=0,s=h;n<s;n++){g=r[n];p=g[0];m=g[1];y+=string16(p);w+=string16(m);b=g[2];let e=!0;for(o=1,c=b.\ +length;o<c;++o)if(b[o]!==b[o-1]+1){e=!1;break}if(e){x+=string16(b[0]-p&65535);S+=string16(0)}else{const e=2*(d-n)+2*C;C+=m-p+1;x+=string16(0);S+=string16(e);for(o=0,c=b.length;o<c;++o)k+=string16(b[o])}}if(u>0){w+="ÿÿ";y+="ÿÿ";x+="\\0";S+="\\0\\0"}const v="\\0\\0"+string16(2*d)+string16(f.range)+string16(f.entry)+string16(f.rangeShift)+w+"\\0\\0"+y+x+S+k;let F="",T="";if(i>1){l+="\\0\\0\\n"+string32(4+8*i+4+v.length);F="";for(n=0,s=r.length;n<s;n++){g=r[n];p=g[0];b=g[2];let e=b[0];for(o=1,c=b.length;o<c\ +;++o)if(b[o]!==b[o-1]+1){m=g[0]+o-1;F+=string32(p)+string32(m)+string32(e);p=m+1;e=b[o]}F+=string32(p)+string32(g[1])+string32(e)}T="\\0\\f\\0\\0"+string32(F.length+16)+"\\0\\0\\0\\0"+string32(F.length/12)}return l+"\\0"+string16(v.length+4)+v+T+F}function createOS2Table(e,t,a){a||={unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0};let r=0,i=0,n=0,s=0,o=null,c=0,l=-1;if(t){for(let e in t){e|=0;(o>e||!o)&&(o=e);c<e&&(c=e);l=getUnicodeRangeFor(e,l);if(l<32)r|=1<<l;else if(l<64)i|=1<<l-32;else if(l<96)n|=1<<l\ +-64;else{if(!(l<123))throw new FormatError("Unicode ranges Bits > 123 are reserved for internal usage");s|=1<<l-96}}c>65535&&(c=65535)}else{o=0;c=255}const h=e.bbox||[0,0,0,0],u=a.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),d=e.ascentScaled?1:u/yi,f=a.ascent||Math.round(d*(e.ascent||h[3]));let g=a.descent||Math.round(d*(e.descent||h[1]));g>0&&e.descent>0&&h[1]<0&&(g=-g);const p=a.yMax||f,m=-a.yMin||-g;return"\\0$ô\\0\\0\\0Š»\\0\\0\\0ŒŠ»\\0\\0ß\\x001\\0\\0\\0\ +\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+string32(r)+string32(i)+string32(n)+string32(s)+"*21*"+string16(e.italicAngle?1:0)+string16(o||e.firstChar)+string16(c||e.lastChar)+string16(f)+string16(g)+"\\0d"+string16(p)+string16(m)+"\\0\\0\\0\\0\\0\\0\\0\\0"+string16(e.xHeight)+string16(e.capHeight)+string16(0)+string16(o||e.firstChar)+"\\0"}function createPostTable(e){return"\\0\\0\\0"+string32(Math.floor(65536*e.italicAngle))+"\\0\\0\\0\\0"+string32(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\\ +0\\0\\0"}function createPostscriptName(e){return e.replaceAll(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function createNameTable(e,t){t||(t=[[],[]]);const a=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||createPostscriptName(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],r=[];let i,n,s,o,c;for(i=0,n=a.length;i<n;i++){c=t[1][i]||a[i];const e=[];for(s=0,o=c.length;s<o;s++)e.push(string16(c.charCodeAt(s)));r\ +.push(e.join(""))}const l=[a,r],h=["\\0","\\0"],u=["\\0\\0","\\0"],d=["\\0\\0","\\t"],f=a.length*h.length;let g="\\0\\0"+string16(f)+string16(12*f+6),p=0;for(i=0,n=h.length;i<n;i++){const e=l[i];for(s=0,o=e.length;s<o;s++){c=e[s];g+=h[i]+u[i]+d[i]+string16(s)+string16(c.length)+string16(p);p+=c.length}}g+=a.join("")+r.join("");return g}class Font{constructor(e,t,a,r){this.name=e;this.psName=null;this.mimetype=null;this.disableFontFace=r.disableFontFace;this.fontExtraProperties=r.fontExtraProperties;th\ +is.loadedName=a.loadedName;this.isType3Font=a.isType3Font;this.missingFile=!1;this.cssFontInfo=a.cssFontInfo;this._charsCache=Object.create(null);this._glyphCache=Object.create(null);let i=!!(a.flags&Er);if(!i&&!a.isSimulatedFlags){const t=e.replaceAll(/[,_]/g,"-").split("-",1)[0],a=Qr();for(const e of t.split("+"))if(a[e]){i=!0;break}}this.isSerifFont=i;this.isSymbolicFont=!!(a.flags&Pr);this.isMonospace=!!(a.flags&Nr);let{type:n,subtype:s}=a;this.type=n;this.subtype=s;this.systemFontInfo=a.sys\ +temFontInfo;const o=e.match(/^InvalidPDFjsFont_(.*)_\\d+$/);this.isInvalidPDFjsFont=!!o;this.isInvalidPDFjsFont?this.fallbackName=o[1]:this.isMonospace?this.fallbackName="monospace":this.isSerifFont?this.fallbackName="serif":this.fallbackName="sans-serif";if(this.systemFontInfo?.guessFallback){this.systemFontInfo.guessFallback=!1;this.systemFontInfo.css+=`,${this.fallbackName}`}this.differences=a.differences;this.widths=a.widths;this.defaultWidth=a.defaultWidth;this.composite=a.composite;this.cMa\ +p=a.cMap;this.capHeight=a.capHeight/yi;this.ascent=a.ascent/yi;this.descent=a.descent/yi;this.lineHeight=this.ascent-this.descent;this.fontMatrix=a.fontMatrix;this.bbox=a.bbox;this.defaultEncoding=a.defaultEncoding;this.toUnicode=a.toUnicode;this.toFontChar=[];if("Type3"===a.type){for(let e=0;e<256;e++)this.toFontChar[e]=this.differences[e]||a.defaultEncoding[e];return}this.cidEncoding=a.cidEncoding||"";this.vertical=!!a.vertical;if(this.vertical){this.vmetrics=a.vmetrics;this.defaultVMetrics=a.\ +defaultVMetrics}if(!t||t.isEmpty){t&&warn(\'Font file is empty in "\'+e+\'" (\'+this.loadedName+")");this.fallbackToSystemFont(a);return}[n,s]=getFontFileType(t,a);n===this.type&&s===this.subtype||info(`Inconsistent font file Type/SubType, expected: ${this.type}/${this.subtype} but found: ${n}/${s}.`);let c;try{switch(n){case"MMType1":info("MMType1 font ("+e+"), falling back to Type1.");case"Type1":case"CIDFontType0":this.mimetype="font/opentype";const r="Type1C"===s||"CIDFontType0C"===s?new CFFFont\ +(t,a):new Type1Font(e,t,a);adjustWidths(a);c=this.convert(e,r,a);break;case"OpenType":case"TrueType":case"CIDFontType2":this.mimetype="font/opentype";c=this.checkAndRepair(e,t,a);adjustWidths(a);this.isOpenType&&(n="OpenType");break;default:throw new FormatError(`Font ${n} is not supported`)}}catch(e){warn(e);this.fallbackToSystemFont(a);return}amendFallbackToUnicode(a);this.data=c;this.type=n;this.subtype=s;this.fontMatrix=a.fontMatrix;this.widths=a.widths;this.defaultWidth=a.defaultWidth;this.\ +toUnicode=a.toUnicode;this.seacMap=a.seacMap}get renderer(){return shadow(this,"renderer",FontRendererFactory.create(this,Rr))}exportData(){const e=this.fontExtraProperties?[...wi,...xi]:wi,t=Object.create(null);for(const a of e){const e=this[a];void 0!==e&&(t[a]=e)}return t}fallbackToSystemFont(e){this.missingFile=!0;const{name:t,type:a}=this;let r=normalizeFontName(t);const i=Jr(),n=Zr(),s=!!i[r],o=!(!n[r]||!i[n[r]]);r=i[r]||n[r]||r;const c=ni()[r];if(c){isNaN(this.ascent)&&(this.ascent=c.asce\ +nt/yi);isNaN(this.descent)&&(this.descent=c.descent/yi);isNaN(this.capHeight)&&(this.capHeight=c.capHeight/yi)}this.bold=/bold/gi.test(r);this.italic=/oblique|italic/gi.test(r);this.black=/Black/g.test(t);const l=/Narrow/g.test(t);this.remeasure=(!s||l)&&Object.keys(this.widths).length>0;if((s||o)&&"CIDFontType2"===a&&this.cidEncoding.startsWith("Identity-")){const a=e.cidToGidMap,r=[];applyStandardFontGlyphMap(r,ti());/Arial-?Black/i.test(t)?applyStandardFontGlyphMap(r,ai()):/Calibri/i.test(t)&\ +&applyStandardFontGlyphMap(r,ri());if(a){for(const e in r){const t=r[e];void 0!==a[t]&&(r[+e]=a[t])}a.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof IdentityToUnicodeMap&&this.toUnicode.forEach((function(e,t){const i=r[e];void 0===a[i]&&(r[+e]=t)}))}this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){r[+e]=t}));this.toFontChar=r;this.toUnicode=new ToUnicodeMap(r)}else if(/Symbol/i.test(r))this.toFontChar=buildToFontChar(Cr,F\ +r(),this.differences);else if(/Dingbats/i.test(r))this.toFontChar=buildToFontChar(vr,Ir(),this.differences);else if(s||o){const e=buildToFontChar(this.defaultEncoding,Fr(),this.differences);"CIDFontType2"!==a||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((function(t,a){e[+t]=a}));this.toFontChar=e}else{const e=Fr(),a=[];this.toUnicode.forEach(((t,r)=>{if(!this.composite){const a=getUnicodeForGlyph(this.differences[t]||this.defau\ +ltEncoding[t],e);-1!==a&&(r=a)}a[+t]=r}));this.composite&&this.toUnicode instanceof IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(t)&&applyStandardFontGlyphMap(a,ti());this.toFontChar=a}amendFallbackToUnicode(e);this.loadedName=r.split("-",1)[0]}checkAndRepair(e,t,a){const r=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function readTables(e,t){const a=Object.create(null);a["OS/2"]=null;a.cmap=null;a.head=null;a.hhea=null;a.hmtx=null;a.maxp=nu\ +ll;a.name=null;a.post=null;for(let i=0;i<t;i++){const t=readTableEntry(e);r.includes(t.tag)&&(0!==t.length&&(a[t.tag]=t))}return a}function readTableEntry(e){const t=e.getString(4),a=e.getInt32()>>>0,r=e.getInt32()>>>0,i=e.getInt32()>>>0,n=e.pos;e.pos=e.start||0;e.skip(r);const s=e.getBytes(i);e.pos=n;if("head"===t){s[8]=s[9]=s[10]=s[11]=0;s[17]|=32}return{tag:t,checksum:a,length:i,offset:r,data:s}}function readOpenTypeHeader(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e\ +.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function sanitizeGlyph(e,t,a,r,i,n){const s={length:0,sizeOfInstructions:0};if(t<0||t>=e.length||a>e.length||a-t<=12)return s;const o=e.subarray(t,a),c=signedInt16(o[2],o[3]),l=signedInt16(o[4],o[5]),h=signedInt16(o[6],o[7]),u=signedInt16(o[8],o[9]);if(c>h){writeSignedInt16(o,2,h);writeSignedInt16(o,6,c)}if(l>u){writeSignedInt16(o,4,u);writeSignedInt16(o,8,l)}const d=signedInt16(o[0],o[1]);if(d<0){if(d<-1)return s;r.set(o,i);s.le\ +ngth=o.length;return s}let f,g=10,p=0;for(f=0;f<d;f++){p=(o[g]<<8|o[g+1])+1;g+=2}const m=g,b=o[g]<<8|o[g+1];s.sizeOfInstructions=b;g+=2+b;const y=g;let w=0;for(f=0;f<p;f++){const e=o[g++];192&e&&(o[g-1]=63&e);let t=2;2&e?t=1:16&e&&(t=0);let a=2;4&e?a=1:32&e&&(a=0);const r=t+a;w+=r;if(8&e){const e=o[g++];0===e&&(o[g-1]^=8);f+=e;w+=e*r}}if(0===w)return s;let x=g+w;if(x>o.length)return s;if(!n&&b>0){r.set(o.subarray(0,m),i);r.set([0,0],i+m);r.set(o.subarray(y,x),i+m+2);x-=b;o.length-x>3&&(x=x+3&-4)\ +;s.length=x;return s}if(o.length-x>3){x=x+3&-4;r.set(o.subarray(0,x),i);s.length=x;return s}r.set(o,i);s.length=o.length;return s}function readNameTable(e){const a=(t.start||0)+e.offset;t.pos=a;const r=[[],[]],i=[],n=e.length,s=a+n;if(0!==t.getUint16()||n<6)return[r,i];const o=t.getUint16(),c=t.getUint16();let l,h;for(l=0;l<o&&t.pos+12<=s;l++){const e={platform:t.getUint16(),encoding:t.getUint16(),language:t.getUint16(),name:t.getUint16(),length:t.getUint16(),offset:t.getUint16()};(isMacNameReco\ +rd(e)||isWinNameRecord(e))&&i.push(e)}for(l=0,h=i.length;l<h;l++){const e=i[l];if(e.length<=0)continue;const n=a+c+e.offset;if(n+e.length>s)continue;t.pos=n;const o=e.name;if(e.encoding){let a="";for(let r=0,i=e.length;r<i;r+=2)a+=String.fromCharCode(t.getUint16());r[1][o]=a}else r[0][o]=t.getString(e.length)}return[r,i]}const i=[0,0,0,0,0,0,0,0,-2,-2,-2,-2,0,0,-2,-5,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,-1,-1,1,-1,-999,0,1,0,-1,-2,0,-1,-2,-1,-1,0,-1,-1,0,0,-999,-999,-1,-1,-1,-1,-2,-999,-2,-2,-\ +999,0,-2,-2,0,0,-2,0,-2,0,0,0,-2,-1,-1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,0,-999,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-2,-999,-999,-999,-999,-999,-1,-1,-2,-2,0,0,0,0,-1,-1,-999,-2,-2,0,0,-1,-2,-2,0,0,0,-1,-1,-1,-2];function sanitizeTTProgram(e,t){let a,r,n,s,o,c=e.data,l=0,h=0,u=0;const d=[],f=[],g=[];let p=t.tooComplexToFollowFunctions,m=!1,b=0,y=0;for(let e=c.length;l<e;){const e=c[l++];if(64===e){r=c[l++];if(m||y)l+=r;else for(a=0;a<r;a++)d.push(c[l++])}else if(65===e){r=c[l++];\ +if(m||y)l+=2*r;else for(a=0;a<r;a++){n=c[l++];d.push(n<<8|c[l++])}}else if(176==(248&e)){r=e-176+1;if(m||y)l+=r;else for(a=0;a<r;a++)d.push(c[l++])}else if(184==(248&e)){r=e-184+1;if(m||y)l+=2*r;else for(a=0;a<r;a++){n=c[l++];d.push(signedInt16(n,c[l++]))}}else if(43!==e||p)if(44!==e||p){if(45===e)if(m){m=!1;h=l}else{o=f.pop();if(!o){warn("TT: ENDF bad stack");t.hintsValid=!1;return}s=g.pop();c=o.data;l=o.i;t.functionsStackDeltas[s]=d.length-o.stackTop}else if(137===e){if(m||y){warn("TT: nested \ +IDEFs not allowed");p=!0}m=!0;u=l}else if(88===e)++b;else if(27===e)y=b;else if(89===e){y===b&&(y=0);--b}else if(28===e&&!m&&!y){const e=d.at(-1);e>0&&(l+=e-1)}}else{if(m||y){warn("TT: nested FDEFs not allowed");p=!0}m=!0;u=l;s=d.pop();t.functionsDefined[s]={data:c,i:l}}else if(!m&&!y){s=d.at(-1);if(isNaN(s))info("TT: CALL empty stack (or invalid entry).");else{t.functionsUsed[s]=!0;if(s in t.functionsStackDeltas){const e=d.length+t.functionsStackDeltas[s];if(e<0){warn("TT: CALL invalid function\ +s stack delta.");t.hintsValid=!1;return}d.length=e}else if(s in t.functionsDefined&&!g.includes(s)){f.push({data:c,i:l,stackTop:d.length-1});g.push(s);o=t.functionsDefined[s];if(!o){warn("TT: CALL non-existent function");t.hintsValid=!1;return}c=o.data;l=o.i}}}if(!m&&!y){let t=0;e<=142?t=i[e]:e>=192&&e<=223?t=-1:e>=224&&(t=-2);if(e>=113&&e<=117){r=d.pop();isNaN(r)||(t=2*-r)}for(;t<0&&d.length>0;){d.pop();t++}for(;t>0;){d.push(NaN);t--}}}t.tooComplexToFollowFunctions=p;const w=[c];l>c.length&&w.p\ +ush(new Uint8Array(l-c.length));if(u>h){warn("TT: complementing a missing function tail");w.push(new Uint8Array([34,45]))}!function foldTTTable(e,t){if(t.length>1){let a,r,i=0;for(a=0,r=t.length;a<r;a++)i+=t[a].length;i=i+3&-4;const n=new Uint8Array(i);let s=0;for(a=0,r=t.length;a<r;a++){n.set(t[a],s);s+=t[a].length}e.data=n;e.length=i}}(e,w)}let n,s,o,c;if(isTrueTypeCollectionFile(t=new Stream(new Uint8Array(t.getBytes())))){const e=function readTrueTypeCollectionData(e,t){const{numFonts:a,offs\ +etTable:r}=function readTrueTypeCollectionHeader(e){const t=e.getString(4);assert("ttcf"===t,"Must be a TrueType Collection font.");const a=e.getUint16(),r=e.getUint16(),i=e.getInt32()>>>0,n=[];for(let t=0;t<i;t++)n.push(e.getInt32()>>>0);const s={ttcTag:t,majorVersion:a,minorVersion:r,numFonts:i,offsetTable:n};switch(a){case 1:return s;case 2:s.dsigTag=e.getInt32()>>>0;s.dsigLength=e.getInt32()>>>0;s.dsigOffset=e.getInt32()>>>0;return s}throw new FormatError(`Invalid TrueType Collection majorVe\ +rsion: ${a}.`)}(e),i=t.split("+");let n;for(let s=0;s<a;s++){e.pos=(e.start||0)+r[s];const a=readOpenTypeHeader(e),o=readTables(e,a.numTables);if(!o.name)throw new FormatError(\'TrueType Collection font must contain a "name" table.\');const[c]=readNameTable(o.name);for(let e=0,r=c.length;e<r;e++)for(let r=0,s=c[e].length;r<s;r++){const s=c[e][r]?.replaceAll(/\\s/g,"");if(s){if(s===t)return{header:a,tables:o};if(!(i.length<2))for(const e of i)s===e&&(n={name:e,header:a,tables:o})}}}if(n){warn(`TrueT\ +ype Collection does not contain "${t}" font, falling back to "${n.name}" font instead.`);return{header:n.header,tables:n.tables}}throw new FormatError(`TrueType Collection does not contain "${t}" font.`)}(t,this.name);n=e.header;s=e.tables}else{n=readOpenTypeHeader(t);s=readTables(t,n.numTables)}const l=!s["CFF "];if(l){if(!s.loca)throw new FormatError(\'Required "loca" table is not found\');if(!s.glyf){warn(\'Required "glyf" table is not found -- trying to recover.\');s.glyf={tag:"glyf",data:new Ui\ +nt8Array(0)}}this.isOpenType=!1}else{const t=a.composite&&(a.cidToGidMap?.length>0||!(a.cMap instanceof IdentityCMap));if("OTTO"===n.version&&!t||!s.head||!s.hhea||!s.maxp||!s.post){c=new Stream(s["CFF "].data);o=new CFFFont(c,a);return this.convert(e,o,a)}delete s.glyf;delete s.loca;delete s.fpgm;delete s.prep;delete s["cvt "];this.isOpenType=!0}if(!s.maxp)throw new FormatError(\'Required "maxp" table is not found\');t.pos=(t.start||0)+s.maxp.offset;let h=t.getInt32();const u=t.getUint16();if(655\ +36!==h&&20480!==h){if(6===s.maxp.length)h=20480;else{if(!(s.maxp.length>=32))throw new FormatError(\'"maxp" table has a wrong version number\');h=65536}!function writeUint32(e,t,a){e[t+3]=255&a;e[t+2]=a>>>8;e[t+1]=a>>>16;e[t]=a>>>24}(s.maxp.data,0,h)}if(a.scaleFactors?.length===u&&l){const{scaleFactors:e}=a,t=int16(s.head.data[50],s.head.data[51]),r=new GlyfTable({glyfTable:s.glyf.data,isGlyphLocationsLong:t,locaTable:s.loca.data,numGlyphs:u});r.scale(e);const{glyf:i,loca:n,isLocationLong:o}=r.wri\ +te();s.glyf.data=i;s.loca.data=n;if(o!==!!t){s.head.data[50]=0;s.head.data[51]=o?1:0}const c=s.hmtx.data;for(let t=0;t<u;t++){const a=4*t,r=Math.round(e[t]*int16(c[a],c[a+1]));c[a]=r>>8&255;c[a+1]=255&r;writeSignedInt16(c,a+2,Math.round(e[t]*signedInt16(c[a+2],c[a+3])))}}let d=u+1,f=!0;if(d>65535){f=!1;d=u;warn("Not enough space in glyfs to duplicate first glyph.")}let g=0,p=0;if(h>=65536&&s.maxp.length>=32){t.pos+=8;if(t.getUint16()>2){s.maxp.data[14]=0;s.maxp.data[15]=2}t.pos+=4;g=t.getUint16(\ +);t.pos+=4;p=t.getUint16()}s.maxp.data[4]=d>>8;s.maxp.data[5]=255&d;const m=function sanitizeTTPrograms(e,t,a,r){const i={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};e&&sanitizeTTProgram(e,i);t&&sanitizeTTProgram(t,i);e&&function checkInvalidFunctions(e,t){if(!e.tooComplexToFollowFunctions)if(e.functionsDefined.length>t){warn("TT: more functions defined than expected");e.hintsValid=!1}else for(let a=0,r=e.functionsUsed.length;a<r;a++\ +){if(a>t){warn("TT: invalid function id: "+a);e.hintsValid=!1;return}if(e.functionsUsed[a]&&!e.functionsDefined[a]){warn("TT: undefined function: "+a);e.hintsValid=!1;return}}}(i,r);if(a&&1&a.length){const e=new Uint8Array(a.length+1);e.set(a.data);a.data=e}return i.hintsValid}(s.fpgm,s.prep,s["cvt "],g);if(!m){delete s.fpgm;delete s.prep;delete s["cvt "]}!function sanitizeMetrics(e,t,a,r,i,n){if(!t){a&&(a.data=null);return}e.pos=(e.start||0)+t.offset;e.pos+=4;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2\ +;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;const s=e.getUint16();e.pos+=8;e.pos+=2;let o=e.getUint16();if(0!==s){if(!(2&int16(r.data[44],r.data[45]))){t.data[22]=0;t.data[23]=0}}if(o>i){info(`The numOfMetrics (${o}) should not be greater than the numGlyphs (${i}).`);o=i;t.data[34]=(65280&o)>>8;t.data[35]=255&o}const c=i-o-(a.length-4*o>>1);if(c>0){const e=new Uint8Array(a.length+2*c);e.set(a.data);if(n){e[a.length]=a.data[2];e[a.length+1]=a.data[3]}a.data=e}}(t,s.hhea,s.hmtx,s.head,d,f);if(!s\ +.head)throw new FormatError(\'Required "head" table is not found\');!function sanitizeHead(e,t,a){const r=e.data,i=function int32(e,t,a,r){return(e<<24)+(t<<16)+(a<<8)+r}(r[0],r[1],r[2],r[3]);if(i>>16!=1){info("Attempting to fix invalid version in head table: "+i);r[0]=0;r[1]=1;r[2]=0;r[3]=0}const n=int16(r[50],r[51]);if(n<0||n>1){info("Attempting to fix invalid indexToLocFormat in head table: "+n);const e=t+1;if(a===e<<1){r[50]=0;r[51]=0}else{if(a!==e<<2)throw new FormatError("Could not fix index\ +ToLocFormat: "+n);r[50]=0;r[51]=1}}}(s.head,u,l?s.loca.length:0);let b=Object.create(null);if(l){const e=int16(s.head.data[50],s.head.data[51]),t=function sanitizeGlyphLocations(e,t,a,r,i,n,s){let o,c,l;if(r){o=4;c=function fontItemDecodeLong(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};l=function fontItemEncodeLong(e,t,a){e[t]=a>>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}}else{o=2;c=function fontItemDecode(e,t){return e[t]<<9|e[t+1]<<1};l=function fontItemEncode(e,t,a){e[t]=a>>\ +9&255;e[t+1]=a>>1&255}}const h=n?a+1:a,u=o*(1+h),d=new Uint8Array(u);d.set(e.data.subarray(0,u));e.data=d;const f=t.data,g=f.length,p=new Uint8Array(g);let m,b;const y=[];for(m=0,b=0;m<a+1;m++,b+=o){let e=c(d,b);e>g&&(e=g);y.push({index:m,offset:e,endOffset:0})}y.sort(((e,t)=>e.offset-t.offset));for(m=0;m<a;m++)y[m].endOffset=y[m+1].offset;y.sort(((e,t)=>e.index-t.index));for(m=0;m<a;m++){const{offset:e,endOffset:t}=y[m];if(0!==e||0!==t)break;const a=y[m+1].offset;if(0!==a){y[m].endOffset=a;brea\ +k}}const w=y.at(-2);0!==w.offset&&0===w.endOffset&&(w.endOffset=g);const x=Object.create(null);let S=0;l(d,0,S);for(m=0,b=o;m<a;m++,b+=o){const e=sanitizeGlyph(f,y[m].offset,y[m].endOffset,p,S,i),t=e.length;0===t&&(x[m]=!0);e.sizeOfInstructions>s&&(s=e.sizeOfInstructions);S+=t;l(d,b,S)}if(0===S){const e=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(m=0,b=o;m<h;m++,b+=o)l(d,b,e.length);t.data=e}else if(n){const a=c(d,o);if(p.length>a+S)t.data=p.subarray(0,a+S);else{t.data=new Uint8Array(\ +a+S);t.data.set(p.subarray(0,S))}t.data.set(p.subarray(0,a),S);l(e.data,d.length-o,S+a)}else t.data=p.subarray(0,S);return{missingGlyphs:x,maxSizeOfInstructions:s}}(s.loca,s.glyf,u,e,m,f,p);b=t.missingGlyphs;if(h>=65536&&s.maxp.length>=32){s.maxp.data[26]=t.maxSizeOfInstructions>>8;s.maxp.data[27]=255&t.maxSizeOfInstructions}}if(!s.hhea)throw new FormatError(\'Required "hhea" table is not found\');if(0===s.hhea.data[10]&&0===s.hhea.data[11]){s.hhea.data[10]=255;s.hhea.data[11]=255}const y={unitsPe\ +rEm:int16(s.head.data[18],s.head.data[19]),yMax:signedInt16(s.head.data[42],s.head.data[43]),yMin:signedInt16(s.head.data[38],s.head.data[39]),ascent:signedInt16(s.hhea.data[4],s.hhea.data[5]),descent:signedInt16(s.hhea.data[6],s.hhea.data[7]),lineGap:signedInt16(s.hhea.data[8],s.hhea.data[9])};this.ascent=y.ascent/y.unitsPerEm;this.descent=y.descent/y.unitsPerEm;this.lineGap=y.lineGap/y.unitsPerEm;if(this.cssFontInfo?.lineHeight){this.lineHeight=this.cssFontInfo.metrics.lineHeight;this.lineGap=\ +this.cssFontInfo.metrics.lineGap}else this.lineHeight=this.ascent-this.descent+this.lineGap;s.post&&function readPostScriptTable(e,a,r){const i=(t.start||0)+e.offset;t.pos=i;const n=i+e.length,s=t.getInt32();t.skip(28);let o,c,l=!0;switch(s){case 65536:o=jr;break;case 131072:const e=t.getUint16();if(e!==r){l=!1;break}const i=[];for(c=0;c<e;++c){const e=t.getUint16();if(e>=32768){l=!1;break}i.push(e)}if(!l)break;const h=[],u=[];for(;t.pos<n;){const e=t.getByte();u.length=e;for(c=0;c<e;++c)u[c]=St\ +ring.fromCharCode(t.getByte());h.push(u.join(""))}o=[];for(c=0;c<e;++c){const e=i[c];e<258?o.push(jr[e]):o.push(h[e-258])}break;case 196608:break;default:warn("Unknown/unsupported post table version "+s);l=!1;a.defaultEncoding&&(o=a.defaultEncoding)}a.glyphNames=o;return l}(s.post,a,u);s.post={tag:"post",data:createPostTable(a)};const w=Object.create(null);function hasGlyph(e){return!b[e]}if(a.composite){const e=a.cidToGidMap||[],t=0===e.length;a.cMap.forEach((function(a,r){"string"==typeof r&&(\ +r=convertCidString(a,r,!0));if(r>65535)throw new FormatError("Max size of CID is 65,535");let i=-1;t?i=r:void 0!==e[r]&&(i=e[r]);i>=0&&i<u&&hasGlyph(i)&&(w[a]=i)}))}else{const e=function readCmapTable(e,t,a,r){if(!e){warn("No cmap table available.");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}let i,n=(t.start||0)+e.offset;t.pos=n;t.skip(2);const s=t.getUint16();let o,c=!1;for(let e=0;e<s;e++){const i=t.getUint16(),n=t.getUint16(),l=t.getInt32()>>>0;let h=!1;if(o?.platformId!=\ +=i||o?.encodingId!==n){if(0!==i||0!==n&&1!==n&&3!==n)if(1===i&&0===n)h=!0;else if(3!==i||1!==n||!r&&o){if(a&&3===i&&0===n){h=!0;let a=!0;if(e<s-1){const e=t.peekBytes(2);int16(e[0],e[1])<i&&(a=!1)}a&&(c=!0)}}else{h=!0;a||(c=!0)}else h=!0;h&&(o={platformId:i,encodingId:n,offset:l});if(c)break}}o&&(t.pos=n+o.offset);if(!o||-1===t.peekByte()){warn("Could not find a preferred cmap table.");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1}}const l=t.getUint16();let h=!1;const u=[];let d\ +,f;if(0===l){t.skip(4);for(d=0;d<256;d++){const e=t.getByte();e&&u.push({charCode:d,glyphId:e})}h=!0}else if(2===l){t.skip(4);const e=[];let a=0;for(let r=0;r<256;r++){const r=t.getUint16()>>3;e.push(r);a=Math.max(r,a)}const r=[];for(let e=0;e<=a;e++)r.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:signedInt16(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(let a=0;a<256;a++)if(0===e[a]){t.pos=r[0].idRangePos+2*a;f=t.getUint16();u.push({charCode:a,glyphId:f})}else{c\ +onst i=r[e[a]];for(d=0;d<i.entryCount;d++){const e=(a<<8)+d+i.firstCode;t.pos=i.idRangePos+2*d;f=t.getUint16();0!==f&&(f=(f+i.idDelta)%65536);u.push({charCode:e,glyphId:f})}}}else if(4===l){t.skip(4);const e=t.getUint16()>>1;t.skip(6);const a=[];let r;for(r=0;r<e;r++)a.push({end:t.getUint16()});t.skip(2);for(r=0;r<e;r++)a[r].start=t.getUint16();for(r=0;r<e;r++)a[r].delta=t.getUint16();let s,o=0;for(r=0;r<e;r++){i=a[r];const n=t.getUint16();if(n){s=(n>>1)-(e-r);i.offsetIndex=s;o=Math.max(o,s+i.en\ +d-i.start+1)}else i.offsetIndex=-1}const c=[];for(d=0;d<o;d++)c.push(t.getUint16());for(r=0;r<e;r++){i=a[r];n=i.start;const e=i.end,t=i.delta;s=i.offsetIndex;for(d=n;d<=e;d++)if(65535!==d){f=s<0?d:c[s+d-n];f=f+t&65535;u.push({charCode:d,glyphId:f})}}}else if(6===l){t.skip(4);const e=t.getUint16(),a=t.getUint16();for(d=0;d<a;d++){f=t.getUint16();const a=e+d;u.push({charCode:a,glyphId:f})}}else{if(12!==l){warn("cmap table has unsupported format: "+l);return{platformId:-1,encodingId:-1,mappings:[],\ +hasShortCmap:!1}}{t.skip(10);const e=t.getInt32()>>>0;for(d=0;d<e;d++){const e=t.getInt32()>>>0,a=t.getInt32()>>>0;let r=t.getInt32()>>>0;for(let t=e;t<=a;t++)u.push({charCode:t,glyphId:r++})}}}u.sort(((e,t)=>e.charCode-t.charCode));const g=[],p=new Set;for(const e of u){const{charCode:t}=e;if(!p.has(t)){p.add(t);g.push(e)}}return{platformId:o.platformId,encodingId:o.encodingId,mappings:g,hasShortCmap:h}}(s.cmap,t,this.isSymbolicFont,a.hasEncoding),r=e.platformId,i=e.encodingId,n=e.mappings;let \ +o=[],c=!1;!a.hasEncoding||"MacRomanEncoding"!==a.baseEncodingName&&"WinAnsiEncoding"!==a.baseEncodingName||(o=getEncoding(a.baseEncodingName));if(a.hasEncoding&&!this.isSymbolicFont&&(3===r&&1===i||1===r&&0===i)){const e=Fr();for(let t=0;t<256;t++){let s;s=void 0!==this.differences[t]?this.differences[t]:o.length&&""!==o[t]?o[t]:Ar[t];if(!s)continue;const c=recoverGlyphName(s,e);let l;3===r&&1===i?l=e[c]:1===r&&0===i&&(l=Sr.indexOf(c));if(void 0===l){if(!a.glyphNames&&a.hasIncludedToUnicodeMap&&\ +!(this.toUnicode instanceof IdentityToUnicodeMap)){const e=this.toUnicode.get(t);e&&(l=e.codePointAt(0))}if(void 0===l)continue}for(const e of n)if(e.charCode===l){w[t]=e.glyphId;break}}}else if(0===r){for(const e of n)w[e.charCode]=e.glyphId;c=!0}else if(3===r&&0===i)for(const e of n){let t=e.charCode;t>=61440&&t<=61695&&(t&=255);w[t]=e.glyphId}else for(const e of n)w[e.charCode]=e.glyphId;if(a.glyphNames&&(o.length||this.differences.length))for(let e=0;e<256;++e){if(!c&&void 0!==w[e])continue;\ +const t=this.differences[e]||o[e];if(!t)continue;const r=a.glyphNames.indexOf(t);r>0&&hasGlyph(r)&&(w[e]=r)}}0===w.length&&(w[0]=0);let x=d-1;f||(x=0);if(!a.cssFontInfo){const e=adjustMapping(w,hasGlyph,x,this.toUnicode);this.toFontChar=e.toFontChar;s.cmap={tag:"cmap",data:createCmapTable(e.charCodeToGlyphId,e.toUnicodeExtraMap,d)};s["OS/2"]&&function validateOS2Table(e,t){t.pos=(t.start||0)+e.offset;const a=t.getUint16();t.skip(60);const r=t.getUint16();if(a<4&&768&r)return!1;if(t.getUint16()>t\ +.getUint16())return!1;t.skip(6);if(0===t.getUint16())return!1;e.data[8]=e.data[9]=0;return!0}(s["OS/2"],t)||(s["OS/2"]={tag:"OS/2",data:createOS2Table(a,e.charCodeToGlyphId,y)})}if(!l)try{c=new Stream(s["CFF "].data);o=new CFFParser(c,a,Rr).parse();o.duplicateFirstGlyph();const e=new CFFCompiler(o);s["CFF "].data=e.compile()}catch{warn("Failed to compile font "+a.loadedName)}if(s.name){const[t,r]=readNameTable(s.name);s.name.data=createNameTable(e,t);this.psName=t[0][6]||null;a.composite||functi\ +on adjustTrueTypeToUnicode(e,t,a){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(e.hasEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;if(!t)return;if(0===a.length)return;if(e.defaultEncoding===kr)return;for(const e of a)if(!isWinNameRecord(e))return;const r=kr,i=[],n=Fr();for(const e in r){const t=r[e];if(""===t)continue;const a=n[t];void 0!==a&&(i[e]=String.fromCharCode(a))}i.length>0&&e.toUnicode.amend(i)}(a,this.isSymbolicFont,r)}else s.name={tag:"name\ +",data:createNameTable(this.name)};const S=new OpenTypeFileBuilder(n.version);for(const e in s)S.addTable(e,s[e].data);return S.toArray()}convert(e,a,r){r.fixedPitch=!1;r.builtInEncoding&&function adjustType1ToUnicode(e,t){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(t===e.defaultEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;const a=[],r=Fr();for(const i in t){if(e.hasEncoding&&(e.baseEncodingName||void 0!==e.differences[i]))continue;const n=getUnicod\ +eForGlyph(t[i],r);-1!==n&&(a[i]=String.fromCharCode(n))}a.length>0&&e.toUnicode.amend(a)}(r,r.builtInEncoding);let i=1;a instanceof CFFFont&&(i=a.numGlyphs-1);const n=a.getGlyphMapping(r);let s=null,o=n,c=null;if(!r.cssFontInfo){s=adjustMapping(n,a.hasGlyphId.bind(a),i,this.toUnicode);this.toFontChar=s.toFontChar;o=s.charCodeToGlyphId;c=s.toUnicodeExtraMap}const l=a.numGlyphs;function getCharCodes(e,t){let a=null;for(const r in e)t===e[r]&&(a||=[]).push(0|r);return a}function createCharCode(e,t)\ +{for(const a in e)if(t===e[a])return 0|a;s.charCodeToGlyphId[s.nextAvailableFontCharCode]=t;return s.nextAvailableFontCharCode++}const h=a.seacs;if(s&&h?.length){const e=r.fontMatrix||t,i=a.getCharset(),o=Object.create(null);for(let t in h){t|=0;const a=h[t],r=Ar[a[2]],c=Ar[a[3]],l=i.indexOf(r),u=i.indexOf(c);if(l<0||u<0)continue;const d={x:a[0]*e[0]+a[1]*e[2]+e[4],y:a[0]*e[1]+a[1]*e[3]+e[5]},f=getCharCodes(n,t);if(f)for(const e of f){const t=s.charCodeToGlyphId,a=createCharCode(t,l),r=createCha\ +rCode(t,u);o[e]={baseFontCharCode:a,accentFontCharCode:r,accentOffset:d}}}r.seacMap=o}const u=r.fontMatrix?1/Math.max(...r.fontMatrix.slice(0,4).map(Math.abs)):1e3,d=new OpenTypeFileBuilder("OTTO");d.addTable("CFF ",a.data);d.addTable("OS/2",createOS2Table(r,o));d.addTable("cmap",createCmapTable(o,c,l));d.addTable("head","\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0_<õ\\0\\0"+safeString16(u)+"\\0\\0\\0\\0ž\\v~\'\\0\\0\\0\\0ž\\v~\'\\0\\0"+safeString16(r.descent)+"ÿ"+safeString16(r.ascent)+string16(r.italicAngle?2:0)+"\\0\\0\\0\\0\\0\\0\\\ +0");d.addTable("hhea","\\0\\0\\0"+safeString16(r.ascent)+safeString16(r.descent)+"\\0\\0ÿÿ\\0\\0\\0\\0\\0\\0"+safeString16(r.capHeight)+safeString16(Math.tan(r.italicAngle)*r.xHeight)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"+string16(l));d.addTable("hmtx",function fontFieldsHmtx(){const e=a.charstrings,t=a.cff?a.cff.widths:null;let r="\\0\\0\\0\\0";for(let a=1,i=l;a<i;a++){let i=0;if(e){const t=e[a-1];i="width"in t?t.width:0}else t&&(i=Math.ceil(t[a]||0));r+=string16(i)+string16(0)}return r}());d.addTable("maxp","\\0\\0P\\0"+\ +string16(l));d.addTable("name",createNameTable(e));d.addTable("post",createPostTable(r));return d.toArray()}get _spaceWidth(){const e=["space","minus","one","i","I"];let t;for(const a of e){if(a in this.widths){t=this.widths[a];break}const e=Fr()[a];let r=0;if(this.composite&&this.cMap.contains(e)){r=this.cMap.lookup(e);"string"==typeof r&&(r=convertCidString(e,r))}!r&&this.toUnicode&&(r=this.toUnicode.charCodeOf(e));r<=0&&(r=e);t=this.widths[r];if(t)break}return shadow(this,"_spaceWidth",t||thi\ +s.defaultWidth)}_charToGlyph(e,t=!1){let a,r,i,n=this._glyphCache[e];if(n?.isSpace===t)return n;let s=e;if(this.cMap?.contains(e)){s=this.cMap.lookup(e);"string"==typeof s&&(s=convertCidString(e,s))}r=this.widths[s];"number"!=typeof r&&(r=this.defaultWidth);const o=this.vmetrics?.[s];let c=this.toUnicode.get(e)||e;"number"==typeof c&&(c=String.fromCharCode(c));let l=void 0!==this.toFontChar[e];a=this.toFontChar[e]||e;if(this.missingFile){const t=this.differences[e]||this.defaultEncoding[e];if(("\ +.notdef"===t||""===t)&&"Type1"===this.type){a=32;if(""===t){r||=this._spaceWidth;c=String.fromCharCode(a)}}a=function mapSpecialUnicodeValues(e){return e>=65520&&e<=65535?0:e>=62976&&e<=63743?Tr()[e]||e:173===e?45:e}(a)}this.isType3Font&&(i=a);let h=null;if(this.seacMap?.[e]){l=!0;const t=this.seacMap[e];a=t.baseFontCharCode;h={fontChar:String.fromCodePoint(t.accentFontCharCode),offset:t.accentOffset}}let u="";"number"==typeof a&&(a<=1114111?u=String.fromCodePoint(a):warn(`charToGlyph - invalid \ +fontCharCode: ${a}`));if(this.missingFile&&this.vertical&&1===u.length){const e=_r()[u.charCodeAt(0)];e&&(u=c=String.fromCharCode(e))}n=new fonts_Glyph(e,u,c,h,r,o,i,t,l);return this._glyphCache[e]=n}charsToGlyphs(e){let t=this._charsCache[e];if(t)return t;t=[];if(this.cMap){const a=Object.create(null),r=e.length;let i=0;for(;i<r;){this.cMap.readCharCode(e,i,a);const{charcode:r,length:n}=a;i+=n;const s=this._charToGlyph(r,1===n&&32===e.charCodeAt(i-1));t.push(s)}}else for(let a=0,r=e.length;a<r;\ +++a){const r=e.charCodeAt(a),i=this._charToGlyph(r,32===r);t.push(i)}return this._charsCache[e]=t}getCharPositions(e){const t=[];if(this.cMap){const a=Object.create(null);let r=0;for(;r<e.length;){this.cMap.readCharCode(e,r,a);const i=a.length;t.push([r,r+i]);r+=i}}else for(let a=0,r=e.length;a<r;++a)t.push([a,a+1]);return t}get glyphCacheValues(){return Object.values(this._glyphCache)}encodeString(e){const t=[],a=[],hasCurrentBufErrors=()=>t.length%2==1,r=this.toUnicode instanceof IdentityToUni\ +codeMap?e=>this.toUnicode.charCodeOf(e):e=>this.toUnicode.charCodeOf(String.fromCodePoint(e));for(let i=0,n=e.length;i<n;i++){const n=e.codePointAt(i);n>55295&&(n<57344||n>65533)&&i++;if(this.toUnicode){const e=r(n);if(-1!==e){if(hasCurrentBufErrors()){t.push(a.join(""));a.length=0}for(let t=(this.cMap?this.cMap.getCharCodeLength(e):1)-1;t>=0;t--)a.push(String.fromCharCode(e>>8*t&255));continue}}if(!hasCurrentBufErrors()){t.push(a.join(""));a.length=0}a.push(String.fromCodePoint(n))}t.push(a.joi\ +n(""));return t}}class ErrorFont{constructor(e){this.error=e;this.loadedName="g_font_error";this.missingFile=!0}charsToGlyphs(){return[]}encodeString(e){return[e]}exportData(){return{error:this.error}}}const Si=2,Ai=3,ki=4,Ci=5,vi=6,Fi=7;class Pattern{constructor(){unreachable("Cannot initialize Pattern.")}static parseShading(e,t,a,r,i,n){const s=e instanceof BaseStream?e.dict:e,o=s.get("ShadingType");try{switch(o){case Si:case Ai:return new RadialAxialShading(s,t,a,r,i,n);case ki:case Ci:case v\ +i:case Fi:return new MeshShading(e,t,a,r,i,n);default:throw new FormatError("Unsupported ShadingType: "+o)}}catch(e){if(e instanceof MissingDataException)throw e;warn(e);return new DummyShading}}}class BaseShading{static SMALL_NUMBER=1e-6;getIR(){unreachable("Abstract method `getIR` called.")}}class RadialAxialShading extends BaseShading{constructor(e,t,a,r,i,n){super();this.shadingType=e.get("ShadingType");let s=0;this.shadingType===Si?s=4:this.shadingType===Ai&&(s=6);this.coordsArr=e.getArray(\ +"Coords");if(!isNumberArray(this.coordsArr,s))throw new FormatError("RadialAxialShading: Invalid /Coords array.");const o=ColorSpaceUtils.parse({cs:e.getRaw("CS")||e.getRaw("ColorSpace"),xref:t,resources:a,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n});this.bbox=lookupNormalRect(e.getArray("BBox"),null);let c=0,l=1;const h=e.getArray("Domain");isNumberArray(h,2)&&([c,l]=h);let u=!1,d=!1;const f=e.getArray("Extend");(function isBooleanArray(e,t){return Array.isArray(e)&&(nu\ +ll===t||e.length===t)&&e.every((e=>"boolean"==typeof e))})(f,2)&&([u,d]=f);if(!(this.shadingType!==Ai||u&&d)){const[e,t,a,r,i,n]=this.coordsArr,s=Math.hypot(e-r,t-i);a<=n+s&&n<=a+s&&warn("Unsupported radial gradient.")}this.extendStart=u;this.extendEnd=d;const g=e.getRaw("Function"),p=r.create(g,!0),m=(l-c)/840,b=this.colorStops=[];if(c>=l||m<=0){info("Bad shading domain.");return}const y=new Float32Array(o.numComps),w=new Float32Array(1);let x=0;w[0]=c;p(w,0,y,0);const S=new Uint8ClampedArray(3\ +);o.getRgb(y,0,S);let[k,C,v]=S;b.push([0,Util.makeHexColor(k,C,v)]);let F=1;w[0]=c+m;p(w,0,y,0);o.getRgb(y,0,S);let[T,O,M]=S,D=T-k+1,R=O-C+1,N=M-v+1,E=T-k-1,L=O-C-1,j=M-v-1;for(let e=2;e<840;e++){w[0]=c+e*m;p(w,0,y,0);o.getRgb(y,0,S);const[t,a,r]=S,i=e-x;D=Math.min(D,(t-k+1)/i);R=Math.min(R,(a-C+1)/i);N=Math.min(N,(r-v+1)/i);E=Math.max(E,(t-k-1)/i);L=Math.max(L,(a-C-1)/i);j=Math.max(j,(r-v-1)/i);if(!(E<=D&&L<=R&&j<=N)){const e=Util.makeHexColor(T,O,M);b.push([F/840,e]);D=t-T+1;R=a-O+1;N=r-M+1;E=\ +t-T-1;L=a-O-1;j=r-M-1;x=F;k=T;C=O;v=M}F=e;T=t;O=a;M=r}b.push([1,Util.makeHexColor(T,O,M)]);let _="transparent";e.has("Background")&&(_=o.getRgbHex(e.get("Background"),0));if(!u){b.unshift([0,_]);b[1][0]+=BaseShading.SMALL_NUMBER}if(!d){b.at(-1)[0]-=BaseShading.SMALL_NUMBER;b.push([1,_])}this.colorStops=b}getIR(){const{coordsArr:e,shadingType:t}=this;let a,r,i,n,s;if(t===Si){r=[e[0],e[1]];i=[e[2],e[3]];n=null;s=null;a="axial"}else if(t===Ai){r=[e[0],e[1]];i=[e[3],e[4]];n=e[2];s=e[5];a="radial"}el\ +se unreachable(`getPattern type unknown: ${t}`);return["RadialAxial",a,this.bbox,this.colorStops,r,i,n,s]}}class MeshStreamReader{constructor(e,t){this.stream=e;this.context=t;this.buffer=0;this.bufferLength=0;const a=t.numComps;this.tmpCompsBuf=new Float32Array(a);const r=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(r):this.tmpCompsBuf}get hasData(){if(this.stream.end)return this.stream.pos<this.stream.end;if(this.bufferLength>0)return!0;const e=this.stream.getByte();if(e\ +<0)return!1;this.buffer=e;this.bufferLength=8;return!0}readBits(e){const{stream:t}=this;let{buffer:a,bufferLength:r}=this;if(32===e){if(0===r)return t.getInt32()>>>0;a=a<<24|t.getByte()<<16|t.getByte()<<8|t.getByte();const e=t.getByte();this.buffer=e&(1<<r)-1;return(a<<8-r|(255&e)>>r)>>>0}if(8===e&&0===r)return t.getByte();for(;r<e;){a=a<<8|t.getByte();r+=8}r-=e;this.bufferLength=r;this.buffer=a&(1<<r)-1;return a>>r}align(){this.buffer=0;this.bufferLength=0}readFlag(){return this.readBits(this.c\ +ontext.bitsPerFlag)}readCoordinate(){const{bitsPerCoordinate:e,decode:t}=this.context,a=this.readBits(e),r=this.readBits(e),i=e<32?1/((1<<e)-1):2.3283064365386963e-10;return[a*i*(t[1]-t[0])+t[0],r*i*(t[3]-t[2])+t[2]]}readComponents(){const{bitsPerComponent:e,colorFn:t,colorSpace:a,decode:r,numComps:i}=this.context,n=e<32?1/((1<<e)-1):2.3283064365386963e-10,s=this.tmpCompsBuf;for(let t=0,a=4;t<i;t++,a+=2){const i=this.readBits(e);s[t]=i*n*(r[a+1]-r[a])+r[a]}const o=this.tmpCsCompsBuf;t?.(s,0,o,0)\ +;return a.getRgb(o,0)}}let Ii=Object.create(null);function getB(e){return Ii[e]||=function buildB(e){const t=[];for(let a=0;a<=e;a++){const r=a/e,i=1-r;t.push(new Float32Array([i**3,3*r*i**2,3*r**2*i,r**3]))}return t}(e)}class MeshShading extends BaseShading{static MIN_SPLIT_PATCH_CHUNKS_AMOUNT=3;static MAX_SPLIT_PATCH_CHUNKS_AMOUNT=20;static TRIANGLE_DENSITY=20;constructor(e,t,a,r,i,n){super();if(!(e instanceof BaseStream))throw new FormatError("Mesh data is not a stream");const s=e.dict;this.s\ +hadingType=s.get("ShadingType");this.bbox=lookupNormalRect(s.getArray("BBox"),null);const o=ColorSpaceUtils.parse({cs:s.getRaw("CS")||s.getRaw("ColorSpace"),xref:t,resources:a,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n});this.background=s.has("Background")?o.getRgb(s.get("Background"),0):null;const c=s.getRaw("Function"),l=c?r.create(c,!0):null;this.coords=[];this.colors=[];this.figures=[];const h={bitsPerCoordinate:s.get("BitsPerCoordinate"),bitsPerComponent:s.get("Bits\ +PerComponent"),bitsPerFlag:s.get("BitsPerFlag"),decode:s.getArray("Decode"),colorFn:l,colorSpace:o,numComps:l?1:o.numComps},u=new MeshStreamReader(e,h);let d=!1;switch(this.shadingType){case ki:this._decodeType4Shading(u);break;case Ci:const e=0|s.get("VerticesPerRow");if(e<2)throw new FormatError("Invalid VerticesPerRow");this._decodeType5Shading(u,e);break;case vi:this._decodeType6Shading(u);d=!0;break;case Fi:this._decodeType7Shading(u);d=!0;break;default:unreachable("Unsupported mesh type.")\ +}if(d){this._updateBounds();for(let e=0,t=this.figures.length;e<t;e++)this._buildFigureFromPatch(e)}this._updateBounds();this._packData()}_decodeType4Shading(e){const t=this.coords,a=this.colors,r=[],i=[];let n=0;for(;e.hasData;){const s=e.readFlag(),o=e.readCoordinate(),c=e.readComponents();if(0===n){if(!(0<=s&&s<=2))throw new FormatError("Unknown type4 flag");switch(s){case 0:n=3;break;case 1:i.push(i.at(-2),i.at(-1));n=1;break;case 2:i.push(i.at(-3),i.at(-1));n=1}r.push(s)}i.push(t.length);t.\ +push(o);a.push(c);n--;e.align()}this.figures.push({type:"triangles",coords:new Int32Array(i),colors:new Int32Array(i)})}_decodeType5Shading(e,t){const a=this.coords,r=this.colors,i=[];for(;e.hasData;){const t=e.readCoordinate(),n=e.readComponents();i.push(a.length);a.push(t);r.push(n)}this.figures.push({type:"lattice",coords:new Int32Array(i),colors:new Int32Array(i),verticesPerRow:t})}_decodeType6Shading(e){const t=this.coords,a=this.colors,r=new Int32Array(16),i=new Int32Array(4);for(;e.hasDat\ +a;){const n=e.readFlag();if(!(0<=n&&n<=3))throw new FormatError("Unknown type6 flag");const s=t.length;for(let a=0,r=0!==n?8:12;a<r;a++)t.push(e.readCoordinate());const o=a.length;for(let t=0,r=0!==n?2:4;t<r;t++)a.push(e.readComponents());let c,l,h,u;switch(n){case 0:r[12]=s+3;r[13]=s+4;r[14]=s+5;r[15]=s+6;r[8]=s+2;r[11]=s+7;r[4]=s+1;r[7]=s+8;r[0]=s;r[1]=s+11;r[2]=s+10;r[3]=s+9;i[2]=o+1;i[3]=o+2;i[0]=o;i[1]=o+3;break;case 1:c=r[12];l=r[13];h=r[14];u=r[15];r[12]=u;r[13]=s+0;r[14]=s+1;r[15]=s+2;r[\ +8]=h;r[11]=s+3;r[4]=l;r[7]=s+4;r[0]=c;r[1]=s+7;r[2]=s+6;r[3]=s+5;c=i[2];l=i[3];i[2]=l;i[3]=o;i[0]=c;i[1]=o+1;break;case 2:c=r[15];l=r[11];r[12]=r[3];r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=r[7];r[11]=s+3;r[4]=l;r[7]=s+4;r[0]=c;r[1]=s+7;r[2]=s+6;r[3]=s+5;c=i[3];i[2]=i[1];i[3]=o;i[0]=c;i[1]=o+1;break;case 3:r[12]=r[0];r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=r[1];r[11]=s+3;r[4]=r[2];r[7]=s+4;r[0]=r[3];r[1]=s+7;r[2]=s+6;r[3]=s+5;i[2]=i[0];i[3]=o;i[0]=i[1];i[1]=o+1}r[5]=t.length;t.push([(-4*t[r[0]][0]-t[r[15]]\ +[0]+6*(t[r[4]][0]+t[r[1]][0])-2*(t[r[12]][0]+t[r[3]][0])+3*(t[r[13]][0]+t[r[7]][0]))/9,(-4*t[r[0]][1]-t[r[15]][1]+6*(t[r[4]][1]+t[r[1]][1])-2*(t[r[12]][1]+t[r[3]][1])+3*(t[r[13]][1]+t[r[7]][1]))/9]);r[6]=t.length;t.push([(-4*t[r[3]][0]-t[r[12]][0]+6*(t[r[2]][0]+t[r[7]][0])-2*(t[r[0]][0]+t[r[15]][0])+3*(t[r[4]][0]+t[r[14]][0]))/9,(-4*t[r[3]][1]-t[r[12]][1]+6*(t[r[2]][1]+t[r[7]][1])-2*(t[r[0]][1]+t[r[15]][1])+3*(t[r[4]][1]+t[r[14]][1]))/9]);r[9]=t.length;t.push([(-4*t[r[12]][0]-t[r[3]][0]+6*(t[r[8\ +]][0]+t[r[13]][0])-2*(t[r[0]][0]+t[r[15]][0])+3*(t[r[11]][0]+t[r[1]][0]))/9,(-4*t[r[12]][1]-t[r[3]][1]+6*(t[r[8]][1]+t[r[13]][1])-2*(t[r[0]][1]+t[r[15]][1])+3*(t[r[11]][1]+t[r[1]][1]))/9]);r[10]=t.length;t.push([(-4*t[r[15]][0]-t[r[0]][0]+6*(t[r[11]][0]+t[r[14]][0])-2*(t[r[12]][0]+t[r[3]][0])+3*(t[r[2]][0]+t[r[8]][0]))/9,(-4*t[r[15]][1]-t[r[0]][1]+6*(t[r[11]][1]+t[r[14]][1])-2*(t[r[12]][1]+t[r[3]][1])+3*(t[r[2]][1]+t[r[8]][1]))/9]);this.figures.push({type:"patch",coords:new Int32Array(r),colors:\ +new Int32Array(i)})}}_decodeType7Shading(e){const t=this.coords,a=this.colors,r=new Int32Array(16),i=new Int32Array(4);for(;e.hasData;){const n=e.readFlag();if(!(0<=n&&n<=3))throw new FormatError("Unknown type7 flag");const s=t.length;for(let a=0,r=0!==n?12:16;a<r;a++)t.push(e.readCoordinate());const o=a.length;for(let t=0,r=0!==n?2:4;t<r;t++)a.push(e.readComponents());let c,l,h,u;switch(n){case 0:r[12]=s+3;r[13]=s+4;r[14]=s+5;r[15]=s+6;r[8]=s+2;r[9]=s+13;r[10]=s+14;r[11]=s+7;r[4]=s+1;r[5]=s+12;\ +r[6]=s+15;r[7]=s+8;r[0]=s;r[1]=s+11;r[2]=s+10;r[3]=s+9;i[2]=o+1;i[3]=o+2;i[0]=o;i[1]=o+3;break;case 1:c=r[12];l=r[13];h=r[14];u=r[15];r[12]=u;r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=h;r[9]=s+9;r[10]=s+10;r[11]=s+3;r[4]=l;r[5]=s+8;r[6]=s+11;r[7]=s+4;r[0]=c;r[1]=s+7;r[2]=s+6;r[3]=s+5;c=i[2];l=i[3];i[2]=l;i[3]=o;i[0]=c;i[1]=o+1;break;case 2:c=r[15];l=r[11];r[12]=r[3];r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=r[7];r[9]=s+9;r[10]=s+10;r[11]=s+3;r[4]=l;r[5]=s+8;r[6]=s+11;r[7]=s+4;r[0]=c;r[1]=s+7;r[2]=s+6;r[3]=s+5\ +;c=i[3];i[2]=i[1];i[3]=o;i[0]=c;i[1]=o+1;break;case 3:r[12]=r[0];r[13]=s+0;r[14]=s+1;r[15]=s+2;r[8]=r[1];r[9]=s+9;r[10]=s+10;r[11]=s+3;r[4]=r[2];r[5]=s+8;r[6]=s+11;r[7]=s+4;r[0]=r[3];r[1]=s+7;r[2]=s+6;r[3]=s+5;i[2]=i[0];i[3]=o;i[0]=i[1];i[1]=o+1}this.figures.push({type:"patch",coords:new Int32Array(r),colors:new Int32Array(i)})}}_buildFigureFromPatch(e){const t=this.figures[e];assert("patch"===t.type,"Unexpected patch mesh figure");const a=this.coords,r=this.colors,i=t.coords,n=t.colors,s=Math.m\ +in(a[i[0]][0],a[i[3]][0],a[i[12]][0],a[i[15]][0]),o=Math.min(a[i[0]][1],a[i[3]][1],a[i[12]][1],a[i[15]][1]),c=Math.max(a[i[0]][0],a[i[3]][0],a[i[12]][0],a[i[15]][0]),l=Math.max(a[i[0]][1],a[i[3]][1],a[i[12]][1],a[i[15]][1]);let h=Math.ceil((c-s)*MeshShading.TRIANGLE_DENSITY/(this.bounds[2]-this.bounds[0]));h=MathClamp(h,MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT,MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT);let u=Math.ceil((l-o)*MeshShading.TRIANGLE_DENSITY/(this.bounds[3]-this.bounds[1]));u=MathCla\ +mp(u,MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT,MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT);const d=h+1,f=new Int32Array((u+1)*d),g=new Int32Array((u+1)*d);let p=0;const m=new Uint8Array(3),b=new Uint8Array(3),y=r[n[0]],w=r[n[1]],x=r[n[2]],S=r[n[3]],k=getB(u),C=getB(h);for(let e=0;e<=u;e++){m[0]=(y[0]*(u-e)+x[0]*e)/u|0;m[1]=(y[1]*(u-e)+x[1]*e)/u|0;m[2]=(y[2]*(u-e)+x[2]*e)/u|0;b[0]=(w[0]*(u-e)+S[0]*e)/u|0;b[1]=(w[1]*(u-e)+S[1]*e)/u|0;b[2]=(w[2]*(u-e)+S[2]*e)/u|0;for(let t=0;t<=h;t++,p++){if(!(0!==e\ +&&e!==u||0!==t&&t!==h))continue;let n=0,s=0,o=0;for(let r=0;r<=3;r++)for(let c=0;c<=3;c++,o++){const l=k[e][r]*C[t][c];n+=a[i[o]][0]*l;s+=a[i[o]][1]*l}f[p]=a.length;a.push([n,s]);g[p]=r.length;const c=new Uint8Array(3);c[0]=(m[0]*(h-t)+b[0]*t)/h|0;c[1]=(m[1]*(h-t)+b[1]*t)/h|0;c[2]=(m[2]*(h-t)+b[2]*t)/h|0;r.push(c)}}f[0]=i[0];g[0]=n[0];f[h]=i[3];g[h]=n[1];f[d*u]=i[12];g[d*u]=n[2];f[d*u+h]=i[15];g[d*u+h]=n[3];this.figures[e]={type:"lattice",coords:f,colors:g,verticesPerRow:d}}_updateBounds(){let e\ +=this.coords[0][0],t=this.coords[0][1],a=e,r=t;for(let i=1,n=this.coords.length;i<n;i++){const n=this.coords[i][0],s=this.coords[i][1];e=e>n?n:e;t=t>s?s:t;a=a<n?n:a;r=r<s?s:r}this.bounds=[e,t,a,r]}_packData(){let e,t,a,r;const i=this.coords,n=new Float32Array(2*i.length);for(e=0,a=0,t=i.length;e<t;e++){const t=i[e];n[a++]=t[0];n[a++]=t[1]}this.coords=n;const s=this.colors,o=new Uint8Array(3*s.length);for(e=0,a=0,t=s.length;e<t;e++){const t=s[e];o[a++]=t[0];o[a++]=t[1];o[a++]=t[2]}this.colors=o;c\ +onst c=this.figures;for(e=0,t=c.length;e<t;e++){const t=c[e],i=t.coords,n=t.colors;for(a=0,r=i.length;a<r;a++){i[a]*=2;n[a]*=3}}}getIR(){const{bounds:e}=this;if(e[2]-e[0]==0||e[3]-e[1]==0)throw new FormatError(`Invalid MeshShading bounds: [${e}].`);return["Mesh",this.shadingType,this.coords,this.colors,this.figures,e,this.bbox,this.background]}}class DummyShading extends BaseShading{getIR(){return["Dummy"]}}function getTilingPatternIR(e,t,a){const r=lookupMatrix(t.getArray("Matrix"),Fa),i=lookup\ +NormalRect(t.getArray("BBox"),null);if(!i||i[2]-i[0]==0||i[3]-i[1]==0)throw new FormatError("Invalid getTilingPatternIR /BBox array.");const n=t.get("XStep");if("number"!=typeof n)throw new FormatError("Invalid getTilingPatternIR /XStep value.");const s=t.get("YStep");if("number"!=typeof s)throw new FormatError("Invalid getTilingPatternIR /YStep value.");const o=t.get("PaintType");if(!Number.isInteger(o))throw new FormatError("Invalid getTilingPatternIR /PaintType value.");const c=t.get("TilingT\ +ype");if(!Number.isInteger(c))throw new FormatError("Invalid getTilingPatternIR /TilingType value.");return["TilingPattern",a,e,r,i,n,s,o,c]}const Ti=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.54657,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.73293,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.9121,.86943,.79795,.88198\ +,.77958,.70864,.81055,.90399,.88653,.96017,.82577,.77892,.78257,.97507,1.54657,.97507,.85284,.89552,.90176,.88762,.8785,.75241,.8785,.90518,.95015,.77618,.8785,.88401,.91916,.86304,.88401,.91488,.8785,.8801,.8785,.8785,.91343,.7173,1.04106,.8785,.85075,.95794,.82616,.85162,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.12401,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.8284\ +5,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.73293,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.9121,.86943,.86943,.86943,.86943,.86943,.85284,.87508,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.88762,.88762,.88762,.88762,.88762,.88762,.8715,.75241,.90518,.90518,.90518,.90518,.88401,.88401,.88401,.88401,.8785,.8785,.8801,.8801,.8801,.8801,.8801,.90747,.89049,.8785,.8785,.8785,.8785,.85162,.8785,.85162,.83908,.88762,.83908,.88762,.83908,.88762,.73293,.\ +75241,.73293,.75241,.73293,.75241,.73293,.75241,.87289,.83016,.88506,.93125,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.81921,.77618,.81921,.77618,.81921,.77618,1,1,.87356,.8785,.91075,.89608,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76229,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.79468,.91926,.88175,.70823,.94903,.9121,.8785,1,1,.9121,.8785,.87802,.88656,.8785,.86943,.8801,.86943,.8801,.86943,.8801,.87402,.89291,.77958,.913\ +43,1,1,.77958,.91343,.70864,.7173,.70864,.7173,.70864,.7173,.70864,.7173,1,1,.81055,.75841,.81055,1.06452,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.96017,.95794,.77892,.85162,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.88762,.77539,.8715,.87508,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70674,.98387,.94721,1.33431,1.45894,.95161,1.06303,.83908,.80352,.57184,.6965,.56289,.82001,.56029,.81235,1.02988,.83908,.7762,.68156,.8036\ +7,.73133,.78257,.87356,.86943,.95958,.75727,.89019,1.04924,.9121,.7648,.86943,.87356,.79795,.78275,.81055,.77892,.9762,.82577,.99819,.84896,.95958,.77892,.96108,1.01407,.89049,1.02988,.94211,.96108,.8936,.84021,.87842,.96399,.79109,.89049,1.00813,1.02988,.86077,.87445,.92099,.84723,.86513,.8801,.75638,.85714,.78216,.79586,.87965,.94211,.97747,.78287,.97926,.84971,1.02988,.94211,.8801,.94211,.84971,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90264,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\ +,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.90518,1,1,1,1,1,1,1,1,1,1,1,1,.90548,1,1,1,1,1,1,.96017,.95794,.96017,.95794,.96017,.95794,.77892,.85162,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.92794,.87012,.87012,.87012,.89552,.89552,1.42259,.71143,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.93835,.83406,.91133,.84107,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90527,1.81055,.90527,1.81055,1.31006,1.53711,.94434,1.08696,1,.95018,.77192,.85284\ +,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Oi={lineHeight:1.2207,lineGap:.2207},Mi=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1\ +.56239,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.71805,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.90872,.85938,.79795,.87068,.77958,.69766,.81055,.90399,.88653,.96068,.82577,.77892,.78257,.97507,1.529,.97507,.85284,.89552,.90176,.94908,.86411,.74012,.86411,.88323,.95015,.86411,.86331,.88401,.91916,.86304,.88401,.9039,.86331,.86331,.86411,.86411,.90464,.70852,1.04106,.86331,.8437\ +2,.95794,.82616,.84548,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.19129,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.71805,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.90872,.85938,.85938,.85938,.85938,.85938,.85284,.87068,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.94908,.949\ +08,.94908,.94908,.94908,.94908,.85887,.74012,.88323,.88323,.88323,.88323,.88401,.88401,.88401,.88401,.8785,.86331,.86331,.86331,.86331,.86331,.86331,.90747,.89049,.86331,.86331,.86331,.86331,.84548,.86411,.84548,.83908,.94908,.83908,.94908,.83908,.94908,.71805,.74012,.71805,.74012,.71805,.74012,.71805,.74012,.87289,.79538,.88506,.92726,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.81921,.86411,.81921,.86411,.81921,.86411,1,1,.87356,.86331,.91075,.8777,.95958,.88401,.9595\ +8,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76467,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.77312,.91926,.88175,.70823,.94903,.90872,.86331,1,1,.90872,.86331,.86906,.88116,.86331,.85938,.86331,.85938,.86331,.85938,.86331,.87402,.86549,.77958,.90464,1,1,.77958,.90464,.69766,.70852,.69766,.70852,.69766,.70852,.69766,.70852,1,1,.81055,.75841,.81055,1.06452,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.96068,.95794,.77892,.84548,.77892,.\ +78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.94908,.77539,.85887,.87068,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70088,.98387,.94721,1.33431,1.45894,.95161,1.48387,.83908,.80352,.57118,.6965,.56347,.79179,.55853,.80346,1.02988,.83908,.7762,.67174,.86036,.73133,.78257,.87356,.86441,.95958,.75727,.89019,1.04924,.90872,.74889,.85938,.87891,.79795,.7957,.81055,.77892,.97447,.82577,.97466,.87179,.95958,.77892,.94252,.95612,.8753,1.02988,.92733,.94252,.87411,.84021,.8728,.\ +95612,.74081,.8753,1.02189,1.02988,.84814,.87445,.91822,.84723,.85668,.86331,.81344,.87581,.76422,.82046,.96057,.92733,.99375,.78022,.95452,.86015,1.02988,.92733,.86331,.92733,.86015,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90631,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.88323,1,1,1,1,1,1,1,1,1,1,1,1,.85174,1,1,1,1,1,1,.96068,.95794,.96068,.95794,.96068,.95794,.77892,.84548,1,1,.89552,.90527,1,.90363,.92794,.92794,\ +.92794,.89807,.87012,.87012,.87012,.89552,.89552,1.42259,.71094,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.92972,.83406,.91133,.83326,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90616,1.81055,.90527,1.81055,1.3107,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\ +1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Di={lineHeight:1.2207,lineGap:.2207},Bi=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39543,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.72346,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.\ +89249,.84118,.77452,.85374,.75186,.67789,.79776,.88844,.85066,.94309,.77818,.7306,.76659,1.10369,1.38313,1.10369,1.06139,.89552,.8739,.9245,.9245,.83203,.9245,.85865,1.09842,.9245,.9245,1.03297,1.07692,.90918,1.03297,.94959,.9245,.92274,.9245,.9245,1.02933,.77832,1.20562,.9245,.8916,.98986,.86621,.89453,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.16359,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.73\ +9,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.72346,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89249,.84118,.84118,.84118,.84118,.84118,.85284,.84557,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.9245,.9245,.9245,.9245,.9245,.9245,.84843,.83203,.85865,.85865,.85865,.85865,.82601,.82601,.82601,.82601,.94469,.9245,.92274,.92274,.92274,.92274,.92274,.90747,.86651,.9245,.9245,.9245,.9245,.89453,.9245,.89453,.8675,.9245,.8675,.9245,.8\ +675,.9245,.72346,.83203,.72346,.83203,.72346,.83203,.72346,.83203,.85193,.8875,.86477,.99034,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.81105,.9245,.81105,.9245,.81105,.9245,1,1,.86275,.9245,.90872,.93591,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77896,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.9375,.98156,.93407,.77261,1.11429,.89249,.9245,1,1,.89249,.9245,.92534,.86698,.9245,.84118,.92274,.84118,.92274,.84118,.92274,.86\ +67,.86291,.75186,1.02933,1,1,.75186,1.02933,.67789,.77832,.67789,.77832,.67789,.77832,.67789,.77832,1,1,.79776,.97655,.79776,1.23023,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.94309,.98986,.7306,.89453,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.9245,.76318,.84843,.84557,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67009,.96334,.93695,1.35191,1.40909,.95161,1.48387,.8675,.90861,.6192,.7363,.64824,.82411,.56321,.85696,1.23516,.8\ +675,.81552,.7286,.84134,.73206,.76659,.86275,.84369,.90685,.77892,.85871,1.02638,.89249,.75828,.84118,.85984,.77452,.76466,.79776,.7306,.90782,.77818,.903,.87291,.90685,.7306,.99058,1.03667,.94635,1.23516,.9849,.99058,.92393,.8916,.942,1.03667,.75026,.94635,1.0297,1.23516,.90918,.94048,.98217,.89746,.84153,.92274,.82507,.88832,.84438,.88178,1.03525,.9849,1.00225,.78086,.97248,.89404,1.23516,.9849,.92274,.9849,.89404,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.89693,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\ +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.85865,1,1,1,1,1,1,1,1,1,1,1,1,.90933,1,1,1,1,1,1,.94309,.98986,.94309,.98986,.94309,.98986,.7306,.89453,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.68994,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.97858,.82616,.91133,.83437,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90572,1.81055,.90749,1.81055,1.28809,1.55469,.94434,1.07806,1,\ +.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85284,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],Ri={lineHeight:1.2207,lineGap:.2207},Ni=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,\ +.85284,.89807,1,.90861,1.39016,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.73834,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89385,.85122,.77452,.86503,.75186,.68887,.79776,.88844,.85066,.94258,.77818,.7306,.76659,1.10369,1.39016,1.10369,1.06139,.89552,.8739,.86128,.94469,.8457,.94469,.89464,1.09842,.84636,.94469,1.03297,1.07692,.90918,1.03297,.95897,.94469,.9482,.94469,.94469,1.046\ +92,.78223,1.20562,.94469,.90332,.98986,.86621,.90527,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.08707,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.73834,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89385,.85122,.85122,.85122,.85122,.85122,.85284,.85311,.88844,.88844,.88844,.88844,.7306,.774\ +52,.86331,.86128,.86128,.86128,.86128,.86128,.86128,.8693,.8457,.89464,.89464,.89464,.89464,.82601,.82601,.82601,.82601,.94469,.94469,.9482,.9482,.9482,.9482,.9482,.90747,.86651,.94469,.94469,.94469,.94469,.90527,.94469,.90527,.8675,.86128,.8675,.86128,.8675,.86128,.73834,.8457,.73834,.8457,.73834,.8457,.73834,.8457,.85193,.92454,.86477,.9921,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.81105,.84636,.81105,.84636,.81105,.84636,1,1,.86275,.94469,.90872,.95786,.90685,.826\ +01,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77741,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.90452,.98156,1.11842,.77261,1.11429,.89385,.94469,1,1,.89385,.94469,.95877,.86901,.94469,.85122,.9482,.85122,.9482,.85122,.9482,.8667,.90016,.75186,1.04692,1,1,.75186,1.04692,.68887,.78223,.68887,.78223,.68887,.78223,.68887,.78223,1,1,.79776,.92188,.79776,1.23023,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.94258,.98986,.7306,.9052\ +7,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.86128,.76318,.8693,.85311,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67742,.96334,.93695,1.35191,1.40909,.95161,1.48387,.86686,.90861,.62267,.74359,.65649,.85498,.56963,.88254,1.23516,.8675,.81552,.75443,.84503,.73206,.76659,.86275,.85122,.90685,.77892,.85746,1.02638,.89385,.75657,.85122,.86275,.77452,.74171,.79776,.7306,.95165,.77818,.89772,.88831,.90685,.7306,.98142,1.02191,.96576,1.23516,.99018,.98142,.9236,.8925\ +8,.94035,1.02191,.78848,.96576,.9561,1.23516,.90918,.92578,.95424,.89746,.83969,.9482,.80113,.89442,.85208,.86155,.98022,.99018,1.00452,.81209,.99247,.89181,1.23516,.99018,.9482,.99018,.89181,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.88844,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89464,1,1,1,1,1,1,1,1,1,1,1,1,.96766,1,1,1,1,1,1,.94258,.98986,.94258,.98986,.94258,.98986,.7306,.90527,1,1,.89552,.90527,1,.90186,1.1230\ +8,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.69043,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.99331,.82616,.91133,.84286,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90527,1.81055,.90527,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\ +,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1.07185,.99413,.96334,1.08065,1,1,1,1,1,1,1,1,1,1,1],Ei={lineHeight:1.2207,lineGap:.2207},Pi=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.0002\ +2,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025\ +,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1\ +.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.03374,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.00042,.99973,.99973,1.0006,.99977,.99973,.99973,1.0002\ +6,1.0006,1.00026,1.0006,1.00026,1.03828,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.\ +0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00034,.99977,1,.99997,1.00026,1.00078,1.00036,.99973,1.00013,1.0006,.99977,.99977,.99988,.85148,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,1.00069,1.00022,.99977,1.00001,.99984,1.00026,1.00001,1.00024,1.00001,.9999,1,1.0006,1.00001,1.00041,.99962,1.00026,1.0006,.99995,1.00041,.99942,.99973,.99927,1.00082,.99902,1.00026,1.\ +00087,1.0006,1.00069,.99973,.99867,.99973,.9993,1.00026,1.00049,1.00056,1,.99988,.99935,.99995,.99954,1.00055,.99945,1.00032,1.0006,.99995,1.00026,.99995,1.00032,1.00001,1.00008,.99971,1.00019,.9994,1.00001,1.0006,1.00044,.99973,1.00023,1.00047,1,.99942,.99561,.99989,1.00035,.99977,1.00035,.99977,1.00019,.99944,1.00001,1.00021,.99926,1.00035,1.00035,.99942,1.00048,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.99989,1.00057,1.00001,.99936,1.00052,1.00012,.99996,1.00043,1,1.00035,.9994,.99\ +976,1.00035,.99973,1.00052,1.00041,1.00119,1.00037,.99973,1.00002,.99986,1.00041,1.00041,.99902,.9996,1.00034,.99999,1.00026,.99999,1.00026,.99973,1.00052,.99973,1,.99973,1.00041,1.00075,.9994,1.0003,.99999,1,1.00041,.99955,1,.99915,.99973,.99973,1.00026,1.00119,.99955,.99973,1.0006,.99911,1.0006,1.00026,.99972,1.00026,.99902,1.00041,.99973,.99999,1,1,1.00038,1.0005,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.9997\ +3,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,1.00047,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.4114\ +4,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],ji={lineHeight:1.2,lineGap:.2},_i=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.9\ +9977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,\ +.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,\ +1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.0044,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973\ +,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99971,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.01011,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,\ +1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99977,1,1,1.00026,.99969,.99972,.99981,.9998,1.0006,.99977,.99977,1.00022,.91155,1.00001,1.00026,.99977,1.\ +00022,1.0006,.99977,1.00001,.99999,.99977,.99966,1.00022,1.00032,1.00001,.99944,1.00026,1.00001,.99968,1.00001,1.00047,1,1.0006,1.00001,.99981,1.00101,1.00026,1.0006,.99948,.99981,1.00064,.99973,.99942,1.00101,1.00061,1.00026,1.00069,1.0006,1.00014,.99973,1.01322,.99973,1.00065,1.00026,1.00012,.99923,1,1.00064,1.00076,.99948,1.00055,1.00063,1.00007,.99943,1.0006,.99948,1.00026,.99948,.99943,1.00001,1.00001,1.00029,1.00038,1.00035,1.00001,1.0006,1.0006,.99973,.99978,1.00001,1.00057,.99989,.99967,\ +.99964,.99967,.99977,.99999,.99977,1.00038,.99977,1.00001,.99973,1.00066,.99967,.99967,1.00041,.99998,.99999,.99977,1.00022,.99967,1.00001,.99977,1.00026,.99964,1.00031,1.00001,.99999,.99999,1,1.00023,1,1,.99999,1.00035,1.00001,.99999,.99973,.99977,.99999,1.00058,.99973,.99973,.99955,.9995,1.00026,1.00026,1.00032,.99989,1.00034,.99999,1.00026,1.00026,1.00026,.99973,.45998,.99973,1.00026,.99973,1.00001,.99999,.99982,.99994,.99996,1,1.00042,1.00044,1.00029,1.00023,.99973,.99973,1.00026,.99949,1.00\ +002,.99973,1.0006,1.0006,1.0006,.99975,1.00026,1.00026,1.00032,.98685,.99973,1.00026,1,1,.99966,1.00044,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1,.99973,.99971,.99978,1,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00098,1,1,1,1.00049,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.999\ +15,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.\ +99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],Xi={lineHeight:1.35,lineGap:.2},qi=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.0000\ +1,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.999\ +73,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,\ +1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.0288,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,.99946,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.06311,.99973,1.00024,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,1.00041,.9998,.99973,1.\ +00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.89547,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00001,1,1.00054\ +,.99977,1.00084,1.00007,.99973,1.00013,.99924,1.00001,1.00001,.99945,.91221,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00001,.99999,.99977,.99933,1.00022,1.00054,1.00001,1.00065,1.00026,1.00001,1.0001,1.00001,1.00052,1,1.0006,1.00001,.99945,.99897,.99968,.99924,1.00036,.99945,.99949,1,1.0006,.99897,.99918,.99968,.99911,.99924,1,.99962,1.01487,1,1.0005,.99973,1.00012,1.00043,1,.99995,.99994,1.00036,.99947,1.00019,1.00063,1.00025,.99924,1.00036,.99973,1.00036,1.00025,1.00001,1.00001,1.00027,1\ +.0001,1.00068,1.00001,1.0006,1.0006,1,1.00008,.99957,.99972,.9994,.99954,.99975,1.00051,1.00001,1.00019,1.00001,1.0001,.99986,1.00001,1.00001,1.00038,.99954,.99954,.9994,1.00066,.99999,.99977,1.00022,1.00054,1.00001,.99977,1.00026,.99975,1.0001,1.00001,.99993,.9995,.99955,1.00016,.99978,.99974,1.00019,1.00022,.99955,1.00053,.99973,1.00089,1.00005,.99967,1.00048,.99973,1.00002,1.00034,.99973,.99973,.99964,1.00006,1.00066,.99947,.99973,.98894,.99973,1,.44898,1,.99946,1,1.00039,1.00082,.99991,.9999\ +1,.99985,1.00022,1.00023,1.00061,1.00006,.99966,.99973,.99973,.99973,1.00019,1.0008,1,.99924,.99924,.99924,.99983,1.00044,.99973,.99964,.98332,1,.99973,1,1,.99962,.99895,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,1.00423,.99925,.99999,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00049,1,1.00245,1,1,1,1,.96329\ +,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,1.00003,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,\ +1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],Hi={lineHeight:1.35,lineGap:.2},Wi=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99\ +987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.000\ +03,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.999\ +73,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.04596,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,1.00019,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.02572,.99973,1.000\ +05,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,.99999,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.84533,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998\ +,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99928,1,.99977,1.00013,1.00055,.99947,.99945,.99941,.99924,1.00001,1.00001,1.0004,.91621,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00005,.99999,.99977,1.00015,1.00022,.99977,1.00001,.99973,1.00026,1.00001,1.00019,1.00001,.99946,1,1.0006,1.00001,.99978,1.00045,.99973,.99924,1.00023,.99978,.99966,1,1.00065,1.00045,1.00019,.99973,.99973,.99924,1,1,.96499,1,1.00055,.99973,1.00008,1.00027,1,.9997,.99995,1.00023,.99933,1.00019,1.00\ +015,1.00031,.99924,1.00023,.99973,1.00023,1.00031,1.00001,.99928,1.00029,1.00092,1.00035,1.00001,1.0006,1.0006,1,.99988,.99975,1,1.00082,.99561,.9996,1.00035,1.00001,.99962,1.00001,1.00092,.99964,1.00001,.99963,.99999,1.00035,1.00035,1.00082,.99962,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.9996,.99967,1.00001,1.00034,1.00074,1.00054,1.00053,1.00063,.99971,.99962,1.00035,.99975,.99977,.99973,1.00043,.99953,1.0007,.99915,.99973,1.00008,.99892,1.00073,1.00073,1.00114,.99915,1.00073,.999\ +55,.99973,1.00092,.99973,1,.99998,1,1.0003,1,1.00043,1.00001,.99969,1.0003,1,1.00035,1.00001,.9995,1,1.00092,.99973,.99973,.99973,1.0007,.9995,1,.99924,1.0006,.99924,.99972,1.00062,.99973,1.00114,1.00073,1,.99955,1,1,1.00047,.99968,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,.99925,1.00023,1,.99991,.99984,1.\ +00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144\ +,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],zi={lineHeight:1.2,lineGap:.2},$i=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,72\ +2,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,61\ +1,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,719,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,785,556,556,278,722,556,556,611,278,611,278,611,385,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,61\ +1,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,465,722,333,853,906,474,825,927,838,278,722,722,601,719,667,611,722,778,278,722,667,833,722,644,778,722,667,600,611,667,821,667,809,802,278,667,615,451,611,278,582,615,610,556,606,475,460,611,541,278,558,556,612,556,445,611,766,619,520,684,446,582,715,576,753,845,278,582,611,582,845,667,669,885,567,711,667,278,276,556,1094,1062,875,610,722,622,719,\ +722,719,722,567,712,667,904,626,719,719,610,702,833,722,778,719,667,722,611,622,854,667,730,703,1005,1019,870,979,719,711,1031,719,556,618,615,417,635,556,709,497,615,615,500,635,740,604,611,604,611,556,490,556,875,556,615,581,833,844,729,854,615,552,854,583,556,556,611,417,552,556,278,281,278,969,906,611,500,615,556,604,778,611,487,447,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1094,556,885,489,\ +1115,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,3\ +33,333,333,333,333],Gi=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200\ +,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325\ +,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949\ +,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103\ +,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496\ +,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],Vi=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,55\ +6,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,72\ +2,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,740,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,782,556,556,278,722,556,556,611,278,611,278,611,396,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,77\ +8,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,333,722,333,854,906,473,844,930,847,278,722,722,610,671,667,611,722,778,278,722,667,833,722,657,778,718,667,590,611,667,822,667,829,781,278,667,620,479,611,278,591,620,621,556,610,479,492,611,558,278,566,556,603,556,45\ +0,611,712,605,532,664,409,591,704,578,773,834,278,591,611,591,834,667,667,886,614,719,667,278,278,556,1094,1042,854,622,719,677,719,722,708,722,614,722,667,927,643,719,719,615,687,833,722,778,719,667,722,611,677,781,667,729,708,979,989,854,1e3,708,719,1042,729,556,619,604,534,618,556,736,510,611,611,507,622,740,604,611,611,611,556,889,556,885,556,646,583,889,935,707,854,594,552,865,589,556,556,611,469,563,556,278,278,278,969,906,611,507,619,556,611,778,611,575,467,944,778,944,778,944,778,667,556\ +,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1104,556,885,516,1146,1e3,768,600,834,834,834,834,999,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,6\ +04,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],Ki=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,1\ +67,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,2\ +93,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,9\ +16,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077\ +,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597\ +,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,\ +-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],Ji=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400\ +,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,625,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278\ +,278,222,278,278,733,444,500,222,667,500,500,556,222,556,222,556,281,556,400,556,222,722,556,722,556,722,556,615,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,354,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,789,846,389,794,865,775,222,667,667,570,671,667,611,722,778,278,667,667,833\ +,722,648,778,725,667,600,611,667,837,667,831,761,278,667,570,439,555,222,550,570,571,500,556,439,463,555,542,222,500,492,548,500,447,556,670,573,486,603,374,550,652,546,728,779,222,550,556,550,779,667,667,843,544,708,667,278,278,500,1066,982,844,589,715,639,724,667,651,667,544,704,667,917,614,715,715,589,686,833,722,778,725,667,722,611,639,795,667,727,673,920,923,805,886,651,694,1022,682,556,562,522,493,553,556,688,465,556,556,472,564,686,550,556,556,556,500,833,500,835,500,572,518,830,851,621,7\ +36,526,492,752,534,556,556,556,378,496,500,222,222,222,910,828,556,472,565,500,556,778,556,492,339,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1083,1e3,768,600,834,834,834,834,1e3,500,998,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,584,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708\ +,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],Yi=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100\ +,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260\ +,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506\ +,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051\ +,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243\ +,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650\ +,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],Zi=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,8\ +33,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,5\ +00,722,615,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,735,444,500,222,667,500,500,556,222,556,222,556,292,556,334,556,222,722,556,722,556,722,556,604,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,375,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,2\ +78,333,333,333,333,333,333,333,333,333,333,333,667,278,784,838,384,774,855,752,222,667,667,551,668,667,611,722,778,278,667,668,833,722,650,778,722,667,618,611,667,798,667,835,748,278,667,578,446,556,222,547,578,575,500,557,446,441,556,556,222,500,500,576,500,448,556,690,569,482,617,395,547,648,525,713,781,222,547,556,547,781,667,667,865,542,719,667,278,278,500,1057,1010,854,583,722,635,719,667,656,667,542,677,667,923,604,719,719,583,656,833,722,778,719,667,722,611,635,760,667,740,667,917,938,792\ +,885,656,719,1010,722,556,573,531,365,583,556,669,458,559,559,438,583,688,552,556,542,556,500,458,500,823,500,573,521,802,823,625,719,521,510,750,542,556,556,556,365,510,500,222,278,222,906,812,556,438,559,500,552,778,556,489,411,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1073,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,\ +583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],Qi=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,5\ +7,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,\ +228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,\ +353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,102\ +5,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,780\ +9,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,956\ +8,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],en=[1.36898,1,1,.72706,.80479,.83734,.98894,.99793,.9897,.93884,.86209,.94292,.94292,1.16661,1.02058,.93582,.96694,.93582,1.19137,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,\ +.99793,.78076,.78076,1.02058,1.02058,1.02058,.72851,.78966,.90838,.83637,.82391,.96376,.80061,.86275,.8768,.95407,1.0258,.73901,.85022,.83655,1.0156,.95546,.92179,.87107,.92179,.82114,.8096,.89713,.94438,.95353,.94083,.91905,.90406,.9446,.94292,1.18777,.94292,1.02058,.89903,.90088,.94938,.97898,.81093,.97571,.94938,1.024,.9577,.95933,.98621,1.0474,.97455,.98981,.9672,.95933,.9446,.97898,.97407,.97646,.78036,1.10208,.95442,.95298,.97579,.9332,.94039,.938,.80687,1.01149,.80687,1.02058,.80479,.9979\ +3,.99793,.99793,.99793,1.01149,1.00872,.90088,.91882,1.0213,.8361,1.02058,.62295,.54324,.89022,1.08595,1,1,.90088,1,.97455,.93582,.90088,1,1.05686,.8361,.99642,.99642,.99642,.72851,.90838,.90838,.90838,.90838,.90838,.90838,.868,.82391,.80061,.80061,.80061,.80061,1.0258,1.0258,1.0258,1.0258,.97484,.95546,.92179,.92179,.92179,.92179,.92179,1.02058,.92179,.94438,.94438,.94438,.94438,.90406,.86958,.98225,.94938,.94938,.94938,.94938,.94938,.94938,.9031,.81093,.94938,.94938,.94938,.94938,.98621,.98621\ +,.98621,.98621,.93969,.95933,.9446,.9446,.9446,.9446,.9446,1.08595,.9446,.95442,.95442,.95442,.95442,.94039,.97898,.94039,.90838,.94938,.90838,.94938,.90838,.94938,.82391,.81093,.82391,.81093,.82391,.81093,.82391,.81093,.96376,.84313,.97484,.97571,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.8768,.9577,.8768,.9577,.8768,.9577,1,1,.95407,.95933,.97069,.95933,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,.887,1.01591,.73901,1.0474,1,1,.97455,.83655\ +,.98981,1,1,.83655,.73977,.83655,.73903,.84638,1.033,.95546,.95933,1,1,.95546,.95933,.8271,.95417,.95933,.92179,.9446,.92179,.9446,.92179,.9446,.936,.91964,.82114,.97646,1,1,.82114,.97646,.8096,.78036,.8096,.78036,1,1,.8096,.78036,1,1,.89713,.77452,.89713,1.10208,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94083,.97579,.90406,.94039,.90406,.9446,.938,.9446,.938,.9446,.938,1,.99793,.90838,.94938,.868,.9031,.92179,.9446,1,1,.89713,1.10208,.90088,.90088,.900\ +88,.90088,.90088,.90088,.90088,.90088,.90088,.90989,.9358,.91945,.83181,.75261,.87992,.82976,.96034,.83689,.97268,1.0078,.90838,.83637,.8019,.90157,.80061,.9446,.95407,.92436,1.0258,.85022,.97153,1.0156,.95546,.89192,.92179,.92361,.87107,.96318,.89713,.93704,.95638,.91905,.91709,.92796,1.0258,.93704,.94836,1.0373,.95933,1.0078,.95871,.94836,.96174,.92601,.9498,.98607,.95776,.95933,1.05453,1.0078,.98275,.9314,.95617,.91701,1.05993,.9446,.78367,.9553,1,.86832,1.0128,.95871,.99394,.87548,.96361,.86\ +774,1.0078,.95871,.9446,.95871,.86774,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.94083,.97579,.94083,.97579,.94083,.97579,.90406,.94039,.96694,1,.89903,1,1,1,.93582,.93582,.93582,1,.908,.908,.918,.94219,.94219,.96544,1,1.285,1,1,.81079,.81079,1,1,.74854,1,1,1,1,.99793,1,1,1,.65,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.17173,1,.80535,.76169,1.02058\ +,1.0732,1.05486,1,1,1.30692,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.16161,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],tn={lineHeight:1.2,lineGap:.2},an=[1.36898,1,1,.66227,.80779,.81625,.97276,.97276,.97733,.92222,.83266,.94292,.94292,1.16148,1.02058,.93582,.96694,.93582,1.17337,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.\ +78076,.78076,1.02058,1.02058,1.02058,.71541,.76813,.85576,.80591,.80729,.94299,.77512,.83655,.86523,.92222,.98621,.71743,.81698,.79726,.98558,.92222,.90637,.83809,.90637,.80729,.76463,.86275,.90699,.91605,.9154,.85308,.85458,.90531,.94292,1.21296,.94292,1.02058,.89903,1.18616,.99613,.91677,.78216,.91677,.90083,.98796,.9135,.92168,.95381,.98981,.95298,.95381,.93459,.92168,.91513,.92004,.91677,.95077,.748,1.04502,.91677,.92061,.94236,.89544,.89364,.9,.80687,.8578,.80687,1.02058,.80779,.97276,.9727\ +6,.97276,.97276,.8578,.99973,1.18616,.91339,1.08074,.82891,1.02058,.55509,.71526,.89022,1.08595,1,1,1.18616,1,.96736,.93582,1.18616,1,1.04864,.82711,.99043,.99043,.99043,.71541,.85576,.85576,.85576,.85576,.85576,.85576,.845,.80729,.77512,.77512,.77512,.77512,.98621,.98621,.98621,.98621,.95961,.92222,.90637,.90637,.90637,.90637,.90637,1.02058,.90251,.90699,.90699,.90699,.90699,.85458,.83659,.94951,.99613,.99613,.99613,.99613,.99613,.99613,.85811,.78216,.90083,.90083,.90083,.90083,.95381,.95381,.9\ +5381,.95381,.9135,.92168,.91513,.91513,.91513,.91513,.91513,1.08595,.91677,.91677,.91677,.91677,.91677,.89364,.92332,.89364,.85576,.99613,.85576,.99613,.85576,.99613,.80729,.78216,.80729,.78216,.80729,.78216,.80729,.78216,.94299,.76783,.95961,.91677,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.86523,.9135,.86523,.9135,.86523,.9135,1,1,.92222,.92168,.92222,.92168,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.86036,.97096,.71743,.98981,1,1,.95298,\ +.79726,.95381,1,1,.79726,.6894,.79726,.74321,.81691,1.0006,.92222,.92168,1,1,.92222,.92168,.79464,.92098,.92168,.90637,.91513,.90637,.91513,.90637,.91513,.909,.87514,.80729,.95077,1,1,.80729,.95077,.76463,.748,.76463,.748,1,1,.76463,.748,1,1,.86275,.72651,.86275,1.04502,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.9154,.94236,.85458,.89364,.85458,.90531,.9,.90531,.9,.90531,.9,1,.97276,.85576,.99613,.845,.85811,.90251,.91677,1,1,.86275,1.04502,1.18616,1.186\ +16,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.00899,1.30628,.85576,.80178,.66862,.7927,.69323,.88127,.72459,.89711,.95381,.85576,.80591,.7805,.94729,.77512,.90531,.92222,.90637,.98621,.81698,.92655,.98558,.92222,.85359,.90637,.90976,.83809,.94523,.86275,.83509,.93157,.85308,.83392,.92346,.98621,.83509,.92886,.91324,.92168,.95381,.90646,.92886,.90557,.86847,.90276,.91324,.86842,.92168,.99531,.95381,.9224,.85408,.92699,.86847,1.0051,.91513,.80487,.93481,1,.88159,1.05214,.90646,.9735\ +5,.81539,.89398,.85923,.95381,.90646,.91513,.90646,.85923,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9154,.94236,.9154,.94236,.9154,.94236,.85458,.89364,.96694,1,.89903,1,1,1,.91782,.91782,.91782,1,.896,.896,.896,.9332,.9332,.95973,1,1.26,1,1,.80479,.80178,1,1,.85633,1,1,1,1,.97276,1,1,1,.698,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.14542,1,.79199\ +,.78694,1.02058,1.03493,1.05486,1,1,1.23026,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.20006,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],rn={lineHeight:1.2,lineGap:.2},nn=[1.36898,1,1,.65507,.84943,.85639,.88465,.88465,.86936,.88307,.86948,.85283,.85283,1.06383,1.02058,.75945,.9219,.75945,1.17337,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,\ +.88465,.88465,.75945,.75945,1.02058,1.02058,1.02058,.69046,.70926,.85158,.77812,.76852,.89591,.70466,.76125,.80094,.86822,.83864,.728,.77212,.79475,.93637,.87514,.8588,.76013,.8588,.72421,.69866,.77598,.85991,.80811,.87832,.78112,.77512,.8562,1.0222,1.18417,1.0222,1.27014,.89903,1.15012,.93859,.94399,.846,.94399,.81453,1.0186,.94219,.96017,1.03075,1.02175,.912,1.03075,.96998,.96017,.93859,.94399,.94399,.95493,.746,1.12658,.94578,.91,.979,.882,.882,.83,.85034,.83537,.85034,1.02058,.70869,.88465,.\ +88465,.88465,.88465,.83537,.90083,1.15012,.9161,.94565,.73541,1.02058,.53609,.69353,.79519,1.08595,1,1,1.15012,1,.91974,.75945,1.15012,1,.9446,.73361,.9005,.9005,.9005,.62864,.85158,.85158,.85158,.85158,.85158,.85158,.773,.76852,.70466,.70466,.70466,.70466,.83864,.83864,.83864,.83864,.90561,.87514,.8588,.8588,.8588,.8588,.8588,1.02058,.85751,.85991,.85991,.85991,.85991,.77512,.76013,.88075,.93859,.93859,.93859,.93859,.93859,.93859,.8075,.846,.81453,.81453,.81453,.81453,.82424,.82424,.82424,.8242\ +4,.9278,.96017,.93859,.93859,.93859,.93859,.93859,1.08595,.8562,.94578,.94578,.94578,.94578,.882,.94578,.882,.85158,.93859,.85158,.93859,.85158,.93859,.76852,.846,.76852,.846,.76852,.846,.76852,.846,.89591,.8544,.90561,.94399,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.80094,.94219,.80094,.94219,.80094,.94219,1,1,.86822,.96017,.86822,.96017,.83864,.82424,.83864,.82424,.83864,.82424,.83864,1.03075,.83864,.82424,.81402,1.02738,.728,1.02175,1,1,.912,.79475,1.03075,1,1,.79\ +475,.83911,.79475,.66266,.80553,1.06676,.87514,.96017,1,1,.87514,.96017,.86865,.87396,.96017,.8588,.93859,.8588,.93859,.8588,.93859,.867,.84759,.72421,.95493,1,1,.72421,.95493,.69866,.746,.69866,.746,1,1,.69866,.746,1,1,.77598,.88417,.77598,1.12658,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.87832,.979,.77512,.882,.77512,.8562,.83,.8562,.83,.8562,.83,1,.88465,.85158,.93859,.773,.8075,.85751,.8562,1,1,.77598,1.12658,1.15012,1.15012,1.15012,1.15012,1.15012,\ +1.15313,1.15012,1.15012,1.15012,1.08106,1.03901,.85158,.77025,.62264,.7646,.65351,.86026,.69461,.89947,1.03075,.85158,.77812,.76449,.88836,.70466,.8562,.86822,.8588,.83864,.77212,.85308,.93637,.87514,.82352,.8588,.85701,.76013,.89058,.77598,.8156,.82565,.78112,.77899,.89386,.83864,.8156,.9486,.92388,.96186,1.03075,.91123,.9486,.93298,.878,.93942,.92388,.84596,.96186,.95119,1.03075,.922,.88787,.95829,.88,.93559,.93859,.78815,.93758,1,.89217,1.03737,.91123,.93969,.77487,.85769,.86799,1.03075,.9112\ +3,.93859,.91123,.86799,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87832,.979,.87832,.979,.87832,.979,.77512,.882,.9219,1,.89903,1,1,1,.87321,.87321,.87321,1,1.027,1.027,1.027,.86847,.86847,.79121,1,1.124,1,1,.73572,.73572,1,1,.85034,1,1,1,1,.88465,1,1,1,.669,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.04828,1,.74948,.75187,1.02058,.98391,1.02119,1,1,\ +1.06233,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05233,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],sn={lineHeight:1.2,lineGap:.2},on=[1.36898,1,1,.76305,.82784,.94935,.89364,.92241,.89073,.90706,.98472,.85283,.85283,1.0664,1.02058,.74505,.9219,.74505,1.23456,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.74505,.74505,1.02058,1\ +.02058,1.02058,.73002,.72601,.91755,.8126,.80314,.92222,.73764,.79726,.83051,.90284,.86023,.74,.8126,.84869,.96518,.91115,.8858,.79761,.8858,.74498,.73914,.81363,.89591,.83659,.89633,.85608,.8111,.90531,1.0222,1.22736,1.0222,1.27014,.89903,.90088,.86667,1.0231,.896,1.01411,.90083,1.05099,1.00512,.99793,1.05326,1.09377,.938,1.06226,1.00119,.99793,.98714,1.0231,1.01231,.98196,.792,1.19137,.99074,.962,1.01915,.926,.942,.856,.85034,.92006,.85034,1.02058,.69067,.92241,.92241,.92241,.92241,.92006,.933\ +2,.90088,.91882,.93484,.75339,1.02058,.56866,.54324,.79519,1.08595,1,1,.90088,1,.95325,.74505,.90088,1,.97198,.75339,.91009,.91009,.91009,.66466,.91755,.91755,.91755,.91755,.91755,.91755,.788,.80314,.73764,.73764,.73764,.73764,.86023,.86023,.86023,.86023,.92915,.91115,.8858,.8858,.8858,.8858,.8858,1.02058,.8858,.89591,.89591,.89591,.89591,.8111,.79611,.89713,.86667,.86667,.86667,.86667,.86667,.86667,.86936,.896,.90083,.90083,.90083,.90083,.84224,.84224,.84224,.84224,.97276,.99793,.98714,.98714,.\ +98714,.98714,.98714,1.08595,.89876,.99074,.99074,.99074,.99074,.942,1.0231,.942,.91755,.86667,.91755,.86667,.91755,.86667,.80314,.896,.80314,.896,.80314,.896,.80314,.896,.92222,.93372,.92915,1.01411,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.83051,1.00512,.83051,1.00512,.83051,1.00512,1,1,.90284,.99793,.90976,.99793,.86023,.84224,.86023,.84224,.86023,.84224,.86023,1.05326,.86023,.84224,.82873,1.07469,.74,1.09377,1,1,.938,.84869,1.06226,1,1,.84869,.83704,.84869,.81441,\ +.85588,1.08927,.91115,.99793,1,1,.91115,.99793,.91887,.90991,.99793,.8858,.98714,.8858,.98714,.8858,.98714,.894,.91434,.74498,.98196,1,1,.74498,.98196,.73914,.792,.73914,.792,1,1,.73914,.792,1,1,.81363,.904,.81363,1.19137,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89633,1.01915,.8111,.942,.8111,.90531,.856,.90531,.856,.90531,.856,1,.92241,.91755,.86667,.788,.86936,.8858,.89876,1,1,.81363,1.19137,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90\ +088,.90388,1.03901,.92138,.78105,.7154,.86169,.80513,.94007,.82528,.98612,1.06226,.91755,.8126,.81884,.92819,.73764,.90531,.90284,.8858,.86023,.8126,.91172,.96518,.91115,.83089,.8858,.87791,.79761,.89297,.81363,.88157,.89992,.85608,.81992,.94307,.86023,.88157,.95308,.98699,.99793,1.06226,.95817,.95308,.97358,.928,.98088,.98699,.92761,.99793,.96017,1.06226,.986,.944,.95978,.938,.96705,.98714,.80442,.98972,1,.89762,1.04552,.95817,.99007,.87064,.91879,.88888,1.06226,.95817,.98714,.95817,.88888,1,1,\ +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89633,1.01915,.89633,1.01915,.89633,1.01915,.8111,.942,.9219,1,.89903,1,1,1,.93173,.93173,.93173,1,1.06304,1.06304,1.06904,.89903,.89903,.80549,1,1.156,1,1,.76575,.76575,1,1,.72458,1,1,1,1,.92241,1,1,1,.619,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.07257,1,.74705,.71119,1.02058,1.024,1.02119,1,1,1.1536,1.08595\ +,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05638,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],cn={lineHeight:1.2,lineGap:.2},ln=[1.76738,1,1,.99297,.9824,1.04016,1.06497,1.03424,.97529,1.17647,1.23203,1.1085,1.1085,1.16939,1.2107,.9754,1.21408,.9754,1.59578,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,.81378,.81378,1.2107,1.2\ +107,1.2107,.71703,.97847,.97363,.88776,.8641,1.02096,.79795,.85132,.914,1.06085,1.1406,.8007,.89858,.83693,1.14889,1.09398,.97489,.92094,.97489,.90399,.84041,.95923,1.00135,1,1.06467,.98243,.90996,.99361,1.1085,1.56942,1.1085,1.2107,.74627,.94282,.96752,1.01519,.86304,1.01359,.97278,1.15103,1.01359,.98561,1.02285,1.02285,1.00527,1.02285,1.0302,.99041,1.0008,1.01519,1.01359,1.02258,.79104,1.16862,.99041,.97454,1.02511,.99298,.96752,.95801,.94856,1.16579,.94856,1.2107,.9824,1.03424,1.03424,1,1.034\ +24,1.16579,.8727,1.3871,1.18622,1.10818,1.04478,1.2107,1.18622,.75155,.94994,1.28826,1.21408,1.21408,.91056,1,.91572,.9754,.64663,1.18328,1.24866,1.04478,1.14169,1.15749,1.17389,.71703,.97363,.97363,.97363,.97363,.97363,.97363,.93506,.8641,.79795,.79795,.79795,.79795,1.1406,1.1406,1.1406,1.1406,1.02096,1.09398,.97426,.97426,.97426,.97426,.97426,1.2107,.97489,1.00135,1.00135,1.00135,1.00135,.90996,.92094,1.02798,.96752,.96752,.96752,.96752,.96752,.96752,.93136,.86304,.97278,.97278,.97278,.97278,1\ +.02285,1.02285,1.02285,1.02285,.97122,.99041,1,1,1,1,1,1.28826,1.0008,.99041,.99041,.99041,.99041,.96752,1.01519,.96752,.97363,.96752,.97363,.96752,.97363,.96752,.8641,.86304,.8641,.86304,.8641,.86304,.8641,.86304,1.02096,1.03057,1.02096,1.03517,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.914,1.01359,.914,1.01359,.914,1.01359,1,1,1.06085,.98561,1.06085,1.00879,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,.97138,1.08692,.8007,1.02285,1,1,1.\ +00527,.83693,1.02285,1,1,.83693,.9455,.83693,.90418,.83693,1.13005,1.09398,.99041,1,1,1.09398,.99041,.96692,1.09251,.99041,.97489,1.0008,.97489,1.0008,.97489,1.0008,.93994,.97931,.90399,1.02258,1,1,.90399,1.02258,.84041,.79104,.84041,.79104,.84041,.79104,.84041,.79104,1,1,.95923,1.07034,.95923,1.16862,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.06467,1.02511,.90996,.96752,.90996,.99361,.95801,.99361,.95801,.99361,.95801,1.07733,1.03424,.97363,.9675\ +2,.93506,.93136,.97489,1.0008,1,1,.95923,1.16862,1.15103,1.15103,1.01173,1.03959,.75953,.81378,.79912,1.15103,1.21994,.95161,.87815,1.01149,.81525,.7676,.98167,1.01134,1.02546,.84097,1.03089,1.18102,.97363,.88776,.85134,.97826,.79795,.99361,1.06085,.97489,1.1406,.89858,1.0388,1.14889,1.09398,.86039,.97489,1.0595,.92094,.94793,.95923,.90996,.99346,.98243,1.02112,.95493,1.1406,.90996,1.03574,1.02597,1.0008,1.18102,1.06628,1.03574,1.0192,1.01932,1.00886,.97531,1.0106,1.0008,1.13189,1.18102,1.02277,\ +.98683,1.0016,.99561,1.07237,1.0008,.90434,.99921,.93803,.8965,1.23085,1.06628,1.04983,.96268,1.0499,.98439,1.18102,1.06628,1.0008,1.06628,.98439,.79795,1,1,1,1,1,1,1,1,1,1,1,1,1.09466,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.97278,1,1,1,1,1,1,1,1,1,1,1,1,1.02065,1,1,1,1,1,1,1.06467,1.02511,1.06467,1.02511,1.06467,1.02511,.90996,.96752,1,1.21408,.89903,1,1,.75155,1.04394,1.04394,1.04394,1.04394,.98633,.98\ +633,.98633,.73047,.73047,1.20642,.91211,1.25635,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.12454,.93503,1.03424,1.19687,1.03424,1,1,1,.771,1,1,1.15749,1.15749,1.15749,1.10948,.86279,.94434,.86279,.94434,.86182,1,1,1.16897,1,.96085,.90137,1.2107,1.18416,1.13973,.69825,.9716,2.10339,1.29004,1.29004,1.21172,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18874,1.4260\ +3,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.09193,1.09193,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],hn={lineHeight:1.33008,lineGap:0},un=[1.76738,1,1,.98946,1.03959,1.04016,1.02809,1.036,.97639,1.10953,1.23203,1.11144,1.11144,1.16939,1.21237,.9754,1.21261,.9754,1.59754,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,.81378,.81378,1.21237,1.21237,1.21237,.73541,.97847,.97363,.89723,.87897,1.0426,.79429,.85292,.91149,1.05815,1.1406,.79631,.90128,.83853,1.0439\ +6,1.10615,.97552,.94436,.97552,.88641,.80527,.96083,1.00135,1,1.06777,.9817,.91142,.99361,1.11144,1.57293,1.11144,1.21237,.74627,1.31818,1.06585,.97042,.83055,.97042,.93503,1.1261,.97042,.97922,1.14236,.94552,1.01054,1.14236,1.02471,.97922,.94165,.97042,.97042,1.0276,.78929,1.1261,.97922,.95874,1.02197,.98507,.96752,.97168,.95107,1.16579,.95107,1.21237,1.03959,1.036,1.036,1,1.036,1.16579,.87357,1.31818,1.18754,1.26781,1.05356,1.21237,1.18622,.79487,.94994,1.29004,1.24047,1.24047,1.31818,1,.91484\ +,.9754,1.31818,1.1349,1.24866,1.05356,1.13934,1.15574,1.17389,.73541,.97363,.97363,.97363,.97363,.97363,.97363,.94385,.87897,.79429,.79429,.79429,.79429,1.1406,1.1406,1.1406,1.1406,1.0426,1.10615,.97552,.97552,.97552,.97552,.97552,1.21237,.97552,1.00135,1.00135,1.00135,1.00135,.91142,.94436,.98721,1.06585,1.06585,1.06585,1.06585,1.06585,1.06585,.96705,.83055,.93503,.93503,.93503,.93503,1.14236,1.14236,1.14236,1.14236,.93125,.97922,.94165,.94165,.94165,.94165,.94165,1.29004,.94165,.97922,.97922,.\ +97922,.97922,.96752,.97042,.96752,.97363,1.06585,.97363,1.06585,.97363,1.06585,.87897,.83055,.87897,.83055,.87897,.83055,.87897,.83055,1.0426,1.0033,1.0426,.97042,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.91149,.97042,.91149,.97042,.91149,.97042,1,1,1.05815,.97922,1.05815,.97922,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,.97441,1.04302,.79631,1.01582,1,1,1.01054,.83853,1.14236,1,1,.83853,1.09125,.83853,.90418,.83853,1.19508,1.10615,.97\ +922,1,1,1.10615,.97922,1.01034,1.10466,.97922,.97552,.94165,.97552,.94165,.97552,.94165,.91602,.91981,.88641,1.0276,1,1,.88641,1.0276,.80527,.78929,.80527,.78929,.80527,.78929,.80527,.78929,1,1,.96083,1.05403,.95923,1.16862,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.06777,1.02197,.91142,.96752,.91142,.99361,.97168,.99361,.97168,.99361,.97168,1.23199,1.036,.97363,1.06585,.94385,.96705,.97552,.94165,1,1,.96083,1.1261,1.31818,1.31818,1.31818,1.31818,\ +1.31818,1.31818,1.31818,1.31818,1.31818,.95161,1.27126,1.00811,.83284,.77702,.99137,.95253,1.0347,.86142,1.07205,1.14236,.97363,.89723,.86869,1.09818,.79429,.99361,1.05815,.97552,1.1406,.90128,1.06662,1.04396,1.10615,.84918,.97552,1.04694,.94436,.98015,.96083,.91142,1.00356,.9817,1.01945,.98999,1.1406,.91142,1.04961,.9898,1.00639,1.14236,1.07514,1.04961,.99607,1.02897,1.008,.9898,.95134,1.00639,1.11121,1.14236,1.00518,.97981,1.02186,1,1.08578,.94165,.99314,.98387,.93028,.93377,1.35125,1.07514,1.\ +10687,.93491,1.04232,1.00351,1.14236,1.07514,.94165,1.07514,1.00351,.79429,1,1,1,1,1,1,1,1,1,1,1,1,1.09097,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.93503,1,1,1,1,1,1,1,1,1,1,1,1,.96609,1,1,1,1,1,1,1.06777,1.02197,1.06777,1.02197,1.06777,1.02197,.91142,.96752,1,1.21261,.89903,1,1,.75155,1.04745,1.04745,1.04745,1.04394,.98633,.98633,.98633,.72959,.72959,1.20502,.91406,1.26514,1.222,1.02956,1.03372,1.03372,.\ +96039,1.24633,1,1.09125,.93327,1.03336,1.16541,1.036,1,1,1,.771,1,1,1.15574,1.15574,1.15574,1.15574,.86364,.94434,.86279,.94434,.86224,1,1,1.16798,1,.96085,.90068,1.21237,1.18416,1.13904,.69825,.9716,2.10339,1.29004,1.29004,1.21339,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18775,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.1326\ +9,1.13269,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],dn={lineHeight:1.33008,lineGap:0},fn=[1.76738,1,1,.98946,1.14763,1.05365,1.06234,.96927,.92586,1.15373,1.18414,.91349,.91349,1.07403,1.17308,.78383,1.20088,.78383,1.42531,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78383,.78383,1.17308,1.17308,1.17308,.77349,.94565,.94729,.85944,.88506,.9858,.74817,.80016,.88449,.98039,.95782,.69238,.89898,.83231,.98183,1.03989,.96924,.86237,.96924,.80595,.74524,.86091,.95402,.94143,.98448\ +,.8858,.83089,.93285,1.0949,1.39016,1.0949,1.45994,.74627,1.04839,.97454,.97454,.87207,.97454,.87533,1.06151,.97454,1.00176,1.16484,1.08132,.98047,1.16484,1.02989,1.01054,.96225,.97454,.97454,1.06598,.79004,1.16344,1.00351,.94629,.9973,.91016,.96777,.9043,.91082,.92481,.91082,1.17308,.95748,.96927,.96927,1,.96927,.92481,.80597,1.04839,1.23393,1.1781,.9245,1.17308,1.20808,.63218,.94261,1.24822,1.09971,1.09971,1.04839,1,.85273,.78032,1.04839,1.09971,1.22326,.9245,1.09836,1.13525,1.15222,.70424,.94\ +729,.94729,.94729,.94729,.94729,.94729,.85498,.88506,.74817,.74817,.74817,.74817,.95782,.95782,.95782,.95782,.9858,1.03989,.96924,.96924,.96924,.96924,.96924,1.17308,.96924,.95402,.95402,.95402,.95402,.83089,.86237,.88409,.97454,.97454,.97454,.97454,.97454,.97454,.92916,.87207,.87533,.87533,.87533,.87533,.93146,.93146,.93146,.93146,.93854,1.01054,.96225,.96225,.96225,.96225,.96225,1.24822,.8761,1.00351,1.00351,1.00351,1.00351,.96777,.97454,.96777,.94729,.97454,.94729,.97454,.94729,.97454,.88506,\ +.87207,.88506,.87207,.88506,.87207,.88506,.87207,.9858,.95391,.9858,.97454,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.88449,.97454,.88449,.97454,.88449,.97454,1,1,.98039,1.00176,.98039,1.00176,.95782,.93146,.95782,.93146,.95782,.93146,.95782,1.16484,.95782,.93146,.84421,1.12761,.69238,1.08132,1,1,.98047,.83231,1.16484,1,1,.84723,1.04861,.84723,.78755,.83231,1.23736,1.03989,1.01054,1,1,1.03989,1.01054,.9857,1.03849,1.01054,.96924,.96225,.96924,.96225,.96924,.96225,.923\ +83,.90171,.80595,1.06598,1,1,.80595,1.06598,.74524,.79004,.74524,.79004,.74524,.79004,.74524,.79004,1,1,.86091,1.02759,.85771,1.16344,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.98448,.9973,.83089,.96777,.83089,.93285,.9043,.93285,.9043,.93285,.9043,1.31868,.96927,.94729,.97454,.85498,.92916,.96924,.8761,1,1,.86091,1.16344,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,.81965,.81965,.94729,.78032,.71022,.90883,.84171,.99877,\ +.77596,1.05734,1.2,.94729,.85944,.82791,.9607,.74817,.93285,.98039,.96924,.95782,.89898,.98316,.98183,1.03989,.78614,.96924,.97642,.86237,.86075,.86091,.83089,.90082,.8858,.97296,1.01284,.95782,.83089,1.0976,1.04,1.03342,1.2,1.0675,1.0976,.98205,1.03809,1.05097,1.04,.95364,1.03342,1.05401,1.2,1.02148,1.0119,1.04724,1.0127,1.02732,.96225,.8965,.97783,.93574,.94818,1.30679,1.0675,1.11826,.99821,1.0557,1.0326,1.2,1.0675,.96225,1.0675,1.0326,.74817,1,1,1,1,1,1,1,1,1,1,1,1,1.03754,1,1,1,1,1,1,1,1,1,1\ +,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87533,1,1,1,1,1,1,1,1,1,1,1,1,.98705,1,1,1,1,1,1,.98448,.9973,.98448,.9973,.98448,.9973,.83089,.96777,1,1.20088,.89903,1,1,.75155,.94945,.94945,.94945,.94945,1.12317,1.12317,1.12317,.67603,.67603,1.15621,.73584,1.21191,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87709,.96927,1.01473,.96927,1,1,1,.77295,1,1,1.09836,1.09836,1.09836,1.01522,.86321,.94434,.8649,.94434,.86182,\ +1,1,1.083,1,.91578,.86438,1.17308,1.18416,1.14589,.69825,.97622,1.96791,1.24822,1.24822,1.17308,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.17984,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10742,1.10742,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],gn={lineHeight:1.33008,lineGap:0},pn=[1.76738,1,1,.98594,1.02285,1.10454,1.06234,.96927,.\ +92037,1.19985,1.2046,.90616,.90616,1.07152,1.1714,.78032,1.20088,.78032,1.40246,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78032,.78032,1.1714,1.1714,1.1714,.80597,.94084,.96706,.85944,.85734,.97093,.75842,.79936,.88198,.9831,.95782,.71387,.86969,.84636,1.07796,1.03584,.96924,.83968,.96924,.82826,.79649,.85771,.95132,.93119,.98965,.88433,.8287,.93365,1.08612,1.3638,1.08612,1.45786,.74627,.80499,.91484,1.05707,.92383,1.05882,.9403,1.12654,1.05882,1.01756,1.09011,1.0901\ +1,.99414,1.09011,1.034,1.01756,1.05356,1.05707,1.05882,1.04399,.84863,1.21968,1.01756,.95801,1.00068,.91797,.96777,.9043,.90351,.92105,.90351,1.1714,.85337,.96927,.96927,.99912,.96927,.92105,.80597,1.2434,1.20808,1.05937,.90957,1.1714,1.20808,.75155,.94261,1.24644,1.09971,1.09971,.84751,1,.85273,.78032,.61584,1.05425,1.17914,.90957,1.08665,1.11593,1.14169,.73381,.96706,.96706,.96706,.96706,.96706,.96706,.86035,.85734,.75842,.75842,.75842,.75842,.95782,.95782,.95782,.95782,.97093,1.03584,.96924,.\ +96924,.96924,.96924,.96924,1.1714,.96924,.95132,.95132,.95132,.95132,.8287,.83968,.89049,.91484,.91484,.91484,.91484,.91484,.91484,.93575,.92383,.9403,.9403,.9403,.9403,.8717,.8717,.8717,.8717,1.00527,1.01756,1.05356,1.05356,1.05356,1.05356,1.05356,1.24644,.95923,1.01756,1.01756,1.01756,1.01756,.96777,1.05707,.96777,.96706,.91484,.96706,.91484,.96706,.91484,.85734,.92383,.85734,.92383,.85734,.92383,.85734,.92383,.97093,1.0969,.97093,1.05882,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.75\ +842,.9403,.88198,1.05882,.88198,1.05882,.88198,1.05882,1,1,.9831,1.01756,.9831,1.01756,.95782,.8717,.95782,.8717,.95782,.8717,.95782,1.09011,.95782,.8717,.84784,1.11551,.71387,1.09011,1,1,.99414,.84636,1.09011,1,1,.84636,1.0536,.84636,.94298,.84636,1.23297,1.03584,1.01756,1,1,1.03584,1.01756,1.00323,1.03444,1.01756,.96924,1.05356,.96924,1.05356,.96924,1.05356,.93066,.98293,.82826,1.04399,1,1,.82826,1.04399,.79649,.84863,.79649,.84863,.79649,.84863,.79649,.84863,1,1,.85771,1.17318,.85771,1.21968,\ +.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.98965,1.00068,.8287,.96777,.8287,.93365,.9043,.93365,.9043,.93365,.9043,1.08571,.96927,.96706,.91484,.86035,.93575,.96924,.95923,1,1,.85771,1.21968,1.11437,1.11437,.93109,.91202,.60411,.84164,.55572,1.01173,.97361,.81818,.81818,.96635,.78032,.72727,.92366,.98601,1.03405,.77968,1.09799,1.2,.96706,.85944,.85638,.96491,.75842,.93365,.9831,.96924,.95782,.86969,.94152,1.07796,1.03584,.78437,.96924,.98715,.83968\ +,.83491,.85771,.8287,.94492,.88433,.9287,1.0098,.95782,.8287,1.0625,.98248,1.03424,1.2,1.01071,1.0625,.95246,1.03809,1.04912,.98248,1.00221,1.03424,1.05443,1.2,1.04785,.99609,1.00169,1.05176,.99346,1.05356,.9087,1.03004,.95542,.93117,1.23362,1.01071,1.07831,1.02512,1.05205,1.03502,1.2,1.01071,1.05356,1.01071,1.03502,.75842,1,1,1,1,1,1,1,1,1,1,1,1,1.03719,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9403,1,1,1\ +,1,1,1,1,1,1,1,1,1,1.04021,1,1,1,1,1,1,.98965,1.00068,.98965,1.00068,.98965,1.00068,.8287,.96777,1,1.20088,.89903,1,1,.75155,1.03077,1.03077,1.03077,1.03077,1.13196,1.13196,1.13196,.67428,.67428,1.16039,.73291,1.20996,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87796,.96927,1.01518,.96927,1,1,1,.77295,1,1,1.10539,1.10539,1.11358,1.06967,.86279,.94434,.86279,.94434,.86182,1,1,1.083,1,.91578,.86507,1.1714,1.18416,1.14589,.69825,.97622,1.9697,1.24822,1.24822,1.17238,1.24822,1.24822,1,1,\ +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18083,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10938,1.10938,1,1,1,1.05425,1.09971,1.09971,1.09971,1,1,1,1,1,1,1,1,1,1,1],mn={lineHeight:1.33008,lineGap:0},bn=getLookupTableFactory((function(e){e["MyriadPro-Regular"]=e["PdfJS-Fallback-Regular"]={name:"LiberationSans-Regular",factors:on,baseWidths:Zi,ba\ +seMapping:Qi,metrics:cn};e["MyriadPro-Bold"]=e["PdfJS-Fallback-Bold"]={name:"LiberationSans-Bold",factors:en,baseWidths:$i,baseMapping:Gi,metrics:tn};e["MyriadPro-It"]=e["MyriadPro-Italic"]=e["PdfJS-Fallback-Italic"]={name:"LiberationSans-Italic",factors:nn,baseWidths:Ji,baseMapping:Yi,metrics:sn};e["MyriadPro-BoldIt"]=e["MyriadPro-BoldItalic"]=e["PdfJS-Fallback-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:an,baseWidths:Vi,baseMapping:Ki,metrics:rn};e.ArialMT=e.Arial=e["Arial-Regular"]\ +={name:"LiberationSans-Regular",baseWidths:Zi,baseMapping:Qi};e["Arial-BoldMT"]=e["Arial-Bold"]={name:"LiberationSans-Bold",baseWidths:$i,baseMapping:Gi};e["Arial-ItalicMT"]=e["Arial-Italic"]={name:"LiberationSans-Italic",baseWidths:Ji,baseMapping:Yi};e["Arial-BoldItalicMT"]=e["Arial-BoldItalic"]={name:"LiberationSans-BoldItalic",baseWidths:Vi,baseMapping:Ki};e["Calibri-Regular"]={name:"LiberationSans-Regular",factors:Ni,baseWidths:Zi,baseMapping:Qi,metrics:Ei};e["Calibri-Bold"]={name:"Liberatio\ +nSans-Bold",factors:Ti,baseWidths:$i,baseMapping:Gi,metrics:Oi};e["Calibri-Italic"]={name:"LiberationSans-Italic",factors:Bi,baseWidths:Ji,baseMapping:Yi,metrics:Ri};e["Calibri-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:Mi,baseWidths:Vi,baseMapping:Ki,metrics:Di};e["Segoeui-Regular"]={name:"LiberationSans-Regular",factors:pn,baseWidths:Zi,baseMapping:Qi,metrics:mn};e["Segoeui-Bold"]={name:"LiberationSans-Bold",factors:ln,baseWidths:$i,baseMapping:Gi,metrics:hn};e["Segoeui-Italic"]={n\ +ame:"LiberationSans-Italic",factors:fn,baseWidths:Ji,baseMapping:Yi,metrics:gn};e["Segoeui-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:un,baseWidths:Vi,baseMapping:Ki,metrics:dn};e["Helvetica-Regular"]=e.Helvetica={name:"LiberationSans-Regular",factors:Wi,baseWidths:Zi,baseMapping:Qi,metrics:zi};e["Helvetica-Bold"]={name:"LiberationSans-Bold",factors:Pi,baseWidths:$i,baseMapping:Gi,metrics:ji};e["Helvetica-Italic"]={name:"LiberationSans-Italic",factors:qi,baseWidths:Ji,baseMapping:Yi,\ +metrics:Hi};e["Helvetica-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:_i,baseWidths:Vi,baseMapping:Ki,metrics:Xi}}));function getXfaFontName(e){const t=normalizeFontName(e);return bn()[t]}function getXfaFontDict(e){const t=function getXfaFontWidths(e){const t=getXfaFontName(e);if(!t)return null;const{baseWidths:a,baseMapping:r,factors:i}=t,n=i?a.map(((e,t)=>e*i[t])):a;let s,o=-2;const c=[];for(const[e,t]of r.map(((e,t)=>[e,t])).sort((([e],[t])=>e-t)))if(-1!==e)if(e===o+1){s.push(n[t]);\ +o+=1}else{o=e;s=[n[t]];c.push(e,s)}return c}(e),a=new Dict(null);a.set("BaseFont",Name.get(e));a.set("Type",Name.get("Font"));a.set("Subtype",Name.get("CIDFontType2"));a.set("Encoding",Name.get("Identity-H"));a.set("CIDToGIDMap",Name.get("Identity"));a.set("W",t);a.set("FirstChar",t[0]);a.set("LastChar",t.at(-2)+t.at(-1).length-1);const r=new Dict(null);a.set("FontDescriptor",r);const i=new Dict(null);i.set("Ordering","Identity");i.set("Registry","Adobe");i.set("Supplement",0);a.set("CIDSystemIn\ +fo",i);return a}class PostScriptParser{constructor(e){this.lexer=e;this.operators=[];this.token=null;this.prev=null}nextToken(){this.prev=this.token;this.token=this.lexer.getToken()}accept(e){if(this.token.type===e){this.nextToken();return!0}return!1}expect(e){if(this.accept(e))return!0;throw new FormatError(`Unexpected symbol: found ${this.token.type} expected ${e}.`)}parse(){this.nextToken();this.expect(yn.LBRACE);this.parseBlock();this.expect(yn.RBRACE);return this.operators}parseBlock(){for(\ +;;)if(this.accept(yn.NUMBER))this.operators.push(this.prev.value);else if(this.accept(yn.OPERATOR))this.operators.push(this.prev.value);else{if(!this.accept(yn.LBRACE))return;this.parseCondition()}}parseCondition(){const e=this.operators.length;this.operators.push(null,null);this.parseBlock();this.expect(yn.RBRACE);if(this.accept(yn.IF)){this.operators[e]=this.operators.length;this.operators[e+1]="jz"}else{if(!this.accept(yn.LBRACE))throw new FormatError("PS Function: error parsing conditional."\ +);{const t=this.operators.length;this.operators.push(null,null);const a=this.operators.length;this.parseBlock();this.expect(yn.RBRACE);this.expect(yn.IFELSE);this.operators[t]=this.operators.length;this.operators[t+1]="j";this.operators[e]=a;this.operators[e+1]="jz"}}}}const yn={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5};class PostScriptToken{static get opCache(){return shadow(this,"opCache",Object.create(null))}constructor(e,t){this.type=e;this.value=t}static getOperator(e){return Pos\ +tScriptToken.opCache[e]||=new PostScriptToken(yn.OPERATOR,e)}static get LBRACE(){return shadow(this,"LBRACE",new PostScriptToken(yn.LBRACE,"{"))}static get RBRACE(){return shadow(this,"RBRACE",new PostScriptToken(yn.RBRACE,"}"))}static get IF(){return shadow(this,"IF",new PostScriptToken(yn.IF,"IF"))}static get IFELSE(){return shadow(this,"IFELSE",new PostScriptToken(yn.IFELSE,"IFELSE"))}}class PostScriptLexer{constructor(e){this.stream=e;this.nextChar();this.strBuf=[]}nextChar(){return this.cur\ +rentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(t<0)return wa;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new PostScriptToken(yn.NUMBER,this.getNumber());case 123:this.nextChar();return PostScriptToken.LBRACE;case 125:this.nextChar();return PostScriptToken.RBRACE}const a=this.strBuf;a.lengt\ +h=0;a[0]=String.fromCharCode(t);for(;(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)a.push(String.fromCharCode(t));const r=a.join("");switch(r.toLowerCase()){case"if":return PostScriptToken.IF;case"ifelse":return PostScriptToken.IFELSE;default:return PostScriptToken.getOperator(r)}}getNumber(){let e=this.currentChar;const t=this.strBuf;t.length=0;t[0]=String.fromCharCode(e);for(;(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));const a=parseFloat(t.jo\ +in(""));if(isNaN(a))throw new FormatError(`Invalid floating point number: ${a}`);return a}}class BaseLocalCache{constructor(e){this._onlyRefs=!0===e?.onlyRefs;if(!this._onlyRefs){this._nameRefMap=new Map;this._imageMap=new Map}this._imageCache=new RefSetCache}getByName(e){this._onlyRefs&&unreachable("Should not call `getByName` method.");const t=this._nameRefMap.get(e);return t?this.getByRef(t):this._imageMap.get(e)||null}getByRef(e){return this._imageCache.get(e)||null}set(e,t,a){unreachable("A\ +bstract method `set` called.")}}class LocalImageCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error(\'LocalImageCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalColorSpaceCache extends BaseLocalCache{set(e=null,t=null,a){if("string"!=typeof e&&!t)throw new Error(\'LocalColorSpaceCache.set - expected "name" and/or "ref" arg\ +ument.\');if(t){if(this._imageCache.has(t))return;null!==e&&this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalFunctionCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error(\'LocalFunctionCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,a)}}class LocalGStateCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error(\'LocalGSt\ +ateCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalTilingPatternCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error(\'LocalTilingPatternCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,a)}}class RegionalImageCache extends BaseLocalCache{constructor(e){super({onlyR\ +efs:!0})}set(e=null,t,a){if(!t)throw new Error(\'RegionalImageCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,a)}}class GlobalColorSpaceCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error(\'GlobalColorSpaceCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,a)}clear(){this._imageCache.clear()}}class GlobalImageCache{static NUM_PAGES_THRESHOLD=2;static MIN_IMAGES_TO_CACHE=10;\ +static MAX_BYTE_SIZE=5e7;#H=new RefSet;constructor(){this._refCache=new RefSetCache;this._imageCache=new RefSetCache}get#W(){let e=0;for(const t of this._imageCache)e+=t.byteSize;return e}get#z(){return!(this._imageCache.size<GlobalImageCache.MIN_IMAGES_TO_CACHE)&&!(this.#W<GlobalImageCache.MAX_BYTE_SIZE)}shouldCache(e,t){let a=this._refCache.get(e);if(!a){a=new Set;this._refCache.put(e,a)}a.add(t);return!(a.size<GlobalImageCache.NUM_PAGES_THRESHOLD)&&!(!this._imageCache.has(e)&&this.#z)}addDeco\ +deFailed(e){this.#H.put(e)}hasDecodeFailed(e){return this.#H.has(e)}addByteSize(e,t){const a=this._imageCache.get(e);a&&(a.byteSize||(a.byteSize=t))}getData(e,t){const a=this._refCache.get(e);if(!a)return null;if(a.size<GlobalImageCache.NUM_PAGES_THRESHOLD)return null;const r=this._imageCache.get(e);if(!r)return null;a.add(t);return r}setData(e,t){if(!this._refCache.has(e))throw new Error(\'GlobalImageCache.setData - expected "shouldCache" to have been called.\');this._imageCache.has(e)||(this.#z?\ +warn("GlobalImageCache.setData - cache limit reached."):this._imageCache.put(e,t))}clear(e=!1){if(!e){this.#H.clear();this._refCache.clear()}this._imageCache.clear()}}class PDFFunctionFactory{constructor({xref:e,isEvalSupported:t=!0}){this.xref=e;this.isEvalSupported=!1!==t}create(e,t=!1){let a,r;e instanceof Ref?a=e:e instanceof Dict?a=e.objId:e instanceof BaseStream&&(a=e.dict?.objId);if(a){const e=this._localFunctionCache.getByRef(a);if(e)return e}const i=this.xref.fetchIfRef(e);if(Array.isAr\ +ray(i)){if(!t)throw new Error(\'PDFFunctionFactory.create - expected "parseArray" argument.\');r=PDFFunction.parseArray(this,i)}else r=PDFFunction.parse(this,i);a&&this._localFunctionCache.set(null,a,r);return r}get _localFunctionCache(){return shadow(this,"_localFunctionCache",new LocalFunctionCache)}}function toNumberArray(e){return Array.isArray(e)?isNumberArray(e,null)?e:e.map((e=>+e)):null}class PDFFunction{static getSampleArray(e,t,a,r){let i,n,s=1;for(i=0,n=e.length;i<n;i++)s*=e[i];s*=t;con\ +st o=new Array(s);let c=0,l=0;const h=1/(2**a-1),u=r.getBytes((s*a+7)/8);let d=0;for(i=0;i<s;i++){for(;c<a;){l<<=8;l|=u[d++];c+=8}c-=a;o[i]=(l>>c)*h;l&=(1<<c)-1}return o}static parse(e,t){const a=t.dict||t;switch(a.get("FunctionType")){case 0:return this.constructSampled(e,t,a);case 1:break;case 2:return this.constructInterpolated(e,a);case 3:return this.constructStiched(e,a);case 4:return this.constructPostScript(e,t,a)}throw new FormatError("Unknown type of function")}static parseArray(e,t){co\ +nst{xref:a}=e,r=[];for(const i of t)r.push(this.parse(e,a.fetchIfRef(i)));return function(e,t,a,i){for(let n=0,s=r.length;n<s;n++)r[n](e,t,a,i+n)}}static constructSampled(e,t,a){function toMultiArray(e){const t=e.length,a=[];let r=0;for(let i=0;i<t;i+=2)a[r++]=[e[i],e[i+1]];return a}function interpolate(e,t,a,r,i){return r+(i-r)/(a-t)*(e-t)}let r=toNumberArray(a.getArray("Domain")),i=toNumberArray(a.getArray("Range"));if(!r||!i)throw new FormatError("No domain or range");const n=r.length/2,s=i.l\ +ength/2;r=toMultiArray(r);i=toMultiArray(i);const o=toNumberArray(a.getArray("Size")),c=a.get("BitsPerSample"),l=a.get("Order")||1;1!==l&&info("No support for cubic spline interpolation: "+l);let h=toNumberArray(a.getArray("Encode"));if(h)h=toMultiArray(h);else{h=[];for(let e=0;e<n;++e)h.push([0,o[e]-1])}let u=toNumberArray(a.getArray("Decode"));u=u?toMultiArray(u):i;const d=this.getSampleArray(o,s,c,t);return function constructSampledFn(e,t,a,c){const l=1<<n,f=new Float64Array(l).fill(1),g=new \ +Uint32Array(l);let p,m,b=s,y=1;for(p=0;p<n;++p){const a=r[p][0],i=r[p][1];let n=interpolate(MathClamp(e[t+p],a,i),a,i,h[p][0],h[p][1]);const s=o[p];n=MathClamp(n,0,s-1);const c=n<s-1?Math.floor(n):n-1,u=c+1-n,d=n-c,w=c*b,x=w+b;for(m=0;m<l;m++)if(m&y){f[m]*=d;g[m]+=x}else{f[m]*=u;g[m]+=w}b*=s;y<<=1}for(m=0;m<s;++m){let e=0;for(p=0;p<l;p++)e+=d[g[p]+m]*f[p];e=interpolate(e,0,1,u[m][0],u[m][1]);a[c+m]=MathClamp(e,i[m][0],i[m][1])}}}static constructInterpolated(e,t){const a=toNumberArray(t.getArray(\ +"C0"))||[0],r=toNumberArray(t.getArray("C1"))||[1],i=t.get("N"),n=[];for(let e=0,t=a.length;e<t;++e)n.push(r[e]-a[e]);const s=n.length;return function constructInterpolatedFn(e,t,r,o){const c=1===i?e[t]:e[t]**i;for(let e=0;e<s;++e)r[o+e]=a[e]+c*n[e]}}static constructStiched(e,t){const a=toNumberArray(t.getArray("Domain"));if(!a)throw new FormatError("No domain");if(1!==a.length/2)throw new FormatError("Bad domain for stiched function");const{xref:r}=e,i=[];for(const a of t.get("Functions"))i.pus\ +h(this.parse(e,r.fetchIfRef(a)));const n=toNumberArray(t.getArray("Bounds")),s=toNumberArray(t.getArray("Encode")),o=new Float32Array(1);return function constructStichedFn(e,t,r,c){const l=MathClamp(e[t],a[0],a[1]),h=n.length;let u;for(u=0;u<h&&!(l<n[u]);++u);let d=a[0];u>0&&(d=n[u-1]);let f=a[1];u<n.length&&(f=n[u]);const g=s[2*u],p=s[2*u+1];o[0]=d===f?g:g+(l-d)*(p-g)/(f-d);i[u](o,0,r,c)}}static constructPostScript(e,t,a){const r=toNumberArray(a.getArray("Domain")),i=toNumberArray(a.getArray("R\ +ange"));if(!r)throw new FormatError("No domain.");if(!i)throw new FormatError("No range.");const n=new PostScriptLexer(t),s=new PostScriptParser(n).parse();if(e.isEvalSupported&&FeatureTest.isEvalSupported){const e=(new PostScriptCompiler).compile(s,r,i);if(e)return new Function("src","srcOffset","dest","destOffset",e)}info("Unable to compile PS function");const o=i.length>>1,c=r.length>>1,l=new PostScriptEvaluator(s),h=Object.create(null);let u=8192;const d=new Float32Array(c);return function c\ +onstructPostScriptFn(e,t,a,r){let n,s,f="";const g=d;for(n=0;n<c;n++){s=e[t+n];g[n]=s;f+=s+"_"}const p=h[f];if(void 0!==p){a.set(p,r);return}const m=new Float32Array(o),b=l.execute(g),y=b.length-o;for(n=0;n<o;n++){s=b[y+n];let e=i[2*n];if(s<e)s=e;else{e=i[2*n+1];s>e&&(s=e)}m[n]=s}if(u>0){u--;h[f]=m}a.set(m,r)}}}function isPDFFunction(e){let t;if(e instanceof Dict)t=e;else{if(!(e instanceof BaseStream))return!1;t=e.dict}return t.has("FunctionType")}class PostScriptStack{static MAX_STACK_SIZE=100;\ +constructor(e){this.stack=e?Array.from(e):[]}push(e){if(this.stack.length>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(e)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(e){if(this.stack.length+e>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");const t=this.stack;for(let a=t.length-e,r=e-1;r>=0;r--,a++)t.push(t[a])}index(e){this.push(t\ +his.stack[this.stack.length-e-1])}roll(e,t){const a=this.stack,r=a.length-e,i=a.length-1,n=r+(t-Math.floor(t/e)*e);for(let e=r,t=i;e<t;e++,t--){const r=a[e];a[e]=a[t];a[t]=r}for(let e=r,t=n-1;e<t;e++,t--){const r=a[e];a[e]=a[t];a[t]=r}for(let e=n,t=i;e<t;e++,t--){const r=a[e];a[e]=a[t];a[t]=r}}}class PostScriptEvaluator{constructor(e){this.operators=e}execute(e){const t=new PostScriptStack(e);let a=0;const r=this.operators,i=r.length;let n,s,o;for(;a<i;){n=r[a++];if("number"!=typeof n)switch(n){\ +case"jz":o=t.pop();s=t.pop();s||(a=o);break;case"j":s=t.pop();a=s;break;case"abs":s=t.pop();t.push(Math.abs(s));break;case"add":o=t.pop();s=t.pop();t.push(s+o);break;case"and":o=t.pop();s=t.pop();"boolean"==typeof s&&"boolean"==typeof o?t.push(s&&o):t.push(s&o);break;case"atan":o=t.pop();s=t.pop();s=Math.atan2(s,o)/Math.PI*180;s<0&&(s+=360);t.push(s);break;case"bitshift":o=t.pop();s=t.pop();s>0?t.push(s<<o):t.push(s>>o);break;case"ceiling":s=t.pop();t.push(Math.ceil(s));break;case"copy":s=t.pop(\ +);t.copy(s);break;case"cos":s=t.pop();t.push(Math.cos(s%360/180*Math.PI));break;case"cvi":s=0|t.pop();t.push(s);break;case"cvr":break;case"div":o=t.pop();s=t.pop();t.push(s/o);break;case"dup":t.copy(1);break;case"eq":o=t.pop();s=t.pop();t.push(s===o);break;case"exch":t.roll(2,1);break;case"exp":o=t.pop();s=t.pop();t.push(s**o);break;case"false":t.push(!1);break;case"floor":s=t.pop();t.push(Math.floor(s));break;case"ge":o=t.pop();s=t.pop();t.push(s>=o);break;case"gt":o=t.pop();s=t.pop();t.push(s>\ +o);break;case"idiv":o=t.pop();s=t.pop();t.push(s/o|0);break;case"index":s=t.pop();t.index(s);break;case"le":o=t.pop();s=t.pop();t.push(s<=o);break;case"ln":s=t.pop();t.push(Math.log(s));break;case"log":s=t.pop();t.push(Math.log10(s));break;case"lt":o=t.pop();s=t.pop();t.push(s<o);break;case"mod":o=t.pop();s=t.pop();t.push(s%o);break;case"mul":o=t.pop();s=t.pop();t.push(s*o);break;case"ne":o=t.pop();s=t.pop();t.push(s!==o);break;case"neg":s=t.pop();t.push(-s);break;case"not":s=t.pop();"boolean"==\ +typeof s?t.push(!s):t.push(~s);break;case"or":o=t.pop();s=t.pop();"boolean"==typeof s&&"boolean"==typeof o?t.push(s||o):t.push(s|o);break;case"pop":t.pop();break;case"roll":o=t.pop();s=t.pop();t.roll(s,o);break;case"round":s=t.pop();t.push(Math.round(s));break;case"sin":s=t.pop();t.push(Math.sin(s%360/180*Math.PI));break;case"sqrt":s=t.pop();t.push(Math.sqrt(s));break;case"sub":o=t.pop();s=t.pop();t.push(s-o);break;case"true":t.push(!0);break;case"truncate":s=t.pop();s=s<0?Math.ceil(s):Math.floo\ +r(s);t.push(s);break;case"xor":o=t.pop();s=t.pop();"boolean"==typeof s&&"boolean"==typeof o?t.push(s!==o):t.push(s^o);break;default:throw new FormatError(`Unknown operator ${n}`)}else t.push(n)}return t.stack}}class AstNode{constructor(e){this.type=e}visit(e){unreachable("abstract method")}}class AstArgument extends AstNode{constructor(e,t,a){super("args");this.index=e;this.min=t;this.max=a}visit(e){e.visitArgument(this)}}class AstLiteral extends AstNode{constructor(e){super("literal");this.numb\ +er=e;this.min=e;this.max=e}visit(e){e.visitLiteral(this)}}class AstBinaryOperation extends AstNode{constructor(e,t,a,r,i){super("binary");this.op=e;this.arg1=t;this.arg2=a;this.min=r;this.max=i}visit(e){e.visitBinaryOperation(this)}}class AstMin extends AstNode{constructor(e,t){super("max");this.arg=e;this.min=e.min;this.max=t}visit(e){e.visitMin(this)}}class AstVariable extends AstNode{constructor(e,t,a){super("var");this.index=e;this.min=t;this.max=a}visit(e){e.visitVariable(this)}}class AstVa\ +riableDefinition extends AstNode{constructor(e,t){super("definition");this.variable=e;this.arg=t}visit(e){e.visitVariableDefinition(this)}}class ExpressionBuilderVisitor{constructor(){this.parts=[]}visitArgument(e){this.parts.push("Math.max(",e.min,", Math.min(",e.max,", src[srcOffset + ",e.index,"]))")}visitVariable(e){this.parts.push("v",e.index)}visitLiteral(e){this.parts.push(e.number)}visitBinaryOperation(e){this.parts.push("(");e.arg1.visit(this);this.parts.push(" ",e.op," ");e.arg2.visit(\ +this);this.parts.push(")")}visitVariableDefinition(e){this.parts.push("var ");e.variable.visit(this);this.parts.push(" = ");e.arg.visit(this);this.parts.push(";")}visitMin(e){this.parts.push("Math.min(");e.arg.visit(this);this.parts.push(", ",e.max,")")}toString(){return this.parts.join("")}}function buildAddOperation(e,t){return"literal"===t.type&&0===t.number?e:"literal"===e.type&&0===e.number?t:"literal"===t.type&&"literal"===e.type?new AstLiteral(e.number+t.number):new AstBinaryOperation("+"\ +,e,t,e.min+t.min,e.max+t.max)}function buildMulOperation(e,t){if("literal"===t.type){if(0===t.number)return new AstLiteral(0);if(1===t.number)return e;if("literal"===e.type)return new AstLiteral(e.number*t.number)}if("literal"===e.type){if(0===e.number)return new AstLiteral(0);if(1===e.number)return t}const a=Math.min(e.min*t.min,e.min*t.max,e.max*t.min,e.max*t.max),r=Math.max(e.min*t.min,e.min*t.max,e.max*t.min,e.max*t.max);return new AstBinaryOperation("*",e,t,a,r)}function buildSubOperation(e\ +,t){if("literal"===t.type){if(0===t.number)return e;if("literal"===e.type)return new AstLiteral(e.number-t.number)}return"binary"===t.type&&"-"===t.op&&"literal"===e.type&&1===e.number&&"literal"===t.arg1.type&&1===t.arg1.number?t.arg2:new AstBinaryOperation("-",e,t,e.min-t.max,e.max-t.min)}function buildMinOperation(e,t){return e.min>=t?new AstLiteral(t):e.max<=t?e:new AstMin(e,t)}class PostScriptCompiler{compile(e,t,a){const r=[],i=[],n=t.length>>1,s=a.length>>1;let o,c,l,h,u,d,f,g,p=0;for(let\ + e=0;e<n;e++)r.push(new AstArgument(e,t[2*e],t[2*e+1]));for(let t=0,a=e.length;t<a;t++){g=e[t];if("number"!=typeof g)switch(g){case"add":if(r.length<2)return null;h=r.pop();l=r.pop();r.push(buildAddOperation(l,h));break;case"cvr":if(r.length<1)return null;break;case"mul":if(r.length<2)return null;h=r.pop();l=r.pop();r.push(buildMulOperation(l,h));break;case"sub":if(r.length<2)return null;h=r.pop();l=r.pop();r.push(buildSubOperation(l,h));break;case"exch":if(r.length<2)return null;u=r.pop();d=r.p\ +op();r.push(u,d);break;case"pop":if(r.length<1)return null;r.pop();break;case"index":if(r.length<1)return null;l=r.pop();if("literal"!==l.type)return null;o=l.number;if(o<0||!Number.isInteger(o)||r.length<o)return null;u=r[r.length-o-1];if("literal"===u.type||"var"===u.type){r.push(u);break}f=new AstVariable(p++,u.min,u.max);r[r.length-o-1]=f;r.push(f);i.push(new AstVariableDefinition(f,u));break;case"dup":if(r.length<1)return null;if("number"==typeof e[t+1]&&"gt"===e[t+2]&&e[t+3]===t+7&&"jz"===\ +e[t+4]&&"pop"===e[t+5]&&e[t+6]===e[t+1]){l=r.pop();r.push(buildMinOperation(l,e[t+1]));t+=6;break}u=r.at(-1);if("literal"===u.type||"var"===u.type){r.push(u);break}f=new AstVariable(p++,u.min,u.max);r[r.length-1]=f;r.push(f);i.push(new AstVariableDefinition(f,u));break;case"roll":if(r.length<2)return null;h=r.pop();l=r.pop();if("literal"!==h.type||"literal"!==l.type)return null;c=h.number;o=l.number;if(o<=0||!Number.isInteger(o)||!Number.isInteger(c)||r.length<o)return null;c=(c%o+o)%o;if(0===c)\ +break;r.push(...r.splice(r.length-o,o-c));break;default:return null}else r.push(new AstLiteral(g))}if(r.length!==s)return null;const m=[];for(const e of i){const t=new ExpressionBuilderVisitor;e.visit(t);m.push(t.toString())}for(let e=0,t=r.length;e<t;e++){const t=r[e],i=new ExpressionBuilderVisitor;t.visit(i);const n=a[2*e],s=a[2*e+1],o=[i.toString()];if(n>t.min){o.unshift("Math.max(",n,", ");o.push(")")}if(s<t.max){o.unshift("Math.min(",s,", ");o.push(")")}o.unshift("dest[destOffset + ",e,"] =\ + ");o.push(";");m.push(o.join(""))}return m.join("\\n")}}const wn=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON\ +","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L\ +","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],xn=["AN","AN","AN","AN","AN","AN","ON","ON","AL","ET","ET","AL","CS","AL","ON","ON","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","\ +AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL"\ +,"AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","ON","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","NSM","NSM","ON","NSM","NSM","NSM","NSM","AL","AL","EN","EN","EN","EN","EN",\ +"EN","EN","EN","EN","EN","AL","AL","AL","AL","AL","AL"];function isOdd(e){return!!(1&e)}function isEven(e){return!(1&e)}function findUnequal(e,t,a){let r,i;for(r=t,i=e.length;r<i;++r)if(e[r]!==a)return r;return r}function reverseValues(e,t,a){for(let r=t,i=a-1;r<i;++r,--i){const t=e[r];e[r]=e[i];e[i]=t}}function createBidiText(e,t,a=!1){let r="ltr";a?r="ttb":t||(r="rtl");return{str:e,dir:r}}const Sn=[],An=[];function bidi(e,t=-1,a=!1){let r=!0;const i=e.length;if(0===i||a)return createBidiText(e\ +,r,a);Sn.length=i;An.length=i;let n,s,o=0;for(n=0;n<i;++n){Sn[n]=e.charAt(n);const t=e.charCodeAt(n);let a="L";if(t<=255)a=wn[t];else if(1424<=t&&t<=1524)a="R";else if(1536<=t&&t<=1791){a=xn[255&t];a||warn("Bidi: invalid Unicode character "+t.toString(16))}else(1792<=t&&t<=2220||64336<=t&&t<=65023||65136<=t&&t<=65279)&&(a="AL");"R"!==a&&"AL"!==a&&"AN"!==a||o++;An[n]=a}if(0===o){r=!0;return createBidiText(e,r)}if(-1===t)if(o/i<.3&&i>4){r=!0;t=0}else{r=!1;t=1}const c=[];for(n=0;n<i;++n)c[n]=t;cons\ +t l=isOdd(t)?"R":"L",h=l,u=h;let d,f=h;for(n=0;n<i;++n)"NSM"===An[n]?An[n]=f:f=An[n];f=h;for(n=0;n<i;++n){d=An[n];"EN"===d?An[n]="AL"===f?"AN":"EN":"R"!==d&&"L"!==d&&"AL"!==d||(f=d)}for(n=0;n<i;++n){d=An[n];"AL"===d&&(An[n]="R")}for(n=1;n<i-1;++n){"ES"===An[n]&&"EN"===An[n-1]&&"EN"===An[n+1]&&(An[n]="EN");"CS"!==An[n]||"EN"!==An[n-1]&&"AN"!==An[n-1]||An[n+1]!==An[n-1]||(An[n]=An[n-1])}for(n=0;n<i;++n)if("EN"===An[n]){for(let e=n-1;e>=0&&"ET"===An[e];--e)An[e]="EN";for(let e=n+1;e<i&&"ET"===An[e]\ +;++e)An[e]="EN"}for(n=0;n<i;++n){d=An[n];"WS"!==d&&"ES"!==d&&"ET"!==d&&"CS"!==d||(An[n]="ON")}f=h;for(n=0;n<i;++n){d=An[n];"EN"===d?An[n]="L"===f?"L":"EN":"R"!==d&&"L"!==d||(f=d)}for(n=0;n<i;++n)if("ON"===An[n]){const e=findUnequal(An,n+1,"ON");let t=h;n>0&&(t=An[n-1]);let a=u;e+1<i&&(a=An[e+1]);"L"!==t&&(t="R");"L"!==a&&(a="R");t===a&&An.fill(t,n,e);n=e-1}for(n=0;n<i;++n)"ON"===An[n]&&(An[n]=l);for(n=0;n<i;++n){d=An[n];isEven(c[n])?"R"===d?c[n]+=1:"AN"!==d&&"EN"!==d||(c[n]+=2):"L"!==d&&"AN"!==d\ +&&"EN"!==d||(c[n]+=1)}let g,p=-1,m=99;for(n=0,s=c.length;n<s;++n){g=c[n];p<g&&(p=g);m>g&&isOdd(g)&&(m=g)}for(g=p;g>=m;--g){let e=-1;for(n=0,s=c.length;n<s;++n)if(c[n]<g){if(e>=0){reverseValues(Sn,e,n);e=-1}}else e<0&&(e=n);e>=0&&reverseValues(Sn,e,c.length)}for(n=0,s=Sn.length;n<s;++n){const e=Sn[n];"<"!==e&&">"!==e||(Sn[n]="")}return createBidiText(Sn.join(""),r)}const kn={style:"normal",weight:"normal"},Cn={style:"normal",weight:"bold"},vn={style:"italic",weight:"normal"},Fn={style:"italic",we\ +ight:"bold"},In=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","Linux Libertine O","Libertinus Serif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:kn,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:Cn,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:vn,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:Fn,ultimate:"serif"}]\ +,["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:kn,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:Cn,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"Liberat\ +ionSans-Italic.ttf",style:vn,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:Fn,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono","Linux Libertine Mono O","Libertinus Mono"],style:kn,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:Cn,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:vn,ulti\ +mate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:Fn,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack-BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Nar\ +row","TeX Gyre Heros Cn"],style:kn,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:Cn,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:vn,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:Fn,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:kn,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:Cn,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:vn,fall\ +back:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:Fn,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:kn}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}]]),Tn=new Map([["Arial-Black","ArialBlack"]]);function getFamilyName(e){const t=new Set(["thin","extralight","ultralight","demilight","semilight","light","book","regular","normal","medium","demibold","semibold","bold","extrabold","ultrabold","black",\ +"heavy","extrablack","ultrablack","roman","italic","oblique","ultracondensed","extracondensed","condensed","semicondensed","normal","semiexpanded","expanded","extraexpanded","ultraexpanded","bolditalic"]);return e.split(/[- ,+]+/g).filter((e=>!t.has(e.toLowerCase()))).join(" ")}function generateFont({alias:e,local:t,path:a,fallback:r,style:i,ultimate:n},s,o,c=!0,l=!0,h=""){const u={style:null,ultimate:null};if(t){const e=h?` ${h}`:"";for(const a of t)s.push(`local(${a}${e})`)}if(e){const t=In.ge\ +t(e),n=h||function getStyleToAppend(e){switch(e){case Cn:return"Bold";case vn:return"Italic";case Fn:return"Bold Italic";default:if("bold"===e?.weight)return"Bold";if("italic"===e?.style)return"Italic"}return""}(i);Object.assign(u,generateFont(t,s,o,c&&!r,l&&!a,n))}i&&(u.style=i);n&&(u.ultimate=n);if(c&&r){const e=In.get(r),{ultimate:t}=generateFont(e,s,o,c,l&&!a,h);u.ultimate||=t}l&&a&&o&&s.push(`url(${o}${a})`);return u}function getFontSubstitution(e,t,a,r,i,n){if(r.startsWith("InvalidPDFjsFon\ +t_"))return null;"TrueType"!==n&&"Type1"!==n||!/^[A-Z]{6}\\+/.test(r)||(r=r.slice(7));const s=r=normalizeFontName(r);let o=e.get(s);if(o)return o;let c=In.get(r);if(!c)for(const[e,t]of Tn)if(r.startsWith(e)){r=`${t}${r.substring(e.length)}`;c=In.get(r);break}let l=!1;if(!c){c=In.get(i);l=!0}const h=`${t.getDocId()}_s${t.createFontId()}`;if(!c){if(!validateFontName(r)){warn(`Cannot substitute the font because of its name: ${r}`);e.set(s,null);return null}const t=/bold/gi.test(r),a=/oblique|italic/\ +gi.test(r),i=t&&a&&Fn||t&&Cn||a&&vn||kn;o={css:`"${getFamilyName(r)}",${h}`,guessFallback:!0,loadedName:h,baseFontName:r,src:`local(${r})`,style:i};e.set(s,o);return o}const u=[];l&&validateFontName(r)&&u.push(`local(${r})`);const{style:d,ultimate:f}=generateFont(c,u,a),g=null===f,p=g?"":`,${f}`;o={css:`"${getFamilyName(r)}",${h}${p}`,guessFallback:g,loadedName:h,baseFontName:r,src:u.join(","),style:d};e.set(s,o);return o}const On=3285377520,Mn=4294901760,Dn=65535;class MurmurHash3_64{constructo\ +r(e){this.h1=e?4294967295&e:On;this.h2=e?4294967295&e:On}update(e){let t,a;if("string"==typeof e){t=new Uint8Array(2*e.length);a=0;for(let r=0,i=e.length;r<i;r++){const i=e.charCodeAt(r);if(i<=255)t[a++]=i;else{t[a++]=i>>>8;t[a++]=255&i}}}else{if(!ArrayBuffer.isView(e))throw new Error("Invalid data format, must be a string or TypedArray.");t=e.slice();a=t.byteLength}const r=a>>2,i=a-4*r,n=new Uint32Array(t.buffer,0,r);let s=0,o=0,c=this.h1,l=this.h2;const h=3432918353,u=461845907,d=11601,f=13715\ +;for(let e=0;e<r;e++)if(1&e){s=n[e];s=s*h&Mn|s*d&Dn;s=s<<15|s>>>17;s=s*u&Mn|s*f&Dn;c^=s;c=c<<13|c>>>19;c=5*c+3864292196}else{o=n[e];o=o*h&Mn|o*d&Dn;o=o<<15|o>>>17;o=o*u&Mn|o*f&Dn;l^=o;l=l<<13|l>>>19;l=5*l+3864292196}s=0;switch(i){case 3:s^=t[4*r+2]<<16;case 2:s^=t[4*r+1]<<8;case 1:s^=t[4*r];s=s*h&Mn|s*d&Dn;s=s<<15|s>>>17;s=s*u&Mn|s*f&Dn;1&r?c^=s:l^=s}this.h1=c;this.h2=l}hexdigest(){let e=this.h1,t=this.h2;e^=t>>>1;e=3981806797*e&Mn|36045*e&Dn;t=4283543511*t&Mn|(2950163797*(t<<16|e>>>16)&Mn)>>>16\ +;e^=t>>>1;e=444984403*e&Mn|60499*e&Dn;t=3301882366*t&Mn|(3120437893*(t<<16|e>>>16)&Mn)>>>16;e^=t>>>1;return(e>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}function resizeImageMask(e,t,a,r,i,n){const s=i*n;let o;o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);const c=a/i,l=r/n;let h,u,d,f,g=0;const p=new Uint16Array(i),m=a;for(h=0;h<i;h++)p[h]=Math.floor(h*c);for(h=0;h<n;h++){d=Math.floor(h*l)*m;for(u=0;u<i;u++){f=d+p[u];o[g++]=e[f]}}return o}class \ +PDFImage{constructor({xref:e,res:t,image:a,isInline:r=!1,smask:i=null,mask:n=null,isMask:s=!1,pdfFunctionFactory:o,globalColorSpaceCache:c,localColorSpaceCache:l}){this.image=a;const h=a.dict,u=h.get("F","Filter");let d;if(u instanceof Name)d=u.name;else if(Array.isArray(u)){const t=e.fetchIfRef(u[0]);t instanceof Name&&(d=t.name)}switch(d){case"JPXDecode":({width:a.width,height:a.height,componentsCount:a.numComps,bitsPerComponent:a.bitsPerComponent}=JpxImage.parseImageProperties(a.stream));a.st\ +ream.reset();const e=ImageResizer.getReducePowerForJPX(a.width,a.height,a.numComps);this.jpxDecoderOptions={numComponents:0,isIndexedColormap:!1,smaskInData:h.has("SMaskInData"),reducePower:e};if(e){const t=2**e;a.width=Math.ceil(a.width/t);a.height=Math.ceil(a.height/t)}break;case"JBIG2Decode":a.bitsPerComponent=1;a.numComps=1}let f=h.get("W","Width"),g=h.get("H","Height");if(Number.isInteger(a.width)&&a.width>0&&Number.isInteger(a.height)&&a.height>0&&(a.width!==f||a.height!==g)){warn("PDFImag\ +e - using the Width/Height of the image data, rather than the image dictionary.");f=a.width;g=a.height}else{const e="number"==typeof f&&f>0,t="number"==typeof g&&g>0;if(!e||!t){if(!a.fallbackDims)throw new FormatError(`Invalid image width: ${f} or height: ${g}`);warn("PDFImage - using the Width/Height of the parent image, for SMask/Mask data.");e||(f=a.fallbackDims.width);t||(g=a.fallbackDims.height)}}this.width=f;this.height=g;this.interpolate=h.get("I","Interpolate");this.imageMask=h.get("IM",\ +"ImageMask")||!1;this.matte=h.get("Matte")||!1;let p=a.bitsPerComponent;if(!p){p=h.get("BPC","BitsPerComponent");if(!p){if(!this.imageMask)throw new FormatError(`Bits per component missing in image: ${this.imageMask}`);p=1}}this.bpc=p;if(!this.imageMask){let i=h.getRaw("CS")||h.getRaw("ColorSpace");const n=!!i;if(n)this.jpxDecoderOptions?.smaskInData&&(i=Name.get("DeviceRGBA"));else if(this.jpxDecoderOptions)i=Name.get("DeviceRGBA");else switch(a.numComps){case 1:i=Name.get("DeviceGray");break;c\ +ase 3:i=Name.get("DeviceRGB");break;case 4:i=Name.get("DeviceCMYK");break;default:throw new Error(`Images with ${a.numComps} color components not supported.`)}this.colorSpace=ColorSpaceUtils.parse({cs:i,xref:e,resources:r?t:null,pdfFunctionFactory:o,globalColorSpaceCache:c,localColorSpaceCache:l});this.numComps=this.colorSpace.numComps;if(this.jpxDecoderOptions){this.jpxDecoderOptions.numComponents=n?this.numComps:0;this.jpxDecoderOptions.isIndexedColormap="Indexed"===this.colorSpace.name}}this.\ +decode=h.getArray("D","Decode");this.needsDecode=!1;if(this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,p)||s&&!ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;const e=(1<<p)-1;this.decodeCoefficients=[];this.decodeAddends=[];const t="Indexed"===this.colorSpace?.name;for(let a=0,r=0;a<this.decode.length;a+=2,++r){const i=this.decode[a],n=this.decode[a+1];this.decodeCoefficients[r]=t?(n-i)/e:n-i;this.decodeAddends[r]=t?i:e*i}}if(i){i.fallbackDims??={widt\ +h:f,height:g};this.smask=new PDFImage({xref:e,res:t,image:i,isInline:r,pdfFunctionFactory:o,globalColorSpaceCache:c,localColorSpaceCache:l})}else if(n)if(n instanceof BaseStream){if(n.dict.get("IM","ImageMask")){n.fallbackDims??={width:f,height:g};this.mask=new PDFImage({xref:e,res:t,image:n,isInline:r,isMask:!0,pdfFunctionFactory:o,globalColorSpaceCache:c,localColorSpaceCache:l})}else warn("Ignoring /Mask in image without /ImageMask.")}else this.mask=n}static async buildImage({xref:e,res:t,imag\ +e:a,isInline:r=!1,pdfFunctionFactory:i,globalColorSpaceCache:n,localColorSpaceCache:s}){const o=a;let c=null,l=null;const h=a.dict.get("SMask"),u=a.dict.get("Mask");h?h instanceof BaseStream?c=h:warn("Unsupported /SMask format."):u&&(u instanceof BaseStream||Array.isArray(u)?l=u:warn("Unsupported /Mask format."));return new PDFImage({xref:e,res:t,image:o,isInline:r,smask:c,mask:l,pdfFunctionFactory:i,globalColorSpaceCache:n,localColorSpaceCache:s})}static async createMask({image:e,isOffscreenCan\ +vasSupported:t=!1}){const{dict:a}=e,r=a.get("W","Width"),i=a.get("H","Height"),n=a.get("I","Interpolate"),s=a.getArray("D","Decode"),o=s?.[0]>0,c=(r+7>>3)*i,l=e.getBytes(c),h=1===r&&1===i&&o===(0===l.length||!!(128&l[0]));if(h)return{isSingleOpaquePixel:h};if(t){if(ImageResizer.needsToBeResized(r,i)){const e=new Uint8ClampedArray(r*i*4);convertBlackAndWhiteToRGBA({src:l,dest:e,width:r,height:i,nonBlackColor:0,inverseDecode:o});return ImageResizer.createImage({kind:v,data:e,width:r,height:i,inter\ +polate:n})}const e=new OffscreenCanvas(r,i),t=e.getContext("2d"),a=t.createImageData(r,i);convertBlackAndWhiteToRGBA({src:l,dest:a.data,width:r,height:i,nonBlackColor:0,inverseDecode:o});t.putImageData(a,0,0);return{data:null,width:r,height:i,interpolate:n,bitmap:e.transferToImageBitmap()}}const u=l.byteLength;let d;if(e instanceof DecodeStream&&(!o||c===u))d=l;else if(o){d=new Uint8Array(c);d.set(l);d.fill(255,u)}else d=new Uint8Array(l);if(o)for(let e=0;e<u;e++)d[e]^=255;return{data:d,width:r,\ +height:i,interpolate:n}}get drawWidth(){return Math.max(this.width,this.smask?.width||0,this.mask?.width||0)}get drawHeight(){return Math.max(this.height,this.smask?.height||0,this.mask?.height||0)}decodeBuffer(e){const t=this.bpc,a=this.numComps,r=this.decodeAddends,i=this.decodeCoefficients,n=(1<<t)-1;let s,o;if(1===t){for(s=0,o=e.length;s<o;s++)e[s]=+!e[s];return}let c=0;for(s=0,o=this.width*this.height;s<o;s++)for(let t=0;t<a;t++){e[c]=MathClamp(r[t]+e[c]*i[t],0,n);c++}}getComponents(e){cons\ +t t=this.bpc;if(8===t)return e;const a=this.width,r=this.height,i=this.numComps,n=a*r*i;let s,o=0;s=t<=8?new Uint8Array(n):t<=16?new Uint16Array(n):new Uint32Array(n);const c=a*i,l=(1<<t)-1;let h,u,d=0;if(1===t){let t,a,i;for(let n=0;n<r;n++){a=d+(-8&c);i=d+c;for(;d<a;){u=e[o++];s[d]=u>>7&1;s[d+1]=u>>6&1;s[d+2]=u>>5&1;s[d+3]=u>>4&1;s[d+4]=u>>3&1;s[d+5]=u>>2&1;s[d+6]=u>>1&1;s[d+7]=1&u;d+=8}if(d<i){u=e[o++];t=128;for(;d<i;){s[d++]=+!!(u&t);t>>=1}}}}else{let a=0;u=0;for(d=0,h=n;d<h;++d){if(d%c==0){\ +u=0;a=0}for(;a<t;){u=u<<8|e[o++];a+=8}const r=a-t;let i=u>>r;i<0?i=0:i>l&&(i=l);s[d]=i;u&=(1<<r)-1;a=r}}return s}async fillOpacity(e,t,a,r,i){const n=this.smask,s=this.mask;let o,c,l,h,u,d;if(n){c=n.width;l=n.height;o=new Uint8ClampedArray(c*l);await n.fillGrayBuffer(o);c===t&&l===a||(o=resizeImageMask(o,n.bpc,c,l,t,a))}else if(s)if(s instanceof PDFImage){c=s.width;l=s.height;o=new Uint8ClampedArray(c*l);s.numComps=1;await s.fillGrayBuffer(o);for(h=0,u=c*l;h<u;++h)o[h]=255-o[h];c===t&&l===a||(o=\ +resizeImageMask(o,s.bpc,c,l,t,a))}else{if(!Array.isArray(s))throw new FormatError("Unknown mask format.");{o=new Uint8ClampedArray(t*a);const e=this.numComps;for(h=0,u=t*a;h<u;++h){let t=0;const a=h*e;for(d=0;d<e;++d){const e=i[a+d],r=2*d;if(e<s[r]||e>s[r+1]){t=255;break}}o[h]=t}}}if(o)for(h=0,d=3,u=t*r;h<u;++h,d+=4)e[d]=o[h];else for(h=0,d=3,u=t*r;h<u;++h,d+=4)e[d]=255}undoPreblend(e,t,a){const r=this.smask?.matte;if(!r)return;const i=this.colorSpace.getRgb(r,0),n=i[0],s=i[1],o=i[2],c=t*a*4;for\ +(let t=0;t<c;t+=4){const a=e[t+3];if(0===a){e[t]=255;e[t+1]=255;e[t+2]=255;continue}const r=255/a;e[t]=(e[t]-n)*r+n;e[t+1]=(e[t+1]-s)*r+s;e[t+2]=(e[t+2]-o)*r+o}}async createImageData(e=!1,t=!1){const a=this.drawWidth,r=this.drawHeight,i={width:a,height:r,interpolate:this.interpolate,kind:0,data:null},n=this.numComps,s=this.width,o=this.height,c=this.bpc,l=s*n*c+7>>3,h=t&&ImageResizer.needsToBeResized(a,r);if(!this.smask&&!this.mask&&"DeviceRGBA"===this.colorSpace.name){i.kind=v;const e=i.data=aw\ +ait this.getImageBytes(o*s*4,{});return t?h?ImageResizer.createImage(i,!1):this.createBitmap(v,a,r,e):i}if(!e){let e;"DeviceGray"===this.colorSpace.name&&1===c?e=k:"DeviceRGB"!==this.colorSpace.name||8!==c||this.needsDecode||(e=C);if(e&&!this.smask&&!this.mask&&a===s&&r===o){const n=await this.#$(s,o);if(n)return n;const c=await this.getImageBytes(o*l,{});if(t)return h?ImageResizer.createImage({data:c,kind:e,width:a,height:r,interpolate:this.interpolate},this.needsDecode):this.createBitmap(e,s,o\ +,c);i.kind=e;i.data=c;if(this.needsDecode){assert(e===k,"PDFImage.createImageData: The image must be grayscale.");const t=i.data;for(let e=0,a=t.length;e<a;e++)t[e]^=255}return i}if(this.image instanceof JpegStream&&!this.smask&&!this.mask&&!this.needsDecode){let e=o*l;if(t&&!h){let t=!1;switch(this.colorSpace.name){case"DeviceGray":e*=4;t=!0;break;case"DeviceRGB":e=e/3*4;t=!0;break;case"DeviceCMYK":t=!0}if(t){const t=await this.#$(a,r);if(t)return t;const i=await this.getImageBytes(e,{drawWidth\ +:a,drawHeight:r,forceRGBA:!0});return this.createBitmap(v,a,r,i)}}else switch(this.colorSpace.name){case"DeviceGray":e*=3;case"DeviceRGB":case"DeviceCMYK":i.kind=C;i.data=await this.getImageBytes(e,{drawWidth:a,drawHeight:r,forceRGB:!0});return h?ImageResizer.createImage(i):i}}}const u=await this.getImageBytes(o*l,{internal:!0}),d=0|u.length/l*r/o,f=this.getComponents(u);let g,p,m,b,y,w;if(t&&!h){m=new OffscreenCanvas(a,r);b=m.getContext("2d");y=b.createImageData(a,r);w=y.data}i.kind=v;if(e||thi\ +s.smask||this.mask){t&&!h||(w=new Uint8ClampedArray(a*r*4));g=1;p=!0;await this.fillOpacity(w,a,r,d,f)}else{if(!t||h){i.kind=C;w=new Uint8ClampedArray(a*r*3);g=0}else{new Uint32Array(w.buffer).fill(FeatureTest.isLittleEndian?4278190080:255);g=1}p=!1}this.needsDecode&&this.decodeBuffer(f);this.colorSpace.fillRgb(w,s,o,a,r,d,c,f,g);p&&this.undoPreblend(w,a,d);if(t&&!h){b.putImageData(y,0,0);return{data:null,width:a,height:r,bitmap:m.transferToImageBitmap(),interpolate:this.interpolate}}i.data=w;re\ +turn h?ImageResizer.createImage(i):i}async fillGrayBuffer(e){const t=this.numComps;if(1!==t)throw new FormatError(`Reading gray scale from a color image: ${t}`);const a=this.width,r=this.height,i=this.bpc,n=a*t*i+7>>3,s=await this.getImageBytes(r*n,{internal:!0}),o=this.getComponents(s);let c,l;if(1===i){l=a*r;if(this.needsDecode)for(c=0;c<l;++c)e[c]=o[c]-1&255;else for(c=0;c<l;++c)e[c]=255&-o[c];return}this.needsDecode&&this.decodeBuffer(o);l=a*r;const h=255/((1<<i)-1);for(c=0;c<l;++c)e[c]=h*o[\ +c]}createBitmap(e,t,a,r){const i=new OffscreenCanvas(t,a),n=i.getContext("2d");let s;if(e===v)s=new ImageData(r,t,a);else{s=n.createImageData(t,a);convertToRGBA({kind:e,src:r,dest:new Uint32Array(s.data.buffer),width:t,height:a,inverseDecode:this.needsDecode})}n.putImageData(s,0,0);return{data:null,width:t,height:a,bitmap:i.transferToImageBitmap(),interpolate:this.interpolate}}async#$(e,t){const a=await this.image.getTransferableImage();return a?{data:null,width:e,height:t,bitmap:a,interpolate:t\ +his.interpolate}:null}async getImageBytes(e,{drawWidth:t,drawHeight:a,forceRGBA:r=!1,forceRGB:i=!1,internal:n=!1}){this.image.reset();this.image.drawWidth=t||this.width;this.image.drawHeight=a||this.height;this.image.forceRGBA=!!r;this.image.forceRGB=!!i;const s=await this.image.getImageData(e,this.jpxDecoderOptions);if(n||this.image instanceof DecodeStream)return s;assert(s instanceof Uint8Array,\'PDFImage.getImageBytes: Unsupported "imageBytes" type.\');return new Uint8Array(s)}}const Bn=Object.\ +freeze({maxImageSize:-1,disableFontFace:!1,ignoreErrors:!1,isEvalSupported:!0,isOffscreenCanvasSupported:!1,isImageDecoderSupported:!1,canvasMaxAreaInBytes:-1,fontExtraProperties:!1,useSystemFonts:!0,useWasm:!0,useWorkerFetch:!0,cMapUrl:null,iccUrl:null,standardFontDataUrl:null,wasmUrl:null}),Rn=1,Nn=2,En=Promise.resolve();function normalizeBlendMode(e,t=!1){if(Array.isArray(e)){for(const t of e){const e=normalizeBlendMode(t,!0);if(e)return e}warn(`Unsupported blend mode Array: ${e}`);return"sou\ +rce-over"}if(!(e instanceof Name))return t?null:"source-over";switch(e.name){case"Normal":case"Compatible":return"source-over";case"Multiply":return"multiply";case"Screen":return"screen";case"Overlay":return"overlay";case"Darken":return"darken";case"Lighten":return"lighten";case"ColorDodge":return"color-dodge";case"ColorBurn":return"color-burn";case"HardLight":return"hard-light";case"SoftLight":return"soft-light";case"Difference":return"difference";case"Exclusion":return"exclusion";case"Hue":ret\ +urn"hue";case"Saturation":return"saturation";case"Color":return"color";case"Luminosity":return"luminosity"}if(t)return null;warn(`Unsupported blend mode: ${e.name}`);return"source-over"}function addCachedImageOps(e,{objId:t,fn:a,args:r,optionalContent:i,hasMask:n}){t&&e.addDependency(t);e.addImageOps(a,r,i,n);a===Vt&&r[0]?.count>0&&r[0].count++}class TimeSlotManager{static TIME_SLOT_DURATION_MS=20;static CHECK_TIME_EVERY=100;constructor(){this.reset()}check(){if(++this.checked<TimeSlotManager.CH\ +ECK_TIME_EVERY)return!1;this.checked=0;return this.endTime<=Date.now()}reset(){this.endTime=Date.now()+TimeSlotManager.TIME_SLOT_DURATION_MS;this.checked=0}}class PartialEvaluator{constructor({xref:e,handler:t,pageIndex:a,idFactory:r,fontCache:i,builtInCMapCache:n,standardFontDataCache:s,globalColorSpaceCache:o,globalImageCache:c,systemFontCache:l,options:h=null}){this.xref=e;this.handler=t;this.pageIndex=a;this.idFactory=r;this.fontCache=i;this.builtInCMapCache=n;this.standardFontDataCache=s;th\ +is.globalColorSpaceCache=o;this.globalImageCache=c;this.systemFontCache=l;this.options=h||Bn;this.type3FontRefs=null;this._regionalImageCache=new RegionalImageCache;this._fetchBuiltInCMapBound=this.fetchBuiltInCMap.bind(this)}get _pdfFunctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref,isEvalSupported:this.options.isEvalSupported}))}get parsingType3Font(){return!!this.type3FontRefs}clone(e=null){const t=Object.create(this);t.options=Object.assign(Obje\ +ct.create(null),this.options,e);return t}hasBlendModes(e,t){if(!(e instanceof Dict))return!1;if(e.objId&&t.has(e.objId))return!1;const a=new RefSet(t);e.objId&&a.put(e.objId);const r=[e],i=this.xref;for(;r.length;){const e=r.shift(),t=e.get("ExtGState");if(t instanceof Dict)for(let e of t.getRawValues()){if(e instanceof Ref){if(a.has(e))continue;try{e=i.fetch(e)}catch(t){a.put(e);info(`hasBlendModes - ignoring ExtGState: "${t}".`);continue}}if(!(e instanceof Dict))continue;e.objId&&a.put(e.objId\ +);const t=e.get("BM");if(t instanceof Name){if("Normal"!==t.name)return!0}else if(void 0!==t&&Array.isArray(t))for(const e of t)if(e instanceof Name&&"Normal"!==e.name)return!0}const n=e.get("XObject");if(n instanceof Dict)for(let e of n.getRawValues()){if(e instanceof Ref){if(a.has(e))continue;try{e=i.fetch(e)}catch(t){a.put(e);info(`hasBlendModes - ignoring XObject: "${t}".`);continue}}if(!(e instanceof BaseStream))continue;e.dict.objId&&a.put(e.dict.objId);const t=e.dict.get("Resources");if(t\ + instanceof Dict&&(!t.objId||!a.has(t.objId))){r.push(t);t.objId&&a.put(t.objId)}}}for(const e of a)t.put(e);return!1}async fetchBuiltInCMap(e){const t=this.builtInCMapCache.get(e);if(t)return t;let a;a=this.options.useWorkerFetch?{cMapData:await fetchBinaryData(`${this.options.cMapUrl}${e}.bcmap`),isCompressed:!0}:await this.handler.sendWithPromise("FetchBinaryData",{type:"cMapReaderFactory",name:e});this.builtInCMapCache.set(e,a);return a}async fetchStandardFontData(e){const t=this.standardFon\ +tDataCache.get(e);if(t)return new Stream(t);if(this.options.useSystemFonts&&"Symbol"!==e&&"ZapfDingbats"!==e)return null;const a=Yr()[e];let r;try{r=this.options.useWorkerFetch?await fetchBinaryData(`${this.options.standardFontDataUrl}${a}`):await this.handler.sendWithPromise("FetchBinaryData",{type:"standardFontDataFactory",filename:a})}catch(e){warn(e);return null}this.standardFontDataCache.set(e,r);return new Stream(r)}async buildFormXObject(e,t,a,r,i,n,s,o){const{dict:c}=t,l=lookupMatrix(c.g\ +etArray("Matrix"),null),h=lookupNormalRect(c.getArray("BBox"),null);let u,d;c.has("OC")&&(u=await this.parseMarkedContentProps(c.get("OC"),e));void 0!==u&&r.addOp(jt,["OC",u]);const f=c.get("Group");if(f){d={matrix:l,bbox:h,smask:a,isolated:!1,knockout:!1};let t=null;if(isName(f.get("S"),"Transparency")){d.isolated=f.get("I")||!1;d.knockout=f.get("K")||!1;if(f.has("CS")){const a=this._getColorSpace(f.getRaw("CS"),e,s);t=a instanceof ColorSpace?a:await this._handleColorSpace(a)}}if(a?.backdrop){t\ +||=ColorSpaceUtils.rgb;a.backdrop=t.getRgbHex(a.backdrop,0)}r.addOp(Wt,[d])}const g=[l&&new Float32Array(l),!f&&h&&new Float32Array(h)||null];r.addOp(qt,g);const p=c.get("Resources");await this.getOperatorList({stream:t,task:i,resources:p instanceof Dict?p:e,operatorList:r,initialState:n,prevRefs:o});r.addOp(Ht,[]);f&&r.addOp(zt,[d]);void 0!==u&&r.addOp(_t,[])}_sendImgData(e,t,a=!1){const r=t?[t.bitmap||t.data.buffer]:null;return this.parsingType3Font||a?this.handler.send("commonobj",[e,"Image",\ +t],r):this.handler.send("obj",[e,this.pageIndex,"Image",t],r)}async buildPaintImageXObject({resources:e,image:t,isInline:a=!1,operatorList:r,cacheKey:i,localImageCache:n,localColorSpaceCache:s}){const{maxImageSize:o,ignoreErrors:c,isOffscreenCanvasSupported:l}=this.options,{dict:h}=t,u=h.objId,d=h.get("W","Width"),f=h.get("H","Height");if(!d||"number"!=typeof d||!f||"number"!=typeof f){warn("Image dimensions are missing, or not numbers.");return}if(-1!==o&&d*f>o){const e="Image exceeded maximum \ +allowed size and was removed.";if(!c)throw new Error(e);warn(e);return}let g;h.has("OC")&&(g=await this.parseMarkedContentProps(h.get("OC"),e));let p,m,b;if(h.get("IM","ImageMask")||!1){p=await PDFImage.createMask({image:t,isOffscreenCanvasSupported:l&&!this.parsingType3Font});if(p.isSingleOpaquePixel){m=ta;b=[];r.addImageOps(m,b,g);if(i){const e={fn:m,args:b,optionalContent:g};n.set(i,u,e);u&&this._regionalImageCache.set(null,u,e)}return}if(this.parsingType3Font){b=function compileType3Glyph({d\ +ata:e,width:t,height:a}){if(t>1e3||a>1e3)return null;const r=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),i=t+1,n=new Uint8Array(i*(a+1));let s,o,c;const l=t+7&-8,h=new Uint8Array(l*a);let u=0;for(const t of e){let e=128;for(;e>0;){h[u++]=t&e?0:255;e>>=1}}let d=0;u=0;if(0!==h[u]){n[0]=1;++d}for(o=1;o<t;o++){if(h[u]!==h[u+1]){n[o]=h[u]?2:1;++d}u++}if(0!==h[u]){n[o]=2;++d}for(s=1;s<a;s++){u=s*l;c=s*i;if(h[u-l]!==h[u]){n[c]=h[u]?1:8;++d}let e=(h[u]?4:0)+(h[u-l]?8:0);for(o=1;o<t;o++){e=(e>>2)+\ +(h[u+1]?4:0)+(h[u-l+1]?8:0);if(r[e]){n[c+o]=r[e];++d}u++}if(h[u-l]!==h[u]){n[c+o]=h[u]?2:4;++d}if(d>1e3)return null}u=l*(a-1);c=s*i;if(0!==h[u]){n[c]=8;++d}for(o=1;o<t;o++){if(h[u]!==h[u+1]){n[c+o]=h[u]?4:8;++d}u++}if(0!==h[u]){n[c+o]=4;++d}if(d>1e3)return null;const f=new Int32Array([0,i,-1,0,-i,0,0,0,1]),g=[],{a:p,b:m,c:b,d:y,e:w,f:x}=(new DOMMatrix).scaleSelf(1/t,-1/a).translateSelf(0,-a);for(s=0;d&&s<=a;s++){let e=s*i;const a=e+t;for(;e<a&&!n[e];)e++;if(e===a)continue;let r=e%i,o=s;g.push(sa\ +,p*r+b*o+w,m*r+y*o+x);const c=e;let l=n[e];do{const t=f[l];do{e+=t}while(!n[e]);const a=n[e];if(5!==a&&10!==a){l=a;n[e]=0}else{l=a&51*l>>4;n[e]&=l>>2|l<<2}r=e%i;o=e/i|0;g.push(oa,p*r+b*o+w,m*r+y*o+x);n[e]||--d}while(c!==e);--s}return[na,[new Float32Array(g)],new Float32Array([0,0,t,a])]}(p);if(b){r.addImageOps(aa,b,g);return}warn("Cannot compile Type3 glyph.");r.addImageOps(Vt,[p],g);return}const e=`mask_${this.idFactory.createObjId()}`;r.addDependency(e);p.dataLen=p.bitmap?p.width*p.height*4:p.\ +data.length;this._sendImgData(e,p);m=Vt;b=[{data:e,width:p.width,height:p.height,interpolate:p.interpolate,count:1}];r.addImageOps(m,b,g);if(i){const t={objId:e,fn:m,args:b,optionalContent:g};n.set(i,u,t);u&&this._regionalImageCache.set(null,u,t)}return}const y=h.has("SMask")||h.has("Mask");if(a&&d+f<200&&!y){try{const i=new PDFImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:s});p=awa\ +it i.createImageData(!0,!1);r.addImageOps(Yt,[p],g)}catch(e){const t=`Unable to decode inline image: "${e}".`;if(!c)throw new Error(t);warn(t)}return}let w=`img_${this.idFactory.createObjId()}`,x=!1,S=null;if(this.parsingType3Font)w=`${this.idFactory.getDocId()}_type3_${w}`;else if(i&&u){x=this.globalImageCache.shouldCache(u,this.pageIndex);if(x){assert(!a,"Cannot cache an inline image globally.");w=`${this.idFactory.getDocId()}_${w}`}}r.addDependency(w);m=Jt;b=[w,d,f];r.addImageOps(m,b,g,y);if(\ +x){S={objId:w,fn:m,args:b,optionalContent:g,hasMask:y,byteSize:0};if(this.globalImageCache.hasDecodeFailed(u)){this.globalImageCache.setData(u,S);this._sendImgData(w,null,x);return}if(d*f>25e4||y){const e=await this.handler.sendWithPromise("commonobj",[w,"CopyLocalImage",{imageRef:u}]);if(e){this.globalImageCache.setData(u,S);this.globalImageCache.addByteSize(u,e);return}}}PDFImage.buildImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCac\ +he:this.globalColorSpaceCache,localColorSpaceCache:s}).then((async e=>{p=await e.createImageData(!1,l);p.dataLen=p.bitmap?p.width*p.height*4:p.data.length;p.ref=u;x&&this.globalImageCache.addByteSize(u,p.dataLen);return this._sendImgData(w,p,x)})).catch((e=>{warn(`Unable to decode image "${w}": "${e}".`);u&&this.globalImageCache.addDecodeFailed(u);return this._sendImgData(w,null,x)}));if(i){const e={objId:w,fn:m,args:b,optionalContent:g,hasMask:y};n.set(i,u,e);if(u){this._regionalImageCache.set(\ +null,u,e);if(x){assert(S,"The global cache-data must be available.");this.globalImageCache.setData(u,S)}}}}handleSMask(e,t,a,r,i,n,s){const o=e.get("G"),c={subtype:e.get("S").name,backdrop:e.get("BC")},l=e.get("TR");if(isPDFFunction(l)){const e=this._pdfFunctionFactory.create(l),t=new Uint8Array(256),a=new Float32Array(1);for(let r=0;r<256;r++){a[0]=r/255;e(a,0,a,0);t[r]=255*a[0]|0}c.transferMap=t}return this.buildFormXObject(t,o,c,a,r,i.state.clone({newPath:!0}),n,s)}handleTransferFunction(e){l\ +et t;if(Array.isArray(e))t=e;else{if(!isPDFFunction(e))return null;t=[e]}const a=[];let r=0,i=0;for(const e of t){const t=this.xref.fetchIfRef(e);r++;if(isName(t,"Identity")){a.push(null);continue}if(!isPDFFunction(t))return null;const n=this._pdfFunctionFactory.create(t),s=new Uint8Array(256),o=new Float32Array(1);for(let e=0;e<256;e++){o[0]=e/255;n(o,0,o,0);s[e]=255*o[0]|0}a.push(s);i++}return 1!==r&&4!==r||0===i?null:a}handleTilingType(e,t,a,r,i,n,s,o){const c=new OperatorList,l=Dict.merge({x\ +ref:this.xref,dictArray:[i.get("Resources"),a]});return this.getOperatorList({stream:r,task:s,resources:l,operatorList:c}).then((function(){const a=c.getIR(),r=getTilingPatternIR(a,i,t);n.addDependencies(c.dependencies);n.addOp(e,r);i.objId&&o.set(null,i.objId,{operatorListIR:a,dict:i})})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`handleTilingType - ignoring pattern: "${e}".`)}}))}async handleSetFont(e,t,a,r,i,n,s=null,o=null){const c=t?.[0]instanc\ +eof Name?t[0].name:null,l=await this.loadFont(c,a,e,i,s,o);l.font.isType3Font&&r.addDependencies(l.type3Dependencies);n.font=l.font;l.send(this.handler);return l.loadedName}handleText(e,t){const a=t.font,r=a.charsToGlyphs(e);if(a.data){(!!(t.textRenderingMode&S)||"Pattern"===t.fillColorSpace.name||a.disableFontFace)&&PartialEvaluator.buildFontPaths(a,r,this.handler,this.options)}return r}ensureStateFont(e){if(e.font)return;const t=new FormatError("Missing setFont (Tf) operator before text render\ +ing operator.");if(!this.options.ignoreErrors)throw t;warn(`ensureStateFont: "${t}".`)}async setGState({resources:e,gState:t,operatorList:a,cacheKey:r,task:i,stateManager:n,localGStateCache:s,localColorSpaceCache:o,seenRefs:c}){const l=t.objId;let h=!0;const u=[];let d=Promise.resolve();for(const[r,s]of t)switch(r){case"Type":break;case"LW":if("number"!=typeof s){warn(`Invalid LW (line width): ${s}`);break}u.push([r,Math.abs(s)]);break;case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA\ +":case"ca":u.push([r,s]);break;case"Font":h=!1;d=d.then((()=>this.handleSetFont(e,null,s[0],a,i,n.state).then((function(e){a.addDependency(e);u.push([r,[e,s[1]]])}))));break;case"BM":u.push([r,normalizeBlendMode(s)]);break;case"SMask":if(isName(s,"None")){u.push([r,!1]);break}if(s instanceof Dict){h=!1;d=d.then((()=>this.handleSMask(s,e,a,i,n,o,c)));u.push([r,!0])}else warn("Unsupported SMask type");break;case"TR":const t=this.handleTransferFunction(s);u.push([r,t]);break;case"OP":case"op":case"\ +OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":info("graphic state operator "+r);break;default:info("Unknown graphic state operator "+r)}await d;u.length>0&&a.addOp(De,[u]);h&&s.set(r,l,u)}loadFont(e,t,a,r,i=null,n=null){const errorFont=async()=>new TranslatedFont({loadedName:"g_font_error",font:new ErrorFont(`Font "${e}" is not available.`),dict:t});let s;if(t)t instanceof Ref&&(s=t);else{const t=a.get("Font");t&&(s=t.getRaw(e))}if(s){if(thi\ +s.type3FontRefs?.has(s))return errorFont();if(this.fontCache.has(s))return this.fontCache.get(s);try{t=this.xref.fetchIfRef(s)}catch(e){warn(`loadFont - lookup failed: "${e}".`)}}if(!(t instanceof Dict)){if(!this.options.ignoreErrors&&!this.parsingType3Font){warn(`Font "${e}" is not available.`);return errorFont()}warn(`Font "${e}" is not available -- attempting to fallback to a default font.`);t=i||PartialEvaluator.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontC\ +ache.get(t.cacheKey);const{promise:o,resolve:c}=Promise.withResolvers();let l;try{l=this.preEvaluateFont(t);l.cssFontInfo=n}catch(e){warn(`loadFont - preEvaluateFont failed: "${e}".`);return errorFont()}const{descriptor:h,hash:u}=l,d=s instanceof Ref;let f;if(u&&h instanceof Dict){const e=h.fontAliases||=Object.create(null);if(e[u]){const t=e[u].aliasRef;if(d&&t&&this.fontCache.has(t)){this.fontCache.putAlias(s,t);return this.fontCache.get(s)}}else e[u]={fontID:this.idFactory.createFontId()};d&&\ +(e[u].aliasRef=s);f=e[u].fontID}else f=this.idFactory.createFontId();assert(f?.startsWith("f"),\'The "fontID" must be (correctly) defined.\');if(d)this.fontCache.put(s,o);else{t.cacheKey=`cacheKey_${f}`;this.fontCache.put(t.cacheKey,o)}t.loadedName=`${this.idFactory.getDocId()}_${f}`;this.translateFont(l).then((async e=>{const i=new TranslatedFont({loadedName:t.loadedName,font:e,dict:t});if(e.isType3Font)try{await i.loadType3Data(this,a,r)}catch(e){throw new Error(`Type3 font load error: ${e}`)}c(\ +i)})).catch((e=>{warn(`loadFont - translateFont failed: "${e}".`);c(new TranslatedFont({loadedName:t.loadedName,font:new ErrorFont(e?.message),dict:t}))}));return o}buildPath(e,t,a){const{pathMinMax:r,pathBuffer:i}=a;switch(0|e){case Xe:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1],s=t[2],o=t[3],c=e+s,l=n+o;0===s||0===o?i.push(sa,e,n,oa,c,l,la):i.push(sa,e,n,oa,c,n,oa,c,l,oa,e,l,la);Util.rectBoundingBox(e,n,c,l,r);break}case Ee:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1];i.push(s\ +a,e,n);Util.pointBoundingBox(e,n,r);break}case Pe:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1];i.push(oa,e,n);Util.pointBoundingBox(e,n,r);break}case Le:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l,h,u]=t;a.currentPointX=h;a.currentPointY=u;i.push(ca,s,o,c,l,h,u);Util.bezierBoundingBox(e,n,s,o,c,l,h,u,r);break}case je:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l]=t;a.currentPointX=c;a.currentPointY=l;i.push(ca,e,n,s,o,c,l);Util.bezierBoundingBox(e,n,e,n,s,o,c,l,r);break}cas\ +e _e:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l]=t;a.currentPointX=c;a.currentPointY=l;i.push(ca,s,o,c,l,c,l);Util.bezierBoundingBox(e,n,s,o,c,l,c,l,r);break}case Ue:i.push(la)}}_getColorSpace(e,t,a){return ColorSpaceUtils.parse({cs:e,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:a,asyncIfNotCached:!0})}async _handleColorSpace(e){try{return await e}catch(e){if(e instanceof AbortException)retur\ +n null;if(this.options.ignoreErrors){warn(`_handleColorSpace - ignoring ColorSpace: "${e}".`);return null}throw e}}parseShading({shading:e,resources:t,localColorSpaceCache:a,localShadingPatternCache:r}){let i,n=r.get(e);if(n)return n;try{i=Pattern.parseShading(e,this.xref,t,this._pdfFunctionFactory,this.globalColorSpaceCache,a).getIR()}catch(t){if(t instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`parseShading - ignoring shading: "${t}".`);r.set(e,null);return null}throw\ + t}n=`pattern_${this.idFactory.createObjId()}`;this.parsingType3Font&&(n=`${this.idFactory.getDocId()}_type3_${n}`);r.set(e,n);this.parsingType3Font?this.handler.send("commonobj",[n,"Pattern",i]):this.handler.send("obj",[n,this.pageIndex,"Pattern",i]);return n}handleColorN(e,t,a,r,i,n,s,o,c,l){const h=a.pop();if(h instanceof Name){const u=i.getRaw(h.name),d=u instanceof Ref&&c.getByRef(u);if(d)try{const i=r.base?r.base.getRgbHex(a,0):null,n=getTilingPatternIR(d.operatorListIR,d.dict,i);e.addOp(t\ +,n);return}catch{}const f=this.xref.fetchIfRef(u);if(f){const i=f instanceof BaseStream?f.dict:f,h=i.get("PatternType");if(h===Rn){const o=r.base?r.base.getRgbHex(a,0):null;return this.handleTilingType(t,o,n,f,i,e,s,c)}if(h===Nn){const a=i.get("Shading"),r=this.parseShading({shading:a,resources:n,localColorSpaceCache:o,localShadingPatternCache:l});if(r){const a=lookupMatrix(i.getArray("Matrix"),null);e.addOp(t,["Shading",r,a])}return}throw new FormatError(`Unknown PatternType: ${h}`)}}throw new \ +FormatError(`Unknown PatternName: ${h}`)}_parseVisibilityExpression(e,t,a){if(++t>10){warn("Visibility expression is too deeply nested");return}const r=e.length,i=this.xref.fetchIfRef(e[0]);if(!(r<2)&&i instanceof Name){switch(i.name){case"And":case"Or":case"Not":a.push(i.name);break;default:warn(`Invalid operator ${i.name} in visibility expression`);return}for(let i=1;i<r;i++){const r=e[i],n=this.xref.fetchIfRef(r);if(Array.isArray(n)){const e=[];a.push(e);this._parseVisibilityExpression(n,t,e)\ +}else r instanceof Ref&&a.push(r.toString())}}else warn("Invalid visibility expression")}async parseMarkedContentProps(e,t){let a;if(e instanceof Name){a=t.get("Properties").get(e.name)}else{if(!(e instanceof Dict))throw new FormatError("Optional content properties malformed.");a=e}const r=a.get("Type")?.name;if("OCG"===r)return{type:r,id:a.objId};if("OCMD"===r){const e=a.get("VE");if(Array.isArray(e)){const t=[];this._parseVisibilityExpression(e,0,t);if(t.length>0)return{type:"OCMD",expression:\ +t}}const t=a.get("OCGs");if(Array.isArray(t)||t instanceof Dict){const e=[];if(Array.isArray(t))for(const a of t)e.push(a.toString());else e.push(t.objId);return{type:r,ids:e,policy:a.get("P")instanceof Name?a.get("P").name:null,expression:null}}if(t instanceof Ref)return{type:r,id:t.toString()}}return null}getOperatorList({stream:e,task:t,resources:a,operatorList:r,initialState:i=null,fallbackFontDict:n=null,prevRefs:s=null}){const o=e.dict?.objId,c=new RefSet(s);if(o){if(s?.has(o))throw new Er\ +ror(`getOperatorList - ignoring circular reference: ${o}`);c.put(o)}a||=Dict.empty;i||=new EvalState;if(!r)throw new Error(\'getOperatorList: missing "operatorList" parameter\');const l=this,h=this.xref,u=new LocalImageCache,d=new LocalColorSpaceCache,f=new LocalGStateCache,g=new LocalTilingPatternCache,p=new Map,m=a.get("XObject")||Dict.empty,b=a.get("Pattern")||Dict.empty,y=new StateManager(i),w=new EvaluatorPreprocessor(e,h,y),x=new TimeSlotManager;function closePendingRestoreOPS(e){for(let e=0\ +,t=w.savedStatesDepth;e<t;e++)r.addOp(Re,[])}return new Promise((function promiseBody(e,i){const next=function(t){Promise.all([t,r.ready]).then((function(){try{promiseBody(e,i)}catch(e){i(e)}}),i)};t.ensureNotTerminated();x.reset();const s={};let o,S,k,C,v,F;for(;!(o=x.check());){s.args=null;if(!w.read(s))break;let e=s.args,i=s.fn;switch(0|i){case Nt:F=e[0]instanceof Name;v=e[0].name;if(F){const t=u.getByName(v);if(t){addCachedImageOps(r,t);e=null;continue}}next(new Promise((function(e,i){if(!F)\ +throw new FormatError("XObject must be referred to by name.");let n=m.getRaw(v);if(n instanceof Ref){const t=u.getByRef(n)||l._regionalImageCache.getByRef(n)||l.globalImageCache.getData(n,l.pageIndex);if(t){addCachedImageOps(r,t);e();return}n=h.fetch(n)}if(!(n instanceof BaseStream))throw new FormatError("XObject should be a stream");const s=n.dict.get("Subtype");if(!(s instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==s.name)if("Image"!==s.name){if("PS"!==\ +s.name)throw new FormatError(`Unhandled XObject subtype ${s.name}`);info("Ignored XObject subtype PS");e()}else l.buildPaintImageXObject({resources:a,image:n,operatorList:r,cacheKey:v,localImageCache:u,localColorSpaceCache:d}).then(e,i);else{y.save();l.buildFormXObject(a,n,null,r,t,y.state.clone({newPath:!0}),d,c).then((function(){y.restore();e()}),i)}})).catch((function(e){if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring XObject: "${e}".`)}}\ +)));return;case nt:const s=e[1];next(l.handleSetFont(a,e,null,r,t,y.state,n).then((function(e){r.addDependency(e);r.addOp(nt,[e,s])})));return;case Rt:const o=e[0].cacheKey;if(o){const t=u.getByName(o);if(t){addCachedImageOps(r,t);e=null;continue}}next(l.buildPaintImageXObject({resources:a,image:e[0],isInline:!0,operatorList:r,cacheKey:o,localImageCache:u,localColorSpaceCache:d}));return;case dt:if(!y.state.font){l.ensureStateFont(y.state);continue}e[0]=l.handleText(e[0],y.state);break;case ft:i\ +f(!y.state.font){l.ensureStateFont(y.state);continue}const w=[],x=y.state;for(const t of e[0])"string"==typeof t?w.push(...l.handleText(t,x)):"number"==typeof t&&w.push(t);e[0]=w;i=dt;break;case gt:if(!y.state.font){l.ensureStateFont(y.state);continue}r.addOp(ut);e[0]=l.handleText(e[0],y.state);i=dt;break;case pt:if(!y.state.font){l.ensureStateFont(y.state);continue}r.addOp(ut);r.addOp(at,[e.shift()]);r.addOp(tt,[e.shift()]);e[0]=l.handleText(e[0],y.state);i=dt;break;case st:y.state.textRenderin\ +gMode=e[0];break;case wt:{const t=l._getColorSpace(e[0],a,d);if(t instanceof ColorSpace){y.state.fillColorSpace=t;continue}next(l._handleColorSpace(t).then((e=>{y.state.fillColorSpace=e||ColorSpaceUtils.gray})));return}case yt:{const t=l._getColorSpace(e[0],a,d);if(t instanceof ColorSpace){y.state.strokeColorSpace=t;continue}next(l._handleColorSpace(t).then((e=>{y.state.strokeColorSpace=e||ColorSpaceUtils.gray})));return}case At:C=y.state.fillColorSpace;e=[C.getRgbHex(e,0)];i=It;break;case xt:C=\ +y.state.strokeColorSpace;e=[C.getRgbHex(e,0)];i=Ft;break;case vt:y.state.fillColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=It;break;case Ct:y.state.strokeColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=Ft;break;case Ot:y.state.fillColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];i=It;break;case Tt:y.state.strokeColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];i=Ft;break;case It:y.state.fillColorSp\ +ace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case Ft:y.state.strokeColorSpace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case kt:C=y.state.patternFillColorSpace;if(!C){if(isNumberArray(e,null)){e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=It;break}e=[];i=ia;break}if("Pattern"===C.name){next(l.handleColorN(r,kt,e,C,b,a,t,d,g,p));return}e=[C.getRgbHex(e,0)];i=It;break;case St:C=y.state.patternStrokeColorSpace;if(!C){if(isNumberArray(e,null)){e=[ColorSpace\ +Utils.gray.getRgbHex(e,0)];i=Ft;break}e=[];i=ra;break}if("Pattern"===C.name){next(l.handleColorN(r,St,e,C,b,a,t,d,g,p));return}e=[C.getRgbHex(e,0)];i=Ft;break;case Mt:let T;try{const t=a.get("Shading");if(!t)throw new FormatError("No shading resource found");T=t.get(e[0].name);if(!T)throw new FormatError("No shading object found")}catch(e){if(e instanceof AbortException)continue;if(l.options.ignoreErrors){warn(`getOperatorList - ignoring Shading: "${e}".`);continue}throw e}const O=l.parseShading\ +({shading:T,resources:a,localColorSpaceCache:d,localShadingPatternCache:p});if(!O)continue;e=[O];i=Mt;break;case De:F=e[0]instanceof Name;v=e[0].name;if(F){const t=f.getByName(v);if(t){t.length>0&&r.addOp(De,[t]);e=null;continue}}next(new Promise((function(e,i){if(!F)throw new FormatError("GState must be referred to by name.");const n=a.get("ExtGState");if(!(n instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const s=n.get(v);if(!(s instanceof Dict))throw new FormatErro\ +r("GState should be a dictionary.");l.setGState({resources:a,gState:s,operatorList:r,cacheKey:v,task:t,stateManager:y,localGStateCache:f,localColorSpaceCache:d,seenRefs:c}).then(e,i)})).catch((function(e){if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring ExtGState: "${e}".`)}})));return;case Ce:{const[t]=e;if("number"!=typeof t){warn(`Invalid setLineWidth: ${t}`);continue}e[0]=Math.abs(t);break}case Ee:case Pe:case Le:case je:case _e:case Ue:c\ +ase Xe:l.buildPath(i,e,y.state);continue;case qe:case He:case We:case ze:case $e:case Ge:case Ve:case Ke:case Je:{const{state:{pathBuffer:e,pathMinMax:t}}=y;i!==He&&i!==Ve&&i!==Ke||e.push(la);if(0===e.length)r.addOp(aa,[i,[null],null]);else{r.addOp(aa,[i,[new Float32Array(e)],t.slice()]);e.length=0;t.set([1/0,1/0,-1/0,-1/0],0)}continue}case ht:r.addOp(i,[new Float32Array(e)]);continue;case Et:case Pt:case Ut:case Xt:continue;case jt:if(!(e[0]instanceof Name)){warn(`Expected name for beginMarkedC\ +ontentProps arg0=${e[0]}`);r.addOp(jt,["OC",null]);continue}if("OC"===e[0].name){next(l.parseMarkedContentProps(e[1],a).then((e=>{r.addOp(jt,["OC",e])})).catch((e=>{if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring beginMarkedContentProps: "${e}".`);r.addOp(jt,["OC",null])}})));return}e=[e[0].name,e[1]instanceof Dict?e[1].get("MCID"):null];break;default:if(null!==e){for(S=0,k=e.length;S<k&&!(e[S]instanceof Dict);S++);if(S<k){warn("getOperatorL\ +ist - ignoring operator: "+i);continue}}}r.addOp(i,e)}if(o)next(En);else{closePendingRestoreOPS();e()}})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring errors during "${t.name}" task: "${e}".`);closePendingRestoreOPS()}}))}getTextContent({stream:e,task:a,resources:r,stateManager:i=null,includeMarkedContent:n=!1,sink:s,seenStyles:o=new Set,viewBox:c,lang:l=null,markedContentData:h=null,disableNormalization:u=!1,keepWhiteSpace:\ +d=!1,prevRefs:f=null,intersector:g=null}){const p=e.dict?.objId,m=new RefSet(f);if(p){if(f?.has(p))throw new Error(`getTextContent - ignoring circular reference: ${p}`);m.put(p)}r||=Dict.empty;i||=new StateManager(new TextState);n&&(h||={level:0});const b={items:[],styles:Object.create(null),lang:l},y={initialized:!1,str:[],totalWidth:0,totalHeight:0,width:0,height:0,vertical:!1,prevTransform:null,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,not\ +ASpace:-1/0,transform:null,fontName:null,hasEOL:!1},w=[" "," "];let x=0;function saveLastChar(e){const t=(x+1)%2,a=" "!==w[x]&&" "===w[t];w[x]=e;x=t;return!d&&a}function shouldAddWhitepsace(){return!d&&" "!==w[x]&&" "===w[(x+1)%2]}function resetLastChars(){w[0]=w[1]=" ";x=0}const S=this,k=this.xref,C=[];let v=null;const F=new LocalImageCache,T=new LocalGStateCache,O=new EvaluatorPreprocessor(e,k,i);let M;function pushWhitespace({width:e=0,height:t=0,transform:a=y.prevTransform,fontName:r=y.fontN\ +ame}){g?.addExtraChar(" ");b.items.push({str:" ",dir:"ltr",width:e,height:t,transform:a,fontName:r,hasEOL:!1})}function getCurrentTextTransform(){const e=M.font,a=[M.fontSize*M.textHScale,0,0,M.fontSize,0,M.textRise];if(e.isType3Font&&(M.fontSize<=1||e.isCharBBox)&&!isArrayEqual(M.fontMatrix,t)){const t=e.bbox[3]-e.bbox[1];t>0&&(a[3]*=t*M.fontMatrix[3])}return Util.transform(M.ctm,Util.transform(M.textMatrix,a))}function ensureTextContentItem(){if(y.initialized)return y;const{font:e,loadedName:t\ +}=M;if(!o.has(t)){o.add(t);b.styles[t]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:e.vertical};if(S.options.fontExtraProperties&&e.systemFontInfo){const a=b.styles[t];a.fontSubstitution=e.systemFontInfo.css;a.fontSubstitutionLoadedName=e.systemFontInfo.loadedName}}y.fontName=t;const a=y.transform=getCurrentTextTransform();if(e.vertical){y.width=y.totalWidth=Math.hypot(a[0],a[1]);y.height=y.totalHeight=0;y.vertical=!0}else{y.width=y.totalWidth=0;y.height=y.totalHeight=Ma\ +th.hypot(a[2],a[3]);y.vertical=!1}const r=Math.hypot(M.textLineMatrix[0],M.textLineMatrix[1]),i=Math.hypot(M.ctm[0],M.ctm[1]);y.textAdvanceScale=i*r;const{fontSize:n}=M;y.trackingSpaceMin=.102*n;y.notASpace=.03*n;y.negativeSpaceMax=-.2*n;y.spaceInFlowMin=.102*n;y.spaceInFlowMax=.6*n;y.hasEOL=!1;y.initialized=!0;return y}function updateAdvanceScale(){if(!y.initialized)return;const e=Math.hypot(M.textLineMatrix[0],M.textLineMatrix[1]),t=Math.hypot(M.ctm[0],M.ctm[1])*e;if(t!==y.textAdvanceScale){if\ +(y.vertical){y.totalHeight+=y.height*y.textAdvanceScale;y.height=0}else{y.totalWidth+=y.width*y.textAdvanceScale;y.width=0}y.textAdvanceScale=t}}function runBidiTransform(e){let t=e.str.join("");u||(t=function normalizeUnicode(e){if(!ma){ma=/([\\u00a0\\u00b5\\u037e\\u0eb3\\u2000-\\u200a\\u202f\\u2126\\ufb00-\\ufb04\\ufb06\\ufb20-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufba1\\ufba4-\\ufba9\\ufbae-\\ufbb1\\ufbd3-\\ufbdc\\ufbde-\\ufbe7\\ufbea-\\ufbf8\\ufbfc-\\ufbfd\\ufc00-\\ufc5d\\ufc64-\\ufcf1\\ufcf5-\\ufd3d\ +\\ufd88\\ufdf4\\ufdfa-\\ufdfb\\ufe71\\ufe77\\ufe79\\ufe7b\\ufe7d]+)|(\\ufb05+)/gu;ba=new Map([["ſt","ſt"]])}return e.replaceAll(ma,((e,t,a)=>t?t.normalize("NFKC"):ba.get(a)))}(t));const a=bidi(t,-1,e.vertical);return{str:a.str,dir:a.dir,width:Math.abs(e.totalWidth),height:Math.abs(e.totalHeight),transform:e.transform,fontName:e.fontName,hasEOL:e.hasEOL}}async function handleSetFont(e,i){const n=await S.loadFont(e,i,r,a);M.loadedName=n.loadedName;M.font=n.font;M.fontMatrix=n.font.fontMatrix||t}function appl\ +yInverseRotation(e,t,a){const r=Math.hypot(a[0],a[1]);return[(a[0]*e+a[1]*t)/r,(a[2]*e+a[3]*t)/r]}function compareWithLastPosition(e){const t=getCurrentTextTransform();let a=t[4],r=t[5];if(M.font?.vertical){if(a<c[0]||a>c[2]||r+e<c[1]||r>c[3])return!1}else if(a+e<c[0]||a>c[2]||r<c[1]||r>c[3])return!1;if(!M.font||!y.prevTransform)return!0;let i=y.prevTransform[4],n=y.prevTransform[5];if(i===a&&n===r)return!0;let s=-1;t[0]&&0===t[1]&&0===t[2]?s=t[0]>0?0:180:t[1]&&0===t[0]&&0===t[3]&&(s=t[1]>0?90:2\ +70);switch(s){case 0:break;case 90:[a,r]=[r,a];[i,n]=[n,i];break;case 180:[a,r,i,n]=[-a,-r,-i,-n];break;case 270:[a,r]=[-r,-a];[i,n]=[-n,-i];break;default:[a,r]=applyInverseRotation(a,r,t);[i,n]=applyInverseRotation(i,n,y.prevTransform)}if(M.font.vertical){const e=(n-r)/y.textAdvanceScale,t=a-i,s=Math.sign(y.height);if(e<s*y.negativeSpaceMax){if(Math.abs(t)>.5*y.width){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(t)>y.width){appendEOL();return!0}e<=s*y.notASp\ +ace&&resetLastChars();if(e<=s*y.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({height:Math.abs(e)})}else y.height+=e;else if(!addFakeSpaces(e,y.prevTransform,s))if(0===y.str.length){resetLastChars();pushWhitespace({height:Math.abs(e)})}else y.height+=e;Math.abs(t)>.25*y.width&&flushTextContentItem();return!0}const o=(a-i)/y.textAdvanceScale,l=r-n,h=Math.sign(y.width);if(o<h*y.negativeSpaceMax){if(Math.abs(l)>.5*y.height){appendEOL();return!0}re\ +setLastChars();flushTextContentItem();return!0}if(Math.abs(l)>y.height){appendEOL();return!0}o<=h*y.notASpace&&resetLastChars();if(o<=h*y.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({width:Math.abs(o)})}else y.width+=o;else if(!addFakeSpaces(o,y.prevTransform,h))if(0===y.str.length){resetLastChars();pushWhitespace({width:Math.abs(o)})}else y.width+=o;Math.abs(l)>.25*y.height&&flushTextContentItem();return!0}function buildTextContentItem({char\ +s:e,extraSpacing:t}){const a=M.font;if(!e){const e=M.charSpacing+t;e&&(a.vertical?M.translateTextMatrix(0,-e):M.translateTextMatrix(e*M.textHScale,0));d&&compareWithLastPosition(0);return}const r=a.charsToGlyphs(e),i=M.fontMatrix[0]*M.fontSize;for(let e=0,n=r.length;e<n;e++){const s=r[e],{category:o}=s;if(o.isInvisibleFormatMark)continue;let c=M.charSpacing+(e+1===n?t:0),l=s.width;a.vertical&&(l=s.vmetric?s.vmetric[0]:-l);let h=l*i;if(!d&&o.isWhitespace){if(a.vertical){c+=-h+M.wordSpacing;M.tran\ +slateTextMatrix(0,-c)}else{c+=h+M.wordSpacing;M.translateTextMatrix(c*M.textHScale,0)}saveLastChar(" ");continue}if(!o.isZeroWidthDiacritic&&!compareWithLastPosition(h)){a.vertical?M.translateTextMatrix(0,h):M.translateTextMatrix(h*M.textHScale,0);continue}const u=ensureTextContentItem();o.isZeroWidthDiacritic&&(h=0);if(a.vertical){g?.addGlyph(getCurrentTextTransform(),0,h,s.unicode);M.translateTextMatrix(0,h);h=Math.abs(h);u.height+=h}else{h*=M.textHScale;g?.addGlyph(getCurrentTextTransform(),h\ +,0,s.unicode);M.translateTextMatrix(h,0);u.width+=h}h&&(u.prevTransform=getCurrentTextTransform());const f=s.unicode;if(saveLastChar(f)){u.str.push(" ");g?.addExtraChar(" ")}g||u.str.push(f);c&&(a.vertical?M.translateTextMatrix(0,-c):M.translateTextMatrix(c*M.textHScale,0))}}function appendEOL(){g?.addExtraChar("\\n");resetLastChars();if(y.initialized){y.hasEOL=!0;flushTextContentItem()}else b.items.push({str:"",dir:"ltr",width:0,height:0,transform:getCurrentTextTransform(),fontName:M.loadedName,\ +hasEOL:!0})}function addFakeSpaces(e,t,a){if(a*y.spaceInFlowMin<=e&&e<=a*y.spaceInFlowMax){if(y.initialized){resetLastChars();y.str.push(" ");g?.addExtraChar(" ")}return!1}const r=y.fontName;let i=0;if(y.vertical){i=e;e=0}flushTextContentItem();resetLastChars();pushWhitespace({width:Math.abs(e),height:Math.abs(i),transform:t||getCurrentTextTransform(),fontName:r});return!0}function flushTextContentItem(){if(y.initialized&&y.str){y.vertical?y.totalHeight+=y.height*y.textAdvanceScale:y.totalWidth+\ +=y.width*y.textAdvanceScale;b.items.push(runBidiTransform(y));y.initialized=!1;y.str.length=0}}function enqueueChunk(e=!1){const t=b.items.length;if(0!==t&&!(e&&t<10)){s?.enqueue(b,t);b.items=[];b.styles=Object.create(null)}}const D=new TimeSlotManager;return new Promise((function promiseBody(e,t){const next=function(a){enqueueChunk(!0);Promise.all([a,s?.ready]).then((function(){try{promiseBody(e,t)}catch(e){t(e)}}),t)};a.ensureNotTerminated();D.reset();const f={};let g,p,y,w=[];for(;!(g=D.check\ +());){w.length=0;f.args=w;if(!O.read(f))break;const e=M;M=i.state;const t=f.fn;w=f.args;switch(0|t){case nt:const t=w[0].name,f=w[1];if(M.font&&t===M.fontName&&f===M.fontSize)break;flushTextContentItem();M.fontName=t;M.fontSize=f;next(handleSetFont(t,null));return;case ot:M.textRise=w[0];break;case rt:M.textHScale=w[0]/100;break;case it:M.leading=w[0];break;case ct:M.translateTextLineMatrix(w[0],w[1]);M.textMatrix=M.textLineMatrix.slice();break;case lt:M.leading=-w[1];M.translateTextLineMatrix(w\ +[0],w[1]);M.textMatrix=M.textLineMatrix.slice();break;case ut:M.carriageReturn();break;case ht:M.setTextMatrix(w[0],w[1],w[2],w[3],w[4],w[5]);M.setTextLineMatrix(w[0],w[1],w[2],w[3],w[4],w[5]);updateAdvanceScale();break;case tt:M.charSpacing=w[0];break;case at:M.wordSpacing=w[0];break;case Qe:M.textMatrix=Fa.slice();M.textLineMatrix=Fa.slice();break;case ft:if(!i.state.font){S.ensureStateFont(i.state);continue}const g=(M.font.vertical?1:-1)*M.fontSize/1e3,x=w[0];for(let e=0,t=x.length;e<t;e++){c\ +onst t=x[e];if("string"==typeof t)C.push(t);else if("number"==typeof t&&0!==t){const e=C.join("");C.length=0;buildTextContentItem({chars:e,extraSpacing:t*g})}}if(C.length>0){const e=C.join("");C.length=0;buildTextContentItem({chars:e,extraSpacing:0})}break;case dt:if(!i.state.font){S.ensureStateFont(i.state);continue}buildTextContentItem({chars:w[0],extraSpacing:0});break;case gt:if(!i.state.font){S.ensureStateFont(i.state);continue}M.carriageReturn();buildTextContentItem({chars:w[0],extraSpacin\ +g:0});break;case pt:if(!i.state.font){S.ensureStateFont(i.state);continue}M.wordSpacing=w[0];M.charSpacing=w[1];M.carriageReturn();buildTextContentItem({chars:w[2],extraSpacing:0});break;case Nt:flushTextContentItem();v??=r.get("XObject")||Dict.empty;y=w[0]instanceof Name;p=w[0].name;if(y&&F.getByName(p))break;next(new Promise((function(e,t){if(!y)throw new FormatError("XObject must be referred to by name.");let f=v.getRaw(p);if(f instanceof Ref){if(F.getByRef(f)){e();return}if(S.globalImageCach\ +e.getData(f,S.pageIndex)){e();return}f=k.fetch(f)}if(!(f instanceof BaseStream))throw new FormatError("XObject should be a stream");const{dict:g}=f,b=g.get("Subtype");if(!(b instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==b.name){F.set(p,g.objId,!0);e();return}const w=i.state.clone(),x=new StateManager(w),C=lookupMatrix(g.getArray("Matrix"),null);C&&x.transform(C);const T=g.get("Resources");enqueueChunk();const O={enqueueInvoked:!1,enqueue(e,t){this.enque\ +ueInvoked=!0;s.enqueue(e,t)},get desiredSize(){return s.desiredSize??0},get ready(){return s.ready}};S.getTextContent({stream:f,task:a,resources:T instanceof Dict?T:r,stateManager:x,includeMarkedContent:n,sink:s&&O,seenStyles:o,viewBox:c,lang:l,markedContentData:h,disableNormalization:u,keepWhiteSpace:d,prevRefs:m}).then((function(){O.enqueueInvoked||F.set(p,g.objId,!0);e()}),t)})).catch((function(e){if(!(e instanceof AbortException)){if(!S.options.ignoreErrors)throw e;warn(`getTextContent - ign\ +oring XObject: "${e}".`)}})));return;case De:y=w[0]instanceof Name;p=w[0].name;if(y&&T.getByName(p))break;next(new Promise((function(e,t){if(!y)throw new FormatError("GState must be referred to by name.");const a=r.get("ExtGState");if(!(a instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const i=a.get(p);if(!(i instanceof Dict))throw new FormatError("GState should be a dictionary.");const n=i.get("Font");if(n){flushTextContentItem();M.fontName=null;M.fontSize=n[1];handl\ +eSetFont(null,n[0]).then(e,t)}else{T.set(p,i.objId,!0);e()}})).catch((function(e){if(!(e instanceof AbortException)){if(!S.options.ignoreErrors)throw e;warn(`getTextContent - ignoring ExtGState: "${e}".`)}})));return;case Lt:flushTextContentItem();if(n){h.level++;b.items.push({type:"beginMarkedContent",tag:w[0]instanceof Name?w[0].name:null})}break;case jt:flushTextContentItem();if(n){h.level++;let e=null;w[1]instanceof Dict&&(e=w[1].get("MCID"));b.items.push({type:"beginMarkedContentProps",id:N\ +umber.isInteger(e)?`${S.idFactory.getPageObjId()}_mc${e}`:null,tag:w[0]instanceof Name?w[0].name:null})}break;case _t:flushTextContentItem();if(n){if(0===h.level)break;h.level--;b.items.push({type:"endMarkedContent"})}break;case Re:!e||e.font===M.font&&e.fontSize===M.fontSize&&e.fontName===M.fontName||flushTextContentItem()}if(b.items.length>=(s?.desiredSize??1)){g=!0;break}}if(g)next(En);else{flushTextContentItem();enqueueChunk();e()}})).catch((e=>{if(!(e instanceof AbortException)){if(!this.op\ +tions.ignoreErrors)throw e;warn(`getTextContent - ignoring errors during "${a.name}" task: "${e}".`);flushTextContentItem();enqueueChunk()}}))}async extractDataStructures(e,t){const a=this.xref;let r;const i=this.readToUnicode(t.toUnicode);if(t.composite){const a=e.get("CIDSystemInfo");a instanceof Dict&&(t.cidSystemInfo={registry:stringToPDFString(a.get("Registry")),ordering:stringToPDFString(a.get("Ordering")),supplement:a.get("Supplement")});try{const t=e.get("CIDToGIDMap");t instanceof BaseS\ +tream&&(r=t.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;warn(`extractDataStructures - ignoring CIDToGIDMap data: "${e}".`)}}const n=[];let s,o=null;if(e.has("Encoding")){s=e.get("Encoding");if(s instanceof Dict){o=s.get("BaseEncoding");o=o instanceof Name?o.name:null;if(s.has("Differences")){const e=s.get("Differences");let t=0;for(const r of e){const e=a.fetchIfRef(r);if("number"==typeof e)t=e;else{if(!(e instanceof Name))throw new FormatError(`Invalid entry in \'Differences\' arra\ +y: ${e}`);n[t++]=e.name}}}}else if(s instanceof Name)o=s.name;else{const e="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new FormatError(e);warn(e)}"MacRomanEncoding"!==o&&"MacExpertEncoding"!==o&&"WinAnsiEncoding"!==o&&(o=null)}const c=!t.file||t.isInternalFont,l=ei()[t.name];o&&c&&l&&(o=null);if(o)t.defaultEncoding=getEncoding(o);else{const e=!!(t.flags&Pr),a=!!(t.flags&Lr);s=Ar;"TrueType"!==t.type||a||(s=kr);if(e||l){s=Sr;c&&(/Symbol/i.test(t.name)?s=Cr:/Dingbats/i.t\ +est(t.name)?s=vr:/Wingdings/i.test(t.name)&&(s=kr))}t.defaultEncoding=s}t.differences=n;t.baseEncodingName=o;t.hasEncoding=!!o||n.length>0;t.dict=e;t.toUnicode=await i;const h=await this.buildToUnicode(t);t.toUnicode=h;r&&(t.cidToGidMap=this.readCidToGidMap(r,h));return t}_simpleFontToUnicode(e,t=!1){assert(!e.composite,"Must be a simple font.");const a=[],r=e.defaultEncoding.slice(),i=e.baseEncodingName,n=e.differences;for(const e in n){const t=n[e];".notdef"!==t&&(r[e]=t)}const s=Fr();for(cons\ +t n in r){let o=r[n];if(""===o)continue;let c=s[o];if(void 0!==c){a[n]=String.fromCharCode(c);continue}let l=0;switch(o[0]){case"G":3===o.length&&(l=parseInt(o.substring(1),16));break;case"g":5===o.length&&(l=parseInt(o.substring(1),16));break;case"C":case"c":if(o.length>=3&&o.length<=4){const a=o.substring(1);if(t){l=parseInt(a,16);break}l=+a;if(Number.isNaN(l)&&Number.isInteger(parseInt(a,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":c=getUnicodeForGlyph(o,s);-1!==c&&(l=c);break;de\ +fault:switch(o){case"f_h":case"f_t":case"T_h":a[n]=o.replaceAll("_","");continue}}if(l>0&&l<=1114111&&Number.isInteger(l)){if(i&&l===+n){const e=getEncoding(i);if(e&&(o=e[n])){a[n]=String.fromCharCode(s[o]);continue}}a[n]=String.fromCodePoint(l)}}return a}async buildToUnicode(e){e.hasIncludedToUnicodeMap=e.toUnicode?.length>0;if(e.hasIncludedToUnicodeMap){!e.composite&&e.hasEncoding&&(e.fallbackToUnicode=this._simpleFontToUnicode(e));return e.toUnicode}if(!e.composite)return new ToUnicodeMap(thi\ +s._simpleFontToUnicode(e));if(e.composite&&(e.cMap.builtInCMap&&!(e.cMap instanceof IdentityCMap)||"Adobe"===e.cidSystemInfo?.registry&&("GB1"===e.cidSystemInfo.ordering||"CNS1"===e.cidSystemInfo.ordering||"Japan1"===e.cidSystemInfo.ordering||"Korea1"===e.cidSystemInfo.ordering))){const{registry:t,ordering:a}=e.cidSystemInfo,r=Name.get(`${t}-${a}-UCS2`),i=await CMapFactory.create({encoding:r,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),n=[],s=[];e.cMap.forEach((function(e,t){if(t>\ +65535)throw new FormatError("Max size of CID is 65,535");const a=i.lookup(t);if(a){s.length=0;for(let e=0,t=a.length;e<t;e+=2)s.push((a.charCodeAt(e)<<8)+a.charCodeAt(e+1));n[e]=String.fromCharCode(...s)}}));return new ToUnicodeMap(n)}return new IdentityToUnicodeMap(e.firstChar,e.lastChar)}async readToUnicode(e){if(!e)return null;if(e instanceof Name){const t=await CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});return t instanceof IdentityCMap?new Iden\ +tityToUnicodeMap(0,65535):new ToUnicodeMap(t.getMap())}if(e instanceof BaseStream)try{const t=await CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});if(t instanceof IdentityCMap)return new IdentityToUnicodeMap(0,65535);const a=new Array(t.length);t.forEach((function(e,t){if("number"==typeof t){a[e]=String.fromCodePoint(t);return}t.length%2!=0&&(t="\\0"+t);const r=[];for(let e=0;e<t.length;e+=2){const a=t.charCodeAt(e)<<8|t.charCodeAt(e+1);if(55296!=(63488\ +&a)){r.push(a);continue}e+=2;const i=t.charCodeAt(e)<<8|t.charCodeAt(e+1);r.push(((1023&a)<<10)+(1023&i)+65536)}a[e]=String.fromCodePoint(...r)}));return new ToUnicodeMap(a)}catch(e){if(e instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`readToUnicode - ignoring ToUnicode data: "${e}".`);return null}throw e}return null}readCidToGidMap(e,t){const a=[];for(let r=0,i=e.length;r<i;r++){const i=e[r++]<<8|e[r],n=r>>1;(0!==i||t.has(n))&&(a[n]=i)}return a}extractWidths(e,t,a){con\ +st r=this.xref;let i=[],n=0;const s=[];let o;if(a.composite){const t=e.get("DW");n="number"==typeof t?Math.ceil(t):1e3;const c=e.get("W");if(Array.isArray(c))for(let e=0,t=c.length;e<t;e++){let t=r.fetchIfRef(c[e++]);if(!Number.isInteger(t))break;const a=r.fetchIfRef(c[e]);if(Array.isArray(a))for(const e of a){const a=r.fetchIfRef(e);"number"==typeof a&&(i[t]=a);t++}else{if(!Number.isInteger(a))break;{const n=r.fetchIfRef(c[++e]);if("number"!=typeof n)continue;for(let e=t;e<=a;e++)i[e]=n}}}if(a.\ +vertical){const t=e.getArray("DW2");let a=isNumberArray(t,2)?t:[880,-1e3];o=[a[1],.5*n,a[0]];a=e.get("W2");if(Array.isArray(a))for(let e=0,t=a.length;e<t;e++){let t=r.fetchIfRef(a[e++]);if(!Number.isInteger(t))break;const i=r.fetchIfRef(a[e]);if(Array.isArray(i))for(let e=0,a=i.length;e<a;e++){const a=[r.fetchIfRef(i[e++]),r.fetchIfRef(i[e++]),r.fetchIfRef(i[e])];isNumberArray(a,null)&&(s[t]=a);t++}else{if(!Number.isInteger(i))break;{const n=[r.fetchIfRef(a[++e]),r.fetchIfRef(a[++e]),r.fetchIfRe\ +f(a[++e])];if(!isNumberArray(n,null))continue;for(let e=t;e<=i;e++)s[e]=n}}}}}else{const s=e.get("Widths");if(Array.isArray(s)){let e=a.firstChar;for(const t of s){const a=r.fetchIfRef(t);"number"==typeof a&&(i[e]=a);e++}const o=t.get("MissingWidth");n="number"==typeof o?o:0}else{const t=e.get("BaseFont");if(t instanceof Name){const e=this.getBaseFontMetrics(t.name);i=this.buildCharCodeToWidth(e.widths,a);n=e.defaultWidth}}}let c=!0,l=n;for(const e in i){const t=i[e];if(t)if(l){if(l!==t){c=!1;br\ +eak}}else l=t}c?a.flags|=Nr:a.flags&=~Nr;a.defaultWidth=n;a.widths=i;a.defaultVMetrics=o;a.vmetrics=s}isSerifFont(e){const t=e.split("-",1)[0];return t in Qr()||/serif/gi.test(t)}getBaseFontMetrics(e){let t=0,a=Object.create(null),r=!1;let i=Jr()[e]||e;const n=ii();i in n||(i=this.isSerifFont(e)?"Times-Roman":"Helvetica");const s=n[i];if("number"==typeof s){t=s;r=!0}else a=s();return{defaultWidth:t,monospace:r,widths:a}}buildCharCodeToWidth(e,t){const a=Object.create(null),r=t.differences,i=t.de\ +faultEncoding;for(let t=0;t<256;t++)t in r&&e[r[t]]?a[t]=e[r[t]]:t in i&&e[i[t]]&&(a[t]=e[i[t]]);return a}preEvaluateFont(e){const t=e;let a=e.get("Subtype");if(!(a instanceof Name))throw new FormatError("invalid font Subtype");let r,i=!1;if("Type0"===a.name){const t=e.get("DescendantFonts");if(!t)throw new FormatError("Descendant fonts are not specified");if(!((e=Array.isArray(t)?this.xref.fetchIfRef(t[0]):t)instanceof Dict))throw new FormatError("Descendant font is not a dictionary.");a=e.get(\ +"Subtype");if(!(a instanceof Name))throw new FormatError("invalid font Subtype");i=!0}let n=e.get("FirstChar");Number.isInteger(n)||(n=0);let s=e.get("LastChar");Number.isInteger(s)||(s=i?65535:255);const o=e.get("FontDescriptor"),c=e.get("ToUnicode")||t.get("ToUnicode");if(o){r=new MurmurHash3_64;const a=t.getRaw("Encoding");if(a instanceof Name)r.update(a.name);else if(a instanceof Ref)r.update(a.toString());else if(a instanceof Dict)for(const e of a.getRawValues())if(e instanceof Name)r.updat\ +e(e.name);else if(e instanceof Ref)r.update(e.toString());else if(Array.isArray(e)){const t=e.length,a=new Array(t);for(let r=0;r<t;r++){const t=e[r];t instanceof Name?a[r]=t.name:("number"==typeof t||t instanceof Ref)&&(a[r]=t.toString())}r.update(a.join())}r.update(`${n}-${s}`);if(c instanceof BaseStream){const e=c.str||c,t=e.buffer?new Uint8Array(e.buffer.buffer,0,e.bufferLength):new Uint8Array(e.bytes.buffer,e.start,e.end-e.start);r.update(t)}else c instanceof Name&&r.update(c.name);const o=\ +e.get("Widths")||t.get("Widths");if(Array.isArray(o)){const e=[];for(const t of o)("number"==typeof t||t instanceof Ref)&&e.push(t.toString());r.update(e.join())}if(i){r.update("compositeFont");const a=e.get("W")||t.get("W");if(Array.isArray(a)){const e=[];for(const t of a)if("number"==typeof t||t instanceof Ref)e.push(t.toString());else if(Array.isArray(t)){const a=[];for(const e of t)("number"==typeof e||e instanceof Ref)&&a.push(e.toString());e.push(`[${a.join()}]`)}r.update(e.join())}const i\ +=e.getRaw("CIDToGIDMap")||t.getRaw("CIDToGIDMap");i instanceof Name?r.update(i.name):i instanceof Ref?r.update(i.toString()):i instanceof BaseStream&&r.update(i.peekBytes())}}return{descriptor:o,dict:e,baseDict:t,composite:i,type:a.name,firstChar:n,lastChar:s,toUnicode:c,hash:r?r.hexdigest():""}}async translateFont({descriptor:e,dict:a,baseDict:r,composite:i,type:n,firstChar:s,lastChar:o,toUnicode:c,cssFontInfo:l}){const h="Type3"===n;if(!e){if(!h){let e=a.get("BaseFont");if(!(e instanceof Name)\ +)throw new FormatError("Base font is not specified");e=e.name.replaceAll(/[,_]/g,"-");const t=this.getBaseFontMetrics(e),i=e.split("-",1)[0],l=(this.isSerifFont(i)?Er:0)|(t.monospace?Nr:0)|(ei()[i]?Pr:Lr),u={type:n,name:e,loadedName:r.loadedName,systemFontInfo:null,widths:t.widths,defaultWidth:t.defaultWidth,isSimulatedFlags:!0,flags:l,firstChar:s,lastChar:o,toUnicode:c,xHeight:0,capHeight:0,italicAngle:0,isType3Font:h},d=a.get("Widths"),f=getStandardFontName(e);let g=null;if(f){g=await this.fet\ +chStandardFontData(f);u.isInternalFont=!!g}!u.isInternalFont&&this.options.useSystemFonts&&(u.systemFontInfo=getFontSubstitution(this.systemFontCache,this.idFactory,this.options.standardFontDataUrl,e,f,n));const p=await this.extractDataStructures(a,u);if(Array.isArray(d)){const e=[];let t=s;for(const a of d){const r=this.xref.fetchIfRef(a);"number"==typeof r&&(e[t]=r);t++}p.widths=e}else p.widths=this.buildCharCodeToWidth(t.widths,p);return new Font(e,g,p,this.options)}e=Dict.empty}let u=e.get("\ +FontName"),d=a.get("BaseFont");"string"==typeof u&&(u=Name.get(u));"string"==typeof d&&(d=Name.get(d));const f=u?.name,g=d?.name;if(h)f||(u=Name.get(n));else if(f!==g){info(`The FontDescriptor\'s FontName is "${f}" but should be the same as the Font\'s BaseFont "${g}".`);f&&g&&(g.startsWith(f)||!isKnownFontName(f)&&isKnownFontName(g))&&(u=null);u||=d}if(!(u instanceof Name))throw new FormatError("invalid font name");let p,m,b,y,w;try{p=e.get("FontFile","FontFile2","FontFile3");if(p){if(!(p instanc\ +eof BaseStream))throw new FormatError("FontFile should be a stream");if(p.isEmpty)throw new FormatError("FontFile is empty")}}catch(e){if(!this.options.ignoreErrors)throw e;warn(`translateFont - fetching "${u.name}" font file: "${e}".`);p=null}let x=!1,S=null,k=null;if(p){if(p.dict){const e=p.dict.get("Subtype");e instanceof Name&&(m=e.name);b=p.dict.get("Length1");y=p.dict.get("Length2");w=p.dict.get("Length3")}}else if(l){const e=getXfaFontName(u.name);if(e){l.fontFamily=`${l.fontFamily}-PdfJS\ +-XFA`;l.metrics=e.metrics||null;S=e.factors||null;p=await this.fetchStandardFontData(e.name);x=!!p;r=a=getXfaFontDict(u.name);i=!0}}else if(!h){const e=getStandardFontName(u.name);if(e){p=await this.fetchStandardFontData(e);x=!!p}!x&&this.options.useSystemFonts&&(k=getFontSubstitution(this.systemFontCache,this.idFactory,this.options.standardFontDataUrl,u.name,e,n))}const C=lookupMatrix(a.getArray("FontMatrix"),t),v=lookupNormalRect(e.getArray("FontBBox")||a.getArray("FontBBox"),h?[0,0,0,0]:void \ +0);let F=e.get("Ascent");"number"!=typeof F&&(F=void 0);let T=e.get("Descent");"number"!=typeof T&&(T=void 0);let O=e.get("XHeight");"number"!=typeof O&&(O=0);let M=e.get("CapHeight");"number"!=typeof M&&(M=0);let D=e.get("Flags");Number.isInteger(D)||(D=0);let R=e.get("ItalicAngle");"number"!=typeof R&&(R=0);const N={type:n,name:u.name,subtype:m,file:p,length1:b,length2:y,length3:w,isInternalFont:x,loadedName:r.loadedName,composite:i,fixedPitch:!1,fontMatrix:C,firstChar:s,lastChar:o,toUnicode:c\ +,bbox:v,ascent:F,descent:T,xHeight:O,capHeight:M,flags:D,italicAngle:R,isType3Font:h,cssFontInfo:l,scaleFactors:S,systemFontInfo:k};if(i){const e=r.get("Encoding");e instanceof Name&&(N.cidEncoding=e.name);const t=await CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});N.cMap=t;N.vertical=N.cMap.vertical}const E=await this.extractDataStructures(a,N);this.extractWidths(a,e,E);return new Font(u.name,p,E,this.options)}static buildFontPaths(e,t,a,r){function \ +buildPath(t){const i=`${e.loadedName}_path_${t}`;try{if(e.renderer.hasBuiltPath(t))return;a.send("commonobj",[i,"FontPath",e.renderer.getPathJs(t)])}catch(e){if(r.ignoreErrors){warn(`buildFontPaths - ignoring ${i} glyph: "${e}".`);return}throw e}}for(const e of t){buildPath(e.fontChar);const t=e.accent;t?.fontChar&&buildPath(t.fontChar)}}static get fallbackFontDict(){const e=new Dict;e.set("BaseFont",Name.get("Helvetica"));e.set("Type",Name.get("FallbackType"));e.set("Subtype",Name.get("Fallback\ +Type"));e.set("Encoding",Name.get("WinAnsiEncoding"));return shadow(this,"fallbackFontDict",e)}}class TranslatedFont{#G=!1;#V=null;constructor({loadedName:e,font:t,dict:a}){this.loadedName=e;this.font=t;this.dict=a;this.type3Dependencies=t.isType3Font?new Set:null}send(e){if(!this.#G){this.#G=!0;e.send("commonobj",[this.loadedName,"Font",this.font.exportData()])}}fallback(e,t){if(this.font.data){this.font.disableFontFace=!0;PartialEvaluator.buildFontPaths(this.font,this.font.glyphCacheValues,e,t\ +)}}loadType3Data(e,t,a){if(this.#V)return this.#V;const{font:r,type3Dependencies:i}=this;assert(r.isType3Font,"Must be a Type3 font.");const n=e.clone({ignoreErrors:!1}),s=new RefSet(e.type3FontRefs);this.dict.objId&&!s.has(this.dict.objId)&&s.put(this.dict.objId);n.type3FontRefs=s;let o=Promise.resolve();const c=this.dict.get("CharProcs"),l=this.dict.get("Resources")||t,h=Object.create(null),[u,d,f,g]=r.bbox,p=f-u,m=g-d,b=Math.hypot(p,m);for(const e of c.getKeys())o=o.then((()=>{const t=c.get(e\ +),r=new OperatorList;return n.getOperatorList({stream:t,task:a,resources:l,operatorList:r}).then((()=>{switch(r.fnArray[0]){case bt:this.#K(r,b);break;case mt:b||this.#J(r)}h[e]=r.getIR();for(const e of r.dependencies)i.add(e)})).catch((function(t){warn(`Type3 font resource "${e}" is not available.`);const a=new OperatorList;h[e]=a.getIR()}))}));this.#V=o.then((()=>{r.charProcOperatorList=h;if(this._bbox){r.isCharBBox=!0;r.bbox=this._bbox}}));return this.#V}#K(e,t=NaN){const a=Util.normalizeRect\ +(e.argsArray[0].slice(2)),r=a[2]-a[0],i=a[3]-a[1],n=Math.hypot(r,i);if(0===r||0===i){e.fnArray.splice(0,1);e.argsArray.splice(0,1)}else if(0===t||Math.round(n/t)>=10){this._bbox??=[1/0,1/0,-1/0,-1/0];Util.rectBoundingBox(...a,this._bbox)}let s=0,o=e.length;for(;s<o;){switch(e.fnArray[s]){case bt:break;case yt:case wt:case xt:case St:case At:case kt:case Ct:case vt:case Ft:case It:case Tt:case Ot:case Mt:case Oe:e.fnArray.splice(s,1);e.argsArray.splice(s,1);o--;continue;case De:const[t]=e.argsArr\ +ay[s];let a=0,r=t.length;for(;a<r;){const[e]=t[a];switch(e){case"TR":case"TR2":case"HT":case"BG":case"BG2":case"UCR":case"UCR2":t.splice(a,1);r--;continue}a++}}s++}}#J(e){let t=1;const a=e.length;for(;t<a;){if(e.fnArray[t]===aa){const a=e.argsArray[t][2];this._bbox??=[1/0,1/0,-1/0,-1/0];Util.rectBoundingBox(...a,this._bbox)}t++}}}class StateManager{constructor(e=new EvalState){this.state=e;this.stateStack=[]}save(){const e=this.state;this.stateStack.push(this.state);this.state=e.clone()}restore(\ +){const e=this.stateStack.pop();e&&(this.state=e)}transform(e){this.state.ctm=Util.transform(this.state.ctm,e)}}class TextState{constructor(){this.ctm=new Float32Array(Fa);this.fontName=null;this.fontSize=0;this.loadedName=null;this.font=null;this.fontMatrix=t;this.textMatrix=Fa.slice();this.textLineMatrix=Fa.slice();this.charSpacing=0;this.wordSpacing=0;this.leading=0;this.textHScale=1;this.textRise=0}setTextMatrix(e,t,a,r,i,n){const s=this.textMatrix;s[0]=e;s[1]=t;s[2]=a;s[3]=r;s[4]=i;s[5]=n}s\ +etTextLineMatrix(e,t,a,r,i,n){const s=this.textLineMatrix;s[0]=e;s[1]=t;s[2]=a;s[3]=r;s[4]=i;s[5]=n}translateTextMatrix(e,t){const a=this.textMatrix;a[4]=a[0]*e+a[2]*t+a[4];a[5]=a[1]*e+a[3]*t+a[5]}translateTextLineMatrix(e,t){const a=this.textLineMatrix;a[4]=a[0]*e+a[2]*t+a[4];a[5]=a[1]*e+a[3]*t+a[5]}carriageReturn(){this.translateTextLineMatrix(0,-this.leading);this.textMatrix=this.textLineMatrix.slice()}clone(){const e=Object.create(this);e.textMatrix=this.textMatrix.slice();e.textLineMatrix=t\ +his.textLineMatrix.slice();e.fontMatrix=this.fontMatrix.slice();return e}}class EvalState{constructor(){this.ctm=new Float32Array(Fa);this.font=null;this.textRenderingMode=x;this._fillColorSpace=this._strokeColorSpace=ColorSpaceUtils.gray;this.patternFillColorSpace=null;this.patternStrokeColorSpace=null;this.currentPointX=this.currentPointY=0;this.pathMinMax=new Float32Array([1/0,1/0,-1/0,-1/0]);this.pathBuffer=[]}get fillColorSpace(){return this._fillColorSpace}set fillColorSpace(e){this._fillC\ +olorSpace=this.patternFillColorSpace=e}get strokeColorSpace(){return this._strokeColorSpace}set strokeColorSpace(e){this._strokeColorSpace=this.patternStrokeColorSpace=e}clone({newPath:e=!1}={}){const t=Object.create(this);if(e){t.pathBuffer=[];t.pathMinMax=new Float32Array([1/0,1/0,-1/0,-1/0])}return t}}class EvaluatorPreprocessor{static get opMap(){return shadow(this,"opMap",Object.assign(Object.create(null),{w:{id:Ce,numArgs:1,variableArgs:!1},J:{id:ve,numArgs:1,variableArgs:!1},j:{id:Fe,numA\ +rgs:1,variableArgs:!1},M:{id:Ie,numArgs:1,variableArgs:!1},d:{id:Te,numArgs:2,variableArgs:!1},ri:{id:Oe,numArgs:1,variableArgs:!1},i:{id:Me,numArgs:1,variableArgs:!1},gs:{id:De,numArgs:1,variableArgs:!1},q:{id:Be,numArgs:0,variableArgs:!1},Q:{id:Re,numArgs:0,variableArgs:!1},cm:{id:Ne,numArgs:6,variableArgs:!1},m:{id:Ee,numArgs:2,variableArgs:!1},l:{id:Pe,numArgs:2,variableArgs:!1},c:{id:Le,numArgs:6,variableArgs:!1},v:{id:je,numArgs:4,variableArgs:!1},y:{id:_e,numArgs:4,variableArgs:!1},h:{id:\ +Ue,numArgs:0,variableArgs:!1},re:{id:Xe,numArgs:4,variableArgs:!1},S:{id:qe,numArgs:0,variableArgs:!1},s:{id:He,numArgs:0,variableArgs:!1},f:{id:We,numArgs:0,variableArgs:!1},F:{id:We,numArgs:0,variableArgs:!1},"f*":{id:ze,numArgs:0,variableArgs:!1},B:{id:$e,numArgs:0,variableArgs:!1},"B*":{id:Ge,numArgs:0,variableArgs:!1},b:{id:Ve,numArgs:0,variableArgs:!1},"b*":{id:Ke,numArgs:0,variableArgs:!1},n:{id:Je,numArgs:0,variableArgs:!1},W:{id:Ye,numArgs:0,variableArgs:!1},"W*":{id:Ze,numArgs:0,variab\ +leArgs:!1},BT:{id:Qe,numArgs:0,variableArgs:!1},ET:{id:et,numArgs:0,variableArgs:!1},Tc:{id:tt,numArgs:1,variableArgs:!1},Tw:{id:at,numArgs:1,variableArgs:!1},Tz:{id:rt,numArgs:1,variableArgs:!1},TL:{id:it,numArgs:1,variableArgs:!1},Tf:{id:nt,numArgs:2,variableArgs:!1},Tr:{id:st,numArgs:1,variableArgs:!1},Ts:{id:ot,numArgs:1,variableArgs:!1},Td:{id:ct,numArgs:2,variableArgs:!1},TD:{id:lt,numArgs:2,variableArgs:!1},Tm:{id:ht,numArgs:6,variableArgs:!1},"T*":{id:ut,numArgs:0,variableArgs:!1},Tj:{id\ +:dt,numArgs:1,variableArgs:!1},TJ:{id:ft,numArgs:1,variableArgs:!1},"\'":{id:gt,numArgs:1,variableArgs:!1},\'"\':{id:pt,numArgs:3,variableArgs:!1},d0:{id:mt,numArgs:2,variableArgs:!1},d1:{id:bt,numArgs:6,variableArgs:!1},CS:{id:yt,numArgs:1,variableArgs:!1},cs:{id:wt,numArgs:1,variableArgs:!1},SC:{id:xt,numArgs:4,variableArgs:!0},SCN:{id:St,numArgs:33,variableArgs:!0},sc:{id:At,numArgs:4,variableArgs:!0},scn:{id:kt,numArgs:33,variableArgs:!0},G:{id:Ct,numArgs:1,variableArgs:!1},g:{id:vt,numArgs:1,v\ +ariableArgs:!1},RG:{id:Ft,numArgs:3,variableArgs:!1},rg:{id:It,numArgs:3,variableArgs:!1},K:{id:Tt,numArgs:4,variableArgs:!1},k:{id:Ot,numArgs:4,variableArgs:!1},sh:{id:Mt,numArgs:1,variableArgs:!1},BI:{id:Dt,numArgs:0,variableArgs:!1},ID:{id:Bt,numArgs:0,variableArgs:!1},EI:{id:Rt,numArgs:1,variableArgs:!1},Do:{id:Nt,numArgs:1,variableArgs:!1},MP:{id:Et,numArgs:1,variableArgs:!1},DP:{id:Pt,numArgs:2,variableArgs:!1},BMC:{id:Lt,numArgs:1,variableArgs:!1},BDC:{id:jt,numArgs:2,variableArgs:!1},EMC\ +:{id:_t,numArgs:0,variableArgs:!1},BX:{id:Ut,numArgs:0,variableArgs:!1},EX:{id:Xt,numArgs:0,variableArgs:!1},BM:null,BD:null,true:null,fa:null,fal:null,fals:null,false:null,nu:null,nul:null,null:null}))}static MAX_INVALID_PATH_OPS=10;constructor(e,t,a=new StateManager){this.parser=new Parser({lexer:new Lexer(e,EvaluatorPreprocessor.opMap),xref:t});this.stateManager=a;this.nonProcessedArgs=[];this._isPathOp=!1;this._numInvalidPathOPS=0}get savedStatesDepth(){return this.stateManager.stateStack.le\ +ngth}read(e){let t=e.args;for(;;){const a=this.parser.getObj();if(a instanceof Cmd){const r=a.cmd,i=EvaluatorPreprocessor.opMap[r];if(!i){warn(`Unknown command "${r}".`);continue}const n=i.id,s=i.numArgs;let o=null!==t?t.length:0;this._isPathOp||(this._numInvalidPathOPS=0);this._isPathOp=n>=Ee&&n<=Je;if(i.variableArgs)o>s&&info(`Command ${r}: expected [0, ${s}] args, but received ${o} args.`);else{if(o!==s){const e=this.nonProcessedArgs;for(;o>s;){e.push(t.shift());o--}for(;o<s&&0!==e.length;){n\ +ull===t&&(t=[]);t.unshift(e.pop());o++}}if(o<s){const e=`command ${r}: expected ${s} args, but received ${o} args.`;if(this._isPathOp&&++this._numInvalidPathOPS>EvaluatorPreprocessor.MAX_INVALID_PATH_OPS)throw new FormatError(`Invalid ${e}`);warn(`Skipping ${e}`);null!==t&&(t.length=0);continue}}this.preprocessCommand(n,t);e.fn=n;e.args=t;return!0}if(a===wa)return!1;if(null!==a){null===t&&(t=[]);t.push(a);if(t.length>33)throw new FormatError("Too many arguments")}}}preprocessCommand(e,t){switch(\ +0|e){case Be:this.stateManager.save();break;case Re:this.stateManager.restore();break;case Ne:this.stateManager.transform(t)}}}class DefaultAppearanceEvaluator extends EvaluatorPreprocessor{constructor(e){super(new StringStream(e))}parse(){const e={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;;){e.args.length=0;if(!this.read(e))break;if(0!==this.savedStatesDepth)continue;const{fn:a,args:r}=e;switch(0|a){case nt:const[e,a]=r;e instanceof Name&&(t.fontName=e\ +.name);"number"==typeof a&&a>0&&(t.fontSize=a);break;case It:ColorSpaceUtils.rgb.getRgbItem(r,0,t.fontColor,0);break;case vt:ColorSpaceUtils.gray.getRgbItem(r,0,t.fontColor,0);break;case Ot:ColorSpaceUtils.cmyk.getRgbItem(r,0,t.fontColor,0)}}}catch(e){warn(`parseDefaultAppearance - ignoring errors: "${e}".`)}return t}}function parseDefaultAppearance(e){return new DefaultAppearanceEvaluator(e).parse()}class AppearanceStreamEvaluator extends EvaluatorPreprocessor{constructor(e,t,a,r){super(e);this\ +.stream=e;this.evaluatorOptions=t;this.xref=a;this.globalColorSpaceCache=r;this.resources=e.dict?.get("Resources")}parse(){const e={fn:0,args:[]};let t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:ColorSpaceUtils.gray},a=!1;const r=[];try{for(;;){e.args.length=0;if(a||!this.read(e))break;const{fn:i,args:n}=e;switch(0|i){case Be:r.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillCo\ +lorSpace});break;case Re:t=r.pop()||t;break;case ht:t.scaleFactor*=Math.hypot(n[0],n[1]);break;case nt:const[e,i]=n;e instanceof Name&&(t.fontName=e.name);"number"==typeof i&&i>0&&(t.fontSize=i*t.scaleFactor);break;case wt:t.fillColorSpace=ColorSpaceUtils.parse({cs:n[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:this._localColorSpaceCache});break;case At:t.fillColorSpace.getRgbItem(n,0,\ +t.fontColor,0);break;case It:ColorSpaceUtils.rgb.getRgbItem(n,0,t.fontColor,0);break;case vt:ColorSpaceUtils.gray.getRgbItem(n,0,t.fontColor,0);break;case Ot:ColorSpaceUtils.cmyk.getRgbItem(n,0,t.fontColor,0);break;case dt:case ft:case gt:case pt:a=!0}}}catch(e){warn(`parseAppearanceStream - ignoring errors: "${e}".`)}this.stream.reset();delete t.scaleFactor;delete t.fillColorSpace;return t}get _localColorSpaceCache(){return shadow(this,"_localColorSpaceCache",new LocalColorSpaceCache)}get _pdfF\ +unctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported}))}}function getPdfColor(e,t){if(e[0]===e[1]&&e[1]===e[2]){return`${numberToString(e[0]/255)} ${t?"g":"G"}`}return Array.from(e,(e=>numberToString(e/255))).join(" ")+" "+(t?"rg":"RG")}class FakeUnicodeFont{constructor(e,t){this.xref=e;this.widths=null;this.firstChar=1/0;this.lastChar=-1/0;this.fontFamily=t;const a=new OffscreenCanvas(1,1);this.ctx\ +Measure=a.getContext("2d",{willReadFrequently:!0});FakeUnicodeFont._fontNameId||(FakeUnicodeFont._fontNameId=1);this.fontName=Name.get(`InvalidPDFjsFont_${t}_${FakeUnicodeFont._fontNameId++}`)}get fontDescriptorRef(){if(!FakeUnicodeFont._fontDescriptorRef){const e=new Dict(this.xref);e.setIfName("Type","FontDescriptor");e.set("FontName",this.fontName);e.set("FontFamily","MyriadPro Regular");e.set("FontBBox",[0,0,0,0]);e.setIfName("FontStretch","Normal");e.set("FontWeight",400);e.set("ItalicAngle\ +",0);FakeUnicodeFont._fontDescriptorRef=this.xref.getNewPersistentRef(e)}return FakeUnicodeFont._fontDescriptorRef}get descendantFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.setIfName("Type","Font");e.setIfName("Subtype","CIDFontType0");e.setIfName("CIDToGIDMap","Identity");e.set("FirstChar",this.firstChar);e.set("LastChar",this.lastChar);e.set("FontDescriptor",this.fontDescriptorRef);e.set("DW",1e3);const t=[],a=[...this.widths.entries()].sort();let r=null,i=null;for(\ +const[e,n]of a)if(r)if(e===r+i.length)i.push(n);else{t.push(r,i);r=e;i=[n]}else{r=e;i=[n]}r&&t.push(r,i);e.set("W",t);const n=new Dict(this.xref);n.set("Ordering","Identity");n.set("Registry","Adobe");n.set("Supplement",0);e.set("CIDSystemInfo",n);return this.xref.getNewPersistentRef(e)}get baseFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.setIfName("Type","Font");e.setIfName("Subtype","Type0");e.setIfName("Encoding","Identity-H");e.set("DescendantFonts",[this.descendan\ +tFontRef]);e.setIfName("ToUnicode","Identity-H");return this.xref.getNewPersistentRef(e)}get resources(){const e=new Dict(this.xref),t=new Dict(this.xref);t.set(this.fontName.name,this.baseFontRef);e.set("Font",t);return e}_createContext(){this.widths=new Map;this.ctxMeasure.font=`1000px ${this.fontFamily}`;return this.ctxMeasure}createFontResources(e){const t=this._createContext();for(const a of e.split(/\\r\\n?|\\n/))for(const e of a.split("")){const a=e.charCodeAt(0);if(this.widths.has(a))contin\ +ue;const r=t.measureText(e),i=Math.ceil(r.width);this.widths.set(a,i);this.firstChar=Math.min(a,this.firstChar);this.lastChar=Math.max(a,this.lastChar)}return this.resources}static getFirstPositionInfo(e,t,i){const[n,s,o,c]=e;let l=o-n,h=c-s;t%180!=0&&([l,h]=[h,l]);const u=a*i;return{coords:[0,h+r*i-u],bbox:[0,0,l,h],matrix:0!==t?getRotationMatrix(t,h,u):void 0}}createAppearance(e,t,i,n,s,o){const c=this._createContext(),l=[];let h=-1/0;for(const t of e.split(/\\r\\n?|\\n/)){l.push(t);const e=c.mea\ +sureText(t).width;h=Math.max(h,e);for(const e of codePointIter(t)){const t=String.fromCodePoint(e);let a=this.widths.get(e);if(void 0===a){const r=c.measureText(t);a=Math.ceil(r.width);this.widths.set(e,a);this.firstChar=Math.min(e,this.firstChar);this.lastChar=Math.max(e,this.lastChar)}}}h*=n/1e3;const[u,d,f,g]=t;let p=f-u,m=g-d;i%180!=0&&([p,m]=[m,p]);let b=1;h>p&&(b=p/h);let y=1;const w=a*n,x=r*n,S=w*l.length;S>m&&(y=m/S);const k=n*Math.min(b,y),C=["q",`0 0 ${numberToString(p)} ${numberToStri\ +ng(m)} re W n`,"BT",`1 0 0 1 0 ${numberToString(m+x)} Tm 0 Tc ${getPdfColor(s,!0)}`,`/${this.fontName.name} ${numberToString(k)} Tf`],{resources:v}=this;if(1!==(o="number"==typeof o&&o>=0&&o<=1?o:1)){C.push("/R0 gs");const e=new Dict(this.xref),t=new Dict(this.xref);t.set("ca",o);t.set("CA",o);t.setIfName("Type","ExtGState");e.set("R0",t);v.set("ExtGState",e)}const F=numberToString(w);for(const e of l)C.push(`0 -${F} Td <${stringToUTF16HexString(e)}> Tj`);C.push("ET","Q");const T=C.join("\\n"),O=\ +new Dict(this.xref);O.setIfName("Subtype","Form");O.setIfName("Type","XObject");O.set("BBox",[0,0,p,m]);O.set("Length",T.length);O.set("Resources",v);if(i){const e=getRotationMatrix(i,p,m);O.set("Matrix",e)}const M=new StringStream(T);M.dict=O;return M}}const Pn=["m/d","m/d/yy","mm/dd/yy","mm/yy","d-mmm","d-mmm-yy","dd-mmm-yy","yy-mm-dd","mmm-yy","mmmm-yy","mmm d, yyyy","mmmm d, yyyy","m/d/yy h:MM tt","m/d/yy HH:MM"],Ln=["HH:MM","h:MM tt","HH:MM:ss","h:MM:ss tt"];class NameOrNumberTree{construct\ +or(e,t,a){this.root=e;this.xref=t;this._type=a}getAll(){const e=new Map;if(!this.root)return e;const t=this.xref,a=new RefSet;a.put(this.root);const r=[this.root];for(;r.length>0;){const i=t.fetchIfRef(r.shift());if(!(i instanceof Dict))continue;if(i.has("Kids")){const e=i.get("Kids");if(!Array.isArray(e))continue;for(const t of e){if(a.has(t))throw new FormatError(`Duplicate entry in "${this._type}" tree.`);r.push(t);a.put(t)}continue}const n=i.get(this._type);if(Array.isArray(n))for(let a=0,r=\ +n.length;a<r;a+=2)e.set(t.fetchIfRef(n[a]),t.fetchIfRef(n[a+1]))}return e}getRaw(e){if(!this.root)return null;const t=this.xref;let a=t.fetchIfRef(this.root),r=0;for(;a.has("Kids");){if(++r>10){warn(`Search depth limit reached for "${this._type}" tree.`);return null}const i=a.get("Kids");if(!Array.isArray(i))return null;let n=0,s=i.length-1;for(;n<=s;){const r=n+s>>1,o=t.fetchIfRef(i[r]),c=o.get("Limits");if(e<t.fetchIfRef(c[0]))s=r-1;else{if(!(e>t.fetchIfRef(c[1]))){a=o;break}n=r+1}}if(n>s)retu\ +rn null}const i=a.get(this._type);if(Array.isArray(i)){let a=0,r=i.length-2;for(;a<=r;){const n=a+r>>1,s=n+(1&n),o=t.fetchIfRef(i[s]);if(e<o)r=s-2;else{if(!(e>o))return i[s+1];a=s+2}}}return null}get(e){return this.xref.fetchIfRef(this.getRaw(e))}}class NameTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Names")}}class NumberTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Nums")}}function clearGlobalCaches(){!function clearPatternCaches(){Ii=Object.create(null)}();!function c\ +learPrimitiveCaches(){xa=Object.create(null);Sa=Object.create(null);Aa=Object.create(null)}();!function clearUnicodeCaches(){Dr.clear()}();JpxImage.cleanup()}function pickPlatformItem(e){return e instanceof Dict?e.has("UF")?e.get("UF"):e.has("F")?e.get("F"):e.has("Unix")?e.get("Unix"):e.has("Mac")?e.get("Mac"):e.has("DOS")?e.get("DOS"):null:null}class FileSpec{#Y=!1;constructor(e,t,a=!1){if(e instanceof Dict){this.xref=t;this.root=e;e.has("FS")&&(this.fs=e.get("FS"));e.has("RF")&&warn("Related f\ +ile specifications are not supported");a||(e.has("EF")?this.#Y=!0:warn("Non-embedded file specifications are not supported"))}}get filename(){let e="";const t=pickPlatformItem(this.root);t&&"string"==typeof t&&(e=stringToPDFString(t,!0).replaceAll("\\\\\\\\","\\\\").replaceAll("\\\\/","/").replaceAll("\\\\","/"));return shadow(this,"filename",e||"unnamed")}get content(){if(!this.#Y)return null;this._contentRef||=pickPlatformItem(this.root?.get("EF"));let e=null;if(this._contentRef){const t=this.xref.fetch\ +IfRef(this._contentRef);t instanceof BaseStream?e=t.getBytes():warn("Embedded file specification points to non-existing/invalid content")}else warn("Embedded file specification does not have any content");return e}get description(){let e="";const t=this.root?.get("Desc");t&&"string"==typeof t&&(e=stringToPDFString(t));return shadow(this,"description",e)}get serializable(){return{rawFilename:this.filename,filename:(e=this.filename,e.substring(e.lastIndexOf("/")+1)),content:this.content,descriptio\ +n:this.description};var e}}const jn=0,_n=-2,Un=-3,Xn=-4,qn=-5,Hn=-6,Wn=-9;function isWhitespace(e,t){const a=e[t];return" "===a||"\\n"===a||"\\r"===a||"\\t"===a}class XMLParserBase{_resolveEntities(e){return e.replaceAll(/&([^;]+);/g,((e,t)=>{if("#x"===t.substring(0,2))return String.fromCodePoint(parseInt(t.substring(2),16));if("#"===t.substring(0,1))return String.fromCodePoint(parseInt(t.substring(1),10));switch(t){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return\'"\';case\ +"apos":return"\'"}return this.onResolveEntity(t)}))}_parseContent(e,t){const a=[];let r=t;function skipWs(){for(;r<e.length&&isWhitespace(e,r);)++r}for(;r<e.length&&!isWhitespace(e,r)&&">"!==e[r]&&"/"!==e[r];)++r;const i=e.substring(t,r);skipWs();for(;r<e.length&&">"!==e[r]&&"/"!==e[r]&&"?"!==e[r];){skipWs();let t="",i="";for(;r<e.length&&!isWhitespace(e,r)&&"="!==e[r];){t+=e[r];++r}skipWs();if("="!==e[r])return null;++r;skipWs();const n=e[r];if(\'"\'!==n&&"\'"!==n)return null;const s=e.indexOf(n,++\ +r);if(s<0)return null;i=e.substring(r,s);a.push({name:t,value:this._resolveEntities(i)});r=s+1;skipWs()}return{name:i,attributes:a,parsed:r-t}}_parseProcessingInstruction(e,t){let a=t;for(;a<e.length&&!isWhitespace(e,a)&&">"!==e[a]&&"?"!==e[a]&&"/"!==e[a];)++a;const r=e.substring(t,a);!function skipWs(){for(;a<e.length&&isWhitespace(e,a);)++a}();const i=a;for(;a<e.length&&("?"!==e[a]||">"!==e[a+1]);)++a;return{name:r,value:e.substring(i,a),parsed:a-t}}parseXml(e){let t=0;for(;t<e.length;){let a=\ +t;if("<"===e[t]){++a;let t;switch(e[a]){case"/":++a;t=e.indexOf(">",a);if(t<0){this.onError(Wn);return}this.onEndElement(e.substring(a,t));a=t+1;break;case"?":++a;const r=this._parseProcessingInstruction(e,a);if("?>"!==e.substring(a+r.parsed,a+r.parsed+2)){this.onError(Un);return}this.onPi(r.name,r.value);a+=r.parsed+2;break;case"!":if("--"===e.substring(a+1,a+3)){t=e.indexOf("--\\x3e",a+3);if(t<0){this.onError(qn);return}this.onComment(e.substring(a+3,t));a=t+3}else if("[CDATA["===e.substring(a+\ +1,a+8)){t=e.indexOf("]]>",a+8);if(t<0){this.onError(_n);return}this.onCdata(e.substring(a+8,t));a=t+3}else{if("DOCTYPE"!==e.substring(a+1,a+8)){this.onError(Hn);return}{const r=e.indexOf("[",a+8);let i=!1;t=e.indexOf(">",a+8);if(t<0){this.onError(Xn);return}if(r>0&&t>r){t=e.indexOf("]>",a+8);if(t<0){this.onError(Xn);return}i=!0}const n=e.substring(a+8,t+(i?1:0));this.onDoctype(n);a=t+(i?2:1)}}break;default:const i=this._parseContent(e,a);if(null===i){this.onError(Hn);return}let n=!1;if("/>"===e.\ +substring(a+i.parsed,a+i.parsed+2))n=!0;else if(">"!==e.substring(a+i.parsed,a+i.parsed+1)){this.onError(Wn);return}this.onBeginElement(i.name,i.attributes,n);a+=i.parsed+(n?2:1)}}else{for(;a<e.length&&"<"!==e[a];)a++;const r=e.substring(t,a);this.onText(this._resolveEntities(r))}t=a}}onResolveEntity(e){return`&${e};`}onPi(e,t){}onComment(e){}onCdata(e){}onDoctype(e){}onText(e){}onBeginElement(e,t,a){}onEndElement(e){}onError(e){}}class SimpleDOMNode{constructor(e,t){this.nodeName=e;this.nodeVal\ +ue=t;Object.defineProperty(this,"parentNode",{value:null,writable:!0})}get firstChild(){return this.childNodes?.[0]}get nextSibling(){const e=this.parentNode.childNodes;if(!e)return;const t=e.indexOf(this);return-1!==t?e[t+1]:void 0}get textContent(){return this.childNodes?this.childNodes.map((e=>e.textContent)).join(""):this.nodeValue||""}get children(){return this.childNodes||[]}hasChildNodes(){return this.childNodes?.length>0}searchNode(e,t){if(t>=e.length)return this;const a=e[t];if(a.name.s\ +tartsWith("#")&&t<e.length-1)return this.searchNode(e,t+1);const r=[];let i=this;for(;;){if(a.name===i.nodeName){if(0!==a.pos){if(0===r.length)return null;{const[n]=r.pop();let s=0;for(const r of n.childNodes)if(a.name===r.nodeName){if(s===a.pos)return r.searchNode(e,t+1);s++}return i.searchNode(e,t+1)}}{const a=i.searchNode(e,t+1);if(null!==a)return a}}if(i.childNodes?.length>0){r.push([i,0]);i=i.childNodes[0]}else{if(0===r.length)return null;for(;0!==r.length;){const[e,t]=r.pop(),a=t+1;if(a<e.\ +childNodes.length){r.push([e,a]);i=e.childNodes[a];break}}if(0===r.length)return null}}}dump(e){if("#text"!==this.nodeName){e.push(`<${this.nodeName}`);if(this.attributes)for(const t of this.attributes)e.push(` ${t.name}="${encodeToXmlString(t.value)}"`);if(this.hasChildNodes()){e.push(">");for(const t of this.childNodes)t.dump(e);e.push(`</${this.nodeName}>`)}else this.nodeValue?e.push(`>${encodeToXmlString(this.nodeValue)}</${this.nodeName}>`):e.push("/>")}else e.push(encodeToXmlString(this.no\ +deValue))}}class SimpleXMLParser extends XMLParserBase{constructor({hasAttributes:e=!1,lowerCaseName:t=!1}){super();this._currentFragment=null;this._stack=null;this._errorCode=jn;this._hasAttributes=e;this._lowerCaseName=t}parseFromString(e){this._currentFragment=[];this._stack=[];this._errorCode=jn;this.parseXml(e);if(this._errorCode!==jn)return;const[t]=this._currentFragment;return t?{documentElement:t}:void 0}onText(e){if(function isWhitespaceString(e){for(let t=0,a=e.length;t<a;t++)if(!isWhi\ +tespace(e,t))return!1;return!0}(e))return;const t=new SimpleDOMNode("#text",e);this._currentFragment.push(t)}onCdata(e){const t=new SimpleDOMNode("#text",e);this._currentFragment.push(t)}onBeginElement(e,t,a){this._lowerCaseName&&(e=e.toLowerCase());const r=new SimpleDOMNode(e);r.childNodes=[];this._hasAttributes&&(r.attributes=t);this._currentFragment.push(r);if(!a){this._stack.push(this._currentFragment);this._currentFragment=r.childNodes}}onEndElement(e){this._currentFragment=this._stack.pop(\ +)||[];const t=this._currentFragment.at(-1);if(!t)return null;for(const e of t.childNodes)e.parentNode=t;return t}onError(e){this._errorCode=e}}class MetadataParser{constructor(e){e=this._repair(e);const t=new SimpleXMLParser({lowerCaseName:!0}).parseFromString(e);this._metadataMap=new Map;this._data=e;t&&this._parse(t)}_repair(e){return e.replace(/^[^<]+/,"").replaceAll(/>\\\\376\\\\377([^<]+)/g,(function(e,t){const a=t.replaceAll(/\\\\([0-3])([0-7])([0-7])/g,(function(e,t,a,r){return String.fromCharC\ +ode(64*t+8*a+1*r)})).replaceAll(/&(amp|apos|gt|lt|quot);/g,(function(e,t){switch(t){case"amp":return"&";case"apos":return"\'";case"gt":return">";case"lt":return"<";case"quot":return\'"\'}throw new Error(`_repair: ${t} isn\'t defined.`)})),r=[">"];for(let e=0,t=a.length;e<t;e+=2){const t=256*a.charCodeAt(e)+a.charCodeAt(e+1);t>=32&&t<127&&60!==t&&62!==t&&38!==t?r.push(String.fromCharCode(t)):r.push("&#x"+(65536+t).toString(16).substring(1)+";")}return r.join("")}))}_getSequence(e){const t=e.nodeName;\ +return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter((e=>"rdf:li"===e.nodeName))}_parseArray(e){if(!e.hasChildNodes())return;const[t]=e.childNodes,a=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,a.map((e=>e.textContent.trim())))}_parse(e){let t=e.documentElement;if("rdf:rdf"!==t.nodeName){t=t.firstChild;for(;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling}if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes())for(const e of t.childNodes)if("rdf:description"===e.nodeName)for\ +(const t of e.childNodes){const e=t.nodeName;switch(e){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(t);continue}this._metadataMap.set(e,t.textContent.trim())}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}}const zn=1,$n=2,Gn=3,Vn=4,Kn=5;class StructTreeRoot{constructor(e,t,a){this.xref=e;this.dict=t;this.ref=a instanceof Ref?a:null;this.roleMap=new Map;this.structParentIds=null}init(){this.readRoleMap()}#Z(e,t,a){if(!(e instanceof Ref)||t<0\ +)return;this.structParentIds||=new RefSetCache;let r=this.structParentIds.get(e);if(!r){r=[];this.structParentIds.put(e,r)}r.push([t,a])}addAnnotationIdToPage(e,t){this.#Z(e,t,Vn)}readRoleMap(){const e=this.dict.get("RoleMap");if(e instanceof Dict)for(const[t,a]of e)a instanceof Name&&this.roleMap.set(t,a.name)}static async canCreateStructureTree({catalogRef:e,pdfManager:t,newAnnotationsByPage:a}){if(!(e instanceof Ref)){warn("Cannot save the struct tree: no catalog reference.");return!1}let r=0\ +,i=!0;for(const[e,n]of a){const{ref:a}=await t.getPage(e);if(!(a instanceof Ref)){warn(`Cannot save the struct tree: page ${e} has no ref.`);i=!0;break}for(const e of n)if(e.accessibilityData?.type){e.parentTreeId=r++;i=!1}}if(i){for(const e of a.values())for(const t of e)delete t.parentTreeId;return!1}return!0}static async createStructureTree({newAnnotationsByPage:e,xref:t,catalogRef:a,pdfManager:r,changes:i}){const n=await r.ensureCatalog("cloneDict"),s=new RefSetCache;s.put(a,n);const o=t.get\ +NewTemporaryRef();n.set("StructTreeRoot",o);const c=new Dict(t);c.set("Type",Name.get("StructTreeRoot"));const l=t.getNewTemporaryRef();c.set("ParentTree",l);const h=[];c.set("K",h);s.put(o,c);const u=new Dict(t),d=[];u.set("Nums",d);const f=await this.#Q({newAnnotationsByPage:e,structTreeRootRef:o,structTreeRoot:null,kids:h,nums:d,xref:t,pdfManager:r,changes:i,cache:s});c.set("ParentTreeNextKey",f);s.put(l,u);for(const[e,t]of s.items())i.put(e,{data:t})}async canUpdateStructTree({pdfManager:e,n\ +ewAnnotationsByPage:t}){if(!this.ref){warn("Cannot update the struct tree: no root reference.");return!1}let a=this.dict.get("ParentTreeNextKey");if(!Number.isInteger(a)||a<0){warn("Cannot update the struct tree: invalid next key.");return!1}const r=this.dict.get("ParentTree");if(!(r instanceof Dict)){warn("Cannot update the struct tree: ParentTree isn\'t a dict.");return!1}const i=r.get("Nums");if(!Array.isArray(i)){warn("Cannot update the struct tree: nums isn\'t an array.");return!1}const n=new\ + NumberTree(r,this.xref);for(const a of t.keys()){const{pageDict:t}=await e.getPage(a);if(!t.has("StructParents"))continue;const r=t.get("StructParents");if(!Number.isInteger(r)||!Array.isArray(n.get(r))){warn(`Cannot save the struct tree: page ${a} has a wrong id.`);return!1}}let s=!0;for(const[r,i]of t){const{pageDict:t}=await e.getPage(r);StructTreeRoot.#ee({elements:i,xref:this.xref,pageDict:t,numberTree:n});for(const e of i)if(e.accessibilityData?.type){e.accessibilityData.structParent>=0||\ +(e.parentTreeId=a++);s=!1}}if(s){for(const e of t.values())for(const t of e){delete t.parentTreeId;delete t.structTreeParent}return!1}return!0}async updateStructureTree({newAnnotationsByPage:e,pdfManager:t,changes:a}){const{ref:r,xref:i}=this,n=this.dict.clone(),s=new RefSetCache;s.put(r,n);let o,c=n.getRaw("ParentTree");if(c instanceof Ref)o=i.fetch(c);else{o=c;c=i.getNewTemporaryRef();n.set("ParentTree",c)}o=o.clone();s.put(c,o);let l=o.getRaw("Nums"),h=null;if(l instanceof Ref){h=l;l=i.fetch(\ +h)}l=l.slice();h||o.set("Nums",l);const u=await StructTreeRoot.#Q({newAnnotationsByPage:e,structTreeRootRef:r,structTreeRoot:this,kids:null,nums:l,xref:i,pdfManager:t,changes:a,cache:s});if(-1!==u){n.set("ParentTreeNextKey",u);h&&s.put(h,l);for(const[e,t]of s.items())a.put(e,{data:t})}}static async#Q({newAnnotationsByPage:e,structTreeRootRef:t,structTreeRoot:a,kids:r,nums:i,xref:n,pdfManager:s,changes:o,cache:c}){const l=Name.get("OBJR");let h,u=-1;for(const[d,f]of e){const e=await s.getPage(d),\ +{ref:g}=e,p=g instanceof Ref;for(const{accessibilityData:s,ref:m,parentTreeId:b,structTreeParent:y}of f){if(!s?.type)continue;const{structParent:f}=s;if(a&&Number.isInteger(f)&&f>=0){let t=(h||=new Map).get(d);if(void 0===t){t=new StructTreePage(a,e.pageDict).collectObjects(g);h.set(d,t)}const r=t?.get(f);if(r){const e=n.fetch(r).clone();StructTreeRoot.#te(e,s);o.put(r,{data:e});continue}}u=Math.max(u,b);const w=n.getNewTemporaryRef(),x=new Dict(n);StructTreeRoot.#te(x,s);await this.#ae({structT\ +reeParent:y,tagDict:x,newTagRef:w,structTreeRootRef:t,fallbackKids:r,xref:n,cache:c});const S=new Dict(n);x.set("K",S);S.set("Type",l);p&&S.set("Pg",g);S.set("Obj",m);c.put(w,x);i.push(b,w)}}return u+1}static#te(e,{type:t,title:a,lang:r,alt:i,expanded:n,actualText:s}){e.set("S",Name.get(t));a&&e.set("T",stringToAsciiOrUTF16BE(a));r&&e.set("Lang",stringToAsciiOrUTF16BE(r));i&&e.set("Alt",stringToAsciiOrUTF16BE(i));n&&e.set("E",stringToAsciiOrUTF16BE(n));s&&e.set("ActualText",stringToAsciiOrUTF16B\ +E(s))}static#ee({elements:e,xref:t,pageDict:a,numberTree:r}){const i=new Map;for(const t of e)if(t.structTreeParentId){const e=parseInt(t.structTreeParentId.split("_mc")[1],10);let a=i.get(e);if(!a){a=[];i.set(e,a)}a.push(t)}const n=a.get("StructParents");if(!Number.isInteger(n))return;const s=r.get(n),updateElement=(e,a,r)=>{const n=i.get(e);if(n){const e=a.getRaw("P"),i=t.fetchIfRef(e);if(e instanceof Ref&&i instanceof Dict){const e={ref:r,dict:a};for(const t of n)t.structTreeParent=e}return!0\ +}return!1};for(const e of s){if(!(e instanceof Ref))continue;const a=t.fetch(e),r=a.get("K");if(Number.isInteger(r))updateElement(r,a,e);else if(Array.isArray(r))for(let i of r){i=t.fetchIfRef(i);if(Number.isInteger(i)&&updateElement(i,a,e))break;if(!(i instanceof Dict))continue;if(!isName(i.get("Type"),"MCR"))break;const r=i.get("MCID");if(Number.isInteger(r)&&updateElement(r,a,e))break}}}static async#ae({structTreeParent:e,tagDict:t,newTagRef:a,structTreeRootRef:r,fallbackKids:i,xref:n,cache:s\ +}){let o,c=null;if(e){({ref:c}=e);o=e.dict.getRaw("P")||r}else o=r;t.set("P",o);const l=n.fetchIfRef(o);if(!l){i.push(a);return}let h=s.get(o);if(!h){h=l.clone();s.put(o,h)}const u=h.getRaw("K");let d=u instanceof Ref?s.get(u):null;if(!d){d=n.fetchIfRef(u);d=Array.isArray(d)?d.slice():[u];const e=n.getNewTemporaryRef();h.set("K",e);s.put(e,d)}const f=d.indexOf(c);d.splice(f>=0?f+1:d.length,0,a)}}class StructElementNode{constructor(e,t){this.tree=e;this.xref=e.xref;this.dict=t;this.kids=[];this.p\ +arseKids()}get role(){const e=this.dict.get("S"),t=e instanceof Name?e.name:"",{root:a}=this.tree;return a.roleMap.get(t)??t}parseKids(){let e=null;const t=this.dict.getRaw("Pg");t instanceof Ref&&(e=t.toString());const a=this.dict.get("K");if(Array.isArray(a))for(const t of a){const a=this.parseKid(e,this.xref.fetchIfRef(t));a&&this.kids.push(a)}else{const t=this.parseKid(e,a);t&&this.kids.push(t)}}parseKid(e,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==e?null:new StructElement({\ +type:zn,mcid:t,pageObjId:e});if(!(t instanceof Dict))return null;const a=t.getRaw("Pg");a instanceof Ref&&(e=a.toString());const r=t.get("Type")instanceof Name?t.get("Type").name:null;if("MCR"===r){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Stm");return new StructElement({type:$n,refObjId:a instanceof Ref?a.toString():null,pageObjId:e,mcid:t.get("MCID")})}if("OBJR"===r){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Obj");return new StructElement({type:Gn,refObj\ +Id:a instanceof Ref?a.toString():null,pageObjId:e})}return new StructElement({type:Kn,dict:t})}}class StructElement{constructor({type:e,dict:t=null,mcid:a=null,pageObjId:r=null,refObjId:i=null}){this.type=e;this.dict=t;this.mcid=a;this.pageObjId=r;this.refObjId=i;this.parentNode=null}}class StructTreePage{constructor(e,t){this.root=e;this.xref=e?.xref??null;this.rootDict=e?.dict??null;this.pageDict=t;this.nodes=[]}collectObjects(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return null;con\ +st t=this.rootDict.get("ParentTree");if(!t)return null;const a=this.root.structParentIds?.get(e);if(!a)return null;const r=new Map,i=new NumberTree(t,this.xref);for(const[e]of a){const t=i.getRaw(e);t instanceof Ref&&r.set(e,t)}return r}parse(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return;const t=this.rootDict.get("ParentTree");if(!t)return;const a=this.pageDict.get("StructParents"),r=this.root.structParentIds?.get(e);if(!Number.isInteger(a)&&!r)return;const i=new Map,n=new NumberTre\ +e(t,this.xref);if(Number.isInteger(a)){const e=n.get(a);if(Array.isArray(e))for(const t of e)t instanceof Ref&&this.addNode(this.xref.fetch(t),i)}if(r)for(const[e,t]of r){const a=n.get(e);if(a){const e=this.addNode(this.xref.fetchIfRef(a),i);1===e?.kids?.length&&e.kids[0].type===Gn&&(e.kids[0].type=t)}}}addNode(e,t,a=0){if(a>40){warn("StructTree MAX_DEPTH reached.");return null}if(!(e instanceof Dict))return null;if(t.has(e))return t.get(e);const r=new StructElementNode(this,e);t.set(e,r);const \ +i=e.get("P");if(!(i instanceof Dict)||isName(i.get("Type"),"StructTreeRoot")){this.addTopLevelNode(e,r)||t.delete(e);return r}const n=this.addNode(i,t,a+1);if(!n)return r;let s=!1;for(const t of n.kids)if(t.type===Kn&&t.dict===e){t.parentNode=r;s=!0}s||t.delete(e);return r}addTopLevelNode(e,t){const a=this.rootDict.get("K");if(!a)return!1;if(a instanceof Dict){if(a.objId!==e.objId)return!1;this.nodes[0]=t;return!0}if(!Array.isArray(a))return!0;let r=!1;for(let i=0;i<a.length;i++){const n=a[i];if\ +(n?.toString()===e.objId){this.nodes[i]=t;r=!0}}return r}get serializable(){function nodeToSerializable(e,t,a=0){if(a>40){warn("StructTree too deep to be fully serialized.");return}const r=Object.create(null);r.role=e.role;r.children=[];t.children.push(r);let i=e.dict.get("Alt");"string"!=typeof i&&(i=e.dict.get("ActualText"));"string"==typeof i&&(r.alt=stringToPDFString(i));const n=e.dict.get("A");if(n instanceof Dict){const e=lookupNormalRect(n.getArray("BBox"),null);if(e)r.bbox=e;else{const e\ +=n.get("Width"),t=n.get("Height");"number"==typeof e&&e>0&&"number"==typeof t&&t>0&&(r.bbox=[0,0,e,t])}}const s=e.dict.get("Lang");"string"==typeof s&&(r.lang=stringToPDFString(s));for(const t of e.kids){const e=t.type===Kn?t.parentNode:null;e?nodeToSerializable(e,r,a+1):t.type===zn||t.type===$n?r.children.push({type:"content",id:`p${t.pageObjId}_mc${t.mcid}`}):t.type===Gn?r.children.push({type:"object",id:t.refObjId}):t.type===Vn&&r.children.push({type:"annotation",id:`pdfjs_internal_id_${t.ref\ +ObjId}`})}}const e=Object.create(null);e.children=[];e.role="Root";for(const t of this.nodes)t&&nodeToSerializable(t,e);return e}}const Jn=function _isValidExplicitDest(e,t,a){if(!Array.isArray(a)||a.length<2)return!1;const[r,i,...n]=a;if(!e(r)&&!Number.isInteger(r))return!1;if(!t(i))return!1;const s=n.length;let o=!0;switch(i.name){case"XYZ":if(s<2||s>3)return!1;break;case"Fit":case"FitB":return 0===s;case"FitH":case"FitBH":case"FitV":case"FitBV":if(s>1)return!1;break;case"FitR":if(4!==s)return\ +!1;o=!1;break;default:return!1}for(const e of n)if(!("number"==typeof e||o&&null===e))return!1;return!0}.bind(null,(e=>e instanceof Ref),isName);function fetchDest(e){e instanceof Dict&&(e=e.get("D"));return Jn(e)?e:null}function fetchRemoteDest(e){let t=e.get("D");if(t){t instanceof Name&&(t=t.name);if("string"==typeof t)return stringToPDFString(t,!0);if(Jn(t))return JSON.stringify(t)}return null}class Catalog{#re=null;#ie=null;builtInCMapCache=new Map;fontCache=new RefSetCache;globalColorSpace\ +Cache=new GlobalColorSpaceCache;globalImageCache=new GlobalImageCache;nonBlendModesSet=new RefSet;pageDictCache=new RefSetCache;pageIndexCache=new RefSetCache;pageKidsCountCache=new RefSetCache;standardFontDataCache=new Map;systemFontCache=new Map;constructor(e,t){this.pdfManager=e;this.xref=t;this.#ie=t.getCatalogObj();if(!(this.#ie instanceof Dict))throw new FormatError("Catalog object is not a dictionary.");this.toplevelPagesDict}cloneDict(){return this.#ie.clone()}get version(){const e=this.\ +#ie.get("Version");if(e instanceof Name){if(Ca.test(e.name))return shadow(this,"version",e.name);warn(`Invalid PDF catalog version: ${e.name}`)}return shadow(this,"version",null)}get lang(){const e=this.#ie.get("Lang");return shadow(this,"lang",e&&"string"==typeof e?stringToPDFString(e):null)}get needsRendering(){const e=this.#ie.get("NeedsRendering");return shadow(this,"needsRendering","boolean"==typeof e&&e)}get collection(){let e=null;try{const t=this.#ie.get("Collection");t instanceof Dict&&\ +t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch Collection entry; assuming no collection is present.")}return shadow(this,"collection",e)}get acroForm(){let e=null;try{const t=this.#ie.get("AcroForm");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch AcroForm entry; assuming no forms are present.")}return shadow(this,"acroForm",e)}get acroFormRef(){const e=this.#ie.getRaw("AcroForm");return shadow(\ +this,"acroFormRef",e instanceof Ref?e:null)}get metadata(){const e=this.#ie.getRaw("Metadata");if(!(e instanceof Ref))return shadow(this,"metadata",null);let t=null;try{const a=this.xref.fetch(e,!this.xref.encrypt?.encryptMetadata);if(a instanceof BaseStream&&a.dict instanceof Dict){const e=a.dict.get("Type"),r=a.dict.get("Subtype");if(isName(e,"Metadata")&&isName(r,"XML")){const e=stringToUTF8String(a.getString());e&&(t=new MetadataParser(e).serializable)}}}catch(e){if(e instanceof MissingDataE\ +xception)throw e;info(`Skipping invalid Metadata: "${e}".`)}return shadow(this,"metadata",t)}get markInfo(){let e=null;try{e=this.#ne()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read mark info.")}return shadow(this,"markInfo",e)}#ne(){const e=this.#ie.get("MarkInfo");if(!(e instanceof Dict))return null;const t={Marked:!1,UserProperties:!1,Suspects:!1};for(const a in t){const r=e.get(a);"boolean"==typeof r&&(t[a]=r)}return t}get structTreeRoot(){let e=null;try{e=this.#\ +se()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable read to structTreeRoot info.")}return shadow(this,"structTreeRoot",e)}#se(){const e=this.#ie.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(e);if(!(t instanceof Dict))return null;const a=new StructTreeRoot(this.xref,t,e);a.init();return a}get toplevelPagesDict(){const e=this.#ie.get("Pages");if(!(e instanceof Dict))throw new FormatError("Invalid top-level pages dictionary.");return shadow(this,"toplevelPagesDict",e)}get doc\ +umentOutline(){let e=null;try{e=this.#oe()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read document outline.")}return shadow(this,"documentOutline",e)}#oe(){let e=this.#ie.get("Outlines");if(!(e instanceof Dict))return null;e=e.getRaw("First");if(!(e instanceof Ref))return null;const t={items:[]},a=[{obj:e,parent:t}],r=new RefSet;r.put(e);const i=this.xref,n=new Uint8ClampedArray(3);for(;a.length>0;){const t=a.shift(),s=i.fetchIfRef(t.obj);if(null===s)continue;s.has("T\ +itle")||warn("Invalid outline item encountered.");const o={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:s,resultObj:o,docBaseUrl:this.baseUrl,docAttachments:this.attachments});const c=s.get("Title"),l=s.get("F")||0,h=s.getArray("C"),u=s.get("Count");let d=n;!isNumberArray(h,3)||0===h[0]&&0===h[1]&&0===h[2]||(d=ColorSpaceUtils.rgb.getRgb(h,0));const f={action:o.action,attachment:o.attachment,dest:o.dest,url:o.url,unsafeUrl:o.unsafeUrl,newWindow:o.newWindow,setOCGState:o.s\ +etOCGState,title:"string"==typeof c?stringToPDFString(c):"",color:d,count:Number.isInteger(u)?u:void 0,bold:!!(2&l),italic:!!(1&l),items:[]};t.parent.items.push(f);e=s.getRaw("First");if(e instanceof Ref&&!r.has(e)){a.push({obj:e,parent:f});r.put(e)}e=s.getRaw("Next");if(e instanceof Ref&&!r.has(e)){a.push({obj:e,parent:t.parent});r.put(e)}}return t.items.length>0?t.items:null}get permissions(){let e=null;try{e=this.#ce()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read\ + permissions.")}return shadow(this,"permissions",e)}#ce(){const e=this.xref.trailer.get("Encrypt");if(!(e instanceof Dict))return null;let t=e.get("P");if("number"!=typeof t)return null;t+=2**32;const a=[];for(const e in w){const r=w[e];t&r&&a.push(r)}return a}get optionalContentConfig(){let e=null;try{const t=this.#ie.get("OCProperties");if(!t)return shadow(this,"optionalContentConfig",null);const a=t.get("D");if(!a)return shadow(this,"optionalContentConfig",null);const r=t.get("OCGs");if(!Arra\ +y.isArray(r))return shadow(this,"optionalContentConfig",null);const i=new RefSetCache;for(const e of r)e instanceof Ref&&!i.has(e)&&i.put(e,this.#le(e));e=this.#he(a,i)}catch(e){if(e instanceof MissingDataException)throw e;warn(`Unable to read optional content config: ${e}`)}return shadow(this,"optionalContentConfig",e)}#le(e){const t=this.xref.fetch(e),a={id:e.toString(),name:null,intent:null,usage:{print:null,view:null},rbGroups:[]},r=t.get("Name");"string"==typeof r&&(a.name=stringToPDFString\ +(r));let i=t.getArray("Intent");Array.isArray(i)||(i=[i]);i.every((e=>e instanceof Name))&&(a.intent=i.map((e=>e.name)));const n=t.get("Usage");if(!(n instanceof Dict))return a;const s=a.usage,o=n.get("Print");if(o instanceof Dict){const e=o.get("PrintState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":s.print={printState:e.name}}}const c=n.get("View");if(c instanceof Dict){const e=c.get("ViewState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":s.view={viewState:e.name}}}ret\ +urn a}#he(e,t){function parseOnOff(e){const a=[];if(Array.isArray(e))for(const r of e)r instanceof Ref&&t.has(r)&&a.push(r.toString());return a}function parseOrder(e,a=0){if(!Array.isArray(e))return null;const i=[];for(const n of e){if(n instanceof Ref&&t.has(n)){r.put(n);i.push(n.toString());continue}const e=parseNestedOrder(n,a);e&&i.push(e)}if(a>0)return i;const n=[];for(const[e]of t.items())r.has(e)||n.push(e.toString());n.length&&i.push({name:null,order:n});return i}function parseNestedOrde\ +r(e,t){if(++t>i){warn("parseNestedOrder - reached MAX_NESTED_LEVELS.");return null}const r=a.fetchIfRef(e);if(!Array.isArray(r))return null;const n=a.fetchIfRef(r[0]);if("string"!=typeof n)return null;const s=parseOrder(r.slice(1),t);return s?.length?{name:stringToPDFString(n),order:s}:null}const a=this.xref,r=new RefSet,i=10;!function parseRBGroups(e){if(Array.isArray(e))for(const r of e){const e=a.fetchIfRef(r);if(!Array.isArray(e)||!e.length)continue;const i=new Set;for(const a of e)if(a inst\ +anceof Ref&&t.has(a)&&!i.has(a.toString())){i.add(a.toString());t.get(a).rbGroups.push(i)}}}(e.get("RBGroups"));return{name:"string"==typeof e.get("Name")?stringToPDFString(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?stringToPDFString(e.get("Creator")):null,baseState:e.get("BaseState")instanceof Name?e.get("BaseState").name:null,on:parseOnOff(e.get("ON")),off:parseOnOff(e.get("OFF")),order:parseOrder(e.get("Order")),groups:[...t]}}setActualNumPages(e=null){this.#re=e}get hasAct\ +ualNumPages(){return null!==this.#re}get _pagesCount(){const e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new FormatError("Page count in top-level pages dictionary is not an integer.");return shadow(this,"_pagesCount",e)}get numPages(){return this.#re??this._pagesCount}get destinations(){const e=this.#ue(),t=Object.create(null);for(const a of e)if(a instanceof NameTree)for(const[e,r]of a.getAll()){const a=fetchDest(r);a&&(t[stringToPDFString(e,!0)]=a)}else if(a instanceof \ +Dict)for(const[e,r]of a){const a=fetchDest(r);a&&(t[stringToPDFString(e,!0)]||=a)}return shadow(this,"destinations",t)}getDestination(e){if(this.hasOwnProperty("destinations"))return this.destinations[e]??null;const t=this.#ue();for(const a of t)if(a instanceof NameTree||a instanceof Dict){const t=fetchDest(a.get(e));if(t)return t}if(t.length){const t=this.destinations[e];if(t)return t}return null}#ue(){const e=this.#ie.get("Names"),t=[];e?.has("Dests")&&t.push(new NameTree(e.getRaw("Dests"),thi\ +s.xref));this.#ie.has("Dests")&&t.push(this.#ie.get("Dests"));return t}get pageLabels(){let e=null;try{e=this.#de()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read page labels.")}return shadow(this,"pageLabels",e)}#de(){const e=this.#ie.getRaw("PageLabels");if(!e)return null;const t=new Array(this.numPages);let a=null,r="";const i=new NumberTree(e,this.xref).getAll();let n="",s=1;for(let e=0,o=this.numPages;e<o;e++){const o=i.get(e);if(void 0!==o){if(!(o instanceof Dic\ +t))throw new FormatError("PageLabel is not a dictionary.");if(o.has("Type")&&!isName(o.get("Type"),"PageLabel"))throw new FormatError("Invalid type in PageLabel dictionary.");if(o.has("S")){const e=o.get("S");if(!(e instanceof Name))throw new FormatError("Invalid style in PageLabel dictionary.");a=e.name}else a=null;if(o.has("P")){const e=o.get("P");if("string"!=typeof e)throw new FormatError("Invalid prefix in PageLabel dictionary.");r=stringToPDFString(e)}else r="";if(o.has("St")){const e=o.ge\ +t("St");if(!(Number.isInteger(e)&&e>=1))throw new FormatError("Invalid start in PageLabel dictionary.");s=e}else s=1}switch(a){case"D":n=s;break;case"R":case"r":n=toRomanNumerals(s,"r"===a);break;case"A":case"a":const e=26,t="a"===a?97:65,r=s-1;n=String.fromCharCode(t+r%e).repeat(Math.floor(r/e)+1);break;default:if(a)throw new FormatError(`Invalid style "${a}" in PageLabel dictionary.`);n=""}t[e]=r+n;s++}return t}get pageLayout(){const e=this.#ie.get("PageLayout");let t="";if(e instanceof Name)s\ +witch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return shadow(this,"pageLayout",t)}get pageMode(){const e=this.#ie.get("PageMode");let t="UseNone";if(e instanceof Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return shadow(this,"pageMode",t)}get viewerPreferences(){const e=this.#ie.get("ViewerPreferences");if(!(e instanceof Dict))r\ +eturn shadow(this,"viewerPreferences",null);let t=null;for(const[a,r]of e){let e;switch(a){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof r&&(e=r);break;case"NonFullScreenPageMode":if(r instanceof Name)switch(r.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":e=r.name;break;default:e="UseNone"}break;case"Direction":if(r instanceof Name)switch(r.name){case"L2R":case"R2L":e=r\ +.name;break;default:e="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(r instanceof Name)switch(r.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":e=r.name;break;default:e="CropBox"}break;case"PrintScaling":if(r instanceof Name)switch(r.name){case"None":case"AppDefault":e=r.name;break;default:e="AppDefault"}break;case"Duplex":if(r instanceof Name)switch(r.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":e=r.name;break;\ +default:e="None"}break;case"PrintPageRange":if(Array.isArray(r)&&r.length%2==0){r.every(((e,t,a)=>Number.isInteger(e)&&e>0&&(0===t||e>=a[t-1])&&e<=this.numPages))&&(e=r)}break;case"NumCopies":Number.isInteger(r)&&r>0&&(e=r);break;default:warn(`Ignoring non-standard key in ViewerPreferences: ${a}.`);continue}if(void 0!==e){t??=Object.create(null);t[a]=e}else warn(`Bad value, for key "${a}", in ViewerPreferences: ${r}.`)}return shadow(this,"viewerPreferences",t)}get openAction(){const e=this.#ie.g\ +et("OpenAction"),t=Object.create(null);if(e instanceof Dict){const a=new Dict(this.xref);a.set("A",e);const r={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:a,resultObj:r});Array.isArray(r.dest)?t.dest=r.dest:r.action&&(t.action=r.action)}else Jn(e)&&(t.dest=e);return shadow(this,"openAction",objectSize(t)>0?t:null)}get attachments(){const e=this.#ie.get("Names");let t=null;if(e instanceof Dict&&e.has("EmbeddedFiles")){const a=new NameTree(e.getRaw("EmbeddedFiles"),this.x\ +ref);for(const[e,r]of a.getAll()){const a=new FileSpec(r,this.xref);t??=Object.create(null);t[stringToPDFString(e,!0)]=a.serializable}}return shadow(this,"attachments",t)}get xfaImages(){const e=this.#ie.get("Names");let t=null;if(e instanceof Dict&&e.has("XFAImages")){const a=new NameTree(e.getRaw("XFAImages"),this.xref);for(const[e,r]of a.getAll())if(r instanceof BaseStream){t??=new Map;t.set(stringToPDFString(e,!0),r.getBytes())}}return shadow(this,"xfaImages",t)}#fe(){const e=this.#ie.get("N\ +ames");let t=null;function appendIfJavaScriptDict(e,a){if(!(a instanceof Dict))return;if(!isName(a.get("S"),"JavaScript"))return;let r=a.get("JS");if(r instanceof BaseStream)r=r.getString();else if("string"!=typeof r)return;r=stringToPDFString(r,!0).replaceAll("\\0","");r&&(t||=new Map).set(e,r)}if(e instanceof Dict&&e.has("JavaScript")){const t=new NameTree(e.getRaw("JavaScript"),this.xref);for(const[e,a]of t.getAll())appendIfJavaScriptDict(stringToPDFString(e,!0),a)}const a=this.#ie.get("OpenAc\ +tion");a&&appendIfJavaScriptDict("OpenAction",a);return t}get jsActions(){const e=this.#fe();let t=collectActions(this.xref,this.#ie,we);if(e){t||=Object.create(null);for(const[a,r]of e)a in t?t[a].push(r):t[a]=[r]}return shadow(this,"jsActions",t)}async cleanup(e=!1){clearGlobalCaches();this.globalColorSpaceCache.clear();this.globalImageCache.clear(e);this.pageKidsCountCache.clear();this.pageIndexCache.clear();this.pageDictCache.clear();this.nonBlendModesSet.clear();for(const{dict:e}of await Pr\ +omise.all(this.fontCache))delete e.cacheKey;this.fontCache.clear();this.builtInCMapCache.clear();this.standardFontDataCache.clear();this.systemFontCache.clear()}async getPageDict(e){const t=[this.toplevelPagesDict],a=new RefSet,r=this.#ie.getRaw("Pages");r instanceof Ref&&a.put(r);const i=this.xref,n=this.pageKidsCountCache,s=this.pageIndexCache,o=this.pageDictCache;let c=0;for(;t.length;){const r=t.pop();if(r instanceof Ref){const l=n.get(r);if(l>=0&&c+l<=e){c+=l;continue}if(a.has(r))throw new \ +FormatError("Pages tree contains circular reference.");a.put(r);const h=await(o.get(r)||i.fetchAsync(r));if(h instanceof Dict){let t=h.getRaw("Type");t instanceof Ref&&(t=await i.fetchAsync(t));if(isName(t,"Page")||!h.has("Kids")){n.has(r)||n.put(r,1);s.has(r)||s.put(r,c);if(c===e)return[h,r];c++;continue}}t.push(h);continue}if(!(r instanceof Dict))throw new FormatError("Page dictionary kid reference points to wrong type of object.");const{objId:l}=r;let h=r.getRaw("Count");h instanceof Ref&&(h=\ +await i.fetchAsync(h));if(Number.isInteger(h)&&h>=0){l&&!n.has(l)&&n.put(l,h);if(c+h<=e){c+=h;continue}}let u=r.getRaw("Kids");u instanceof Ref&&(u=await i.fetchAsync(u));if(!Array.isArray(u)){let t=r.getRaw("Type");t instanceof Ref&&(t=await i.fetchAsync(t));if(isName(t,"Page")||!r.has("Kids")){if(c===e)return[r,null];c++;continue}throw new FormatError("Page dictionary kids object is not an array.")}for(let e=u.length-1;e>=0;e--){const a=u[e];t.push(a);r===this.toplevelPagesDict&&a instanceof R\ +ef&&!o.has(a)&&o.put(a,i.fetchAsync(a))}}throw new Error(`Page index ${e} not found.`)}async getAllPageDicts(e=!1){const{ignoreErrors:t}=this.pdfManager.evaluatorOptions,a=[{currentNode:this.toplevelPagesDict,posInKids:0}],r=new RefSet,i=this.#ie.getRaw("Pages");i instanceof Ref&&r.put(i);const n=new Map,s=this.xref,o=this.pageIndexCache;let c=0;function addPageDict(e,t){t&&!o.has(t)&&o.put(t,c);n.set(c++,[e,t])}function addPageError(a){if(a instanceof XRefEntryException&&!e)throw a;if(e&&t&&0==\ +=c){warn(`getAllPageDicts - Skipping invalid first page: "${a}".`);a=Dict.empty}n.set(c++,[a,null])}for(;a.length>0;){const e=a.at(-1),{currentNode:t,posInKids:i}=e;let n=t.getRaw("Kids");if(n instanceof Ref)try{n=await s.fetchAsync(n)}catch(e){addPageError(e);break}if(!Array.isArray(n)){addPageError(new FormatError("Page dictionary kids object is not an array."));break}if(i>=n.length){a.pop();continue}const o=n[i];let c;if(o instanceof Ref){if(r.has(o)){addPageError(new FormatError("Pages tree \ +contains circular reference."));break}r.put(o);try{c=await s.fetchAsync(o)}catch(e){addPageError(e);break}}else c=o;if(!(c instanceof Dict)){addPageError(new FormatError("Page dictionary kid reference points to wrong type of object."));break}let l=c.getRaw("Type");if(l instanceof Ref)try{l=await s.fetchAsync(l)}catch(e){addPageError(e);break}isName(l,"Page")||!c.has("Kids")?addPageDict(c,o instanceof Ref?o:null):a.push({currentNode:c,posInKids:0});e.posInKids++}return n}getPageIndex(e){const t=t\ +his.pageIndexCache.get(e);if(void 0!==t)return Promise.resolve(t);const a=this.xref;let r=0;const next=t=>function pagesBeforeRef(t){let r,i=0;return a.fetchAsync(t).then((function(a){if(isRefsEqual(t,e)&&!isDict(a,"Page")&&!(a instanceof Dict&&!a.has("Type")&&a.has("Contents")))throw new FormatError("The reference does not point to a /Page dictionary.");if(!a)return null;if(!(a instanceof Dict))throw new FormatError("Node must be a dictionary.");r=a.getRaw("Parent");return a.getAsync("Parent")}\ +)).then((function(e){if(!e)return null;if(!(e instanceof Dict))throw new FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;const n=[];let s=!1;for(const r of e){if(!(r instanceof Ref))throw new FormatError("Kid must be a reference.");if(isRefsEqual(r,t)){s=!0;break}n.push(a.fetchAsync(r).then((function(e){if(!(e instanceof Dict))throw new FormatError("Kid node must be a dictionary.");e.has("Count")?i+=e.get("Count"):i++})))}if(!s)throw n\ +ew FormatError("Kid reference not found in parent\'s kids.");return Promise.all(n).then((()=>[i,r]))}))}(t).then((t=>{if(!t){this.pageIndexCache.put(e,r);return r}const[a,i]=t;r+=a;return next(i)}));return next(e)}get baseUrl(){const e=this.#ie.get("URI");if(e instanceof Dict){const t=e.get("Base");if("string"==typeof t){const e=createValidAbsoluteUrl(t,null,{tryConvertEncoding:!0});if(e)return shadow(this,"baseUrl",e.href)}}return shadow(this,"baseUrl",this.pdfManager.docBaseUrl)}static parseDes\ +tDictionary({destDict:e,resultObj:t,docBaseUrl:a=null,docAttachments:r=null}){if(!(e instanceof Dict)){warn("parseDestDictionary: `destDict` must be a dictionary.");return}let i,n,s=e.get("A");if(!(s instanceof Dict))if(e.has("Dest"))s=e.get("Dest");else{s=e.get("AA");s instanceof Dict&&(s.has("D")?s=s.get("D"):s.has("U")&&(s=s.get("U")))}if(s instanceof Dict){const e=s.get("S");if(!(e instanceof Name)){warn("parseDestDictionary: Invalid type in Action dictionary.");return}const a=e.name;switch(\ +a){case"ResetForm":const e=s.get("Flags"),o=!(1&("number"==typeof e?e:0)),c=[],l=[];for(const e of s.get("Fields")||[])e instanceof Ref?l.push(e.toString()):"string"==typeof e&&c.push(stringToPDFString(e));t.resetForm={fields:c,refs:l,include:o};break;case"URI":i=s.get("URI");i instanceof Name&&(i="/"+i.name);break;case"GoTo":n=s.get("D");break;case"Launch":case"GoToR":const h=s.get("F");if(h instanceof Dict){const e=new FileSpec(h,null,!0),{rawFilename:t}=e.serializable;i=t}else"string"==typeof\ + h&&(i=h);const u=fetchRemoteDest(s);u&&"string"==typeof i&&(i=i.split("#",1)[0]+"#"+u);const d=s.get("NewWindow");"boolean"==typeof d&&(t.newWindow=d);break;case"GoToE":const f=s.get("T");let g;if(r&&f instanceof Dict){const e=f.get("R"),t=f.get("N");isName(e,"C")&&"string"==typeof t&&(g=r[stringToPDFString(t,!0)])}if(g){t.attachment=g;const e=fetchRemoteDest(s);e&&(t.attachmentDest=e)}else warn(\'parseDestDictionary - unimplemented "GoToE" action.\');break;case"Named":const p=s.get("N");p instan\ +ceof Name&&(t.action=p.name);break;case"SetOCGState":const m=s.get("State"),b=s.get("PreserveRB");if(!Array.isArray(m)||0===m.length)break;const y=[];for(const e of m)if(e instanceof Name)switch(e.name){case"ON":case"OFF":case"Toggle":y.push(e.name)}else e instanceof Ref&&y.push(e.toString());if(y.length!==m.length)break;t.setOCGState={state:y,preserveRB:"boolean"!=typeof b||b};break;case"JavaScript":const w=s.get("JS");let x;w instanceof BaseStream?x=w.getString():"string"==typeof w&&(x=w);cons\ +t S=x&&recoverJsURL(stringToPDFString(x,!0));if(S){i=S.url;t.newWindow=S.newWindow;break}default:if("JavaScript"===a||"SubmitForm"===a)break;warn(`parseDestDictionary - unsupported action: "${a}".`)}}else e.has("Dest")&&(n=e.get("Dest"));if("string"==typeof i){const e=createValidAbsoluteUrl(i,a,{addDefaultProtocol:!0,tryConvertEncoding:!0});e&&(t.url=e.href);t.unsafeUrl=i}if(n){n instanceof Name&&(n=n.name);"string"==typeof n?t.dest=stringToPDFString(n,!0):Jn(n)&&(t.dest=n)}}}function addChildre\ +n(e,t){if(e instanceof Dict)e=e.getRawValues();else if(e instanceof BaseStream)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(const r of e)((a=r)instanceof Ref||a instanceof Dict||a instanceof BaseStream||Array.isArray(a))&&t.push(r);var a}class ObjectLoader{refSet=new RefSet;constructor(e,t,a){this.dict=e;this.keys=t;this.xref=a}async load(){const{keys:e,dict:t}=this,a=[];for(const r of e){const e=t.getRaw(r);void 0!==e&&a.push(e)}await this.#ge(a);this.refSet=null}async#ge(e){con\ +st t=[],a=[];for(;e.length;){let r=e.pop();if(r instanceof Ref){if(this.refSet.has(r))continue;try{this.refSet.put(r);r=this.xref.fetch(r)}catch(e){if(!(e instanceof MissingDataException)){warn(`ObjectLoader.#walk - requesting all data: "${e}".`);await this.xref.stream.manager.requestAllChunks();return}t.push(r);a.push({begin:e.begin,end:e.end})}}if(r instanceof BaseStream){const e=r.getBaseStreams();if(e){let i=!1;for(const t of e)if(!t.isDataLoaded){i=!0;a.push({begin:t.start,end:t.end})}i&&t.\ +push(r)}}addChildren(r,e)}if(a.length){await this.xref.stream.manager.requestRanges(a);for(const e of t)e instanceof Ref&&this.refSet.remove(e);await this.#ge(t)}}static async load(e,t,a){if(a.stream.isDataLoaded)return;const r=new ObjectLoader(e,t,a);await r.load()}}const Yn=Symbol(),Zn=Symbol(),Qn=Symbol(),es=Symbol(),ts=Symbol(),as=Symbol(),rs=Symbol(),is=Symbol(),ns=Symbol(),ss=Symbol("content"),os=Symbol("data"),cs=Symbol(),ls=Symbol("extra"),hs=Symbol(),us=Symbol(),ds=Symbol(),fs=Symbol(),\ +gs=Symbol(),ps=Symbol(),ms=Symbol(),bs=Symbol(),ys=Symbol(),ws=Symbol(),xs=Symbol(),Ss=Symbol(),As=Symbol(),ks=Symbol(),Cs=Symbol(),vs=Symbol(),Fs=Symbol(),Is=Symbol(),Ts=Symbol(),Os=Symbol(),Ms=Symbol(),Ds=Symbol(),Bs=Symbol(),Rs=Symbol(),Ns=Symbol(),Es=Symbol(),Ls=Symbol(),js=Symbol(),_s=Symbol(),Us=Symbol(),Xs=Symbol(),qs=Symbol(),Hs=Symbol("namespaceId"),Ws=Symbol("nodeName"),zs=Symbol(),$s=Symbol(),Gs=Symbol(),Vs=Symbol(),Ks=Symbol(),Js=Symbol(),Ys=Symbol(),Zs=Symbol(),Qs=Symbol("root"),eo=\ +Symbol(),to=Symbol(),ao=Symbol(),ro=Symbol(),io=Symbol(),no=Symbol(),so=Symbol(),oo=Symbol(),co=Symbol(),lo=Symbol(),ho=Symbol(),uo=Symbol("uid"),fo=Symbol(),go={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e\ +.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>"http://ns.adobe.com/xdp/pdf/"===e},signature:{id:6,check:e=>"http://www.w3.org/2000/09/xmldsig#"===e},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>"http://www.w3.org/1999/XSL/Transform"===e},template:{id:9,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:\ +e=>"http://ns.adobe.com/xdp/"===e},xfdf:{id:12,check:e=>"http://ns.adobe.com/xfdf/"===e},xhtml:{id:13,check:e=>"http://www.w3.org/1999/xhtml"===e},xmpmeta:{id:14,check:e=>"http://ns.adobe.com/xmpmeta/"===e}},po={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/25.4*72,in:e=>72*e,px:e=>e},mo=/([+-]?\\d+\\.?\\d*)(.*)/;function stripQuotes(e){return e.startsWith("\'")||e.startsWith(\'"\')?e.slice(1,-1):e}function getInteger({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const r=parseInt(e,10);return!isNaN(\ +r)&&a(r)?r:t}function getFloat({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const r=parseFloat(e);return!isNaN(r)&&a(r)?r:t}function getKeyword({data:e,defaultValue:t,validate:a}){return e&&a(e=e.trim())?e:t}function getStringOption(e,t){return getKeyword({data:e,defaultValue:t[0],validate:e=>t.includes(e)})}function getMeasurement(e,t="0"){t||="0";if(!e)return getMeasurement(t);const a=e.trim().match(mo);if(!a)return getMeasurement(t);const[,r,i]=a,n=parseFloat(r);if(isNaN(n))r\ +eturn getMeasurement(t);if(0===n)return 0;const s=po[i];return s?s(n):n}function getRatio(e){if(!e)return{num:1,den:1};const t=e.split(":",2).map((e=>parseFloat(e.trim()))).filter((e=>!isNaN(e)));1===t.length&&t.push(1);if(0===t.length)return{num:1,den:1};const[a,r]=t;return{num:a,den:r}}function getRelevant(e){return e?e.trim().split(/\\s+/).map((e=>({excluded:"-"===e[0],viewname:e.substring(1)}))):[]}class HTMLResult{static get FAILURE(){return shadow(this,"FAILURE",new HTMLResult(!1,null,null,\ +null))}static get EMPTY(){return shadow(this,"EMPTY",new HTMLResult(!0,null,null,null))}constructor(e,t,a,r){this.success=e;this.html=t;this.bbox=a;this.breakNode=r}isBreak(){return!!this.breakNode}static breakNode(e){return new HTMLResult(!1,null,null,e)}static success(e,t=null){return new HTMLResult(!0,e,t,null)}}class FontFinder{constructor(e){this.fonts=new Map;this.cache=new Map;this.warned=new Set;this.defaultFont=null;this.add(e)}add(e,t=null){for(const t of e)this.addPdfFont(t);for(const\ + e of this.fonts.values())e.regular||(e.regular=e.italic||e.bold||e.bolditalic);if(!t||0===t.size)return;const a=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(const e of t)this.fonts.set(e,a)}addPdfFont(e){const t=e.cssFontInfo,a=t.fontFamily;let r=this.fonts.get(a);if(!r){r=Object.create(null);this.fonts.set(a,r);this.defaultFont||(this.defaultFont=r)}let i="";const n=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?i=n>=700?"bolditalic":"italic":n>=700&&(i="bold");if(!i){(e.name.include\ +s("Bold")||e.psName?.includes("Bold"))&&(i="bold");(e.name.includes("Italic")||e.name.endsWith("It")||e.psName?.includes("Italic")||e.psName?.endsWith("It"))&&(i+="italic")}i||(i="regular");r[i]=e}getDefault(){return this.defaultFont}find(e,t=!0){let a=this.fonts.get(e)||this.cache.get(e);if(a)return a;const r=/,|-|_| |bolditalic|bold|italic|regular|it/gi;let i=e.replaceAll(r,"");a=this.fonts.get(i);if(a){this.cache.set(e,a);return a}i=i.toLowerCase();const n=[];for(const[e,t]of this.fonts.entri\ +es())e.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(t);if(0===n.length)for(const[,e]of this.fonts.entries())e.regular.name?.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(e);if(0===n.length){i=i.replaceAll(/psmt|mt/gi,"");for(const[e,t]of this.fonts.entries())e.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(t)}if(0===n.length)for(const e of this.fonts.values())e.regular.name?.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(e);if(n.length>=1){1!==n.length&&t&&warn(`XFA - \ +Too many choices to guess the correct font: ${e}`);this.cache.set(e,n[0]);return n[0]}if(t&&!this.warned.has(e)){this.warned.add(e);warn(`XFA - Cannot find the font: ${e}`)}return null}}function selectFont(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}class FontInfo{constructor(e,t,a,r){this.lineHeight=a;this.paraMargin=t||{top:0,bottom:0,left:0,right:0};if(!e){[this.pdfFont,this.xfaFont]=this.defaultFont(r);return}this.xfaFont={typefa\ +ce:e.typeface,posture:e.posture,weight:e.weight,size:e.size,letterSpacing:e.letterSpacing};const i=r.find(e.typeface);if(i){this.pdfFont=selectFont(e,i);this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(r))}else[this.pdfFont,this.xfaFont]=this.defaultFont(r)}defaultFont(e){const t=e.find("Helvetica",!1)||e.find("Myriad Pro",!1)||e.find("Arial",!1)||e.getDefault();if(t?.regular){const e=t.regular;return[e,{typeface:e.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letter\ +Spacing:0}]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}}class FontSelector{constructor(e,t,a,r){this.fontFinder=r;this.stack=[new FontInfo(e,t,a,r)]}pushData(e,t,a){const r=this.stack.at(-1);for(const t of["typeface","posture","weight","size","letterSpacing"])e[t]||(e[t]=r.xfaFont[t]);for(const e of["top","bottom","left","right"])isNaN(t[e])&&(t[e]=r.paraMargin[e]);const i=new FontInfo(e,t,a||r.lineHeight,this.fontFinder);i.pdfFont||(i.pdfFont=r.pd\ +fFont);this.stack.push(i)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}}class TextMeasure{constructor(e,t,a,r){this.glyphs=[];this.fontSelector=new FontSelector(e,t,a,r);this.extraHeight=0}pushData(e,t,a){this.fontSelector.pushData(e,t,a)}popFont(e){return this.fontSelector.popFont()}addPara(){const e=this.fontSelector.topFont();this.extraHeight+=e.paraMargin.top+e.paraMargin.bottom}addString(e){if(!e)return;const t=this.fontSelector.topFont(),a=t.xfaFont.size;if(t.pdfFont){cons\ +t r=t.xfaFont.letterSpacing,i=t.pdfFont,n=i.lineHeight||1.2,s=t.lineHeight||Math.max(1.2,n)*a,o=n-(void 0===i.lineGap?.2:i.lineGap),c=Math.max(1,o)*a,l=a/1e3,h=i.defaultWidth||i.charsToGlyphs(" ")[0].width;for(const t of e.split(/[\\u2029\\n]/)){const e=i.encodeString(t).join(""),a=i.charsToGlyphs(e);for(const e of a){const t=e.width||h;this.glyphs.push([t*l+r,s,c,e.unicode,!1])}this.glyphs.push([0,0,0,"\\n",!0])}this.glyphs.pop()}else{for(const t of e.split(/[\\u2029\\n]/)){for(const e of t.split(""\ +))this.glyphs.push([a,1.2*a,a,e,!1]);this.glyphs.push([0,0,0,"\\n",!0])}this.glyphs.pop()}}compute(e){let t=-1,a=0,r=0,i=0,n=0,s=0,o=!1,c=!0;for(let l=0,h=this.glyphs.length;l<h;l++){const[h,u,d,f,g]=this.glyphs[l],p=" "===f,m=c?d:u;if(g){r=Math.max(r,n);n=0;i+=s;s=m;t=-1;a=0;c=!1}else if(p)if(n+h>e){r=Math.max(r,n);n=0;i+=s;s=m;t=-1;a=0;o=!0;c=!1}else{s=Math.max(m,s);a=n;n+=h;t=l}else if(n+h>e){i+=s;s=m;if(-1!==t){l=t;r=Math.max(r,a);n=0;t=-1;a=0}else{r=Math.max(r,n);n=h}o=!0;c=!1}else{n+=h;s=Ma\ +th.max(m,s)}}r=Math.max(r,n);i+=s+this.extraHeight;return{width:1.02*r,height:i,isBroken:o}}}const bo=/^[^.[]+/,yo=/^[^\\]]+/,wo=0,xo=1,So=2,Ao=3,ko=4,Co=new Map([["$data",(e,t)=>e.datasets?e.datasets.data:e],["$record",(e,t)=>(e.datasets?e.datasets.data:e)[Ss]()[0]],["$template",(e,t)=>e.template],["$connectionSet",(e,t)=>e.connectionSet],["$form",(e,t)=>e.form],["$layout",(e,t)=>e.layout],["$host",(e,t)=>e.host],["$dataWindow",(e,t)=>e.dataWindow],["$event",(e,t)=>e.event],["!",(e,t)=>e.dataset\ +s],["$xfa",(e,t)=>e],["xfa",(e,t)=>e],["$",(e,t)=>t]]),vo=new WeakMap;function parseExpression(e,t,a=!0){let r=e.match(bo);if(!r)return null;let[i]=r;const n=[{name:i,cacheName:"."+i,index:0,js:null,formCalc:null,operator:wo}];let s=i.length;for(;s<e.length;){const c=s;if("["===e.charAt(s++)){r=e.slice(s).match(yo);if(!r){warn("XFA - Invalid index in SOM expression");return null}n.at(-1).index="*"===(o=(o=r[0]).trim())?1/0:parseInt(o,10)||0;s+=r[0].length+1;continue}let l;switch(e.charAt(s)){cas\ +e".":if(!t)return null;s++;l=xo;break;case"#":s++;l=So;break;case"[":if(a){warn("XFA - SOM expression contains a FormCalc subexpression which is not supported for now.");return null}l=Ao;break;case"(":if(a){warn("XFA - SOM expression contains a JavaScript subexpression which is not supported for now.");return null}l=ko;break;default:l=wo}r=e.slice(s).match(bo);if(!r)break;[i]=r;s+=i.length;n.push({name:i,cacheName:e.slice(c,s),operator:l,index:0,js:null,formCalc:null})}var o;return n}function se\ +archNode(e,t,a,r=!0,i=!0){const n=parseExpression(a,r);if(!n)return null;const s=Co.get(n[0].name);let o,c=0;if(s){o=!0;e=[s(e,t)];c=1}else{o=null===t;e=[t||e]}for(let a=n.length;c<a;c++){const{name:a,cacheName:r,operator:s,index:l}=n[c],h=[];for(const t of e){if(!t.isXFAObject)continue;let e,n;if(i){n=vo.get(t);if(!n){n=new Map;vo.set(t,n)}e=n.get(r)}if(!e){switch(s){case wo:e=t[ms](a,!1);break;case xo:e=t[ms](a,!0);break;case So:e=t[ps](a);e=e.isXFAObjectArray?e.children:[e]}i&&n.set(r,e)}e.le\ +ngth>0&&h.push(e)}if(0!==h.length||o||0!==c)e=isFinite(l)?h.filter((e=>l<e.length)).map((e=>e[l])):h.flat();else{const a=t[vs]();if(!(t=a))return null;c=-1;e=[t]}}return 0===e.length?null:e}function createDataNode(e,t,a){const r=parseExpression(a);if(!r)return null;if(r.some((e=>e.operator===xo)))return null;const i=Co.get(r[0].name);let n=0;if(i){e=i(e,t);n=1}else e=t||e;for(let t=r.length;n<t;n++){const{name:t,operator:a,index:i}=r[n];if(!isFinite(i)){r[n].index=0;return e.createNodes(r.slice(\ +n))}let s;switch(a){case wo:s=e[ms](t,!1);break;case xo:s=e[ms](t,!0);break;case So:s=e[ps](t);s=s.isXFAObjectArray?s.children:[s]}if(0===s.length)return e.createNodes(r.slice(n));if(!(i<s.length)){r[n].index=i-s.length;return e.createNodes(r.slice(n))}{const t=s[i];if(!t.isXFAObject){warn("XFA - Cannot create a node.");return null}e=t}}return null}const Fo=Symbol(),Io=Symbol(),Oo=Symbol(),Mo=Symbol("_children"),Do=Symbol(),Bo=Symbol(),Ro=Symbol(),No=Symbol(),Eo=Symbol(),Po=Symbol(),Lo=Symbol(),\ +jo=Symbol(),_o=Symbol(),Uo=Symbol("parent"),Xo=Symbol(),qo=Symbol(),Ho=Symbol();let Wo=0;const zo=go.datasets.id;class XFAObject{constructor(e,t,a=!1){this[Hs]=e;this[Ws]=t;this[Lo]=a;this[Uo]=null;this[Mo]=[];this[uo]=`${t}${Wo++}`;this[Is]=null}get isXFAObject(){return!0}get isXFAObjectArray(){return!1}createNodes(e){let t=this,a=null;for(const{name:r,index:i}of e){for(let e=0,n=isFinite(i)?i:0;e<=n;e++){const e=t[Hs]===zo?-1:t[Hs];a=new XmlObject(e,r);t[Qn](a)}t=a}return a}[$s](e){if(!this[Lo\ +]||!this[Gs](e))return!1;const t=e[Ws],a=this[t];if(!(a instanceof XFAObjectArray)){null!==a&&this[Zs](a);this[t]=e;this[Qn](e);return!0}if(a.push(e)){this[Qn](e);return!0}let r="";this.id?r=` (id: ${this.id})`:this.name&&(r=` (name: ${this.name} ${this.h.value})`);warn(`XFA - node "${this[Ws]}"${r} has already enough "${t}"!`);return!1}[Gs](e){return this.hasOwnProperty(e[Ws])&&e[Hs]===this[Hs]}[Ls](){return!1}[Yn](){return!1}[Bs](){return!1}[Rs](){return!1}[Js](){this.para&&this[Fs]()[ls].para\ +Stack.pop()}[Ys](){this[Fs]()[ls].paraStack.push(this.para)}[ao](e){this.id&&this[Hs]===go.template.id&&e.set(this.id,this)}[Fs](){return this[Is].template}[js](){return!1}[_s](){return!1}[Qn](e){e[Uo]=this;this[Mo].push(e);!e[Is]&&this[Is]&&(e[Is]=this[Is])}[Zs](e){const t=this[Mo].indexOf(e);this[Mo].splice(t,1)}[Ts](){return this.hasOwnProperty("value")}[io](e){}[Vs](e){}[hs](){}[ts](e){delete this[Lo];if(this[rs]){e.clean(this[rs]);delete this[rs]}}[Ms](e){return this[Mo].indexOf(e)}[Ds](e,t\ +){t[Uo]=this;this[Mo].splice(e,0,t);!t[Is]&&this[Is]&&(t[Is]=this[Is])}[Us](){return!this.name}[qs](){return""}[so](){return 0===this[Mo].length?this[ss]:this[Mo].map((e=>e[so]())).join("")}get[Oo](){const e=Object.getPrototypeOf(this);if(!e._attributes){const t=e._attributes=new Set;for(const e of Object.getOwnPropertyNames(this)){if(null===this[e]||this[e]instanceof XFAObject||this[e]instanceof XFAObjectArray)break;t.add(e)}}return shadow(this,Oo,e._attributes)}[Es](e){let t=this;for(;t;){if(t\ +===e)return!0;t=t[vs]()}return!1}[vs](){return this[Uo]}[Cs](){return this[vs]()}[Ss](e=null){return e?this[e]:this[Mo]}[cs](){const e=Object.create(null);this[ss]&&(e.$content=this[ss]);for(const t of Object.getOwnPropertyNames(this)){const a=this[t];null!==a&&(a instanceof XFAObject?e[t]=a[cs]():a instanceof XFAObjectArray?a.isEmpty()||(e[t]=a.dump()):e[t]=a)}return e}[ho](){return null}[co](){return HTMLResult.EMPTY}*[As](){for(const e of this[Ss]())yield e}*[No](e,t){for(const a of this[As](\ +))if(!e||t===e.has(a[Ws])){const e=this[gs](),t=a[co](e);t.success||(this[ls].failingNode=a);yield t}}[us](){return null}[Zn](e,t){this[ls].children.push(e)}[gs](){}[es]({filter:e=null,include:t=!0}){if(this[ls].generator){const e=this[gs](),t=this[ls].failingNode[co](e);if(!t.success)return t;t.html&&this[Zn](t.html,t.bbox);delete this[ls].failingNode}else this[ls].generator=this[No](e,t);for(;;){const e=this[ls].generator.next();if(e.done)break;const t=e.value;if(!t.success)return t;t.html&&th\ +is[Zn](t.html,t.bbox)}this[ls].generator=null;return HTMLResult.EMPTY}[ro](e){this[qo]=new Set(Object.keys(e))}[Po](e){const t=this[Oo],a=this[qo];return[...e].filter((e=>t.has(e)&&!a.has(e)))}[eo](e,t=new Set){for(const a of this[Mo])a[Xo](e,t)}[Xo](e,t){const a=this[Eo](e,t);a?this[Fo](a,e,t):this[eo](e,t)}[Eo](e,t){const{use:a,usehref:r}=this;if(!a&&!r)return null;let i=null,n=null,s=null,o=a;if(r){o=r;r.startsWith("#som(")&&r.endsWith(")")?n=r.slice(5,-1):r.startsWith(".#som(")&&r.endsWith("\ +)")?n=r.slice(6,-1):r.startsWith("#")?s=r.slice(1):r.startsWith(".#")&&(s=r.slice(2))}else a.startsWith("#")?s=a.slice(1):n=a;this.use=this.usehref="";if(s)i=e.get(s);else{i=searchNode(e.get(Qs),this,n,!0,!1);i&&(i=i[0])}if(!i){warn(`XFA - Invalid prototype reference: ${o}.`);return null}if(i[Ws]!==this[Ws]){warn(`XFA - Incompatible prototype: ${i[Ws]} !== ${this[Ws]}.`);return null}if(t.has(i)){warn("XFA - Cycle detected in prototypes use.");return null}t.add(i);const c=i[Eo](e,t);c&&i[Fo](c,e,\ +t);i[eo](e,t);t.delete(i);return i}[Fo](e,t,a){if(a.has(e)){warn("XFA - Cycle detected in prototypes use.");return}!this[ss]&&e[ss]&&(this[ss]=e[ss]);new Set(a).add(e);for(const t of this[Po](e[qo])){this[t]=e[t];this[qo]&&this[qo].add(t)}for(const r of Object.getOwnPropertyNames(this)){if(this[Oo].has(r))continue;const i=this[r],n=e[r];if(i instanceof XFAObjectArray){for(const e of i[Mo])e[Xo](t,a);for(let r=i[Mo].length,s=n[Mo].length;r<s;r++){const n=e[Mo][r][is]();if(!i.push(n))break;n[Uo]=t\ +his;this[Mo].push(n);n[Xo](t,a)}}else if(null===i){if(null!==n){const e=n[is]();e[Uo]=this;this[r]=e;this[Mo].push(e);e[Xo](t,a)}}else{i[eo](t,a);n&&i[Fo](n,t,a)}}}static[Do](e){return Array.isArray(e)?e.map((e=>XFAObject[Do](e))):"object"==typeof e&&null!==e?Object.assign({},e):e}[is](){const e=Object.create(Object.getPrototypeOf(this));for(const t of Object.getOwnPropertySymbols(this))try{e[t]=this[t]}catch{shadow(e,t,this[t])}e[uo]=`${e[Ws]}${Wo++}`;e[Mo]=[];for(const t of Object.getOwnProper\ +tyNames(this)){if(this[Oo].has(t)){e[t]=XFAObject[Do](this[t]);continue}const a=this[t];e[t]=a instanceof XFAObjectArray?new XFAObjectArray(a[jo]):null}for(const t of this[Mo]){const a=t[Ws],r=t[is]();e[Mo].push(r);r[Uo]=e;null===e[a]?e[a]=r:e[a][Mo].push(r)}return e}[Ss](e=null){return e?this[Mo].filter((t=>t[Ws]===e)):this[Mo]}[ps](e){return this[e]}[ms](e,t,a=!0){return Array.from(this[bs](e,t,a))}*[bs](e,t,a=!0){if("parent"!==e){for(const a of this[Mo]){a[Ws]===e&&(yield a);a.name===e&&(yiel\ +d a);(t||a[Us]())&&(yield*a[bs](e,t,!1))}a&&this[Oo].has(e)&&(yield new XFAAttribute(this,e,this[e]))}else yield this[Uo]}}class XFAObjectArray{constructor(e=1/0){this[jo]=e;this[Mo]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(e){if(this[Mo].length<=this[jo]){this[Mo].push(e);return!0}warn(`XFA - node "${e[Ws]}" accepts no more than ${this[jo]} children`);return!1}isEmpty(){return 0===this[Mo].length}dump(){return 1===this[Mo].length?this[Mo][0][cs]():this[Mo].map((e=>e[cs\ +]()))}[is](){const e=new XFAObjectArray(this[jo]);e[Mo]=this[Mo].map((e=>e[is]()));return e}get children(){return this[Mo]}clear(){this[Mo].length=0}}class XFAAttribute{constructor(e,t,a){this[Uo]=e;this[Ws]=t;this[ss]=a;this[ns]=!1;this[uo]="attribute"+Wo++}[vs](){return this[Uo]}[Ns](){return!0}[ys](){return this[ss].trim()}[io](e){e=e.value||"";this[ss]=e.toString()}[so](){return this[ss]}[Es](e){return this[Uo]===e||this[Uo][Es](e)}}class XmlObject extends XFAObject{constructor(e,t,a={}){sup\ +er(e,t);this[ss]="";this[Bo]=null;if("#text"!==t){const e=new Map;this[Io]=e;for(const[t,r]of Object.entries(a))e.set(t,new XFAAttribute(this,t,r));if(a.hasOwnProperty(zs)){const e=a[zs].xfa.dataNode;void 0!==e&&("dataGroup"===e?this[Bo]=!1:"dataValue"===e&&(this[Bo]=!0))}}this[ns]=!1}[lo](e){const t=this[Ws];if("#text"===t){e.push(encodeToXmlString(this[ss]));return}const a=utf8StringToString(t),r=this[Hs]===zo?"xfa:":"";e.push(`<${r}${a}`);for(const[t,a]of this[Io].entries()){const r=utf8Strin\ +gToString(t);e.push(` ${r}="${encodeToXmlString(a[ss])}"`)}null!==this[Bo]&&(this[Bo]?e.push(\' xfa:dataNode="dataValue"\'):e.push(\' xfa:dataNode="dataGroup"\'));if(this[ss]||0!==this[Mo].length){e.push(">");if(this[ss])"string"==typeof this[ss]?e.push(encodeToXmlString(this[ss])):this[ss][lo](e);else for(const t of this[Mo])t[lo](e);e.push(`</${r}${a}>`)}else e.push("/>")}[$s](e){if(this[ss]){const e=new XmlObject(this[Hs],"#text");this[Qn](e);e[ss]=this[ss];this[ss]=""}this[Qn](e);return!0}[Vs](e\ +){this[ss]+=e}[hs](){if(this[ss]&&this[Mo].length>0){const e=new XmlObject(this[Hs],"#text");this[Qn](e);e[ss]=this[ss];delete this[ss]}}[co](){return"#text"===this[Ws]?HTMLResult.success({name:"#text",value:this[ss]}):HTMLResult.EMPTY}[Ss](e=null){return e?this[Mo].filter((t=>t[Ws]===e)):this[Mo]}[fs](){return this[Io]}[ps](e){const t=this[Io].get(e);return void 0!==t?t:this[Ss](e)}*[bs](e,t){const a=this[Io].get(e);a&&(yield a);for(const a of this[Mo]){a[Ws]===e&&(yield a);t&&(yield*a[bs](e,t)\ +)}}*[ds](e,t){const a=this[Io].get(e);!a||t&&a[ns]||(yield a);for(const a of this[Mo])yield*a[ds](e,t)}*[xs](e,t,a){for(const r of this[Mo]){r[Ws]!==e||a&&r[ns]||(yield r);t&&(yield*r[xs](e,t,a))}}[Ns](){return null===this[Bo]?0===this[Mo].length||this[Mo][0][Hs]===go.xhtml.id:this[Bo]}[ys](){return null===this[Bo]?0===this[Mo].length?this[ss].trim():this[Mo][0][Hs]===go.xhtml.id?this[Mo][0][so]().trim():null:this[ss].trim()}[io](e){e=e.value||"";this[ss]=e.toString()}[cs](e=!1){const t=Object.c\ +reate(null);e&&(t.$ns=this[Hs]);this[ss]&&(t.$content=this[ss]);t.$name=this[Ws];t.children=[];for(const a of this[Mo])t.children.push(a[cs](e));t.attributes=Object.create(null);for(const[e,a]of this[Io])t.attributes[e]=a[ss];return t}}class ContentObject extends XFAObject{constructor(e,t){super(e,t);this[ss]=""}[Vs](e){this[ss]+=e}[hs](){}}class OptionObject extends ContentObject{constructor(e,t,a){super(e,t);this[_o]=a}[hs](){this[ss]=getKeyword({data:this[ss],defaultValue:this[_o][0],validate\ +:e=>this[_o].includes(e)})}[ts](e){super[ts](e);delete this[_o]}}class StringObject extends ContentObject{[hs](){this[ss]=this[ss].trim()}}class IntegerObject extends ContentObject{constructor(e,t,a,r){super(e,t);this[Ro]=a;this[Ho]=r}[hs](){this[ss]=getInteger({data:this[ss],defaultValue:this[Ro],validate:this[Ho]})}[ts](e){super[ts](e);delete this[Ro];delete this[Ho]}}class Option01 extends IntegerObject{constructor(e,t){super(e,t,0,(e=>1===e))}}class Option10 extends IntegerObject{constructor\ +(e,t){super(e,t,1,(e=>0===e))}}function measureToString(e){return"string"==typeof e?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}const $o={anchorType(e,t){const a=e[Cs]();if(a&&(!a.layout||"position"===a.layout)){"transform"in t||(t.transform="");switch(e.anchorType){case"bottomCenter":t.transform+="translate(-50%, -100%)";break;case"bottomLeft":t.transform+="translate(0,-100%)";break;case"bottomRight":t.transform+="translate(-100%,-100%)";break;case"middleCenter":t.transform+="transla\ +te(-50%,-50%)";break;case"middleLeft":t.transform+="translate(0,-50%)";break;case"middleRight":t.transform+="translate(-100%,-50%)";break;case"topCenter":t.transform+="translate(-50%,0)";break;case"topRight":t.transform+="translate(-100%,0)"}}},dimensions(e,t){const a=e[Cs]();let r=e.w;const i=e.h;if(a.layout?.includes("row")){const t=a[ls],i=e.colSpan;let n;if(-1===i){n=Math.sumPrecise(t.columnWidths.slice(t.currentColumn));t.currentColumn=0}else{n=Math.sumPrecise(t.columnWidths.slice(t.current\ +Column,t.currentColumn+i));t.currentColumn=(t.currentColumn+e.colSpan)%t.columnWidths.length}isNaN(n)||(r=e.w=n)}t.width=""!==r?measureToString(r):"auto";t.height=""!==i?measureToString(i):"auto"},position(e,t){const a=e[Cs]();if(!a?.layout||"position"===a.layout){t.position="absolute";t.left=measureToString(e.x);t.top=measureToString(e.y)}},rotate(e,t){if(e.rotate){"transform"in t||(t.transform="");t.transform+=`rotate(-${e.rotate}deg)`;t.transformOrigin="top left"}},presence(e,t){switch(e.pres\ +ence){case"invisible":t.visibility="hidden";break;case"hidden":case"inactive":t.display="none"}},hAlign(e,t){if("para"===e[Ws])switch(e.hAlign){case"justifyAll":t.textAlign="justify-all";break;case"radix":t.textAlign="left";break;default:t.textAlign=e.hAlign}else switch(e.hAlign){case"left":t.alignSelf="start";break;case"center":t.alignSelf="center";break;case"right":t.alignSelf="end"}},margin(e,t){e.margin&&(t.margin=e.margin[ho]().margin)}};function setMinMaxDimensions(e,t){if("position"===e[C\ +s]().layout){e.minW>0&&(t.minWidth=measureToString(e.minW));e.maxW>0&&(t.maxWidth=measureToString(e.maxW));e.minH>0&&(t.minHeight=measureToString(e.minH));e.maxH>0&&(t.maxHeight=measureToString(e.maxH))}}function layoutText(e,t,a,r,i,n){const s=new TextMeasure(t,a,r,i);"string"==typeof e?s.addString(e):e[Ks](s);return s.compute(n)}function layoutNode(e,t){let a=null,r=null,i=!1;if((!e.w||!e.h)&&e.value){let n=0,s=0;if(e.margin){n=e.margin.leftInset+e.margin.rightInset;s=e.margin.topInset+e.margi\ +n.bottomInset}let o=null,c=null;if(e.para){c=Object.create(null);o=""===e.para.lineHeight?null:e.para.lineHeight;c.top=""===e.para.spaceAbove?0:e.para.spaceAbove;c.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow;c.left=""===e.para.marginLeft?0:e.para.marginLeft;c.right=""===e.para.marginRight?0:e.para.marginRight}let l=e.font;if(!l){const t=e[Fs]();let a=e[vs]();for(;a&&a!==t;){if(a.font){l=a.font;break}a=a[vs]()}}const h=(e.w||t.width)-n,u=e[Is].fontFinder;if(e.value.exData&&e.value.exData[ss\ +]&&"text/html"===e.value.exData.contentType){const t=layoutText(e.value.exData[ss],l,c,o,u,h);r=t.width;a=t.height;i=t.isBroken}else{const t=e.value[so]();if(t){const e=layoutText(t,l,c,o,u,h);r=e.width;a=e.height;i=e.isBroken}}null===r||e.w||(r+=n);null===a||e.h||(a+=s)}return{w:r,h:a,isBroken:i}}function computeBbox(e,t,a){let r;if(""!==e.w&&""!==e.h)r=[e.x,e.y,e.w,e.h];else{if(!a)return null;let i=e.w;if(""===i){if(0===e.maxW){const t=e[Cs]();i="position"===t.layout&&""!==t.w?0:e.minW}else i=\ +Math.min(e.maxW,a.width);t.attributes.style.width=measureToString(i)}let n=e.h;if(""===n){if(0===e.maxH){const t=e[Cs]();n="position"===t.layout&&""!==t.h?0:e.minH}else n=Math.min(e.maxH,a.height);t.attributes.style.height=measureToString(n)}r=[e.x,e.y,i,n]}return r}function fixDimensions(e){const t=e[Cs]();if(t.layout?.includes("row")){const a=t[ls],r=e.colSpan;let i;i=-1===r?Math.sumPrecise(a.columnWidths.slice(a.currentColumn)):Math.sumPrecise(a.columnWidths.slice(a.currentColumn,a.currentCol\ +umn+r));isNaN(i)||(e.w=i)}t.layout&&"position"!==t.layout&&(e.x=e.y=0);"table"===e.layout&&""===e.w&&Array.isArray(e.columnWidths)&&(e.w=Math.sumPrecise(e.columnWidths))}function layoutClass(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}}function toStyle(e,...t){const a=Object.create(null);for(const r of t){const t=e[r\ +];if(null!==t)if($o.hasOwnProperty(r))$o[r](e,a);else if(t instanceof XFAObject){const e=t[ho]();e?Object.assign(a,e):warn(`(DEBUG) - XFA - style for ${r} not implemented yet`)}}return a}function createWrapper(e,t){const{attributes:a}=t,{style:r}=a,i={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};a.class.push("xfaWrapped");if(e.border){const{widths:a,insets:n}=e.border[ls];let s,o,c=n[0],l=n[3];const h=n[0]+n[2],u=n[1]+n[3];switch(e.border.hand){case"even":c\ +-=a[0]/2;l-=a[3]/2;s=`calc(100% + ${(a[1]+a[3])/2-u}px)`;o=`calc(100% + ${(a[0]+a[2])/2-h}px)`;break;case"left":c-=a[0];l-=a[3];s=`calc(100% + ${a[1]+a[3]-u}px)`;o=`calc(100% + ${a[0]+a[2]-h}px)`;break;case"right":s=u?`calc(100% - ${u}px)`:"100%";o=h?`calc(100% - ${h}px)`:"100%"}const d=["xfaBorder"];isPrintOnly(e.border)&&d.push("xfaPrintOnly");const f={name:"div",attributes:{class:d,style:{top:`${c}px`,left:`${l}px`,width:s,height:o}},children:[]};for(const e of["border","borderWidth","borderC\ +olor","borderRadius","borderStyle"])if(void 0!==r[e]){f.attributes.style[e]=r[e];delete r[e]}i.children.push(f,t)}else i.children.push(t);for(const e of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])if(void 0!==r[e]){i.attributes.style[e]=r[e];delete r[e]}i.attributes.style.position="absolute"===r.position?"absolute":"relative";delete r.position;if(r.alignSelf){i.attributes.style.alignSelf=r.a\ +lignSelf;delete r.alignSelf}return i}function fixTextIndent(e){const t=getMeasurement(e.textIndent,"0px");if(t>=0)return;const a="padding"+("left"===("right"===e.textAlign?"right":"left")?"Left":"Right"),r=getMeasurement(e[a],"0px");e[a]=r-t+"px"}function setAccess(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}}function isPrintOnly(e){return e.relevant.length>0&&!e.relevant[0].excluded\ +&&"print"===e.relevant[0].viewname}function getCurrentPara(e){const t=e[Fs]()[ls].paraStack;return t.length?t.at(-1):null}function setPara(e,t,a){if(a.attributes.class?.includes("xfaRich")){if(t){""===e.h&&(t.height="auto");""===e.w&&(t.width="auto")}const r=getCurrentPara(e);if(r){const e=a.attributes.style;e.display="flex";e.flexDirection="column";switch(r.vAlign){case"top":e.justifyContent="start";break;case"bottom":e.justifyContent="end";break;case"middle":e.justifyContent="center"}const t=r\ +[ho]();for(const[a,r]of Object.entries(t))a in e||(e[a]=r)}}}function setFontFamily(e,t,a,r){if(!a){delete r.fontFamily;return}const i=stripQuotes(e.typeface);r.fontFamily=`"${i}"`;const n=a.find(i);if(n){const{fontFamily:a}=n.regular.cssFontInfo;a!==i&&(r.fontFamily=`"${a}"`);const s=getCurrentPara(t);if(s&&""!==s.lineHeight)return;if(r.lineHeight)return;const o=selectFont(e,n);o&&(r.lineHeight=Math.max(1.2,o.lineHeight))}}function fixURL(e){const t=createValidAbsoluteUrl(e,null,{addDefaultProt\ +ocol:!0,tryConvertEncoding:!0});return t?t.href:null}function createLine(e,t){return{name:"div",attributes:{class:["lr-tb"===e.layout?"xfaLr":"xfaRl"]},children:t}}function flushHTML(e){if(!e[ls])return null;const t={name:"div",attributes:e[ls].attributes,children:e[ls].children};if(e[ls].failingNode){const a=e[ls].failingNode[us]();a&&(e.layout.endsWith("-tb")?t.children.push(createLine(e,[a])):t.children.push(a))}return 0===t.children.length?null:t}function addHTML(e,t,a){const r=e[ls],i=r.ava\ +ilableSpace,[n,s,o,c]=a;switch(e.layout){case"position":r.width=Math.max(r.width,n+o);r.height=Math.max(r.height,s+c);r.children.push(t);break;case"lr-tb":case"rl-tb":if(!r.line||1===r.attempt){r.line=createLine(e,[]);r.children.push(r.line);r.numberInLine=0}r.numberInLine+=1;r.line.children.push(t);if(0===r.attempt){r.currentWidth+=o;r.height=Math.max(r.height,r.prevHeight+c)}else{r.currentWidth=o;r.prevHeight=r.height;r.height+=c;r.attempt=0}r.width=Math.max(r.width,r.currentWidth);break;case"\ +rl-row":case"row":{r.children.push(t);r.width+=o;r.height=Math.max(r.height,c);const e=measureToString(r.height);for(const t of r.children)t.attributes.style.height=e;break}case"table":case"tb":r.width=MathClamp(o,r.width,i.width);r.height+=c;r.children.push(t)}}function getAvailableSpace(e){const t=e[ls].availableSpace,a=e.margin?e.margin.topInset+e.margin.bottomInset:0,r=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[ls].attempt?{width:t\ +.width-r-e[ls].currentWidth,height:t.height-a-e[ls].prevHeight}:{width:t.width-r,height:t.height-a-e[ls].height};case"rl-row":case"row":return{width:Math.sumPrecise(e[ls].columnWidths.slice(e[ls].currentColumn)),height:t.height-r};case"table":case"tb":return{width:t.width-r,height:t.height-a-e[ls].height};default:return t}}function checkDimensions(e,t){if(null===e[Fs]()[ls].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;const a=e[Cs](),r=a[ls]?.attempt||0,[,i,n,s]=function getTransforme\ +dBBox(e){let t,a,r=""===e.w?NaN:e.w,i=""===e.h?NaN:e.h,[n,s]=[0,0];switch(e.anchorType||""){case"bottomCenter":[n,s]=[r/2,i];break;case"bottomLeft":[n,s]=[0,i];break;case"bottomRight":[n,s]=[r,i];break;case"middleCenter":[n,s]=[r/2,i/2];break;case"middleLeft":[n,s]=[0,i/2];break;case"middleRight":[n,s]=[r,i/2];break;case"topCenter":[n,s]=[r/2,0];break;case"topRight":[n,s]=[r,0]}switch(e.rotate||0){case 0:[t,a]=[-n,-s];break;case 90:[t,a]=[-s,n];[r,i]=[i,-r];break;case 180:[t,a]=[n,s];[r,i]=[-r,-\ +i];break;case 270:[t,a]=[s,-n];[r,i]=[-i,r]}return[e.x+t+Math.min(0,r),e.y+a+Math.min(0,i),Math.abs(r),Math.abs(i)]}(e);switch(a.layout){case"lr-tb":case"rl-tb":return 0===r?e[Fs]()[ls].noLayoutFailure?""!==e.w?Math.round(n-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(s-t.height)>2)&&(""!==e.w?Math.round(n-t.width)<=2||0===a[ls].numberInLine&&t.height>2:t.width>2):!!e[Fs]()[ls].noLayoutFailure||!(""!==e.h&&Math.round(s-t.height)>2)&&((""===e.w||Math.round(n-t.width)<=2||!a[_s]())&&t.height>2);ca\ +se"table":case"tb":return!!e[Fs]()[ls].noLayoutFailure||(""===e.h||e[js]()?(""===e.w||Math.round(n-t.width)<=2||!a[_s]())&&t.height>2:Math.round(s-t.height)<=2);case"position":if(e[Fs]()[ls].noLayoutFailure)return!0;if(""===e.h||Math.round(s+i-t.height)<=2)return!0;return s+i>e[Fs]()[ls].currentContentArea.h;case"rl-row":case"row":return!!e[Fs]()[ls].noLayoutFailure||(""===e.h||Math.round(s-t.height)<=2);default:return!0}}const Go=go.template.id,Vo="http://www.w3.org/2000/svg",Ko=/^H(\\d+)$/,Jo=n\ +ew Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),Yo=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"image/png"]];function getBorderDims(e){if(!e||!e.border)return{w:0,h:0};const t=e.border[ws]();return t?{w:t.widths[0]+t.widths[2]+t.insets[0]+t.\ +insets[2],h:t.widths[1]+t.widths[3]+t.insets[1]+t.insets[3]}:{w:0,h:0}}function hasMargin(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function _setValue(e,t){if(!e.value){const t=new Value({});e[Qn](t);e.value=t}e.value[io](t)}function*getContainedChildren(e){for(const t of e[Ss]())t instanceof SubformSet?yield*t[As]():yield t}function isRequired(e){return"error"===e.validate?.nullTest}function setTabIndex(e){for(;e;){if(!e.traversal){e[\ +no]=e[vs]()[no];return}if(e[no])return;let t=null;for(const a of e.traversal[Ss]())if("next"===a.operation){t=a;break}if(!t||!t.ref){e[no]=e[vs]()[no];return}const a=e[Fs]();e[no]=++a[no];const r=a[to](t.ref,e);if(!r)return;e=r[0]}}function applyAssist(e,t){const a=e.assist;if(a){const e=a[co]();e&&(t.title=e);const r=a.role.match(Ko);if(r){const e="heading",a=r[1];t.role=e;t["aria-level"]=a}}if("table"===e.layout)t.role="table";else if("row"===e.layout)t.role="row";else{const a=e[vs]();"row"===\ +a.layout&&(t.role="TH"===a.assist?.role?"columnheader":"cell")}}function ariaLabel(e){if(!e.assist)return null;const t=e.assist;return t.speak&&""!==t.speak[ss]?t.speak[ss]:t.toolTip?t.toolTip[ss]:null}function valueToHtml(e){return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function setFirstUnsplittable(e){const t=e[Fs]();if(null===t[ls].firstUnsplittable){t[ls].firstUnsplittab\ +le=e;t[ls].noLayoutFailure=!0}}function unsetFirstUnsplittable(e){const t=e[Fs]();t[ls].firstUnsplittable===e&&(t[ls].noLayoutFailure=!1)}function handleBreak(e){if(e[ls])return!1;e[ls]=Object.create(null);if("auto"===e.targetType)return!1;const t=e[Fs]();let a=null;if(e.target){a=t[to](e.target,e[vs]());if(!a)return!1;a=a[0]}const{currentPageArea:r,currentContentArea:i}=t[ls];if("pageArea"===e.targetType){a instanceof PageArea||(a=null);if(e.startNew){e[ls].target=a||r;return!0}if(a&&a!==r){e[l\ +s].target=a;return!0}return!1}a instanceof ContentArea||(a=null);const n=a&&a[vs]();let s,o=n;if(e.startNew)if(a){const e=n.contentArea.children,t=e.indexOf(i),r=e.indexOf(a);-1!==t&&t<r&&(o=null);s=r-1}else s=r.contentArea.children.indexOf(i);else{if(!a||a===i)return!1;s=n.contentArea.children.indexOf(a)-1;o=n===r?null:n}e[ls].target=o;e[ls].index=s;return!0}function handleOverflow(e,t,a){const r=e[Fs](),i=r[ls].noLayoutFailure,n=t[Cs];t[Cs]=()=>e;r[ls].noLayoutFailure=!0;const s=t[co](a);e[Zn]\ +(s.html,s.bbox);r[ls].noLayoutFailure=i;t[Cs]=n}class AppearanceFilter extends StringObject{constructor(e){super(Go,"appearanceFilter");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Arc extends XFAObject{constructor(e){super(Go,"arc",!0);this.circular=getInteger({data:e.circular,defaultValue:0,validate:e=>1===e});this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.startAngle=getFloat({da\ +ta:e.startAngle,defaultValue:0,validate:e=>!0});this.sweepAngle=getFloat({data:e.sweepAngle,defaultValue:360,validate:e=>!0});this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null;this.fill=null}[co](){const e=this.edge||new Edge({}),t=e[ho](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[ho]()):a.fill="transparent";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;let r;const i={xmlns:Vo,style:{width:"100%",height:"100%\ +",overflow:"visible"}};if(360===this.sweepAngle)r={name:"ellipse",attributes:{xmlns:Vo,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:a}};else{const e=this.startAngle*Math.PI/180,t=this.sweepAngle*Math.PI/180,n=this.sweepAngle>180?1:0,[s,o,c,l]=[50*(1+Math.cos(e)),50*(1-Math.sin(e)),50*(1+Math.cos(e+t)),50*(1-Math.sin(e+t))];r={name:"path",attributes:{xmlns:Vo,d:`M ${s} ${o} A 50 50 0 ${n} 0 ${c} ${l}`,vectorEffect:"non-scaling-stroke",style:a}};Object.assign(i,{viewBox:"0 0 100 100",preserveAspectRa\ +tio:"none"})}const n={name:"svg",children:[r],attributes:i};if(hasMargin(this[vs]()[vs]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[n]});n.attributes.style.position="absolute";return HTMLResult.success(n)}}class Area extends XFAObject{constructor(e){super(Go,"area",!0);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);\ +this.use=e.use||"";this.usehref=e.usehref||"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null;this.area=new XFAObjectArray;this.draw=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[As](){yield*getContainedChildren(this)}[Us](){return!0}[Rs](){return!0}[Zn](e,t){const[a,r,i,n]=t;this[ls].width=Math.max(this[ls].w\ +idth,a+i);this[ls].height=Math.max(this[ls].height,r+n);this[ls].children.push(e)}[gs](){return this[ls].availableSpace}[co](e){const t=toStyle(this,"position"),a={style:t,id:this[uo],class:["xfaArea"]};isPrintOnly(this)&&a.class.push("xfaPrintOnly");this.name&&(a.xfaName=this.name);const r=[];this[ls]={children:r,width:0,height:0,availableSpace:e};const i=this[es]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!i.success){if(i.isBreak())return i;dele\ +te this[ls];return HTMLResult.FAILURE}t.width=measureToString(this[ls].width);t.height=measureToString(this[ls].height);const n={name:"div",attributes:a,children:r},s=[this.x,this.y,this[ls].width,this[ls].height];delete this[ls];return HTMLResult.success(n,s)}}class Assist extends XFAObject{constructor(e){super(Go,"assist",!0);this.id=e.id||"";this.role=e.role||"";this.use=e.use||"";this.usehref=e.usehref||"";this.speak=null;this.toolTip=null}[co](){return this.toolTip?.[ss]||null}}class Barcod\ +e extends XFAObject{constructor(e){super(Go,"barcode",!0);this.charEncoding=getKeyword({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)});this.checksum=getStringOption(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]);this.dataColumnCount=getInteger({data:e.dataColumnCount,defaultValue:-1,validate:e=>e>=0}\ +);this.dataLength=getInteger({data:e.dataLength,defaultValue:-1,validate:e=>e>=0});this.dataPrep=getStringOption(e.dataPrep,["none","flateCompress"]);this.dataRowCount=getInteger({data:e.dataRowCount,defaultValue:-1,validate:e=>e>=0});this.endChar=e.endChar||"";this.errorCorrectionLevel=getInteger({data:e.errorCorrectionLevel,defaultValue:-1,validate:e=>e>=0&&e<=8});this.id=e.id||"";this.moduleHeight=getMeasurement(e.moduleHeight,"5mm");this.moduleWidth=getMeasurement(e.moduleWidth,"0.25mm");thi\ +s.printCheckDigit=getInteger({data:e.printCheckDigit,defaultValue:0,validate:e=>1===e});this.rowColumnRatio=getRatio(e.rowColumnRatio);this.startChar=e.startChar||"";this.textLocation=getStringOption(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]);this.truncate=getInteger({data:e.truncate,defaultValue:0,validate:e=>1===e});this.type=getStringOption(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5stand\ +ard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rs\ +s14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]);this.upsMode=getStringOption(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]);this.use=e.use||"";this.usehref=e.usehref||"";this.wideNarrowRatio=getRatio(e.wideNarrowRatio);this.encrypt=null;this.extras=null}}class Bind extends XFAObject{constructor(e){super(Go,"bind",!0);this.match=getStringOption(e.m\ +atch,["once","dataRef","global","none"]);this.ref=e.ref||"";this.picture=null}}class BindItems extends XFAObject{constructor(e){super(Go,"bindItems");this.connection=e.connection||"";this.labelRef=e.labelRef||"";this.ref=e.ref||"";this.valueRef=e.valueRef||""}}class Bookend extends XFAObject{constructor(e){super(Go,"bookend");this.id=e.id||"";this.leader=e.leader||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||""}}class BooleanElement extends Option01{constructor(e){sup\ +er(Go,"boolean");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[co](e){return valueToHtml(1===this[ss]?"1":"0")}}class Border extends XFAObject{constructor(e){super(Go,"border",!0);this.break=getStringOption(e.break,["close","open"]);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehr\ +ef=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.extras=null;this.fill=null;this.margin=null}[ws](){if(!this[ls]){const e=this.edge.children.slice();if(e.length<4){const t=e.at(-1)||new Edge({});for(let a=e.length;a<4;a++)e.push(t)}const t=e.map((e=>e.thickness)),a=[0,0,0,0];if(this.margin){a[0]=this.margin.topInset;a[1]=this.margin.rightInset;a[2]=this.margin.bottomInset;a[3]=this.margin.leftInset}this[ls]={widths:t,insets:a,edges:e}}return this[ls]}[ho]()\ +{const{edges:e}=this[ws](),t=e.map((e=>{const t=e[ho]();t.color||="#000000";return t})),a=Object.create(null);this.margin&&Object.assign(a,this.margin[ho]());"visible"===this.fill?.presence&&Object.assign(a,this.fill[ho]());if(this.corner.children.some((e=>0!==e.radius))){const e=this.corner.children.map((e=>e[ho]()));if(2===e.length||3===e.length){const t=e.at(-1);for(let a=e.length;a<4;a++)e.push(t)}a.borderRadius=e.map((e=>e.radius)).join(" ")}switch(this.presence){case"invisible":case"hidden\ +":a.borderStyle="";break;case"inactive":a.borderStyle="none";break;default:a.borderStyle=t.map((e=>e.style)).join(" ")}a.borderWidth=t.map((e=>e.width)).join(" ");a.borderColor=t.map((e=>e.color)).join(" ");return a}}class Break extends XFAObject{constructor(e){super(Go,"break",!0);this.after=getStringOption(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.afterTarget=e.afterTarget||"";this.before=getStringOption(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]\ +);this.beforeTarget=e.beforeTarget||"";this.bookendLeader=e.bookendLeader||"";this.bookendTrailer=e.bookendTrailer||"";this.id=e.id||"";this.overflowLeader=e.overflowLeader||"";this.overflowTarget=e.overflowTarget||"";this.overflowTrailer=e.overflowTrailer||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class BreakAfter extends XFAObject{constructor(e){super(Go,"breakAfter",!0);this.id=e.id||"";this.\ +leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}}class BreakBefore extends XFAObject{constructor(e){super(Go,"breakBefore",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.targe\ +t=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}[co](e){this[ls]={};return HTMLResult.FAILURE}}class Button extends XFAObject{constructor(e){super(Go,"button",!0);this.highlight=getStringOption(e.highlight,["inverted","none","outline","push"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[co](e){const t=this[vs]()[vs](),a={nam\ +e:"button",attributes:{id:this[uo],class:["xfaButton"],style:{}},children:[]};for(const e of t.event.children){if("click"!==e.activity||!e.script)continue;const t=recoverJsURL(e.script[ss]);if(!t)continue;const r=fixURL(t.url);r&&a.children.push({name:"a",attributes:{id:"link"+this[uo],href:r,newWindow:t.newWindow,class:["xfaLink"],style:{}},children:[]})}return HTMLResult.success(a)}}class Calculate extends XFAObject{constructor(e){super(Go,"calculate",!0);this.id=e.id||"";this.override=getStri\ +ngOption(e.override,["disabled","error","ignore","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.script=null}}class Caption extends XFAObject{constructor(e){super(Go,"caption",!0);this.id=e.id||"";this.placement=getStringOption(e.placement,["left","bottom","inline","right","top"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.reserve=Math.ceil(getMeasurement(e.reserve));this.use=e.use||"";this.usehref=\ +e.usehref||"";this.extras=null;this.font=null;this.margin=null;this.para=null;this.value=null}[io](e){_setValue(this,e)}[ws](e){if(!this[ls]){let{width:t,height:a}=e;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":a=this.reserve<=0?a:this.reserve}this[ls]=layoutNode(this,{width:t,height:a})}return this[ls]}[co](e){if(!this.value)return HTMLResult.EMPTY;this[Ys]();const t=this.value[co](e).html;if(!t){this[Js]();return HTMLR\ +esult.EMPTY}const a=this.reserve;if(this.reserve<=0){const{w:t,h:a}=this[ws](e);switch(this.placement){case"left":case"right":case"inline":this.reserve=t;break;case"top":case"bottom":this.reserve=a}}const r=[];"string"==typeof t?r.push({name:"#text",value:t}):r.push(t);const i=toStyle(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(i.width=measureToString(this.reserve));break;case"top":case"bottom":this.reserve>0&&(i.height=measureToString(this.r\ +eserve))}setPara(this,null,t);this[Js]();this.reserve=a;return HTMLResult.success({name:"div",attributes:{style:i,class:["xfaCaption"]},children:r})}}class Certificate extends StringObject{constructor(e){super(Go,"certificate");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Certificates extends XFAObject{constructor(e){super(Go,"certificates",!0);this.credentialServerPolicy=getStringOption(e.credentialServerPolicy,["optional","required"]);this.id=e.id|\ +|"";this.url=e.url||"";this.urlPolicy=e.urlPolicy||"";this.use=e.use||"";this.usehref=e.usehref||"";this.encryption=null;this.issuers=null;this.keyUsage=null;this.oids=null;this.signing=null;this.subjectDNs=null}}class CheckButton extends XFAObject{constructor(e){super(Go,"checkButton",!0);this.id=e.id||"";this.mark=getStringOption(e.mark,["default","check","circle","cross","diamond","square","star"]);this.shape=getStringOption(e.shape,["square","round"]);this.size=getMeasurement(e.size,"10pt");\ +this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(this,"margin"),a=measureToString(this.size);t.width=t.height=a;let r,i,n;const s=this[vs]()[vs](),o=s.items.children.length&&s.items.children[0][co]().html||[],c={on:(void 0!==o[0]?o[0]:"on").toString(),off:(void 0!==o[1]?o[1]:"off").toString()},l=(s.value?.[so]()||"off")===c.on||void 0,h=s[Cs](),u=s[uo];let d;if(h instanceof ExclGroup){n=h[uo];r="radio";i="xfaRadio";d=h[os]?.\ +[uo]||h[uo]}else{r="checkbox";i="xfaCheckbox";d=s[os]?.[uo]||s[uo]}const f={name:"input",attributes:{class:[i],style:t,fieldId:u,dataId:d,type:r,checked:l,xfaOn:c.on,xfaOff:c.off,"aria-label":ariaLabel(s),"aria-required":!1}};n&&(f.attributes.name=n);if(isRequired(s)){f.attributes["aria-required"]=!0;f.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[f]})}}class ChoiceList extends XFAObject{constructor(e){super(Go,"choiceList",!0);this.comm\ +itOn=getStringOption(e.commitOn,["select","exit"]);this.id=e.id||"";this.open=getStringOption(e.open,["userControl","always","multiSelect","onEntry"]);this.textEntry=getInteger({data:e.textEntry,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(this,"border","margin"),a=this[vs]()[vs](),r={fontSize:`calc(${a.font?.size||10}px * var(--total-scale-factor))`},i=[];if(a.items.children.length>0){\ +const e=a.items;let t=0,n=0;if(2===e.children.length){t=e.children[0].save;n=1-t}const s=e.children[t][co]().html,o=e.children[n][co]().html;let c=!1;const l=a.value?.[so]()||"";for(let e=0,t=s.length;e<t;e++){const t={name:"option",attributes:{value:o[e]||s[e],style:r},value:s[e]};o[e]===l&&(t.attributes.selected=c=!0);i.push(t)}c||i.splice(0,0,{name:"option",attributes:{hidden:!0,selected:!0},value:" "})}const n={class:["xfaSelect"],fieldId:a[uo],dataId:a[os]?.[uo]||a[uo],style:t,"aria-label":\ +ariaLabel(a),"aria-required":!1};if(isRequired(a)){n["aria-required"]=!0;n.required=!0}"multiSelect"===this.open&&(n.multiple=!0);return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[{name:"select",children:i,attributes:n}]})}}class Color extends XFAObject{constructor(e){super(Go,"color",!0);this.cSpace=getStringOption(e.cSpace,["SRGB"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.value=e.value?function getColor(e,t=[0,0,0]){let[a,r,i]=t;if(!e\ +)return{r:a,g:r,b:i};const n=e.split(",",3).map((e=>MathClamp(parseInt(e.trim(),10),0,255))).map((e=>isNaN(e)?0:e));if(n.length<3)return{r:a,g:r,b:i};[a,r,i]=n;return{r:a,g:r,b:i}}(e.value):"";this.extras=null}[Ts](){return!1}[ho](){return this.value?Util.makeHexColor(this.value.r,this.value.g,this.value.b):null}}class Comb extends XFAObject{constructor(e){super(Go,"comb");this.id=e.id||"";this.numberOfCells=getInteger({data:e.numberOfCells,defaultValue:0,validate:e=>e>=0});this.use=e.use||"";th\ +is.usehref=e.usehref||""}}class Connect extends XFAObject{constructor(e){super(Go,"connect",!0);this.connection=e.connection||"";this.id=e.id||"";this.ref=e.ref||"";this.usage=getStringOption(e.usage,["exportAndImport","exportOnly","importOnly"]);this.use=e.use||"";this.usehref=e.usehref||"";this.picture=null}}class ContentArea extends XFAObject{constructor(e){super(Go,"contentArea",!0);this.h=getMeasurement(e.h);this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.us\ +e=e.use||"";this.usehref=e.usehref||"";this.w=getMeasurement(e.w);this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null}[co](e){const t={left:measureToString(this.x),top:measureToString(this.y),width:measureToString(this.w),height:measureToString(this.h)},a=["xfaContentarea"];isPrintOnly(this)&&a.push("xfaPrintOnly");return HTMLResult.success({name:"div",children:[],attributes:{style:t,class:a,id:this[uo]}})}}class Corner extends XFAObject{constructor(\ +e){super(Go,"corner",!0);this.id=e.id||"";this.inverted=getInteger({data:e.inverted,defaultValue:0,validate:e=>1===e});this.join=getStringOption(e.join,["square","round"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.radius=getMeasurement(e.radius);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.us\ +ehref=e.usehref||"";this.color=null;this.extras=null}[ho](){const e=toStyle(this,"visibility");e.radius=measureToString("square"===this.join?0:this.radius);return e}}class DateElement extends ContentObject{constructor(e){super(Go,"date");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=this[ss].trim();this[ss]=e?new Date(e):null}[co](e){return valueToHtml(this[ss]?this[ss].toString():"")}}class DateTime extends ContentObject{constructor(e){super(\ +Go,"dateTime");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=this[ss].trim();this[ss]=e?new Date(e):null}[co](e){return valueToHtml(this[ss]?this[ss].toString():"")}}class DateTimeEdit extends XFAObject{constructor(e){super(Go,"dateTimeEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.picker=getStringOption(e.picker,["host","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=\ +null;this.comb=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(this,"border","font","margin"),a=this[vs]()[vs](),r={name:"input",attributes:{type:"text",fieldId:a[uo],dataId:a[os]?.[uo]||a[uo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){r.attributes["aria-required"]=!0;r.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[r]})}}class Decimal extends ContentObject{constructor(e)\ +{super(Go,"decimal");this.fracDigits=getInteger({data:e.fracDigits,defaultValue:2,validate:e=>!0});this.id=e.id||"";this.leadDigits=getInteger({data:e.leadDigits,defaultValue:-1,validate:e=>!0});this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=parseFloat(this[ss].trim());this[ss]=isNaN(e)?null:e}[co](e){return valueToHtml(null!==this[ss]?this[ss].toString():"")}}class DefaultUi extends XFAObject{constructor(e){super(Go,"defaultUi",!0);this.id=e.id||"";this.use=e.\ +use||"";this.usehref=e.usehref||"";this.extras=null}}class Desc extends XFAObject{constructor(e){super(Go,"desc",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class Digest\ +Method extends OptionObject{constructor(e){super(Go,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class DigestMethods extends XFAObject{constructor(e){super(Go,"digestMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.digestMethod=new XFAObjectArray}}class Draw extends XFAObject{constructor(e){super(Go,"draw",!0);this.anchorType=getSt\ +ringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(\ +e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.border=null;this.caption=null;this.desc=null;this.extras=nu\ +ll;this.font=null;this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.value=null;this.setProperty=new XFAObjectArray}[io](e){_setValue(this,e)}[co](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;fixDimensions(this);this[Ys]();const t=this.w,a=this.h,{w:r,h:i,isBroken:n}=layoutNode(this,e);if(r&&""===this.w){if(n&&this[Cs]()[_s]()){this[Js]();return HTMLResult.FAILURE}this.w=r}i&&""===this.h&&(this.h=i);setFirs\ +tUnsplittable(this);if(!checkDimensions(this,e)){this.w=t;this.h=a;this[Js]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const s=toStyle(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");setMinMaxDimensions(this,s);if(s.margin){s.padding=s.margin;delete s.margin}const o=["xfaDraw"];this.font&&o.push("xfaFont");isPrintOnly(this)&&o.push("xfaPrintOnly");const c={style:s,id:this[uo],class:o};this.name&&(c.xfaName=this.name);const l={name:"d\ +iv",attributes:c,children:[]};applyAssist(this,c);const h=computeBbox(this,l,e),u=this.value?this.value[co](e).html:null;if(null===u){this.w=t;this.h=a;this[Js]();return HTMLResult.success(createWrapper(this,l),h)}l.children.push(u);setPara(this,s,u);this.w=t;this.h=a;this[Js]();return HTMLResult.success(createWrapper(this,l),h)}}class Edge extends XFAObject{constructor(e){super(Go,"edge",!0);this.cap=getStringOption(e.cap,["square","butt","round"]);this.id=e.id||"";this.presence=getStringOption\ +(e.presence,["visible","hidden","inactive","invisible"]);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](){const e=toStyle(this,"visibility");Object.assign(e,{linecap:this.cap,width:measureToString(this.thickness),color:this.color?this.color[ho]():"#000000",style:""});if("visible"!==t\ +his.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}class Encoding extends OptionObject{constructor(e){super(Go,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]);this.id=e.id||"";this.use=\ +e.use||"";this.usehref=e.usehref||""}}class Encodings extends XFAObject{constructor(e){super(Go,"encodings",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encoding=new XFAObjectArray}}class Encrypt extends XFAObject{constructor(e){super(Go,"encrypt",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=null}}class EncryptData extends XFAObject{constructor(e){super(Go,"encryptData",!0)\ +;this.id=e.id||"";this.operation=getStringOption(e.operation,["encrypt","decrypt"]);this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Encryption extends XFAObject{constructor(e){super(Go,"encryption",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class EncryptionMethod extends OptionObject{constructor(e){super(Go,"encry\ +ptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EncryptionMethods extends XFAObject{constructor(e){super(Go,"encryptionMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encryptionMethod=new XFAObjectArray}}class Event extends XFAObject{constructor(e){super(Go,"event",!0);this.activity=getStringOption(e.activity,["\ +click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]);this.id=e.id||"";this.listen=getStringOption(e.listen,["refOnly","refAndDescendents"]);this.name=e.name||"";this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.encry\ +ptData=null;this.execute=null;this.script=null;this.signData=null;this.submit=null}}class ExData extends ContentObject{constructor(e){super(Go,"exData");this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.maxLength=getInteger({data:e.maxLength,defaultValue:-1,validate:e=>e>=-1});this.name=e.name||"";this.rid=e.rid||"";this.transferEncoding=getStringOption(e.transferEncoding,["none","base64","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[Bs](){return"text/htm\ +l"===this.contentType}[$s](e){if("text/html"===this.contentType&&e[Hs]===go.xhtml.id){this[ss]=e;return!0}if("text/xml"===this.contentType){this[ss]=e;return!0}return!1}[co](e){return"text/html"===this.contentType&&this[ss]?this[ss][co](e):HTMLResult.EMPTY}}class ExObject extends XFAObject{constructor(e){super(Go,"exObject",!0);this.archive=e.archive||"";this.classId=e.classId||"";this.codeBase=e.codeBase||"";this.codeType=e.codeType||"";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";t\ +his.usehref=e.usehref||"";this.extras=null;this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class ExclGroup extends XFAObject{constructor(e){super(Go,"exclGroup",!0);this.access=getStringOption(e.access,["ope\ +n","nonInteractive","protected","readOnly"]);this.accessKey=e.accessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.l\ +ayout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(\ +e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.margin=null;this.para=null;this.traversal=null;this.validate=null;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.field=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Rs](){return!0}[Ts](){return!0}[io](e){for(const t of this.field.children){if(!t.value){const e=new Value({});t[Qn](e);t.value=e}t.value[io](e)}}[_s](){return this.layout\ +.endsWith("-tb")&&0===this[ls].attempt&&this[ls].numberInLine>0||this[vs]()[_s]()}[js](){const e=this[Cs]();if(!e[js]())return!1;if(void 0!==this[ls]._isSplittable)return this[ls]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[ls]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[ls].numberInLine)return!1;this[ls]._isSplittable=!0;return!0}[us](){return flushHTML(this)}[Zn](e,t){addHTML(this,e,t)}[gs](){return getAvailableSpace(this)}[co](e){setTabIndex(\ +this);if("hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[uo],class:[]};setAccess(this,a.class);this[ls]||=Object.create(null);Object.assign(this[ls],{children:t,attributes:a,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const r=this[js]();r||setFirstUnsplittable(this);if(!check\ +Dimensions(this,e))return HTMLResult.FAILURE;const i=new Set(["field"]);if(this.layout.includes("row")){const e=this[Cs]().columnWidths;if(Array.isArray(e)&&e.length>0){this[ls].columnWidths=e;this[ls].currentColumn=0}}const n=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),s=["xfaExclgroup"],o=layoutClass(this);o&&s.push(o);isPrintOnly(this)&&s.push("xfaPrintOnly");a.style=n;a.class=s;this.name&&(a.xfaName=this.name);this[Ys]();const c="lr-tb"===this.lay\ +out||"rl-tb"===this.layout,l=c?2:1;for(;this[ls].attempt<l;this[ls].attempt++){c&&1===this[ls].attempt&&(this[ls].numberInLine=0);const e=this[es]({filter:i,include:!0});if(e.success)break;if(e.isBreak()){this[Js]();return e}if(c&&0===this[ls].attempt&&0===this[ls].numberInLine&&!this[Fs]()[ls].noLayoutFailure){this[ls].attempt=l;break}}this[Js]();r||unsetFirstUnsplittable(this);if(this[ls].attempt===l){r||delete this[ls];return HTMLResult.FAILURE}let h=0,u=0;if(this.margin){h=this.margin.leftIn\ +set+this.margin.rightInset;u=this.margin.topInset+this.margin.bottomInset}const d=Math.max(this[ls].width+h,this.w||0),f=Math.max(this[ls].height+u,this.h||0),g=[this.x,this.y,d,f];""===this.w&&(n.width=measureToString(d));""===this.h&&(n.height=measureToString(f));const p={name:"div",attributes:a,children:t};applyAssist(this,a);delete this[ls];return HTMLResult.success(createWrapper(this,p),g)}}class Execute extends XFAObject{constructor(e){super(Go,"execute");this.connection=e.connection||"";t\ +his.executeType=getStringOption(e.executeType,["import","remerge"]);this.id=e.id||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Extras extends XFAObject{constructor(e){super(Go,"extras",!0);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectAr\ +ray;this.extras=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class Field extends XFAObject{constructor(e){super(Go,"field",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.accessKey=e.accessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","mid\ +dleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.pre\ +sence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.format=null;this.items=new XFAObjectArray(2);this.k\ +eep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.validate=null;this.value=null;this.bindItems=new XFAObjectArray;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Rs](){return!0}[io](e){_setValue(this,e)}[co](e){setTabIndex(this);if(!this.ui){this.ui=new Ui({});this.ui[Is]=this[Is];this[Qn](this.ui);let e;switch(this.items.children.length){case 0:e=new TextEdit({});this.ui.textEdit=e;break;case 1:e=new CheckButton({})\ +;this.ui.checkButton=e;break;case 2:e=new ChoiceList({});this.ui.choiceList=e}this.ui[Qn](e)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;this.caption&&delete this.caption[ls];this[Ys]();const t=this.caption?this.caption[co](e).html:null,a=this.w,r=this.h;let i=0,n=0;if(this.margin){i=this.margin.leftInset+this.margin.rightInset;n=this.margin.topInset+this.margin.bottomInset}let s=null;if(""===this.w||""===this.h){let t=null,a=\ +null,r=0,o=0;if(this.ui.checkButton)r=o=this.ui.checkButton.size;else{const{w:t,h:a}=layoutNode(this,e);if(null!==t){r=t;o=a}else o=function fonts_getMetrics(e,t=!1){let a=null;if(e){const t=stripQuotes(e.typeface),r=e[Is].fontFinder.find(t);a=selectFont(e,r)}if(!a)return{lineHeight:12,lineGap:2,lineNoGap:10};const r=e.size||10,i=a.lineHeight?Math.max(t?0:1.2,a.lineHeight):1.2,n=void 0===a.lineGap?.2:a.lineGap;return{lineHeight:i*r,lineGap:n*r,lineNoGap:Math.max(1,i-n)*r}}(this.font,!0).lineNoGa\ +p}s=getBorderDims(this.ui[ws]());r+=s.w;o+=s.h;if(this.caption){const{w:i,h:n,isBroken:s}=this.caption[ws](e);if(s&&this[Cs]()[_s]()){this[Js]();return HTMLResult.FAILURE}t=i;a=n;switch(this.caption.placement){case"left":case"right":case"inline":t+=r;break;case"top":case"bottom":a+=o}}else{t=r;a=o}if(t&&""===this.w){t+=i;this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1<t?t:this.minW)}if(a&&""===this.h){a+=n;this.h=Math.min(this.maxH<=0?1/0:this.maxH,this.minH+1<a?a:this.minH)}}this[Js]();f\ +ixDimensions(this);setFirstUnsplittable(this);if(!checkDimensions(this,e)){this.w=a;this.h=r;this[Js]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const o=toStyle(this,"font","dimensions","position","rotate","anchorType","presence","margin","hAlign");setMinMaxDimensions(this,o);const c=["xfaField"];this.font&&c.push("xfaFont");isPrintOnly(this)&&c.push("xfaPrintOnly");const l={style:o,id:this[uo],class:c};if(o.margin){o.padding=o.margin;delete o.margin}setAccess(this,c);this.name&&(l\ +.xfaName=this.name);const h=[],u={name:"div",attributes:l,children:h};applyAssist(this,l);const d=this.border?this.border[ho]():null,f=computeBbox(this,u,e),g=this.ui[co]().html;if(!g){Object.assign(o,d);return HTMLResult.success(createWrapper(this,u),f)}this[no]&&(g.children?.[0]?g.children[0].attributes.tabindex=this[no]:g.attributes.tabindex=this[no]);g.attributes.style||=Object.create(null);let p=null;if(this.ui.button){1===g.children.length&&([p]=g.children.splice(0,1));Object.assign(g.attr\ +ibutes.style,d)}else Object.assign(o,d);h.push(g);if(this.value)if(this.ui.imageEdit)g.children.push(this.value[co]().html);else if(!this.ui.button){let e="";if(this.value.exData)e=this.value.exData[so]();else if(this.value.text)e=this.value.text[ws]();else{const t=this.value[co]().html;null!==t&&(e=t.children[0].value)}this.ui.textEdit&&this.value.text?.maxChars&&(g.children[0].attributes.maxLength=this.value.text.maxChars);if(e){if(this.ui.numericEdit){e=parseFloat(e);e=isNaN(e)?"":e.toString(\ +)}"textarea"===g.children[0].name?g.children[0].attributes.textContent=e:g.children[0].attributes.value=e}}if(!this.ui.imageEdit&&g.children?.[0]&&this.h){s=s||getBorderDims(this.ui[ws]());let t=0;if(this.caption&&["top","bottom"].includes(this.caption.placement)){t=this.caption.reserve;t<=0&&(t=this.caption[ws](e).h);const a=this.h-t-n-s.h;g.children[0].attributes.style.height=measureToString(a)}else g.children[0].attributes.style.height="100%"}p&&g.children.push(p);if(!t){g.attributes.class&&g\ +.attributes.class.push("xfaLeft");this.w=a;this.h=r;return HTMLResult.success(createWrapper(this,u),f)}if(this.ui.button){o.padding&&delete o.padding;"div"===t.name&&(t.name="span");g.children.push(t);return HTMLResult.success(u,f)}this.ui.checkButton&&(t.attributes.class[0]="xfaCaptionForCheckButton");g.attributes.class||=[];g.children.splice(0,0,t);switch(this.caption.placement){case"left":case"inline":g.attributes.class.push("xfaLeft");break;case"right":g.attributes.class.push("xfaRight");bre\ +ak;case"top":g.attributes.class.push("xfaTop");break;case"bottom":g.attributes.class.push("xfaBottom")}this.w=a;this.h=r;return HTMLResult.success(createWrapper(this,u),f)}}class Fill extends XFAObject{constructor(e){super(Go,"fill",!0);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null;this.linear=null;this.pattern=null;this.radial=null;this.solid=null;this.stipple=\ +null}[ho](){const e=this[vs](),t=e[vs]()[vs](),a=Object.create(null);let r="color",i=r;if(e instanceof Border){r="background-color";i="background";t instanceof Ui&&(a.backgroundColor="white")}if(e instanceof Rectangle||e instanceof Arc){r=i="fill";a.fill="white"}for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"color"===e)continue;const t=this[e];if(!(t instanceof XFAObject))continue;const n=t[ho](this.color);n&&(a[n.startsWith("#")?r:i]=n);return a}if(this.color?.value){const e\ +=this.color[ho]();a[e.startsWith("#")?r:i]=e}return a}}class Filter extends XFAObject{constructor(e){super(Go,"filter",!0);this.addRevocationInfo=getStringOption(e.addRevocationInfo,["","required","optional","none"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.version=getInteger({data:this.version,defaultValue:5,validate:e=>e>=1&&e<=5});this.appearanceFilter=null;this.certificates=null;this.digestMethods=null;this.encodings=null;this.encryptionMethods\ +=null;this.handler=null;this.lockDocument=null;this.mdp=null;this.reasons=null;this.timeStamp=null}}class Float extends ContentObject{constructor(e){super(Go,"float");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=parseFloat(this[ss].trim());this[ss]=isNaN(e)?null:e}[co](e){return valueToHtml(null!==this[ss]?this[ss].toString():"")}}class template_Font extends XFAObject{constructor(e){super(Go,"font",!0);this.baselineShift=getMeasurement(e.base\ +lineShift);this.fontHorizontalScale=getFloat({data:e.fontHorizontalScale,defaultValue:100,validate:e=>e>=0});this.fontVerticalScale=getFloat({data:e.fontVerticalScale,defaultValue:100,validate:e=>e>=0});this.id=e.id||"";this.kerningMode=getStringOption(e.kerningMode,["none","pair"]);this.letterSpacing=getMeasurement(e.letterSpacing,"0");this.lineThrough=getInteger({data:e.lineThrough,defaultValue:0,validate:e=>1===e||2===e});this.lineThroughPeriod=getStringOption(e.lineThroughPeriod,["all","word\ +"]);this.overline=getInteger({data:e.overline,defaultValue:0,validate:e=>1===e||2===e});this.overlinePeriod=getStringOption(e.overlinePeriod,["all","word"]);this.posture=getStringOption(e.posture,["normal","italic"]);this.size=getMeasurement(e.size,"10pt");this.typeface=e.typeface||"Courier";this.underline=getInteger({data:e.underline,defaultValue:0,validate:e=>1===e||2===e});this.underlinePeriod=getStringOption(e.underlinePeriod,["all","word"]);this.use=e.use||"";this.usehref=e.usehref||"";this\ +.weight=getStringOption(e.weight,["normal","bold"]);this.extras=null;this.fill=null}[ts](e){super[ts](e);this[Is].usedTypefaces.add(this.typeface)}[ho](){const e=toStyle(this,"fill"),t=e.color;if(t)if("#000000"===t)delete e.color;else if(!t.startsWith("#")){e.background=t;e.backgroundClip="text";e.color="transparent"}this.baselineShift&&(e.verticalAlign=measureToString(this.baselineShift));e.fontKerning="none"===this.kerningMode?"none":"normal";e.letterSpacing=measureToString(this.letterSpacing)\ +;if(0!==this.lineThrough){e.textDecoration="line-through";2===this.lineThrough&&(e.textDecorationStyle="double")}if(0!==this.overline){e.textDecoration="overline";2===this.overline&&(e.textDecorationStyle="double")}e.fontStyle=this.posture;e.fontSize=measureToString(.99*this.size);setFontFamily(this,this,this[Is].fontFinder,e);if(0!==this.underline){e.textDecoration="underline";2===this.underline&&(e.textDecorationStyle="double")}e.fontWeight=this.weight;return e}}class Format extends XFAObject{\ +constructor(e){super(Go,"format",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null}}class Handler extends StringObject{constructor(e){super(Go,"handler");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Hyphenation extends XFAObject{constructor(e){super(Go,"hyphenation");this.excludeAllCaps=getInteger({data:e.excludeAllCaps,defaultValue:0,validate:e=>1===e});this.exc\ +ludeInitialCap=getInteger({data:e.excludeInitialCap,defaultValue:0,validate:e=>1===e});this.hyphenate=getInteger({data:e.hyphenate,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.pushCharacterCount=getInteger({data:e.pushCharacterCount,defaultValue:3,validate:e=>e>=0});this.remainCharacterCount=getInteger({data:e.remainCharacterCount,defaultValue:3,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||"";this.wordCharacterCount=getInteger({data:e.wordCharacterCount,defaultValue:\ +7,validate:e=>e>=0})}}class Image extends StringObject{constructor(e){super(Go,"image");this.aspect=getStringOption(e.aspect,["fit","actual","height","none","width"]);this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.name=e.name||"";this.transferEncoding=getStringOption(e.transferEncoding,["base64","none","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[co](){if(this.contentType&&!Jo.has(this.contentType.toLowerCase()))return HTMLResult.EMPTY;let e=this[Is].\ +images?.get(this.href);if(!e&&(this.href||!this[ss]))return HTMLResult.EMPTY;e||"base64"!==this.transferEncoding||(e=function fromBase64Util(e){return Uint8Array.fromBase64?Uint8Array.fromBase64(e):stringToBytes(atob(e))}(this[ss]));if(!e)return HTMLResult.EMPTY;if(!this.contentType){for(const[t,a]of Yo)if(e.length>t.length&&t.every(((t,a)=>t===e[a]))){this.contentType=a;break}if(!this.contentType)return HTMLResult.EMPTY}const t=new Blob([e],{type:this.contentType});let a;switch(this.aspect){cas\ +e"fit":case"actual":break;case"height":a={height:"100%",objectFit:"fill"};break;case"none":a={width:"100%",height:"100%",objectFit:"fill"};break;case"width":a={width:"100%",objectFit:"fill"}}const r=this[vs]();return HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:a,src:URL.createObjectURL(t),alt:r?ariaLabel(r[vs]()):null}})}}class ImageEdit extends XFAObject{constructor(e){super(Go,"imageEdit",!0);this.data=getStringOption(e.data,["link","embed"]);this.id=e.id||"";this.use=e\ +.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[co](e){return"embed"===this.data?HTMLResult.success({name:"div",children:[],attributes:{}}):HTMLResult.EMPTY}}class Integer extends ContentObject{constructor(e){super(Go,"integer");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=parseInt(this[ss].trim(),10);this[ss]=isNaN(e)?null:e}[co](e){return valueToHtml(null!==this[ss]?this[ss].toString():"")}}class Issu\ +ers extends XFAObject{constructor(e){super(Go,"issuers",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Items extends XFAObject{constructor(e){super(Go,"items",!0);this.id=e.id||"";this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.ref=e.ref||"";this.save=getInteger({data:e.save,defaultValue:0,validate:e=>1===e});this\ +.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[co](){const e=[];for(const t of this[Ss]())e.push(t[so]());return HTMLResult.success(e)}}class Keep extends XFAObject{constructor(e){super(Go,"keep",!\ +0);this.id=e.id||"";const t=["none","contentArea","pageArea"];this.intact=getStringOption(e.intact,t);this.next=getStringOption(e.next,t);this.previous=getStringOption(e.previous,t);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class KeyUsage extends XFAObject{constructor(e){super(Go,"keyUsage");const t=["","yes","no"];this.crlSign=getStringOption(e.crlSign,t);this.dataEncipherment=getStringOption(e.dataEncipherment,t);this.decipherOnly=getStringOption(e.decipherOnly,t);this.di\ +gitalSignature=getStringOption(e.digitalSignature,t);this.encipherOnly=getStringOption(e.encipherOnly,t);this.id=e.id||"";this.keyAgreement=getStringOption(e.keyAgreement,t);this.keyCertSign=getStringOption(e.keyCertSign,t);this.keyEncipherment=getStringOption(e.keyEncipherment,t);this.nonRepudiation=getStringOption(e.nonRepudiation,t);this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Line extends XFAObject{constructor(e){super(Go,"lin\ +e",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.slope=getStringOption(e.slope,["\\\\","/"]);this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null}[co](){const e=this[vs]()[vs](),t=this.edge||new Edge({}),a=t[ho](),r=Object.create(null),i="visible"===t.presence?t.thickness:0;r.strokeWidth=measureToString(i);r.stroke=a.color;let n,s,o,c,l="100%",h="100%";if(e.w<=i){[n,s,o,c]=["50%",0,"50%","100%"];l=r.strokeWidth}else if(e.h<=i){[n,s,o,c]=[0,"50%","100%"\ +,"50%"];h=r.strokeWidth}else"\\\\"===this.slope?[n,s,o,c]=[0,0,"100%","100%"]:[n,s,o,c]=[0,"100%","100%",0];const u={name:"svg",children:[{name:"line",attributes:{xmlns:Vo,x1:n,y1:s,x2:o,y2:c,style:r}}],attributes:{xmlns:Vo,width:l,height:h,style:{overflow:"visible"}}};if(hasMargin(e))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[u]});u.attributes.style.position="absolute";return HTMLResult.success(u)}}class Linear extends XFAObjec\ +t{constructor(e){super(Go,"linear",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toRight","toBottom","toLeft","toTop"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](e){e=e?e[ho]():"#FFFFFF";return`linear-gradient(${this.type.replace(/([RBLT])/," $1").toLowerCase()}, ${e}, ${this.color?this.color[ho]():"#000000"})`}}class LockDocument extends ContentObject{constructor(e){super(Go,"lockDocument");this.id=e.id||"";this.type=getStringOption(e.type,["o\ +ptional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}[hs](){this[ss]=getStringOption(this[ss],["auto","0","1"])}}class Manifest extends XFAObject{constructor(e){super(Go,"manifest",!0);this.action=getStringOption(e.action,["include","all","exclude"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.ref=new XFAObjectArray}}class Margin extends XFAObject{constructor(e){super(Go,"margin",!0);this.bottomInset=getMeasurement(e.bo\ +ttomInset,"0");this.id=e.id||"";this.leftInset=getMeasurement(e.leftInset,"0");this.rightInset=getMeasurement(e.rightInset,"0");this.topInset=getMeasurement(e.topInset,"0");this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[ho](){return{margin:measureToString(this.topInset)+" "+measureToString(this.rightInset)+" "+measureToString(this.bottomInset)+" "+measureToString(this.leftInset)}}}class Mdp extends XFAObject{constructor(e){super(Go,"mdp");this.id=e.id||"";this.permissions=getInt\ +eger({data:e.permissions,defaultValue:2,validate:e=>1===e||3===e});this.signatureType=getStringOption(e.signatureType,["filler","author"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Medium extends XFAObject{constructor(e){super(Go,"medium");this.id=e.id||"";this.imagingBBox=function getBBox(e){const t=-1;if(!e)return{x:t,y:t,width:t,height:t};const a=e.split(",",4).map((e=>getMeasurement(e.trim(),"-1")));if(a.length<4||a[2]<0||a[3]<0)return{x:t,y:t,width:t,height:t};const[r,i,n,s]=a;re\ +turn{x:r,y:i,width:n,height:s}}(e.imagingBBox);this.long=getMeasurement(e.long);this.orientation=getStringOption(e.orientation,["portrait","landscape"]);this.short=getMeasurement(e.short);this.stock=e.stock||"";this.trayIn=getStringOption(e.trayIn,["auto","delegate","pageFront"]);this.trayOut=getStringOption(e.trayOut,["auto","delegate"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Message extends XFAObject{constructor(e){super(Go,"message",!0);this.id=e.id||"";this.use=e.use||"";this.u\ +sehref=e.usehref||"";this.text=new XFAObjectArray}}class NumericEdit extends XFAObject{constructor(e){super(Go,"numericEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(this,"border","font","margin"),a=this[vs]()[vs](),r={name:"input",attributes:{type:"text",fieldId:a[uo],dataId:a[os]?.[uo]||a[uo],class:["xfaTextf\ +ield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){r.attributes["aria-required"]=!0;r.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[r]})}}class Occur extends XFAObject{constructor(e){super(Go,"occur",!0);this.id=e.id||"";this.initial=""!==e.initial?getInteger({data:e.initial,defaultValue:"",validate:e=>!0}):"";this.max=""!==e.max?getInteger({data:e.max,defaultValue:1,validate:e=>!0}):"";this.min=""!==e.min?ge\ +tInteger({data:e.min,defaultValue:1,validate:e=>!0}):"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[ts](){const e=this[vs](),t=this.min;""===this.min&&(this.min=e instanceof PageArea||e instanceof PageSet?0:1);""===this.max&&(this.max=""===t?e instanceof PageArea||e instanceof PageSet?-1:1:this.min);-1!==this.max&&this.max<this.min&&(this.max=this.min);""===this.initial&&(this.initial=e instanceof Template?1:this.min)}}class Oid extends StringObject{constructor(e){super(Go,"o\ +id");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Oids extends XFAObject{constructor(e){super(Go,"oids",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.oid=new XFAObjectArray}}class Overflow extends XFAObject{constructor(e){super(Go,"overflow");this.id=e.id||"";this.leader=e.leader||"";this.target=e.target||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e\ +.usehref||""}[ws](){if(!this[ls]){const e=this[vs](),t=this[Fs](),a=t[to](this.target,e),r=t[to](this.leader,e),i=t[to](this.trailer,e);this[ls]={target:a?.[0]||null,leader:r?.[0]||null,trailer:i?.[0]||null,addLeader:!1,addTrailer:!1}}return this[ls]}}class PageArea extends XFAObject{constructor(e){super(Go,"pageArea",!0);this.blankOrNotBlank=getStringOption(e.blankOrNotBlank,["any","blank","notBlank"]);this.id=e.id||"";this.initialNumber=getInteger({data:e.initialNumber,defaultValue:1,validate:\ +e=>!0});this.name=e.name||"";this.numbered=getInteger({data:e.numbered,defaultValue:1,validate:e=>!0});this.oddOrEven=getStringOption(e.oddOrEven,["any","even","odd"]);this.pagePosition=getStringOption(e.pagePosition,["any","first","last","only","rest"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.desc=null;this.extras=null;this.medium=null;this.occur=null;this.area=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.draw=new XFAObjectArray;th\ +is.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray}[Xs](){if(!this[ls]){this[ls]={numberOfUse:0};return!0}return!this.occur||-1===this.occur.max||this[ls].numberOfUse<this.occur.max}[as](){delete this[ls]}[ks](){this[ls]||={numberOfUse:0};const e=this[vs]();if("orderedOccurrence"===e.relation&&this[Xs]()){this[ls].numberOfUse+=1;return this}return e[ks]()}[gs](){return this[ls].space||{width:0,height:0}}[co](){this[ls]||={numberOfUse:1};const e=[];this[\ +ls].children=e;const t=Object.create(null);if(this.medium&&this.medium.short&&this.medium.long){t.width=measureToString(this.medium.short);t.height=measureToString(this.medium.long);this[ls].space={width:this.medium.short,height:this.medium.long};if("landscape"===this.medium.orientation){const e=t.width;t.width=t.height;t.height=e;this[ls].space={width:this.medium.long,height:this.medium.short}}}else warn("XFA - No medium specified in pageArea: please file a bug.");this[es]({filter:new Set(["are\ +a","draw","field","subform"]),include:!0});this[es]({filter:new Set(["contentArea"]),include:!0});return HTMLResult.success({name:"div",children:e,attributes:{class:["xfaPage"],id:this[uo],style:t,xfaName:this.name}})}}class PageSet extends XFAObject{constructor(e){super(Go,"pageSet",!0);this.duplexImposition=getStringOption(e.duplexImposition,["longEdge","shortEdge"]);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["orderedOccurrence","duplexPaginated","simplexPa\ +ginated"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.occur=null;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray}[as](){for(const e of this.pageArea.children)e[as]();for(const e of this.pageSet.children)e[as]()}[Xs](){return!this.occur||-1===this.occur.max||this[ls].numberOfUse<this.occur.max}[ks](){this[ls]||={numberOfUse:1,pageIndex:-1,pageSetIndex:-1};if("orderedOccurrence"===this.relation){if(this[ls].pageIndex+1\ +<this.pageArea.children.length){this[ls].pageIndex+=1;return this.pageArea.children[this[ls].pageIndex][ks]()}if(this[ls].pageSetIndex+1<this.pageSet.children.length){this[ls].pageSetIndex+=1;return this.pageSet.children[this[ls].pageSetIndex][ks]()}if(this[Xs]()){this[ls].numberOfUse+=1;this[ls].pageIndex=-1;this[ls].pageSetIndex=-1;return this[ks]()}const e=this[vs]();if(e instanceof PageSet)return e[ks]();this[as]();return this[ks]()}const e=this[Fs]()[ls].pageNumber,t=e%2==0?"even":"odd",a=0\ +===e?"first":"rest";let r=this.pageArea.children.find((e=>e.oddOrEven===t&&e.pagePosition===a));if(r)return r;r=this.pageArea.children.find((e=>"any"===e.oddOrEven&&e.pagePosition===a));if(r)return r;r=this.pageArea.children.find((e=>"any"===e.oddOrEven&&"any"===e.pagePosition));return r||this.pageArea.children[0]}}class Para extends XFAObject{constructor(e){super(Go,"para",!0);this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.li\ +neHeight=e.lineHeight?getMeasurement(e.lineHeight,"0pt"):"";this.marginLeft=e.marginLeft?getMeasurement(e.marginLeft,"0pt"):"";this.marginRight=e.marginRight?getMeasurement(e.marginRight,"0pt"):"";this.orphans=getInteger({data:e.orphans,defaultValue:0,validate:e=>e>=0});this.preserve=e.preserve||"";this.radixOffset=e.radixOffset?getMeasurement(e.radixOffset,"0pt"):"";this.spaceAbove=e.spaceAbove?getMeasurement(e.spaceAbove,"0pt"):"";this.spaceBelow=e.spaceBelow?getMeasurement(e.spaceBelow,"0pt")\ +:"";this.tabDefault=e.tabDefault?getMeasurement(this.tabDefault):"";this.tabStops=(e.tabStops||"").trim().split(/\\s+/).map(((e,t)=>t%2==1?getMeasurement(e):e));this.textIndent=e.textIndent?getMeasurement(e.textIndent,"0pt"):"";this.use=e.use||"";this.usehref=e.usehref||"";this.vAlign=getStringOption(e.vAlign,["top","bottom","middle"]);this.widows=getInteger({data:e.widows,defaultValue:0,validate:e=>e>=0});this.hyphenation=null}[ho](){const e=toStyle(this,"hAlign");""!==this.marginLeft&&(e.paddin\ +gLeft=measureToString(this.marginLeft));""!==this.marginRight&&(e.paddingRight=measureToString(this.marginRight));""!==this.spaceAbove&&(e.paddingTop=measureToString(this.spaceAbove));""!==this.spaceBelow&&(e.paddingBottom=measureToString(this.spaceBelow));if(""!==this.textIndent){e.textIndent=measureToString(this.textIndent);fixTextIndent(e)}this.lineHeight>0&&(e.lineHeight=measureToString(this.lineHeight));""!==this.tabDefault&&(e.tabSize=measureToString(this.tabDefault));this.tabStops.length;\ +this.hyphenatation&&Object.assign(e,this.hyphenatation[ho]());return e}}class PasswordEdit extends XFAObject{constructor(e){super(Go,"passwordEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.passwordChar=e.passwordChar||"*";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}}class template_Pattern extends XFAObject{constructor(e){super(Go,"pattern",!0);this.id=e.id||"";this.type=getStringOption(e\ +.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](e){e=e?e[ho]():"#FFFFFF";const t=this.color?this.color[ho]():"#000000",a="repeating-linear-gradient",r=`${e},${e} 5px,${t} 5px,${t} 10px`;switch(this.type){case"crossHatch":return`${a}(to top,${r}) ${a}(to right,${r})`;case"crossDiagonal":return`${a}(45deg,${r}) ${a}(-45deg,${r})`;case"diagonalLeft":return`${a}(45deg,${r}\ +)`;case"diagonalRight":return`${a}(-45deg,${r})`;case"horizontal":return`${a}(to top,${r})`;case"vertical":return`${a}(to right,${r})`}return""}}class Picture extends StringObject{constructor(e){super(Go,"picture");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Proto extends XFAObject{constructor(e){super(Go,"proto",!0);this.appearanceFilter=new XFAObjectArray;this.arc=new XFAObjectArray;this.area=new XFAObjectArray;this.assist=new XFAObjectArray;this.barcode=new XFAObject\ +Array;this.bindItems=new XFAObjectArray;this.bookend=new XFAObjectArray;this.boolean=new XFAObjectArray;this.border=new XFAObjectArray;this.break=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.button=new XFAObjectArray;this.calculate=new XFAObjectArray;this.caption=new XFAObjectArray;this.certificate=new XFAObjectArray;this.certificates=new XFAObjectArray;this.checkButton=new XFAObjectArray;this.choiceList=new XFAObjectArray;this.color=new XFAObjec\ +tArray;this.comb=new XFAObjectArray;this.connect=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.corner=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.dateTimeEdit=new XFAObjectArray;this.decimal=new XFAObjectArray;this.defaultUi=new XFAObjectArray;this.desc=new XFAObjectArray;this.digestMethod=new XFAObjectArray;this.digestMethods=new XFAObjectArray;this.draw=new XFAObjectArray;this.edge=new XFAObjectArray;this.encoding=new XFAObjectArray;this.\ +encodings=new XFAObjectArray;this.encrypt=new XFAObjectArray;this.encryptData=new XFAObjectArray;this.encryption=new XFAObjectArray;this.encryptionMethod=new XFAObjectArray;this.encryptionMethods=new XFAObjectArray;this.event=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.execute=new XFAObjectArray;this.extras=new XFAObjectArray;this.field=new XFAObjectArray;this.fill=new XFAObjectArray;this.filter=new XFAObjectArray;this\ +.float=new XFAObjectArray;this.font=new XFAObjectArray;this.format=new XFAObjectArray;this.handler=new XFAObjectArray;this.hyphenation=new XFAObjectArray;this.image=new XFAObjectArray;this.imageEdit=new XFAObjectArray;this.integer=new XFAObjectArray;this.issuers=new XFAObjectArray;this.items=new XFAObjectArray;this.keep=new XFAObjectArray;this.keyUsage=new XFAObjectArray;this.line=new XFAObjectArray;this.linear=new XFAObjectArray;this.lockDocument=new XFAObjectArray;this.manifest=new XFAObjectAr\ +ray;this.margin=new XFAObjectArray;this.mdp=new XFAObjectArray;this.medium=new XFAObjectArray;this.message=new XFAObjectArray;this.numericEdit=new XFAObjectArray;this.occur=new XFAObjectArray;this.oid=new XFAObjectArray;this.oids=new XFAObjectArray;this.overflow=new XFAObjectArray;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray;this.para=new XFAObjectArray;this.passwordEdit=new XFAObjectArray;this.pattern=new XFAObjectArray;this.picture=new XFAObjectArray;this.radial=new XFAObje\ +ctArray;this.reason=new XFAObjectArray;this.reasons=new XFAObjectArray;this.rectangle=new XFAObjectArray;this.ref=new XFAObjectArray;this.script=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.signData=new XFAObjectArray;this.signature=new XFAObjectArray;this.signing=new XFAObjectArray;this.solid=new XFAObjectArray;this.speak=new XFAObjectArray;this.stipple=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray;this.subjectDN=new XFAObjectArray;this.sub\ +jectDNs=new XFAObjectArray;this.submit=new XFAObjectArray;this.text=new XFAObjectArray;this.textEdit=new XFAObjectArray;this.time=new XFAObjectArray;this.timeStamp=new XFAObjectArray;this.toolTip=new XFAObjectArray;this.traversal=new XFAObjectArray;this.traverse=new XFAObjectArray;this.ui=new XFAObjectArray;this.validate=new XFAObjectArray;this.value=new XFAObjectArray;this.variables=new XFAObjectArray}}class Radial extends XFAObject{constructor(e){super(Go,"radial",!0);this.id=e.id||"";this.typ\ +e=getStringOption(e.type,["toEdge","toCenter"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](e){e=e?e[ho]():"#FFFFFF";const t=this.color?this.color[ho]():"#000000";return`radial-gradient(circle at center, ${"toEdge"===this.type?`${e},${t}`:`${t},${e}`})`}}class Reason extends StringObject{constructor(e){super(Go,"reason");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Reasons extends XFAObject{constructor(e){super\ +(Go,"reasons",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.reason=new XFAObjectArray}}class Rectangle extends XFAObject{constructor(e){super(Go,"rectangle",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.fill=null}[co](){const e=this.edge.children.length?this.edge.ch\ +ildren[0]:new Edge({}),t=e[ho](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[ho]()):a.fill="transparent";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;const r=(this.corner.children.length?this.corner.children[0]:new Corner({}))[ho](),i={name:"svg",children:[{name:"rect",attributes:{xmlns:Vo,width:"100%",height:"100%",x:0,y:0,rx:r.radius,ry:r.radius,style:a}}],attributes:{xmlns:Vo,style:{overflow:"visible"},width:"100%",he\ +ight:"100%"}};if(hasMargin(this[vs]()[vs]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[i]});i.attributes.style.position="absolute";return HTMLResult.success(i)}}class RefElement extends StringObject{constructor(e){super(Go,"ref");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Script extends StringObject{constructor(e){super(Go,"script");this.binding=e.binding||"";this.contentType=e.contentType||"";this.\ +id=e.id||"";this.name=e.name||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class SetProperty extends XFAObject{constructor(e){super(Go,"setProperty");this.connection=e.connection||"";this.ref=e.ref||"";this.target=e.target||""}}class SignData extends XFAObject{constructor(e){super(Go,"signData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["sign","clear","verify"]);this.ref=e.ref||"";this.target=e.target||"";t\ +his.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Signature extends XFAObject{constructor(e){super(Go,"signature",!0);this.id=e.id||"";this.type=getStringOption(e.type,["PDF1.3","PDF1.6"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.filter=null;this.manifest=null;this.margin=null}}class Signing extends XFAObject{constructor(e){super(Go,"signing",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","requir\ +ed"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Solid extends XFAObject{constructor(e){super(Go,"solid",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[ho](e){return e?e[ho]():"#FFFFFF"}}class Speak extends StringObject{constructor(e){super(Go,"speak");this.disable=getInteger({data:e.disable,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.priority=getStringOption(e.priority,["custom","caption","name","to\ +olTip"]);this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Stipple extends XFAObject{constructor(e){super(Go,"stipple",!0);this.id=e.id||"";this.rate=getInteger({data:e.rate,defaultValue:50,validate:e=>e>=0&&e<=100});this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[ho](e){const t=this.rate/100;return Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t\ +))}}class Subform extends XFAObject{constructor(e){super(Go,"subform",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.allowMacro=getInteger({data:e.allowMacro,defaultValue:0,validate:e=>1===e});this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.column\ +Widths=(e.columnWidths||"").trim().split(/\\s+/).map((e=>"-1"===e?-1:getMeasurement(e)));this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.mergeMode=getStringOption(e.mergeMode,["consumeData","matchTemp\ +late"]);this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.restoreState=getStringOption(e.restoreState,["manual","auto"]);this.scope=getStringOption(e.scope,["name","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");thi\ +s.assist=null;this.bind=null;this.bookend=null;this.border=null;this.break=null;this.calculate=null;this.desc=null;this.extras=null;this.keep=null;this.margin=null;this.occur=null;this.overflow=null;this.pageSet=null;this.para=null;this.traversal=null;this.validate=null;this.variables=null;this.area=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.connect=new XFAObjectArray;this.draw=new XFAObjectArray;this.event=new XFAObjectArray;this.exObject=new \ +XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.proto=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}[Cs](){const e=this[vs]();return e instanceof SubformSet?e[Cs]():e}[Rs](){return!0}[_s](){return this.layout.endsWith("-tb")&&0===this[ls].attempt&&this[ls].numberInLine>0||this[vs]()[_s]()}*[As](){yield*getContainedChildren(this)}[us](){return flushHTML(this)}[Zn](e,t){addHTML(this,e,t)\ +}[gs](){return getAvailableSpace(this)}[js](){const e=this[Cs]();if(!e[js]())return!1;if(void 0!==this[ls]._isSplittable)return this[ls]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[ls]._isSplittable=!1;return!1}if(this.keep&&"none"!==this.keep.intact){this[ls]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[ls].numberInLine)return!1;this[ls]._isSplittable=!0;return!0}[co](e){setTabIndex(this);if(this.break){if("auto"!==this.break.after||""!==this.br\ +eak.afterTarget){const e=new BreakAfter({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});e[Is]=this[Is];this[Qn](e);this.breakAfter.push(e)}if("auto"!==this.break.before||""!==this.break.beforeTarget){const e=new BreakBefore({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});e[Is]=this[Is];this[Qn](e);this.breakBefore.push(e)}if(""!==this.break.overflowTarget){const e=new Overflow({target:this\ +.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});e[Is]=this[Is];this[Qn](e);this.overflow.push(e)}this[Zs](this.break);this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;(this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&warn("XFA - Several breakBefore or breakAfter in subforms: please file a bug.");if(this.breakBefore.children.length>=1){const e=this.breakBefore.children[0];if(handleBre\ +ak(e))return HTMLResult.breakNode(e)}if(this[ls]?.afterBreakAfter)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[uo],class:[]};setAccess(this,a.class);this[ls]||=Object.create(null);Object.assign(this[ls],{children:t,line:null,attributes:a,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const r=this[Fs](),i=r[ls].noLayoutFailure,n=this[js]();n||setFirstUnsplittabl\ +e(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const s=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){const e=this[Cs]().columnWidths;if(Array.isArray(e)&&e.length>0){this[ls].columnWidths=e;this[ls].currentColumn=0}}const o=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),c=["xfaSubform"],l=layoutClass(this);l&&c.push(l);a.style=o;a.class=c;this.name&&(a.xfaName=this.name);if(this.overflo\ +w){const t=this.overflow[ws]();if(t.addLeader){t.addLeader=!1;handleOverflow(this,t.leader,e)}}this[Ys]();const h="lr-tb"===this.layout||"rl-tb"===this.layout,u=h?2:1;for(;this[ls].attempt<u;this[ls].attempt++){h&&1===this[ls].attempt&&(this[ls].numberInLine=0);const e=this[es]({filter:s,include:!0});if(e.success)break;if(e.isBreak()){this[Js]();return e}if(h&&0===this[ls].attempt&&0===this[ls].numberInLine&&!r[ls].noLayoutFailure){this[ls].attempt=u;break}}this[Js]();n||unsetFirstUnsplittable(t\ +his);r[ls].noLayoutFailure=i;if(this[ls].attempt===u){this.overflow&&(this[Fs]()[ls].overflowNode=this.overflow);n||delete this[ls];return HTMLResult.FAILURE}if(this.overflow){const t=this.overflow[ws]();if(t.addTrailer){t.addTrailer=!1;handleOverflow(this,t.trailer,e)}}let d=0,f=0;if(this.margin){d=this.margin.leftInset+this.margin.rightInset;f=this.margin.topInset+this.margin.bottomInset}const g=Math.max(this[ls].width+d,this.w||0),p=Math.max(this[ls].height+f,this.h||0),m=[this.x,this.y,g,p];\ +""===this.w&&(o.width=measureToString(g));""===this.h&&(o.height=measureToString(p));if(("0px"===o.width||"0px"===o.height)&&0===t.length)return HTMLResult.EMPTY;const b={name:"div",attributes:a,children:t};applyAssist(this,a);const y=HTMLResult.success(createWrapper(this,b),m);if(this.breakAfter.children.length>=1){const e=this.breakAfter.children[0];if(handleBreak(e)){this[ls].afterBreakAfter=y;return HTMLResult.breakNode(e)}}delete this[ls];return y}}class SubformSet extends XFAObject{constru\ +ctor(e){super(Go,"subformSet",!0);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["ordered","choice","unordered"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.bookend=null;this.break=null;this.desc=null;this.extras=null;this.occur=null;this.overflow=null;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[As](){yield*getContainedChil\ +dren(this)}[Cs](){let e=this[vs]();for(;!(e instanceof Subform);)e=e[vs]();return e}[Rs](){return!0}}class SubjectDN extends ContentObject{constructor(e){super(Go,"subjectDN");this.delimiter=e.delimiter||",";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){this[ss]=new Map(this[ss].split(this.delimiter).map((e=>{(e=e.split("=",2))[0]=e[0].trim();return e})))}}class SubjectDNs extends XFAObject{constructor(e){super(Go,"subjectDNs",!0);this.id=e.id||"";thi\ +s.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.subjectDN=new XFAObjectArray}}class Submit extends XFAObject{constructor(e){super(Go,"submit",!0);this.embedPDF=getInteger({data:e.embedPDF,defaultValue:0,validate:e=>1===e});this.format=getStringOption(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]);this.id=e.id||"";this.target=e.target||"";this.textEncoding=getKeyword({data:e.textEncoding?e.textEncoding.toLowerCase():"",default\ +Value:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)});this.use=e.use||"";this.usehref=e.usehref||"";this.xdpContent=e.xdpContent||"";this.encrypt=null;this.encryptData=new XFAObjectArray;this.signData=new XFAObjectArray}}class Template extends XFAObject{constructor(e){super(Go,"template",!0);this.baseProfile=getStringOption(e.baseProfile,["full","interactiveForms"]);this.extras=n\ +ull;this.subform=new XFAObjectArray}[hs](){0===this.subform.children.length&&warn("XFA - No subforms in template node.");this.subform.children.length>=2&&warn("XFA - Several subforms in template node: please file a bug.");this[no]=5e3}[js](){return!0}[to](e,t){return e.startsWith("#")?[this[Os].get(e.slice(1))]:searchNode(this,t,e,!0,!0)}*[oo](){if(!this.subform.children.length)return HTMLResult.success({name:"div",children:[]});this[ls]={overflowNode:null,firstUnsplittable:null,currentContentAr\ +ea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};const e=this.subform.children[0];e.pageSet[as]();const t=e.pageSet.pageArea.children,a={name:"div",children:[]};let r=null,i=null,n=null;if(e.breakBefore.children.length>=1){i=e.breakBefore.children[0];n=i.target}else if(e.subform.children.length>=1&&e.subform.children[0].breakBefore.children.length>=1){i=e.subform.children[0].breakBefore.children[0];n=i.targ\ +et}else if(e.break?.beforeTarget){i=e.break;n=i.beforeTarget}else if(e.subform.children.length>=1&&e.subform.children[0].break?.beforeTarget){i=e.subform.children[0].break;n=i.beforeTarget}if(i){const e=this[to](n,i[vs]());if(e instanceof PageArea){r=e;i[ls]={}}}r||=t[0];r[ls]={numberOfUse:1};const s=r[vs]();s[ls]={numberOfUse:1,pageIndex:s.pageArea.children.indexOf(r),pageSetIndex:0};let o,c=null,l=null,h=!0,u=0,d=0;for(;;){if(h)u=0;else{a.children.pop();if(3==++u){warn("XFA - Something goes wr\ +ong: please file a bug.");return a}}o=null;this[ls].currentPageArea=r;const t=r[co]().html;a.children.push(t);if(c){this[ls].noLayoutFailure=!0;t.children.push(c[co](r[ls].space).html);c=null}if(l){this[ls].noLayoutFailure=!0;t.children.push(l[co](r[ls].space).html);l=null}const i=r.contentArea.children,n=t.children.filter((e=>e.attributes.class.includes("xfaContentarea")));h=!1;this[ls].firstUnsplittable=null;this[ls].noLayoutFailure=!1;const flush=t=>{const a=e[us]();if(a){h||=a.children?.leng\ +th>0;n[t].children.push(a)}};for(let t=d,r=i.length;t<r;t++){const r=this[ls].currentContentArea=i[t],s={width:r.w,height:r.h};d=0;if(c){n[t].children.push(c[co](s).html);c=null}if(l){n[t].children.push(l[co](s).html);l=null}const u=e[co](s);if(u.success){if(u.html){h||=u.html.children?.length>0;n[t].children.push(u.html)}else!h&&a.children.length>1&&a.children.pop();return a}if(u.isBreak()){const e=u.breakNode;flush(t);if("auto"===e.targetType)continue;if(e.leader){c=this[to](e.leader,e[vs]());\ +c=c?c[0]:null}if(e.trailer){l=this[to](e.trailer,e[vs]());l=l?l[0]:null}if("pageArea"===e.targetType){o=e[ls].target;t=1/0}else if(e[ls].target){o=e[ls].target;d=e[ls].index+1;t=1/0}else t=e[ls].index}else if(this[ls].overflowNode){const e=this[ls].overflowNode;this[ls].overflowNode=null;const a=e[ws](),r=a.target;a.addLeader=null!==a.leader;a.addTrailer=null!==a.trailer;flush(t);const n=t;t=1/0;if(r instanceof PageArea)o=r;else if(r instanceof ContentArea){const e=i.indexOf(r);if(-1!==e)e>n?t=e\ +-1:d=e;else{o=r[vs]();d=o.contentArea.children.indexOf(r)}}}else flush(t)}this[ls].pageNumber+=1;o&&(o[Xs]()?o[ls].numberOfUse+=1:o=null);r=o||r[ks]();yield null}}}class Text extends ContentObject{constructor(e){super(Go,"text");this.id=e.id||"";this.maxChars=getInteger({data:e.maxChars,defaultValue:0,validate:e=>e>=0});this.name=e.name||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}[Yn](){return!0}[$s](e){if(e[Hs]===go.xhtml.id){this[ss]=e;return!0}warn(`XFA - Invalid cont\ +ent in Text: ${e[Ws]}.`);return!1}[Vs](e){this[ss]instanceof XFAObject||super[Vs](e)}[hs](){"string"==typeof this[ss]&&(this[ss]=this[ss].replaceAll("\\r\\n","\\n"))}[ws](){return"string"==typeof this[ss]?this[ss].split(/[\\u2029\\u2028\\n]/).filter((e=>!!e)).join("\\n"):this[ss][so]()}[co](e){if("string"==typeof this[ss]){const e=valueToHtml(this[ss]).html;if(this[ss].includes("\\u2029")){e.name="div";e.children=[];this[ss].split("\\u2029").map((e=>e.split(/[\\u2028\\n]/).flatMap((e=>[{name:"span",value:e\ +},{name:"br"}])))).forEach((t=>{e.children.push({name:"p",children:t})}))}else if(/[\\u2028\\n]/.test(this[ss])){e.name="div";e.children=[];this[ss].split(/[\\u2028\\n]/).forEach((t=>{e.children.push({name:"span",value:t},{name:"br"})}))}return HTMLResult.success(e)}return this[ss][co](e)}}class TextEdit extends XFAObject{constructor(e){super(Go,"textEdit",!0);this.allowRichText=getInteger({data:e.allowRichText,defaultValue:0,validate:e=>1===e});this.hScrollPolicy=getStringOption(e.hScrollPolicy,["a\ +uto","off","on"]);this.id=e.id||"";this.multiLine=getInteger({data:e.multiLine,defaultValue:"",validate:e=>0===e||1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.vScrollPolicy=getStringOption(e.vScrollPolicy,["auto","off","on"]);this.border=null;this.comb=null;this.extras=null;this.margin=null}[co](e){const t=toStyle(this,"border","font","margin");let a;const r=this[vs]()[vs]();""===this.multiLine&&(this.multiLine=r instanceof Draw?1:0);a=1===this.multiLine?{name:"textarea",attributes\ +:{dataId:r[os]?.[uo]||r[uo],fieldId:r[uo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(r),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:r[os]?.[uo]||r[uo],fieldId:r[uo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(r),"aria-required":!1}};if(isRequired(r)){a.attributes["aria-required"]=!0;a.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}class Time extends StringObject{constructor(e){super(Go,"tim\ +e");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[hs](){const e=this[ss].trim();this[ss]=e?new Date(e):null}[co](e){return valueToHtml(this[ss]?this[ss].toString():"")}}class TimeStamp extends XFAObject{constructor(e){super(Go,"timeStamp");this.id=e.id||"";this.server=e.server||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class ToolTip extends StringObject{constructor(e){super(Go,"toolTip");this\ +.id=e.id||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Traversal extends XFAObject{constructor(e){super(Go,"traversal",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.traverse=new XFAObjectArray}}class Traverse extends XFAObject{constructor(e){super(Go,"traverse",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["next","back","down","first","left","right","up"]);this.ref=e.ref||"";this.use=e.use||"";this.usehre\ +f=e.usehref||"";this.extras=null;this.script=null}get name(){return this.operation}[Us](){return!1}}class Ui extends XFAObject{constructor(e){super(Go,"ui",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null;this.barcode=null;this.button=null;this.checkButton=null;this.choiceList=null;this.dateTimeEdit=null;this.defaultUi=null;this.imageEdit=null;this.numericEdit=null;this.passwordEdit=null;this.signature=null;this.textEdit=null}[ws](){if(void 0=\ +==this[ls]){for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"picture"===e)continue;const t=this[e];if(t instanceof XFAObject){this[ls]=t;return t}}this[ls]=null}return this[ls]}[co](e){const t=this[ws]();return t?t[co](e):HTMLResult.EMPTY}}class Validate extends XFAObject{constructor(e){super(Go,"validate",!0);this.formatTest=getStringOption(e.formatTest,["warning","disabled","error"]);this.id=e.id||"";this.nullTest=getStringOption(e.nullTest,["disabled","error","warning"]);thi\ +s.scriptTest=getStringOption(e.scriptTest,["error","disabled","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.picture=null;this.script=null}}class Value extends XFAObject{constructor(e){super(Go,"value",!0);this.id=e.id||"";this.override=getInteger({data:e.override,defaultValue:0,validate:e=>1===e});this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.arc=null;this.boolean=null;this.date=null;this.dateTime=null\ +;this.decimal=null;this.exData=null;this.float=null;this.image=null;this.integer=null;this.line=null;this.rectangle=null;this.text=null;this.time=null}[io](e){const t=this[vs]();if(t instanceof Field&&t.ui?.imageEdit){if(!this.image){this.image=new Image({});this[Qn](this.image)}this.image[ss]=e[ss];return}const a=e[Ws];if(null===this[a]){for(const e of Object.getOwnPropertyNames(this)){const t=this[e];if(t instanceof XFAObject){this[e]=null;this[Zs](t)}}this[e[Ws]]=e;this[Qn](e)}else this[a][ss\ +]=e[ss]}[so](){if(this.exData)return"string"==typeof this.exData[ss]?this.exData[ss].trim():this.exData[ss][so]().trim();for(const e of Object.getOwnPropertyNames(this)){if("image"===e)continue;const t=this[e];if(t instanceof XFAObject)return(t[ss]||"").toString().trim()}return null}[co](e){for(const t of Object.getOwnPropertyNames(this)){const a=this[t];if(a instanceof XFAObject)return a[co](e)}return HTMLResult.EMPTY}}class Variables extends XFAObject{constructor(e){super(Go,"variables",!0);th\ +is.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.manifest=new XFAObjectArray;this.script=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[Us](){return!0}}class TemplateNamespace{static[fo](e,t){if(Template\ +Namespace.hasOwnProperty(e)){const a=TemplateNamespace[e](t);a[ro](t);return a}}static appearanceFilter(e){return new AppearanceFilter(e)}static arc(e){return new Arc(e)}static area(e){return new Area(e)}static assist(e){return new Assist(e)}static barcode(e){return new Barcode(e)}static bind(e){return new Bind(e)}static bindItems(e){return new BindItems(e)}static bookend(e){return new Bookend(e)}static boolean(e){return new BooleanElement(e)}static border(e){return new Border(e)}static break(e)\ +{return new Break(e)}static breakAfter(e){return new BreakAfter(e)}static breakBefore(e){return new BreakBefore(e)}static button(e){return new Button(e)}static calculate(e){return new Calculate(e)}static caption(e){return new Caption(e)}static certificate(e){return new Certificate(e)}static certificates(e){return new Certificates(e)}static checkButton(e){return new CheckButton(e)}static choiceList(e){return new ChoiceList(e)}static color(e){return new Color(e)}static comb(e){return new Comb(e)}s\ +tatic connect(e){return new Connect(e)}static contentArea(e){return new ContentArea(e)}static corner(e){return new Corner(e)}static date(e){return new DateElement(e)}static dateTime(e){return new DateTime(e)}static dateTimeEdit(e){return new DateTimeEdit(e)}static decimal(e){return new Decimal(e)}static defaultUi(e){return new DefaultUi(e)}static desc(e){return new Desc(e)}static digestMethod(e){return new DigestMethod(e)}static digestMethods(e){return new DigestMethods(e)}static draw(e){return \ +new Draw(e)}static edge(e){return new Edge(e)}static encoding(e){return new Encoding(e)}static encodings(e){return new Encodings(e)}static encrypt(e){return new Encrypt(e)}static encryptData(e){return new EncryptData(e)}static encryption(e){return new Encryption(e)}static encryptionMethod(e){return new EncryptionMethod(e)}static encryptionMethods(e){return new EncryptionMethods(e)}static event(e){return new Event(e)}static exData(e){return new ExData(e)}static exObject(e){return new ExObject(e)}\ +static exclGroup(e){return new ExclGroup(e)}static execute(e){return new Execute(e)}static extras(e){return new Extras(e)}static field(e){return new Field(e)}static fill(e){return new Fill(e)}static filter(e){return new Filter(e)}static float(e){return new Float(e)}static font(e){return new template_Font(e)}static format(e){return new Format(e)}static handler(e){return new Handler(e)}static hyphenation(e){return new Hyphenation(e)}static image(e){return new Image(e)}static imageEdit(e){return ne\ +w ImageEdit(e)}static integer(e){return new Integer(e)}static issuers(e){return new Issuers(e)}static items(e){return new Items(e)}static keep(e){return new Keep(e)}static keyUsage(e){return new KeyUsage(e)}static line(e){return new Line(e)}static linear(e){return new Linear(e)}static lockDocument(e){return new LockDocument(e)}static manifest(e){return new Manifest(e)}static margin(e){return new Margin(e)}static mdp(e){return new Mdp(e)}static medium(e){return new Medium(e)}static message(e){ret\ +urn new Message(e)}static numericEdit(e){return new NumericEdit(e)}static occur(e){return new Occur(e)}static oid(e){return new Oid(e)}static oids(e){return new Oids(e)}static overflow(e){return new Overflow(e)}static pageArea(e){return new PageArea(e)}static pageSet(e){return new PageSet(e)}static para(e){return new Para(e)}static passwordEdit(e){return new PasswordEdit(e)}static pattern(e){return new template_Pattern(e)}static picture(e){return new Picture(e)}static proto(e){return new Proto(e\ +)}static radial(e){return new Radial(e)}static reason(e){return new Reason(e)}static reasons(e){return new Reasons(e)}static rectangle(e){return new Rectangle(e)}static ref(e){return new RefElement(e)}static script(e){return new Script(e)}static setProperty(e){return new SetProperty(e)}static signData(e){return new SignData(e)}static signature(e){return new Signature(e)}static signing(e){return new Signing(e)}static solid(e){return new Solid(e)}static speak(e){return new Speak(e)}static stipple(\ +e){return new Stipple(e)}static subform(e){return new Subform(e)}static subformSet(e){return new SubformSet(e)}static subjectDN(e){return new SubjectDN(e)}static subjectDNs(e){return new SubjectDNs(e)}static submit(e){return new Submit(e)}static template(e){return new Template(e)}static text(e){return new Text(e)}static textEdit(e){return new TextEdit(e)}static time(e){return new Time(e)}static timeStamp(e){return new TimeStamp(e)}static toolTip(e){return new ToolTip(e)}static traversal(e){retur\ +n new Traversal(e)}static traverse(e){return new Traverse(e)}static ui(e){return new Ui(e)}static validate(e){return new Validate(e)}static value(e){return new Value(e)}static variables(e){return new Variables(e)}}const Zo=go.datasets.id;function createText(e){const t=new Text({});t[ss]=e;return t}class Binder{constructor(e){this.root=e;this.datasets=e.datasets;this.data=e.datasets?.data||new XmlObject(go.datasets.id,"data");this.emptyMerge=0===this.data[Ss]().length;this.root.form=this.form=e.t\ +emplate[is]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){this._bindElement(this.form,this.data);return this.form}getData(){return this.data}_bindValue(e,t,a){e[os]=t;if(e[Ts]())if(t[Ns]()){const a=t[ys]();e[io](createText(a))}else if(e instanceof Field&&"multiSelect"===e.ui?.choiceList?.open){const a=t[Ss]().map((e=>e[ss].trim())).join("\\n");e[io](createText(a))}else this._isConsumeData()&&warn("XFA - Nodes haven\'t the same typ\ +e.");else!t[Ns]()||this._isMatchTemplate()?this._bindElement(e,t):warn("XFA - Nodes haven\'t the same type.")}_findDataByNameToConsume(e,t,a,r){if(!e)return null;let i,n;for(let r=0;r<3;r++){i=a[xs](e,!1,!0);for(;;){n=i.next().value;if(!n)break;if(t===n[Ns]())return n}if(a[Hs]===go.datasets.id&&"data"===a[Ws])break;a=a[vs]()}if(!r)return null;i=this.data[xs](e,!0,!1);n=i.next().value;if(n)return n;i=this.data[ds](e,!0);n=i.next().value;return n?.[Ns]()?n:null}_setProperties(e,t){if(e.hasOwnProper\ +ty("setProperty"))for(const{ref:a,target:r,connection:i}of e.setProperty.children){if(i)continue;if(!a)continue;const n=searchNode(this.root,t,a,!1,!1);if(!n){warn(`XFA - Invalid reference: ${a}.`);continue}const[s]=n;if(!s[Es](this.data)){warn("XFA - Invalid node: must be a data node.");continue}const o=searchNode(this.root,e,r,!1,!1);if(!o){warn(`XFA - Invalid target: ${r}.`);continue}const[c]=o;if(!c[Es](e)){warn("XFA - Invalid target: must be a property or subproperty.");continue}const l=c[v\ +s]();if(c instanceof SetProperty||l instanceof SetProperty){warn("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(c instanceof BindItems||l instanceof BindItems){warn("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}const h=s[so](),u=c[Ws];if(c instanceof XFAAttribute){const e=Object.create(null);e[u]=h;const t=Reflect.construct(Object.getPrototypeOf(l).constructor,[e]);l[u]=t[u]}else if(c.hasOwnProperty(ss)){c[os]=s;c[ss]=h;\ +c[hs]()}else warn("XFA - Invalid node to use in setProperty")}}_bindItems(e,t){if(!e.hasOwnProperty("items")||!e.hasOwnProperty("bindItems")||e.bindItems.isEmpty())return;for(const t of e.items.children)e[Zs](t);e.items.clear();const a=new Items({}),r=new Items({});e[Qn](a);e.items.push(a);e[Qn](r);e.items.push(r);for(const{ref:i,labelRef:n,valueRef:s,connection:o}of e.bindItems.children){if(o)continue;if(!i)continue;const e=searchNode(this.root,t,i,!1,!1);if(e)for(const t of e){if(!t[Es](this.d\ +atasets)){warn(`XFA - Invalid ref (${i}): must be a datasets child.`);continue}const e=searchNode(this.root,t,n,!0,!1);if(!e){warn(`XFA - Invalid label: ${n}.`);continue}const[o]=e;if(!o[Es](this.datasets)){warn("XFA - Invalid label: must be a datasets child.");continue}const c=searchNode(this.root,t,s,!0,!1);if(!c){warn(`XFA - Invalid value: ${s}.`);continue}const[l]=c;if(!l[Es](this.datasets)){warn("XFA - Invalid value: must be a datasets child.");continue}const h=createText(o[so]()),u=createT\ +ext(l[so]());a[Qn](h);a.text.push(h);r[Qn](u);r.text.push(u)}else warn(`XFA - Invalid reference: ${i}.`)}}_bindOccurrences(e,t,a){let r;if(t.length>1){r=e[is]();r[Zs](r.occur);r.occur=null}this._bindValue(e,t[0],a);this._setProperties(e,t[0]);this._bindItems(e,t[0]);if(1===t.length)return;const i=e[vs](),n=e[Ws],s=i[Ms](e);for(let e=1,o=t.length;e<o;e++){const o=t[e],c=r[is]();i[n].push(c);i[Ds](s+e,c);this._bindValue(c,o,a);this._setProperties(c,o);this._bindItems(c,o)}}_createOccurrences(e){if\ +(!this.emptyMerge)return;const{occur:t}=e;if(!t||t.initial<=1)return;const a=e[vs](),r=e[Ws];if(!(a[r]instanceof XFAObjectArray))return;let i;i=e.name?a[r].children.filter((t=>t.name===e.name)).length:a[r].children.length;const n=a[Ms](e)+1,s=t.initial-i;if(s){const t=e[is]();t[Zs](t.occur);t.occur=null;a[r].push(t);a[Ds](n,t);for(let e=1;e<s;e++){const i=t[is]();a[r].push(i);a[Ds](n+e,i)}}}_getOccurInfo(e){const{name:t,occur:a}=e;if(!a||!t)return[1,1];const r=-1===a.max?1/0:a.max;return[a.min,r\ +]}_setAndBind(e,t){this._setProperties(e,t);this._bindItems(e,t);this._bindElement(e,t)}_bindElement(e,t){const a=[];this._createOccurrences(e);for(const r of e[Ss]()){if(r[os])continue;if(void 0===this._mergeMode&&"subform"===r[Ws]){this._mergeMode="consumeData"===r.mergeMode;const e=t[Ss]();if(e.length>0)this._bindOccurrences(r,[e[0]],null);else if(this.emptyMerge){const e=t[Hs]===Zo?-1:t[Hs],a=r[os]=new XmlObject(e,r.name||"root");t[Qn](a);this._bindElement(r,a)}continue}if(!r[Rs]())continue;\ +let e=!1,i=null,n=null,s=null;if(r.bind){switch(r.bind.match){case"none":this._setAndBind(r,t);continue;case"global":e=!0;break;case"dataRef":if(!r.bind.ref){warn(`XFA - ref is empty in node ${r[Ws]}.`);this._setAndBind(r,t);continue}n=r.bind.ref}r.bind.picture&&(i=r.bind.picture[ss])}const[o,c]=this._getOccurInfo(r);if(n){s=searchNode(this.root,t,n,!0,!1);if(null===s){s=createDataNode(this.data,t,n);if(!s)continue;this._isConsumeData()&&(s[ns]=!0);this._setAndBind(r,s);continue}this._isConsumeD\ +ata()&&(s=s.filter((e=>!e[ns])));s.length>c?s=s.slice(0,c):0===s.length&&(s=null);s&&this._isConsumeData()&&s.forEach((e=>{e[ns]=!0}))}else{if(!r.name){this._setAndBind(r,t);continue}if(this._isConsumeData()){const a=[];for(;a.length<c;){const i=this._findDataByNameToConsume(r.name,r[Ts](),t,e);if(!i)break;i[ns]=!0;a.push(i)}s=a.length>0?a:null}else{s=t[xs](r.name,!1,this.emptyMerge).next().value;if(!s){if(0===o){a.push(r);continue}const e=t[Hs]===Zo?-1:t[Hs];s=r[os]=new XmlObject(e,r.name);this\ +.emptyMerge&&(s[ns]=!0);t[Qn](s);this._setAndBind(r,s);continue}this.emptyMerge&&(s[ns]=!0);s=[s]}}s?this._bindOccurrences(r,s,i):o>0?this._setAndBind(r,t):a.push(r)}a.forEach((e=>e[vs]()[Zs](e)))}}class DataHandler{constructor(e,t){this.data=t;this.dataset=e.datasets||null}serialize(e){const t=[[-1,this.data[Ss]()]];for(;t.length>0;){const a=t.at(-1),[r,i]=a;if(r+1===i.length){t.pop();continue}const n=i[++a[0]],s=e.get(n[uo]);if(s)n[io](s);else{const t=n[fs]();for(const a of t.values()){const t\ +=e.get(a[uo]);if(t){a[io](t);break}}}const o=n[Ss]();o.length>0&&t.push([-1,o])}const a=[\'<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">\'];if(this.dataset)for(const e of this.dataset[Ss]())"data"!==e[Ws]&&e[lo](a);this.data[lo](a);a.push("</xfa:datasets>");return a.join("")}}const Qo=go.config.id;class Acrobat extends XFAObject{constructor(e){super(Qo,"acrobat",!0);this.acrobat7=null;this.autoSave=null;this.common=null;this.validate=null;this.validateApprovalSignatures=null;t\ +his.submitUrl=new XFAObjectArray}}class Acrobat7 extends XFAObject{constructor(e){super(Qo,"acrobat7",!0);this.dynamicRender=null}}class ADBE_JSConsole extends OptionObject{constructor(e){super(Qo,"ADBE_JSConsole",["delegate","Enable","Disable"])}}class ADBE_JSDebugger extends OptionObject{constructor(e){super(Qo,"ADBE_JSDebugger",["delegate","Enable","Disable"])}}class AddSilentPrint extends Option01{constructor(e){super(Qo,"addSilentPrint")}}class AddViewerPreferences extends Option01{construc\ +tor(e){super(Qo,"addViewerPreferences")}}class AdjustData extends Option10{constructor(e){super(Qo,"adjustData")}}class AdobeExtensionLevel extends IntegerObject{constructor(e){super(Qo,"adobeExtensionLevel",0,(e=>e>=1&&e<=8))}}class Agent extends XFAObject{constructor(e){super(Qo,"agent",!0);this.name=e.name?e.name.trim():"";this.common=new XFAObjectArray}}class AlwaysEmbed extends ContentObject{constructor(e){super(Qo,"alwaysEmbed")}}class Amd extends StringObject{constructor(e){super(Qo,"amd"\ +)}}class config_Area extends XFAObject{constructor(e){super(Qo,"area");this.level=getInteger({data:e.level,defaultValue:0,validate:e=>e>=1&&e<=3});this.name=getStringOption(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}}class Attributes extends OptionObject{constructor(e){super(Qo,"attributes",["preserve","delegate","ignore"])}}class AutoSave extends OptionObject{constructor(e){super(Qo,"autoSave",["disabled","\ +enabled"])}}class Base extends StringObject{constructor(e){super(Qo,"base")}}class BatchOutput extends XFAObject{constructor(e){super(Qo,"batchOutput");this.format=getStringOption(e.format,["none","concat","zip","zipCompress"])}}class BehaviorOverride extends ContentObject{constructor(e){super(Qo,"behaviorOverride")}[hs](){this[ss]=new Map(this[ss].trim().split(/\\s+/).filter((e=>e.includes(":"))).map((e=>e.split(":",2))))}}class Cache extends XFAObject{constructor(e){super(Qo,"cache",!0);this.te\ +mplateCache=null}}class Change extends Option01{constructor(e){super(Qo,"change")}}class Common extends XFAObject{constructor(e){super(Qo,"common",!0);this.data=null;this.locale=null;this.localeSet=null;this.messaging=null;this.suppressBanner=null;this.template=null;this.validationMessaging=null;this.versionControl=null;this.log=new XFAObjectArray}}class Compress extends XFAObject{constructor(e){super(Qo,"compress");this.scope=getStringOption(e.scope,["imageOnly","document"])}}class CompressLogi\ +calStructure extends Option01{constructor(e){super(Qo,"compressLogicalStructure")}}class CompressObjectStream extends Option10{constructor(e){super(Qo,"compressObjectStream")}}class Compression extends XFAObject{constructor(e){super(Qo,"compression",!0);this.compressLogicalStructure=null;this.compressObjectStream=null;this.level=null;this.type=null}}class Config extends XFAObject{constructor(e){super(Qo,"config",!0);this.acrobat=null;this.present=null;this.trace=null;this.agent=new XFAObjectArra\ +y}}class Conformance extends OptionObject{constructor(e){super(Qo,"conformance",["A","B"])}}class ContentCopy extends Option01{constructor(e){super(Qo,"contentCopy")}}class Copies extends IntegerObject{constructor(e){super(Qo,"copies",1,(e=>e>=1))}}class Creator extends StringObject{constructor(e){super(Qo,"creator")}}class CurrentPage extends IntegerObject{constructor(e){super(Qo,"currentPage",0,(e=>e>=0))}}class Data extends XFAObject{constructor(e){super(Qo,"data",!0);this.adjustData=null;thi\ +s.attributes=null;this.incrementalLoad=null;this.outputXSL=null;this.range=null;this.record=null;this.startNode=null;this.uri=null;this.window=null;this.xsl=null;this.excludeNS=new XFAObjectArray;this.transform=new XFAObjectArray}}class Debug extends XFAObject{constructor(e){super(Qo,"debug",!0);this.uri=null}}class DefaultTypeface extends ContentObject{constructor(e){super(Qo,"defaultTypeface");this.writingScript=getStringOption(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Gree\ +k","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}}class Destination extends OptionObject{constructor(e){super(Qo,"destination",["pdf","pcl","ps","webClient","zpl"])}}class DocumentAssembly extends Option01{constructor(e){super(Qo,"documentAssembly")}}class Driver extends XFAObject{constructor(e){super(Qo,"driver",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class DuplexOption extends OptionObject{constructor(e){supe\ +r(Qo,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}}class DynamicRender extends OptionObject{constructor(e){super(Qo,"dynamicRender",["forbidden","required"])}}class Embed extends Option01{constructor(e){super(Qo,"embed")}}class config_Encrypt extends Option01{constructor(e){super(Qo,"encrypt")}}class config_Encryption extends XFAObject{constructor(e){super(Qo,"encryption",!0);this.encrypt=null;this.encryptionLevel=null;this.permissions=null}}class EncryptionLevel extend\ +s OptionObject{constructor(e){super(Qo,"encryptionLevel",["40bit","128bit"])}}class Enforce extends StringObject{constructor(e){super(Qo,"enforce")}}class Equate extends XFAObject{constructor(e){super(Qo,"equate");this.force=getInteger({data:e.force,defaultValue:1,validate:e=>0===e});this.from=e.from||"";this.to=e.to||""}}class EquateRange extends XFAObject{constructor(e){super(Qo,"equateRange");this.from=e.from||"";this.to=e.to||"";this._unicodeRange=e.unicodeRange||""}get unicodeRange(){const \ +e=[],t=/U\\+([0-9a-fA-F]+)/,a=this._unicodeRange;for(let r of a.split(",").map((e=>e.trim())).filter((e=>!!e))){r=r.split("-",2).map((e=>{const a=e.match(t);return a?parseInt(a[1],16):0}));1===r.length&&r.push(r[0]);e.push(r)}return shadow(this,"unicodeRange",e)}}class Exclude extends ContentObject{constructor(e){super(Qo,"exclude")}[hs](){this[ss]=this[ss].trim().split(/\\s+/).filter((e=>e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e)))}}class ExcludeNS extends\ + StringObject{constructor(e){super(Qo,"excludeNS")}}class FlipLabel extends OptionObject{constructor(e){super(Qo,"flipLabel",["usePrinterSetting","on","off"])}}class config_FontInfo extends XFAObject{constructor(e){super(Qo,"fontInfo",!0);this.embed=null;this.map=null;this.subsetBelow=null;this.alwaysEmbed=new XFAObjectArray;this.defaultTypeface=new XFAObjectArray;this.neverEmbed=new XFAObjectArray}}class FormFieldFilling extends Option01{constructor(e){super(Qo,"formFieldFilling")}}class GroupP\ +arent extends StringObject{constructor(e){super(Qo,"groupParent")}}class IfEmpty extends OptionObject{constructor(e){super(Qo,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}}class IncludeXDPContent extends StringObject{constructor(e){super(Qo,"includeXDPContent")}}class IncrementalLoad extends OptionObject{constructor(e){super(Qo,"incrementalLoad",["none","forwardOnly"])}}class IncrementalMerge extends Option01{constructor(e){super(Qo,"incrementalMerge")}}class Interactive extends Option\ +01{constructor(e){super(Qo,"interactive")}}class Jog extends OptionObject{constructor(e){super(Qo,"jog",["usePrinterSetting","none","pageSet"])}}class LabelPrinter extends XFAObject{constructor(e){super(Qo,"labelPrinter",!0);this.name=getStringOption(e.name,["zpl","dpl","ipl","tcpl"]);this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class Layout extends OptionObject{constructor(e){super(Qo,"layout",["paginate","panel"])}}class Level extends IntegerObject{constructor(e)\ +{super(Qo,"level",0,(e=>e>0))}}class Linearized extends Option01{constructor(e){super(Qo,"linearized")}}class Locale extends StringObject{constructor(e){super(Qo,"locale")}}class LocaleSet extends StringObject{constructor(e){super(Qo,"localeSet")}}class Log extends XFAObject{constructor(e){super(Qo,"log",!0);this.mode=null;this.threshold=null;this.to=null;this.uri=null}}class MapElement extends XFAObject{constructor(e){super(Qo,"map",!0);this.equate=new XFAObjectArray;this.equateRange=new XFAObj\ +ectArray}}class MediumInfo extends XFAObject{constructor(e){super(Qo,"mediumInfo",!0);this.map=null}}class config_Message extends XFAObject{constructor(e){super(Qo,"message",!0);this.msgId=null;this.severity=null}}class Messaging extends XFAObject{constructor(e){super(Qo,"messaging",!0);this.message=new XFAObjectArray}}class Mode extends OptionObject{constructor(e){super(Qo,"mode",["append","overwrite"])}}class ModifyAnnots extends Option01{constructor(e){super(Qo,"modifyAnnots")}}class MsgId ex\ +tends IntegerObject{constructor(e){super(Qo,"msgId",1,(e=>e>=1))}}class NameAttr extends StringObject{constructor(e){super(Qo,"nameAttr")}}class NeverEmbed extends ContentObject{constructor(e){super(Qo,"neverEmbed")}}class NumberOfCopies extends IntegerObject{constructor(e){super(Qo,"numberOfCopies",null,(e=>e>=2&&e<=5))}}class OpenAction extends XFAObject{constructor(e){super(Qo,"openAction",!0);this.destination=null}}class Output extends XFAObject{constructor(e){super(Qo,"output",!0);this.to=n\ +ull;this.type=null;this.uri=null}}class OutputBin extends StringObject{constructor(e){super(Qo,"outputBin")}}class OutputXSL extends XFAObject{constructor(e){super(Qo,"outputXSL",!0);this.uri=null}}class Overprint extends OptionObject{constructor(e){super(Qo,"overprint",["none","both","draw","field"])}}class Packets extends StringObject{constructor(e){super(Qo,"packets")}[hs](){"*"!==this[ss]&&(this[ss]=this[ss].trim().split(/\\s+/).filter((e=>["config","datasets","template","xfdf","xslt"].includ\ +es(e))))}}class PageOffset extends XFAObject{constructor(e){super(Qo,"pageOffset");this.x=getInteger({data:e.x,defaultValue:"useXDCSetting",validate:e=>!0});this.y=getInteger({data:e.y,defaultValue:"useXDCSetting",validate:e=>!0})}}class PageRange extends StringObject{constructor(e){super(Qo,"pageRange")}[hs](){const e=this[ss].trim().split(/\\s+/).map((e=>parseInt(e,10))),t=[];for(let a=0,r=e.length;a<r;a+=2)t.push(e.slice(a,a+2));this[ss]=t}}class Pagination extends OptionObject{constructor(e){\ +super(Qo,"pagination",["simplex","duplexShortEdge","duplexLongEdge"])}}class PaginationOverride extends OptionObject{constructor(e){super(Qo,"paginationOverride",["none","forceDuplex","forceDuplexLongEdge","forceDuplexShortEdge","forceSimplex"])}}class Part extends IntegerObject{constructor(e){super(Qo,"part",1,(e=>!1))}}class Pcl extends XFAObject{constructor(e){super(Qo,"pcl",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=nul\ +l;this.pageOffset=null;this.staple=null;this.xdc=null}}class Pdf extends XFAObject{constructor(e){super(Qo,"pdf",!0);this.name=e.name||"";this.adobeExtensionLevel=null;this.batchOutput=null;this.compression=null;this.creator=null;this.encryption=null;this.fontInfo=null;this.interactive=null;this.linearized=null;this.openAction=null;this.pdfa=null;this.producer=null;this.renderPolicy=null;this.scriptModel=null;this.silentPrint=null;this.submitFormat=null;this.tagged=null;this.version=null;this.vi\ +ewerPreferences=null;this.xdc=null}}class Pdfa extends XFAObject{constructor(e){super(Qo,"pdfa",!0);this.amd=null;this.conformance=null;this.includeXDPContent=null;this.part=null}}class Permissions extends XFAObject{constructor(e){super(Qo,"permissions",!0);this.accessibleContent=null;this.change=null;this.contentCopy=null;this.documentAssembly=null;this.formFieldFilling=null;this.modifyAnnots=null;this.plaintextMetadata=null;this.print=null;this.printHighQuality=null}}class PickTrayByPDFSize ex\ +tends Option01{constructor(e){super(Qo,"pickTrayByPDFSize")}}class config_Picture extends StringObject{constructor(e){super(Qo,"picture")}}class PlaintextMetadata extends Option01{constructor(e){super(Qo,"plaintextMetadata")}}class Presence extends OptionObject{constructor(e){super(Qo,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}}class Present extends XFAObject{constructor(e){super(Qo,"present",!0);this.behaviorOverride=null;this.cache=null;this.common=null;this.copi\ +es=null;this.destination=null;this.incrementalMerge=null;this.layout=null;this.output=null;this.overprint=null;this.pagination=null;this.paginationOverride=null;this.script=null;this.validate=null;this.xdp=null;this.driver=new XFAObjectArray;this.labelPrinter=new XFAObjectArray;this.pcl=new XFAObjectArray;this.pdf=new XFAObjectArray;this.ps=new XFAObjectArray;this.submitUrl=new XFAObjectArray;this.webClient=new XFAObjectArray;this.zpl=new XFAObjectArray}}class Print extends Option01{constructor(\ +e){super(Qo,"print")}}class PrintHighQuality extends Option01{constructor(e){super(Qo,"printHighQuality")}}class PrintScaling extends OptionObject{constructor(e){super(Qo,"printScaling",["appdefault","noScaling"])}}class PrinterName extends StringObject{constructor(e){super(Qo,"printerName")}}class Producer extends StringObject{constructor(e){super(Qo,"producer")}}class Ps extends XFAObject{constructor(e){super(Qo,"ps",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=nu\ +ll;this.mediumInfo=null;this.outputBin=null;this.staple=null;this.xdc=null}}class Range extends ContentObject{constructor(e){super(Qo,"range")}[hs](){this[ss]=this[ss].split(",",2).map((e=>e.split("-").map((e=>parseInt(e.trim(),10))))).filter((e=>e.every((e=>!isNaN(e))))).map((e=>{1===e.length&&e.push(e[0]);return e}))}}class Record extends ContentObject{constructor(e){super(Qo,"record")}[hs](){this[ss]=this[ss].trim();const e=parseInt(this[ss],10);!isNaN(e)&&e>=0&&(this[ss]=e)}}class Relevant e\ +xtends ContentObject{constructor(e){super(Qo,"relevant")}[hs](){this[ss]=this[ss].trim().split(/\\s+/)}}class Rename extends ContentObject{constructor(e){super(Qo,"rename")}[hs](){this[ss]=this[ss].trim();(this[ss].toLowerCase().startsWith("xml")||new RegExp("[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*","u").test(this[ss]))&&warn("XFA - Rename: invalid XFA name")}}class RenderPolicy extends OptionObject{constructor(e){super(Qo,"renderPolicy",["server","client"])}}class RunScripts extends OptionObject{construc\ +tor(e){super(Qo,"runScripts",["both","client","none","server"])}}class config_Script extends XFAObject{constructor(e){super(Qo,"script",!0);this.currentPage=null;this.exclude=null;this.runScripts=null}}class ScriptModel extends OptionObject{constructor(e){super(Qo,"scriptModel",["XFA","none"])}}class Severity extends OptionObject{constructor(e){super(Qo,"severity",["ignore","error","information","trace","warning"])}}class SilentPrint extends XFAObject{constructor(e){super(Qo,"silentPrint",!0);th\ +is.addSilentPrint=null;this.printerName=null}}class Staple extends XFAObject{constructor(e){super(Qo,"staple");this.mode=getStringOption(e.mode,["usePrinterSetting","on","off"])}}class StartNode extends StringObject{constructor(e){super(Qo,"startNode")}}class StartPage extends IntegerObject{constructor(e){super(Qo,"startPage",0,(e=>!0))}}class SubmitFormat extends OptionObject{constructor(e){super(Qo,"submitFormat",["html","delegate","fdf","xml","pdf"])}}class SubmitUrl extends StringObject{cons\ +tructor(e){super(Qo,"submitUrl")}}class SubsetBelow extends IntegerObject{constructor(e){super(Qo,"subsetBelow",100,(e=>e>=0&&e<=100))}}class SuppressBanner extends Option01{constructor(e){super(Qo,"suppressBanner")}}class Tagged extends Option01{constructor(e){super(Qo,"tagged")}}class config_Template extends XFAObject{constructor(e){super(Qo,"template",!0);this.base=null;this.relevant=null;this.startPage=null;this.uri=null;this.xsl=null}}class Threshold extends OptionObject{constructor(e){supe\ +r(Qo,"threshold",["trace","error","information","warning"])}}class To extends OptionObject{constructor(e){super(Qo,"to",["null","memory","stderr","stdout","system","uri"])}}class TemplateCache extends XFAObject{constructor(e){super(Qo,"templateCache");this.maxEntries=getInteger({data:e.maxEntries,defaultValue:5,validate:e=>e>=0})}}class Trace extends XFAObject{constructor(e){super(Qo,"trace",!0);this.area=new XFAObjectArray}}class Transform extends XFAObject{constructor(e){super(Qo,"transform",!\ +0);this.groupParent=null;this.ifEmpty=null;this.nameAttr=null;this.picture=null;this.presence=null;this.rename=null;this.whitespace=null}}class Type extends OptionObject{constructor(e){super(Qo,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}}class Uri extends StringObject{constructor(e){super(Qo,"uri")}}class config_Validate extends OptionObject{constructor(e){super(Qo,"validate",["preSubmit","prePrint","preExecute","preSave"])}}class Valida\ +teApprovalSignatures extends ContentObject{constructor(e){super(Qo,"validateApprovalSignatures")}[hs](){this[ss]=this[ss].trim().split(/\\s+/).filter((e=>["docReady","postSign"].includes(e)))}}class ValidationMessaging extends OptionObject{constructor(e){super(Qo,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}}class Version extends OptionObject{constructor(e){super(Qo,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}}class VersionControl e\ +xtends XFAObject{constructor(e){super(Qo,"VersionControl");this.outputBelow=getStringOption(e.outputBelow,["warn","error","update"]);this.sourceAbove=getStringOption(e.sourceAbove,["warn","error"]);this.sourceBelow=getStringOption(e.sourceBelow,["update","maintain"])}}class ViewerPreferences extends XFAObject{constructor(e){super(Qo,"viewerPreferences",!0);this.ADBE_JSConsole=null;this.ADBE_JSDebugger=null;this.addViewerPreferences=null;this.duplexOption=null;this.enforce=null;this.numberOfCopie\ +s=null;this.pageRange=null;this.pickTrayByPDFSize=null;this.printScaling=null}}class WebClient extends XFAObject{constructor(e){super(Qo,"webClient",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class Whitespace extends OptionObject{constructor(e){super(Qo,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}}class Window extends ContentObject{constructor(e){super(Qo,"window")}[hs](){const e=this[ss].split(",",2).map((e=>parseInt(e.trim(),10)));if(e.some((e=>is\ +NaN(e))))this[ss]=[0,0];else{1===e.length&&e.push(e[0]);this[ss]=e}}}class Xdc extends XFAObject{constructor(e){super(Qo,"xdc",!0);this.uri=new XFAObjectArray;this.xsl=new XFAObjectArray}}class Xdp extends XFAObject{constructor(e){super(Qo,"xdp",!0);this.packets=null}}class Xsl extends XFAObject{constructor(e){super(Qo,"xsl",!0);this.debug=null;this.uri=null}}class Zpl extends XFAObject{constructor(e){super(Qo,"zpl",!0);this.name=e.name?e.name.trim():"";this.batchOutput=null;this.flipLabel=null;\ +this.fontInfo=null;this.xdc=null}}class ConfigNamespace{static[fo](e,t){if(ConfigNamespace.hasOwnProperty(e))return ConfigNamespace[e](t)}static acrobat(e){return new Acrobat(e)}static acrobat7(e){return new Acrobat7(e)}static ADBE_JSConsole(e){return new ADBE_JSConsole(e)}static ADBE_JSDebugger(e){return new ADBE_JSDebugger(e)}static addSilentPrint(e){return new AddSilentPrint(e)}static addViewerPreferences(e){return new AddViewerPreferences(e)}static adjustData(e){return new AdjustData(e)}stat\ +ic adobeExtensionLevel(e){return new AdobeExtensionLevel(e)}static agent(e){return new Agent(e)}static alwaysEmbed(e){return new AlwaysEmbed(e)}static amd(e){return new Amd(e)}static area(e){return new config_Area(e)}static attributes(e){return new Attributes(e)}static autoSave(e){return new AutoSave(e)}static base(e){return new Base(e)}static batchOutput(e){return new BatchOutput(e)}static behaviorOverride(e){return new BehaviorOverride(e)}static cache(e){return new Cache(e)}static change(e){re\ +turn new Change(e)}static common(e){return new Common(e)}static compress(e){return new Compress(e)}static compressLogicalStructure(e){return new CompressLogicalStructure(e)}static compressObjectStream(e){return new CompressObjectStream(e)}static compression(e){return new Compression(e)}static config(e){return new Config(e)}static conformance(e){return new Conformance(e)}static contentCopy(e){return new ContentCopy(e)}static copies(e){return new Copies(e)}static creator(e){return new Creator(e)}s\ +tatic currentPage(e){return new CurrentPage(e)}static data(e){return new Data(e)}static debug(e){return new Debug(e)}static defaultTypeface(e){return new DefaultTypeface(e)}static destination(e){return new Destination(e)}static documentAssembly(e){return new DocumentAssembly(e)}static driver(e){return new Driver(e)}static duplexOption(e){return new DuplexOption(e)}static dynamicRender(e){return new DynamicRender(e)}static embed(e){return new Embed(e)}static encrypt(e){return new config_Encrypt(e\ +)}static encryption(e){return new config_Encryption(e)}static encryptionLevel(e){return new EncryptionLevel(e)}static enforce(e){return new Enforce(e)}static equate(e){return new Equate(e)}static equateRange(e){return new EquateRange(e)}static exclude(e){return new Exclude(e)}static excludeNS(e){return new ExcludeNS(e)}static flipLabel(e){return new FlipLabel(e)}static fontInfo(e){return new config_FontInfo(e)}static formFieldFilling(e){return new FormFieldFilling(e)}static groupParent(e){return\ + new GroupParent(e)}static ifEmpty(e){return new IfEmpty(e)}static includeXDPContent(e){return new IncludeXDPContent(e)}static incrementalLoad(e){return new IncrementalLoad(e)}static incrementalMerge(e){return new IncrementalMerge(e)}static interactive(e){return new Interactive(e)}static jog(e){return new Jog(e)}static labelPrinter(e){return new LabelPrinter(e)}static layout(e){return new Layout(e)}static level(e){return new Level(e)}static linearized(e){return new Linearized(e)}static locale(e)\ +{return new Locale(e)}static localeSet(e){return new LocaleSet(e)}static log(e){return new Log(e)}static map(e){return new MapElement(e)}static mediumInfo(e){return new MediumInfo(e)}static message(e){return new config_Message(e)}static messaging(e){return new Messaging(e)}static mode(e){return new Mode(e)}static modifyAnnots(e){return new ModifyAnnots(e)}static msgId(e){return new MsgId(e)}static nameAttr(e){return new NameAttr(e)}static neverEmbed(e){return new NeverEmbed(e)}static numberOfCop\ +ies(e){return new NumberOfCopies(e)}static openAction(e){return new OpenAction(e)}static output(e){return new Output(e)}static outputBin(e){return new OutputBin(e)}static outputXSL(e){return new OutputXSL(e)}static overprint(e){return new Overprint(e)}static packets(e){return new Packets(e)}static pageOffset(e){return new PageOffset(e)}static pageRange(e){return new PageRange(e)}static pagination(e){return new Pagination(e)}static paginationOverride(e){return new PaginationOverride(e)}static par\ +t(e){return new Part(e)}static pcl(e){return new Pcl(e)}static pdf(e){return new Pdf(e)}static pdfa(e){return new Pdfa(e)}static permissions(e){return new Permissions(e)}static pickTrayByPDFSize(e){return new PickTrayByPDFSize(e)}static picture(e){return new config_Picture(e)}static plaintextMetadata(e){return new PlaintextMetadata(e)}static presence(e){return new Presence(e)}static present(e){return new Present(e)}static print(e){return new Print(e)}static printHighQuality(e){return new PrintHi\ +ghQuality(e)}static printScaling(e){return new PrintScaling(e)}static printerName(e){return new PrinterName(e)}static producer(e){return new Producer(e)}static ps(e){return new Ps(e)}static range(e){return new Range(e)}static record(e){return new Record(e)}static relevant(e){return new Relevant(e)}static rename(e){return new Rename(e)}static renderPolicy(e){return new RenderPolicy(e)}static runScripts(e){return new RunScripts(e)}static script(e){return new config_Script(e)}static scriptModel(e){\ +return new ScriptModel(e)}static severity(e){return new Severity(e)}static silentPrint(e){return new SilentPrint(e)}static staple(e){return new Staple(e)}static startNode(e){return new StartNode(e)}static startPage(e){return new StartPage(e)}static submitFormat(e){return new SubmitFormat(e)}static submitUrl(e){return new SubmitUrl(e)}static subsetBelow(e){return new SubsetBelow(e)}static suppressBanner(e){return new SuppressBanner(e)}static tagged(e){return new Tagged(e)}static template(e){retur\ +n new config_Template(e)}static templateCache(e){return new TemplateCache(e)}static threshold(e){return new Threshold(e)}static to(e){return new To(e)}static trace(e){return new Trace(e)}static transform(e){return new Transform(e)}static type(e){return new Type(e)}static uri(e){return new Uri(e)}static validate(e){return new config_Validate(e)}static validateApprovalSignatures(e){return new ValidateApprovalSignatures(e)}static validationMessaging(e){return new ValidationMessaging(e)}static versi\ +on(e){return new Version(e)}static versionControl(e){return new VersionControl(e)}static viewerPreferences(e){return new ViewerPreferences(e)}static webClient(e){return new WebClient(e)}static whitespace(e){return new Whitespace(e)}static window(e){return new Window(e)}static xdc(e){return new Xdc(e)}static xdp(e){return new Xdp(e)}static xsl(e){return new Xsl(e)}static zpl(e){return new Zpl(e)}}const ec=go.connectionSet.id;class ConnectionSet extends XFAObject{constructor(e){super(ec,"connectio\ +nSet",!0);this.wsdlConnection=new XFAObjectArray;this.xmlConnection=new XFAObjectArray;this.xsdConnection=new XFAObjectArray}}class EffectiveInputPolicy extends XFAObject{constructor(e){super(ec,"effectiveInputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EffectiveOutputPolicy extends XFAObject{constructor(e){super(ec,"effectiveOutputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Operation \ +extends StringObject{constructor(e){super(ec,"operation");this.id=e.id||"";this.input=e.input||"";this.name=e.name||"";this.output=e.output||"";this.use=e.use||"";this.usehref=e.usehref||""}}class RootElement extends StringObject{constructor(e){super(ec,"rootElement");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAction extends StringObject{constructor(e){super(ec,"soapAction");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=\ +e.usehref||""}}class SoapAddress extends StringObject{constructor(e){super(ec,"soapAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class connection_set_Uri extends StringObject{constructor(e){super(ec,"uri");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlAddress extends StringObject{constructor(e){super(ec,"wsdlAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"\ +"}}class WsdlConnection extends XFAObject{constructor(e){super(ec,"wsdlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.effectiveInputPolicy=null;this.effectiveOutputPolicy=null;this.operation=null;this.soapAction=null;this.soapAddress=null;this.wsdlAddress=null}}class XmlConnection extends XFAObject{constructor(e){super(ec,"xmlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.uri=null}}class XsdConnection extends XFAObject{c\ +onstructor(e){super(ec,"xsdConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.rootElement=null;this.uri=null}}class ConnectionSetNamespace{static[fo](e,t){if(ConnectionSetNamespace.hasOwnProperty(e))return ConnectionSetNamespace[e](t)}static connectionSet(e){return new ConnectionSet(e)}static effectiveInputPolicy(e){return new EffectiveInputPolicy(e)}static effectiveOutputPolicy(e){return new EffectiveOutputPolicy(e)}static operation(e){return new Operation(e)}s\ +tatic rootElement(e){return new RootElement(e)}static soapAction(e){return new SoapAction(e)}static soapAddress(e){return new SoapAddress(e)}static uri(e){return new connection_set_Uri(e)}static wsdlAddress(e){return new WsdlAddress(e)}static wsdlConnection(e){return new WsdlConnection(e)}static xmlConnection(e){return new XmlConnection(e)}static xsdConnection(e){return new XsdConnection(e)}}const tc=go.datasets.id;class datasets_Data extends XmlObject{constructor(e){super(tc,"data",e)}[Ls](){re\ +turn!0}}class Datasets extends XFAObject{constructor(e){super(tc,"datasets",!0);this.data=null;this.Signature=null}[$s](e){const t=e[Ws];("data"===t&&e[Hs]===tc||"Signature"===t&&e[Hs]===go.signature.id)&&(this[t]=e);this[Qn](e)}}class DatasetsNamespace{static[fo](e,t){if(DatasetsNamespace.hasOwnProperty(e))return DatasetsNamespace[e](t)}static datasets(e){return new Datasets(e)}static data(e){return new datasets_Data(e)}}const ac=go.localeSet.id;class CalendarSymbols extends XFAObject{construct\ +or(e){super(ac,"calendarSymbols",!0);this.name="gregorian";this.dayNames=new XFAObjectArray(2);this.eraNames=null;this.meridiemNames=null;this.monthNames=new XFAObjectArray(2)}}class CurrencySymbol extends StringObject{constructor(e){super(ac,"currencySymbol");this.name=getStringOption(e.name,["symbol","isoname","decimal"])}}class CurrencySymbols extends XFAObject{constructor(e){super(ac,"currencySymbols",!0);this.currencySymbol=new XFAObjectArray(3)}}class DatePattern extends StringObject{const\ +ructor(e){super(ac,"datePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class DatePatterns extends XFAObject{constructor(e){super(ac,"datePatterns",!0);this.datePattern=new XFAObjectArray(4)}}class DateTimeSymbols extends ContentObject{constructor(e){super(ac,"dateTimeSymbols")}}class Day extends StringObject{constructor(e){super(ac,"day")}}class DayNames extends XFAObject{constructor(e){super(ac,"dayNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:\ +e=>1===e});this.day=new XFAObjectArray(7)}}class Era extends StringObject{constructor(e){super(ac,"era")}}class EraNames extends XFAObject{constructor(e){super(ac,"eraNames",!0);this.era=new XFAObjectArray(2)}}class locale_set_Locale extends XFAObject{constructor(e){super(ac,"locale",!0);this.desc=e.desc||"";this.name="isoname";this.calendarSymbols=null;this.currencySymbols=null;this.datePatterns=null;this.dateTimeSymbols=null;this.numberPatterns=null;this.numberSymbols=null;this.timePatterns=nu\ +ll;this.typeFaces=null}}class locale_set_LocaleSet extends XFAObject{constructor(e){super(ac,"localeSet",!0);this.locale=new XFAObjectArray}}class Meridiem extends StringObject{constructor(e){super(ac,"meridiem")}}class MeridiemNames extends XFAObject{constructor(e){super(ac,"meridiemNames",!0);this.meridiem=new XFAObjectArray(2)}}class Month extends StringObject{constructor(e){super(ac,"month")}}class MonthNames extends XFAObject{constructor(e){super(ac,"monthNames",!0);this.abbr=getInteger({da\ +ta:e.abbr,defaultValue:0,validate:e=>1===e});this.month=new XFAObjectArray(12)}}class NumberPattern extends StringObject{constructor(e){super(ac,"numberPattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class NumberPatterns extends XFAObject{constructor(e){super(ac,"numberPatterns",!0);this.numberPattern=new XFAObjectArray(4)}}class NumberSymbol extends StringObject{constructor(e){super(ac,"numberSymbol");this.name=getStringOption(e.name,["decimal","grouping","percent","m\ +inus","zero"])}}class NumberSymbols extends XFAObject{constructor(e){super(ac,"numberSymbols",!0);this.numberSymbol=new XFAObjectArray(5)}}class TimePattern extends StringObject{constructor(e){super(ac,"timePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class TimePatterns extends XFAObject{constructor(e){super(ac,"timePatterns",!0);this.timePattern=new XFAObjectArray(4)}}class TypeFace extends XFAObject{constructor(e){super(ac,"typeFace",!0);this.name=""|e.name}}class\ + TypeFaces extends XFAObject{constructor(e){super(ac,"typeFaces",!0);this.typeFace=new XFAObjectArray}}class LocaleSetNamespace{static[fo](e,t){if(LocaleSetNamespace.hasOwnProperty(e))return LocaleSetNamespace[e](t)}static calendarSymbols(e){return new CalendarSymbols(e)}static currencySymbol(e){return new CurrencySymbol(e)}static currencySymbols(e){return new CurrencySymbols(e)}static datePattern(e){return new DatePattern(e)}static datePatterns(e){return new DatePatterns(e)}static dateTimeSymbo\ +ls(e){return new DateTimeSymbols(e)}static day(e){return new Day(e)}static dayNames(e){return new DayNames(e)}static era(e){return new Era(e)}static eraNames(e){return new EraNames(e)}static locale(e){return new locale_set_Locale(e)}static localeSet(e){return new locale_set_LocaleSet(e)}static meridiem(e){return new Meridiem(e)}static meridiemNames(e){return new MeridiemNames(e)}static month(e){return new Month(e)}static monthNames(e){return new MonthNames(e)}static numberPattern(e){return new N\ +umberPattern(e)}static numberPatterns(e){return new NumberPatterns(e)}static numberSymbol(e){return new NumberSymbol(e)}static numberSymbols(e){return new NumberSymbols(e)}static timePattern(e){return new TimePattern(e)}static timePatterns(e){return new TimePatterns(e)}static typeFace(e){return new TypeFace(e)}static typeFaces(e){return new TypeFaces(e)}}const rc=go.signature.id;class signature_Signature extends XFAObject{constructor(e){super(rc,"signature",!0)}}class SignatureNamespace{static[f\ +o](e,t){if(SignatureNamespace.hasOwnProperty(e))return SignatureNamespace[e](t)}static signature(e){return new signature_Signature(e)}}const ic=go.stylesheet.id;class Stylesheet extends XFAObject{constructor(e){super(ic,"stylesheet",!0)}}class StylesheetNamespace{static[fo](e,t){if(StylesheetNamespace.hasOwnProperty(e))return StylesheetNamespace[e](t)}static stylesheet(e){return new Stylesheet(e)}}const nc=go.xdp.id;class xdp_Xdp extends XFAObject{constructor(e){super(nc,"xdp",!0);this.uuid=e.uu\ +id||"";this.timeStamp=e.timeStamp||"";this.config=null;this.connectionSet=null;this.datasets=null;this.localeSet=null;this.stylesheet=new XFAObjectArray;this.template=null}[Gs](e){const t=go[e[Ws]];return t&&e[Hs]===t.id}}class XdpNamespace{static[fo](e,t){if(XdpNamespace.hasOwnProperty(e))return XdpNamespace[e](t)}static xdp(e){return new xdp_Xdp(e)}}const sc=go.xhtml.id,oc=Symbol(),cc=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-b\ +ottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),lc=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>"none"===e?"non\ +e":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,parseInt(e)/100).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,parseInt(e)/100).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,t)=>measureToString(.99*(e=t.fontSize=Math.abs(getMeasurement(e))))],["letter-spacing",e=>measureToString(getMeasurement(e))],["line-height",e=>measureToString(getMeasurement(e))],["margin",e=>measureToString(getMeasurement(e))],["margin-bottom",e=>measureToStri\ +ng(getMeasurement(e))],["margin-left",e=>measureToString(getMeasurement(e))],["margin-right",e=>measureToString(getMeasurement(e))],["margin-top",e=>measureToString(getMeasurement(e))],["text-indent",e=>measureToString(getMeasurement(e))],["font-family",e=>e],["vertical-align",e=>measureToString(getMeasurement(e))]]),hc=/\\s+/g,uc=/[\\r\\n]+/g,dc=/\\r\\n?/g;function mapStyle(e,t,a){const r=Object.create(null);if(!e)return r;const i=Object.create(null);for(const[t,a]of e.split(";").map((e=>e.split(":"\ +,2)))){const e=lc.get(t);if(""===e)continue;let n=a;e&&(n="string"==typeof e?e:e(a,i));t.endsWith("scale")?r.transform=r.transform?`${r[t]} ${n}`:n:r[t.replaceAll(/-([a-zA-Z])/g,((e,t)=>t.toUpperCase()))]=n}r.fontFamily&&setFontFamily({typeface:r.fontFamily,weight:r.fontWeight||"normal",posture:r.fontStyle||"normal",size:i.fontSize||0},t,t[Is].fontFinder,r);if(a&&r.verticalAlign&&"0px"!==r.verticalAlign&&r.fontSize){const e=.583,t=.333,a=getMeasurement(r.fontSize);r.fontSize=measureToString(a*e)\ +;r.verticalAlign=measureToString(Math.sign(getMeasurement(r.verticalAlign))*a*t)}a&&r.fontSize&&(r.fontSize=`calc(${r.fontSize} * var(--total-scale-factor))`);fixTextIndent(r);return r}const fc=new Set(["body","html"]);class XhtmlObject extends XmlObject{constructor(e,t){super(sc,t);this[oc]=!1;this.style=e.style||""}[ts](e){super[ts](e);this.style=function checkStyle(e){return e.style?e.style.split(";").filter((e=>!!e.trim())).map((e=>e.split(":",2).map((e=>e.trim())))).filter((([t,a])=>{"font-\ +family"===t&&e[Is].usedTypefaces.add(a);return cc.has(t)})).map((e=>e.join(":"))).join(";"):""}(this)}[Yn](){return!fc.has(this[Ws])}[Vs](e,t=!1){if(t)this[oc]=!0;else{e=e.replaceAll(uc,"");this.style.includes("xfa-spacerun:yes")||(e=e.replaceAll(hc," "))}e&&(this[ss]+=e)}[Ks](e,t=!0){const a=Object.create(null),r={top:NaN,bottom:NaN,left:NaN,right:NaN};let i=null;for(const[e,t]of this.style.split(";").map((e=>e.split(":",2))))switch(e){case"font-family":a.typeface=stripQuotes(t);break;case"font\ +-size":a.size=getMeasurement(t);break;case"font-weight":a.weight=t;break;case"font-style":a.posture=t;break;case"letter-spacing":a.letterSpacing=getMeasurement(t);break;case"margin":const e=t.split(/ \\t/).map((e=>getMeasurement(e)));switch(e.length){case 1:r.top=r.bottom=r.left=r.right=e[0];break;case 2:r.top=r.bottom=e[0];r.left=r.right=e[1];break;case 3:r.top=e[0];r.bottom=e[2];r.left=r.right=e[1];break;case 4:r.top=e[0];r.left=e[1];r.bottom=e[2];r.right=e[3]}break;case"margin-top":r.top=getMe\ +asurement(t);break;case"margin-bottom":r.bottom=getMeasurement(t);break;case"margin-left":r.left=getMeasurement(t);break;case"margin-right":r.right=getMeasurement(t);break;case"line-height":i=getMeasurement(t)}e.pushData(a,r,i);if(this[ss])e.addString(this[ss]);else for(const t of this[Ss]())"#text"!==t[Ws]?t[Ks](e):e.addString(t[ss]);t&&e.popFont()}[co](e){const t=[];this[ls]={children:t};this[es]({});if(0===t.length&&!this[ss])return HTMLResult.EMPTY;let a;a=this[oc]?this[ss]?this[ss].replaceA\ +ll(dc,"\\n"):void 0:this[ss]||void 0;return HTMLResult.success({name:this[Ws],attributes:{href:this.href,style:mapStyle(this.style,this,this[oc])},children:t,value:a})}}class A extends XhtmlObject{constructor(e){super(e,"a");this.href=fixURL(e.href)||""}}class B extends XhtmlObject{constructor(e){super(e,"b")}[Ks](e){e.pushFont({weight:"bold"});super[Ks](e);e.popFont()}}class Body extends XhtmlObject{constructor(e){super(e,"body")}[co](e){const t=super[co](e),{html:a}=t;if(!a)return HTMLResult.EM\ +PTY;a.name="div";a.attributes.class=["xfaRich"];return t}}class Br extends XhtmlObject{constructor(e){super(e,"br")}[so](){return"\\n"}[Ks](e){e.addString("\\n")}[co](e){return HTMLResult.success({name:"br"})}}class Html extends XhtmlObject{constructor(e){super(e,"html")}[co](e){const t=[];this[ls]={children:t};this[es]({});if(0===t.length)return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[ss]||""});if(1===t.length){const e=t[0];if(e.attributes?.class.includes\ +("xfaRich"))return HTMLResult.success(e)}return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}class I extends XhtmlObject{constructor(e){super(e,"i")}[Ks](e){e.pushFont({posture:"italic"});super[Ks](e);e.popFont()}}class Li extends XhtmlObject{constructor(e){super(e,"li")}}class Ol extends XhtmlObject{constructor(e){super(e,"ol")}}class P extends XhtmlObject{constructor(e){super(e,"p")}[Ks](e){super[Ks](e,!1);e.addString("\\n");e.addPara();e.popFont()}[so]()\ +{return this[vs]()[Ss]().at(-1)===this?super[so]():super[so]()+"\\n"}}class Span extends XhtmlObject{constructor(e){super(e,"span")}}class Sub extends XhtmlObject{constructor(e){super(e,"sub")}}class Sup extends XhtmlObject{constructor(e){super(e,"sup")}}class Ul extends XhtmlObject{constructor(e){super(e,"ul")}}class XhtmlNamespace{static[fo](e,t){if(XhtmlNamespace.hasOwnProperty(e))return XhtmlNamespace[e](t)}static a(e){return new A(e)}static b(e){return new B(e)}static body(e){return new Body\ +(e)}static br(e){return new Br(e)}static html(e){return new Html(e)}static i(e){return new I(e)}static li(e){return new Li(e)}static ol(e){return new Ol(e)}static p(e){return new P(e)}static span(e){return new Span(e)}static sub(e){return new Sub(e)}static sup(e){return new Sup(e)}static ul(e){return new Ul(e)}}const gc={config:ConfigNamespace,connection:ConnectionSetNamespace,datasets:DatasetsNamespace,localeSet:LocaleSetNamespace,signature:SignatureNamespace,stylesheet:StylesheetNamespace,temp\ +late:TemplateNamespace,xdp:XdpNamespace,xhtml:XhtmlNamespace};class UnknownNamespace{constructor(e){this.namespaceId=e}[fo](e,t){return new XmlObject(this.namespaceId,e,t)}}class Root extends XFAObject{constructor(e){super(-1,"root",Object.create(null));this.element=null;this[Os]=e}[$s](e){this.element=e;return!0}[hs](){super[hs]();if(this.element.template instanceof Template){this[Os].set(Qs,this.element);this.element.template[eo](this[Os]);this.element.template[Os]=this[Os]}}}class Empty exten\ +ds XFAObject{constructor(){super(-1,"",Object.create(null))}[$s](e){return!1}}class Builder{constructor(e=null){this._namespaceStack=[];this._nsAgnosticLevel=0;this._namespacePrefixes=new Map;this._namespaces=new Map;this._nextNsId=Math.max(...Object.values(go).map((({id:e})=>e)));this._currentNamespace=e||new UnknownNamespace(++this._nextNsId)}buildRoot(e){return new Root(e)}build({nsPrefix:e,name:t,attributes:a,namespace:r,prefixes:i}){const n=null!==r;if(n){this._namespaceStack.push(this._cur\ +rentNamespace);this._currentNamespace=this._searchNamespace(r)}i&&this._addNamespacePrefix(i);if(a.hasOwnProperty(zs)){const e=gc.datasets,t=a[zs];let r=null;for(const[a,i]of Object.entries(t)){if(this._getNamespaceToUse(a)===e){r={xfa:i};break}}r?a[zs]=r:delete a[zs]}const s=this._getNamespaceToUse(e),o=s?.[fo](t,a)||new Empty;o[Ls]()&&this._nsAgnosticLevel++;(n||i||o[Ls]())&&(o[rs]={hasNamespace:n,prefixes:i,nsAgnostic:o[Ls]()});return o}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNam\ +espace(e){let t=this._namespaces.get(e);if(t)return t;for(const[a,{check:r}]of Object.entries(go))if(r(e)){t=gc[a];if(t){this._namespaces.set(e,t);return t}break}t=new UnknownNamespace(++this._nextNsId);this._namespaces.set(e,t);return t}_addNamespacePrefix(e){for(const{prefix:t,value:a}of e){const e=this._searchNamespace(a);let r=this._namespacePrefixes.get(t);if(!r){r=[];this._namespacePrefixes.set(t,r)}r.push(e)}}_getNamespaceToUse(e){if(!e)return this._currentNamespace;const t=this._namespac\ +ePrefixes.get(e);if(t?.length>0)return t.at(-1);warn(`Unknown namespace prefix: ${e}.`);return null}clean(e){const{hasNamespace:t,prefixes:a,nsAgnostic:r}=e;t&&(this._currentNamespace=this._namespaceStack.pop());a&&a.forEach((({prefix:e})=>{this._namespacePrefixes.get(e).pop()}));r&&this._nsAgnosticLevel--}}class XFAParser extends XMLParserBase{constructor(e=null,t=!1){super();this._builder=new Builder(e);this._stack=[];this._globalData={usedTypefaces:new Set};this._ids=new Map;this._current=thi\ +s._builder.buildRoot(this._ids);this._errorCode=jn;this._whiteRegex=/^\\s+$/;this._nbsps=/\\xa0+/g;this._richText=t}parse(e){this.parseXml(e);if(this._errorCode===jn){this._current[hs]();return this._current.element}}onText(e){e=e.replace(this._nbsps,(e=>e.slice(1)+" "));this._richText||this._current[Yn]()?this._current[Vs](e,this._richText):this._whiteRegex.test(e)||this._current[Vs](e.trim())}onCdata(e){this._current[Vs](e)}_mkAttributes(e,t){let a=null,r=null;const i=Object.create({});for(const\ +{name:n,value:s}of e)if("xmlns"===n)a?warn(`XFA - multiple namespace definition in <${t}>`):a=s;else if(n.startsWith("xmlns:")){const e=n.substring(6);r??=[];r.push({prefix:e,value:s})}else{const e=n.indexOf(":");if(-1===e)i[n]=s;else{const t=i[zs]??=Object.create(null),[a,r]=[n.slice(0,e),n.slice(e+1)];(t[a]||=Object.create(null))[r]=s}}return[a,r,i]}_getNameAndPrefix(e,t){const a=e.indexOf(":");return-1===a?[e,null]:[e.substring(a+1),t?"":e.substring(0,a)]}onBeginElement(e,t,a){const[r,i,n]=th\ +is._mkAttributes(t,e),[s,o]=this._getNameAndPrefix(e,this._builder.isNsAgnostic()),c=this._builder.build({nsPrefix:o,name:s,attributes:n,namespace:r,prefixes:i});c[Is]=this._globalData;if(a){c[hs]();this._current[$s](c)&&c[ao](this._ids);c[ts](this._builder)}else{this._stack.push(this._current);this._current=c}}onEndElement(e){const t=this._current;if(t[Bs]()&&"string"==typeof t[ss]){const e=new XFAParser;e._globalData=this._globalData;const a=e.parse(t[ss]);t[ss]=null;t[$s](a)}t[hs]();this._cur\ +rent=this._stack.pop();this._current[$s](t)&&t[ao](this._ids);t[ts](this._builder)}onError(e){this._errorCode=e}}class XFAFactory{constructor(e){try{this.root=(new XFAParser).parse(XFAFactory._createDocument(e));const t=new Binder(this.root);this.form=t.bind();this.dataHandler=new DataHandler(this.root,t.getData());this.form[Is].template=this.form}catch(e){warn(`XFA - an error occurred during parsing and binding: ${e}`)}}isValid(){return!(!this.root||!this.form)}_createPagesHelper(){const e=this\ +.form[oo]();return new Promise(((t,a)=>{const nextIteration=()=>{try{const a=e.next();a.done?t(a.value):setTimeout(nextIteration,0)}catch(e){a(e)}};setTimeout(nextIteration,0)}))}async _createPages(){try{this.pages=await this._createPagesHelper();this.dims=this.pages.children.map((e=>{const{width:t,height:a}=e.attributes.style;return[0,0,parseInt(t),parseInt(a)]}))}catch(e){warn(`XFA - an error occurred during layout: ${e}`)}}getBoundingBox(e){return this.dims[e]}async getNumPages(){this.pages||\ +await this._createPages();return this.dims.length}setImages(e){this.form[Is].images=e}setFonts(e){this.form[Is].fontFinder=new FontFinder(e);const t=[];for(let e of this.form[Is].usedTypefaces){e=stripQuotes(e);this.form[Is].fontFinder.find(e)||t.push(e)}return t.length>0?t:null}appendFonts(e,t){this.form[Is].fontFinder.add(e,t)}async getPages(){this.pages||await this._createPages();const e=this.pages;this.pages=null;return e}serializeData(e){return this.dataHandler.serialize(e)}static _createDo\ +cument(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}static getRichTextAsHtml(e){if(!e||"string"!=typeof e)return null;try{let t=new XFAParser(XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[Ws])){const e=XhtmlNamespace.body({});e[Qn](t);t=e}const a=t[co]();if(!a.success)return null;const{html:r}=a,{attributes:i}=r;if(i){i.class&&(i.class=i.class.filter((e=>!e.startsWith("xfa"))));i.dir="auto"}return{html:r,str:t[so]()}}catch(e){warn(`XFA - an error occurred during p\ +arsing of rich text: ${e}`)}return null}}class AnnotationFactory{static createGlobals(e){return Promise.all([e.ensureCatalog("acroForm"),e.ensureDoc("xfaDatasets"),e.ensureCatalog("structTreeRoot"),e.ensureCatalog("baseUrl"),e.ensureCatalog("attachments"),e.ensureCatalog("globalColorSpaceCache")]).then((([t,a,r,i,n,s])=>({pdfManager:e,acroForm:t instanceof Dict?t:Dict.empty,xfaDatasets:a,structTreeRoot:r,baseUrl:i,attachments:n,globalColorSpaceCache:s})),(e=>{warn(`createGlobals: "${e}".`);retur\ +n null}))}static async create(e,t,a,r,i,n,s){const o=i?await this._getPageIndex(e,t,a.pdfManager):null;return a.pdfManager.ensure(this,"_create",[e,t,a,r,i,n,o,s])}static _create(e,t,a,r,i=!1,n=null,s=null,o=null){const c=e.fetchIfRef(t);if(!(c instanceof Dict))return;const{acroForm:l,pdfManager:h}=a,u=t instanceof Ref?t.toString():`annot_${r.createObjId()}`;let d=c.get("Subtype");d=d instanceof Name?d.name:null;const f={xref:e,ref:t,dict:c,subtype:d,id:u,annotationGlobals:a,collectFields:i,orph\ +anFields:n,needAppearances:!i&&!0===l.get("NeedAppearances"),pageIndex:s,evaluatorOptions:h.evaluatorOptions,pageRef:o};switch(d){case"Link":return new LinkAnnotation(f);case"Text":return new TextAnnotation(f);case"Widget":let e=getInheritableProperty({dict:c,key:"FT"});e=e instanceof Name?e.name:null;switch(e){case"Tx":return new TextWidgetAnnotation(f);case"Btn":return new ButtonWidgetAnnotation(f);case"Ch":return new ChoiceWidgetAnnotation(f);case"Sig":return new SignatureWidgetAnnotation(f)}\ +warn(`Unimplemented widget field type "${e}", falling back to base field type.`);return new WidgetAnnotation(f);case"Popup":return new PopupAnnotation(f);case"FreeText":return new FreeTextAnnotation(f);case"Line":return new LineAnnotation(f);case"Square":return new SquareAnnotation(f);case"Circle":return new CircleAnnotation(f);case"PolyLine":return new PolylineAnnotation(f);case"Polygon":return new PolygonAnnotation(f);case"Caret":return new CaretAnnotation(f);case"Ink":return new InkAnnotation\ +(f);case"Highlight":return new HighlightAnnotation(f);case"Underline":return new UnderlineAnnotation(f);case"Squiggly":return new SquigglyAnnotation(f);case"StrikeOut":return new StrikeOutAnnotation(f);case"Stamp":return new StampAnnotation(f);case"FileAttachment":return new FileAttachmentAnnotation(f);default:i||warn(d?`Unimplemented annotation type "${d}", falling back to base annotation.`:"Annotation is missing the required /Subtype.");return new Annotation(f)}}static async _getPageIndex(e,t,\ +a){try{const r=await e.fetchIfRefAsync(t);if(!(r instanceof Dict))return-1;const i=r.getRaw("P");if(i instanceof Ref)try{return await a.ensureCatalog("getPageIndex",[i])}catch(e){info(`_getPageIndex -- not a valid page reference: "${e}".`)}if(r.has("Kids"))return-1;const n=await a.ensureDoc("numPages");for(let e=0;e<n;e++){const r=await a.getPage(e),i=await a.ensure(r,"annotations");for(const a of i)if(a instanceof Ref&&isRefsEqual(a,t))return e}}catch(e){warn(`_getPageIndex: "${e}".`)}return-1}\ +static generateImages(e,t,a){if(!a){warn("generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images.");return null}let r;for(const{bitmapId:a,bitmap:i}of e)if(i){r||=new Map;r.set(a,StampAnnotation.createImage(i,t))}return r}static async saveNewAnnotations(e,t,a,r,i){const n=e.xref;let s;const o=[],{isOffscreenCanvasSupported:c}=e.options;for(const l of a)if(!l.deleted)switch(l.annotationType){case g:if(!s){const e=new Dict(n);e.setIfName("BaseFont","Hel\ +vetica");e.setIfName("Type","Font");e.setIfName("Subtype","Type1");e.setIfName("Encoding","WinAnsiEncoding");s=n.getNewTemporaryRef();i.put(s,{data:e})}o.push(FreeTextAnnotation.createNewAnnotation(n,l,i,{evaluator:e,task:t,baseFontRef:s}));break;case p:l.quadPoints?o.push(HighlightAnnotation.createNewAnnotation(n,l,i)):o.push(InkAnnotation.createNewAnnotation(n,l,i));break;case b:o.push(InkAnnotation.createNewAnnotation(n,l,i));break;case m:const a=c?await(r?.get(l.bitmapId)):null;if(a?.imageSt\ +ream){const{imageStream:e,smaskStream:t}=a;if(t){const a=n.getNewTemporaryRef();i.put(a,{data:t});e.dict.set("SMask",a)}const r=a.imageRef=n.getNewTemporaryRef();i.put(r,{data:e});a.imageStream=a.smaskStream=null}o.push(StampAnnotation.createNewAnnotation(n,l,i,{image:a}));break;case y:o.push(StampAnnotation.createNewAnnotation(n,l,i,{}))}return{annotations:(await Promise.all(o)).flat()}}static async printNewAnnotations(e,t,a,r,i){if(!r)return null;const{options:n,xref:s}=t,o=[];for(const c of r\ +)if(!c.deleted)switch(c.annotationType){case g:o.push(FreeTextAnnotation.createNewPrintAnnotation(e,s,c,{evaluator:t,task:a,evaluatorOptions:n}));break;case p:c.quadPoints?o.push(HighlightAnnotation.createNewPrintAnnotation(e,s,c,{evaluatorOptions:n})):o.push(InkAnnotation.createNewPrintAnnotation(e,s,c,{evaluatorOptions:n}));break;case b:o.push(InkAnnotation.createNewPrintAnnotation(e,s,c,{evaluatorOptions:n}));break;case m:const r=n.isOffscreenCanvasSupported?await(i?.get(c.bitmapId)):null;if(\ +r?.imageStream){const{imageStream:e,smaskStream:t}=r;t&&e.dict.set("SMask",t);r.imageRef=new JpegStream(e,e.length);r.imageStream=r.smaskStream=null}o.push(StampAnnotation.createNewPrintAnnotation(e,s,c,{image:r,evaluatorOptions:n}));break;case y:o.push(StampAnnotation.createNewPrintAnnotation(e,s,c,{evaluatorOptions:n}))}return Promise.all(o)}}function getRgbColor(e,t=new Uint8ClampedArray(3)){if(!Array.isArray(e))return t;const a=t||new Uint8ClampedArray(3);switch(e.length){case 0:return null;\ +case 1:ColorSpaceUtils.gray.getRgbItem(e,0,a,0);return a;case 3:ColorSpaceUtils.rgb.getRgbItem(e,0,a,0);return a;case 4:ColorSpaceUtils.cmyk.getRgbItem(e,0,a,0);return a;default:return t}}function getPdfColorArray(e,t=null){return e&&Array.from(e,(e=>e/255))||t}function getQuadPoints(e,t){const a=e.getArray("QuadPoints");if(!isNumberArray(a,null)||0===a.length||a.length%8>0)return null;const r=new Float32Array(a.length);for(let e=0,i=a.length;e<i;e+=8){const[i,n,s,o,c,l,h,u]=a.slice(e,e+8),d=Mat\ +h.min(i,s,c,h),f=Math.max(i,s,c,h),g=Math.min(n,o,l,u),p=Math.max(n,o,l,u);if(null!==t&&(d<t[0]||f>t[2]||g<t[1]||p>t[3]))return null;r.set([d,p,f,p,d,g,f,g],e)}return r}function getTransformMatrix(e,t,a){const r=new Float32Array([1/0,1/0,-1/0,-1/0]);Util.axialAlignedBoundingBox(t,a,r);const[i,n,s,o]=r;if(i===s||n===o)return[1,0,0,1,e[0],e[1]];const c=(e[2]-e[0])/(s-i),l=(e[3]-e[1])/(o-n);return[c,0,0,l,e[0]-i*c,e[1]-n*l]}class Annotation{constructor(e){const{dict:t,xref:a,annotationGlobals:r,ref\ +:i,orphanFields:n}=e,s=n?.get(i);s&&t.set("Parent",s);this.setTitle(t.get("T"));this.setContents(t.get("Contents"));this.setModificationDate(t.get("M"));this.setFlags(t.get("F"));this.setRectangle(t.getArray("Rect"));this.setColor(t.getArray("C"));this.setBorderStyle(t);this.setAppearance(t);this.setOptionalContent(t);const o=t.get("MK");this.setBorderAndBackgroundColors(o);this.setRotation(o,t);this.ref=e.ref instanceof Ref?e.ref:null;this._streams=[];this.appearance&&this._streams.push(this.ap\ +pearance);const c=!!(this.flags&ee),l=!!(this.flags&te);this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:e.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:e.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&Z),noHTML:c&&l,isEditable:!1,structParent:-1};if(r.structTreeRoot){let a=t.get("StructPa\ +rent");this.data.structParent=a=Number.isInteger(a)&&a>=0?a:-1;r.structTreeRoot.addAnnotationIdToPage(e.pageRef,a)}if(e.collectFields){const r=t.get("Kids");if(Array.isArray(r)){const e=[];for(const t of r)t instanceof Ref&&e.push(t.toString());0!==e.length&&(this.data.kidIds=e)}this.data.actions=collectActions(a,t,ye);this.data.fieldName=this._constructFieldName(t);this.data.pageIndex=e.pageIndex}const h=t.get("IT");h instanceof Name&&(this.data.it=h.name);this._isOffscreenCanvasSupported=e.eva\ +luatorOptions.isOffscreenCanvasSupported;this._fallbackFontDict=null;this._needAppearances=!1}_hasFlag(e,t){return!!(e&t)}_buildFlags(e,t){let{flags:a}=this;if(void 0===e){if(void 0===t)return;return t?a&~Y:a&~J|Y}if(e){a|=Y;return t?a&~Q|J:a&~J|Q}a&=~(J|Q);return t?a&~Y:a|Y}_isViewable(e){return!this._hasFlag(e,K)&&!this._hasFlag(e,Q)}_isPrintable(e){return this._hasFlag(e,Y)&&!this._hasFlag(e,J)&&!this._hasFlag(e,K)}mustBeViewed(e,t){const a=e?.get(this.data.id)?.noView;return void 0!==a?!a:th\ +is.viewable&&!this._hasFlag(this.flags,J)}mustBePrinted(e){const t=e?.get(this.data.id)?.noPrint;return void 0!==t?!t:this.printable}mustBeViewedWhenEditing(e,t=null){return e?!this.data.isEditable:!t?.has(this.data.id)}get viewable(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}get printable(){return null!==this.data.quadPoints&&(0!==this.flags&&this._isPrintable(this.flags))}_parseStringHelper(e){const t="string"==typeof e?stringToPDFString(e):"";return{st\ +r:t,dir:t&&"rtl"===bidi(t).dir?"rtl":"ltr"}}setDefaultAppearance(e){const{dict:t,annotationGlobals:a}=e,r=getInheritableProperty({dict:t,key:"DA"})||a.acroForm.get("DA");this._defaultAppearance="string"==typeof r?r:"";this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance)}setTitle(e){this._title=this._parseStringHelper(e)}setContents(e){this._contents=this._parseStringHelper(e)}setModificationDate(e){this.modificationDate="string"==typeof e?e:null}setFlags(e){this.flags=\ +Number.isInteger(e)&&e>0?e:0;this.flags&K&&"Annotation"!==this.constructor.name&&(this.flags^=K)}hasFlag(e){return this._hasFlag(this.flags,e)}setRectangle(e){this.rectangle=lookupNormalRect(e,[0,0,0,0])}setColor(e){this.color=getRgbColor(e)}setLineEndings(e){this.lineEndings=["None","None"];if(Array.isArray(e)&&2===e.length)for(let t=0;t<2;t++){const a=e[t];if(a instanceof Name)switch(a.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt\ +":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=a.name;continue}warn(`Ignoring invalid lineEnding: ${a}`)}}setRotation(e,t){this.rotation=0;let a=e instanceof Dict?e.get("R")||0:t.get("Rotate")||0;if(Number.isInteger(a)&&0!==a){a%=360;a<0&&(a+=360);a%90==0&&(this.rotation=a)}}setBorderAndBackgroundColors(e){if(e instanceof Dict){this.borderColor=getRgbColor(e.getArray("BC"),null);this.backgroundColor=getRgbColor(e.getArray("BG"),null)}else this.borderColor=this.backgroundCo\ +lor=null}setBorderStyle(e){this.borderStyle=new AnnotationBorderStyle;if(e instanceof Dict)if(e.has("BS")){const t=e.get("BS");if(t instanceof Dict){const e=t.get("Type");if(!e||isName(e,"Border")){this.borderStyle.setWidth(t.get("W"),this.rectangle);this.borderStyle.setStyle(t.get("S"));this.borderStyle.setDashArray(t.getArray("D"))}}}else if(e.has("Border")){const t=e.getArray("Border");if(Array.isArray(t)&&t.length>=3){this.borderStyle.setHorizontalCornerRadius(t[0]);this.borderStyle.setVerti\ +calCornerRadius(t[1]);this.borderStyle.setWidth(t[2],this.rectangle);4===t.length&&this.borderStyle.setDashArray(t[3],!0)}}else this.borderStyle.setWidth(0)}setAppearance(e){this.appearance=null;const t=e.get("AP");if(!(t instanceof Dict))return;const a=t.get("N");if(a instanceof BaseStream){this.appearance=a;return}if(!(a instanceof Dict))return;const r=e.get("AS");if(!(r instanceof Name&&a.has(r.name)))return;const i=a.get(r.name);i instanceof BaseStream&&(this.appearance=i)}setOptionalContent\ +(e){this.oc=null;const t=e.get("OC");t instanceof Name?warn("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof Dict&&(this.oc=t)}async loadResources(e,t){const a=await t.dict.getAsync("Resources");a&&await ObjectLoader.load(a,e,a.xref);return a}async getOperatorList(e,t,a,r){const{hasOwnCanvas:i,id:n,rect:o}=this.data;let c=this.appearance;const l=!!(i&&a&s);if(l&&(0===this.width||0===this.height)){this.data.hasOwnCanvas=!1;return{opList:new OperatorList,separateForm\ +:!1,separateCanvas:!1}}if(!c){if(!l)return{opList:new OperatorList,separateForm:!1,separateCanvas:!1};c=new StringStream("");c.dict=new Dict}const h=c.dict,u=await this.loadResources(Ia,c),d=lookupRect(h.getArray("BBox"),[0,0,1,1]),f=lookupMatrix(h.getArray("Matrix"),Fa),g=getTransformMatrix(o,d,f),p=new OperatorList;let m;this.oc&&(m=await e.parseMarkedContentProps(this.oc,null));void 0!==m&&p.addOp(jt,["OC",m]);p.addOp($t,[n,o,g,f,l]);await e.getOperatorList({stream:c,task:t,resources:u,operat\ +orList:p,fallbackFontDict:this._fallbackFontDict});p.addOp(Gt,[]);void 0!==m&&p.addOp(_t,[]);this.reset();return{opList:p,separateForm:!1,separateCanvas:l}}async save(e,t,a,r){return null}get overlaysTextContent(){return!1}get hasTextContent(){return!1}async extractTextContent(e,t,a){if(!this.appearance)return;const r=await this.loadResources(Ta,this.appearance),i=[],n=[];let s=null;const o={desiredSize:Math.Infinity,ready:!0,enqueue(e,t){for(const t of e.items)if(void 0!==t.str){s||=t.transform\ +.slice(-2);n.push(t.str);if(t.hasEOL){i.push(n.join("").trimEnd());n.length=0}}}};await e.getTextContent({stream:this.appearance,task:t,resources:r,includeMarkedContent:!0,keepWhiteSpace:!0,sink:o,viewBox:a});this.reset();n.length&&i.push(n.join("").trimEnd());if(i.length>1||i[0]){const e=this.appearance.dict,t=lookupRect(e.getArray("BBox"),null),a=lookupMatrix(e.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(s,t,a);this.data.textContent=i}}_transformPoint(e,t,a){const{rect\ +:r}=this.data;t||=[0,0,1,1];a||=[1,0,0,1,0,0];const i=getTransformMatrix(r,t,a);i[4]-=r[0];i[5]-=r[1];const n=e.slice();Util.applyTransform(n,i);Util.applyTransform(n,a);return n}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(const e of this._streams)e.reset()}_construc\ +tFieldName(e){if(!e.has("T")&&!e.has("Parent")){warn("Unknown field name, falling back to empty field name.");return""}if(!e.has("Parent"))return stringToPDFString(e.get("T"));const t=[];e.has("T")&&t.unshift(stringToPDFString(e.get("T")));let a=e;const r=new RefSet;e.objId&&r.put(e.objId);for(;a.has("Parent");){a=a.get("Parent");if(!(a instanceof Dict)||a.objId&&r.has(a.objId))break;a.objId&&r.put(a.objId);a.has("T")&&t.unshift(stringToPDFString(a.get("T")))}return t.join(".")}get width(){retur\ +n this.data.rect[2]-this.data.rect[0]}get height(){return this.data.rect[3]-this.data.rect[1]}}class AnnotationBorderStyle{constructor(){this.width=1;this.rawWidth=1;this.style=fe;this.dashArray=[3];this.horizontalCornerRadius=0;this.verticalCornerRadius=0}setWidth(e,t=[0,0,0,0]){if(e instanceof Name)this.width=0;else if("number"==typeof e){if(e>0){this.rawWidth=e;const a=(t[2]-t[0])/2,r=(t[3]-t[1])/2;if(a>0&&r>0&&(e>a||e>r)){warn(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`);e=1}}thi\ +s.width=e}}setStyle(e){if(e instanceof Name)switch(e.name){case"S":this.style=fe;break;case"D":this.style=ge;break;case"B":this.style=pe;break;case"I":this.style=me;break;case"U":this.style=be}}setDashArray(e,t=!1){if(Array.isArray(e)){let a=!0,r=!0;for(const t of e){if(!(+t>=0)){a=!1;break}t>0&&(r=!1)}if(0===e.length||a&&!r){this.dashArray=e;t&&this.setStyle(Name.get("D"))}else this.width=0}else e&&(this.width=0)}setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}\ +setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}class MarkupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;if(t.has("IRT")){const e=t.getRaw("IRT");this.data.inReplyTo=e instanceof Ref?e.toString():null;const a=t.get("RT");this.data.replyType=a instanceof Name?a.name:V}let a=null;if(this.data.replyType===G){const e=t.get("IRT");this.setTitle(e.get("T"));this.data.titleObj=this._title;this.setContents(e.get("Contents"));this.data.contentsObj=t\ +his._contents;if(e.has("CreationDate")){this.setCreationDate(e.get("CreationDate"));this.data.creationDate=this.creationDate}else this.data.creationDate=null;if(e.has("M")){this.setModificationDate(e.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;a=e.getRaw("Popup");if(e.has("C")){this.setColor(e.getArray("C"));this.data.color=this.color}else this.data.color=null}else{this.data.titleObj=this._title;this.setCreationDate(t.get("CreationDate"));this.\ +data.creationDate=this.creationDate;a=t.getRaw("Popup");t.has("C")||(this.data.color=null)}this.data.popupRef=a instanceof Ref?a.toString():null;t.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(t.get("RC")))}setCreationDate(e){this.creationDate="string"==typeof e?e:null}_setDefaultAppearance({xref:e,extra:t,strokeColor:a,fillColor:r,blendMode:i,strokeAlpha:n,fillAlpha:s,pointsCallback:o}){const c=this.data.rect=[1/0,1/0,-1/0,-1/0],l=["q"];t&&l.push(t);a&&l.push(`${a[0]} ${a[1]} ${a[\ +2]} RG`);r&&l.push(`${r[0]} ${r[1]} ${r[2]} rg`);const h=this.data.quadPoints||Float32Array.from([this.rectangle[0],this.rectangle[3],this.rectangle[2],this.rectangle[3],this.rectangle[0],this.rectangle[1],this.rectangle[2],this.rectangle[1]]);for(let e=0,t=h.length;e<t;e+=8){const t=o(l,h.subarray(e,e+8));Util.rectBoundingBox(...t,c)}l.push("Q");const u=new Dict(e),d=new Dict(e);d.setIfName("Subtype","Form");const f=new StringStream(l.join(" "));f.dict=d;u.set("Fm0",f);const g=new Dict(e);i&&g.\ +setIfName("BM",i);g.setIfNumber("CA",n);g.setIfNumber("ca",s);const p=new Dict(e);p.set("GS0",g);const m=new Dict(e);m.set("ExtGState",p);m.set("XObject",u);const b=new Dict(e);b.set("Resources",m);b.set("BBox",c);this.appearance=new StringStream("/GS0 gs /Fm0 Do");this.appearance.dict=b;this._streams.push(this.appearance,f)}static async createNewAnnotation(e,t,a,r){const i=t.ref||=e.getNewTemporaryRef(),n=await this.createNewAppearanceStream(t,e,r);let s;if(n){const r=e.getNewTemporaryRef();s=t\ +his.createNewDict(t,e,{apRef:r});a.put(r,{data:n})}else s=this.createNewDict(t,e,{});Number.isInteger(t.parentTreeId)&&s.set("StructParent",t.parentTreeId);a.put(i,{data:s});const o={ref:i};if(t.popup){const r=t.popup;if(r.deleted){s.delete("Popup");s.delete("Contents");s.delete("RC");return o}const n=r.ref||=e.getNewTemporaryRef();r.parent=i;const c=PopupAnnotation.createNewDict(r,e);a.put(n,{data:c});s.setIfDefined("Contents",stringToAsciiOrUTF16BE(r.contents));s.set("Popup",n);return[o,{ref:n\ +}]}return o}static async createNewPrintAnnotation(e,t,a,r){const i=await this.createNewAppearanceStream(a,t,r),n=this.createNewDict(a,t,i?{ap:i}:{}),s=new this.prototype.constructor({dict:n,xref:t,annotationGlobals:e,evaluatorOptions:r.evaluatorOptions});a.ref&&(s.ref=s.refToReplace=a.ref);return s}}class WidgetAnnotation extends Annotation{constructor(e){super(e);const{dict:t,xref:a,annotationGlobals:r}=e,i=this.data;this._needAppearances=e.needAppearances;i.annotationType=$;void 0===i.fieldNam\ +e&&(i.fieldName=this._constructFieldName(t));void 0===i.actions&&(i.actions=collectActions(a,t,ye));let n=getInheritableProperty({dict:t,key:"V",getArray:!0});i.fieldValue=this._decodeFormValue(n);const s=getInheritableProperty({dict:t,key:"DV",getArray:!0});i.defaultFieldValue=this._decodeFormValue(s);if(void 0===n&&r.xfaDatasets){const e=this._title.str;if(e){this._hasValueFromXFA=!0;i.fieldValue=n=r.xfaDatasets.getValue(e)}}void 0===n&&null!==i.defaultFieldValue&&(i.fieldValue=i.defaultFieldV\ +alue);i.alternativeText=stringToPDFString(t.get("TU")||"");this.setDefaultAppearance(e);i.hasAppearance||=this._needAppearances&&void 0!==i.fieldValue&&null!==i.fieldValue;const o=getInheritableProperty({dict:t,key:"FT"});i.fieldType=o instanceof Name?o.name:null;const c=getInheritableProperty({dict:t,key:"DR"}),l=r.acroForm.get("DR"),h=this.appearance?.dict.get("Resources");this._fieldResources={localResources:c,acroFormResources:l,appearanceResources:h,mergedResources:Dict.merge({xref:a,dictAr\ +ray:[c,h,l],mergeSubDicts:!0})};i.fieldFlags=getInheritableProperty({dict:t,key:"Ff"});(!Number.isInteger(i.fieldFlags)||i.fieldFlags<0)&&(i.fieldFlags=0);i.password=this.hasFieldFlag(ne);i.readOnly=this.hasFieldFlag(ae);i.required=this.hasFieldFlag(re);i.hidden=this._hasFlag(i.annotationFlags,J)||this._hasFlag(i.annotationFlags,Q)}_decodeFormValue(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>stringToPDFString(e))):e instanceof Name?stringToPDFString(e.name):"string"==typ\ +eof e?stringToPDFString(e):null}hasFieldFlag(e){return!!(this.data.fieldFlags&e)}_isViewable(e){return!0}mustBeViewed(e,t){return t?this.viewable:super.mustBeViewed(e,t)&&!this._hasFlag(this.flags,Q)}getRotationMatrix(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);return 0===t?Fa:getRotationMatrix(t,this.width,this.height)}getBorderAndBackgroundAppearances(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);if(!this.backgroundColor&&!this.borderColor)retu\ +rn"";const a=0===t||180===t?`0 0 ${this.width} ${this.height} re`:`0 0 ${this.height} ${this.width} re`;let r="";this.backgroundColor&&(r=`${getPdfColor(this.backgroundColor,!0)} ${a} f `);if(this.borderColor){r+=`${this.borderStyle.width||1} w ${getPdfColor(this.borderColor,!1)} ${a} S `}return r}async getOperatorList(e,t,a,r){if(a&l&&!(this instanceof SignatureWidgetAnnotation)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new OperatorList,separateForm:!0,separateCanvas:!1};if(!thi\ +s._hasText)return super.getOperatorList(e,t,a,r);const i=await this._getAppearance(e,t,a,r);if(this.appearance&&null===i)return super.getOperatorList(e,t,a,r);const n=new OperatorList;if(!this._defaultAppearance||null===i)return{opList:n,separateForm:!1,separateCanvas:!1};const o=!!(this.data.hasOwnCanvas&&a&s),c=[0,0,this.width,this.height],h=getTransformMatrix(this.data.rect,c,[1,0,0,1,0,0]);let u;this.oc&&(u=await e.parseMarkedContentProps(this.oc,null));void 0!==u&&n.addOp(jt,["OC",u]);n.add\ +Op($t,[this.data.id,this.data.rect,h,this.getRotationMatrix(r),o]);const d=new StringStream(i);await e.getOperatorList({stream:d,task:t,resources:this._fieldResources.mergedResources,operatorList:n});n.addOp(Gt,[]);void 0!==u&&n.addOp(_t,[]);return{opList:n,separateForm:!1,separateCanvas:o}}_getMKDict(e){const t=new Dict(null);e&&t.set("R",e);t.setIfArray("BC",getPdfColorArray(this.borderColor));t.setIfArray("BG",getPdfColorArray(this.backgroundColor));return t.size>0?t:null}amendSavedDict(e,t){\ +}setValue(e,t,a,r){const{dict:i,ref:n}=function getParentToUpdate(e,t,a){const r=new RefSet,i=e,n={dict:null,ref:null};for(;e instanceof Dict&&!r.has(t);){r.put(t);if(e.has("T"))break;if(!((t=e.getRaw("Parent"))instanceof Ref))return n;e=a.fetch(t)}if(e instanceof Dict&&e!==i){n.dict=e;n.ref=t}return n}(e,this.ref,a);if(i){if(!r.has(n)){const e=i.clone();e.set("V",t);r.put(n,{data:e});return e}}else e.set("V",t);return null}async save(e,t,a,r){const i=a?.get(this.data.id),n=this._buildFlags(i?.n\ +oView,i?.noPrint);let s=i?.value,o=i?.rotation;if(s===this.data.fieldValue||void 0===s){if(!this._hasValueFromXFA&&void 0===o&&void 0===n)return;s||=this.data.fieldValue}if(void 0===o&&!this._hasValueFromXFA&&Array.isArray(s)&&Array.isArray(this.data.fieldValue)&&isArrayEqual(s,this.data.fieldValue)&&void 0===n)return;void 0===o&&(o=this.rotation);let l=null;if(!this._needAppearances){l=await this._getAppearance(e,t,c,a);if(null===l&&void 0===n)return}let h=!1;if(l?.needAppearances){h=!0;l=null}\ +const{xref:u}=e,d=u.fetchIfRef(this.ref);if(!(d instanceof Dict))return;const f=new Dict(u);for(const e of d.getKeys())"AP"!==e&&f.set(e,d.getRaw(e));if(void 0!==n){f.set("F",n);if(null===l&&!h){const e=d.getRaw("AP");e&&f.set("AP",e)}}const g={path:this.data.fieldName,value:s},p=this.setValue(f,Array.isArray(s)?s.map(stringToAsciiOrUTF16BE):stringToAsciiOrUTF16BE(s),u,r);this.amendSavedDict(a,p||f);const m=this._getMKDict(o);m&&f.set("MK",m);r.put(this.ref,{data:f,xfa:g,needAppearances:h});if(n\ +ull!==l){const e=u.getNewTemporaryRef(),t=new Dict(u);f.set("AP",t);t.set("N",e);const i=this._getSaveFieldResources(u),n=new StringStream(l),s=n.dict=new Dict(u);s.setIfName("Subtype","Form");s.set("Resources",i);const c=o%180==0?[0,0,this.width,this.height]:[0,0,this.height,this.width];s.set("BBox",c);const h=this.getRotationMatrix(a);h!==Fa&&s.set("Matrix",h);r.put(e,{data:n,xfa:null,needAppearances:!1})}f.set("M",`D:${getModificationDate()}`)}async _getAppearance(e,t,a,r){if(this.data.passwo\ +rd)return null;const n=r?.get(this.data.id);let s,o;if(n){s=n.formattedValue||n.value;o=n.rotation}if(void 0===o&&void 0===s&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;const l=this.getBorderAndBackgroundAppearances(r);if(void 0===s){s=this.data.fieldValue;if(!s)return`/Tx BMC q ${l}Q EMC`}Array.isArray(s)&&1===s.length&&(s=s[0]);assert("string"==typeof s,"Expected `value` to be a string.");s=s.trimEnd();if(this.data.combo){const e=this.data.options.find((({exp\ +ortValue:e})=>s===e));s=e?.displayValue||s}if(""===s)return`/Tx BMC q ${l}Q EMC`;void 0===o&&(o=this.rotation);let h,u=-1;if(this.data.multiLine){h=s.split(/\\r\\n?|\\n/).map((e=>e.normalize("NFC")));u=h.length}else h=[s.replace(/\\r\\n?|\\n/,"").normalize("NFC")];let{width:d,height:f}=this;90!==o&&270!==o||([d,f]=[f,d]);this._defaultAppearance||(this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let g,p,m,b=await WidgetAnnotation._getFontData(e,t,th\ +is.data.defaultAppearanceData,this._fieldResources.mergedResources);const y=[];let w=!1;for(const e of h){const t=b.encodeString(e);t.length>1&&(w=!0);y.push(t.join(""))}if(w&&a&c)return{needAppearances:!0};if(w&&this._isOffscreenCanvasSupported){const a=this.data.comb?"monospace":"sans-serif",r=new FakeUnicodeFont(e.xref,a),i=r.createFontResources(h.join("")),n=i.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){const e=this._fieldResources.mergedResources.get("Font");for(cons\ +t t of n.getKeys())e.set(t,n.getRaw(t))}else this._fieldResources.mergedResources.set("Font",n);const o=r.fontName.name;b=await WidgetAnnotation._getFontData(e,t,{fontName:o,fontSize:0},i);for(let e=0,t=y.length;e<t;e++)y[e]=stringToUTF16String(h[e]);const c=Object.assign(Object.create(null),this.data.defaultAppearanceData);this.data.defaultAppearanceData.fontSize=0;this.data.defaultAppearanceData.fontName=o;[g,p,m]=this._computeFontSize(f-2,d-4,s,b,u);this.data.defaultAppearanceData=c}else{this\ +._isOffscreenCanvasSupported||warn("_getAppearance: OffscreenCanvas is not supported, annotation may not render correctly.");[g,p,m]=this._computeFontSize(f-2,d-4,s,b,u)}let x=b.descent;x=isNaN(x)?i*m:Math.max(i*m,Math.abs(x)*p);const S=Math.min(Math.floor((f-p)/2),1),k=this.data.textAlignment;if(this.data.multiLine)return this._getMultilineAppearance(g,y,b,p,d,f,k,2,S,x,m,r);if(this.data.comb)return this._getCombAppearance(g,b,y[0],p,d,f,2,S,x,m,r);const C=S+x;if(0===k||k>2)return`/Tx BMC q ${l\ +}BT `+g+` 1 0 0 1 ${numberToString(2)} ${numberToString(C)} Tm (${escapeString(y[0])}) Tj ET Q EMC`;return`/Tx BMC q ${l}BT `+g+` 1 0 0 1 0 0 Tm ${this._renderText(y[0],b,p,d,k,{shift:0},2,C)} ET Q EMC`}static async _getFontData(e,t,a,r){const i=new OperatorList,n={font:null,clone(){return this}},{fontName:s,fontSize:o}=a;await e.handleSetFont(r,[s&&Name.get(s),o],null,i,t,n,null);return n.font}_getTextWidth(e,t){return Math.sumPrecise(t.charsToGlyphs(e).map((e=>e.width)))/1e3}_computeFontSize(e\ +,t,r,i,n){let{fontSize:s}=this.data.defaultAppearanceData,o=(s||12)*a,c=Math.round(e/o);if(!s){const roundWithTwoDigits=e=>Math.floor(100*e)/100;if(-1===n){const n=this._getTextWidth(r,i);s=roundWithTwoDigits(Math.min(e/a,t/n));c=1}else{const l=r.split(/\\r\\n?|\\n/),h=[];for(const e of l){const t=i.encodeString(e).join(""),a=i.charsToGlyphs(t),r=i.getCharPositions(t);h.push({line:t,glyphs:a,positions:r})}const isTooBig=a=>{let r=0;for(const n of h){r+=this._splitLine(null,i,a,t,n).length*a;if(r>e)\ +return!0}return!1};c=Math.max(c,n);for(;;){o=e/c;s=roundWithTwoDigits(o/a);if(!isTooBig(s))break;c++}}const{fontName:l,fontColor:h}=this.data.defaultAppearanceData;this._defaultAppearance=function createDefaultAppearance({fontSize:e,fontName:t,fontColor:a}){return`/${escapePDFName(t)} ${e} Tf ${getPdfColor(a,!0)}`}({fontSize:s,fontName:l,fontColor:h})}return[this._defaultAppearance,s,e/c]}_renderText(e,t,a,r,i,n,s,o){let c;if(1===i){c=(r-this._getTextWidth(e,t)*a)/2}else if(2===i){c=r-this._getT\ +extWidth(e,t)*a-s}else c=s;const l=numberToString(c-n.shift);n.shift=c;return`${l} ${o=numberToString(o)} Td (${escapeString(e)}) Tj`}_getSaveFieldResources(e){const{localResources:t,appearanceResources:a,acroFormResources:r}=this._fieldResources,i=this.data.defaultAppearanceData?.fontName;if(!i)return t||Dict.empty;for(const e of[t,a])if(e instanceof Dict){const t=e.get("Font");if(t instanceof Dict&&t.has(i))return e}if(r instanceof Dict){const a=r.get("Font");if(a instanceof Dict&&a.has(i)){co\ +nst r=new Dict(e);r.set(i,a.getRaw(i));const n=new Dict(e);n.set("Font",r);return Dict.merge({xref:e,dictArray:[n,t],mergeSubDicts:!0})}}return t||Dict.empty}getFieldObject(){return null}}class TextWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t}=e;if(t.has("PMD")){this.flags|=J;this.data.hidden=!0;warn("Barcodes are not supported")}this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML;this._hasText=!0;"string"!=typeof this.data.fieldValue&&(this.data.fieldV\ +alue="");let a=getInheritableProperty({dict:t,key:"Q"});(!Number.isInteger(a)||a<0||a>2)&&(a=null);this.data.textAlignment=a;let r=getInheritableProperty({dict:t,key:"MaxLen"});(!Number.isInteger(r)||r<0)&&(r=0);this.data.maxLen=r;this.data.multiLine=this.hasFieldFlag(ie);this.data.comb=this.hasFieldFlag(de)&&!this.data.multiLine&&!this.data.password&&!this.hasFieldFlag(le)&&0!==this.data.maxLen;this.data.doNotScroll=this.hasFieldFlag(ue);const{data:{actions:i}}=this;if(!i)return;const n=/^AF(Da\ +te|Time)_(?:Keystroke|Format)(?:Ex)?\\([\'"]?([^\'"]+)[\'"]?\\);$/;let s=!1;(1===i.Format?.length&&1===i.Keystroke?.length&&n.test(i.Format[0])&&n.test(i.Keystroke[0])||0===i.Format?.length&&1===i.Keystroke?.length&&n.test(i.Keystroke[0])||0===i.Keystroke?.length&&1===i.Format?.length&&n.test(i.Format[0]))&&(s=!0);const o=[];i.Format&&o.push(...i.Format);i.Keystroke&&o.push(...i.Keystroke);if(s){delete i.Keystroke;i.Format=o}for(const e of o){const t=e.match(n);if(!t)continue;const a="Date"===t[1];le\ +t r=t[2];const i=parseInt(r,10);isNaN(i)||Math.floor(Math.log10(i))+1!==t[2].length||(r=(a?Pn:Ln)[i]??r);this.data.datetimeFormat=r;if(!s)break;if(a){if(/HH|MM|ss|h/.test(r)){this.data.datetimeType="datetime-local";this.data.timeStep=/ss/.test(r)?1:60}else this.data.datetimeType="date";break}this.data.datetimeType="time";this.data.timeStep=/ss/.test(r)?1:60;break}}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(e,t,a,r,i,n,s,o,c,l,h){const u=i/this.data.ma\ +xLen,d=this.getBorderAndBackgroundAppearances(h),f=[],g=t.getCharPositions(a);for(const[e,t]of g)f.push(`(${escapeString(a.substring(e,t))}) Tj`);const p=f.join(` ${numberToString(u)} 0 Td `);return`/Tx BMC q ${d}BT `+e+` 1 0 0 1 ${numberToString(s)} ${numberToString(o+c)} Tm ${p} ET Q EMC`}_getMultilineAppearance(e,t,a,r,i,n,s,o,c,l,h,u){const d=[],f=i-2*o,g={shift:0};for(let e=0,n=t.length;e<n;e++){const n=t[e],u=this._splitLine(n,a,r,f);for(let t=0,n=u.length;t<n;t++){const n=u[t],f=0===e&&0=\ +==t?-c-(h-l):-h;d.push(this._renderText(n,a,r,i,s,g,o,f))}}const p=this.getBorderAndBackgroundAppearances(u),m=d.join("\\n");return`/Tx BMC q ${p}BT `+e+` 1 0 0 1 0 ${numberToString(n)} Tm ${m} ET Q EMC`}_splitLine(e,t,a,r,i={}){e=i.line||e;const n=i.glyphs||t.charsToGlyphs(e);if(n.length<=1)return[e];const s=i.positions||t.getCharPositions(e),o=a/1e3,c=[];let l=-1,h=-1,u=-1,d=0,f=0;for(let t=0,a=n.length;t<a;t++){const[a,i]=s[t],g=n[t],p=g.width*o;if(" "===g.unicode)if(f+p>r){c.push(e.substring(\ +d,a));d=a;f=p;l=-1;u=-1}else{f+=p;l=a;h=i;u=t}else if(f+p>r)if(-1!==l){c.push(e.substring(d,h));d=h;t=u+1;l=-1;f=0}else{c.push(e.substring(d,a));d=a;f=p}else f+=p}d<e.length&&c.push(e.substring(d,e.length));return c}async extractTextContent(e,t,a){await super.extractTextContent(e,t,a);const r=this.data.textContent;if(!r)return;const i=r.join("\\n");if(i===this.data.fieldValue)return;const n=i.replaceAll(/([.*+?^${}()|[\\]\\\\])|(\\s+)/g,((e,t)=>t?`\\\\${t}`:"\\\\s+"));new RegExp(`^\\\\s*${n}\\\\s*$`).test(th\ +is.data.fieldValue)&&(this.data.textContent=this.data.fieldValue.split("\\n"))}getFieldObject(){return{id:this.data.id,value:this.data.fieldValue,defaultValue:this.data.defaultFieldValue||"",multiline:this.data.multiLine,password:this.data.password,charLimit:this.data.maxLen,comb:this.data.comb,editable:!this.data.readOnly,hidden:this.data.hidden,name:this.data.fieldName,rect:this.data.rect,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.ba\ +ckgroundColor,rotation:this.rotation,datetimeFormat:this.data.datetimeFormat,hasDatetimeHTML:!!this.data.datetimeType,type:"text"}}}class ButtonWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);this.checkedAppearance=null;this.uncheckedAppearance=null;const t=this.hasFieldFlag(se),a=this.hasFieldFlag(oe);this.data.checkBox=!t&&!a;this.data.radioButton=t&&!a;this.data.pushButton=a;this.data.isTooltipOnly=!1;if(this.data.checkBox)this._processCheckBox(e);else if(this.data.radioButt\ +on)this._processRadioButton(e);else if(this.data.pushButton){this.data.hasOwnCanvas=!0;this.data.noHTML=!1;this._processPushButton(e)}else warn("Invalid field flags for button widget annotation")}async getOperatorList(e,t,a,r){if(this.data.pushButton)return super.getOperatorList(e,t,a,!1,r);let i=null,n=null;if(r){const e=r.get(this.data.id);i=e?e.value:null;n=e?e.rotation:null}if(null===i&&this.appearance)return super.getOperatorList(e,t,a,r);null==i&&(i=this.data.checkBox?this.data.fieldValue=\ +==this.data.exportValue:this.data.fieldValue===this.data.buttonValue);const s=i?this.checkedAppearance:this.uncheckedAppearance;if(s){const i=this.appearance,o=lookupMatrix(s.dict.getArray("Matrix"),Fa);n&&s.dict.set("Matrix",this.getRotationMatrix(r));this.appearance=s;const c=super.getOperatorList(e,t,a,r);this.appearance=i;s.dict.set("Matrix",o);return c}return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}async save(e,t,a,r){this.data.checkBox?this._saveCheckbox(e,t,a,r):this.da\ +ta.radioButton&&this._saveRadioButton(e,t,a,r)}async _saveCheckbox(e,t,a,r){if(!a)return;const i=a.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.rotation,o=i?.value;if(void 0===s&&void 0===n){if(void 0===o)return;if(this.data.fieldValue===this.data.exportValue===o)return}let c=e.xref.fetchIfRef(this.ref);if(!(c instanceof Dict))return;c=c.clone();void 0===s&&(s=this.rotation);void 0===o&&(o=this.data.fieldValue===this.data.exportValue);const l={path:this.data.fieldName,valu\ +e:o?this.data.exportValue:""},h=Name.get(o?this.data.exportValue:"Off");this.setValue(c,h,e.xref,r);c.set("AS",h);c.set("M",`D:${getModificationDate()}`);void 0!==n&&c.set("F",n);const u=this._getMKDict(s);u&&c.set("MK",u);r.put(this.ref,{data:c,xfa:l,needAppearances:!1})}async _saveRadioButton(e,t,a,r){if(!a)return;const i=a.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.rotation,o=i?.value;if(void 0===s&&void 0===n){if(void 0===o)return;if(this.data.fieldValue===this.data.\ +buttonValue===o)return}let c=e.xref.fetchIfRef(this.ref);if(!(c instanceof Dict))return;c=c.clone();void 0===o&&(o=this.data.fieldValue===this.data.buttonValue);void 0===s&&(s=this.rotation);const l={path:this.data.fieldName,value:o?this.data.buttonValue:""},h=Name.get(o?this.data.buttonValue:"Off");o&&this.setValue(c,h,e.xref,r);c.set("AS",h);c.set("M",`D:${getModificationDate()}`);void 0!==n&&c.set("F",n);const u=this._getMKDict(s);u&&c.set("MK",u);r.put(this.ref,{data:c,xfa:l,needAppearances:\ +!1})}_getDefaultCheckedAppearance(e,t){const{width:a,height:r}=this,i=[0,0,a,r],n=.8*Math.min(a,r);let s,o;if("check"===t){s={width:.755*n,height:.705*n};o="3"}else if("disc"===t){s={width:.791*n,height:.705*n};o="l"}else unreachable(`_getDefaultCheckedAppearance - unsupported type: ${t}`);const c=`q BT /PdfJsZaDb ${n} Tf 0 g ${numberToString((a-s.width)/2)} ${numberToString((r-s.height)/2)} Td (${o}) Tj ET Q`,l=new Dict(e.xref);l.set("FormType",1);l.setIfName("Subtype","Form");l.setIfName("Type\ +","XObject");l.set("BBox",i);l.set("Matrix",[1,0,0,1,0,0]);l.set("Length",c.length);const h=new Dict(e.xref),u=new Dict(e.xref);u.set("PdfJsZaDb",this.fallbackFontDict);h.set("Font",u);l.set("Resources",h);this.checkedAppearance=new StringStream(c);this.checkedAppearance.dict=l;this._streams.push(this.checkedAppearance)}_processCheckBox(e){const t=e.dict.get("AP");if(!(t instanceof Dict))return;const a=t.get("N");if(!(a instanceof Dict))return;const r=this._decodeFormValue(e.dict.get("AS"));"str\ +ing"==typeof r&&(this.data.fieldValue=r);const i=null!==this.data.fieldValue&&"Off"!==this.data.fieldValue?this.data.fieldValue:"Yes",n=this._decodeFormValue(a.getKeys());if(0===n.length)n.push("Off",i);else if(1===n.length)"Off"===n[0]?n.push(i):n.unshift("Off");else if(n.includes(i)){n.length=0;n.push("Off",i)}else{const e=n.find((e=>"Off"!==e));n.length=0;n.push("Off",e)}n.includes(this.data.fieldValue)||(this.data.fieldValue="Off");this.data.exportValue=n[1];const s=a.get(this.data.exportVal\ +ue);this.checkedAppearance=s instanceof BaseStream?s:null;const o=a.get("Off");this.uncheckedAppearance=o instanceof BaseStream?o:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"check");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processRadioButton(e){this.data.buttonValue=null;const t=e.dict.g\ +et("Parent");if(t instanceof Dict){this.parent=e.dict.getRaw("Parent");const a=t.get("V");a instanceof Name&&(this.data.fieldValue=this._decodeFormValue(a))}const a=e.dict.get("AP");if(!(a instanceof Dict))return;const r=a.get("N");if(!(r instanceof Dict))return;for(const e of r.getKeys())if("Off"!==e){this.data.buttonValue=this._decodeFormValue(e);break}const i=r.get(this.data.buttonValue);this.checkedAppearance=i instanceof BaseStream?i:null;const n=r.get("Off");this.uncheckedAppearance=n inst\ +anceof BaseStream?n:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"disc");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processPushButton(e){const{dict:t,annotationGlobals:a}=e;if(t.has("A")||t.has("AA")||this.data.alternativeText){this.data.isTooltipOnly=!t.has("A")&&!t.has("AA");Catalog.parseD\ +estDictionary({destDict:t,resultObj:this.data,docBaseUrl:a.baseUrl,docAttachments:a.attachments})}else warn("Push buttons without action dictionaries are not supported")}getFieldObject(){let e,t="button";if(this.data.checkBox){t="checkbox";e=this.data.exportValue}else if(this.data.radioButton){t="radiobutton";e=this.data.buttonValue}return{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:e,editable:!this.data.readOnly,name:this.data.fieldNam\ +e,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:t}}get fallbackFontDict(){const e=new Dict;e.setIfName("BaseFont","ZapfDingbats");e.setIfName("Type","FallbackType");e.setIfName("Subtype","FallbackType");e.setIfName("Encoding","ZapfDingbatsEncoding");return shadow(this,"fallbackFontDict",e)}}class ChoiceWidgetAnnotation extends WidgetAnnotation{constru\ +ctor(e){super(e);const{dict:t,xref:a}=e;this.indices=t.getArray("I");this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0;this.data.options=[];const r=getInheritableProperty({dict:t,key:"Opt"});if(Array.isArray(r))for(let e=0,t=r.length;e<t;e++){const t=a.fetchIfRef(r[e]),i=Array.isArray(t);this.data.options[e]={exportValue:this._decodeFormValue(i?a.fetchIfRef(t[0]):t),displayValue:this._decodeFormValue(i?a.fetchIfRef(t[1]):t)}}if(this.hasIndices){this.data.fieldValue=[];const e=th\ +is.data.options.length;for(const t of this.indices)Number.isInteger(t)&&t>=0&&t<e&&this.data.fieldValue.push(this.data.options[t].exportValue)}else"string"==typeof this.data.fieldValue?this.data.fieldValue=[this.data.fieldValue]:this.data.fieldValue||=[];0===this.data.options.length&&this.data.fieldValue.length>0&&(this.data.options=this.data.fieldValue.map((e=>({exportValue:e,displayValue:e}))));this.data.combo=this.hasFieldFlag(ce);this.data.multiSelect=this.hasFieldFlag(he);this._hasText=!0}g\ +etFieldObject(){const e=this.data.combo?"combobox":"listbox",t=this.data.fieldValue.length>0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.ba\ +ckgroundColor,rotation:this.rotation,type:e}}amendSavedDict(e,t){if(!this.hasIndices)return;let a=e?.get(this.data.id)?.value;Array.isArray(a)||(a=[a]);const r=[],{options:i}=this.data;for(let e=0,t=0,n=i.length;e<n;e++)if(i[e].exportValue===a[t]){r.push(e);t+=1}t.set("I",r)}async _getAppearance(e,t,r,i){if(this.data.combo)return super._getAppearance(e,t,r,i);let n,s;const o=i?.get(this.data.id);if(o){s=o.rotation;n=o.value}if(void 0===s&&void 0===n&&!this._needAppearances)return null;void 0===n\ +?n=this.data.fieldValue:Array.isArray(n)||(n=[n]);let{width:c,height:l}=this;90!==s&&270!==s||([c,l]=[l,c]);const h=this.data.options.length,u=[];for(let e=0;e<h;e++){const{exportValue:t}=this.data.options[e];n.includes(t)&&u.push(e)}this._defaultAppearance||(this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0 g"));const d=await WidgetAnnotation._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);let f,{fontSize:g}=\ +this.data.defaultAppearanceData;if(g)f=this._defaultAppearance;else{const e=(l-1)/h;let t,a=-1;for(const{displayValue:e}of this.data.options){const r=this._getTextWidth(e,d);if(r>a){a=r;t=e}}[f,g]=this._computeFontSize(e,c-4,t,d,-1)}const p=g*a,m=(p-g)/2,b=Math.floor(l/p);let y=0;if(u.length>0){const e=Math.min(...u),t=Math.max(...u);y=Math.max(0,t-b+1);y>e&&(y=e)}const w=Math.min(y+b+1,h),x=["/Tx BMC q",`1 1 ${c} ${l} re W n`];if(u.length){x.push("0.600006 0.756866 0.854904 rg");for(const e of \ +u)y<=e&&e<w&&x.push(`1 ${l-(e-y+1)*p} ${c} ${p} re f`)}x.push("BT",f,`1 0 0 1 0 ${l} Tm`);const S={shift:0};for(let e=y;e<w;e++){const{displayValue:t}=this.data.options[e],a=e===y?m:0;x.push(this._renderText(t,d,g,c,0,S,2,-p+a))}x.push("ET Q EMC");return x.join("\\n")}}class SignatureWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);this.data.fieldValue=null;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!this.data.hasOwnCanvas}getFieldObject(){return{id:this.data.id,v\ +alue:null,page:this.data.pageIndex,type:"signature"}}}class TextAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.noRotate=!0;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;const{dict:t}=e;this.data.annotationType=F;if(this.data.hasAppearance)this.data.name="NoIcon";else{this.data.rect[1]=this.data.rect[3]-22;this.data.rect[2]=this.data.rect[0]+22;this.data.name=t.has("Name")?t.get("Name").name:"Note"}if(t.has("State")){this.data.state=t.get("State")||null;this\ +.data.stateModel=t.get("StateModel")||null}else{this.data.state=null;this.data.stateModel=null}}}class LinkAnnotation extends Annotation{constructor(e){super(e);const{dict:t,annotationGlobals:a}=e;this.data.annotationType=T;this.data.noHTML=!1;const r=getQuadPoints(t,this.rectangle);r&&(this.data.quadPoints=r);this.data.borderColor||=this.data.color;Catalog.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:a.baseUrl,docAttachments:a.attachments})}get overlaysTextContent(){return!0}}\ +class PopupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;this.data.annotationType=W;this.data.noHTML=!1;0!==this.width&&0!==this.height||(this.data.rect=null);let a=t.get("Parent");if(!a){warn("Popup annotation has a missing or invalid parent annotation.");return}this.data.parentRect=lookupNormalRect(a.getArray("Rect"),null);this.data.creationDate=a.get("CreationDate")||"";isName(a.get("RT"),G)&&(a=a.get("IRT"));if(a.has("M")){this.setModificationDate(a.get("M"));this.dat\ +a.modificationDate=this.modificationDate}else this.data.modificationDate=null;if(a.has("C")){this.setColor(a.getArray("C"));this.data.color=this.color}else this.data.color=null;if(!this.viewable){const e=a.get("F");this._isViewable(e)&&this.setFlags(e)}this.setTitle(a.get("T"));this.data.titleObj=this._title;this.setContents(a.get("Contents"));this.data.contentsObj=this._contents;a.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(a.get("RC")));this.data.open=!!t.get("Open")}static cre\ +ateNewDict(e,t,a){const{oldAnnotation:r,rect:i,parent:n}=e,s=r||new Dict(t);s.setIfNotExists("Type",Name.get("Annot"));s.setIfNotExists("Subtype",Name.get("Popup"));s.setIfNotExists("Open",!1);s.setIfArray("Rect",i);s.set("Parent",n);return s}static async createNewAppearanceStream(e,t,a){return null}}class FreeTextAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.hasOwnCanvas=this.data.noRotate;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1;const{annotationGlobals\ +:t,evaluatorOptions:a,xref:r}=e;this.data.annotationType=O;this.setDefaultAppearance(e);this._hasAppearance=!!this.appearance;if(this._hasAppearance){const{fontColor:e,fontSize:i}=function parseAppearanceStream(e,t,a,r){return new AppearanceStreamEvaluator(e,t,a,r).parse()}(this.appearance,a,r,t.globalColorSpaceCache);this.data.defaultAppearanceData.fontColor=e;this.data.defaultAppearanceData.fontSize=i||10}else{this.data.defaultAppearanceData.fontSize||=10;const{fontColor:t,fontSize:a}=this.dat\ +a.defaultAppearanceData;if(this._contents.str){this.data.textContent=this._contents.str.split(/\\r\\n?|\\n/).map((e=>e.trimEnd()));const{coords:e,bbox:t,matrix:r}=FakeUnicodeFont.getFirstPositionInfo(this.rectangle,this.rotation,a);this.data.textPosition=this._transformPoint(e,t,r)}if(this._isOffscreenCanvasSupported){const i=e.dict.get("CA"),n=new FakeUnicodeFont(r,"sans-serif");this.appearance=n.createAppearance(this._contents.str,this.rectangle,this.rotation,a,t,i);this._streams.push(this.appear\ +ance)}else warn("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(e,t,{apRef:a,ap:r}){const{color:i,date:n,fontSize:s,oldAnnotation:o,rect:c,rotation:l,user:h,value:u}=e,d=o||new Dict(t);d.setIfNotExists("Type",Name.get("Annot"));d.setIfNotExists("Subtype",Name.get("FreeText"));d.set(o?"M":"CreationDate",`D:${getModificationDate(n)}`);o&&d.delete("RC");d.setIfArray("Rect",c);const f=\ +`/Helv ${s} Tf ${getPdfColor(i,!0)}`;d.set("DA",f);d.setIfDefined("Contents",stringToAsciiOrUTF16BE(u));d.setIfNotExists("F",4);d.setIfNotExists("Border",[0,0,0]);d.setIfNumber("Rotate",l);d.setIfDefined("T",stringToAsciiOrUTF16BE(h));if(a||r){const e=new Dict(t);d.set("AP",e);e.set("N",a||r)}return d}static async createNewAppearanceStream(e,t,r){const{baseFontRef:i,evaluator:n,task:s}=r,{color:o,fontSize:c,rect:l,rotation:h,value:u}=e;if(!o)return null;const d=new Dict(t),f=new Dict(t);if(i)f.s\ +et("Helv",i);else{const e=new Dict(t);e.setIfName("BaseFont","Helvetica");e.setIfName("Type","Font");e.setIfName("Subtype","Type1");e.setIfName("Encoding","WinAnsiEncoding");f.set("Helv",e)}d.set("Font",f);const g=await WidgetAnnotation._getFontData(n,s,{fontName:"Helv",fontSize:c},d),[p,m,b,y]=l;let w=b-p,x=y-m;h%180!=0&&([w,x]=[x,w]);const S=u.split("\\n"),k=c/1e3;let C=-1/0;const v=[];for(let e of S){const t=g.encodeString(e);if(t.length>1)return null;e=t.join("");v.push(e);let a=0;const r=g.c\ +harsToGlyphs(e);for(const e of r)a+=e.width*k;C=Math.max(C,a)}let F=1;C>w&&(F=w/C);let T=1;const O=a*c,M=1*c,D=O*S.length;D>x&&(T=x/D);const R=c*Math.min(F,T);let N,E,L;switch(h){case 0:L=[1,0,0,1];E=[l[0],l[1],w,x];N=[l[0],l[3]-M];break;case 90:L=[0,1,-1,0];E=[l[1],-l[2],w,x];N=[l[1],-l[0]-M];break;case 180:L=[-1,0,0,-1];E=[-l[2],-l[3],w,x];N=[-l[2],-l[1]-M];break;case 270:L=[0,-1,1,0];E=[-l[3],l[0],w,x];N=[-l[3],l[2]-M]}const j=["q",`${L.join(" ")} 0 0 cm`,`${E.join(" ")} re W n`,"BT",`${getPd\ +fColor(o,!0)}`,`0 Tc /Helv ${numberToString(R)} Tf`];j.push(`${N.join(" ")} Td (${escapeString(v[0])}) Tj`);const _=numberToString(O);for(let e=1,t=v.length;e<t;e++){const t=v[e];j.push(`0 -${_} Td (${escapeString(t)}) Tj`)}j.push("ET","Q");const U=j.join("\\n"),X=new Dict(t);X.set("FormType",1);X.setIfName("Subtype","Form");X.setIfName("Type","XObject");X.set("BBox",l);X.set("Resources",d);X.set("Matrix",[1,0,0,1,-l[0],-l[1]]);const q=new StringStream(U);q.dict=X;return q}}class LineAnnotation e\ +xtends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=M;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;const r=lookupRect(t.getArray("L"),[0,0,0,0]);this.data.lineCoordinates=Util.normalizeRect(r);this.setLineEndings(t.getArray("LE"));this.data.lineEndings=this.lineEndings;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),i=t.get("CA"),n=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),s=n?i:null,o=this.borderStyle.widt\ +h||1,c=2*o,l=[this.data.lineCoordinates[0]-c,this.data.lineCoordinates[1]-c,this.data.lineCoordinates[2]+c,this.data.lineCoordinates[3]+c];Util.intersect(this.rectangle,l)||(this.rectangle=l);this._setDefaultAppearance({xref:a,extra:`${o} w`,strokeColor:e,fillColor:n,strokeAlpha:i,fillAlpha:s,pointsCallback:(e,t)=>{e.push(`${r[0]} ${r[1]} m`,`${r[2]} ${r[3]} l`,"S");return[t[0]-o,t[7]-o,t[2]+o,t[3]+o]}})}}}class SquareAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:\ +a}=e;this.data.annotationType=D;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA"),i=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),n=i?r:null;if(0===this.borderStyle.width&&!i)return;this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:i,strokeAlpha:r,fillAlpha:n,pointsCallback:(e,t)=>{const a=t[4]+this.borderStyle.width/2,r=t[5]+this.borderStyle.width/2,n=t\ +[6]-t[4]-this.borderStyle.width,s=t[3]-t[7]-this.borderStyle.width;e.push(`${a} ${r} ${n} ${s} re`);i?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class CircleAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=R;if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA"),i=getPdfColorArray(getRgbColor(t.getArray("IC"),null)),n=i?r:null;if(0===this.borderStyle.width&&!i)return;const s=4/3*Math.tan(Math.PI/8);\ +this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:i,strokeAlpha:r,fillAlpha:n,pointsCallback:(e,t)=>{const a=t[0]+this.borderStyle.width/2,r=t[1]-this.borderStyle.width/2,n=t[6]-this.borderStyle.width/2,o=t[7]+this.borderStyle.width/2,c=a+(n-a)/2,l=r+(o-r)/2,h=(n-a)/2*s,u=(o-r)/2*s;e.push(`${c} ${o} m`,`${c+h} ${o} ${n} ${l+u} ${n} ${l} c`,`${n} ${l-u} ${c+h} ${r} ${c} ${r} c`,`${c-h} ${r} ${a} ${l-u} ${a} ${l} c`,`${a} ${l+u} ${c-h} ${o} ${c} ${o} c`\ +,"h");i?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class PolylineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=E;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.vertices=null;if(!(this instanceof PolygonAnnotation)){this.setLineEndings(t.getArray("LE"));this.data.lineEndings=this.lineEndings}const r=t.getArray("Vertices");if(!isNumberArray(r,null))return;const i=this.data.vertices=Float32Array.fro\ +m(r);if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA");let n,s=getRgbColor(t.getArray("IC"),null);s&&(s=getPdfColorArray(s));n=s?this.color?s.every(((t,a)=>t===e[a]))?"f":"B":"f":"S";const o=this.borderStyle.width||1,c=2*o,l=[1/0,1/0,-1/0,-1/0];for(let e=0,t=i.length;e<t;e+=2)Util.rectBoundingBox(i[e]-c,i[e+1]-c,i[e]+c,i[e+1]+c,l);Util.intersect(this.rectangle,l)||(this.rectangle=l);this._setDefaultAppearance({xref:a,extra:`${o} w`,strokeColor:e,strokeAlpha:r,fillCo\ +lor:s,fillAlpha:s?r:null,pointsCallback:(e,t)=>{for(let t=0,a=i.length;t<a;t+=2)e.push(`${i[t]} ${i[t+1]} ${0===t?"m":"l"}`);e.push(n);return[t[0],t[7],t[2],t[3]]}})}}}class PolygonAnnotation extends PolylineAnnotation{constructor(e){super(e);this.data.annotationType=N}}class CaretAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.annotationType=q}}class InkAnnotation extends MarkupAnnotation{constructor(e){super(e);this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1\ +;const{dict:t,xref:a}=e;this.data.annotationType=H;this.data.inkLists=[];this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1;this.data.opacity=t.get("CA")||1;const r=t.getArray("InkList");if(Array.isArray(r)){for(let e=0,t=r.length;e<t;++e){if(!Array.isArray(r[e]))continue;const t=new Float32Array(r[e].length);this.data.inkLists.push(t);for(let i=0,n=r[e].length;i<n;i+=2){const n=a.fetchIfRef(r[e][i]),s=a.fetchIfRef(r[e][i+1]);if("number"==typeof n&&"number"==typeof s){t[i]=n;t[i+1]=s}}}i\ +f(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA"),i=this.borderStyle.width||1,n=2*i,s=[1/0,1/0,-1/0,-1/0];for(const e of this.data.inkLists)for(let t=0,a=e.length;t<a;t+=2)Util.rectBoundingBox(e[t]-n,e[t+1]-n,e[t]+n,e[t+1]+n,s);Util.intersect(this.rectangle,s)||(this.rectangle=s);this._setDefaultAppearance({xref:a,extra:`${i} w`,strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{for(const t of this.data.inkLists){for(let a=0,r=t.length;a<r;a+=2)e.push(`${t[a]} ${t[a+\ +1]} ${0===a?"m":"l"}`);e.push("S")}return[t[0],t[7],t[2],t[3]]}})}}}static createNewDict(e,t,{apRef:a,ap:r}){const{oldAnnotation:i,color:n,date:s,opacity:o,paths:c,outlines:l,rect:h,rotation:u,thickness:d,user:f}=e,g=i||new Dict(t);g.setIfNotExists("Type",Name.get("Annot"));g.setIfNotExists("Subtype",Name.get("Ink"));g.set(i?"M":"CreationDate",`D:${getModificationDate(s)}`);g.setIfArray("Rect",h);g.setIfArray("InkList",l?.points||c?.points);g.setIfNotExists("F",4);g.setIfNumber("Rotate",u);g.set\ +IfDefined("T",stringToAsciiOrUTF16BE(f));l&&g.setIfName("IT","InkHighlight");if(d>0){const e=new Dict(t);g.set("BS",e);e.set("W",d)}g.setIfArray("C",getPdfColorArray(n));g.setIfNumber("CA",o);if(r||a){const e=new Dict(t);g.set("AP",e);e.set("N",a||r)}return g}static async createNewAppearanceStream(e,t,a){if(e.outlines)return this.createNewAppearanceStreamForHighlight(e,t,a);const{color:r,rect:i,paths:n,thickness:s,opacity:o}=e;if(!r)return null;const c=[`${s} w 1 J 1 j`,`${getPdfColor(r,!1)}`];1\ +!==o&&c.push("/R0 gs");for(const e of n.lines){c.push(`${numberToString(e[4])} ${numberToString(e[5])} m`);for(let t=6,a=e.length;t<a;t+=6)if(isNaN(e[t]))c.push(`${numberToString(e[t+4])} ${numberToString(e[t+5])} l`);else{const[a,r,i,n,s,o]=e.slice(t,t+6);c.push([a,r,i,n,s,o].map(numberToString).join(" ")+" c")}6===e.length&&c.push(`${numberToString(e[4])} ${numberToString(e[5])} l`)}c.push("S");const l=c.join("\\n"),h=new Dict(t);h.set("FormType",1);h.setIfName("Subtype","Form");h.setIfName("Ty\ +pe","XObject");h.set("BBox",i);h.set("Length",l.length);if(1!==o){const e=new Dict(t),a=new Dict(t),r=new Dict(t);r.set("CA",o);r.setIfName("Type","ExtGState");a.set("R0",r);e.set("ExtGState",a);h.set("Resources",e)}const u=new StringStream(l);u.dict=h;return u}static async createNewAppearanceStreamForHighlight(e,t,a){const{color:r,rect:i,outlines:{outline:n},opacity:s}=e;if(!r)return null;const o=[`${getPdfColor(r,!0)}`,"/R0 gs"];o.push(`${numberToString(n[4])} ${numberToString(n[5])} m`);for(l\ +et e=6,t=n.length;e<t;e+=6)if(isNaN(n[e]))o.push(`${numberToString(n[e+4])} ${numberToString(n[e+5])} l`);else{const[t,a,r,i,s,c]=n.slice(e,e+6);o.push([t,a,r,i,s,c].map(numberToString).join(" ")+" c")}o.push("h f");const c=o.join("\\n"),l=new Dict(t);l.set("FormType",1);l.setIfName("Subtype","Form");l.setIfName("Type","XObject");l.set("BBox",i);l.set("Length",c.length);const h=new Dict(t),u=new Dict(t);h.set("ExtGState",u);l.set("Resources",h);const d=new Dict(t);u.set("R0",d);d.setIfName("BM","\ +Multiply");if(1!==s){d.set("ca",s);d.setIfName("Type","ExtGState")}const f=new StringStream(c);f.dict=l;return f}}class HighlightAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=L;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1;this.data.opacity=t.get("CA")||1;if(this.data.quadPoints=getQuadPoints(t,null)){const e=this.appearance?.dict.get("Resources");if(!this.appearance||!e?.has("ExtGState")){this.appearance&&warn("Highlight\ +Annotation - ignoring built-in appearance stream.");const e=getPdfColorArray(this.color,[1,1,0]),r=t.get("CA");this._setDefaultAppearance({xref:a,fillColor:e,blendMode:"Multiply",fillAlpha:r,pointsCallback:(e,t)=>{e.push(`${t[0]} ${t[1]} m`,`${t[2]} ${t[3]} l`,`${t[6]} ${t[7]} l`,`${t[4]} ${t[5]} l`,"f");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}static createNewDict(e,t,{apRef:a,ap:r}){const{color:i,date:n,oldAnnotation:s,opacity:o,rect:c,rot\ +ation:l,user:h,quadPoints:u}=e,d=s||new Dict(t);d.setIfNotExists("Type",Name.get("Annot"));d.setIfNotExists("Subtype",Name.get("Highlight"));d.set(s?"M":"CreationDate",`D:${getModificationDate(n)}`);d.setIfArray("Rect",c);d.setIfNotExists("F",4);d.setIfNotExists("Border",[0,0,0]);d.setIfNumber("Rotate",l);d.setIfArray("QuadPoints",u);d.setIfArray("C",getPdfColorArray(i));d.setIfNumber("CA",o);d.setIfDefined("T",stringToAsciiOrUTF16BE(h));if(a||r){const e=new Dict(t);d.set("AP",e);e.set("N",a||r)\ +}return d}static async createNewAppearanceStream(e,t,a){const{color:r,rect:i,outlines:n,opacity:s}=e;if(!r)return null;const o=[`${getPdfColor(r,!0)}`,"/R0 gs"],c=[];for(const e of n){c.length=0;c.push(`${numberToString(e[0])} ${numberToString(e[1])} m`);for(let t=2,a=e.length;t<a;t+=2)c.push(`${numberToString(e[t])} ${numberToString(e[t+1])} l`);c.push("h");o.push(c.join("\\n"))}o.push("f*");const l=o.join("\\n"),h=new Dict(t);h.set("FormType",1);h.setIfName("Subtype","Form");h.setIfName("Type","\ +XObject");h.set("BBox",i);h.set("Length",l.length);const u=new Dict(t),d=new Dict(t);u.set("ExtGState",d);h.set("Resources",u);const f=new Dict(t);d.set("R0",f);f.setIfName("BM","Multiply");if(1!==s){f.set("ca",s);f.setIfName("Type","ExtGState")}const g=new StringStream(l);g.dict=h;return g}}class UnderlineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=j;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdf\ +ColorArray(this.color,[0,0,0]),r=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 0.571 w",strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{e.push(`${t[4]} ${t[5]+1.3} m`,`${t[6]} ${t[7]+1.3} l`,"S");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class SquigglyAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=_;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearanc\ +e){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{const a=(t[1]-t[5])/6;let r=a,i=t[4];const n=t[5],s=t[6];e.push(`${i} ${n+r} m`);do{i+=2;r=0===r?a:0;e.push(`${i} ${n+r} l`)}while(i<s);e.push("S");return[t[4],n-2*a,s,n+2*a]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class StrikeOutAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,x\ +ref:a}=e;this.data.annotationType=U;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=getPdfColorArray(this.color,[0,0,0]),r=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{e.push((t[0]+t[4])/2+" "+(t[1]+t[5])/2+" m",(t[2]+t[6])/2+" "+(t[3]+t[7])/2+" l","S");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}get overlaysTextContent(){return!0}}class StampAnnotation extends MarkupAnnotation{#p\ +e=null;constructor(e){super(e);this.data.annotationType=X;this.data.hasOwnCanvas=this.data.noRotate;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1}mustBeViewedWhenEditing(e,t=null){if(e){if(!this.data.isEditable)return!0;this.#pe??=this.data.hasOwnCanvas;this.data.hasOwnCanvas=!0;return!0}if(null!==this.#pe){this.data.hasOwnCanvas=this.#pe;this.#pe=null}return!t?.has(this.data.id)}static async createImage(e,t){const{width:a,height:r}=e,i=new OffscreenCanvas(a,r),n=i.getContext("2d",{\ +alpha:!0});n.drawImage(e,0,0);const s=n.getImageData(0,0,a,r).data,o=new Uint32Array(s.buffer),c=o.some(FeatureTest.isLittleEndian?e=>e>>>24!=255:e=>!!(255&~e));if(c){n.fillStyle="white";n.fillRect(0,0,a,r);n.drawImage(e,0,0)}const l=i.convertToBlob({type:"image/jpeg",quality:1}).then((e=>e.arrayBuffer())),h=Name.get("XObject"),u=Name.get("Image"),d=new Dict(t);d.set("Type",h);d.set("Subtype",u);d.set("BitsPerComponent",8);d.setIfName("ColorSpace","DeviceRGB");d.setIfName("Filter","DCTDecode");d\ +.set("BBox",[0,0,a,r]);d.set("Width",a);d.set("Height",r);let f=null;if(c){const e=new Uint8Array(o.length);if(FeatureTest.isLittleEndian)for(let t=0,a=o.length;t<a;t++)e[t]=o[t]>>>24;else for(let t=0,a=o.length;t<a;t++)e[t]=255&o[t];const i=new Dict(t);i.set("Type",h);i.set("Subtype",u);i.set("BitsPerComponent",8);i.setIfName("ColorSpace","DeviceGray");i.set("Width",a);i.set("Height",r);f=new Stream(e,0,0,i)}return{imageStream:new Stream(await l,0,0,d),smaskStream:f,width:a,height:r}}static cre\ +ateNewDict(e,t,{apRef:a,ap:r}){const{date:i,oldAnnotation:n,rect:s,rotation:o,user:c}=e,l=n||new Dict(t);l.setIfNotExists("Type",Name.get("Annot"));l.setIfNotExists("Subtype",Name.get("Stamp"));l.set(n?"M":"CreationDate",`D:${getModificationDate(i)}`);l.setIfArray("Rect",s);l.setIfNotExists("F",4);l.setIfNotExists("Border",[0,0,0]);l.setIfNumber("Rotate",o);l.setIfDefined("T",stringToAsciiOrUTF16BE(c));if(a||r){const e=new Dict(t);l.set("AP",e);e.set("N",a||r)}return l}static async#me(e,t){const\ +{areContours:a,color:r,rect:i,lines:n,thickness:s}=e;if(!r)return null;const o=[`${s} w 1 J 1 j`,`${getPdfColor(r,a)}`];for(const e of n){o.push(`${numberToString(e[4])} ${numberToString(e[5])} m`);for(let t=6,a=e.length;t<a;t+=6)if(isNaN(e[t]))o.push(`${numberToString(e[t+4])} ${numberToString(e[t+5])} l`);else{const[a,r,i,n,s,c]=e.slice(t,t+6);o.push([a,r,i,n,s,c].map(numberToString).join(" ")+" c")}6===e.length&&o.push(`${numberToString(e[4])} ${numberToString(e[5])} l`)}o.push(a?"F":"S");con\ +st c=o.join("\\n"),l=new Dict(t);l.set("FormType",1);l.setIfName("Subtype","Form");l.setIfName("Type","XObject");l.set("BBox",i);l.set("Length",c.length);const h=new StringStream(c);h.dict=l;return h}static async createNewAppearanceStream(e,t,a){if(e.oldAnnotation)return null;if(e.isSignature)return this.#me(e,t);const{rotation:r}=e,{imageRef:i,width:n,height:s}=a.image,o=new Dict(t),c=new Dict(t);o.set("XObject",c);c.set("Im0",i);const l=`q ${n} 0 0 ${s} 0 0 cm /Im0 Do Q`,h=new Dict(t);h.set("Fo\ +rmType",1);h.setIfName("Subtype","Form");h.setIfName("Type","XObject");h.set("BBox",[0,0,n,s]);h.set("Resources",o);if(r){const e=getRotationMatrix(r,n,s);h.set("Matrix",e)}const u=new StringStream(l);u.dict=h;return u}}class FileAttachmentAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e,r=new FileSpec(t.get("FS"),a);this.data.annotationType=z;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.file=r.serializable;const i=t.get("Name");this.d\ +ata.name=i instanceof Name?stringToPDFString(i.name):"PushPin";const n=t.get("ca");this.data.fillAlpha="number"==typeof n&&n>=0&&n<=1?n:null}}const pc={get r(){return shadow(this,"r",new Uint8Array([7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21]))},get k(){return shadow(this,"k",new Int32Array([-680876936,-389564586,606105819,-1044525330,-176418897,1200080426,-1473231341,\ +-45705983,1770035416,-1958414417,-42063,-1990404162,1804603682,-40341101,-1502002290,1236535329,-165796510,-1069501632,643717713,-373897302,-701558691,38016083,-660478335,-405537848,568446438,-1019803690,-187363961,1163531501,-1444681467,-51403784,1735328473,-1926607734,-378558,-2022574463,1839030562,-35309556,-1530992060,1272893353,-155497632,-1094730640,681279174,-358537222,-722521979,76029189,-640364487,-421815835,530742520,-995338651,-198630844,1126891415,-1416354905,-57434055,1700485571,-18\ +94986606,-1051523,-2054922799,1873313359,-30611744,-1560198380,1309151649,-145523070,-1120210379,718787259,-343485551]))}};function calculateMD5(e,t,a){let r=1732584193,i=-271733879,n=-1732584194,s=271733878;const o=a+72&-64,c=new Uint8Array(o);let l,h;for(l=0;l<a;++l)c[l]=e[t++];c[l++]=128;const u=o-8;l<u&&(l=u);c[l++]=a<<3&255;c[l++]=a>>5&255;c[l++]=a>>13&255;c[l++]=a>>21&255;c[l++]=a>>>29&255;l+=3;const d=new Int32Array(16),{k:f,r:g}=pc;for(l=0;l<o;){for(h=0;h<16;++h,l+=4)d[h]=c[l]|c[l+1]<<8|\ +c[l+2]<<16|c[l+3]<<24;let e,t,a=r,o=i,u=n,p=s;for(h=0;h<64;++h){if(h<16){e=o&u|~o&p;t=h}else if(h<32){e=p&o|~p&u;t=5*h+1&15}else if(h<48){e=o^u^p;t=3*h+5&15}else{e=u^(o|~p);t=7*h&15}const r=p,i=a+e+f[h]+d[t]|0,n=g[h];p=u;u=o;o=o+(i<<n|i>>>32-n)|0;a=r}r=r+a|0;i=i+o|0;n=n+u|0;s=s+p|0}return new Uint8Array([255&r,r>>8&255,r>>16&255,r>>>24&255,255&i,i>>8&255,i>>16&255,i>>>24&255,255&n,n>>8&255,n>>16&255,n>>>24&255,255&s,s>>8&255,s>>16&255,s>>>24&255])}function decodeString(e){try{return stringToUTF8\ +String(e)}catch(t){warn(`UTF-8 decoding failed: "${t}".`);return e}}class DatasetXMLParser extends SimpleXMLParser{constructor(e){super(e);this.node=null}onEndElement(e){const t=super.onEndElement(e);if(t&&"xfa:datasets"===e){this.node=t;throw new Error("Aborting DatasetXMLParser.")}}}class DatasetReader{constructor(e){if(e.datasets)this.node=new SimpleXMLParser({hasAttributes:!0}).parseFromString(e.datasets).documentElement;else{const t=new DatasetXMLParser({hasAttributes:!0});try{t.parseFromSt\ +ring(e["xdp:xdp"])}catch{}this.node=t.node}}getValue(e){if(!this.node||!e)return"";const t=this.node.searchNode(parseXFAPath(e),0);if(!t)return"";const a=t.firstChild;return"value"===a?.nodeName?t.children.map((e=>decodeString(e.textContent))):decodeString(t.textContent)}}class SingleIntersector{#be;#ye=1/0;#we=1/0;#xe=-1/0;#Se=-1/0;#Ae=null;#ke=[];#Ce=[];#ve=-1;#Fe=!1;constructor(e){this.#be=e;const t=e.data.quadPoints;if(t){for(let e=0,a=t.length;e<a;e+=8){this.#ye=Math.min(this.#ye,t[e]);this\ +.#xe=Math.max(this.#xe,t[e+2]);this.#we=Math.min(this.#we,t[e+5]);this.#Se=Math.max(this.#Se,t[e+1])}t.length>8&&(this.#Ae=t)}else[this.#ye,this.#we,this.#xe,this.#Se]=e.data.rect}overlaps(e){return!(this.#ye>=e.#xe||this.#xe<=e.#ye||this.#we>=e.#Se||this.#Se<=e.#we)}#Ie(e,t){if(this.#ye>=e||this.#xe<=e||this.#we>=t||this.#Se<=t)return!1;const a=this.#Ae;if(!a)return!0;if(this.#ve>=0){const r=this.#ve;if(!(a[r]>=e||a[r+2]<=e||a[r+5]>=t||a[r+1]<=t))return!0;this.#ve=-1}for(let r=0,i=a.length;r<i;\ +r+=8)if(!(a[r]>=e||a[r+2]<=e||a[r+5]>=t||a[r+1]<=t)){this.#ve=r;return!0}return!1}addGlyph(e,t,a){if(!this.#Ie(e,t)){this.disableExtraChars();return!1}if(this.#Ce.length>0){this.#ke.push(this.#Ce.join(""));this.#Ce.length=0}this.#ke.push(a);this.#Fe=!0;return!0}addExtraChar(e){this.#Fe&&this.#Ce.push(e)}disableExtraChars(){if(this.#Fe){this.#Fe=!1;this.#Ce.length=0}}setText(){this.#be.data.overlaidText=this.#ke.join("")}}class Intersector{#Te=new Map;constructor(e){for(const t of e){if(!t.data.q\ +uadPoints&&!t.data.rect)continue;const e=new SingleIntersector(t);for(const[t,a]of this.#Te)t.overlaps(e)&&(a?a.add(e):this.#Te.set(t,new Set([e])));this.#Te.set(e,null)}}addGlyph(e,t,a,r){const i=e[4]+t/2,n=e[5]+a/2;let s;for(const[e,t]of this.#Te)s?s.has(e)?e.addGlyph(i,n,r):e.disableExtraChars():e.addGlyph(i,n,r)&&(s=t)}addExtraChar(e){for(const t of this.#Te.keys())t.addExtraChar(e)}setText(){for(const e of this.#Te.keys())e.setText()}}class Word64{constructor(e,t){this.high=0|e;this.low=0|t\ +}and(e){this.high&=e.high;this.low&=e.low}xor(e){this.high^=e.high;this.low^=e.low}shiftRight(e){if(e>=32){this.low=this.high>>>e-32|0;this.high=0}else{this.low=this.low>>>e|this.high<<32-e;this.high=this.high>>>e|0}}rotateRight(e){let t,a;if(32&e){a=this.low;t=this.high}else{t=this.low;a=this.high}e&=31;this.low=t>>>e|a<<32-e;this.high=a>>>e|t<<32-e}not(){this.high=~this.high;this.low=~this.low}add(e){const t=(this.low>>>0)+(e.low>>>0);let a=(this.high>>>0)+(e.high>>>0);t>4294967295&&(a+=1);thi\ +s.low=0|t;this.high=0|a}copyTo(e,t){e[t]=this.high>>>24&255;e[t+1]=this.high>>16&255;e[t+2]=this.high>>8&255;e[t+3]=255&this.high;e[t+4]=this.low>>>24&255;e[t+5]=this.low>>16&255;e[t+6]=this.low>>8&255;e[t+7]=255&this.low}assign(e){this.high=e.high;this.low=e.low}}const mc={get k(){return shadow(this,"k",[new Word64(1116352408,3609767458),new Word64(1899447441,602891725),new Word64(3049323471,3964484399),new Word64(3921009573,2173295548),new Word64(961987163,4081628472),new Word64(1508970993,305\ +3834265),new Word64(2453635748,2937671579),new Word64(2870763221,3664609560),new Word64(3624381080,2734883394),new Word64(310598401,1164996542),new Word64(607225278,1323610764),new Word64(1426881987,3590304994),new Word64(1925078388,4068182383),new Word64(2162078206,991336113),new Word64(2614888103,633803317),new Word64(3248222580,3479774868),new Word64(3835390401,2666613458),new Word64(4022224774,944711139),new Word64(264347078,2341262773),new Word64(604807628,2007800933),new Word64(770255983,1\ +495990901),new Word64(1249150122,1856431235),new Word64(1555081692,3175218132),new Word64(1996064986,2198950837),new Word64(2554220882,3999719339),new Word64(2821834349,766784016),new Word64(2952996808,2566594879),new Word64(3210313671,3203337956),new Word64(3336571891,1034457026),new Word64(3584528711,2466948901),new Word64(113926993,3758326383),new Word64(338241895,168717936),new Word64(666307205,1188179964),new Word64(773529912,1546045734),new Word64(1294757372,1522805485),new Word64(13961822\ +91,2643833823),new Word64(1695183700,2343527390),new Word64(1986661051,1014477480),new Word64(2177026350,1206759142),new Word64(2456956037,344077627),new Word64(2730485921,1290863460),new Word64(2820302411,3158454273),new Word64(3259730800,3505952657),new Word64(3345764771,106217008),new Word64(3516065817,3606008344),new Word64(3600352804,1432725776),new Word64(4094571909,1467031594),new Word64(275423344,851169720),new Word64(430227734,3100823752),new Word64(506948616,1363258195),new Word64(6590\ +60556,3750685593),new Word64(883997877,3785050280),new Word64(958139571,3318307427),new Word64(1322822218,3812723403),new Word64(1537002063,2003034995),new Word64(1747873779,3602036899),new Word64(1955562222,1575990012),new Word64(2024104815,1125592928),new Word64(2227730452,2716904306),new Word64(2361852424,442776044),new Word64(2428436474,593698344),new Word64(2756734187,3733110249),new Word64(3204031479,2999351573),new Word64(3329325298,3815920427),new Word64(3391569614,3928383900),new Word64\ +(3515267271,566280711),new Word64(3940187606,3454069534),new Word64(4118630271,4000239992),new Word64(116418474,1914138554),new Word64(174292421,2731055270),new Word64(289380356,3203993006),new Word64(460393269,320620315),new Word64(685471733,587496836),new Word64(852142971,1086792851),new Word64(1017036298,365543100),new Word64(1126000580,2618297676),new Word64(1288033470,3409855158),new Word64(1501505948,4234509866),new Word64(1607167915,987167468),new Word64(1816402316,1246189591)])}};functio\ +n ch(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.not();i.and(r);e.xor(i)}function maj(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.and(r);e.xor(i);i.assign(a);i.and(r);e.xor(i)}function sigma(e,t,a){e.assign(t);e.rotateRight(28);a.assign(t);a.rotateRight(34);e.xor(a);a.assign(t);a.rotateRight(39);e.xor(a)}function sigmaPrime(e,t,a){e.assign(t);e.rotateRight(14);a.assign(t);a.rotateRight(18);e.xor(a);a.assign(t);a.rotateRight(41);e.xor(a)}function littleSigma(e,t,a){e.assign(t);e.rotateRight(1\ +);a.assign(t);a.rotateRight(8);e.xor(a);a.assign(t);a.shiftRight(7);e.xor(a)}function littleSigmaPrime(e,t,a){e.assign(t);e.rotateRight(19);a.assign(t);a.rotateRight(61);e.xor(a);a.assign(t);a.shiftRight(6);e.xor(a)}function calculateSHA512(e,t,a,r=!1){let i,n,s,o,c,l,h,u;if(r){i=new Word64(3418070365,3238371032);n=new Word64(1654270250,914150663);s=new Word64(2438529370,812702999);o=new Word64(355462360,4144912697);c=new Word64(1731405415,4290775857);l=new Word64(2394180231,1750603025);h=new Wo\ +rd64(3675008525,1694076839);u=new Word64(1203062813,3204075428)}else{i=new Word64(1779033703,4089235720);n=new Word64(3144134277,2227873595);s=new Word64(1013904242,4271175723);o=new Word64(2773480762,1595750129);c=new Word64(1359893119,2917565137);l=new Word64(2600822924,725511199);h=new Word64(528734635,4215389547);u=new Word64(1541459225,327033209)}const d=128*Math.ceil((a+17)/128),f=new Uint8Array(d);let g,p;for(g=0;g<a;++g)f[g]=e[t++];f[g++]=128;const m=d-16;g<m&&(g=m);g+=11;f[g++]=a>>>29&2\ +55;f[g++]=a>>21&255;f[g++]=a>>13&255;f[g++]=a>>5&255;f[g++]=a<<3&255;const b=new Array(80);for(g=0;g<80;g++)b[g]=new Word64(0,0);const{k:y}=mc;let w=new Word64(0,0),x=new Word64(0,0),S=new Word64(0,0),k=new Word64(0,0),C=new Word64(0,0),v=new Word64(0,0),F=new Word64(0,0),T=new Word64(0,0);const O=new Word64(0,0),M=new Word64(0,0),D=new Word64(0,0),R=new Word64(0,0);let N,E;for(g=0;g<d;){for(p=0;p<16;++p){b[p].high=f[g]<<24|f[g+1]<<16|f[g+2]<<8|f[g+3];b[p].low=f[g+4]<<24|f[g+5]<<16|f[g+6]<<8|f[g\ ++7];g+=8}for(p=16;p<80;++p){N=b[p];littleSigmaPrime(N,b[p-2],R);N.add(b[p-7]);littleSigma(D,b[p-15],R);N.add(D);N.add(b[p-16])}w.assign(i);x.assign(n);S.assign(s);k.assign(o);C.assign(c);v.assign(l);F.assign(h);T.assign(u);for(p=0;p<80;++p){O.assign(T);sigmaPrime(D,C,R);O.add(D);ch(D,C,v,F,R);O.add(D);O.add(y[p]);O.add(b[p]);sigma(M,w,R);maj(D,w,x,S,R);M.add(D);N=T;T=F;F=v;v=C;k.add(O);C=k;k=S;S=x;x=w;N.assign(O);N.add(M);w=N}i.add(w);n.add(x);s.add(S);o.add(k);c.add(C);l.add(v);h.add(F);u.add(T\ +)}if(r){E=new Uint8Array(48);i.copyTo(E,0);n.copyTo(E,8);s.copyTo(E,16);o.copyTo(E,24);c.copyTo(E,32);l.copyTo(E,40)}else{E=new Uint8Array(64);i.copyTo(E,0);n.copyTo(E,8);s.copyTo(E,16);o.copyTo(E,24);c.copyTo(E,32);l.copyTo(E,40);h.copyTo(E,48);u.copyTo(E,56)}return E}const bc={get k(){return shadow(this,"k",[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022\ +224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]\ +)}};function rotr(e,t){return e>>>t|e<<32-t}function calculate_sha256_ch(e,t,a){return e&t^~e&a}function calculate_sha256_maj(e,t,a){return e&t^e&a^t&a}function calculate_sha256_sigma(e){return rotr(e,2)^rotr(e,13)^rotr(e,22)}function calculate_sha256_sigmaPrime(e){return rotr(e,6)^rotr(e,11)^rotr(e,25)}function calculate_sha256_littleSigma(e){return rotr(e,7)^rotr(e,18)^e>>>3}function calculateSHA256(e,t,a){let r=1779033703,i=3144134277,n=1013904242,s=2773480762,o=1359893119,c=2600822924,l=5287\ +34635,h=1541459225;const u=64*Math.ceil((a+9)/64),d=new Uint8Array(u);let f,g;for(f=0;f<a;++f)d[f]=e[t++];d[f++]=128;const p=u-8;f<p&&(f=p);f+=3;d[f++]=a>>>29&255;d[f++]=a>>21&255;d[f++]=a>>13&255;d[f++]=a>>5&255;d[f++]=a<<3&255;const m=new Uint32Array(64),{k:b}=bc;for(f=0;f<u;){for(g=0;g<16;++g){m[g]=d[f]<<24|d[f+1]<<16|d[f+2]<<8|d[f+3];f+=4}for(g=16;g<64;++g)m[g]=(rotr(y=m[g-2],17)^rotr(y,19)^y>>>10)+m[g-7]+calculate_sha256_littleSigma(m[g-15])+m[g-16]|0;let e,t,a=r,u=i,p=n,w=s,x=o,S=c,k=l,C=h\ +;for(g=0;g<64;++g){e=C+calculate_sha256_sigmaPrime(x)+calculate_sha256_ch(x,S,k)+b[g]+m[g];t=calculate_sha256_sigma(a)+calculate_sha256_maj(a,u,p);C=k;k=S;S=x;x=w+e|0;w=p;p=u;u=a;a=e+t|0}r=r+a|0;i=i+u|0;n=n+p|0;s=s+w|0;o=o+x|0;c=c+S|0;l=l+k|0;h=h+C|0}var y;return new Uint8Array([r>>24&255,r>>16&255,r>>8&255,255&r,i>>24&255,i>>16&255,i>>8&255,255&i,n>>24&255,n>>16&255,n>>8&255,255&n,s>>24&255,s>>16&255,s>>8&255,255&s,o>>24&255,o>>16&255,o>>8&255,255&o,c>>24&255,c>>16&255,c>>8&255,255&c,l>>24&255,\ +l>>16&255,l>>8&255,255&l,h>>24&255,h>>16&255,h>>8&255,255&h])}class DecryptStream extends DecodeStream{constructor(e,t,a){super(t);this.str=e;this.dict=e.dict;this.decrypt=a;this.nextChunk=null;this.initialized=!1}readBlock(){let e;if(this.initialized)e=this.nextChunk;else{e=this.str.getBytes(512);this.initialized=!0}if(!e?.length){this.eof=!0;return}this.nextChunk=this.str.getBytes(512);const t=this.nextChunk?.length>0;e=(0,this.decrypt)(e,!t);const a=this.bufferLength,r=a+e.length;this.ensureB\ +uffer(r).set(e,a);this.bufferLength=r}}class ARCFourCipher{constructor(e){this.a=0;this.b=0;const t=new Uint8Array(256),a=e.length;for(let e=0;e<256;++e)t[e]=e;for(let r=0,i=0;r<256;++r){const n=t[r];i=i+n+e[r%a]&255;t[r]=t[i];t[i]=n}this.s=t}encryptBlock(e){let t=this.a,a=this.b;const r=this.s,i=e.length,n=new Uint8Array(i);for(let s=0;s<i;++s){t=t+1&255;const i=r[t];a=a+i&255;const o=r[a];r[t]=o;r[a]=i;n[s]=e[s]^r[i+o&255]}this.a=t;this.b=a;return n}decryptBlock(e){return this.encryptBlock(e)}\ +encrypt(e){return this.encryptBlock(e)}}class NullCipher{decryptBlock(e){return e}encrypt(e){return e}}class AESBaseCipher{_s=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,\ +67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,1\ +40,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]);_inv_s=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202\ +,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]);_mi\ +x=new Uint32Array([0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,26\ +40243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440\ +835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766\ +945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168\ +810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1\ +206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795]);_mixCol=new Uint8Array(256).map(((e,t)=>t<128?t<<1:t<<1^27));constructor(){this.buffer=new Uint8Array(16);this.bufferPosition=0}_expandKey(e){unreachable("Cannot call `_expandKey` on the base class")}_decrypt(e,t){let a,r,i;const n=new\ + Uint8Array(16);n.set(e);for(let e=0,a=this._keySize;e<16;++e,++a)n[e]^=t[a];for(let e=this._cyclesOfRepetition-1;e>=1;--e){a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e)n[e]=this._inv_s[n[e]];for(let a=0,r=16*e;a<16;++a,++r)n[a]^=t[r];for(let e=0;e<16;e+=4){const t=this._mix[n[e]],r=this._mix[n[e+1]],i=this._mix[n[e+2]],s=this._mix[n[e+3]];a=t^r>>>8^r<<24^i>>>16^i<<16\ +^s>>>24^s<<8;n[e]=a>>>24&255;n[e+1]=a>>16&255;n[e+2]=a>>8&255;n[e+3]=255&a}}a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e){n[e]=this._inv_s[n[e]];n[e]^=t[e]}return n}_encrypt(e,t){const a=this._s;let r,i,n;const s=new Uint8Array(16);s.set(e);for(let e=0;e<16;++e)s[e]^=t[e];for(let e=1;e<this._cyclesOfRepetition;e++){for(let e=0;e<16;++e)s[e]=a[s[e]];n=s[1];s[1]=s[5];s[\ +5]=s[9];s[9]=s[13];s[13]=n;n=s[2];i=s[6];s[2]=s[10];s[6]=s[14];s[10]=n;s[14]=i;n=s[3];i=s[7];r=s[11];s[3]=s[15];s[7]=n;s[11]=i;s[15]=r;for(let e=0;e<16;e+=4){const t=s[e],a=s[e+1],i=s[e+2],n=s[e+3];r=t^a^i^n;s[e]^=r^this._mixCol[t^a];s[e+1]^=r^this._mixCol[a^i];s[e+2]^=r^this._mixCol[i^n];s[e+3]^=r^this._mixCol[n^t]}for(let a=0,r=16*e;a<16;++a,++r)s[a]^=t[r]}for(let e=0;e<16;++e)s[e]=a[s[e]];n=s[1];s[1]=s[5];s[5]=s[9];s[9]=s[13];s[13]=n;n=s[2];i=s[6];s[2]=s[10];s[6]=s[14];s[10]=n;s[14]=i;n=s[3];\ +i=s[7];r=s[11];s[3]=s[15];s[7]=n;s[11]=i;s[15]=r;for(let e=0,a=this._keySize;e<16;++e,++a)s[e]^=t[a];return s}_decryptBlock2(e,t){const a=e.length;let r=this.buffer,i=this.bufferPosition;const n=[];let s=this.iv;for(let t=0;t<a;++t){r[i]=e[t];++i;if(i<16)continue;const a=this._decrypt(r,this._key);for(let e=0;e<16;++e)a[e]^=s[e];s=r;n.push(a);r=new Uint8Array(16);i=0}this.buffer=r;this.bufferLength=i;this.iv=s;if(0===n.length)return new Uint8Array(0);let o=16*n.length;if(t){const e=n.at(-1);let \ +t=e[15];if(t<=16){for(let a=15,r=16-t;a>=r;--a)if(e[a]!==t){t=0;break}o-=t;n[n.length-1]=e.subarray(0,16-t)}}const c=new Uint8Array(o);for(let e=0,t=0,a=n.length;e<a;++e,t+=16)c.set(n[e],t);return c}decryptBlock(e,t,a=null){const r=e.length,i=this.buffer;let n=this.bufferPosition;if(a)this.iv=a;else{for(let t=0;n<16&&t<r;++t,++n)i[n]=e[t];if(n<16){this.bufferLength=n;return new Uint8Array(0)}this.iv=i;e=e.subarray(16)}this.buffer=new Uint8Array(16);this.bufferLength=0;this.decryptBlock=this._dec\ +ryptBlock2;return this.decryptBlock(e,t)}encrypt(e,t){const a=e.length;let r=this.buffer,i=this.bufferPosition;const n=[];t||=new Uint8Array(16);for(let s=0;s<a;++s){r[i]=e[s];++i;if(i<16)continue;for(let e=0;e<16;++e)r[e]^=t[e];const a=this._encrypt(r,this._key);t=a;n.push(a);r=new Uint8Array(16);i=0}this.buffer=r;this.bufferLength=i;this.iv=t;if(0===n.length)return new Uint8Array(0);const s=16*n.length,o=new Uint8Array(s);for(let e=0,t=0,a=n.length;e<a;++e,t+=16)o.set(n[e],t);return o}}class A\ +ES128Cipher extends AESBaseCipher{_rcon=new Uint8Array([141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,\ +125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141]);constructor(e){super();this._cyclesOfRepeti\ +tion=10;this._keySize=160;this._key=this._expandKey(e)}_expandKey(e){const t=this._s,a=this._rcon,r=new Uint8Array(176);r.set(e);for(let e=16,i=1;e<176;++i){let n=r[e-3],s=r[e-2],o=r[e-1],c=r[e-4];n=t[n];s=t[s];o=t[o];c=t[c];n^=a[i];for(let t=0;t<4;++t){r[e]=n^=r[e-16];e++;r[e]=s^=r[e-16];e++;r[e]=o^=r[e-16];e++;r[e]=c^=r[e-16];e++}}return r}}class AES256Cipher extends AESBaseCipher{constructor(e){super();this._cyclesOfRepetition=14;this._keySize=224;this._key=this._expandKey(e)}_expandKey(e){co\ +nst t=this._s,a=new Uint8Array(240);a.set(e);let r,i,n,s,o=1;for(let e=32,c=1;e<240;++c){if(e%32==16){r=t[r];i=t[i];n=t[n];s=t[s]}else if(e%32==0){r=a[e-3];i=a[e-2];n=a[e-1];s=a[e-4];r=t[r];i=t[i];n=t[n];s=t[s];r^=o;(o<<=1)>=256&&(o=255&(27^o))}for(let t=0;t<4;++t){a[e]=r^=a[e-32];e++;a[e]=i^=a[e-32];e++;a[e]=n^=a[e-32];e++;a[e]=s^=a[e-32];e++}}return a}}class PDFBase{_hash(e,t,a){unreachable("Abstract method `_hash` called")}checkOwnerPassword(e,t,a,r){const i=new Uint8Array(e.length+56);i.set(\ +e,0);i.set(t,e.length);i.set(a,e.length+t.length);return isArrayEqual(this._hash(e,i,a),r)}checkUserPassword(e,t,a){const r=new Uint8Array(e.length+8);r.set(e,0);r.set(t,e.length);return isArrayEqual(this._hash(e,r,[]),a)}getOwnerKey(e,t,a,r){const i=new Uint8Array(e.length+56);i.set(e,0);i.set(t,e.length);i.set(a,e.length+t.length);const n=this._hash(e,i,a);return new AES256Cipher(n).decryptBlock(r,!1,new Uint8Array(16))}getUserKey(e,t,a){const r=new Uint8Array(e.length+8);r.set(e,0);r.set(t,e.\ +length);const i=this._hash(e,r,[]);return new AES256Cipher(i).decryptBlock(a,!1,new Uint8Array(16))}}class PDF17 extends PDFBase{_hash(e,t,a){return calculateSHA256(t,0,t.length)}}class PDF20 extends PDFBase{_hash(e,t,a){let r=calculateSHA256(t,0,t.length).subarray(0,32),i=[0],n=0;for(;n<64||i.at(-1)>n-32;){const t=e.length+r.length+a.length,l=new Uint8Array(t);let h=0;l.set(e,h);h+=e.length;l.set(r,h);h+=r.length;l.set(a,h);const u=new Uint8Array(64*t);for(let e=0,a=0;e<64;e++,a+=t)u.set(l,a);i\ +=new AES128Cipher(r.subarray(0,16)).encrypt(u,r.subarray(16,32));const d=Math.sumPrecise(i.slice(0,16))%3;0===d?r=calculateSHA256(i,0,i.length):1===d?r=(s=i,o=0,c=i.length,calculateSHA512(s,o,c,!0)):2===d&&(r=calculateSHA512(i,0,i.length));n++}var s,o,c;return r.subarray(0,32)}}class CipherTransform{constructor(e,t){this.StringCipherConstructor=e;this.StreamCipherConstructor=t}createStream(e,t){const a=new this.StreamCipherConstructor;return new DecryptStream(e,t,(function cipherTransformDecrypt\ +Stream(e,t){return a.decryptBlock(e,t)}))}decryptString(e){const t=new this.StringCipherConstructor;let a=stringToBytes(e);a=t.decryptBlock(a,!0);return bytesToString(a)}encryptString(e){const t=new this.StringCipherConstructor;if(t instanceof AESBaseCipher){const a=16-e.length%16;e+=String.fromCharCode(a).repeat(a);const r=new Uint8Array(16);crypto.getRandomValues(r);let i=stringToBytes(e);i=t.encrypt(i,r);const n=new Uint8Array(16+i.length);n.set(r);n.set(i,16);return bytesToString(n)}let a=st\ +ringToBytes(e);a=t.encrypt(a);return bytesToString(a)}}class CipherTransformFactory{static get _defaultPasswordBytes(){return shadow(this,"_defaultPasswordBytes",new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]))}#Oe(e,t,a,r,i,n,s,o,c,l,h,u){if(t){const e=Math.min(127,t.length);t=t.subarray(0,e)}else t=[];const d=6===e?new PDF20:new PDF17;return d.checkUserPassword(t,o,s)?d.getUserKey(t,c,h):t.length&&d.checkOwnerPassword\ +(t,r,n,a)?d.getOwnerKey(t,i,n,l):null}#Me(e,t,a,r,i,n,s,o){const c=40+a.length+e.length,l=new Uint8Array(c);let h,u,d=0;if(t){u=Math.min(32,t.length);for(;d<u;++d)l[d]=t[d]}h=0;for(;d<32;)l[d++]=CipherTransformFactory._defaultPasswordBytes[h++];l.set(a,d);d+=a.length;l[d++]=255&i;l[d++]=i>>8&255;l[d++]=i>>16&255;l[d++]=i>>>24&255;l.set(e,d);d+=e.length;if(n>=4&&!o){l.fill(255,d,d+4);d+=4}let f=calculateMD5(l,0,d);const g=s>>3;if(n>=3)for(h=0;h<50;++h)f=calculateMD5(f,0,g);const p=f.subarray(0,g)\ +;let m,b;if(n>=3){d=0;l.set(CipherTransformFactory._defaultPasswordBytes,d);d+=32;l.set(e,d);d+=e.length;m=new ARCFourCipher(p);b=m.encryptBlock(calculateMD5(l,0,d));u=p.length;const t=new Uint8Array(u);for(h=1;h<=19;++h){for(let e=0;e<u;++e)t[e]=p[e]^h;m=new ARCFourCipher(t);b=m.encryptBlock(b)}}else{m=new ARCFourCipher(p);b=m.encryptBlock(CipherTransformFactory._defaultPasswordBytes)}return b.every(((e,t)=>r[t]===e))?p:null}#De(e,t,a,r){const i=new Uint8Array(32);let n=0;const s=Math.min(32,e.\ +length);for(;n<s;++n)i[n]=e[n];let o=0;for(;n<32;)i[n++]=CipherTransformFactory._defaultPasswordBytes[o++];let c=calculateMD5(i,0,n);const l=r>>3;if(a>=3)for(o=0;o<50;++o)c=calculateMD5(c,0,c.length);let h,u;if(a>=3){u=t;const e=new Uint8Array(l);for(o=19;o>=0;o--){for(let t=0;t<l;++t)e[t]=c[t]^o;h=new ARCFourCipher(e);u=h.encryptBlock(u)}}else{h=new ARCFourCipher(c.subarray(0,l));u=h.encryptBlock(t)}return u}#Be(e,t,a,r=!1){const i=a.length,n=new Uint8Array(i+9);n.set(a);let s=i;n[s++]=255&e;n[\ +s++]=e>>8&255;n[s++]=e>>16&255;n[s++]=255&t;n[s++]=t>>8&255;if(r){n[s++]=115;n[s++]=65;n[s++]=108;n[s++]=84}return calculateMD5(n,0,s).subarray(0,Math.min(i+5,16))}#Re(e,t,a,r,i){if(!(t instanceof Name))throw new FormatError("Invalid crypt filter name.");const n=this,s=e.get(t.name),o=s?.get("CFM");if(!o||"None"===o.name)return function(){return new NullCipher};if("V2"===o.name)return function(){return new ARCFourCipher(n.#Be(a,r,i,!1))};if("AESV2"===o.name)return function(){return new AES128Cip\ +her(n.#Be(a,r,i,!0))};if("AESV3"===o.name)return function(){return new AES256Cipher(i)};throw new FormatError("Unknown crypto method")}constructor(e,t,a){const r=e.get("Filter");if(!isName(r,"Standard"))throw new FormatError("unknown encryption method");this.filterName=r.name;this.dict=e;const i=e.get("V");if(!Number.isInteger(i)||1!==i&&2!==i&&4!==i&&5!==i)throw new FormatError("unsupported encryption algorithm");this.algorithm=i;let n=e.get("Length");if(!n)if(i<=3)n=40;else{const t=e.get("CF")\ +,a=e.get("StmF");if(t instanceof Dict&&a instanceof Name){t.suppressEncryption=!0;const e=t.get(a.name);n=e?.get("Length")||128;n<40&&(n<<=3)}}if(!Number.isInteger(n)||n<40||n%8!=0)throw new FormatError("invalid key length");const s=stringToBytes(e.get("O")),o=stringToBytes(e.get("U")),c=s.subarray(0,32),l=o.subarray(0,32),h=e.get("P"),u=e.get("R"),d=(4===i||5===i)&&!1!==e.get("EncryptMetadata");this.encryptMetadata=d;const f=stringToBytes(t);let g,p;if(a){if(6===u)try{a=utf8StringToString(a)}ca\ +tch{warn("CipherTransformFactory: Unable to convert UTF8 encoded password.")}g=stringToBytes(a)}if(5!==i)p=this.#Me(f,g,c,l,h,u,n,d);else{const t=s.subarray(32,40),a=s.subarray(40,48),r=o.subarray(0,48),i=o.subarray(32,40),n=o.subarray(40,48),h=stringToBytes(e.get("OE")),d=stringToBytes(e.get("UE")),f=stringToBytes(e.get("Perms"));p=this.#Oe(u,g,c,t,a,r,l,i,n,h,d,f)}if(!p){if(!a)throw new PasswordException("No password given",ha);const e=this.#De(g,c,u,n);p=this.#Me(f,e,c,l,h,u,n,d)}if(!p)throw \ +new PasswordException("Incorrect Password",ua);if(4===i&&p.length<16){this.encryptionKey=new Uint8Array(16);this.encryptionKey.set(p)}else this.encryptionKey=p;if(i>=4){const t=e.get("CF");t instanceof Dict&&(t.suppressEncryption=!0);this.cf=t;this.stmf=e.get("StmF")||Name.get("Identity");this.strf=e.get("StrF")||Name.get("Identity");this.eff=e.get("EFF")||this.stmf}}createCipherTransform(e,t){if(4===this.algorithm||5===this.algorithm)return new CipherTransform(this.#Re(this.cf,this.strf,e,t,thi\ +s.encryptionKey),this.#Re(this.cf,this.stmf,e,t,this.encryptionKey));const a=this.#Be(e,t,this.encryptionKey,!1),cipherConstructor=function(){return new ARCFourCipher(a)};return new CipherTransform(cipherConstructor,cipherConstructor)}}class XRef{#Ne=null;constructor(e,t){this.stream=e;this.pdfManager=t;this.entries=[];this._xrefStms=new Set;this._cacheMap=new Map;this._pendingRefs=new RefSet;this._newPersistentRefNum=null;this._newTemporaryRefNum=null;this._persistentRefsCache=null}getNewPersis\ +tentRef(e){null===this._newPersistentRefNum&&(this._newPersistentRefNum=this.entries.length||1);const t=this._newPersistentRefNum++;this._cacheMap.set(t,e);return Ref.get(t,0)}getNewTemporaryRef(){if(null===this._newTemporaryRefNum){this._newTemporaryRefNum=this.entries.length||1;if(this._newPersistentRefNum){this._persistentRefsCache=new Map;for(let e=this._newTemporaryRefNum;e<this._newPersistentRefNum;e++){this._persistentRefsCache.set(e,this._cacheMap.get(e));this._cacheMap.delete(e)}}}retur\ +n Ref.get(this._newTemporaryRefNum++,0)}resetNewTemporaryRef(){this._newTemporaryRefNum=null;if(this._persistentRefsCache)for(const[e,t]of this._persistentRefsCache)this._cacheMap.set(e,t);this._persistentRefsCache=null}setStartXRef(e){this.startXRefQueue=[e]}parse(e=!1){let t,a,r;if(e){warn("Indexing all PDF objects");t=this.indexObjects()}else t=this.readXRef();t.assignXref(this);this.trailer=t;try{a=t.get("Encrypt")}catch(e){if(e instanceof MissingDataException)throw e;warn(`XRef.parse - Inva\ +lid "Encrypt" reference: "${e}".`)}if(a instanceof Dict){const e=t.get("ID"),r=e?.length?e[0]:"";a.suppressEncryption=!0;this.encrypt=new CipherTransformFactory(a,r,this.pdfManager.password)}try{r=t.get("Root")}catch(e){if(e instanceof MissingDataException)throw e;warn(`XRef.parse - Invalid "Root" reference: "${e}".`)}if(r instanceof Dict)try{if(r.get("Pages")instanceof Dict){this.root=r;return}}catch(e){if(e instanceof MissingDataException)throw e;warn(`XRef.parse - Invalid "Pages" reference: "\ +${e}".`)}if(!e)throw new XRefParseException;throw new InvalidPDFException("Invalid Root reference.")}processXRefTable(e){"tableState"in this||(this.tableState={entryNum:0,streamPos:e.lexer.stream.pos,parserBuf1:e.buf1,parserBuf2:e.buf2});if(!isCmd(this.readXRefTable(e),"trailer"))throw new FormatError("Invalid XRef table: could not find trailer dictionary");let t=e.getObj();t instanceof Dict||!t.dict||(t=t.dict);if(!(t instanceof Dict))throw new FormatError("Invalid XRef table: could not parse t\ +railer dictionary");delete this.tableState;return t}readXRefTable(e){const t=e.lexer.stream,a=this.tableState;t.pos=a.streamPos;e.buf1=a.parserBuf1;e.buf2=a.parserBuf2;let r;for(;;){if(!("firstEntryNum"in a)||!("entryCount"in a)){if(isCmd(r=e.getObj(),"trailer"))break;a.firstEntryNum=r;a.entryCount=e.getObj()}let i=a.firstEntryNum;const n=a.entryCount;if(!Number.isInteger(i)||!Number.isInteger(n))throw new FormatError("Invalid XRef table: wrong types in subsection header");for(let r=a.entryNum;r\ +<n;r++){a.streamPos=t.pos;a.entryNum=r;a.parserBuf1=e.buf1;a.parserBuf2=e.buf2;const s={};s.offset=e.getObj();s.gen=e.getObj();const o=e.getObj();if(o instanceof Cmd)switch(o.cmd){case"f":s.free=!0;break;case"n":s.uncompressed=!0}if(!Number.isInteger(s.offset)||!Number.isInteger(s.gen)||!s.free&&!s.uncompressed)throw new FormatError(`Invalid entry in XRef subsection: ${i}, ${n}`);0===r&&s.free&&1===i&&(i=0);this.entries[r+i]||(this.entries[r+i]=s)}a.entryNum=0;a.streamPos=t.pos;a.parserBuf1=e.bu\ +f1;a.parserBuf2=e.buf2;delete a.firstEntryNum;delete a.entryCount}if(this.entries[0]&&!this.entries[0].free)throw new FormatError("Invalid XRef table: unexpected first object");return r}processXRefStream(e){if(!("streamState"in this)){const{dict:t,pos:a}=e,r=t.get("W"),i=t.get("Index")||[0,t.get("Size")];this.streamState={entryRanges:i,byteWidths:r,entryNum:0,streamPos:a}}this.readXRefStream(e);delete this.streamState;return e.dict}readXRefStream(e){const t=this.streamState;e.pos=t.streamPos;con\ +st[a,r,i]=t.byteWidths,n=t.entryRanges;for(;n.length>0;){const[s,o]=n;if(!Number.isInteger(s)||!Number.isInteger(o))throw new FormatError(`Invalid XRef range fields: ${s}, ${o}`);if(!Number.isInteger(a)||!Number.isInteger(r)||!Number.isInteger(i))throw new FormatError(`Invalid XRef entry fields length: ${s}, ${o}`);for(let n=t.entryNum;n<o;++n){t.entryNum=n;t.streamPos=e.pos;let o=0,c=0,l=0;for(let t=0;t<a;++t){const t=e.getByte();if(-1===t)throw new FormatError("Invalid XRef byteWidths \'type\'."\ +);o=o<<8|t}0===a&&(o=1);for(let t=0;t<r;++t){const t=e.getByte();if(-1===t)throw new FormatError("Invalid XRef byteWidths \'offset\'.");c=c<<8|t}for(let t=0;t<i;++t){const t=e.getByte();if(-1===t)throw new FormatError("Invalid XRef byteWidths \'generation\'.");l=l<<8|t}const h={};h.offset=c;h.gen=l;switch(o){case 0:h.free=!0;break;case 1:h.uncompressed=!0;break;case 2:break;default:throw new FormatError(`Invalid XRef entry type: ${o}`)}this.entries[s+n]||(this.entries[s+n]=h)}t.entryNum=0;t.streamPo\ +s=e.pos;n.splice(0,2)}}indexObjects(){function readToken(e,t){let a="",r=e[t];for(;10!==r&&13!==r&&60!==r&&!(++t>=e.length);){a+=String.fromCharCode(r);r=e[t]}return a}function skipUntil(e,t,a){const r=a.length,i=e.length;let n=0;for(;t<i;){let i=0;for(;i<r&&e[t+i]===a[i];)++i;if(i>=r)break;t++;n++}return n}const e=/\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer\\s*<<)\\b/g,t=/\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g,a=/^(\\d+)\\s+(\\d+)\\s+obj\\b/,r=new Uint8Array([116,114,97,105,108,101,114]),i=new Uint8Array([115,\ +116,97,114,116,120,114,101,102]),n=new Uint8Array([47,88,82,101,102]);this.entries.length=0;this._cacheMap.clear();const s=this.stream;s.pos=0;const o=s.getBytes(),c=bytesToString(o),l=o.length;let h=s.start;const u=[],d=[];for(;h<l;){let f=o[h];if(9===f||10===f||13===f||32===f){++h;continue}if(37===f){do{++h;if(h>=l)break;f=o[h]}while(10!==f&&13!==f);continue}const g=readToken(o,h);let p;if(g.startsWith("xref")&&(4===g.length||/\\s/.test(g[4]))){h+=skipUntil(o,h,r);u.push(h);h+=skipUntil(o,h,i)}\ +else if(p=a.exec(g)){const t=0|p[1],a=0|p[2],r=h+g.length;let i,u=!1;if(this.entries[t]){if(this.entries[t].gen===a)try{new Parser({lexer:new Lexer(s.makeSubStream(r))}).getObj();u=!0}catch(e){e instanceof ParserEOFException?warn(`indexObjects -- checking object (${g}): "${e}".`):u=!0}}else u=!0;u&&(this.entries[t]={offset:h-s.start,gen:a,uncompressed:!0});e.lastIndex=r;const f=e.exec(c);if(f){i=e.lastIndex+1-h;if("endobj"!==f[1]){warn(`indexObjects: Found "${f[1]}" inside of another "obj", caus\ +ed by missing "endobj" -- trying to recover.`);i-=f[1].length+1}}else i=l-h;const m=o.subarray(h,h+i),b=skipUntil(m,0,n);if(b<i&&m[b+5]<64){d.push(h-s.start);this._xrefStms.add(h-s.start)}h+=i}else if(g.startsWith("trailer")&&(7===g.length||/\\s/.test(g[7]))){u.push(h);const e=h+g.length;let a;t.lastIndex=e;const r=t.exec(c);if(r){a=t.lastIndex+1-h;if("startxref"!==r[1]){warn(`indexObjects: Found "${r[1]}" after "trailer", caused by missing "startxref" -- trying to recover.`);a-=r[1].length+1}}el\ +se a=l-h;h+=a}else h+=g.length+1}for(const e of d){this.startXRefQueue.push(e);this.readXRef(!0)}const f=[];let g,p,m=!1;for(const e of u){s.pos=e;const t=new Parser({lexer:new Lexer(s),xref:this,allowStreams:!0,recoveryMode:!0});if(!isCmd(t.getObj(),"trailer"))continue;const a=t.getObj();if(a instanceof Dict){f.push(a);a.has("Encrypt")&&(m=!0)}}for(const e of[...f,"genFallback",...f]){if("genFallback"===e){if(!p)break;this._generationFallback=!0;continue}let t=!1;try{const a=e.get("Root");if(!(\ +a instanceof Dict))continue;const r=a.get("Pages");if(!(r instanceof Dict))continue;const i=r.get("Count");Number.isInteger(i)&&(t=!0)}catch(e){p=e;continue}if(t&&(!m||e.has("Encrypt"))&&e.has("ID"))return e;g=e}if(g)return g;if(this.topDict)return this.topDict;if(!f.length)for(const[e,t]of this.entries.entries()){if(!t)continue;const a=Ref.get(e,t.gen);let r;try{r=this.fetch(a)}catch{continue}r instanceof BaseStream&&(r=r.dict);if(r instanceof Dict&&r.has("Root"))return r}throw new InvalidPDFEx\ +ception("Invalid PDF structure.")}readXRef(e=!1){const t=this.stream,a=new Set;for(;this.startXRefQueue.length;){try{const e=this.startXRefQueue[0];if(a.has(e)){warn("readXRef - skipping XRef table since it was already parsed.");this.startXRefQueue.shift();continue}a.add(e);t.pos=e+t.start;const r=new Parser({lexer:new Lexer(t),xref:this,allowStreams:!0});let i,n=r.getObj();if(isCmd(n,"xref")){i=this.processXRefTable(r);this.topDict||(this.topDict=i);n=i.get("XRefStm");if(Number.isInteger(n)&&!t\ +his._xrefStms.has(n)){this._xrefStms.add(n);this.startXRefQueue.push(n);this.#Ne??=n}}else{if(!Number.isInteger(n))throw new FormatError("Invalid XRef stream header");if(!(Number.isInteger(r.getObj())&&isCmd(r.getObj(),"obj")&&(n=r.getObj())instanceof BaseStream))throw new FormatError("Invalid XRef stream");i=this.processXRefStream(n);this.topDict||(this.topDict=i);if(!i)throw new FormatError("Failed to read XRef stream")}n=i.get("Prev");Number.isInteger(n)?this.startXRefQueue.push(n):n instance\ +of Ref&&this.startXRefQueue.push(n.num)}catch(e){if(e instanceof MissingDataException)throw e;info("(while reading XRef): "+e)}this.startXRefQueue.shift()}if(this.topDict)return this.topDict;if(!e)throw new XRefParseException}get lastXRefStreamPos(){return this.#Ne??(this._xrefStms.size>0?Math.max(...this._xrefStms):null)}getEntry(e){const t=this.entries[e];return t&&!t.free&&t.offset?t:null}fetchIfRef(e,t=!1){return e instanceof Ref?this.fetch(e,t):e}fetch(e,t=!1){if(!(e instanceof Ref))throw n\ +ew Error("ref object is not a reference");const a=e.num,r=this._cacheMap.get(a);if(void 0!==r){r instanceof Dict&&!r.objId&&(r.objId=e.toString());return r}let i=this.getEntry(a);if(null===i)return i;if(this._pendingRefs.has(e)){this._pendingRefs.remove(e);warn(`Ignoring circular reference: ${e}.`);return ya}this._pendingRefs.put(e);try{i=i.uncompressed?this.fetchUncompressed(e,i,t):this.fetchCompressed(e,i,t);this._pendingRefs.remove(e)}catch(t){this._pendingRefs.remove(e);throw t}i instanceof \ +Dict?i.objId=e.toString():i instanceof BaseStream&&(i.dict.objId=e.toString());return i}fetchUncompressed(e,t,a=!1){const r=e.gen;let i=e.num;if(t.gen!==r){const n=`Inconsistent generation in XRef: ${e}`;if(this._generationFallback&&t.gen<r){warn(n);return this.fetchUncompressed(Ref.get(i,t.gen),t,a)}throw new XRefEntryException(n)}const n=this.stream.makeSubStream(t.offset+this.stream.start),s=new Parser({lexer:new Lexer(n),xref:this,allowStreams:!0}),o=s.getObj(),c=s.getObj(),l=s.getObj();if(o\ +!==i||c!==r||!(l instanceof Cmd))throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`);if("obj"!==l.cmd){if(l.cmd.startsWith("obj")){i=parseInt(l.cmd.substring(3),10);if(!Number.isNaN(i))return i}throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${e}`)}(t=this.encrypt&&!a?s.getObj(this.encrypt.createCipherTransform(i,r)):s.getObj())instanceof BaseStream||this._cacheMap.set(i,t);return t}fetchCompressed(e,t,a=!1){const r=t.offset,i=this.fetch(Ref.get(r,0));if(!(i instance\ +of BaseStream))throw new FormatError("bad ObjStm stream");const n=i.dict.get("First"),s=i.dict.get("N");if(!Number.isInteger(n)||!Number.isInteger(s))throw new FormatError("invalid first and n parameters for ObjStm stream");let o=new Parser({lexer:new Lexer(i),xref:this,allowStreams:!0});const c=new Array(s),l=new Array(s);for(let e=0;e<s;++e){const t=o.getObj();if(!Number.isInteger(t))throw new FormatError(`invalid object number in the ObjStm stream: ${t}`);const a=o.getObj();if(!Number.isInteg\ +er(a))throw new FormatError(`invalid object offset in the ObjStm stream: ${a}`);c[e]=t;const i=this.getEntry(t);i?.offset===r&&i.gen!==e&&(i.gen=e);l[e]=a}const h=(i.start||0)+n,u=new Array(s);for(let e=0;e<s;++e){const t=e<s-1?l[e+1]-l[e]:void 0;if(t<0)throw new FormatError("Invalid offset in the ObjStm stream.");o=new Parser({lexer:new Lexer(i.makeSubStream(h+l[e],t,i.dict)),xref:this,allowStreams:!0});const a=o.getObj();u[e]=a;if(a instanceof BaseStream)continue;const n=c[e],d=this.entries[n]\ +;d&&d.offset===r&&d.gen===e&&this._cacheMap.set(n,a)}if(void 0===(t=u[t.gen]))throw new XRefEntryException(`Bad (compressed) XRef entry: ${e}`);return t}async fetchIfRefAsync(e,t){return e instanceof Ref?this.fetchAsync(e,t):e}async fetchAsync(e,t){try{return this.fetch(e,t)}catch(a){if(!(a instanceof MissingDataException))throw a;await this.pdfManager.requestRange(a.begin,a.end);return this.fetchAsync(e,t)}}getCatalogObj(){return this.root}}const yc=[0,0,612,792];class Page{#Ee=null;constructor\ +({pdfManager:e,xref:t,pageIndex:a,pageDict:r,ref:i,globalIdFactory:n,fontCache:s,builtInCMapCache:o,standardFontDataCache:c,globalColorSpaceCache:l,globalImageCache:h,systemFontCache:u,nonBlendModesSet:d,xfaFactory:f}){this.pdfManager=e;this.pageIndex=a;this.pageDict=r;this.xref=t;this.ref=i;this.fontCache=s;this.builtInCMapCache=o;this.standardFontDataCache=c;this.globalColorSpaceCache=l;this.globalImageCache=h;this.systemFontCache=u;this.nonBlendModesSet=d;this.evaluatorOptions=e.evaluatorOpti\ +ons;this.xfaFactory=f;const g={obj:0};this._localIdFactory=class extends n{static createObjId(){return`p${a}_${++g.obj}`}static getPageObjId(){return`p${i.toString()}`}}}#Pe(e){return new PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalColorSpaceCache:this.globalColorSpaceCache,globalImageCache:this.globalImageCache,systemFontCa\ +che:this.systemFontCache,options:this.evaluatorOptions})}#Le(e,t=!1){const a=getInheritableProperty({dict:this.pageDict,key:e,getArray:t,stopWhenFound:!1});return Array.isArray(a)?1!==a.length&&a[0]instanceof Dict?Dict.merge({xref:this.xref,dictArray:a}):a[0]:a}get content(){return this.pageDict.getArray("Contents")}get resources(){const e=this.#Le("Resources");return shadow(this,"resources",e instanceof Dict?e:Dict.empty)}#je(e){if(this.xfaData)return this.xfaData.bbox;const t=lookupNormalRect(\ +this.#Le(e,!0),null);if(t){if(t[2]-t[0]>0&&t[3]-t[1]>0)return t;warn(`Empty, or invalid, /${e} entry.`)}return null}get mediaBox(){return shadow(this,"mediaBox",this.#je("MediaBox")||yc)}get cropBox(){return shadow(this,"cropBox",this.#je("CropBox")||this.mediaBox)}get userUnit(){const e=this.pageDict.get("UserUnit");return shadow(this,"userUnit","number"==typeof e&&e>0?e:1)}get view(){const{cropBox:e,mediaBox:t}=this;if(e!==t&&!isArrayEqual(e,t)){const a=Util.intersect(e,t);if(a&&a[2]-a[0]>0&&a\ +[3]-a[1]>0)return shadow(this,"view",a);warn("Empty /CropBox and /MediaBox intersection.")}return shadow(this,"view",t)}get rotate(){let e=this.#Le("Rotate")||0;e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360);return shadow(this,"rotate",e)}#_e(e,t){if(!this.evaluatorOptions.ignoreErrors)throw e;warn(`getContentStream - ignoring sub-stream (${t}): "${e}".`)}async getContentStream(){const e=await this.pdfManager.ensure(this,"content");return e instanceof BaseStream?e:Array.isArray(e)?new Stream\ +sSequenceStream(e,this.#_e.bind(this)):new NullStream}get xfaData(){return shadow(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async#Ue(e,t,a){const r=[];for(const i of e)if(i.id){const e=Ref.fromString(i.id);if(!e){warn(`A non-linked annotation cannot be modified: ${i.id}`);continue}if(i.deleted){t.put(e,e);if(i.popupRef){const e=Ref.fromString(i.popupRef);e&&t.put(e,e)}continue}if(i.popup?.deleted){const e=Ref.fromString(i.popupRef);e&&t.put(e,e)}a\ +?.put(e);i.ref=e;r.push(this.xref.fetchAsync(e).then((e=>{e instanceof Dict&&(i.oldAnnotation=e.clone())}),(()=>{warn(`Cannot fetch \\`oldAnnotation\\` for: ${e}.`)})));delete i.id}await Promise.all(r)}async saveNewAnnotations(e,t,a,r,i){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");const n=this.#Pe(e),s=new RefSetCache,o=new RefSet;await this.#Ue(a,s,o);const c=this.pageDict,l=this.annotations.filter((e=>!(e instanceof Ref&&s.has(e)))),h=await AnnotationFactory.saveNewAn\ +notations(n,t,a,r,i);for(const{ref:e}of h.annotations)e instanceof Ref&&!o.has(e)&&l.push(e);const u=c.clone();u.set("Annots",l);i.put(this.ref,{data:u});for(const e of s)i.put(e,{data:null})}async save(e,t,a,r){const i=this.#Pe(e),n=await this._parsedAnnotations,s=[];for(const e of n)s.push(e.save(i,t,a,r).catch((function(e){warn(`save - ignoring annotation data during "${t.name}" task: "${e}".`);return null})));return Promise.all(s)}async loadResources(e){await(this.#Ee??=this.pdfManager.ensur\ +e(this,"resources"));await ObjectLoader.load(this.resources,e,this.xref)}async#Xe(e,t){const a=e?.get("Resources");if(!(a instanceof Dict&&a.size))return this.resources;await ObjectLoader.load(a,t,this.xref);return Dict.merge({xref:this.xref,dictArray:[a,this.resources],mergeSubDicts:!0})}async getOperatorList({handler:e,sink:t,task:a,intent:r,cacheKey:i,annotationStorage:c=null,modifiedIds:d=null}){const g=this.getContentStream(),p=this.loadResources(Ia),m=this.#Pe(e),b=this.xfaFactory?null:get\ +NewAnnotationsMap(c),y=b?.get(this.pageIndex);let w=Promise.resolve(null),x=null;if(y){const e=this.pdfManager.ensureDoc("annotationGlobals");let t;const r=new Set;for(const{bitmapId:e,bitmap:t}of y)!e||t||r.has(e)||r.add(e);const{isOffscreenCanvasSupported:i}=this.evaluatorOptions;if(r.size>0){const e=y.slice();for(const[t,a]of c)t.startsWith(f)&&a.bitmap&&r.has(a.bitmapId)&&e.push(a);t=AnnotationFactory.generateImages(e,this.xref,i)}else t=AnnotationFactory.generateImages(y,this.xref,i);x=new \ +RefSet;w=Promise.all([e,this.#Ue(y,x,null)]).then((([e])=>e?AnnotationFactory.printNewAnnotations(e,m,a,y,t):null))}const S=Promise.all([g,p]).then((async([n])=>{const s=await this.#Xe(n.dict,Ia),o=new OperatorList(r,t);e.send("StartRenderPage",{transparency:m.hasBlendModes(s,this.nonBlendModesSet),pageIndex:this.pageIndex,cacheKey:i});await m.getOperatorList({stream:n,task:a,resources:s,operatorList:o});return o}));let[k,C,v]=await Promise.all([S,this._parsedAnnotations,w]);if(v){C=C.filter((e=\ +>!(e.ref&&x.has(e.ref))));for(let e=0,t=v.length;e<t;e++){const a=v[e];if(a.refToReplace){const r=C.findIndex((e=>e.ref&&isRefsEqual(e.ref,a.refToReplace)));if(r>=0){C.splice(r,1,a);v.splice(e--,1);t--}}}C=C.concat(v)}if(0===C.length||r&h){k.flush(!0);return{length:k.totalLength}}const F=!!(r&l),T=!!(r&u),O=!!(r&n),M=!!(r&s),D=!!(r&o),R=[];for(const e of C)(O||M&&e.mustBeViewed(c,F)&&e.mustBeViewedWhenEditing(T,d)||D&&e.mustBePrinted(c))&&R.push(e.getOperatorList(m,a,r,c).catch((function(e){warn\ +(`getOperatorList - ignoring annotation data during "${a.name}" task: "${e}".`);return{opList:null,separateForm:!1,separateCanvas:!1}})));const N=await Promise.all(R);let E=!1,L=!1;for(const{opList:e,separateForm:t,separateCanvas:a}of N){k.addOpList(e);E||=t;L||=a}k.flush(!0,{form:E,canvas:L});return{length:k.totalLength}}async extractTextContent({handler:e,task:t,includeMarkedContent:a,disableNormalization:r,sink:i,intersector:n=null}){const s=this.getContentStream(),o=this.loadResources(Ta),c=\ +this.pdfManager.ensureCatalog("lang"),[l,,h]=await Promise.all([s,o,c]),u=await this.#Xe(l.dict,Ta);return this.#Pe(e).getTextContent({stream:l,task:t,resources:u,includeMarkedContent:a,disableNormalization:r,sink:i,viewBox:this.view,lang:h,intersector:n})}async getStructTree(){const e=await this.pdfManager.ensureCatalog("structTreeRoot");if(!e)return null;await this._parsedAnnotations;try{const t=await this.pdfManager.ensure(this,"_parseStructTree",[e]);return await this.pdfManager.ensure(t,"se\ +rializable")}catch(e){warn(`getStructTree: "${e}".`);return null}}_parseStructTree(e){const t=new StructTreePage(e,this.pageDict);t.parse(this.ref);return t}async getAnnotationsData(e,t,a){const r=await this._parsedAnnotations;if(0===r.length)return r;const i=[],c=[];let l;const h=!!(a&n),u=!!(a&s),d=!!(a&o),f=[];for(const a of r){const r=h||u&&a.viewable;(r||d&&a.printable)&&i.push(a.data);if(a.hasTextContent&&r){l??=this.#Pe(e);c.push(a.extractTextContent(l,t,[-1/0,-1/0,1/0,1/0]).catch((functi\ +on(e){warn(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${e}".`)})))}else a.overlaysTextContent&&r&&f.push(a)}if(f.length>0){const a=new Intersector(f);c.push(this.extractTextContent({handler:e,task:t,includeMarkedContent:!1,disableNormalization:!1,sink:null,viewBox:this.view,lang:null,intersector:a}).then((()=>{a.setText()})))}await Promise.all(c);return i}get annotations(){const e=this.#Le("Annots");return shadow(this,"annotations",Array.isArray(e)?e:[])}get _parsedAnno\ +tations(){return shadow(this,"_parsedAnnotations",this.pdfManager.ensure(this,"annotations").then((async e=>{if(0===e.length)return e;const[t,a]=await Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureDoc("fieldObjects")]);if(!t)return[];const r=a?.orphanFields,i=[];for(const a of e)i.push(AnnotationFactory.create(this.xref,a,t,this._localIdFactory,!1,r,this.ref).catch((function(e){warn(`_parsedAnnotations: "${e}".`);return null})));const n=[];let s,o;for(const e \ +of await Promise.all(i))e&&(e instanceof WidgetAnnotation?(o||=[]).push(e):e instanceof PopupAnnotation?(s||=[]).push(e):n.push(e));o&&n.push(...o);s&&n.push(...s);return n})))}get jsActions(){return shadow(this,"jsActions",collectActions(this.xref,this.pageDict,xe))}}const wc=new Uint8Array([37,80,68,70,45]),xc=new Uint8Array([115,116,97,114,116,120,114,101,102]),Sc=new Uint8Array([101,110,100,111,98,106]);function find(e,t,a=1024,r=!1){const i=t.length,n=e.peekBytes(a),s=n.length-i;if(s<=0)ret\ +urn!1;if(r){const a=i-1;let r=n.length-1;for(;r>=a;){let s=0;for(;s<i&&n[r-s]===t[a-s];)s++;if(s>=i){e.pos+=r-a;return!0}r--}}else{let a=0;for(;a<=s;){let r=0;for(;r<i&&n[a+r]===t[r];)r++;if(r>=i){e.pos+=a;return!0}a++}}return!1}class PDFDocument{#qe=new Map;#He=null;constructor(e,t){if(t.length<=0)throw new InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=e;this.stream=t;this.xref=new XRef(t,e);const a={font:0};this._globalIdFactory=class{static getDocI\ +d(){return`g_${e.docId}`}static createFontId(){return"f"+ ++a.font}static createObjId(){unreachable("Abstract method `createObjId` called.")}static getPageObjId(){unreachable("Abstract method `getPageObjId` called.")}}}parse(e){this.xref.parse(e);this.catalog=new Catalog(this.pdfManager,this.xref)}get linearization(){let e=null;try{e=Linearization.create(this.stream)}catch(e){if(e instanceof MissingDataException)throw e;info(e)}return shadow(this,"linearization",e)}get startXRef(){const e=this.s\ +tream;let t=0;if(this.linearization){e.reset();if(find(e,Sc)){e.skip(6);let a=e.peekByte();for(;isWhiteSpace(a);){e.pos++;a=e.peekByte()}t=e.pos-e.start}}else{const a=1024,r=xc.length;let i=!1,n=e.end;for(;!i&&n>0;){n-=a-r;n<0&&(n=0);e.pos=n;i=find(e,xc,a,!0)}if(i){e.skip(9);let a;do{a=e.getByte()}while(isWhiteSpace(a));let r="";for(;a>=32&&a<=57;){r+=String.fromCharCode(a);a=e.getByte()}t=parseInt(r,10);isNaN(t)&&(t=0)}}return shadow(this,"startXRef",t)}checkHeader(){const e=this.stream;e.reset\ +();if(!find(e,wc))return;e.moveStart();e.skip(wc.length);let t,a="";for(;(t=e.getByte())>32&&a.length<7;)a+=String.fromCharCode(t);Ca.test(a)?this.#He=a:warn(`Invalid PDF header version: ${a}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let e=0;e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages;return shadow(this,"numPages",e)}#We(e,t=0){return!!Array\ +.isArray(e)&&e.every((e=>{if(!((e=this.xref.fetchIfRef(e))instanceof Dict))return!1;if(e.has("Kids")){if(++t>10){warn("#hasOnlyDocumentSignatures: maximum recursion depth reached");return!1}return this.#We(e.get("Kids"),t)}const a=isName(e.get("FT"),"Sig"),r=e.get("Rect"),i=Array.isArray(r)&&r.every((e=>0===e));return a&&i}))}#ze(e,t,a=new RefSet){if(Array.isArray(e))for(let r of e){if(r instanceof Ref){if(a.has(r))continue;a.put(r)}r=this.xref.fetchIfRef(r);if(!(r instanceof Dict))continue;if(r\ +.has("Kids")){this.#ze(r.get("Kids"),t,a);continue}if(!isName(r.get("FT"),"Sig"))continue;const e=r.get("V");if(!(e instanceof Dict))continue;const i=e.get("SubFilter");i instanceof Name&&t.add(i.name)}}get _xfaStreams(){const{acroForm:e}=this.catalog;if(!e)return null;const t=e.get("XFA"),a=new Map(["xdp:xdp","template","datasets","config","connectionSet","localeSet","stylesheet","/xdp:xdp"].map((e=>[e,null])));if(t instanceof BaseStream&&!t.isEmpty){a.set("xdp:xdp",t);return a}if(!Array.isArra\ +y(t)||0===t.length)return null;for(let e=0,r=t.length;e<r;e+=2){let i;i=0===e?"xdp:xdp":e===r-2?"/xdp:xdp":t[e];if(!a.has(i))continue;const n=this.xref.fetchIfRef(t[e+1]);n instanceof BaseStream&&!n.isEmpty&&a.set(i,n)}return a}get xfaDatasets(){const e=this._xfaStreams;if(!e)return shadow(this,"xfaDatasets",null);for(const t of["datasets","xdp:xdp"]){const a=e.get(t);if(a)try{const e=stringToUTF8String(a.getString());return shadow(this,"xfaDatasets",new DatasetReader({[t]:e}))}catch{warn("XFA -\ + Invalid utf-8 string.");break}}return shadow(this,"xfaDatasets",null)}get xfaData(){const e=this._xfaStreams;if(!e)return null;const t=Object.create(null);for(const[a,r]of e)if(r)try{t[a]=stringToUTF8String(r.getString())}catch{warn("XFA - Invalid utf-8 string.");return null}return t}get xfaFactory(){let e;this.pdfManager.enableXfa&&this.catalog.needsRendering&&this.formInfo.hasXfa&&!this.formInfo.hasAcroForm&&(e=this.xfaData);return shadow(this,"xfaFactory",e?new XFAFactory(e):null)}get isPure\ +Xfa(){return!!this.xfaFactory&&this.xfaFactory.isValid()}get htmlForXfa(){return this.xfaFactory?this.xfaFactory.getPages():null}async#$e(){const e=await this.pdfManager.ensureCatalog("xfaImages");e&&this.xfaFactory.setImages(e)}async#Ge(e,t){const a=await this.pdfManager.ensureCatalog("acroForm");if(!a)return;const r=await a.getAsync("DR");if(!(r instanceof Dict))return;await ObjectLoader.load(r,["Font"],this.xref);const i=r.get("Font");if(!(i instanceof Dict))return;const n=Object.assign(Objec\ +t.create(null),this.pdfManager.evaluatorOptions,{useSystemFonts:!1}),{builtInCMapCache:s,fontCache:o,standardFontDataCache:c}=this.catalog,l=new PartialEvaluator({xref:this.xref,handler:e,pageIndex:-1,idFactory:this._globalIdFactory,fontCache:o,builtInCMapCache:s,standardFontDataCache:c,options:n}),h=new OperatorList,u=[],d={get font(){return u.at(-1)},set font(e){u.push(e)},clone(){return this}},parseFont=(e,a,i)=>l.handleSetFont(r,[Name.get(e),1],null,h,t,d,a,i).catch((e=>{warn(`loadXfaFonts: \ +"${e}".`);return null})),f=[];for(const[e,t]of i){const a=t.get("FontDescriptor");if(!(a instanceof Dict))continue;let r=a.get("FontFamily");r=r.replaceAll(/[ ]+(\\d)/g,"$1");const i={fontFamily:r,fontWeight:a.get("FontWeight"),italicAngle:-a.get("ItalicAngle")};validateCSSFont(i)&&f.push(parseFont(e,null,i))}await Promise.all(f);const g=this.xfaFactory.setFonts(u);if(!g)return;n.ignoreErrors=!0;f.length=0;u.length=0;const p=new Set;for(const e of g)getXfaFontName(`${e}-Regular`)||p.add(e);p.size\ +&&g.push("PdfJS-Fallback");for(const e of g)if(!p.has(e))for(const t of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){const a=`${e}-${t.name}`;f.push(parseFont(a,getXfaFontDict(a),{fontFamily:e,fontWeight:t.fontWeight,italicAngle:t.italicAngle}))}await Promise.all(f);this.xfaFactory.appendFonts(u,p)}loadXfaResources(e,t){return Promise.all([this.#Ge(e,t).ca\ +tch((()=>{})),this.#$e()])}serializeXfaData(e){return this.xfaFactory?this.xfaFactory.serializeData(e):null}get version(){return this.catalog.version||this.#He}get formInfo(){const e={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},{acroForm:t}=this.catalog;if(!t)return shadow(this,"formInfo",e);try{const a=t.get("Fields"),r=Array.isArray(a)&&a.length>0;e.hasFields=r;const i=t.get("XFA");e.hasXfa=Array.isArray(i)&&i.length>0||i instanceof BaseStream&&!i.isEmpty;const n=!!(1&t.get("SigFla\ +gs")),s=n&&this.#We(a);e.hasAcroForm=r&&!s;e.hasSignatures=n}catch(e){if(e instanceof MissingDataException)throw e;warn(`Cannot fetch form information: "${e}".`)}return shadow(this,"formInfo",e)}get documentInfo(){const{catalog:e,formInfo:t,xref:a}=this,r={PDFFormatVersion:this.version,Language:e.lang,EncryptFilterName:a.encrypt?.filterName??null,IsLinearized:!!this.linearization,IsAcroFormPresent:t.hasAcroForm,IsXFAPresent:t.hasXfa,IsCollectionPresent:!!e.collection,IsSignaturesPresent:t.hasSig\ +natures};let i;try{i=a.trailer.get("Info")}catch(e){if(e instanceof MissingDataException)throw e;info("The document information dictionary is invalid.")}if(!(i instanceof Dict))return shadow(this,"documentInfo",r);for(const[e,t]of i){switch(e){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof t){r[e]=stringToPDFString(t);continue}break;case"Trapped":if(t instanceof Name){r[e]=t;continue}break;default:let a;swit\ +ch(typeof t){case"string":a=stringToPDFString(t);break;case"number":case"boolean":a=t;break;default:t instanceof Name&&(a=t)}if(void 0===a){warn(`Bad value, for custom key "${e}", in Info: ${t}.`);continue}r.Custom??=Object.create(null);r.Custom[e]=a;continue}warn(`Bad value, for key "${e}", in Info: ${t}.`)}return shadow(this,"documentInfo",r)}get fingerprints(){const e="\\0".repeat(16);function validate(t){return"string"==typeof t&&16===t.length&&t!==e}const t=this.xref.trailer.get("ID");let a,\ +r;if(Array.isArray(t)&&validate(t[0])){a=stringToBytes(t[0]);t[1]!==t[0]&&validate(t[1])&&(r=stringToBytes(t[1]))}else a=calculateMD5(this.stream.getByteRange(0,1024),0,1024);return shadow(this,"fingerprints",[toHexUtil(a),r?toHexUtil(r):null])}async#Ve(e){const{catalog:t,linearization:a,xref:r}=this,i=Ref.get(a.objectNumberFirst,0);try{const e=await r.fetchAsync(i);if(e instanceof Dict){let a=e.getRaw("Type");a instanceof Ref&&(a=await r.fetchAsync(a));if(isName(a,"Page")||!e.has("Type")&&!e.ha\ +s("Kids")&&e.has("Contents")){t.pageKidsCountCache.has(i)||t.pageKidsCountCache.put(i,1);t.pageIndexCache.has(i)||t.pageIndexCache.put(i,0);return[e,i]}}throw new FormatError("The Linearization dictionary doesn\'t point to a valid Page dictionary.")}catch(a){warn(`_getLinearizationPage: "${a.message}".`);return t.getPageDict(e)}}getPage(e){const t=this.#qe.get(e);if(t)return t;const{catalog:a,linearization:r,xfaFactory:i}=this;let n;n=i?Promise.resolve([Dict.empty,null]):r?.pageFirst===e?this.#Ve\ +(e):a.getPageDict(e);n=n.then((([t,r])=>new Page({pdfManager:this.pdfManager,xref:this.xref,pageIndex:e,pageDict:t,ref:r,globalIdFactory:this._globalIdFactory,fontCache:a.fontCache,builtInCMapCache:a.builtInCMapCache,standardFontDataCache:a.standardFontDataCache,globalColorSpaceCache:a.globalColorSpaceCache,globalImageCache:a.globalImageCache,systemFontCache:a.systemFontCache,nonBlendModesSet:a.nonBlendModesSet,xfaFactory:i})));this.#qe.set(e,n);return n}async checkFirstPage(e=!1){if(!e)try{awai\ +t this.getPage(0)}catch(e){if(e instanceof XRefEntryException){this.#qe.delete(0);await this.cleanup();throw new XRefParseException}}}async checkLastPage(e=!1){const{catalog:t,pdfManager:a}=this;t.setActualNumPages();let r;try{await Promise.all([a.ensureDoc("xfaFactory"),a.ensureDoc("linearization"),a.ensureCatalog("numPages")]);if(this.xfaFactory)return;r=this.linearization?this.linearization.numPages:t.numPages;if(!Number.isInteger(r))throw new FormatError("Page count is not an integer.");if(r\ +<=1)return;await this.getPage(r-1)}catch(i){this.#qe.delete(r-1);await this.cleanup();if(i instanceof XRefEntryException&&!e)throw new XRefParseException;warn(`checkLastPage - invalid /Pages tree /Count: ${r}.`);let n;try{n=await t.getAllPageDicts(e)}catch(a){if(a instanceof XRefEntryException&&!e)throw new XRefParseException;t.setActualNumPages(1);return}for(const[e,[r,i]]of n){let n;if(r instanceof Error){n=Promise.reject(r);n.catch((()=>{}))}else n=Promise.resolve(new Page({pdfManager:a,xref:\ +this.xref,pageIndex:e,pageDict:r,ref:i,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalColorSpaceCache:this.globalColorSpaceCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null}));this.#qe.set(e,n)}t.setActualNumPages(n.size)}}async fontFallback(e,t){const{catalog:a,pdfManager:r}=this;for(const i of await Promise.all(a.font\ +Cache))if(i.loadedName===e){i.fallback(t,r.evaluatorOptions);return}}async cleanup(e=!1){return this.catalog?this.catalog.cleanup(e):clearGlobalCaches()}async#Ke(e,t,a,r,i,n,s){const{xref:o}=this;if(!(a instanceof Ref)||n.has(a))return;n.put(a);const c=await o.fetchAsync(a);if(!(c instanceof Dict))return;let l=await c.getAsync("Subtype");l=l instanceof Name?l.name:null;if("Link"===l)return;if(c.has("T")){const t=stringToPDFString(await c.getAsync("T"));e=""===e?t:`${e}.${t}`}else{let a=c;for(;;)\ +{a=a.getRaw("Parent")||t;if(a instanceof Ref){if(n.has(a))break;a=await o.fetchAsync(a)}if(!(a instanceof Dict))break;if(a.has("T")){const t=stringToPDFString(await a.getAsync("T"));e=""===e?t:`${e}.${t}`;break}}}t&&!c.has("Parent")&&isName(c.get("Subtype"),"Widget")&&s.put(a,t);r.has(e)||r.set(e,[]);r.get(e).push(AnnotationFactory.create(o,a,i,null,!0,s,null).then((e=>e?.getFieldObject())).catch((function(e){warn(`#collectFieldObjects: "${e}".`);return null})));if(!c.has("Kids"))return;const h=\ +await c.getAsync("Kids");if(Array.isArray(h))for(const t of h)await this.#Ke(e,a,t,r,i,n,s)}get fieldObjects(){return shadow(this,"fieldObjects",this.pdfManager.ensureDoc("formInfo").then((async e=>{if(!e.hasFields)return null;const t=await this.annotationGlobals;if(!t)return null;const{acroForm:a}=t,r=new RefSet,i=Object.create(null),n=new Map,s=new RefSetCache;for(const e of a.get("Fields"))await this.#Ke("",null,e,n,t,r,s);const o=[];for(const[e,t]of n)o.push(Promise.all(t).then((t=>{(t=t.fil\ +ter((e=>!!e))).length>0&&(i[e]=t)})));await Promise.all(o);return{allFields:objectSize(i)>0?i:null,orphanFields:s}})))}get hasJSActions(){return shadow(this,"hasJSActions",this.pdfManager.ensureDoc("_parseHasJSActions"))}async _parseHasJSActions(){const[e,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);return!!e||!!t?.allFields&&Object.values(t.allFields).some((e=>e.some((e=>null!==e.actions))))}get calculationOrderIds(){const e=this.c\ +atalog.acroForm?.get("CO");if(!Array.isArray(e)||0===e.length)return shadow(this,"calculationOrderIds",null);const t=[];for(const a of e)a instanceof Ref&&t.push(a.toString());return shadow(this,"calculationOrderIds",t.length?t:null)}get annotationGlobals(){return shadow(this,"annotationGlobals",AnnotationFactory.createGlobals(this.pdfManager))}}class BasePdfManager{constructor({docBaseUrl:e,docId:t,enableXfa:a,evaluatorOptions:r,handler:i,password:n}){this._docBaseUrl=function parseDocBaseUrl(e\ +){if(e){const t=createValidAbsoluteUrl(e);if(t)return t.href;warn(`Invalid absolute docBaseUrl: "${e}".`)}return null}(e);this._docId=t;this._password=n;this.enableXfa=a;r.isOffscreenCanvasSupported&&=FeatureTest.isOffscreenCanvasSupported;r.isImageDecoderSupported&&=FeatureTest.isImageDecoderSupported;this.evaluatorOptions=Object.freeze(r);ImageResizer.setOptions(r);JpegStream.setOptions(r);OperatorList.setOptions(r);const s={...r,handler:i};JpxImage.setOptions(s);IccColorSpace.setOptions(s);Cm\ +ykICCBasedCS.setOptions(s)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)}ensureXRef(e,t){return this.ensure(this.pdfDocument.xref,e,t)}ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)}getPage(e){return this.pdfDocument.getPage(e)}fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)}cleanup(e=!1){return this.pdfDocument.cleanup(e)}async ensure(e,t,a){unr\ +eachable("Abstract method `ensure` called")}requestRange(e,t){unreachable("Abstract method `requestRange` called")}requestLoadedStream(e=!1){unreachable("Abstract method `requestLoadedStream` called")}sendProgressiveData(e){unreachable("Abstract method `sendProgressiveData` called")}updatePassword(e){this._password=e}terminate(e){unreachable("Abstract method `terminate` called")}}class LocalPdfManager extends BasePdfManager{constructor(e){super(e);const t=new Stream(e.source);this.pdfDocument=ne\ +w PDFDocument(this,t);this._loadedStreamPromise=Promise.resolve(t)}async ensure(e,t,a){const r=e[t];return"function"==typeof r?r.apply(e,a):r}requestRange(e,t){return Promise.resolve()}requestLoadedStream(e=!1){return this._loadedStreamPromise}terminate(e){}}class NetworkPdfManager extends BasePdfManager{constructor(e){super(e);this.streamManager=new ChunkedStreamManager(e.source,{msgHandler:e.handler,length:e.length,disableAutoFetch:e.disableAutoFetch,rangeChunkSize:e.rangeChunkSize});this.pdfD\ +ocument=new PDFDocument(this,this.streamManager.getStream())}async ensure(e,t,a){try{const r=e[t];return"function"==typeof r?r.apply(e,a):r}catch(r){if(!(r instanceof MissingDataException))throw r;await this.requestRange(r.begin,r.end);return this.ensure(e,t,a)}}requestRange(e,t){return this.streamManager.requestRange(e,t)}requestLoadedStream(e=!1){return this.streamManager.requestAllChunks(e)}sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})}terminate(e){this.streamManager.abor\ +t(e)}}const Ac=1,kc=2,Cc=1,vc=2,Fc=3,Ic=4,Tc=5,Oc=6,Mc=7,Dc=8;function onFn(){}function wrapReason(e){if(e instanceof AbortException||e instanceof InvalidPDFException||e instanceof PasswordException||e instanceof ResponseException||e instanceof UnknownErrorException)return e;e instanceof Error||"object"==typeof e&&null!==e||unreachable(\'wrapReason: Expected "reason" to be a (possibly cloned) Error.\');switch(e.name){case"AbortException":return new AbortException(e.message);case"InvalidPDFExceptio\ +n":return new InvalidPDFException(e.message);case"PasswordException":return new PasswordException(e.message,e.code);case"ResponseException":return new ResponseException(e.message,e.status,e.missing);case"UnknownErrorException":return new UnknownErrorException(e.message,e.details)}return new UnknownErrorException(e.message,e.toString())}class MessageHandler{#Je=new AbortController;constructor(e,t,a){this.sourceName=e;this.targetName=t;this.comObj=a;this.callbackId=1;this.streamId=1;this.streamSin\ +ks=Object.create(null);this.streamControllers=Object.create(null);this.callbackCapabilities=Object.create(null);this.actionHandler=Object.create(null);a.addEventListener("message",this.#Ye.bind(this),{signal:this.#Je.signal})}#Ye({data:e}){if(e.targetName!==this.sourceName)return;if(e.stream){this.#Ze(e);return}if(e.callback){const t=e.callbackId,a=this.callbackCapabilities[t];if(!a)throw new Error(`Cannot resolve callback ${t}`);delete this.callbackCapabilities[t];if(e.callback===Ac)a.resolve(e\ +.data);else{if(e.callback!==kc)throw new Error("Unexpected callback case");a.reject(wrapReason(e.reason))}return}const t=this.actionHandler[e.action];if(!t)throw new Error(`Unknown action from worker: ${e.action}`);if(e.callbackId){const a=this.sourceName,r=e.sourceName,i=this.comObj;Promise.try(t,e.data).then((function(t){i.postMessage({sourceName:a,targetName:r,callback:Ac,callbackId:e.callbackId,data:t})}),(function(t){i.postMessage({sourceName:a,targetName:r,callback:kc,callbackId:e.callback\ +Id,reason:wrapReason(t)})}))}else e.streamId?this.#Qe(e):t(e.data)}on(e,t){const a=this.actionHandler;if(a[e])throw new Error(`There is already an actionName called "${e}"`);a[e]=t}send(e,t,a){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},a)}sendWithPromise(e,t,a){const r=this.callbackId++,i=Promise.withResolvers();this.callbackCapabilities[r]=i;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId\ +:r,data:t},a)}catch(e){i.reject(e)}return i.promise}sendWithStream(e,t,a,r){const i=this.streamId++,n=this.sourceName,s=this.targetName,o=this.comObj;return new ReadableStream({start:a=>{const c=Promise.withResolvers();this.streamControllers[i]={controller:a,startCall:c,pullCall:null,cancelCall:null,isClosed:!1};o.postMessage({sourceName:n,targetName:s,action:e,streamId:i,data:t,desiredSize:a.desiredSize},r);return c.promise},pull:e=>{const t=Promise.withResolvers();this.streamControllers[i].pul\ +lCall=t;o.postMessage({sourceName:n,targetName:s,stream:Oc,streamId:i,desiredSize:e.desiredSize});return t.promise},cancel:e=>{assert(e instanceof Error,"cancel must have a valid reason");const t=Promise.withResolvers();this.streamControllers[i].cancelCall=t;this.streamControllers[i].isClosed=!0;o.postMessage({sourceName:n,targetName:s,stream:Cc,streamId:i,reason:wrapReason(e)});return t.promise}},a)}#Qe(e){const t=e.streamId,a=this.sourceName,r=e.sourceName,i=this.comObj,n=this,s=this.actionHan\ +dler[e.action],o={enqueue(e,n=1,s){if(this.isCancelled)return;const o=this.desiredSize;this.desiredSize-=n;if(o>0&&this.desiredSize<=0){this.sinkCapability=Promise.withResolvers();this.ready=this.sinkCapability.promise}i.postMessage({sourceName:a,targetName:r,stream:Ic,streamId:t,chunk:e},s)},close(){if(!this.isCancelled){this.isCancelled=!0;i.postMessage({sourceName:a,targetName:r,stream:Fc,streamId:t});delete n.streamSinks[t]}},error(e){assert(e instanceof Error,"error must have a valid reason\ +");if(!this.isCancelled){this.isCancelled=!0;i.postMessage({sourceName:a,targetName:r,stream:Tc,streamId:t,reason:wrapReason(e)})}},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};o.sinkCapability.resolve();o.ready=o.sinkCapability.promise;this.streamSinks[t]=o;Promise.try(s,e.data,o).then((function(){i.postMessage({sourceName:a,targetName:r,stream:Dc,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:a,targetNam\ +e:r,stream:Dc,streamId:t,reason:wrapReason(e)})}))}#Ze(e){const t=e.streamId,a=this.sourceName,r=e.sourceName,i=this.comObj,n=this.streamControllers[t],s=this.streamSinks[t];switch(e.stream){case Dc:e.success?n.startCall.resolve():n.startCall.reject(wrapReason(e.reason));break;case Mc:e.success?n.pullCall.resolve():n.pullCall.reject(wrapReason(e.reason));break;case Oc:if(!s){i.postMessage({sourceName:a,targetName:r,stream:Mc,streamId:t,success:!0});break}s.desiredSize<=0&&e.desiredSize>0&&s.sink\ +Capability.resolve();s.desiredSize=e.desiredSize;Promise.try(s.onPull||onFn).then((function(){i.postMessage({sourceName:a,targetName:r,stream:Mc,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:a,targetName:r,stream:Mc,streamId:t,reason:wrapReason(e)})}));break;case Ic:assert(n,"enqueue should have stream controller");if(n.isClosed)break;n.controller.enqueue(e.chunk);break;case Fc:assert(n,"close should have stream controller");if(n.isClosed)break;n.isClosed=!0;n.controller.close\ +();this.#et(n,t);break;case Tc:assert(n,"error should have stream controller");n.controller.error(wrapReason(e.reason));this.#et(n,t);break;case vc:e.success?n.cancelCall.resolve():n.cancelCall.reject(wrapReason(e.reason));this.#et(n,t);break;case Cc:if(!s)break;const o=wrapReason(e.reason);Promise.try(s.onCancel||onFn,o).then((function(){i.postMessage({sourceName:a,targetName:r,stream:vc,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:a,targetName:r,stream:vc,streamId:t,reason:\ +wrapReason(e)})}));s.sinkCapability.reject(o);s.isCancelled=!0;delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}async#et(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall?.promise,e.cancelCall?.promise]);delete this.streamControllers[t]}destroy(){this.#Je?.abort();this.#Je=null}}async function writeObject(e,t,a,{encrypt:r=null}){const i=r?.createCipherTransform(e.num,e.gen);a.push(`${e.num} ${e.gen} obj\\n`);t instanceof Dict?await writeDict(t,a,i):\ +t instanceof BaseStream?await writeStream(t,a,i):(Array.isArray(t)||ArrayBuffer.isView(t))&&await writeArray(t,a,i);a.push("\\nendobj\\n")}async function writeDict(e,t,a){t.push("<<");for(const r of e.getKeys()){t.push(` /${escapePDFName(r)} `);await writeValue(e.getRaw(r),t,a)}t.push(">>")}async function writeStream(e,t,a){let r=e.getBytes();const{dict:i}=e,[n,s]=await Promise.all([i.getAsync("Filter"),i.getAsync("DecodeParms")]),o=isName(Array.isArray(n)?await i.xref.fetchIfRefAsync(n[0]):n,"Fla\ +teDecode");if(r.length>=256||o)try{const e=new CompressionStream("deflate"),t=e.writable.getWriter();await t.ready;t.write(r).then((async()=>{await t.ready;await t.close()})).catch((()=>{}));const a=await new Response(e.readable).arrayBuffer();r=new Uint8Array(a);let c,l;if(n){if(!o){c=Array.isArray(n)?[Name.get("FlateDecode"),...n]:[Name.get("FlateDecode"),n];s&&(l=Array.isArray(s)?[null,...s]:[null,s])}}else c=Name.get("FlateDecode");c&&i.set("Filter",c);l&&i.set("DecodeParms",l)}catch(e){info\ +(`writeStream - cannot compress data: "${e}".`)}let c=bytesToString(r);a&&(c=a.encryptString(c));i.set("Length",c.length);await writeDict(i,t,a);t.push(" stream\\n",c,"\\nendstream")}async function writeArray(e,t,a){t.push("[");let r=!0;for(const i of e){r?r=!1:t.push(" ");await writeValue(i,t,a)}t.push("]")}async function writeValue(e,t,a){if(e instanceof Name)t.push(`/${escapePDFName(e.name)}`);else if(e instanceof Ref)t.push(`${e.num} ${e.gen} R`);else if(Array.isArray(e)||ArrayBuffer.isView(e)\ +)await writeArray(e,t,a);else if("string"==typeof e){a&&(e=a.encryptString(e));t.push(`(${escapeString(e)})`)}else"number"==typeof e?t.push(numberToString(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof Dict?await writeDict(e,t,a):e instanceof BaseStream?await writeStream(e,t,a):null===e?t.push("null"):warn(`Unhandled value in writer: ${typeof e}, please file a bug.`)}function writeInt(e,t,a,r){for(let i=t+a-1;i>a-1;i--){r[i]=255&e;e>>=8}return a+t}function writeString(e,t,a){const r=e\ +.length;for(let i=0;i<r;i++)a[t+i]=255&e.charCodeAt(i);return t+r}function updateXFA({xfaData:e,xfaDatasetsRef:t,changes:a,xref:r}){if(null===e){e=function writeXFADataForAcroform(e,t){const a=new SimpleXMLParser({hasAttributes:!0}).parseFromString(e);for(const{xfa:e}of t){if(!e)continue;const{path:t,value:r}=e;if(!t)continue;const i=parseXFAPath(t);let n=a.documentElement.searchNode(i,0);!n&&i.length>1&&(n=a.documentElement.searchNode([i.at(-1)],0));n?n.childNodes=Array.isArray(r)?r.map((e=>new\ + SimpleDOMNode("value",e))):[new SimpleDOMNode("#text",r)]:warn(`Node not found for path: ${t}`)}const r=[];a.documentElement.dump(r);return r.join("")}(r.fetchIfRef(t).getString(),a)}const i=new StringStream(e);i.dict=new Dict(r);i.dict.setIfName("Type","EmbeddedFile");a.put(t,{data:i})}function getIndexes(e){const t=[];for(const{ref:a}of e)a.num===t.at(-2)+t.at(-1)?t[t.length-1]+=1:t.push(a.num,1);return t}function computeIDs(e,t,a){if(Array.isArray(t.fileIds)&&t.fileIds.length>0){const r=func\ +tion computeMD5(e,t){const a=Math.floor(Date.now()/1e3),r=t.filename||"",i=[a.toString(),r,e.toString(),...t.infoMap.values()],n=Math.sumPrecise(i.map((e=>e.length))),s=new Uint8Array(n);let o=0;for(const e of i)o=writeString(e,o,s);return bytesToString(calculateMD5(s,0,s.length))}(e,t);a.set("ID",[t.fileIds[0],r])}}async function incrementalUpdate({originalData:e,xrefInfo:t,changes:a,xref:r=null,hasXfa:i=!1,xfaDatasetsRef:n=null,hasXfaDatasetsEntry:s=!1,needAppearances:o,acroFormRef:c=null,acro\ +Form:l=null,xfaData:h=null,useXrefStream:u=!1}){await async function updateAcroform({xref:e,acroForm:t,acroFormRef:a,hasXfa:r,hasXfaDatasetsEntry:i,xfaDatasetsRef:n,needAppearances:s,changes:o}){!r||i||n||warn("XFA - Cannot save it");if(!s&&(!r||!n||i))return;const c=t.clone();if(r&&!i){const e=t.get("XFA").slice();e.splice(2,0,"datasets");e.splice(3,0,n);c.set("XFA",e)}s&&c.set("NeedAppearances",!0);o.put(a,{data:c})}({xref:r,acroForm:l,acroFormRef:c,hasXfa:i,hasXfaDatasetsEntry:s,xfaDatasetsRe\ +f:n,needAppearances:o,changes:a});i&&updateXFA({xfaData:h,xfaDatasetsRef:n,changes:a,xref:r});const d=function getTrailerDict(e,t,a){const r=new Dict(null);r.set("Prev",e.startXRef);const i=e.newRef;if(a){t.put(i,{data:""});r.set("Size",i.num+1);r.setIfName("Type","XRef")}else r.set("Size",i.num);null!==e.rootRef&&r.set("Root",e.rootRef);null!==e.infoRef&&r.set("Info",e.infoRef);null!==e.encryptRef&&r.set("Encrypt",e.encryptRef);return r}(t,a,u),f=[],g=await async function writeChanges(e,t,a=[])\ +{const r=[];for(const[i,{data:n}]of e.items())if(null!==n&&"string"!=typeof n){await writeObject(i,n,a,t);r.push({ref:i,data:a.join("")});a.length=0}else r.push({ref:i,data:n});return r.sort(((e,t)=>e.ref.num-t.ref.num))}(a,r,f);let p=e.length;const m=e.at(-1);if(10!==m&&13!==m){f.push("\\n");p+=1}for(const{data:e}of g)null!==e&&f.push(e);await(u?async function getXRefStreamTable(e,t,a,r,i){const n=[];let s=0,o=0;for(const{ref:e,data:r}of a){let a;s=Math.max(s,t);if(null!==r){a=Math.min(e.gen,655\ +35);n.push([1,t,a]);t+=r.length}else{a=Math.min(e.gen+1,65535);n.push([0,0,a])}o=Math.max(o,a)}r.set("Index",getIndexes(a));const c=[1,getSizeInBytes(s),getSizeInBytes(o)];r.set("W",c);computeIDs(t,e,r);const l=Math.sumPrecise(c),h=new Uint8Array(l*n.length),u=new Stream(h);u.dict=r;let d=0;for(const[e,t,a]of n){d=writeInt(e,c[0],d,h);d=writeInt(t,c[1],d,h);d=writeInt(a,c[2],d,h)}await writeObject(e.newRef,u,i,{});i.push("startxref\\n",t.toString(),"\\n%%EOF\\n")}(t,p,g,d,f):async function getXRefT\ +able(e,t,a,r,i){i.push("xref\\n");const n=getIndexes(a);let s=0;for(const{ref:e,data:r}of a){if(e.num===n[s]){i.push(`${n[s]} ${n[s+1]}\\n`);s+=2}if(null!==r){i.push(`${t.toString().padStart(10,"0")} ${Math.min(e.gen,65535).toString().padStart(5,"0")} n\\r\\n`);t+=r.length}else i.push(`0000000000 ${Math.min(e.gen+1,65535).toString().padStart(5,"0")} f\\r\\n`)}computeIDs(t,e,r);i.push("trailer\\n");await writeDict(r,i);i.push("\\nstartxref\\n",t.toString(),"\\n%%EOF\\n")}(t,p,g,d,f));const b=e.length+Math.s\ +umPrecise(f.map((e=>e.length))),y=new Uint8Array(b);y.set(e);let w=e.length;for(const e of f)w=writeString(e,w,y);return y}class PDFWorkerStream{constructor(e){this._msgHandler=e;this._contentLength=null;this._fullRequestReader=null;this._rangeRequestReaders=[]}getFullReader(){assert(!this._fullRequestReader,"PDFWorkerStream.getFullReader can only be called once.");this._fullRequestReader=new PDFWorkerStreamReader(this._msgHandler);return this._fullRequestReader}getRangeReader(e,t){const a=new P\ +DFWorkerStreamRangeReader(e,t,this._msgHandler);this._rangeRequestReaders.push(a);return a}cancelAllRequests(e){this._fullRequestReader?.cancel(e);for(const t of this._rangeRequestReaders.slice(0))t.cancel(e)}}class PDFWorkerStreamReader{constructor(e){this._msgHandler=e;this.onProgress=null;this._contentLength=null;this._isRangeSupported=!1;this._isStreamingSupported=!1;const t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader();this._headersReady=this._msgHandler.sendWithPr\ +omise("ReaderHeadersReady").then((e=>{this._isStreamingSupported=e.isStreamingSupported;this._isRangeSupported=e.isRangeSupported;this._contentLength=e.contentLength}))}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this._isRangeSupported}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(\ +e){this._reader.cancel(e)}}class PDFWorkerStreamRangeReader{constructor(e,t,a){this._msgHandler=a;this.onProgress=null;const r=this._msgHandler.sendWithStream("GetRangeReader",{begin:e,end:t});this._reader=r.getReader()}get isStreamingSupported(){return!1}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class WorkerTask{constructor(e){this.name=e;this.terminated=!1;this._capability=Promise.with\ +Resolvers()}get finished(){return this._capability.promise}finish(){this._capability.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}}class WorkerMessageHandler{static{"undefined"==typeof window&&!e&&"undefined"!=typeof self&&"function"==typeof self.postMessage&&"onmessage"in self&&this.initializeFromPort(self)}static setup(e,t){let a=!1;e.on("test",(t=>{if(!a){a=!0;e.send("test",t instanceof Uint8Array)}}));e.on("co\ +nfigure",(e=>{!function setVerbosityLevel(e){Number.isInteger(e)&&(da=e)}(e.verbosity)}));e.on("GetDocRequest",(e=>this.createDocumentHandler(e,t)))}static createDocumentHandler(e,t){let a,r=!1,i=null;const n=new Set,s=getVerbosityLevel(),{docId:o,apiVersion:c}=e,l="5.4.54";if(c!==l)throw new Error(`The API version "${c}" does not match the Worker version "${l}".`);const buildMsg=(e,t)=>`The \\`${e}.prototype\\` contains unexpected enumerable property "${t}", thus breaking e.g. \\`for...in\\` iterat\ +ion of ${e}s.`;for(const e in{})throw new Error(buildMsg("Object",e));for(const e in[])throw new Error(buildMsg("Array",e));const h=o+"_worker";let u=new MessageHandler(h,o,t);function ensureNotTerminated(){if(r)throw new Error("Worker was terminated")}function startWorkerTask(e){n.add(e)}function finishWorkerTask(e){e.finish();n.delete(e)}async function loadDocument(e){await a.ensureDoc("checkHeader");await a.ensureDoc("parseStartXRef");await a.ensureDoc("parse",[e]);await a.ensureDoc("checkFir\ +stPage",[e]);await a.ensureDoc("checkLastPage",[e]);const t=await a.ensureDoc("isPureXfa");if(t){const e=new WorkerTask("loadXfaResources");startWorkerTask(e);await a.ensureDoc("loadXfaResources",[u,e]);finishWorkerTask(e)}const[r,i]=await Promise.all([a.ensureDoc("numPages"),a.ensureDoc("fingerprints")]);return{numPages:r,fingerprints:i,htmlForXfa:t?await a.ensureDoc("htmlForXfa"):null}}function setupDoc(e){function onSuccess(e){ensureNotTerminated();u.send("GetDoc",{pdfInfo:e})}function onFail\ +ure(e){ensureNotTerminated();if(e instanceof PasswordException){const t=new WorkerTask(`PasswordException: response ${e.code}`);startWorkerTask(t);u.sendWithPromise("PasswordRequest",e).then((function({password:e}){finishWorkerTask(t);a.updatePassword(e);pdfManagerReady()})).catch((function(){finishWorkerTask(t);u.send("DocException",e)}))}else u.send("DocException",wrapReason(e))}function pdfManagerReady(){ensureNotTerminated();loadDocument(!1).then(onSuccess,(function(e){ensureNotTerminated();\ +e instanceof XRefParseException?a.requestLoadedStream().then((function(){ensureNotTerminated();loadDocument(!0).then(onSuccess,onFailure)})):onFailure(e)}))}ensureNotTerminated();(async function getPdfManager({data:e,password:t,disableAutoFetch:a,rangeChunkSize:r,length:n,docBaseUrl:s,enableXfa:c,evaluatorOptions:l}){const h={source:null,disableAutoFetch:a,docBaseUrl:s,docId:o,enableXfa:c,evaluatorOptions:l,handler:u,length:n,password:t,rangeChunkSize:r};if(e){h.source=e;return new LocalPdfManag\ +er(h)}const d=new PDFWorkerStream(u),f=d.getFullReader(),g=Promise.withResolvers();let p,m=[],b=0;f.headersReady.then((function(){if(f.isRangeSupported){h.source=d;h.length=f.contentLength;h.disableAutoFetch||=f.isStreamingSupported;p=new NetworkPdfManager(h);for(const e of m)p.sendProgressiveData(e);m=[];g.resolve(p);i=null}})).catch((function(e){g.reject(e);i=null}));new Promise((function(e,t){const readChunk=function({value:e,done:a}){try{ensureNotTerminated();if(a){if(!p){const e=arrayBuffer\ +sToBytes(m);m=[];n&&e.length!==n&&warn("reported HTTP length is different from actual");h.source=e;p=new LocalPdfManager(h);g.resolve(p)}i=null;return}b+=e.byteLength;f.isStreamingSupported||u.send("DocProgress",{loaded:b,total:Math.max(b,f.contentLength||0)});p?p.sendProgressiveData(e):m.push(e);f.read().then(readChunk,t)}catch(e){t(e)}};f.read().then(readChunk,t)})).catch((function(e){g.reject(e);i=null}));i=e=>{d.cancelAllRequests(e)};return g.promise})(e).then((function(e){if(r){e.terminate(\ +new AbortException("Worker was terminated."));throw new Error("Worker was terminated")}a=e;a.requestLoadedStream(!0).then((e=>{u.send("DataLoaded",{length:e.bytes.byteLength})}))})).then(pdfManagerReady,onFailure)}u.on("GetPage",(function(e){return a.getPage(e.pageIndex).then((function(e){return Promise.all([a.ensure(e,"rotate"),a.ensure(e,"ref"),a.ensure(e,"userUnit"),a.ensure(e,"view")]).then((function([e,t,a,r]){return{rotate:e,ref:t,refStr:t?.toString()??null,userUnit:a,view:r}}))}))}));u.on\ +("GetPageIndex",(function(e){const t=Ref.get(e.num,e.gen);return a.ensureCatalog("getPageIndex",[t])}));u.on("GetDestinations",(function(e){return a.ensureCatalog("destinations")}));u.on("GetDestination",(function(e){return a.ensureCatalog("getDestination",[e.id])}));u.on("GetPageLabels",(function(e){return a.ensureCatalog("pageLabels")}));u.on("GetPageLayout",(function(e){return a.ensureCatalog("pageLayout")}));u.on("GetPageMode",(function(e){return a.ensureCatalog("pageMode")}));u.on("GetViewe\ +rPreferences",(function(e){return a.ensureCatalog("viewerPreferences")}));u.on("GetOpenAction",(function(e){return a.ensureCatalog("openAction")}));u.on("GetAttachments",(function(e){return a.ensureCatalog("attachments")}));u.on("GetDocJSActions",(function(e){return a.ensureCatalog("jsActions")}));u.on("GetPageJSActions",(function({pageIndex:e}){return a.getPage(e).then((e=>a.ensure(e,"jsActions")))}));u.on("GetOutline",(function(e){return a.ensureCatalog("documentOutline")}));u.on("GetOptionalC\ +ontentConfig",(function(e){return a.ensureCatalog("optionalContentConfig")}));u.on("GetPermissions",(function(e){return a.ensureCatalog("permissions")}));u.on("GetMetadata",(function(e){return Promise.all([a.ensureDoc("documentInfo"),a.ensureCatalog("metadata")])}));u.on("GetMarkInfo",(function(e){return a.ensureCatalog("markInfo")}));u.on("GetData",(function(e){return a.requestLoadedStream().then((e=>e.bytes))}));u.on("GetAnnotations",(function({pageIndex:e,intent:t}){return a.getPage(e).then((\ +function(a){const r=new WorkerTask(`GetAnnotations: page ${e}`);startWorkerTask(r);return a.getAnnotationsData(u,r,t).then((e=>{finishWorkerTask(r);return e}),(e=>{finishWorkerTask(r);throw e}))}))}));u.on("GetFieldObjects",(function(e){return a.ensureDoc("fieldObjects").then((e=>e?.allFields||null))}));u.on("HasJSActions",(function(e){return a.ensureDoc("hasJSActions")}));u.on("GetCalculationOrderIds",(function(e){return a.ensureDoc("calculationOrderIds")}));u.on("SaveDocument",(async function(\ +{isPureXfa:e,numPages:t,annotationStorage:r,filename:i}){const n=[a.requestLoadedStream(),a.ensureCatalog("acroForm"),a.ensureCatalog("acroFormRef"),a.ensureDoc("startXRef"),a.ensureDoc("xref"),a.ensureDoc("linearization"),a.ensureCatalog("structTreeRoot")],s=new RefSetCache,o=[],c=e?null:getNewAnnotationsMap(r),[l,h,d,f,g,p,m]=await Promise.all(n),b=g.trailer.getRaw("Root")||null;let y;if(c){m?await m.canUpdateStructTree({pdfManager:a,newAnnotationsByPage:c})&&(y=m):await StructTreeRoot.canCrea\ +teStructureTree({catalogRef:b,pdfManager:a,newAnnotationsByPage:c})&&(y=null);const e=AnnotationFactory.generateImages(r.values(),g,a.evaluatorOptions.isOffscreenCanvasSupported),t=void 0===y?o:[];for(const[r,i]of c)t.push(a.getPage(r).then((t=>{const a=new WorkerTask(`Save (editor): page ${r}`);startWorkerTask(a);return t.saveNewAnnotations(u,a,i,e,s).finally((function(){finishWorkerTask(a)}))})));null===y?o.push(Promise.all(t).then((async()=>{await StructTreeRoot.createStructureTree({newAnnota\ +tionsByPage:c,xref:g,catalogRef:b,pdfManager:a,changes:s})}))):y&&o.push(Promise.all(t).then((async()=>{await y.updateStructureTree({newAnnotationsByPage:c,pdfManager:a,changes:s})})))}if(e)o.push(a.ensureDoc("serializeXfaData",[r]));else for(let e=0;e<t;e++)o.push(a.getPage(e).then((function(t){const a=new WorkerTask(`Save: page ${e}`);startWorkerTask(a);return t.save(u,a,r,s).finally((function(){finishWorkerTask(a)}))})));const w=await Promise.all(o);let x=null;if(e){x=w[0];if(!x)return l.byte\ +s}else if(0===s.size)return l.bytes;const S=d&&h instanceof Dict&&s.values().some((e=>e.needAppearances)),k=h instanceof Dict&&h.get("XFA")||null;let C=null,v=!1;if(Array.isArray(k)){for(let e=0,t=k.length;e<t;e+=2)if("datasets"===k[e]){C=k[e+1];v=!0}null===C&&(C=g.getNewTemporaryRef())}else k&&warn("Unsupported XFA type.");let F=Object.create(null);if(g.trailer){const e=new Map,t=g.trailer.get("Info")||null;if(t instanceof Dict)for(const[a,r]of t)"string"==typeof r&&e.set(a,stringToPDFString(r)\ +);F={rootRef:b,encryptRef:g.trailer.getRaw("Encrypt")||null,newRef:g.getNewTemporaryRef(),infoRef:g.trailer.getRaw("Info")||null,infoMap:e,fileIds:g.trailer.get("ID")||null,startXRef:p?f:g.lastXRefStreamPos??f,filename:i}}return incrementalUpdate({originalData:l.bytes,xrefInfo:F,changes:s,xref:g,hasXfa:!!k,xfaDatasetsRef:C,hasXfaDatasetsEntry:v,needAppearances:S,acroFormRef:d,acroForm:h,xfaData:x,useXrefStream:isDict(g.topDict,"XRef")}).finally((()=>{g.resetNewTemporaryRef()}))}));u.on("GetOpera\ +torList",(function(e,t){const r=e.pageIndex;a.getPage(r).then((function(a){const i=new WorkerTask(`GetOperatorList: page ${r}`);startWorkerTask(i);const n=s>=Ae?Date.now():0;a.getOperatorList({handler:u,sink:t,task:i,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage,modifiedIds:e.modifiedIds}).then((function(e){finishWorkerTask(i);n&&info(`page=${r+1} - getOperatorList: time=${Date.now()-n}ms, len=${e.length}`);t.close()}),(function(e){finishWorkerTask(i);i.terminated||t.\ +error(e)}))}))}));u.on("GetTextContent",(function(e,t){const{pageIndex:r,includeMarkedContent:i,disableNormalization:n}=e;a.getPage(r).then((function(e){const a=new WorkerTask("GetTextContent: page "+r);startWorkerTask(a);const o=s>=Ae?Date.now():0;e.extractTextContent({handler:u,task:a,sink:t,includeMarkedContent:i,disableNormalization:n}).then((function(){finishWorkerTask(a);o&&info(`page=${r+1} - getTextContent: time=`+(Date.now()-o)+"ms");t.close()}),(function(e){finishWorkerTask(a);a.termin\ +ated||t.error(e)}))}))}));u.on("GetStructTree",(function(e){return a.getPage(e.pageIndex).then((e=>a.ensure(e,"getStructTree")))}));u.on("FontFallback",(function(e){return a.fontFallback(e.id,u)}));u.on("Cleanup",(function(e){return a.cleanup(!0)}));u.on("Terminate",(function(e){r=!0;const t=[];if(a){a.terminate(new AbortException("Worker was terminated."));const e=a.cleanup();t.push(e);a=null}else clearGlobalCaches();i?.(new AbortException("Worker was terminated."));for(const e of n){t.push(e.f\ +inished);e.terminate()}return Promise.all(t).then((function(){u.destroy();u=null}))}));u.on("Ready",(function(t){setupDoc(e);e=null}));return h}static initializeFromPort(e){const t=new MessageHandler("worker","main",e);this.setup(t,e);t.send("ready",null)}}globalThis.pdfjsWorker={WorkerMessageHandler};export{WorkerMessageHandler};',pdf_worker_min$1=Object.freeze(Object.defineProperty({__proto__:null,default:pdf_worker_min},Symbol.toStringTag,{value:"Module"}));export{app,start}; diff --git a/tools/server/public/index.html b/tools/server/public/index.html index cb697560c74..4c8c8d50b62 100644 --- a/tools/server/public/index.html +++ b/tools/server/public/index.html @@ -10,9 +10,9 @@ <meta charset="utf-8" /> <link rel="icon" href="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjU2IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjU2IiBpZD0ic2NyZWVuc2hvdC1lZjk0ZmJiMC1kYmFiLTgwZWQtODAwNi04OTQyOTkwMGVkYmYiIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZmlsbD0ibm9uZSIgdmVyc2lvbj0iMS4xIj48ZyBpZD0ic2hhcGUtZWY5NGZiYjAtZGJhYi04MGVkLTgwMDYtODk0Mjk5MDBlZGJmIiByeD0iMCIgcnk9IjAiPjxnIGlkPSJzaGFwZS1lZjk0ZmJiMC1kYmFiLTgwZWQtODAwNi04OTQyMTU3NTVjM2EiPjxnIGNsYXNzPSJmaWxscyIgaWQ9ImZpbGxzLWVmOTRmYmIwLWRiYWItODBlZC04MDA2LTg5NDIxNTc1NWMzYSI+PHJlY3Qgcng9IjAiIHJ5PSIwIiB4PSIwIiB5PSIwIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwLCAxLjAwMDAwMCwgMC4wMDAwMDAsIDAuMDAwMDAwKSIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIyNTYiIHN0eWxlPSJmaWxsOiByZ2IoMjcsIDMxLCAzMik7IGZpbGwtb3BhY2l0eTogMTsiLz48L2c+PC9nPjxnIGlkPSJzaGFwZS1lZjk0ZmJiMC1kYmFiLTgwZWQtODAwNi04OTQyMjM2M2VmM2YiIHJ4PSIwIiByeT0iMCI+PGcgaWQ9InNoYXBlLWVmOTRmYmIwLWRiYWItODBlZC04MDA2LTg5NDIyMzYzZWY0MCI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtZWY5NGZiYjAtZGJhYi04MGVkLTgwMDYtODk0MjIzNjNlZjQwIj48cGF0aCBkPSJNMTcxLjY2NTAwODU0NDkyMTg4LDk5LjUzMDI1MDU0OTMxNjRMMTU5Ljc5OTUzMDAyOTI5Njg4LDEyMC42MjQ2ODcxOTQ4MjQyMkMxNDQuMTU0NTEwNDk4MDQ2ODgsMTA4LjU4MzI5MDEwMDA5NzY2LDEyMC45NTA0MTY1NjQ5NDE0LDEwNi44MjU0MTY1NjQ5NDE0LDEwNS4zMDUzOTcwMzM2OTE0LDExOS43NDU3NTA0MjcyNDYxQzgwLjA3OTgxMTA5NjE5MTQsMTQwLjU3NjUyMjgyNzE0ODQ0LDgxLjgzNzYyMzU5NjE5MTQsMTg4Ljc0MjI2Mzc5Mzk0NTMsMTIxLjEyNjE5NzgxNDk0MTQsMTg5LjAwNTg3NDYzMzc4OTA2QzEzMi4xMTMwMDY1OTE3OTY4OCwxODkuMDA1ODc0NjMzNzg5MDYsMTQxLjQyOTY1Njk4MjQyMTg4LDE4My44MjAxMTQxMzU3NDIyLDE1MS40NDk2NzY1MTM2NzE4OCwxODAuMzkyMzQ5MjQzMTY0MDZMMTU2LjcyMzM1ODE1NDI5Njg4LDIwMS4zOTg4NDk0ODczMDQ3QzE0Ny44NDU5MTY3NDgwNDY4OCwyMDUuNTI5ODkxOTY3NzczNDQsMTM4Ljc5MjkzODIzMjQyMTg4LDIwOS43NDg3MzM1MjA1MDc4LDEyOS4wMzY4MzQ3MTY3OTY4OCwyMTEuMDY3MTIzNDEzMDg1OTRDNDAuMDg4MzUyMjAzMzY5MTQsMjIzLjE5NjQ1NjkwOTE3OTcsNDUuMTg2MDA4NDUzMzY5MTQsOTQuNzg0MDA0MjExNDI1NzgsMTI1LjYwODg2MzgzMDU2NjQsODguMTA0MDcyNTcwODAwNzhDMTQyLjQ4NDM0NDQ4MjQyMTg4LDg2LjY5NzgyMjU3MDgwMDc4LDE1Ny4zMzgzNDgzODg2NzE4OCw5MS4wOTI0NzU4OTExMTMyOCwxNzEuNzUzMTQzMzEwNTQ2ODgsOTkuNTMwMjUwNTQ5MzE2NFoiIGNsYXNzPSJzdDAiIHN0eWxlPSJmaWxsOiByZ2IoMjU1LCAxMzAsIDU0KTsgZmlsbC1vcGFjaXR5OiAxOyIvPjwvZz48L2c+PGcgaWQ9InNoYXBlLWVmOTRmYmIwLWRiYWItODBlZC04MDA2LTg5NDIyMzYzZWY0MSI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtZWY5NGZiYjAtZGJhYi04MGVkLTgwMDYtODk0MjIzNjNlZjQxIj48cGF0aCBkPSJNMTEwLjIyNzI3MjAzMzY5MTQsNzkuMzE0NzA0ODk1MDE5NTNDOTYuNjkxODcxNjQzMDY2NCw4My4zNTc4NTY3NTA0ODgyOCw4NC4xMjMyNjgxMjc0NDE0LDkwLjgyODgzNDUzMzY5MTQsNzQuNjMwNTkyMzQ2MTkxNCwxMDEuMjg4MTI0MDg0NDcyNjZDNzIuODcyNzc5ODQ2MTkxNCw4MC4wMTc4Mjk4OTUwMTk1Myw3Ny42MTg4NzM1OTYxOTE0LDM3LjAzNzkzNzE2NDMwNjY0LDEwMS4yNjIxODQxNDMwNjY0LDI4LjYwMDEwMzM3ODI5NTlDMTA0Ljc3ODA1MzI4MzY5MTQsMjcuMzY5NjQ5ODg3MDg0OTYsMTE2LjgxOTU1NzE4OTk0MTQsMjQuMjkzMzcxMjAwNTYxNTIzLDExNi40Njc5OTQ2ODk5NDE0LDMwLjUzMzc4ODY4MTAzMDI3M0MxMTYuMTE2MTg4MDQ5MzE2NCwzNi43NzQyNjUyODkzMDY2NCwxMDcuNzY2MzM0NTMzNjkxNCw0Ny40OTcyMjY3MTUwODc4OSwxMDUuNzQ1MDk0Mjk5MzE2NCw1My4yOTgyMzY4NDY5MjM4M0MxMDIuMjI5MjI1MTU4NjkxNCw2My40OTM4Njk3ODE0OTQxNCwxMDUuNDgxMTc4MjgzNjkxNCw3MC41MjUzNTI0NzgwMjczNCwxMTAuMzE1NDA2Nzk5MzE2NCw3OS40MDI2NTY1NTUxNzU3OFoiIGNsYXNzPSJzdDAiIHN0eWxlPSJmaWxsOiByZ2IoMjU1LCAxMzAsIDU0KTsgZmlsbC1vcGFjaXR5OiAxOyIvPjwvZz48L2c+PGcgaWQ9InNoYXBlLWVmOTRmYmIwLWRiYWItODBlZC04MDA2LTg5NDIyMzYzZWY0MiI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtZWY5NGZiYjAtZGJhYi04MGVkLTgwMDYtODk0MjIzNjNlZjQyIj48cGF0aCBkPSJNMTQzLjYyNjkyMjYwNzQyMTg4LDEyNy42NTYyMTE4NTMwMjczNEwxNDMuNjI2OTIyNjA3NDIxODgsMTQzLjQ3NzA2NjA0MDAzOTA2TDE1Ny42ODk5MTA4ODg2NzE4OCwxNDMuNDc3MDY2MDQwMDM5MDZMMTU3LjY4OTkxMDg4ODY3MTg4LDE1NS43ODIxODA3ODYxMzI4TDE0My42MjY5MjI2MDc0MjE4OCwxNTUuNzgyMTgwNzg2MTMyOEwxNDMuNjI2OTIyNjA3NDIxODgsMTcwLjcyNDA3NTMxNzM4MjhMMTMwLjQ0Mjg0MDU3NjE3MTg4LDE3MC43MjQwNzUzMTczODI4TDEzMC40NDI4NDA1NzYxNzE4OCwxNTUuNzgyMTgwNzg2MTMyOEwxMTUuNTAwOTUzNjc0MzE2NCwxNTUuNzgyMTgwNzg2MTMyOEwxMTUuNTAwOTUzNjc0MzE2NCwxNDMuNDc3MDY2MDQwMDM5MDZMMTI5LjEyNDQ4MTIwMTE3MTg4LDE0My40NzcwNjYwNDAwMzkwNkwxMzAuNDQyODQwNTc2MTcxODgsMTQyLjE1ODY3NjE0NzQ2MDk0TDEzMC40NDI4NDA1NzYxNzE4OCwxMjcuNjU2MjExODUzMDI3MzRMMTQzLjYyNjkyMjYwNzQyMTg4LDEyNy42NTYyMTE4NTMwMjczNFoiIGNsYXNzPSJzdDAiIHN0eWxlPSJmaWxsOiByZ2IoMjU1LCAxMzAsIDU0KTsgZmlsbC1vcGFjaXR5OiAxOyIvPjwvZz48L2c+PGcgaWQ9InNoYXBlLWVmOTRmYmIwLWRiYWItODBlZC04MDA2LTg5NDIyMzYzZWY0MyI+PGcgY2xhc3M9ImZpbGxzIiBpZD0iZmlsbHMtZWY5NGZiYjAtZGJhYi04MGVkLTgwMDYtODk0MjIzNjNlZjQzIj48cGF0aCBkPSJNMTkxLjk2ODIzMTIwMTE3MTg4LDEyNy42NTYyMTE4NTMwMjczNEwxOTEuOTY4MjMxMjAxMTcxODgsMTQyLjE1ODY3NjE0NzQ2MDk0TDE5My4yODY4MzQ3MTY3OTY4OCwxNDMuNDc3MDY2MDQwMDM5MDZMMjA2LjkxMDM2OTg3MzA0Njg4LDE0My40NzcwNjYwNDAwMzkwNkwyMDYuOTEwMzY5ODczMDQ2ODgsMTU1Ljc4MjE4MDc4NjEzMjhMMTkxLjk2ODIzMTIwMTE3MTg4LDE1NS43ODIxODA3ODYxMzI4TDE5MS45NjgyMzEyMDExNzE4OCwxNzAuNzI0MDc1MzE3MzgyOEwxNzguNzg0MzkzMzEwNTQ2ODgsMTcwLjcyNDA3NTMxNzM4MjhMMTc4Ljc4NDM5MzMxMDU0Njg4LDE1NS43ODIxODA3ODYxMzI4TDE2NC43MjE0MDUwMjkyOTY4OCwxNTUuNzgyMTgwNzg2MTMyOEwxNjQuNzIxNDA1MDI5Mjk2ODgsMTQzLjQ3NzA2NjA0MDAzOTA2TDE3OC43ODQzOTMzMTA1NDY4OCwxNDMuNDc3MDY2MDQwMDM5MDZMMTc4Ljc4NDM5MzMxMDU0Njg4LDEyNy42NTYyMTE4NTMwMjczNEwxOTEuOTY4MjMxMjAxMTcxODgsMTI3LjY1NjIxMTg1MzAyNzM0WiIgY2xhc3M9InN0MCIgc3R5bGU9ImZpbGw6IHJnYigyNTUsIDEzMCwgNTQpOyBmaWxsLW9wYWNpdHk6IDE7Ii8+PC9nPjwvZz48ZyBpZD0ic2hhcGUtZWY5NGZiYjAtZGJhYi04MGVkLTgwMDYtODk0MjIzNjNlZjQ0Ij48ZyBjbGFzcz0iZmlsbHMiIGlkPSJmaWxscy1lZjk0ZmJiMC1kYmFiLTgwZWQtODAwNi04OTQyMjM2M2VmNDQiPjxwYXRoIGQ9Ik0xNTMuMjA3NDg5MDEzNjcxODgsMzguMDkyNjU1MTgxODg0NzY2QzE1NC45NjU1NDU2NTQyOTY4OCw0MC43Mjk0NjU0ODQ2MTkxNCwxNDUuMDMzNDE2NzQ4MDQ2ODgsNTIuMDY3NzA3MDYxNzY3NTgsMTQzLjQ1MTE0MTM1NzQyMTg4LDU0Ljk2ODE3Mzk4MDcxMjg5QzEzOC44ODA4Mjg4NTc0MjE4OCw2My41ODE3OTA5MjQwNzIyNjYsMTQxLjk1NzAwMDczMjQyMTg4LDY4LjUwMzgyMjMyNjY2MDE2LDE0NS4zODQ3MzUxMDc0MjE4OCw3Ni42Nzc5MjUxMDk4NjMyOEMxMzUuNDUyODUwMzQxNzk2ODgsNzUuMTgzNzIzNDQ5NzA3MDMsMTI2LjIyNDA5ODIwNTU2NjQsNzYuNDE0MjUzMjM0ODYzMjgsMTE2LjM3OTg1OTkyNDMxNjQsNzcuNTU2ODMxMzU5ODYzMjhDMTE4LjU3NzM2OTY4OTk0MTQsNTguNjU5NzMyODE4NjAzNTE2LDEyOS4yMTI2MTU5NjY3OTY4OCwzMS4xNDkwNTM1NzM2MDg0LDE1My4yMDc0ODkwMTM2NzE4OCwzOC4wOTI2NTUxODE4ODQ3NjZaIiBjbGFzcz0ic3QwIiBzdHlsZT0iZmlsbDogcmdiKDI1NSwgMTMwLCA1NCk7IGZpbGwtb3BhY2l0eTogMTsiLz48L2c+PC9nPjwvZz48L2c+PC9zdmc+" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> + <link href="./bundle.js" rel="modulepreload"> <link href="./bundle.css" rel="stylesheet"> - <link rel="modulepreload" href="./bundle.js"> </head> <body data-sveltekit-preload-data="hover"> <div style="display: contents"> diff --git a/tools/server/server-chat.cpp b/tools/server/server-chat.cpp index a1558346944..f276f8da58f 100644 --- a/tools/server/server-chat.cpp +++ b/tools/server/server-chat.cpp @@ -575,14 +575,14 @@ json server_chat_msg_diff_to_json_oaicompat(const common_chat_msg_diff & diff) { json convert_transcriptions_to_chatcmpl( const json & inp_body, const common_chat_templates * tmpls, - const std::map<std::string, raw_buffer> & in_files, + const std::map<std::string, uploaded_file> & in_files, std::vector<raw_buffer> & out_files) { // TODO @ngxson : this function may need to be improved in the future // handle input files out_files.clear(); auto it = in_files.find("file"); if (it != in_files.end()) { - out_files.push_back(it->second); + out_files.push_back(it->second.data); } else { throw std::invalid_argument("No input file found for transcription"); } diff --git a/tools/server/server-chat.h b/tools/server/server-chat.h index 5c5b792cf5d..102eae688a3 100644 --- a/tools/server/server-chat.h +++ b/tools/server/server-chat.h @@ -4,6 +4,7 @@ #include "chat.h" #include "server-common.h" +#include "server-http.h" #include <nlohmann/json_fwd.hpp> @@ -19,7 +20,7 @@ json server_chat_convert_anthropic_to_oai(const json & body); json convert_transcriptions_to_chatcmpl( const json & body, const common_chat_templates * tmpls, - const std::map<std::string, raw_buffer> & in_files, + const std::map<std::string, uploaded_file> & in_files, std::vector<raw_buffer> & out_files); json server_chat_msg_diff_to_json_oaicompat(const common_chat_msg_diff & diff); diff --git a/tools/server/server-common.cpp b/tools/server/server-common.cpp index ad8834e317a..21c843c0d69 100644 --- a/tools/server/server-common.cpp +++ b/tools/server/server-common.cpp @@ -947,7 +947,9 @@ json oaicompat_chat_params_parse( json response_format = json_value(body, "response_format", json::object()); std::string response_type = json_value(response_format, "type", std::string()); if (response_type == "json_object") { - json_schema = json_value(response_format, "schema", json::object()); + if (response_format.contains("schema") || json_schema.empty()) { + json_schema = json_value(response_format, "schema", json::object()); + } } else if (response_type == "json_schema") { auto schema_wrapper = json_value(response_format, "json_schema", json::object()); json_schema = json_value(schema_wrapper, "schema", json::object()); diff --git a/tools/server/server-context.cpp b/tools/server/server-context.cpp index 08ff1e3628a..e3822225bdb 100644 --- a/tools/server/server-context.cpp +++ b/tools/server/server-context.cpp @@ -309,8 +309,10 @@ struct server_slot { return 0; } + const int n_draft_min = common_speculative_n_min(spec.get(), task->params.speculative); + // determine the max draft that fits the current slot state - int n_draft_max = task->params.speculative.n_max; + int n_draft_max = common_speculative_n_max(spec.get(), task->params.speculative); // note: slot.prompt is not yet expanded with the `id` token sampled above // also, need to leave space for 1 extra token to allow context shifts @@ -322,8 +324,8 @@ struct server_slot { SLT_DBG(*this, "max possible draft: %d\n", n_draft_max); - if (n_draft_max < task->params.speculative.n_min) { - SLT_DBG(*this, "the max possible draft is too small: %d < %d - skipping speculative decoding\n", n_draft_max, task->params.speculative.n_min); + if (n_draft_max < n_draft_min) { + SLT_DBG(*this, "the max possible draft is too small: %d < %d - skipping speculative decoding\n", n_draft_max, n_draft_min); n_draft_max = 0; } @@ -358,11 +360,6 @@ struct server_slot { spec_draft.resize(n_draft_max); } - if (spec_draft.size() < (size_t) params_spec.n_min) { - SLT_DBG(*this, "ignoring small draft: %d < %d\n", (int) spec_draft.size(), params_spec.n_min); - spec_draft.clear(); - } - if (!spec_draft.empty() && ctx_seq_rm_type == COMMON_CONTEXT_SEQ_RM_TYPE_FULL) { const auto n_tokens = prompt.tokens.size(); @@ -770,9 +767,9 @@ struct server_context_impl { if (params_base.speculative.has_dft()) { // TODO speculative: move to common/speculative.cpp? - SRV_INF("loading draft model '%s'\n", params_base.speculative.mparams_dft.path.c_str()); + const auto & params_spec = params_base.speculative.draft; - const auto & params_spec = params_base.speculative; + SRV_INF("loading draft model '%s'\n", params_spec.mparams.path.c_str()); auto params_dft = params_base; @@ -780,7 +777,7 @@ struct server_context_impl { params_dft.n_ctx = params_spec.n_ctx == 0 ? llama_n_ctx_seq(ctx) : params_spec.n_ctx; params_dft.n_batch = llama_n_ctx_seq(ctx); params_dft.devices = params_spec.devices; - params_dft.model = params_spec.mparams_dft; + params_dft.model = params_spec.mparams; params_dft.n_gpu_layers = params_spec.n_gpu_layers; params_dft.cache_type_k = params_spec.cache_type_k; params_dft.cache_type_v = params_spec.cache_type_v; @@ -800,8 +797,8 @@ struct server_context_impl { return false; } - params_base.speculative.model_dft = model_dft.get(); - params_base.speculative.cparams_dft = common_context_params_to_llama(params_dft); + params_base.speculative.draft.model = model_dft.get(); + params_base.speculative.draft.cparams = common_context_params_to_llama(params_dft); } std::string & mmproj_path = params_base.mmproj.path; @@ -1310,7 +1307,7 @@ struct server_context_impl { backend_sampling &= task.params.sampling.backend_sampling; // TODO: speculative decoding requires multiple samples per batch - not supported yet - backend_sampling &= !(slot.can_speculate() && task.params.speculative.n_max > 0); + backend_sampling &= !(slot.can_speculate() && common_speculative_n_max(slot.spec.get(), task.params.speculative) > 0); // TODO: getting post/pre sampling logits is not yet supported with backend sampling backend_sampling &= !need_logits; @@ -3031,7 +3028,7 @@ struct server_context_impl { slot.sampled = ids.back(); // last accepted token SLT_DBG(slot, "add accepted tokens: sampled=%d, ids.size=%zu, n_draft=%zu\n", slot.sampled, ids.size(), n_draft); - llama_memory_seq_rm(llama_get_memory(slot.ctx), slot.id, slot.prompt.n_tokens(), -1); + llama_memory_seq_rm(llama_get_memory(slot.ctx), slot.id, slot.prompt.tokens.pos_next(), -1); for (size_t i = 0; i < ids.size(); ++i) { completion_token_output result; diff --git a/tools/server/server-cors-proxy.h b/tools/server/server-cors-proxy.h index 887013152bf..2af0c7e1c21 100644 --- a/tools/server/server-cors-proxy.h +++ b/tools/server/server-cors-proxy.h @@ -49,6 +49,7 @@ static server_http_res_ptr proxy_request(const server_http_req & req, std::strin parsed_url.path, headers, req.body, + req.files, req.should_stop, 600, // timeout_read (default to 10 minutes) 600 // timeout_write (default to 10 minutes) diff --git a/tools/server/server-http.cpp b/tools/server/server-http.cpp index ae39fbff9bd..6f24f83ef30 100644 --- a/tools/server/server-http.cpp +++ b/tools/server/server-http.cpp @@ -438,7 +438,7 @@ void server_http_context::get(const std::string & path, const server_http_contex void server_http_context::post(const std::string & path, const server_http_context::handler_t & handler) const { pimpl->srv->Post(path_prefix + path, [handler](const httplib::Request & req, httplib::Response & res) { std::string body = req.body; - std::map<std::string, raw_buffer> files; + std::map<std::string, uploaded_file> files; if (req.is_multipart_form_data()) { // translate text fields to a JSON object and use it as the body @@ -459,7 +459,11 @@ void server_http_context::post(const std::string & path, const server_http_conte // populate files from multipart form for (const auto & [key, file] : req.form.files) { - files[key] = raw_buffer(file.content.begin(), file.content.end()); + files[key] = uploaded_file{ + raw_buffer(file.content.begin(), file.content.end()), + file.filename, + file.content_type, + }; } } diff --git a/tools/server/server-http.h b/tools/server/server-http.h index 68ae2170cf6..d4d3b6e5368 100644 --- a/tools/server/server-http.h +++ b/tools/server/server-http.h @@ -36,13 +36,19 @@ struct server_http_res { using server_http_res_ptr = std::unique_ptr<server_http_res>; using raw_buffer = std::vector<uint8_t>; +struct uploaded_file { + raw_buffer data; + std::string filename; + std::string content_type; +}; + struct server_http_req { std::map<std::string, std::string> params; // path_params + query_params std::map<std::string, std::string> headers; // used by MCP proxy std::string path; std::string query_string; // query parameters string (e.g. "action=save") std::string body; - std::map<std::string, raw_buffer> files; // used for file uploads (form data) + std::map<std::string, uploaded_file> files; // used for file uploads (form data) const std::function<bool()> & should_stop; std::string get_param(const std::string & key, const std::string & def = "") const { diff --git a/tools/server/server-models.cpp b/tools/server/server-models.cpp index 15c11c3c9fb..db6cbce8f9d 100644 --- a/tools/server/server-models.cpp +++ b/tools/server/server-models.cpp @@ -18,6 +18,8 @@ #include <chrono> #include <queue> #include <filesystem> +#include <random> +#include <sstream> #include <cstring> #ifdef _WIN32 @@ -823,6 +825,7 @@ server_http_res_ptr server_models::proxy_request(const server_http_req & req, co proxy_path, req.headers, req.body, + req.files, req.should_stop, base_params.timeout_read, base_params.timeout_write @@ -1126,6 +1129,77 @@ static bool should_strip_proxy_header(const std::string & header_name) { return false; } +static std::string generate_multipart_boundary() { + thread_local std::mt19937 gen(std::random_device{}()); + static const char chars[] = "0123456789abcdefghijklmnopqrstuvwxyz"; + std::uniform_int_distribution<> dis(0, sizeof(chars) - 2); + std::string boundary = "----llama-cpp-proxy-"; + for (int i = 0; i < 16; i++) { + boundary += chars[dis(gen)]; + } + return boundary; +} + +static std::string build_multipart_body( + const json & form_fields, + const std::map<std::string, uploaded_file> & files, + const std::string & boundary) { + static auto sanitize_field = [](const std::string & text) { + std::string result; + result.reserve(text.size()); + for (char c : text) { + if (c != '\n' && c != '\r' && c != '"') { + result += c; + } + } + return result; + }; + + std::ostringstream body; + + for (const auto & [key, value] : form_fields.items()) { + if (value.is_array()) { + for (const auto & item : value) { + body << "--" << boundary << "\r\n"; + body << "Content-Disposition: form-data; name=\"" << sanitize_field(key) << "\"\r\n"; + body << "\r\n"; + if (!item.is_string()) { + throw std::invalid_argument("expected string"); + } + body << item.get<std::string>() << "\r\n"; + } + } else { + body << "--" << boundary << "\r\n"; + body << "Content-Disposition: form-data; name=\"" << sanitize_field(key) << "\"\r\n"; + body << "\r\n"; + if (!value.is_string()) { + throw std::invalid_argument("expected string"); + } + body << value.get<std::string>() << "\r\n"; + } + } + + for (const auto & [key, file] : files) { + body << "--" << boundary << "\r\n"; + body << "Content-Disposition: form-data; name=\"" << sanitize_field(key) << "\""; + if (!file.filename.empty()) { + body << "; filename=\"" << sanitize_field(file.filename) << "\""; + } + body << "\r\n"; + if (!file.content_type.empty()) { + body << "Content-Type: " << sanitize_field(file.content_type) << "\r\n"; + } else { + body << "Content-Type: application/octet-stream\r\n"; + } + body << "\r\n"; + body.write(reinterpret_cast<const char*>(file.data.data()), file.data.size()); + body << "\r\n"; + } + + body << "--" << boundary << "--\r\n"; + return body.str(); +} + server_http_proxy::server_http_proxy( const std::string & method, const std::string & scheme, @@ -1134,6 +1208,7 @@ server_http_proxy::server_http_proxy( const std::string & path, const std::map<std::string, std::string> & headers, const std::string & body, + const std::map<std::string, uploaded_file> & files, const std::function<bool()> should_stop, int32_t timeout_read, int32_t timeout_write @@ -1195,28 +1270,65 @@ server_http_proxy::server_http_proxy( return pipe->write({{}, 0, std::string(data, data_length), ""}); }; + // when files are present, the body was converted from multipart form data to JSON + // we need to reconstruct the multipart body for the downstream server + std::string effective_body = body; + std::string override_content_type; + bool has_files = !files.empty(); + + if (has_files) { + json form_fields = json::parse(body, nullptr, false); + if (!form_fields.is_discarded()) { + auto boundary = generate_multipart_boundary(); + effective_body = build_multipart_body(form_fields, files, boundary); + override_content_type = "multipart/form-data; boundary=" + boundary; + } else { + throw std::runtime_error("failed to parse multipart form fields JSON"); + } + } + // prepare the request to destination server httplib::Request req; { req.method = method; req.path = path; for (const auto & [key, value] : headers) { - if (key == "Accept-Encoding") { + const auto lowered = to_lower_copy(key); + if (lowered == "accept-encoding") { // disable Accept-Encoding to avoid compressed responses continue; } - if (key == "Transfer-Encoding") { + if (lowered == "transfer-encoding") { // the body is already decoded continue; } - if (key == "Host" || key == "host") { + if (lowered == "content-length") { + // let httplib calculate Content-Length from the actual body + continue; + } + if (lowered == "content-type") { + if (has_files) { + // we set our own Content-Type with the new boundary + continue; + } + // when no files but the original request was multipart, + // the body is now JSON, so correct the Content-Type + if (value.find("multipart/form-data") != std::string::npos) { + override_content_type = "application/json; charset=utf-8"; + continue; + } + } + if (lowered == "host") { bool is_default_port = (scheme == "https" && port == 443) || (scheme == "http" && port == 80); req.set_header(key, is_default_port ? host : host + ":" + std::to_string(port)); } else { req.set_header(key, value); } } - req.body = body; + req.body = effective_body; + if (!override_content_type.empty()) { + req.set_header("Content-Type", override_content_type); + } req.response_handler = response_handler; req.content_receiver = content_receiver; } diff --git a/tools/server/server-models.h b/tools/server/server-models.h index 1db34b6c4df..b3428ef5447 100644 --- a/tools/server/server-models.h +++ b/tools/server/server-models.h @@ -202,6 +202,7 @@ struct server_http_proxy : server_http_res { const std::string & path, const std::map<std::string, std::string> & headers, const std::string & body, + const std::map<std::string, uploaded_file> & files, const std::function<bool()> should_stop, int32_t timeout_read, int32_t timeout_write diff --git a/tools/server/server-task.cpp b/tools/server/server-task.cpp index 4c341d7c50f..45e5168fabe 100644 --- a/tools/server/server-task.cpp +++ b/tools/server/server-task.cpp @@ -76,13 +76,7 @@ json task_params::to_json(bool only_metrics) const { {"reasoning_in_content", chat_parser_params.reasoning_in_content}, {"generation_prompt", chat_parser_params.generation_prompt}, {"samplers", samplers}, - {"speculative.n_max", speculative.n_max}, - {"speculative.n_min", speculative.n_min}, - {"speculative.p_min", speculative.p_min}, {"speculative.type", common_speculative_type_to_str(speculative.type)}, - {"speculative.ngram_size_n", speculative.ngram_size_n}, - {"speculative.ngram_size_m", speculative.ngram_size_m}, - {"speculative.ngram_m_hits", speculative.ngram_min_hits}, {"timings_per_token", timings_per_token}, {"post_sampling_probs", post_sampling_probs}, {"backend_sampling", sampling.backend_sampling}, @@ -139,13 +133,7 @@ json task_params::to_json(bool only_metrics) const { {"reasoning_in_content", chat_parser_params.reasoning_in_content}, {"generation_prompt", chat_parser_params.generation_prompt}, {"samplers", samplers}, - {"speculative.n_max", speculative.n_max}, - {"speculative.n_min", speculative.n_min}, - {"speculative.p_min", speculative.p_min}, {"speculative.type", common_speculative_type_to_str(speculative.type)}, - {"speculative.ngram_size_n", speculative.ngram_size_n}, - {"speculative.ngram_size_m", speculative.ngram_size_m}, - {"speculative.ngram_m_hits", speculative.ngram_min_hits}, {"timings_per_token", timings_per_token}, {"post_sampling_probs", post_sampling_probs}, {"backend_sampling", sampling.backend_sampling}, @@ -308,14 +296,17 @@ task_params server_task::params_from_json_cmpl( params.speculative = defaults.speculative; - params.speculative.n_min = json_value(data, "speculative.n_min", defaults.speculative.n_min); - params.speculative.n_max = json_value(data, "speculative.n_max", defaults.speculative.n_max); - params.speculative.p_min = json_value(data, "speculative.p_min", defaults.speculative.p_min); + // TODO: for now, be able to adjust only the draft-model based speculative parameters + params.speculative.draft.n_min = json_value(data, "speculative.n_min", defaults.speculative.draft.n_min); + params.speculative.draft.n_max = json_value(data, "speculative.n_max", defaults.speculative.draft.n_max); + params.speculative.draft.p_min = json_value(data, "speculative.p_min", defaults.speculative.draft.p_min); - params.speculative.n_min = std::min(params.speculative.n_max, params.speculative.n_min); - params.speculative.n_min = std::max(params.speculative.n_min, 0); - params.speculative.n_max = std::max(params.speculative.n_max, 0); + params.speculative.draft.n_min = std::min(params.speculative.draft.n_max, params.speculative.draft.n_min); + params.speculative.draft.n_min = std::max(params.speculative.draft.n_min, 0); + params.speculative.draft.n_max = std::max(params.speculative.draft.n_max, 0); +#if 0 + // for debugging and research purposes params.speculative.type = common_speculative_type_from_name(json_value(data, "speculative.type", common_speculative_type_to_str(defaults.speculative.type))); params.speculative.ngram_size_n = json_value(data, "speculative.ngram_size_n", defaults.speculative.ngram_size_n); @@ -325,6 +316,7 @@ task_params server_task::params_from_json_cmpl( params.speculative.ngram_size_n = std::max(std::min(1, (int) params.speculative.ngram_size_n), 1024); params.speculative.ngram_size_m = std::max(std::min(1, (int) params.speculative.ngram_size_m), 1024); params.speculative.ngram_min_hits = std::max(std::min(1, (int) params.speculative.ngram_min_hits), 1024); +#endif // Use OpenAI API logprobs only if n_probs wasn't provided if (data.contains("logprobs") && params.sampling.n_probs == defaults.sampling.n_probs){ diff --git a/tools/server/tests/utils.py b/tools/server/tests/utils.py index ddbb76c9adb..88700487be8 100644 --- a/tools/server/tests/utils.py +++ b/tools/server/tests/utils.py @@ -83,15 +83,14 @@ class ServerProcess: kv_unified: bool | None = False server_slots: bool | None = False pooling: str | None = None - draft: int | None = None api_key: str | None = None models_dir: str | None = None models_max: int | None = None no_models_autoload: bool | None = None lora_files: List[str] | None = None enable_ctx_shift: int | None = False - draft_min: int | None = None - draft_max: int | None = None + spec_draft_n_min: int | None = None + spec_draft_n_max: int | None = None no_webui: bool | None = None jinja: bool | None = None reasoning_format: Literal['deepseek', 'none', 'nothink'] | None = None @@ -165,8 +164,6 @@ def start(self, timeout_seconds: int = DEFAULT_HTTP_TIMEOUT) -> None: server_args.extend(["--threads", self.n_threads]) if self.n_gpu_layer: server_args.extend(["--n-gpu-layers", self.n_gpu_layer]) - if self.draft is not None: - server_args.extend(["--draft", self.draft]) if self.server_continuous_batching: server_args.append("--cont-batching") if self.server_embeddings: @@ -214,10 +211,10 @@ def start(self, timeout_seconds: int = DEFAULT_HTTP_TIMEOUT) -> None: server_args.append("--context-shift") if self.api_key: server_args.extend(["--api-key", self.api_key]) - if self.draft_max: - server_args.extend(["--draft-max", self.draft_max]) - if self.draft_min: - server_args.extend(["--draft-min", self.draft_min]) + if self.spec_draft_n_max: + server_args.extend(["--spec-draft-n-max", self.spec_draft_n_max]) + if self.spec_draft_n_min: + server_args.extend(["--spec-draft-n-min", self.spec_draft_n_min]) if self.no_webui: server_args.append("--no-webui") if self.no_models_autoload: diff --git a/tools/server/webui/package-lock.json b/tools/server/webui/package-lock.json index 2fcff658f6a..c16ba561021 100644 --- a/tools/server/webui/package-lock.json +++ b/tools/server/webui/package-lock.json @@ -80,9 +80,9 @@ } }, "node_modules/@adobe/css-tools": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", - "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.4.tgz", + "integrity": "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==", "dev": true, "license": "MIT" }, @@ -207,9 +207,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", - "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", "cpu": [ "ppc64" ], @@ -224,9 +224,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", - "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", "cpu": [ "arm" ], @@ -241,9 +241,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", - "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", "cpu": [ "arm64" ], @@ -258,9 +258,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", - "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", "cpu": [ "x64" ], @@ -275,9 +275,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", - "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", "cpu": [ "arm64" ], @@ -292,9 +292,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", - "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", "cpu": [ "x64" ], @@ -309,9 +309,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", - "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", "cpu": [ "arm64" ], @@ -326,9 +326,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", - "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", "cpu": [ "x64" ], @@ -343,9 +343,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", - "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", "cpu": [ "arm" ], @@ -360,9 +360,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", - "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", "cpu": [ "arm64" ], @@ -377,9 +377,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", - "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", "cpu": [ "ia32" ], @@ -394,9 +394,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", - "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", "cpu": [ "loong64" ], @@ -411,9 +411,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", - "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", "cpu": [ "mips64el" ], @@ -428,9 +428,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", - "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", "cpu": [ "ppc64" ], @@ -445,9 +445,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", - "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", "cpu": [ "riscv64" ], @@ -462,9 +462,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", - "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", "cpu": [ "s390x" ], @@ -479,9 +479,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", - "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", "cpu": [ "x64" ], @@ -496,9 +496,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", - "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", "cpu": [ "arm64" ], @@ -513,9 +513,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", - "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", "cpu": [ "x64" ], @@ -530,9 +530,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", - "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", "cpu": [ "arm64" ], @@ -547,9 +547,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", - "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", "cpu": [ "x64" ], @@ -564,9 +564,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", - "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", "cpu": [ "arm64" ], @@ -581,9 +581,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", - "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", "cpu": [ "x64" ], @@ -598,9 +598,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", - "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", "cpu": [ "arm64" ], @@ -615,9 +615,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", - "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", "cpu": [ "ia32" ], @@ -632,9 +632,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", - "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", "cpu": [ "x64" ], @@ -855,9 +855,9 @@ "license": "MIT" }, "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "version": "1.19.13", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.13.tgz", + "integrity": "sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ==", "license": "MIT", "engines": { "node": ">=18.14.1" @@ -1097,9 +1097,9 @@ } }, "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -1669,9 +1669,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", - "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", "cpu": [ "arm" ], @@ -1683,9 +1683,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", - "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", "cpu": [ "arm64" ], @@ -1697,9 +1697,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", - "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", "cpu": [ "arm64" ], @@ -1711,9 +1711,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", - "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", "cpu": [ "x64" ], @@ -1725,9 +1725,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", - "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", "cpu": [ "arm64" ], @@ -1739,9 +1739,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", - "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", "cpu": [ "x64" ], @@ -1753,9 +1753,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", - "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", "cpu": [ "arm" ], @@ -1767,9 +1767,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", - "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", "cpu": [ "arm" ], @@ -1781,9 +1781,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", - "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", "cpu": [ "arm64" ], @@ -1795,9 +1795,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", - "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", "cpu": [ "arm64" ], @@ -1808,10 +1808,24 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", - "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", "cpu": [ "loong64" ], @@ -1822,10 +1836,24 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", - "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", "cpu": [ "ppc64" ], @@ -1837,9 +1865,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", - "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", "cpu": [ "riscv64" ], @@ -1851,9 +1879,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", - "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", "cpu": [ "riscv64" ], @@ -1865,9 +1893,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", - "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", "cpu": [ "s390x" ], @@ -1879,9 +1907,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", - "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", "cpu": [ "x64" ], @@ -1893,9 +1921,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", - "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", "cpu": [ "x64" ], @@ -1906,10 +1934,38 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", - "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", "cpu": [ "arm64" ], @@ -1921,9 +1977,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", - "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", "cpu": [ "ia32" ], @@ -1934,10 +1990,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", - "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", "cpu": [ "x64" ], @@ -2237,9 +2307,9 @@ } }, "node_modules/@sveltejs/kit": { - "version": "2.50.2", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.50.2.tgz", - "integrity": "sha512-875hTUkEbz+MyJIxWbQjfMaekqdmEKUUfR7JyKcpfMRZqcGyrO9Gd+iS1D/Dx8LpE5FEtutWGOtlAh4ReSAiOA==", + "version": "2.57.1", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.57.1.tgz", + "integrity": "sha512-VRdSbB96cI1EnRh09CqmnQqP/YJvET5buj8S6k7CxaJqBJD4bw4fRKDjcarAj/eX9k2eHifQfDH8NtOh+ZxxPw==", "dev": true, "license": "MIT", "dependencies": { @@ -2248,12 +2318,11 @@ "@types/cookie": "^0.6.0", "acorn": "^8.14.1", "cookie": "^0.6.0", - "devalue": "^5.6.2", + "devalue": "^5.6.4", "esm-env": "^1.2.2", "kleur": "^4.1.5", "magic-string": "^0.30.5", "mrmime": "^2.0.0", - "sade": "^1.8.1", "set-cookie-parser": "^3.0.0", "sirv": "^3.0.0" }, @@ -2265,10 +2334,10 @@ }, "peerDependencies": { "@opentelemetry/api": "^1.0.0", - "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0", "svelte": "^4.0.0 || ^5.0.0-next.0", - "typescript": "^5.3.3", - "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" + "typescript": "^5.3.3 || ^6.0.0", + "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0" }, "peerDependenciesMeta": { "@opentelemetry/api": { @@ -2715,18 +2784,17 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz", - "integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==", + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", "dev": true, "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", "aria-query": "^5.0.0", - "chalk": "^3.0.0", "css.escape": "^1.5.1", "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", + "picocolors": "^1.1.1", "redent": "^3.0.0" }, "engines": { @@ -2735,20 +2803,6 @@ "yarn": ">=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", @@ -2882,6 +2936,12 @@ "csstype": "^3.0.2" } }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, "node_modules/@types/unist": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", @@ -3038,7 +3098,6 @@ "version": "8.56.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", - "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3077,9 +3136,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { @@ -3087,13 +3146,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3384,9 +3443,9 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "dev": true, "license": "MIT", "dependencies": { @@ -3418,9 +3477,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -3581,9 +3640,9 @@ } }, "node_modules/bits-ui": { - "version": "2.15.5", - "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-2.15.5.tgz", - "integrity": "sha512-WhS+P+E//ClLfKU6KqjKC17nGDRLnz+vkwoP6ClFUPd5m1fFVDxTElPX8QVsduLj5V1KFDxlnv6sW2G5Lqk+vw==", + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-2.17.3.tgz", + "integrity": "sha512-Bef41uY9U2jaBJHPhcPvmBNkGec5Wx2z6eioDsTmsaR2vH4QoaOcPi75gzCG3+/2TNr6v/qBwzgWNPYCxNtrEA==", "dev": true, "license": "MIT", "dependencies": { @@ -3692,9 +3751,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -4237,9 +4296,9 @@ } }, "node_modules/devalue": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.2.tgz", - "integrity": "sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==", + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", + "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", "license": "MIT" }, "node_modules/devlop": { @@ -4388,9 +4447,9 @@ ] }, "node_modules/esbuild": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", - "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4401,32 +4460,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.8", - "@esbuild/android-arm": "0.25.8", - "@esbuild/android-arm64": "0.25.8", - "@esbuild/android-x64": "0.25.8", - "@esbuild/darwin-arm64": "0.25.8", - "@esbuild/darwin-x64": "0.25.8", - "@esbuild/freebsd-arm64": "0.25.8", - "@esbuild/freebsd-x64": "0.25.8", - "@esbuild/linux-arm": "0.25.8", - "@esbuild/linux-arm64": "0.25.8", - "@esbuild/linux-ia32": "0.25.8", - "@esbuild/linux-loong64": "0.25.8", - "@esbuild/linux-mips64el": "0.25.8", - "@esbuild/linux-ppc64": "0.25.8", - "@esbuild/linux-riscv64": "0.25.8", - "@esbuild/linux-s390x": "0.25.8", - "@esbuild/linux-x64": "0.25.8", - "@esbuild/netbsd-arm64": "0.25.8", - "@esbuild/netbsd-x64": "0.25.8", - "@esbuild/openbsd-arm64": "0.25.8", - "@esbuild/openbsd-x64": "0.25.8", - "@esbuild/openharmony-arm64": "0.25.8", - "@esbuild/sunos-x64": "0.25.8", - "@esbuild/win32-arm64": "0.25.8", - "@esbuild/win32-ia32": "0.25.8", - "@esbuild/win32-x64": "0.25.8" + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" } }, "node_modules/escape-html": { @@ -4538,173 +4597,6 @@ "storybook": "^10.2.4" } }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/project-service": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.54.0.tgz", - "integrity": "sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.54.0", - "@typescript-eslint/types": "^8.54.0", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/scope-manager": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz", - "integrity": "sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz", - "integrity": "sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/types": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.54.0.tgz", - "integrity": "sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz", - "integrity": "sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.54.0", - "@typescript-eslint/tsconfig-utils": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/visitor-keys": "8.54.0", - "debug": "^4.4.3", - "minimatch": "^9.0.5", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/utils": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.54.0.tgz", - "integrity": "sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.54.0", - "@typescript-eslint/types": "8.54.0", - "@typescript-eslint/typescript-estree": "8.54.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz", - "integrity": "sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.54.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/eslint-plugin-svelte": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.15.0.tgz", @@ -4964,12 +4856,12 @@ } }, "node_modules/express-rate-limit": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.2.1.tgz", - "integrity": "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.2.tgz", + "integrity": "sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==", "license": "MIT", "dependencies": { - "ip-address": "10.0.1" + "ip-address": "10.1.0" }, "engines": { "node": ">= 16" @@ -5140,16 +5032,16 @@ } }, "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -5298,9 +5190,9 @@ } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { @@ -5308,13 +5200,13 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -5649,9 +5541,9 @@ } }, "node_modules/hono": { - "version": "4.11.7", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.7.tgz", - "integrity": "sha512-l7qMiNee7t82bH3SeyUCt9UF15EVmaBvsppY2zQtrbIhl/yzBTny+YUxsVjSjQ6gaqaeVtZmGocom8TzBlA4Yw==", + "version": "4.12.14", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.14.tgz", + "integrity": "sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -5774,9 +5666,9 @@ } }, "node_modules/immutable": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", - "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", "dev": true, "license": "MIT" }, @@ -5830,9 +5722,9 @@ "license": "MIT" }, "node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "license": "MIT", "engines": { "node": ">= 12" @@ -6444,13 +6336,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.castarray": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", @@ -7545,9 +7430,9 @@ } }, "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "optional": true, @@ -7617,9 +7502,9 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -7944,9 +7829,9 @@ } }, "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", "license": "MIT", "funding": { "type": "opencollective", @@ -7990,9 +7875,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { @@ -8117,9 +8002,9 @@ } }, "node_modules/postcss-load-config/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", "dev": true, "license": "ISC", "engines": { @@ -8397,9 +8282,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -8736,9 +8621,9 @@ } }, "node_modules/rollup": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", - "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", "dev": true, "license": "MIT", "dependencies": { @@ -8752,26 +8637,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.45.1", - "@rollup/rollup-android-arm64": "4.45.1", - "@rollup/rollup-darwin-arm64": "4.45.1", - "@rollup/rollup-darwin-x64": "4.45.1", - "@rollup/rollup-freebsd-arm64": "4.45.1", - "@rollup/rollup-freebsd-x64": "4.45.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", - "@rollup/rollup-linux-arm-musleabihf": "4.45.1", - "@rollup/rollup-linux-arm64-gnu": "4.45.1", - "@rollup/rollup-linux-arm64-musl": "4.45.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-musl": "4.45.1", - "@rollup/rollup-linux-s390x-gnu": "4.45.1", - "@rollup/rollup-linux-x64-gnu": "4.45.1", - "@rollup/rollup-linux-x64-musl": "4.45.1", - "@rollup/rollup-win32-arm64-msvc": "4.45.1", - "@rollup/rollup-win32-ia32-msvc": "4.45.1", - "@rollup/rollup-win32-x64-msvc": "4.45.1", + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", "fsevents": "~2.3.2" } }, @@ -9140,15 +9030,15 @@ "license": "MIT" }, "node_modules/storybook": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.2.4.tgz", - "integrity": "sha512-LwF0VZsT4qkgx66Ad/q0QgZZrU2a5WftaADDEcJ3bGq3O2fHvwWPlSZjM1HiXD4vqP9U5JiMqQkV1gkyH0XJkw==", + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-10.3.3.tgz", + "integrity": "sha512-tMoRAts9EVqf+mEMPLC6z1DPyHbcPe+CV1MhLN55IKsl0HxNjvVGK44rVPSePbltPE6vIsn4bdRj6CCUt8SJwQ==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.1", - "@testing-library/jest-dom": "^6.6.3", + "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "@vitest/expect": "3.2.4", "@vitest/spy": "3.2.4", @@ -9355,22 +9245,23 @@ } }, "node_modules/svelte": { - "version": "5.48.3", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.48.3.tgz", - "integrity": "sha512-w7QZ398cdNherTdiQ/v3SYLLGOO4948Jgjh04PYqtTYVohmBvbmFwLmo7pp8gp4/1tceRWfSTjHgjtfpCVNJmQ==", + "version": "5.55.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.55.1.tgz", + "integrity": "sha512-QjvU7EFemf6mRzdMGlAFttMWtAAVXrax61SZYHdkD6yoVGQ89VeyKfZD4H1JrV1WLmJBxWhFch9H6ig/87VGjw==", "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", + "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", - "aria-query": "^5.3.1", + "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", - "devalue": "^5.6.2", + "devalue": "^5.6.4", "esm-env": "^1.2.1", - "esrap": "^2.2.1", + "esrap": "^2.2.4", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", @@ -9550,21 +9441,22 @@ } }, "node_modules/svelte/node_modules/aria-query": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", + "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", "license": "Apache-2.0", "engines": { "node": ">= 0.4" } }, "node_modules/svelte/node_modules/esrap": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.2.tgz", - "integrity": "sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.4.tgz", + "integrity": "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "@jridgewell/sourcemap-codec": "^1.4.15", + "@typescript-eslint/types": "^8.2.0" } }, "node_modules/svelte/node_modules/is-reference": { @@ -9647,9 +9539,9 @@ } }, "node_modules/tar": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.13.tgz", + "integrity": "sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -9679,9 +9571,9 @@ } }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { @@ -9689,13 +9581,13 @@ } }, "node_modules/test-exclude/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -10299,13 +10191,13 @@ } }, "node_modules/vite": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.2.tgz", - "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", + "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", diff --git a/tools/server/webui/src/app.css b/tools/server/webui/src/app.css index 2f5c4138aba..6e29b70a35a 100644 --- a/tools/server/webui/src/app.css +++ b/tools/server/webui/src/app.css @@ -29,7 +29,7 @@ --chart-3: oklch(0.398 0.07 227.392); --chart-4: oklch(0.828 0.189 84.429); --chart-5: oklch(0.769 0.188 70.08); - --sidebar: oklch(0.987 0 0); + --sidebar: oklch(0.985 0 0); --sidebar-foreground: oklch(0.145 0 0); --sidebar-primary: oklch(0.205 0 0); --sidebar-primary-foreground: oklch(0.985 0 0); @@ -77,7 +77,7 @@ --chart-3: oklch(0.769 0.188 70.08); --chart-4: oklch(0.627 0.265 303.9); --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.19 0 0); + --sidebar: oklch(0.2 0 0); --sidebar-foreground: oklch(0.985 0 0); --sidebar-primary: oklch(0.488 0.243 264.376); --sidebar-primary-foreground: oklch(0.985 0 0); diff --git a/tools/server/webui/src/lib/components/app/actions/ActionIcon.svelte b/tools/server/webui/src/lib/components/app/actions/ActionIcon.svelte index 1d2dd3c1d9d..4749b158aa3 100644 --- a/tools/server/webui/src/lib/components/app/actions/ActionIcon.svelte +++ b/tools/server/webui/src/lib/components/app/actions/ActionIcon.svelte @@ -1,18 +1,20 @@ <script lang="ts"> - import { Button } from '$lib/components/ui/button'; + import { Button, type ButtonVariant, type ButtonSize } from '$lib/components/ui/button'; import * as Tooltip from '$lib/components/ui/tooltip'; import type { Component } from 'svelte'; + import { TooltipSide } from '$lib/enums'; interface Props { icon: Component; tooltip: string; - variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'; - size?: 'default' | 'sm' | 'lg' | 'icon'; + variant?: ButtonVariant; + size?: ButtonSize; iconSize?: string; class?: string; disabled?: boolean; onclick: (e?: MouseEvent) => void; 'aria-label'?: string; + tooltipSide?: TooltipSide; } let { @@ -23,6 +25,7 @@ class: className = '', disabled = false, iconSize = 'h-3 w-3', + tooltipSide = TooltipSide.TOP, onclick, 'aria-label': ariaLabel }: Props = $props(); @@ -35,7 +38,7 @@ {size} {disabled} {onclick} - class="h-6 w-6 p-0 {className} flex" + class="h-6 w-6 p-0 {className} flex hover:bg-transparent data-[state=open]:bg-transparent!" aria-label={ariaLabel || tooltip} > {@const IconComponent = icon} @@ -44,7 +47,7 @@ </Button> </Tooltip.Trigger> - <Tooltip.Content> + <Tooltip.Content side={tooltipSide}> <p>{tooltip}</p> </Tooltip.Content> </Tooltip.Root> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte index 4a1ab29b720..04ef079002c 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatForm.svelte @@ -300,7 +300,7 @@ if (sendOnEnter || isModifier) { event.preventDefault(); - if (!canSubmit || disabled || isLoading || hasLoadingAttachments) return; + if (!canSubmit || disabled || hasLoadingAttachments) return; onSubmit?.(); } @@ -527,16 +527,15 @@ } if (isRecording) { + isRecording = false; try { const audioBlob = await audioRecorder.stopRecording(); const wavBlob = await convertToWav(audioBlob); const audioFile = createAudioFile(wavBlob); onFilesAdd?.([audioFile]); - isRecording = false; } catch (error) { console.error('Failed to stop recording:', error); - isRecording = false; } } else { try { @@ -555,7 +554,7 @@ class="relative {className}" onsubmit={(e) => { e.preventDefault(); - if (!canSubmit || disabled || isLoading || hasLoadingAttachments) return; + if (!canSubmit || disabled || hasLoadingAttachments) return; onSubmit?.(); }} > diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte deleted file mode 100644 index b9bb5b7e3fa..00000000000 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte +++ /dev/null @@ -1,333 +0,0 @@ -<script lang="ts"> - import { page } from '$app/state'; - import { Plus, MessageSquare, Settings, Zap, FolderOpen } from '@lucide/svelte'; - import { Button } from '$lib/components/ui/button'; - import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; - import * as Tooltip from '$lib/components/ui/tooltip'; - import { Switch } from '$lib/components/ui/switch'; - import { FILE_TYPE_ICONS, TOOLTIP_DELAY_DURATION } from '$lib/constants'; - import { McpLogo, DropdownMenuSearchable } from '$lib/components/app'; - import { conversationsStore } from '$lib/stores/conversations.svelte'; - import { mcpStore } from '$lib/stores/mcp.svelte'; - - import { HealthCheckStatus } from '$lib/enums'; - import type { MCPServerSettingsEntry } from '$lib/types'; - - interface Props { - class?: string; - disabled?: boolean; - hasAudioModality?: boolean; - hasVisionModality?: boolean; - hasMcpPromptsSupport?: boolean; - hasMcpResourcesSupport?: boolean; - onFileUpload?: () => void; - onSystemPromptClick?: () => void; - onMcpPromptClick?: () => void; - onMcpSettingsClick?: () => void; - onMcpResourcesClick?: () => void; - } - - let { - class: className = '', - disabled = false, - hasAudioModality = false, - hasVisionModality = false, - hasMcpPromptsSupport = false, - hasMcpResourcesSupport = false, - onFileUpload, - onSystemPromptClick, - onMcpPromptClick, - onMcpSettingsClick, - onMcpResourcesClick - }: Props = $props(); - - let isNewChat = $derived(!page.params.id); - - let systemMessageTooltip = $derived( - isNewChat - ? 'Add custom system message for a new conversation' - : 'Inject custom system message at the beginning of the conversation' - ); - - let dropdownOpen = $state(false); - - let mcpServers = $derived(mcpStore.getServersSorted().filter((s) => s.enabled)); - let hasMcpServers = $derived(mcpServers.length > 0); - let mcpSearchQuery = $state(''); - let filteredMcpServers = $derived.by(() => { - const query = mcpSearchQuery.toLowerCase().trim(); - if (!query) return mcpServers; - return mcpServers.filter((s) => { - const name = getServerLabel(s).toLowerCase(); - const url = s.url.toLowerCase(); - return name.includes(query) || url.includes(query); - }); - }); - - function getServerLabel(server: MCPServerSettingsEntry): string { - return mcpStore.getServerLabel(server); - } - - function isServerEnabledForChat(serverId: string): boolean { - return conversationsStore.isMcpServerEnabledForChat(serverId); - } - - async function toggleServerForChat(serverId: string) { - await conversationsStore.toggleMcpServerForChat(serverId); - } - - function handleMcpSubMenuOpen(open: boolean) { - if (open) { - mcpSearchQuery = ''; - mcpStore.runHealthChecksForServers(mcpServers); - } - } - - function handleMcpPromptClick() { - dropdownOpen = false; - onMcpPromptClick?.(); - } - - function handleMcpSettingsClick() { - dropdownOpen = false; - onMcpSettingsClick?.(); - } - - function handleMcpResourcesClick() { - dropdownOpen = false; - onMcpResourcesClick?.(); - } - - const fileUploadTooltipText = 'Add files, system prompt or MCP Servers'; -</script> - -<div class="flex items-center gap-1 {className}"> - <DropdownMenu.Root bind:open={dropdownOpen}> - <DropdownMenu.Trigger name="Attach files" {disabled}> - <Tooltip.Root> - <Tooltip.Trigger class="w-full"> - <Button - class="file-upload-button h-8 w-8 rounded-full p-0" - {disabled} - variant="secondary" - type="button" - > - <span class="sr-only">{fileUploadTooltipText}</span> - - <Plus class="h-4 w-4" /> - </Button> - </Tooltip.Trigger> - - <Tooltip.Content> - <p>{fileUploadTooltipText}</p> - </Tooltip.Content> - </Tooltip.Root> - </DropdownMenu.Trigger> - - <DropdownMenu.Content align="start" class="w-48"> - {#if hasVisionModality} - <DropdownMenu.Item - class="images-button flex cursor-pointer items-center gap-2" - onclick={() => onFileUpload?.()} - > - <FILE_TYPE_ICONS.image class="h-4 w-4" /> - - <span>Images</span> - </DropdownMenu.Item> - {:else} - <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> - <Tooltip.Trigger class="w-full"> - <DropdownMenu.Item - class="images-button flex cursor-pointer items-center gap-2" - disabled - > - <FILE_TYPE_ICONS.image class="h-4 w-4" /> - - <span>Images</span> - </DropdownMenu.Item> - </Tooltip.Trigger> - - <Tooltip.Content side="right"> - <p>Image processing requires a vision model</p> - </Tooltip.Content> - </Tooltip.Root> - {/if} - - {#if hasAudioModality} - <DropdownMenu.Item - class="audio-button flex cursor-pointer items-center gap-2" - onclick={() => onFileUpload?.()} - > - <FILE_TYPE_ICONS.audio class="h-4 w-4" /> - - <span>Audio Files</span> - </DropdownMenu.Item> - {:else} - <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> - <Tooltip.Trigger class="w-full"> - <DropdownMenu.Item class="audio-button flex cursor-pointer items-center gap-2" disabled> - <FILE_TYPE_ICONS.audio class="h-4 w-4" /> - - <span>Audio Files</span> - </DropdownMenu.Item> - </Tooltip.Trigger> - - <Tooltip.Content side="right"> - <p>Audio files processing requires an audio model</p> - </Tooltip.Content> - </Tooltip.Root> - {/if} - - <DropdownMenu.Item - class="flex cursor-pointer items-center gap-2" - onclick={() => onFileUpload?.()} - > - <FILE_TYPE_ICONS.text class="h-4 w-4" /> - - <span>Text Files</span> - </DropdownMenu.Item> - - {#if hasVisionModality} - <DropdownMenu.Item - class="flex cursor-pointer items-center gap-2" - onclick={() => onFileUpload?.()} - > - <FILE_TYPE_ICONS.pdf class="h-4 w-4" /> - - <span>PDF Files</span> - </DropdownMenu.Item> - {:else} - <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> - <Tooltip.Trigger class="w-full"> - <DropdownMenu.Item - class="flex cursor-pointer items-center gap-2" - onclick={() => onFileUpload?.()} - > - <FILE_TYPE_ICONS.pdf class="h-4 w-4" /> - - <span>PDF Files</span> - </DropdownMenu.Item> - </Tooltip.Trigger> - - <Tooltip.Content side="right"> - <p>PDFs will be converted to text. Image-based PDFs may not work properly.</p> - </Tooltip.Content> - </Tooltip.Root> - {/if} - - <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> - <Tooltip.Trigger class="w-full"> - <DropdownMenu.Item - class="flex cursor-pointer items-center gap-2" - onclick={() => onSystemPromptClick?.()} - > - <MessageSquare class="h-4 w-4" /> - - <span>System Message</span> - </DropdownMenu.Item> - </Tooltip.Trigger> - - <Tooltip.Content side="right"> - <p>{systemMessageTooltip}</p> - </Tooltip.Content> - </Tooltip.Root> - - <DropdownMenu.Separator /> - - <DropdownMenu.Sub onOpenChange={handleMcpSubMenuOpen}> - <DropdownMenu.SubTrigger class="flex cursor-pointer items-center gap-2"> - <McpLogo class="h-4 w-4" /> - - <span>MCP Servers</span> - </DropdownMenu.SubTrigger> - - <DropdownMenu.SubContent class="w-72 pt-0"> - <DropdownMenuSearchable - placeholder="Search servers..." - bind:searchValue={mcpSearchQuery} - emptyMessage={hasMcpServers ? 'No servers found' : 'No MCP servers configured'} - isEmpty={filteredMcpServers.length === 0} - > - <div class="max-h-64 overflow-y-auto"> - {#each filteredMcpServers as server (server.id)} - {@const healthState = mcpStore.getHealthCheckState(server.id)} - {@const hasError = healthState.status === HealthCheckStatus.ERROR} - {@const isEnabledForChat = isServerEnabledForChat(server.id)} - - <button - type="button" - class="flex w-full items-center justify-between gap-2 rounded-sm px-2 py-2 text-left transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50" - onclick={() => !hasError && toggleServerForChat(server.id)} - disabled={hasError} - > - <div class="flex min-w-0 flex-1 items-center gap-2"> - {#if mcpStore.getServerFavicon(server.id)} - <img - src={mcpStore.getServerFavicon(server.id)} - alt="" - class="h-4 w-4 shrink-0 rounded-sm" - onerror={(e) => { - (e.currentTarget as HTMLImageElement).style.display = 'none'; - }} - /> - {/if} - - <span class="truncate text-sm">{getServerLabel(server)}</span> - - {#if hasError} - <span - class="shrink-0 rounded bg-destructive/15 px-1.5 py-0.5 text-xs text-destructive" - > - Error - </span> - {/if} - </div> - - <Switch - checked={isEnabledForChat} - disabled={hasError} - onclick={(e: MouseEvent) => e.stopPropagation()} - onCheckedChange={() => toggleServerForChat(server.id)} - /> - </button> - {/each} - </div> - - {#snippet footer()} - <DropdownMenu.Item - class="flex cursor-pointer items-center gap-2" - onclick={handleMcpSettingsClick} - > - <Settings class="h-4 w-4" /> - - <span>Manage MCP Servers</span> - </DropdownMenu.Item> - {/snippet} - </DropdownMenuSearchable> - </DropdownMenu.SubContent> - </DropdownMenu.Sub> - - {#if hasMcpPromptsSupport} - <DropdownMenu.Item - class="flex cursor-pointer items-center gap-2" - onclick={handleMcpPromptClick} - > - <Zap class="h-4 w-4" /> - - <span>MCP Prompt</span> - </DropdownMenu.Item> - {/if} - - {#if hasMcpResourcesSupport} - <DropdownMenu.Item - class="flex cursor-pointer items-center gap-2" - onclick={handleMcpResourcesClick} - > - <FolderOpen class="h-4 w-4" /> - - <span>MCP Resources</span> - </DropdownMenu.Item> - {/if} - </DropdownMenu.Content> - </DropdownMenu.Root> -</div> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsSheet.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsSheet.svelte deleted file mode 100644 index bf643dd7f25..00000000000 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionAttachmentsSheet.svelte +++ /dev/null @@ -1,170 +0,0 @@ -<script lang="ts"> - import { Plus, MessageSquare, Zap, FolderOpen } from '@lucide/svelte'; - import { Button } from '$lib/components/ui/button'; - import * as Sheet from '$lib/components/ui/sheet'; - import { FILE_TYPE_ICONS } from '$lib/constants'; - import { McpLogo } from '$lib/components/app'; - - interface Props { - class?: string; - disabled?: boolean; - hasAudioModality?: boolean; - hasVisionModality?: boolean; - hasMcpPromptsSupport?: boolean; - hasMcpResourcesSupport?: boolean; - onFileUpload?: () => void; - onSystemPromptClick?: () => void; - onMcpPromptClick?: () => void; - onMcpSettingsClick?: () => void; - onMcpResourcesClick?: () => void; - } - - let { - class: className = '', - disabled = false, - hasAudioModality = false, - hasVisionModality = false, - hasMcpPromptsSupport = false, - hasMcpResourcesSupport = false, - onFileUpload, - onSystemPromptClick, - onMcpPromptClick, - onMcpSettingsClick, - onMcpResourcesClick - }: Props = $props(); - - let sheetOpen = $state(false); - - function handleMcpPromptClick() { - sheetOpen = false; - onMcpPromptClick?.(); - } - - function handleMcpSettingsClick() { - onMcpSettingsClick?.(); - } - - function handleMcpResourcesClick() { - sheetOpen = false; - onMcpResourcesClick?.(); - } - - function handleSheetFileUpload() { - sheetOpen = false; - onFileUpload?.(); - } - - function handleSheetSystemPromptClick() { - sheetOpen = false; - onSystemPromptClick?.(); - } - - const fileUploadTooltipText = 'Add files, system prompt or MCP Servers'; - - const sheetItemClass = - 'flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-left text-sm transition-colors hover:bg-accent active:bg-accent disabled:cursor-not-allowed disabled:opacity-50'; -</script> - -<div class="flex items-center gap-1 {className}"> - <Sheet.Root bind:open={sheetOpen}> - <Button - class="file-upload-button h-8 w-8 rounded-full p-0" - {disabled} - variant="secondary" - type="button" - onclick={() => (sheetOpen = true)} - > - <span class="sr-only">{fileUploadTooltipText}</span> - - <Plus class="h-4 w-4" /> - </Button> - - <Sheet.Content side="bottom" class="max-h-[85vh] gap-0"> - <Sheet.Header> - <Sheet.Title>Add to chat</Sheet.Title> - - <Sheet.Description class="sr-only"> - Add files, system prompt or configure MCP servers - </Sheet.Description> - </Sheet.Header> - - <div class="flex flex-col gap-1 overflow-y-auto px-1.5 pb-2"> - <!-- Images --> - <button - type="button" - class={sheetItemClass} - disabled={!hasVisionModality} - onclick={handleSheetFileUpload} - > - <FILE_TYPE_ICONS.image class="h-4 w-4 shrink-0" /> - - <span>Images</span> - - {#if !hasVisionModality} - <span class="ml-auto text-xs text-muted-foreground">Requires vision model</span> - {/if} - </button> - - <!-- Audio --> - <button - type="button" - class={sheetItemClass} - disabled={!hasAudioModality} - onclick={handleSheetFileUpload} - > - <FILE_TYPE_ICONS.audio class="h-4 w-4 shrink-0" /> - - <span>Audio Files</span> - - {#if !hasAudioModality} - <span class="ml-auto text-xs text-muted-foreground">Requires audio model</span> - {/if} - </button> - - <button type="button" class={sheetItemClass} onclick={handleSheetFileUpload}> - <FILE_TYPE_ICONS.text class="h-4 w-4 shrink-0" /> - - <span>Text Files</span> - </button> - - <button type="button" class={sheetItemClass} onclick={handleSheetFileUpload}> - <FILE_TYPE_ICONS.pdf class="h-4 w-4 shrink-0" /> - - <span>PDF Files</span> - - {#if !hasVisionModality} - <span class="ml-auto text-xs text-muted-foreground">Text-only</span> - {/if} - </button> - - <button type="button" class={sheetItemClass} onclick={handleSheetSystemPromptClick}> - <MessageSquare class="h-4 w-4 shrink-0" /> - - <span>System Message</span> - </button> - - <button type="button" class={sheetItemClass} onclick={handleMcpSettingsClick}> - <McpLogo class="h-4 w-4 shrink-0" /> - - <span>MCP Servers</span> - </button> - - {#if hasMcpPromptsSupport} - <button type="button" class={sheetItemClass} onclick={handleMcpPromptClick}> - <Zap class="h-4 w-4 shrink-0" /> - - <span>MCP Prompt</span> - </button> - {/if} - - {#if hasMcpResourcesSupport} - <button type="button" class={sheetItemClass} onclick={handleMcpResourcesClick}> - <FolderOpen class="h-4 w-4 shrink-0" /> - - <span>MCP Resources</span> - </button> - {/if} - </div> - </Sheet.Content> - </Sheet.Root> -</div> diff --git a/tools/server/webui/src/lib/components/app/mcp/McpServersSelector.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionMcpServersSubmenu.svelte similarity index 53% rename from tools/server/webui/src/lib/components/app/mcp/McpServersSelector.svelte rename to tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionMcpServersSubmenu.svelte index ef701a5c09a..ee788a08844 100644 --- a/tools/server/webui/src/lib/components/app/mcp/McpServersSelector.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionMcpServersSubmenu.svelte @@ -1,62 +1,39 @@ <script lang="ts"> - import { Settings } from '@lucide/svelte'; - import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; + import { Settings, Plus } from '@lucide/svelte'; import { Switch } from '$lib/components/ui/switch'; - import { DropdownMenuSearchable, McpActiveServersAvatars } from '$lib/components/app'; + import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; + import { McpLogo, DropdownMenuSearchable } from '$lib/components/app'; import { conversationsStore } from '$lib/stores/conversations.svelte'; import { mcpStore } from '$lib/stores/mcp.svelte'; import { HealthCheckStatus } from '$lib/enums'; import type { MCPServerSettingsEntry } from '$lib/types'; + import { goto } from '$app/navigation'; interface Props { - class?: string; - disabled?: boolean; - onSettingsClick?: () => void; + onMcpSettingsClick?: () => void; } - let { class: className = '', disabled = false, onSettingsClick }: Props = $props(); + let { onMcpSettingsClick }: Props = $props(); - let searchQuery = $state(''); - let mcpServers = $derived(mcpStore.getServersSorted().filter((s) => s.enabled)); + let mcpSearchQuery = $state(''); + let allMcpServers = $derived(mcpStore.getServersSorted()); + let mcpServers = $derived(allMcpServers.filter((s) => s.enabled)); let hasMcpServers = $derived(mcpServers.length > 0); - let enabledMcpServersForChat = $derived( - mcpServers.filter((s) => conversationsStore.isMcpServerEnabledForChat(s.id) && s.url.trim()) - ); - let healthyEnabledMcpServers = $derived( - enabledMcpServersForChat.filter((s) => { - const healthState = mcpStore.getHealthCheckState(s.id); - return healthState.status !== HealthCheckStatus.ERROR; - }) - ); - let hasEnabledMcpServers = $derived(enabledMcpServersForChat.length > 0); - let mcpFavicons = $derived( - healthyEnabledMcpServers - .slice(0, 3) - .map((s) => ({ id: s.id, url: mcpStore.getServerFavicon(s.id) })) - .filter((f) => f.url !== null) - ); + // let hasAnyMcpServers = $derived(allMcpServers.length > 0); let filteredMcpServers = $derived.by(() => { - const query = searchQuery.toLowerCase().trim(); - if (query) { - return mcpServers.filter((s) => { - const name = getServerLabel(s).toLowerCase(); - const url = s.url.toLowerCase(); - return name.includes(query) || url.includes(query); - }); - } - return mcpServers; + const query = mcpSearchQuery.toLowerCase().trim(); + if (!query) return mcpServers; + return mcpServers.filter((s) => { + const name = getServerLabel(s).toLowerCase(); + const url = s.url.toLowerCase(); + return name.includes(query) || url.includes(query); + }); }); function getServerLabel(server: MCPServerSettingsEntry): string { return mcpStore.getServerLabel(server); } - function handleDropdownOpen(open: boolean) { - if (open) { - mcpStore.runHealthChecksForServers(mcpServers); - } - } - function isServerEnabledForChat(serverId: string): boolean { return conversationsStore.isMcpServerEnabledForChat(serverId); } @@ -64,38 +41,33 @@ async function toggleServerForChat(serverId: string) { await conversationsStore.toggleMcpServerForChat(serverId); } + + function handleMcpSubMenuOpen(open: boolean) { + if (open) { + mcpSearchQuery = ''; + mcpStore.runHealthChecksForServers(allMcpServers); + } + } + + function handleMcpSettingsClick() { + onMcpSettingsClick?.(); + + goto(`${hasMcpServers ? '' : '?add'}#/settings/mcp`); + } </script> -{#if hasMcpServers && hasEnabledMcpServers && mcpFavicons.length > 0} - <DropdownMenu.Root - onOpenChange={(open) => { - if (!open) { - searchQuery = ''; - } - handleDropdownOpen(open); - }} - > - <DropdownMenu.Trigger - {disabled} - onclick={(e) => { - e.preventDefault(); - e.stopPropagation(); - }} - > - <button - type="button" - class="inline-flex cursor-pointer items-center rounded-sm py-1 disabled:cursor-not-allowed disabled:opacity-60" - {disabled} - aria-label="MCP Servers" - > - <McpActiveServersAvatars class={className} /> - </button> - </DropdownMenu.Trigger> +<DropdownMenu.Sub onOpenChange={handleMcpSubMenuOpen}> + <DropdownMenu.SubTrigger class="flex cursor-pointer items-center gap-2"> + <McpLogo class="h-4 w-4" /> - <DropdownMenu.Content align="start" class="w-72 pt-0"> + <span>MCP Servers</span> + </DropdownMenu.SubTrigger> + + <DropdownMenu.SubContent class="w-72 pt-0"> + {#if hasMcpServers} <DropdownMenuSearchable - bind:searchValue={searchQuery} placeholder="Search servers..." + bind:searchValue={mcpSearchQuery} emptyMessage="No servers found" isEmpty={filteredMcpServers.length === 0} > @@ -107,7 +79,7 @@ <button type="button" - class="flex w-full items-center justify-between gap-2 px-2 py-2 text-left transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50" + class="flex w-full items-center justify-between gap-2 rounded-sm px-2 py-2 text-left transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50" onclick={() => !hasError && toggleServerForChat(server.id)} disabled={hasError} > @@ -147,7 +119,7 @@ {#snippet footer()} <DropdownMenu.Item class="flex cursor-pointer items-center gap-2" - onclick={onSettingsClick} + onclick={handleMcpSettingsClick} > <Settings class="h-4 w-4" /> @@ -155,6 +127,21 @@ </DropdownMenu.Item> {/snippet} </DropdownMenuSearchable> - </DropdownMenu.Content> - </DropdownMenu.Root> -{/if} + {:else} + <div class="px-2 py-3 text-center text-sm text-muted-foreground"> + No MCP servers configured + </div> + + <DropdownMenu.Separator /> + + <DropdownMenu.Item + class="flex cursor-pointer items-center gap-2" + onclick={handleMcpSettingsClick} + > + <Plus class="h-4 w-4" /> + + <span>Add MCP Servers</span> + </DropdownMenu.Item> + {/if} + </DropdownMenu.SubContent> +</DropdownMenu.Sub> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionSubmit.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionSubmit.svelte index 861cd182e82..878536c3da2 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionSubmit.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionSubmit.svelte @@ -7,20 +7,13 @@ interface Props { canSend?: boolean; disabled?: boolean; - isLoading?: boolean; showErrorState?: boolean; tooltipLabel?: string; } - let { - canSend = false, - disabled = false, - isLoading = false, - showErrorState = false, - tooltipLabel - }: Props = $props(); + let { canSend = false, disabled = false, showErrorState = false, tooltipLabel }: Props = $props(); - let isDisabled = $derived(!canSend || disabled || isLoading); + let isDisabled = $derived(!canSend || disabled); </script> {#snippet submitButton(props = {})} diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionToolsSubmenu.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionToolsSubmenu.svelte new file mode 100644 index 00000000000..3188e8bda44 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionToolsSubmenu.svelte @@ -0,0 +1,146 @@ +<script lang="ts"> + import { PencilRuler, ChevronDown, ChevronRight, Loader2, Info } from '@lucide/svelte'; + import { Checkbox } from '$lib/components/ui/checkbox'; + import * as Collapsible from '$lib/components/ui/collapsible'; + import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; + import * as Tooltip from '$lib/components/ui/tooltip'; + import { toolsStore } from '$lib/stores/tools.svelte'; + import { mcpStore } from '$lib/stores/mcp.svelte'; + import { useToolsPanel } from '$lib/hooks/use-tools-panel.svelte'; + + const toolsPanel = useToolsPanel(); + const hasMcpServersAvailable = $derived(mcpStore.getServersSorted().length > 0); +</script> + +<DropdownMenu.Sub onOpenChange={(open) => open && toolsPanel.handleOpen()}> + <DropdownMenu.SubTrigger class="flex cursor-pointer items-center gap-2"> + <PencilRuler class="h-4 w-4" /> + + <span>Tools</span> + </DropdownMenu.SubTrigger> + + <DropdownMenu.SubContent class="w-72 p-0"> + {#if toolsPanel.totalToolCount === 0} + {#if toolsStore.loading} + <div class="px-3 py-4 text-center text-sm text-muted-foreground"> + <Loader2 class="mx-auto mb-1 h-4 w-4 animate-spin" /> + Loading tools... + </div> + {:else if toolsStore.isToolsEndpointUnreachable} + <div class="grid gap-2.5 px-3 py-4 text-sm text-muted-foreground"> + <span class="flex gap-2"> + <Info class="mt-0.5 h-4 w-4 shrink-0" /> + + <span + >Run llama-server with <code>--tools</code> flag to enable + <strong>Built-in Tools</strong>.</span + > + </span> + + <span class="flex gap-2"> + <Info class="mt-0.5 h-4 w-4 shrink-0" /> + + <span + >{hasMcpServersAvailable ? 'Enable' : 'Add'} MCP Server(s) to access + <strong>MCP Tools</strong>.</span + > + </span> + </div> + {:else if toolsStore.error} + <div class="px-3 py-4 text-center text-sm text-muted-foreground">Failed to load tools</div> + {:else if toolsPanel.noToolsInfoMessage} + <div class="flex gap-2 px-3 py-4 text-sm text-muted-foreground"> + <Info class="mt-0.5 h-4 w-4 shrink-0" /> + + <span>{toolsPanel.noToolsInfoMessage}</span> + </div> + {:else} + <div class="px-3 py-4 text-center text-sm text-muted-foreground">No tools available</div> + {/if} + {:else} + <div class="max-h-80 overflow-y-auto p-2 pr-1"> + {#each toolsPanel.activeGroups as group (group.label)} + {@const isExpanded = toolsPanel.expandedGroups.has(group.label)} + {@const { checked, indeterminate } = toolsPanel.getGroupCheckedState(group)} + {@const favicon = toolsPanel.getFavicon(group)} + + <Collapsible.Root + open={isExpanded} + onOpenChange={() => toolsPanel.toggleGroupExpanded(group.label)} + > + <div class="flex items-center gap-1"> + <Collapsible.Trigger + class="flex min-w-0 flex-1 items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-muted/50" + > + {#if isExpanded} + <ChevronDown class="h-3.5 w-3.5 shrink-0" /> + {:else} + <ChevronRight class="h-3.5 w-3.5 shrink-0" /> + {/if} + + <span class="inline-flex min-w-0 items-center gap-1.5 font-medium"> + {#if favicon} + <img + src={favicon} + alt="" + class="h-4 w-4 shrink-0 rounded-sm" + onerror={(e) => { + (e.currentTarget as HTMLImageElement).style.display = 'none'; + }} + /> + {/if} + + <span class="truncate">{group.label}</span> + </span> + + <span class="ml-auto shrink-0 text-xs text-muted-foreground"> + {toolsPanel.getEnabledToolCount(group)}/{group.tools.length} + </span> + </Collapsible.Trigger> + + <Tooltip.Root> + <Tooltip.Trigger> + <Checkbox + {checked} + {indeterminate} + onCheckedChange={() => toolsStore.toggleGroup(group)} + class="mr-2 h-4 w-4 shrink-0" + /> + </Tooltip.Trigger> + + <Tooltip.Content side="right"> + <p> + {checked ? 'Disable' : 'Enable'} + {group.tools.length} tool{group.tools.length !== 1 ? 's' : ''} + </p> + </Tooltip.Content> + </Tooltip.Root> + </div> + + <Collapsible.Content> + <div class="ml-4 flex flex-col gap-0.5 border-l border-border/50 pl-2"> + {#each group.tools as tool (tool.function.name)} + <button + type="button" + class="flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-sm transition-colors hover:bg-muted/50" + onclick={() => toolsStore.toggleTool(tool.function.name)} + > + <Checkbox + checked={toolsStore.isToolEnabled(tool.function.name)} + onCheckedChange={() => toolsStore.toggleTool(tool.function.name)} + class="h-4 w-4 shrink-0" + /> + + <span class="min-w-0 flex-1 truncate font-mono text-[12px]"> + {tool.function.name} + </span> + </button> + {/each} + </div> + </Collapsible.Content> + </Collapsible.Root> + {/each} + </div> + {/if} + </DropdownMenu.SubContent> +</DropdownMenu.Sub> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte index 54384edfc8e..f3150ee898b 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActions.svelte @@ -6,21 +6,19 @@ ChatFormActionAttachmentsSheet, ChatFormActionRecord, ChatFormActionSubmit, - McpServersSelector, - ModelsSelector, + ModelsSelectorDropdown, ModelsSelectorSheet } from '$lib/components/app'; - import { SETTINGS_SECTION_TITLES } from '$lib/constants'; - import { mcpStore } from '$lib/stores/mcp.svelte'; - import { getChatSettingsDialogContext } from '$lib/contexts'; import { FileTypeCategory } from '$lib/enums'; - import { getFileTypeCategory } from '$lib/utils'; - import { config } from '$lib/stores/settings.svelte'; + import { IsMobile } from '$lib/hooks/is-mobile.svelte'; + import { chatStore } from '$lib/stores/chat.svelte'; + import { mcpStore } from '$lib/stores/mcp.svelte'; import { modelsStore, modelOptions, selectedModelId } from '$lib/stores/models.svelte'; import { isRouterMode, serverError } from '$lib/stores/server.svelte'; - import { chatStore } from '$lib/stores/chat.svelte'; + import { config } from '$lib/stores/settings.svelte'; import { activeMessages, conversationsStore } from '$lib/stores/conversations.svelte'; - import { IsMobile } from '$lib/hooks/is-mobile.svelte'; + import { getFileTypeCategory } from '$lib/utils'; + import { goto } from '$app/navigation'; interface Props { canSend?: boolean; @@ -165,7 +163,8 @@ return ''; }); - let selectorModelRef: ModelsSelector | ModelsSelectorSheet | undefined = $state(undefined); + let selectorModelRef: ModelsSelectorDropdown | ModelsSelectorSheet | undefined = + $state(undefined); let isMobile = new IsMobile(); @@ -173,8 +172,6 @@ selectorModelRef?.open(); } - const chatSettingsDialog = getChatSettingsDialogContext(); - let hasMcpPromptsSupport = $derived.by(() => { const perChatOverrides = conversationsStore.getAllMcpServerOverrides(); @@ -200,8 +197,8 @@ {onFileUpload} {onSystemPromptClick} {onMcpPromptClick} + onMcpSettingsClick={() => goto('#/settings/mcp')} {onMcpResourcesClick} - onMcpSettingsClick={() => chatSettingsDialog.open(SETTINGS_SECTION_TITLES.MCP)} /> {:else} <ChatFormActionAttachmentsDropdown @@ -214,17 +211,12 @@ {onSystemPromptClick} {onMcpPromptClick} {onMcpResourcesClick} - onMcpSettingsClick={() => chatSettingsDialog.open(SETTINGS_SECTION_TITLES.MCP)} + onMcpSettingsClick={() => goto('#/settings/mcp')} /> {/if} - - <McpServersSelector - {disabled} - onSettingsClick={() => chatSettingsDialog.open(SETTINGS_SECTION_TITLES.MCP)} - /> </div> - <div class="ml-auto flex items-center gap-1.5"> + <div class="ml-auto flex items-center gap-2"> {#if isMobile.current} <ModelsSelectorSheet disabled={disabled || isOffline} @@ -234,7 +226,7 @@ useGlobalSelection /> {:else} - <ModelsSelector + <ModelsSelectorDropdown disabled={disabled || isOffline} bind:this={selectorModelRef} currentModel={conversationModel} @@ -244,7 +236,7 @@ {/if} </div> - {#if isLoading} + {#if isLoading && !hasText} <Button type="button" variant="secondary" @@ -263,7 +255,6 @@ <ChatFormActionSubmit canSend={canSend && hasModelSelected && isSelectedModelInCache} {disabled} - {isLoading} tooltipLabel={submitTooltip} showErrorState={hasModelSelected && !isSelectedModelInCache} /> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionsAttachments/ChatFormActionAttachmentsDropdown.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionsAttachments/ChatFormActionAttachmentsDropdown.svelte new file mode 100644 index 00000000000..9c3d2b8de51 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionsAttachments/ChatFormActionAttachmentsDropdown.svelte @@ -0,0 +1,182 @@ +<script lang="ts"> + import { Plus } from '@lucide/svelte'; + import { Button } from '$lib/components/ui/button'; + import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; + import * as Tooltip from '$lib/components/ui/tooltip'; + import { + ATTACHMENT_FILE_ITEMS, + ATTACHMENT_EXTRA_ITEMS, + ATTACHMENT_MCP_ITEMS, + ATTACHMENT_TOOLTIP_TEXT, + TOOLTIP_DELAY_DURATION + } from '$lib/constants'; + import { AttachmentMenuItemId } from '$lib/enums'; + import { ChatFormActionToolsSubmenu, ChatFormActionMcpServersSubmenu } from '$lib/components/app'; + + import { useAttachmentMenu } from '$lib/hooks/use-attachment-menu.svelte'; + + interface Props { + class?: string; + disabled?: boolean; + hasAudioModality?: boolean; + hasVisionModality?: boolean; + hasMcpPromptsSupport?: boolean; + hasMcpResourcesSupport?: boolean; + onFileUpload?: () => void; + onSystemPromptClick?: () => void; + onMcpPromptClick?: () => void; + onMcpSettingsClick?: () => void; + onMcpResourcesClick?: () => void; + } + + let { + class: className = '', + disabled = false, + hasAudioModality = false, + hasVisionModality = false, + hasMcpPromptsSupport = false, + hasMcpResourcesSupport = false, + onFileUpload, + onSystemPromptClick, + onMcpPromptClick, + onMcpSettingsClick, + onMcpResourcesClick + }: Props = $props(); + + let dropdownOpen = $state(false); + + function handleMcpSettingsClick() { + dropdownOpen = false; + onMcpSettingsClick?.(); + } + + const attachmentMenu = useAttachmentMenu( + () => ({ hasVisionModality, hasAudioModality, hasMcpPromptsSupport, hasMcpResourcesSupport }), + () => ({ onFileUpload, onSystemPromptClick, onMcpPromptClick, onMcpResourcesClick }), + () => { + dropdownOpen = false; + } + ); +</script> + +<div class="flex items-center gap-1 {className}"> + <DropdownMenu.Root bind:open={dropdownOpen}> + <DropdownMenu.Trigger name="Attach files" {disabled}> + <Tooltip.Root> + <Tooltip.Trigger class="w-full"> + <Button + class="file-upload-button h-8 w-8 rounded-full p-0" + {disabled} + variant="secondary" + type="button" + > + <span class="sr-only">{ATTACHMENT_TOOLTIP_TEXT}</span> + + <Plus class="h-4 w-4" /> + </Button> + </Tooltip.Trigger> + + <Tooltip.Content> + <p>{ATTACHMENT_TOOLTIP_TEXT}</p> + </Tooltip.Content> + </Tooltip.Root> + </DropdownMenu.Trigger> + + <DropdownMenu.Content align="start" class="w-48"> + {#each ATTACHMENT_FILE_ITEMS as item (item.id)} + {@const enabled = attachmentMenu.isItemEnabled(item.enabledWhen)} + {#if enabled} + <DropdownMenu.Item + class="{item.class ?? ''} flex cursor-pointer items-center gap-2" + onclick={() => attachmentMenu.callbacks[item.action]()} + > + <item.icon class="h-4 w-4" /> + + <span>{item.label}</span> + </DropdownMenu.Item> + {:else if item.disabledTooltip} + <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> + <Tooltip.Trigger class="w-full"> + <DropdownMenu.Item + class="{item.class ?? ''} flex cursor-pointer items-center gap-2" + disabled + > + <item.icon class="h-4 w-4" /> + + <span>{item.label}</span> + </DropdownMenu.Item> + </Tooltip.Trigger> + + <Tooltip.Content side="right"> + <p>{item.disabledTooltip}</p> + </Tooltip.Content> + </Tooltip.Root> + {/if} + {/each} + + {#if !attachmentMenu.isItemEnabled('hasVisionModality')} + <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> + <Tooltip.Trigger class="w-full"> + <DropdownMenu.Item + class="flex cursor-pointer items-center gap-2" + onclick={attachmentMenu.callbacks.onFileUpload} + > + {@const pdfItem = ATTACHMENT_FILE_ITEMS.find( + (i) => i.id === AttachmentMenuItemId.PDF + )} + {#if pdfItem} + <pdfItem.icon class="h-4 w-4" /> + + <span>{pdfItem.label}</span> + {/if} + </DropdownMenu.Item> + </Tooltip.Trigger> + + <Tooltip.Content side="right"> + <p>PDFs will be converted to text. Image-based PDFs may not work properly.</p> + </Tooltip.Content> + </Tooltip.Root> + {/if} + + <DropdownMenu.Separator /> + + {#each ATTACHMENT_EXTRA_ITEMS as item (item.id)} + {#if item.id === AttachmentMenuItemId.SYSTEM_MESSAGE} + <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> + <Tooltip.Trigger class="w-full"> + <DropdownMenu.Item + class="flex cursor-pointer items-center gap-2" + onclick={() => attachmentMenu.callbacks[item.action]()} + > + <item.icon class="h-4 w-4" /> + + <span>{item.label}</span> + </DropdownMenu.Item> + </Tooltip.Trigger> + + <Tooltip.Content side="right"> + <p>{attachmentMenu.getSystemMessageTooltip()}</p> + </Tooltip.Content> + </Tooltip.Root> + {/if} + {/each} + + <ChatFormActionToolsSubmenu /> + + <ChatFormActionMcpServersSubmenu onMcpSettingsClick={handleMcpSettingsClick} /> + + {#each ATTACHMENT_MCP_ITEMS as item (item.id)} + {#if attachmentMenu.isItemVisible(item.visibleWhen)} + <DropdownMenu.Item + class="flex cursor-pointer items-center gap-2" + onclick={() => attachmentMenu.callbacks[item.action]()} + > + <item.icon class="h-4 w-4" /> + + <span>{item.label}</span> + </DropdownMenu.Item> + {/if} + {/each} + </DropdownMenu.Content> + </DropdownMenu.Root> +</div> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionsAttachments/ChatFormActionAttachmentsSheet.svelte b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionsAttachments/ChatFormActionAttachmentsSheet.svelte new file mode 100644 index 00000000000..f7115b81712 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatForm/ChatFormActions/ChatFormActionsAttachments/ChatFormActionAttachmentsSheet.svelte @@ -0,0 +1,184 @@ +<script lang="ts"> + import { Plus } from '@lucide/svelte'; + import { Button } from '$lib/components/ui/button'; + import * as Tooltip from '$lib/components/ui/tooltip'; + import * as Sheet from '$lib/components/ui/sheet'; + import { TOOLTIP_DELAY_DURATION } from '$lib/constants'; + import { + ATTACHMENT_FILE_ITEMS, + ATTACHMENT_EXTRA_ITEMS, + ATTACHMENT_MCP_ITEMS, + ATTACHMENT_TOOLTIP_TEXT + } from '$lib/constants/attachment-menu'; + import { ChatFormActionToolsSubmenu, ChatFormActionMcpServersSubmenu } from '$lib/components/app'; + import { useAttachmentMenu } from '$lib/hooks/use-attachment-menu.svelte'; + import { AttachmentMenuItemId } from '$lib/enums'; + + interface Props { + class?: string; + disabled?: boolean; + hasAudioModality?: boolean; + hasVisionModality?: boolean; + hasMcpPromptsSupport?: boolean; + hasMcpResourcesSupport?: boolean; + onFileUpload?: () => void; + onSystemPromptClick?: () => void; + onMcpPromptClick?: () => void; + onMcpSettingsClick?: () => void; + onMcpResourcesClick?: () => void; + } + + let { + class: className = '', + disabled = false, + hasAudioModality = false, + hasVisionModality = false, + hasMcpPromptsSupport = false, + hasMcpResourcesSupport = false, + onFileUpload, + onSystemPromptClick, + onMcpPromptClick, + onMcpSettingsClick, + onMcpResourcesClick + }: Props = $props(); + + let sheetOpen = $state(false); + + const attachmentMenu = useAttachmentMenu( + () => ({ hasVisionModality, hasAudioModality, hasMcpPromptsSupport, hasMcpResourcesSupport }), + () => ({ onFileUpload, onSystemPromptClick, onMcpPromptClick, onMcpResourcesClick }), + () => { + sheetOpen = false; + } + ); + + function handleMcpSettingsClick() { + sheetOpen = false; + onMcpSettingsClick?.(); + } + + const sheetItemClass = + 'flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-left text-sm transition-colors hover:bg-accent active:bg-accent disabled:cursor-not-allowed disabled:opacity-50'; +</script> + +<div class="flex items-center gap-1 {className}"> + <Sheet.Root bind:open={sheetOpen}> + <Button + class="file-upload-button h-8 w-8 rounded-full p-0" + {disabled} + variant="secondary" + type="button" + onclick={() => (sheetOpen = true)} + > + <span class="sr-only">{ATTACHMENT_TOOLTIP_TEXT}</span> + + <Plus class="h-4 w-4" /> + </Button> + + <Sheet.Content side="bottom" class="max-h-[85vh] gap-0 overflow-y-auto"> + <Sheet.Header> + <Sheet.Title>Add to chat</Sheet.Title> + + <Sheet.Description class="sr-only"> + Add files, system prompt or configure MCP servers + </Sheet.Description> + </Sheet.Header> + + <div class="flex flex-col gap-1 px-1.5 pb-2"> + {#each ATTACHMENT_FILE_ITEMS as item (item.id)} + {@const enabled = attachmentMenu.isItemEnabled(item.enabledWhen)} + {#if enabled} + <button + type="button" + class={sheetItemClass} + onclick={() => attachmentMenu.callbacks[item.action]()} + > + <item.icon class="h-4 w-4 shrink-0" /> + + <span>{item.label}</span> + </button> + {:else if item.disabledTooltip} + <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> + <Tooltip.Trigger> + <button type="button" class={sheetItemClass} disabled> + <item.icon class="h-4 w-4 shrink-0" /> + + <span>{item.label}</span> + </button> + </Tooltip.Trigger> + + <Tooltip.Content side="right"> + <p>{item.disabledTooltip}</p> + </Tooltip.Content> + </Tooltip.Root> + {/if} + {/each} + + {#if !attachmentMenu.isItemEnabled('hasVisionModality')} + {@const pdfItem = ATTACHMENT_FILE_ITEMS.find((i) => i.id === AttachmentMenuItemId.PDF)} + {#if pdfItem} + <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> + <Tooltip.Trigger> + <button + type="button" + class={sheetItemClass} + onclick={() => attachmentMenu.callbacks[pdfItem.action]()} + > + <pdfItem.icon class="h-4 w-4 shrink-0" /> + + <span>{pdfItem.label}</span> + </button> + </Tooltip.Trigger> + + <Tooltip.Content side="right"> + <p>PDFs will be converted to text. Image-based PDFs may not work properly.</p> + </Tooltip.Content> + </Tooltip.Root> + {/if} + {/if} + + {#each ATTACHMENT_EXTRA_ITEMS as item (item.id)} + {#if item.id === AttachmentMenuItemId.SYSTEM_MESSAGE} + <Tooltip.Root delayDuration={TOOLTIP_DELAY_DURATION}> + <Tooltip.Trigger> + <button + type="button" + class={sheetItemClass} + onclick={() => attachmentMenu.callbacks[item.action]()} + > + <item.icon class="h-4 w-4 shrink-0" /> + + <span>{item.label}</span> + </button> + </Tooltip.Trigger> + + <Tooltip.Content side="right"> + <p>{attachmentMenu.getSystemMessageTooltip()}</p> + </Tooltip.Content> + </Tooltip.Root> + {/if} + {/each} + + <div class="my-2 border-t"></div> + + <ChatFormActionToolsSubmenu /> + + <ChatFormActionMcpServersSubmenu onMcpSettingsClick={handleMcpSettingsClick} /> + + {#each ATTACHMENT_MCP_ITEMS as item (item.id)} + {#if attachmentMenu.isItemVisible(item.visibleWhen)} + <button + type="button" + class={sheetItemClass} + onclick={() => attachmentMenu.callbacks[item.action]()} + > + <item.icon class="h-4 w-4 shrink-0" /> + + <span>{item.label}</span> + </button> + {/if} + {/each} + </div> + </Sheet.Content> + </Sheet.Root> +</div> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage.svelte index deb393a4b30..b3f8e9d7864 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessage.svelte @@ -1,12 +1,12 @@ <script lang="ts"> import { goto } from '$app/navigation'; - import { base } from '$app/paths'; import { getChatActionsContext, setMessageEditContext } from '$lib/contexts'; import { chatStore, pendingEditMessageId } from '$lib/stores/chat.svelte'; import { conversationsStore } from '$lib/stores/conversations.svelte'; import { DatabaseService } from '$lib/services/database.service'; import { SYSTEM_MESSAGE_PLACEHOLDER } from '$lib/constants'; import { MessageRole, AttachmentType } from '$lib/enums'; + import { fadeInView } from '$lib/actions/fade-in-view.svelte'; import { ChatMessageAssistant, ChatMessageUser, @@ -118,7 +118,7 @@ const conversationDeleted = await chatStore.removeSystemPromptPlaceholder(message.id); if (conversationDeleted) { - goto(`${base}/`); + goto(`#/`); } return; @@ -138,7 +138,7 @@ const conversationDeleted = await chatStore.removeSystemPromptPlaceholder(message.id); if (conversationDeleted) { - goto(`${base}/`); + goto(`#/`); } } else { chatActions.delete(message); @@ -200,7 +200,7 @@ const conversationDeleted = await chatStore.removeSystemPromptPlaceholder(message.id); isEditing = false; if (conversationDeleted) { - goto(`${base}/`); + goto(`#/`); } return; } @@ -252,70 +252,72 @@ } </script> -{#if message.role === MessageRole.SYSTEM} - <ChatMessageSystem - bind:textareaElement - class={className} - {deletionInfo} - {message} - onConfirmDelete={handleConfirmDelete} - onCopy={handleCopy} - onDelete={handleDelete} - onEdit={handleEdit} - onNavigateToSibling={handleNavigateToSibling} - onShowDeleteDialogChange={handleShowDeleteDialogChange} - {showDeleteDialog} - {siblingInfo} - /> -{:else if mcpPromptExtra} - <ChatMessageMcpPrompt - class={className} - {deletionInfo} - {message} - mcpPrompt={mcpPromptExtra} - onConfirmDelete={handleConfirmDelete} - onCopy={handleCopy} - onDelete={handleDelete} - onEdit={handleEdit} - onNavigateToSibling={handleNavigateToSibling} - onShowDeleteDialogChange={handleShowDeleteDialogChange} - {showDeleteDialog} - {siblingInfo} - /> -{:else if message.role === MessageRole.USER} - <ChatMessageUser - class={className} - {deletionInfo} - {message} - onConfirmDelete={handleConfirmDelete} - onCopy={handleCopy} - onDelete={handleDelete} - onEdit={handleEdit} - onForkConversation={handleForkConversation} - onNavigateToSibling={handleNavigateToSibling} - onShowDeleteDialogChange={handleShowDeleteDialogChange} - {showDeleteDialog} - {siblingInfo} - /> -{:else} - <ChatMessageAssistant - bind:textareaElement - class={className} - {deletionInfo} - {isLastAssistantMessage} - {message} - {toolMessages} - messageContent={message.content} - onConfirmDelete={handleConfirmDelete} - onContinue={handleContinue} - onCopy={handleCopy} - onDelete={handleDelete} - onEdit={handleEdit} - onForkConversation={handleForkConversation} - onNavigateToSibling={handleNavigateToSibling} - onRegenerate={handleRegenerate} - onShowDeleteDialogChange={handleShowDeleteDialogChange} - {showDeleteDialog} - {siblingInfo} - /> -{/if} +<div use:fadeInView> + {#if message.role === MessageRole.SYSTEM} + <ChatMessageSystem + bind:textareaElement + class={className} + {deletionInfo} + {message} + onConfirmDelete={handleConfirmDelete} + onCopy={handleCopy} + onDelete={handleDelete} + onEdit={handleEdit} + onNavigateToSibling={handleNavigateToSibling} + onShowDeleteDialogChange={handleShowDeleteDialogChange} + {showDeleteDialog} + {siblingInfo} + /> + {:else if mcpPromptExtra} + <ChatMessageMcpPrompt + class={className} + {deletionInfo} + {message} + mcpPrompt={mcpPromptExtra} + onConfirmDelete={handleConfirmDelete} + onCopy={handleCopy} + onDelete={handleDelete} + onEdit={handleEdit} + onNavigateToSibling={handleNavigateToSibling} + onShowDeleteDialogChange={handleShowDeleteDialogChange} + {showDeleteDialog} + {siblingInfo} + /> + {:else if message.role === MessageRole.USER} + <ChatMessageUser + class={className} + {deletionInfo} + {message} + onConfirmDelete={handleConfirmDelete} + onCopy={handleCopy} + onDelete={handleDelete} + onEdit={handleEdit} + onForkConversation={handleForkConversation} + onNavigateToSibling={handleNavigateToSibling} + onShowDeleteDialogChange={handleShowDeleteDialogChange} + {showDeleteDialog} + {siblingInfo} + /> + {:else} + <ChatMessageAssistant + bind:textareaElement + class={className} + {deletionInfo} + {isLastAssistantMessage} + {message} + {toolMessages} + messageContent={message.content} + onConfirmDelete={handleConfirmDelete} + onContinue={handleContinue} + onCopy={handleCopy} + onDelete={handleDelete} + onEdit={handleEdit} + onForkConversation={handleForkConversation} + onNavigateToSibling={handleNavigateToSibling} + onRegenerate={handleRegenerate} + onShowDeleteDialogChange={handleShowDeleteDialogChange} + {showDeleteDialog} + {siblingInfo} + /> + {/if} +</div> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageActionCard.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageActionCard.svelte new file mode 100644 index 00000000000..bccfa9351fa --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageActionCard.svelte @@ -0,0 +1,23 @@ +<script lang="ts"> + import type { Snippet, Component } from 'svelte'; + + interface Props { + icon: Component<{ class?: string }>; + message: Snippet; + actions: Snippet; + } + + let { icon: Icon, message, actions }: Props = $props(); +</script> + +<div class="my-2 rounded-lg border border-border bg-card p-3"> + <div class="mb-3 flex items-center gap-2 text-sm"> + <Icon class="h-4 w-4 shrink-0 text-muted-foreground" /> + <span> + {@render message()} + </span> + </div> + <div class="flex flex-wrap items-center gap-2"> + {@render actions()} + </div> +</div> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageAgenticContent.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageAgenticContent.svelte index cdc0cef8c59..998637885ba 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageAgenticContent.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageAgenticContent.svelte @@ -1,38 +1,104 @@ <script lang="ts"> + import { Wrench, Loader2, Brain } from '@lucide/svelte'; import { ChatMessageStatistics, CollapsibleContentBlock, MarkdownContent, - SyntaxHighlightedCode + SyntaxHighlightedCode, + ChatMessagePermissionRequest, + ChatMessageContinueRequest } from '$lib/components/app'; - import { config } from '$lib/stores/settings.svelte'; - import { Wrench, Loader2, Brain } from '@lucide/svelte'; - import { AgenticSectionType, FileTypeText } from '$lib/enums'; - import { formatJsonPretty } from '$lib/utils'; + + import { + AgenticSectionType, + ChatMessageStatsView, + FileTypeText, + ToolPermissionDecision + } from '$lib/enums'; + import type { + ChatMessageAgenticTimings, + ChatMessageAgenticTurnStats, + DatabaseMessage + } from '$lib/types'; import { deriveAgenticSections, + formatJsonPretty, parseToolResultWithImages, type AgenticSection, type ToolResultLine } from '$lib/utils'; - import type { DatabaseMessage } from '$lib/types/database'; - import type { ChatMessageAgenticTimings, ChatMessageAgenticTurnStats } from '$lib/types/chat'; - import { ChatMessageStatsView } from '$lib/enums'; + import { + agenticPendingPermissionRequest, + agenticResolvePermission, + agenticPendingContinueRequest, + agenticResolveContinue + } from '$lib/stores/agentic.svelte'; + import { config } from '$lib/stores/settings.svelte'; interface Props { message: DatabaseMessage; toolMessages?: DatabaseMessage[]; isStreaming?: boolean; + isLastAssistantMessage?: boolean; highlightTurns?: boolean; } - let { message, toolMessages = [], isStreaming = false, highlightTurns = false }: Props = $props(); + let { + message, + toolMessages = [], + isStreaming = false, + isLastAssistantMessage = false, + highlightTurns = false + }: Props = $props(); let expandedStates: Record<number, boolean> = $state({}); const showToolCallInProgress = $derived(config().showToolCallInProgress as boolean); const showThoughtInProgress = $derived(config().showThoughtInProgress as boolean); + let permissionDismissed = $state(false); + + const pendingPermission = $derived( + isStreaming && isLastAssistantMessage ? agenticPendingPermissionRequest(message.convId) : null + ); + + // Reset dismissed when pendingPermission changes (new request or cleared) + let prevPendingRef: typeof pendingPermission = null; + $effect(() => { + if (pendingPermission !== prevPendingRef) { + prevPendingRef = pendingPermission; + if (pendingPermission) { + permissionDismissed = false; + } + } + }); + + function handlePermission(decision: ToolPermissionDecision) { + permissionDismissed = true; + agenticResolvePermission(message.convId, decision); + } + + let continueDismissed = $state(false); + + const pendingContinue = $derived( + isStreaming && isLastAssistantMessage ? agenticPendingContinueRequest(message.convId) : false + ); + + let prevContinueRef = false; + $effect(() => { + if (pendingContinue !== prevContinueRef) { + prevContinueRef = pendingContinue; + if (pendingContinue) { + continueDismissed = false; + } + } + }); + + function handleContinue(shouldContinue: boolean) { + continueDismissed = true; + agenticResolveContinue(message.convId, shouldContinue); + } + const sections = $derived(deriveAgenticSections(message, toolMessages, [], isStreaming)); // Parse tool results with images @@ -201,7 +267,11 @@ <Loader2 class="h-3 w-3 animate-spin" /> {/if} </div> - {#if section.toolResult} + {#if isPending} + <div class="rounded bg-muted/30 p-2 text-xs text-muted-foreground italic"> + Waiting for result... + </div> + {:else if section.toolResult} <div class="overflow-auto rounded-lg border border-border bg-muted p-4"> {#each section.parsedLines as line, i (i)} <div class="font-mono text-xs leading-relaxed whitespace-pre-wrap">{line.text}</div> @@ -215,10 +285,8 @@ {/if} {/each} </div> - {:else if isPending} - <div class="rounded bg-muted/30 p-2 text-xs text-muted-foreground italic"> - Waiting for result... - </div> + {:else} + <div class="rounded bg-muted/30 p-2 text-xs text-muted-foreground italic">No output</div> {/if} </div> </CollapsibleContentBlock> @@ -289,6 +357,18 @@ {@render renderSection(section, index)} {/each} {/if} + + {#if pendingPermission && !permissionDismissed} + <ChatMessagePermissionRequest + toolName={pendingPermission.toolName} + serverLabel={pendingPermission.serverLabel} + onDecision={handlePermission} + /> + {/if} + + {#if pendingContinue && !continueDismissed} + <ChatMessageContinueRequest onDecision={handleContinue} /> + {/if} </div> <style> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageAssistant.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageAssistant.svelte index 7030ca88508..5ca577fc567 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageAssistant.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageAssistant.svelte @@ -4,7 +4,7 @@ ChatMessageActions, ChatMessageStatistics, ModelBadge, - ModelsSelector + ModelsSelectorDropdown } from '$lib/components/app'; import { getMessageEditContext } from '$lib/contexts'; import { useProcessingState } from '$lib/hooks/use-processing-state.svelte'; @@ -308,6 +308,7 @@ {message} {toolMessages} isStreaming={isChatStreaming()} + {isLastAssistantMessage} highlightTurns={highlightAgenticTurns} /> {/if} @@ -336,10 +337,10 @@ class="inline-flex flex-wrap items-start gap-2 text-xs text-muted-foreground" > {#if isRouter} - <ModelsSelector + <ModelsSelectorDropdown currentModel={displayedModel} disabled={isLoading()} - onModelChange={async (modelId, modelName) => { + onModelChange={async (modelId: string, modelName: string) => { const status = modelsStore.getModelStatus(modelId); if (status !== ServerModelStatus.LOADED) { diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageContinueRequest.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageContinueRequest.svelte new file mode 100644 index 00000000000..bbb1f0ac2bd --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageContinueRequest.svelte @@ -0,0 +1,30 @@ +<script lang="ts"> + import { RotateCw } from '@lucide/svelte'; + import { Button } from '$lib/components/ui/button'; + import ChatMessageActionCard from './ChatMessageActionCard.svelte'; + + interface Props { + onDecision: (shouldContinue: boolean) => void; + } + + let { onDecision }: Props = $props(); +</script> + +<ChatMessageActionCard icon={RotateCw}> + {#snippet message()} + Agentic turn limit reached. Continue? + {/snippet} + + {#snippet actions()} + <Button size="sm" onclick={() => onDecision(true)}>Continue</Button> + + <Button + variant="destructive" + size="sm" + class="text-destructive hover:text-destructive" + onclick={() => onDecision(false)} + > + Stop + </Button> + {/snippet} +</ChatMessageActionCard> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessagePermissionRequest.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessagePermissionRequest.svelte new file mode 100644 index 00000000000..a8fbdd29a9b --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessagePermissionRequest.svelte @@ -0,0 +1,88 @@ +<script lang="ts"> + import { ChevronDown, ShieldQuestion } from '@lucide/svelte'; + import { Button } from '$lib/components/ui/button'; + import * as ButtonGroup from '$lib/components/ui/button-group'; + import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; + import { ToolSource, ToolPermissionDecision } from '$lib/enums'; + import { TOOL_SERVER_LABELS } from '$lib/constants'; + import { toolsStore } from '$lib/stores/tools.svelte'; + import ChatMessageActionCard from './ChatMessageActionCard.svelte'; + + interface Props { + toolName: string; + serverLabel: string; + onDecision: (decision: ToolPermissionDecision) => void; + } + + let { toolName, serverLabel, onDecision }: Props = $props(); +</script> + +<ChatMessageActionCard icon={ShieldQuestion}> + {#snippet message()} + Allow use of + + <span class="font-semibold">{toolName}</span> + + {#if serverLabel} + from <span class="font-semibold">{serverLabel}</span> + {/if} + + ? + {/snippet} + + {#snippet actions()} + <DropdownMenu.Root> + <ButtonGroup.Root + class="overflow-hidden rounded-md bg-foreground text-white shadow-sm dark:bg-secondary dark:text-foreground" + > + <Button + class="rounded-none! shadow-none!" + size="sm" + onclick={() => onDecision(ToolPermissionDecision.ONCE)} + > + Allow once + </Button> + + <ButtonGroup.Separator /> + + <DropdownMenu.Trigger> + <Button size="sm" class="rounded-none! !ps-2 shadow-none!"> + <ChevronDown class="h-3.5 w-3.5" /> + </Button> + </DropdownMenu.Trigger> + </ButtonGroup.Root> + + <DropdownMenu.Content align="start" class="min-w-[8rem]"> + <DropdownMenu.Item onclick={() => onDecision(ToolPermissionDecision.ALWAYS)}> + Always allow <pre>{toolName}</pre> + tool + </DropdownMenu.Item> + {#if serverLabel} + <DropdownMenu.Item onclick={() => onDecision(ToolPermissionDecision.ALWAYS_SERVER)}> + Always allow all tools from {serverLabel} + </DropdownMenu.Item> + {:else} + {@const source = toolsStore.getToolSource(toolName)} + {@const providerName = + source === ToolSource.BUILTIN + ? TOOL_SERVER_LABELS[ToolSource.BUILTIN] + : source === ToolSource.CUSTOM + ? TOOL_SERVER_LABELS[ToolSource.CUSTOM] + : 'MCP Tools'} + <DropdownMenu.Item onclick={() => onDecision(ToolPermissionDecision.ALWAYS_SERVER)}> + Approve all tools from {providerName} + </DropdownMenu.Item> + {/if} + </DropdownMenu.Content> + </DropdownMenu.Root> + + <Button + variant="destructive" + size="sm" + class="text-destructive hover:text-destructive" + onclick={() => onDecision(ToolPermissionDecision.DENY)} + > + Deny + </Button> + {/snippet} +</ChatMessageActionCard> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUser.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUser.svelte index f2f6288d68d..6a02f2be6d8 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUser.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUser.svelte @@ -1,11 +1,9 @@ <script lang="ts"> - import { Card } from '$lib/components/ui/card'; - import { ChatAttachmentsList, MarkdownContent } from '$lib/components/app'; import { getMessageEditContext } from '$lib/contexts'; - import { config } from '$lib/stores/settings.svelte'; import ChatMessageActions from './ChatMessageActions.svelte'; import ChatMessageEditForm from './ChatMessageEditForm.svelte'; import { MessageRole } from '$lib/enums'; + import ChatMessageUserBubble from './ChatMessageUserBubble.svelte'; interface Props { class?: string; @@ -44,34 +42,6 @@ // Get contexts const editCtx = getMessageEditContext(); - - let isMultiline = $state(false); - let messageElement: HTMLElement | undefined = $state(); - const currentConfig = config(); - - $effect(() => { - if (!messageElement || !message.content.trim()) return; - - if (message.content.includes('\n')) { - isMultiline = true; - return; - } - - const resizeObserver = new ResizeObserver((entries) => { - for (const entry of entries) { - const element = entry.target as HTMLElement; - const estimatedSingleLineHeight = 24; // Typical line height for text-md - - isMultiline = element.offsetHeight > estimatedSingleLineHeight * 1.5; - } - }); - - resizeObserver.observe(messageElement); - - return () => { - resizeObserver.disconnect(); - }; - }); </script> <div @@ -82,29 +52,11 @@ {#if editCtx.isEditing} <ChatMessageEditForm /> {:else} - {#if message.extra && message.extra.length > 0} - <div class="mb-2 max-w-[80%]"> - <ChatAttachmentsList attachments={message.extra} readonly imageHeight="h-80" /> - </div> - {/if} - - {#if message.content.trim()} - <Card - class="max-w-[80%] overflow-y-auto rounded-[1.125rem] border-none bg-primary/5 px-3.75 py-1.5 text-foreground backdrop-blur-md data-[multiline]:py-2.5 dark:bg-primary/15" - data-multiline={isMultiline ? '' : undefined} - style="max-height: var(--max-message-height); overflow-wrap: anywhere; word-break: break-word;" - > - {#if currentConfig.renderUserContentAsMarkdown} - <div bind:this={messageElement}> - <MarkdownContent class="markdown-user-content -my-4" content={message.content} /> - </div> - {:else} - <span bind:this={messageElement} class="text-md whitespace-pre-wrap"> - {message.content} - </span> - {/if} - </Card> - {/if} + <ChatMessageUserBubble + content={message.content} + attachments={message.extra} + renderMarkdown={true} + /> {#if message.timestamp} <div class="max-w-[80%]"> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUserBubble.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUserBubble.svelte new file mode 100644 index 00000000000..dabb337dd58 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUserBubble.svelte @@ -0,0 +1,76 @@ +<script lang="ts"> + import { Card } from '$lib/components/ui/card'; + import { ChatAttachmentsList, MarkdownContent } from '$lib/components/app'; + import { config } from '$lib/stores/settings.svelte'; + import type { DatabaseMessageExtra } from '$lib/types/database'; + + interface Props { + content: string; + attachments?: DatabaseMessageExtra[]; + renderMarkdown?: boolean; + textColorClass?: string; + cardBgClass?: string; + maxHeightStyle?: string; + } + + let { + content, + attachments = [], + renderMarkdown = false, + textColorClass = 'text-foreground', + cardBgClass = 'dark:bg-primary/15', + maxHeightStyle = 'max-height: var(--max-message-height);' + }: Props = $props(); + + let isMultiline = $state(false); + let messageElement: HTMLElement | undefined = $state(); + const currentConfig = config(); + + $effect(() => { + if (!messageElement || !content.trim()) return; + + if (content.includes('\n')) { + isMultiline = true; + return; + } + + const resizeObserver = new ResizeObserver((entries) => { + for (const entry of entries) { + const element = entry.target as HTMLElement; + const estimatedSingleLineHeight = 24; // Typical line height for text-md + + isMultiline = element.offsetHeight > estimatedSingleLineHeight * 1.5; + } + }); + + resizeObserver.observe(messageElement); + + return () => { + resizeObserver.disconnect(); + }; + }); +</script> + +{#if attachments && attachments.length > 0} + <div class="mb-2 max-w-[80%]"> + <ChatAttachmentsList {attachments} readonly imageHeight="h-40" /> + </div> +{/if} + +{#if content.trim()} + <Card + class="max-w-[80%] overflow-y-auto rounded-[1.125rem] border-none bg-primary/5 px-3.75 py-1.5 {textColorClass} backdrop-blur-md data-[multiline]:py-2.5 {cardBgClass}" + data-multiline={isMultiline ? '' : undefined} + style="{maxHeightStyle} overflow-wrap: anywhere; word-break: break-word;" + > + {#if renderMarkdown && currentConfig.renderUserContentAsMarkdown} + <div bind:this={messageElement}> + <MarkdownContent class="markdown-user-content -my-4" {content} /> + </div> + {:else} + <span bind:this={messageElement} class="text-md whitespace-pre-wrap"> + {content} + </span> + {/if} + </Card> +{/if} diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUserPending.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUserPending.svelte new file mode 100644 index 00000000000..3690bc3b9ea --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessageUserPending.svelte @@ -0,0 +1,71 @@ +<script lang="ts"> + import { ActionIcon } from '$lib/components/app'; + import ChatMessageEditForm from './ChatMessageEditForm.svelte'; + import { fadeInView } from '$lib/actions/fade-in-view.svelte'; + import { ArrowUp, Edit, Trash2 } from '@lucide/svelte'; + import { getProcessingInfoContext } from '$lib/contexts'; + import { useMessageEditContext } from '$lib/hooks/use-message-edit-context.svelte'; + import ChatMessageUserBubble from './ChatMessageUserBubble.svelte'; + + interface Props { + class?: string; + content: string; + extras?: DatabaseMessageExtra[]; + onSendImmediately: () => void; + onEdit: (newContent: string, extras?: DatabaseMessageExtra[]) => void; + onDelete: () => void; + } + + let { + class: className = '', + content, + extras = [], + onSendImmediately, + onEdit, + onDelete + }: Props = $props(); + + const processingInfoCtx = getProcessingInfoContext(); + let showProcessingInfo = $derived(processingInfoCtx.showProcessingInfo); + + const editCtx = useMessageEditContext({ + getContent: () => content, + getExtras: () => extras, + onSave: (content, extras) => onEdit(content, extras) + }); +</script> + +<div + use:fadeInView + aria-label="Pending user message" + class="group flex flex-col items-end gap-3 transition-opacity hover:opacity-80 md:gap-2 {className} sticky {showProcessingInfo + ? 'bottom-44' + : 'bottom-32'}" + role="group" +> + {#if editCtx.isEditing} + <ChatMessageEditForm /> + {:else} + <ChatMessageUserBubble + {content} + attachments={extras} + textColorClass="text-muted-foreground" + cardBgClass="dark:bg-primary/8" + maxHeightStyle="overflow-wrap: anywhere; word-break: break-word;" + /> + + <div class="max-w-[80%]"> + <div class="relative flex h-6 items-center justify-between"> + <div class="right-0 flex items-center gap-2 opacity-100 transition-opacity"> + <div + class="pointer-events-auto inset-0 flex items-center gap-1 opacity-0 transition-all duration-150 group-hover:opacity-100" + > + <ActionIcon icon={Edit} tooltip="Edit" onclick={editCtx.handleEdit} /> + <ActionIcon icon={Trash2} tooltip="Delete" onclick={onDelete} /> + <ActionIcon icon={ArrowUp} tooltip="Send immediately" onclick={onSendImmediately} /> + </div> + </div> + </div> + </div> + {/if} +</div> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessages.svelte b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessages.svelte index 6d16b469859..ae05c591f4a 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessages.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatMessages/ChatMessages.svelte @@ -1,11 +1,23 @@ <script lang="ts"> - import { fadeInView } from '$lib/actions/fade-in-view.svelte'; import { ChatMessage } from '$lib/components/app'; + import ChatMessageUserPending from './ChatMessageUserPending.svelte'; import { setChatActionsContext } from '$lib/contexts'; import { MessageRole } from '$lib/enums'; import { chatStore } from '$lib/stores/chat.svelte'; + import { + chatPendingMessageContent, + chatPendingMessageExtras, + chatClearPendingMessage, + chatInjectPendingMessage + } from '$lib/stores/chat.svelte'; import { conversationsStore, activeConversation } from '$lib/stores/conversations.svelte'; import { config } from '$lib/stores/settings.svelte'; + import { + agenticPendingSteeringMessageContent, + agenticPendingSteeringMessageExtras, + agenticClearSteeringMessage, + agenticInjectSteeringMessage + } from '$lib/stores/agentic.svelte'; import { copyToClipboard, formatMessageForClipboard, @@ -14,12 +26,11 @@ } from '$lib/utils'; interface Props { - class?: string; messages?: DatabaseMessage[]; onUserAction?: () => void; } - let { class: className, messages = [], onUserAction }: Props = $props(); + let { messages = [], onUserAction }: Props = $props(); let allConversationMessages = $state<DatabaseMessage[]>([]); const currentConfig = config(); @@ -196,19 +207,42 @@ }); </script> -<div - class="flex h-full flex-col space-y-10 pt-24 {className}" - style="height: auto; min-height: calc(100dvh - 14rem);" -> - {#each displayMessages as { message, toolMessages, isLastAssistantMessage, siblingInfo } (message.id)} - <div use:fadeInView> - <ChatMessage - class="mx-auto w-full max-w-[48rem]" - {message} - {toolMessages} - {isLastAssistantMessage} - {siblingInfo} - /> - </div> - {/each} -</div> +{#each displayMessages as { message, toolMessages, isLastAssistantMessage, siblingInfo } (message.id)} + <ChatMessage + class="mx-auto mt-12 w-full max-w-[48rem]" + {message} + {toolMessages} + {isLastAssistantMessage} + {siblingInfo} + /> +{/each} + +{#if activeConversation() && agenticPendingSteeringMessageContent(activeConversation()!.id)} + {@const convId = activeConversation()!.id} + {@const pendingContent = agenticPendingSteeringMessageContent(convId)} + + {#if pendingContent} + <ChatMessageUserPending + class="mx-auto mt-12 w-full max-w-[48rem]" + content={pendingContent} + extras={agenticPendingSteeringMessageExtras(convId)} + onSendImmediately={() => chatStore.abortCurrentFlow(convId)} + onEdit={(newContent, extras) => agenticInjectSteeringMessage(convId, newContent, extras)} + onDelete={() => agenticClearSteeringMessage(convId)} + /> + {/if} +{:else if activeConversation() && chatPendingMessageContent(activeConversation()!.id)} + {@const convId = activeConversation()!.id} + {@const pendingContent = chatPendingMessageContent(convId)} + + {#if pendingContent} + <ChatMessageUserPending + class="mx-auto mt-12 w-full max-w-[48rem]" + content={pendingContent} + extras={chatPendingMessageExtras(convId)} + onSendImmediately={() => chatStore.abortCurrentFlow(convId)} + onEdit={(newContent, extras) => chatInjectPendingMessage(convId, newContent, extras)} + onDelete={() => chatClearPendingMessage(convId)} + /> + {/if} +{/if} diff --git a/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreen.svelte b/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreen.svelte index 290a277a53d..ef5a0498751 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreen.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreen.svelte @@ -2,7 +2,6 @@ import { afterNavigate } from '$app/navigation'; import { ChatScreenForm, - ChatScreenHeader, ChatMessages, ChatScreenProcessingInfo, DialogEmptyFileAlert, @@ -12,15 +11,16 @@ } from '$lib/components/app'; import * as Alert from '$lib/components/ui/alert'; import * as AlertDialog from '$lib/components/ui/alert-dialog'; - import { KeyboardKey } from '$lib/enums'; import { createAutoScrollController } from '$lib/hooks/use-auto-scroll.svelte'; + import { useKeyboardShortcuts } from '$lib/hooks/use-keyboard-shortcuts.svelte'; import { chatStore, errorDialog, isLoading, isChatStreaming, isEditing, - getAddFilesHandler + getAddFilesHandler, + activeProcessingState } from '$lib/stores/chat.svelte'; import { conversationsStore, @@ -34,9 +34,11 @@ import { parseFilesToMessageExtras, processFilesToChatUploaded } from '$lib/utils/browser-only'; import { ErrorDialogType } from '$lib/enums'; import { onMount } from 'svelte'; - import { fade, fly, slide } from 'svelte/transition'; + import { fadeInView } from '$lib/actions/fade-in-view.svelte'; import { Trash2, AlertTriangle, RefreshCw } from '@lucide/svelte'; import ChatScreenDragOverlay from './ChatScreenDragOverlay.svelte'; + import { page } from '$app/state'; + import { setProcessingInfoContext } from '$lib/contexts'; let { showCenteredEmpty = false } = $props(); @@ -79,6 +81,18 @@ let isCurrentConversationLoading = $derived(isLoading() || isChatStreaming()); + let showProcessingInfo = $derived( + isCurrentConversationLoading || + (config().keepStatsVisible && !!page.params.id) || + activeProcessingState() !== null + ); + + setProcessingInfoContext({ + get showProcessingInfo() { + return showProcessingInfo; + } + }); + let isRouter = $derived(isRouterMode()); let conversationModel = $derived( @@ -208,20 +222,13 @@ processFiles(files); } - function handleKeydown(event: KeyboardEvent) { - const isCtrlOrCmd = event.ctrlKey || event.metaKey; - - if ( - isCtrlOrCmd && - event.shiftKey && - (event.key === KeyboardKey.D_LOWER || event.key === KeyboardKey.D_UPPER) - ) { - event.preventDefault(); + const { handleKeydown } = useKeyboardShortcuts({ + deleteActiveConversation: () => { if (activeConversation()) { showDeleteDialog = true; } } - } + }); async function handleSystemPromptAdd(draft: { message: string; files: ChatUploadedFile[] }) { if (draft.message || draft.files.length > 0) { @@ -342,9 +349,9 @@ <svelte:window onkeydown={handleKeydown} /> -<ChatScreenHeader /> - -{#if !isEmpty} +{#if isServerLoading} + <ServerLoadingSplash /> +{:else} <div bind:this={chatScrollContainer} aria-label="Chat interface with file drop zone" @@ -356,26 +363,42 @@ onscroll={handleScroll} role="main" > - <div class="flex flex-col"> - <ChatMessages - class="mb-16 md:mb-24" - messages={activeMessages()} - onUserAction={() => { - autoScroll.enable(); - autoScroll.scrollToBottom(); - }} - /> + <div class="flex grow flex-col pt-14"> + {#if !isEmpty} + <ChatMessages + messages={activeMessages()} + onUserAction={() => { + autoScroll.enable(); + autoScroll.scrollToBottom(); + }} + /> + {/if} <div - class="pointer-events-none sticky right-0 bottom-4 left-0 mt-auto" - in:slide={{ duration: 150, axis: 'y' }} + class="pointer-events-none {isEmpty + ? 'absolute bottom-[calc(50dvh-7rem)]' + : 'sticky bottom-4'} right-4 left-4 mt-auto pt-16 transition-all duration-200" > - <ChatScreenProcessingInfo /> + {#if isEmpty} + <div class="mb-8 px-4 text-center" use:fadeInView={{ duration: 300 }}> + <h1 class="mb-2 text-2xl font-semibold tracking-tight md:text-3xl">Hello there</h1> + + <p class="text-muted-foreground md:text-lg"> + {serverStore.props?.modalities?.audio + ? 'Record audio, type a message ' + : 'Type a message'} or upload files to get started + </p> + </div> + {/if} + + {#if page.params.id} + <ChatScreenProcessingInfo /> + {/if} {#if hasPropsError} <div class="pointer-events-auto mx-auto mb-4 max-w-[48rem] px-1" - in:fly={{ y: 10, duration: 250 }} + use:fadeInView={{ y: 10, duration: 250 }} > <Alert.Root variant="destructive"> <AlertTriangle class="h-4 w-4" /> @@ -412,69 +435,6 @@ </div> </div> </div> -{:else if isServerLoading} - <!-- Server Loading State --> - <ServerLoadingSplash /> -{:else} - <div - aria-label="Welcome screen with file drop zone" - class="flex h-full items-center justify-center" - ondragenter={handleDragEnter} - ondragleave={handleDragLeave} - ondragover={handleDragOver} - ondrop={handleDrop} - role="main" - > - <div class="w-full max-w-[48rem] px-4"> - <div class="mb-10 text-center" in:fade={{ duration: 300 }}> - <h1 class="mb-2 text-2xl font-semibold tracking-tight md:text-3xl">llama.cpp</h1> - - <p class="text-muted-foreground md:text-lg"> - {serverStore.props?.modalities?.audio - ? 'Record audio, type a message ' - : 'Type a message'} or upload files to get started - </p> - </div> - - {#if hasPropsError} - <div class="mb-4" in:fly={{ y: 10, duration: 250 }}> - <Alert.Root variant="destructive"> - <AlertTriangle class="h-4 w-4" /> - - <Alert.Title class="flex items-center justify-between"> - <span>Server unavailable</span> - - <button - onclick={() => serverStore.fetch()} - disabled={isServerLoading} - class="flex items-center gap-1.5 rounded-lg bg-destructive/20 px-2 py-1 text-xs font-medium hover:bg-destructive/30 disabled:opacity-50" - > - <RefreshCw class="h-3 w-3 {isServerLoading ? 'animate-spin' : ''}" /> - {isServerLoading ? 'Retrying...' : 'Retry'} - </button> - </Alert.Title> - - <Alert.Description>{serverError()}</Alert.Description> - </Alert.Root> - </div> - {/if} - - <div in:fly={{ y: 10, duration: 250, delay: hasPropsError ? 0 : 300 }}> - <ChatScreenForm - disabled={hasPropsError} - {initialMessage} - isLoading={isCurrentConversationLoading} - onFileRemove={handleFileRemove} - onFileUpload={handleFileUpload} - onSend={handleSendMessage} - onStop={() => chatStore.stopGeneration()} - onSystemPromptAdd={handleSystemPromptAdd} - showHelperText - bind:uploadedFiles - /> - </div> - </div> - </div> {/if} <!-- File Upload Error Alert Dialog --> @@ -575,21 +535,3 @@ open={Boolean(activeErrorDialog)} type={activeErrorDialog?.type ?? ErrorDialogType.SERVER} /> - -<style> - .conversation-chat-form { - position: relative; - - &::after { - content: ''; - position: absolute; - bottom: 0; - z-index: -1; - left: 0; - right: 0; - width: 100%; - height: 2.375rem; - background-color: var(--background); - } - } -</style> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenForm.svelte b/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenForm.svelte index 086044e8c45..de3d73a4f8c 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenForm.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenForm.svelte @@ -1,7 +1,9 @@ <script lang="ts"> import { afterNavigate } from '$app/navigation'; + import { page } from '$app/state'; import { ChatFormHelperText, ChatForm } from '$lib/components/app'; import { onMount } from 'svelte'; + import { useDraftMessages } from '$lib/hooks/use-draft-messages.svelte'; interface Props { class?: string; @@ -32,11 +34,20 @@ }: Props = $props(); let chatFormRef: ChatForm | undefined = $state(undefined); + let chatId = $derived(page.params.id as string | undefined); let message = $derived(initialMessage); let previousIsLoading = $derived(isLoading); let previousInitialMessage = $derived(initialMessage); - // Sync message when initialMessage prop changes (e.g., after draft restoration) + const { clearDraft } = useDraftMessages({ + getChatId: () => chatId, + getMessage: () => message, + getFiles: () => uploadedFiles, + setMessage: (m) => (message = m), + setFiles: (f) => (uploadedFiles = f), + getInitialMessage: () => initialMessage + }); + $effect(() => { if (initialMessage !== previousInitialMessage) { message = initialMessage; @@ -51,12 +62,7 @@ let hasLoadingAttachments = $derived(uploadedFiles.some((f) => f.isLoading)); async function handleSubmit() { - if ( - (!message.trim() && uploadedFiles.length === 0) || - disabled || - isLoading || - hasLoadingAttachments - ) + if ((!message.trim() && uploadedFiles.length === 0) || disabled || hasLoadingAttachments) return; if (!chatFormRef?.checkModelSelected()) return; @@ -66,6 +72,7 @@ message = ''; uploadedFiles = []; + clearDraft(); chatFormRef?.resetTextareaHeight(); @@ -89,8 +96,10 @@ setTimeout(() => chatFormRef?.focus(), 10); }); - afterNavigate(() => { - setTimeout(() => chatFormRef?.focus(), 10); + afterNavigate((navigation) => { + if (navigation?.from != null) { + setTimeout(() => chatFormRef?.focus(), 10); + } }); $effect(() => { diff --git a/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenHeader.svelte b/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenHeader.svelte deleted file mode 100644 index 0a920be6fa2..00000000000 --- a/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenHeader.svelte +++ /dev/null @@ -1,26 +0,0 @@ -<script lang="ts"> - import { Settings } from '@lucide/svelte'; - import { Button } from '$lib/components/ui/button'; - import { useSidebar } from '$lib/components/ui/sidebar'; - import { getChatSettingsDialogContext } from '$lib/contexts'; - - const sidebar = useSidebar(); - const chatSettingsDialog = getChatSettingsDialogContext(); -</script> - -<header - class="pointer-events-none fixed top-0 right-0 left-0 z-50 flex items-center justify-end p-2 duration-200 ease-linear md:p-4 {sidebar.open - ? 'md:left-[var(--sidebar-width)]' - : ''}" -> - <div class="pointer-events-auto flex items-center space-x-2"> - <Button - variant="ghost" - size="icon-lg" - onclick={() => chatSettingsDialog.open()} - class="rounded-full backdrop-blur-lg" - > - <Settings class="h-4 w-4" /> - </Button> - </div> -</header> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenProcessingInfo.svelte b/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenProcessingInfo.svelte index 8c88480cef5..5cbb7826842 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenProcessingInfo.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreenProcessingInfo.svelte @@ -5,18 +5,17 @@ import { chatStore, isLoading, isChatStreaming } from '$lib/stores/chat.svelte'; import { activeMessages, activeConversation } from '$lib/stores/conversations.svelte'; import { config } from '$lib/stores/settings.svelte'; + import { getProcessingInfoContext } from '$lib/contexts'; const processingState = useProcessingState(); + const processingInfoCtx = getProcessingInfoContext(); + + let showProcessingInfo = $derived(processingInfoCtx.showProcessingInfo); let isCurrentConversationLoading = $derived(isLoading()); let isStreaming = $derived(isChatStreaming()); - let hasProcessingData = $derived(processingState.processingState !== null); let processingDetails = $derived(processingState.getTechnicalDetails()); - let showProcessingInfo = $derived( - isCurrentConversationLoading || isStreaming || config().keepStatsVisible || hasProcessingData - ); - $effect(() => { const conversation = activeConversation(); diff --git a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettings.svelte b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettings.svelte index e12bf8f2fe4..da6810cb1d4 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettings.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettings.svelte @@ -7,16 +7,10 @@ Monitor, ChevronLeft, ChevronRight, - Database + ListRestart, + Sliders } from '@lucide/svelte'; - import { - ChatSettingsFooter, - ChatSettingsImportExportTab, - ChatSettingsFields, - McpLogo, - McpServersSettings - } from '$lib/components/app'; - import { ScrollArea } from '$lib/components/ui/scroll-area'; + import { ChatSettingsFooter, ChatSettingsFields } from '$lib/components/app'; import { config, settingsStore } from '$lib/stores/settings.svelte'; import { SETTINGS_SECTION_TITLES, @@ -29,14 +23,16 @@ import { setMode } from 'mode-watcher'; import { ColorMode } from '$lib/enums/ui'; import { SettingsFieldType } from '$lib/enums/settings'; + import { fade } from 'svelte/transition'; import type { Component } from 'svelte'; interface Props { + class?: string; onSave?: () => void; initialSection?: SettingsSectionTitle; } - let { onSave, initialSection }: Props = $props(); + let { class: className, onSave, initialSection }: Props = $props(); const settingSections: Array<{ fields: SettingsFieldConfig[]; @@ -45,7 +41,7 @@ }> = [ { title: SETTINGS_SECTION_TITLES.GENERAL, - icon: Settings, + icon: Sliders, fields: [ { key: SETTINGS_KEYS.THEME, @@ -111,6 +107,11 @@ label: 'Show thought in progress', type: SettingsFieldType.CHECKBOX }, + { + key: SETTINGS_KEYS.SHOW_TOOL_CALL_IN_PROGRESS, + label: 'Show tool call in progress', + type: SettingsFieldType.CHECKBOX + }, { key: SETTINGS_KEYS.KEEP_STATS_VISIBLE, label: 'Keep stats visible after generation', @@ -143,13 +144,13 @@ type: SettingsFieldType.CHECKBOX }, { - key: SETTINGS_KEYS.AUTO_SHOW_SIDEBAR_ON_NEW_CHAT, - label: 'Auto-show sidebar on new chat', + key: SETTINGS_KEYS.SHOW_RAW_MODEL_NAMES, + label: 'Show raw model names', type: SettingsFieldType.CHECKBOX }, { - key: SETTINGS_KEYS.SHOW_RAW_MODEL_NAMES, - label: 'Show raw model names', + key: SETTINGS_KEYS.ALWAYS_SHOW_AGENTIC_TURNS, + label: 'Always show agentic turns in conversation', type: SettingsFieldType.CHECKBOX } ] @@ -267,33 +268,18 @@ ] }, { - title: SETTINGS_SECTION_TITLES.IMPORT_EXPORT, - icon: Database, - fields: [] - }, - { - title: SETTINGS_SECTION_TITLES.MCP, - icon: McpLogo, + title: SETTINGS_SECTION_TITLES.AGENTIC, + icon: ListRestart, fields: [ { key: SETTINGS_KEYS.AGENTIC_MAX_TURNS, - label: 'Agentic loop max turns', + label: 'Agentic turns', type: SettingsFieldType.INPUT }, - { - key: SETTINGS_KEYS.ALWAYS_SHOW_AGENTIC_TURNS, - label: 'Always show agentic turns in conversation', - type: SettingsFieldType.CHECKBOX - }, { key: SETTINGS_KEYS.AGENTIC_MAX_TOOL_PREVIEW_LINES, label: 'Max lines per tool preview', type: SettingsFieldType.INPUT - }, - { - key: SETTINGS_KEYS.SHOW_TOOL_CALL_IN_PROGRESS, - label: 'Show tool call in progress', - type: SettingsFieldType.CHECKBOX } ] }, @@ -457,119 +443,116 @@ }); </script> -<div class="flex h-full flex-col overflow-hidden md:flex-row"> - <!-- Desktop Sidebar --> - <div class="hidden w-64 border-r border-border/30 p-6 md:block"> - <nav class="space-y-1 py-2"> - {#each settingSections as section (section.title)} - <button - class="flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-left text-sm transition-colors hover:bg-accent {activeSection === - section.title - ? 'bg-accent text-accent-foreground' - : 'text-muted-foreground'}" - onclick={() => (activeSection = section.title)} - > - <section.icon class="h-4 w-4" /> - - <span class="ml-2">{section.title}</span> - </button> - {/each} - </nav> - </div> +<div class="flex h-full flex-col overflow-y-auto {className} w-full" in:fade={{ duration: 150 }}> + <div class="flex flex-1 flex-col gap-4 md:flex-row"> + <!-- Desktop Sidebar --> + <div class="sticky top-0 hidden w-64 flex-col self-start bg-background pt-8 pb-4 md:flex"> + <div class="flex items-center gap-2 pb-8"> + <Settings class="h-6 w-6" /> + <h1 class="text-2xl font-semibold">Settings</h1> + </div> + <nav class="space-y-1"> + {#each settingSections as section (section.title)} + <button + class="flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-left text-sm transition-colors hover:bg-accent {activeSection === + section.title + ? 'bg-accent text-accent-foreground' + : 'text-muted-foreground'}" + onclick={() => (activeSection = section.title)} + > + <section.icon class="h-4 w-4" /> + + <span class="ml-2">{section.title}</span> + </button> + {/each} + </nav> + </div> + + <!-- Mobile Header with Horizontal Scrollable Menu --> + <div class="sticky top-0 z-10 flex flex-col bg-background md:hidden"> + <div class="flex items-center gap-2 px-4 pt-4 pb-2 md:pt-6"> + <Settings class="h-5 w-5 md:h-6 md:w-6" /> - <!-- Mobile Header with Horizontal Scrollable Menu --> - <div class="flex flex-col pt-6 md:hidden"> - <div class="border-b border-border/30 pt-4 md:py-4"> - <!-- Horizontal Scrollable Category Menu with Navigation --> - <div class="relative flex items-center" style="scroll-padding: 1rem;"> - <button - class="absolute left-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted shadow-md backdrop-blur-sm transition-opacity hover:bg-accent {canScrollLeft - ? 'opacity-100' - : 'pointer-events-none opacity-0'}" - onclick={scrollLeft} - aria-label="Scroll left" - > - <ChevronLeft class="h-4 w-4" /> - </button> - - <div - class="scrollbar-hide overflow-x-auto py-2" - bind:this={scrollContainer} - onscroll={updateScrollButtons} - > - <div class="flex min-w-max gap-2"> - {#each settingSections as section (section.title)} - <button - class="flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm whitespace-nowrap transition-colors first:ml-4 last:mr-4 hover:bg-accent {activeSection === - section.title - ? 'bg-accent text-accent-foreground' - : 'text-muted-foreground'}" - onclick={(e: MouseEvent) => { - activeSection = section.title; - scrollToCenter(e.currentTarget as HTMLElement); - }} - > - <section.icon class="h-4 w-4 flex-shrink-0" /> - <span>{section.title}</span> - </button> - {/each} + <h1 class="text-xl font-semibold md:text-2xl">Settings</h1> + </div> + + <div class="border-b border-border/30 py-2"> + <!-- Horizontal Scrollable Category Menu with Navigation --> + <div class="relative flex items-center" style="scroll-padding: 1rem;"> + <button + class="absolute left-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted shadow-md backdrop-blur-sm transition-opacity hover:bg-accent {canScrollLeft + ? 'opacity-100' + : 'pointer-events-none opacity-0'}" + onclick={scrollLeft} + aria-label="Scroll left" + > + <ChevronLeft class="h-4 w-4" /> + </button> + + <div + class="scrollbar-hide overflow-x-auto py-2" + bind:this={scrollContainer} + onscroll={updateScrollButtons} + > + <div class="flex min-w-max gap-2"> + {#each settingSections as section (section.title)} + <button + class="flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm whitespace-nowrap transition-colors first:ml-4 last:mr-4 hover:bg-accent {activeSection === + section.title + ? 'bg-accent text-accent-foreground' + : 'text-muted-foreground'}" + onclick={(e: MouseEvent) => { + activeSection = section.title; + scrollToCenter(e.currentTarget as HTMLElement); + }} + > + <section.icon class="h-4 w-4 flex-shrink-0" /> + <span>{section.title}</span> + </button> + {/each} + </div> </div> - </div> - <button - class="absolute right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted shadow-md backdrop-blur-sm transition-opacity hover:bg-accent {canScrollRight - ? 'opacity-100' - : 'pointer-events-none opacity-0'}" - onclick={scrollRight} - aria-label="Scroll right" - > - <ChevronRight class="h-4 w-4" /> - </button> + <button + class="absolute right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted shadow-md backdrop-blur-sm transition-opacity hover:bg-accent {canScrollRight + ? 'opacity-100' + : 'pointer-events-none opacity-0'}" + onclick={scrollRight} + aria-label="Scroll right" + > + <ChevronRight class="h-4 w-4" /> + </button> + </div> </div> </div> - </div> - <ScrollArea class="max-h-[calc(100dvh-13.5rem)] flex-1 md:max-h-[calc(100vh-13.5rem)]"> - <div class="space-y-6 p-4 md:p-6"> - <div class="grid"> - <div class="mb-6 flex hidden items-center gap-2 border-b border-border/30 pb-6 md:flex"> - <currentSection.icon class="h-5 w-5" /> + <div class="mx-auto max-w-3xl flex-1"> + <div class="space-y-6 p-4 md:p-6 md:pt-28"> + <div class="grid"> + <div class="mb-6 flex hidden items-center gap-2 border-b border-border/30 pb-6 md:flex"> + <currentSection.icon class="h-5 w-5" /> - <h3 class="text-lg font-semibold">{currentSection.title}</h3> - </div> + <h3 class="text-lg font-semibold">{currentSection.title}</h3> + </div> - {#if currentSection.title === SETTINGS_SECTION_TITLES.IMPORT_EXPORT} - <ChatSettingsImportExportTab /> - {:else if currentSection.title === SETTINGS_SECTION_TITLES.MCP} - <div class="space-y-6"> - <ChatSettingsFields - fields={currentSection.fields} - {localConfig} - onConfigChange={handleConfigChange} - onThemeChange={handleThemeChange} - /> - - <div class="border-t border-border/30 pt-6"> - <McpServersSettings /> + {#if currentSection.fields} + <div class="space-y-6"> + <ChatSettingsFields + fields={currentSection.fields} + {localConfig} + onConfigChange={handleConfigChange} + onThemeChange={handleThemeChange} + /> </div> - </div> - {:else} - <div class="space-y-6"> - <ChatSettingsFields - fields={currentSection.fields} - {localConfig} - onConfigChange={handleConfigChange} - onThemeChange={handleThemeChange} - /> - </div> - {/if} - </div> + {/if} + </div> - <div class="mt-8 border-t pt-6"> - <p class="text-xs text-muted-foreground">Settings are saved in browser's localStorage</p> + <div class="mt-8 border-t border-border/30 pt-6"> + <p class="text-xs text-muted-foreground">Settings are saved in browser's localStorage</p> + </div> </div> + + <ChatSettingsFooter onReset={handleReset} onSave={handleSave} /> </div> - </ScrollArea> + </div> </div> - -<ChatSettingsFooter onReset={handleReset} onSave={handleSave} /> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsFields.svelte b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsFields.svelte index 42191be89fe..5b2349bf493 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsFields.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsFields.svelte @@ -70,7 +70,7 @@ {/if} </div> - <div class="relative w-full md:max-w-md"> + <div class="relative w-full"> <Input id={field.key} value={currentValue} @@ -117,7 +117,7 @@ value={String(localConfig[field.key] ?? '')} onchange={(e) => onConfigChange(field.key, e.currentTarget.value)} placeholder="" - class="min-h-[10rem] w-full md:max-w-2xl" + class="min-h-[10rem] w-full md:max-w-3xl" /> {#if field.help || SETTING_CONFIG_INFO[field.key]} @@ -176,7 +176,7 @@ } }} > - <div class="relative w-full md:w-auto md:max-w-md"> + <div class="relative w-full md:w-auto"> <Select.Trigger class="w-full"> <div class="flex items-center gap-2"> {#if selectedOption?.icon} diff --git a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsFooter.svelte b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsFooter.svelte index 1f7eb4e7527..afc37377d0c 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsFooter.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsFooter.svelte @@ -29,7 +29,7 @@ } </script> -<div class="flex justify-between border-t border-border/30 p-6"> +<div class="sticky bottom-0 mx-auto mt-4 flex w-full justify-between p-6"> <div class="flex gap-2"> <Button variant="outline" onclick={handleResetClick}> <RotateCcw class="h-3 w-3" /> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsToolsTab.svelte b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsToolsTab.svelte new file mode 100644 index 00000000000..bfcaace3a30 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsToolsTab.svelte @@ -0,0 +1,122 @@ +<script lang="ts"> + import { ChevronDown, ChevronRight } from '@lucide/svelte'; + import { Checkbox } from '$lib/components/ui/checkbox'; + import * as Collapsible from '$lib/components/ui/collapsible'; + import { TruncatedText } from '$lib/components/app'; + import { toolsStore } from '$lib/stores/tools.svelte'; + import { permissionsStore } from '$lib/stores/permissions.svelte'; + import { mcpStore } from '$lib/stores/mcp.svelte'; + import { ToolSource } from '$lib/enums'; + import { SvelteSet } from 'svelte/reactivity'; + + let expandedGroups = new SvelteSet<string>(); + let groups = $derived(toolsStore.toolGroups); + + function getFavicon(group: { source: ToolSource; label: string }): string | null { + if (group.source !== ToolSource.MCP) return null; + + for (const server of mcpStore.getServersSorted()) { + if (mcpStore.getServerLabel(server) === group.label) { + return mcpStore.getServerFavicon(server.id); + } + } + + return null; + } + + function toggleExpanded(label: string) { + if (expandedGroups.has(label)) { + expandedGroups.delete(label); + } else { + expandedGroups.add(label); + } + } +</script> + +{#if groups.length === 0} + <div class="py-8 text-center text-sm text-muted-foreground">No tools available</div> +{:else} + <div class="space-y-2"> + {#each groups as group (group.label)} + {@const isExpanded = expandedGroups.has(group.label)} + {@const favicon = getFavicon(group)} + + <Collapsible.Root open={isExpanded} onOpenChange={() => toggleExpanded(group.label)}> + <Collapsible.Trigger + class="flex w-full items-center gap-2 rounded-lg px-3 py-2 text-sm hover:bg-muted/50" + > + {#if isExpanded} + <ChevronDown class="h-3.5 w-3.5 shrink-0" /> + {:else} + <ChevronRight class="h-3.5 w-3.5 shrink-0" /> + {/if} + + <span class="inline-flex min-w-0 items-center gap-1.5 font-medium"> + {#if favicon} + <img + src={favicon} + alt="" + class="h-4 w-4 shrink-0 rounded-sm" + onerror={(e) => { + (e.currentTarget as HTMLImageElement).style.display = 'none'; + }} + /> + {/if} + + <span class="truncate">{group.label}</span> + </span> + + <span class="ml-auto shrink-0 text-xs text-muted-foreground"> + {group.tools.length} tool{group.tools.length !== 1 ? 's' : ''} + </span> + </Collapsible.Trigger> + + <Collapsible.Content> + <div class="ml-4 border-l border-border/50 pl-2"> + <!-- Header row --> + <div class="flex items-center gap-2 px-2 py-1 text-xs text-muted-foreground"> + <span class="min-w-0 flex-1">Tool</span> + <span class="w-16 shrink-0 text-center">Enabled</span> + <span class="w-20 shrink-0 text-center">Always allow</span> + </div> + + {#each group.tools as tool (tool.function.name)} + {@const toolName = tool.function.name} + {@const isEnabled = toolsStore.isToolEnabled(toolName)} + {@const permissionKey = toolsStore.getPermissionKey(toolName)} + {@const isAlwaysAllowed = permissionKey + ? permissionsStore.hasTool(permissionKey) + : false} + + <div class="flex items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-muted/50"> + <TruncatedText text={toolName} class="min-w-0 flex-1 truncate" showTooltip={true} /> + + <div class="flex w-16 shrink-0 justify-center"> + <Checkbox + checked={isEnabled} + onCheckedChange={() => toolsStore.toggleTool(toolName)} + class="h-4 w-4" + /> + </div> + + <div class="flex w-20 shrink-0 justify-center"> + <Checkbox + checked={isAlwaysAllowed} + onCheckedChange={() => { + if (isAlwaysAllowed) { + permissionsStore.revokeTool(permissionKey!); + } else { + permissionsStore.allowTool(permissionKey!); + } + }} + class="h-4 w-4" + /> + </div> + </div> + {/each} + </div> + </Collapsible.Content> + </Collapsible.Root> + {/each} + </div> +{/if} diff --git a/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebar.svelte b/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebar.svelte index 751406b3e39..aaf19aa9043 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebar.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebar.svelte @@ -1,7 +1,8 @@ <script lang="ts"> import { goto } from '$app/navigation'; import { page } from '$app/state'; - import { Trash2, Pencil } from '@lucide/svelte'; + import { Trash2, Pencil, X } from '@lucide/svelte'; + import { Button } from '$lib/components/ui/button'; import { ChatSidebarConversationItem, DialogConfirmation } from '$lib/components/app'; import { Checkbox } from '$lib/components/ui/checkbox'; import Label from '$lib/components/ui/label/label.svelte'; @@ -16,6 +17,7 @@ import { chatStore } from '$lib/stores/chat.svelte'; import { getPreviewText } from '$lib/utils'; import ChatSidebarActions from './ChatSidebarActions.svelte'; + import { APP_NAME } from '$lib/constants'; const sidebar = Sidebar.useSidebar(); @@ -32,10 +34,14 @@ ); let filteredConversations = $derived.by(() => { - if (searchQuery.trim().length > 0) { - return conversations().filter((conversation: { name: string }) => - conversation.name.toLowerCase().includes(searchQuery.toLowerCase()) - ); + if (isSearchModeActive) { + if (searchQuery.trim().length > 0) { + return conversations().filter((conversation: { name: string }) => + conversation.name.toLowerCase().includes(searchQuery.toLowerCase()) + ); + } + + return []; } return conversations(); @@ -107,10 +113,31 @@ } } + let chatSidebarActions: { activateSearch?: () => void } | undefined = $state(); + let openedForSearch = $state(false); + export function activateSearchMode() { - isSearchModeActive = true; + if (!sidebar.open) { + openedForSearch = true; + } + chatSidebarActions?.activateSearch?.(); + } + + function handleSearchDeactivated() { + if (openedForSearch) { + openedForSearch = false; + sidebar.toggle(); + } } + $effect(() => { + if (!sidebar.open) { + isSearchModeActive = false; + searchQuery = ''; + openedForSearch = false; + } + }); + export function editActiveConversation() { if (currentChatId) { const activeConversation = filteredConversations.find((conv) => conv.id === currentChatId); @@ -130,6 +157,7 @@ searchQuery = ''; } + handleMobileSidebarItemClick(); await goto(`#/chat/${id}`); } @@ -138,60 +166,79 @@ } </script> -<ScrollArea class="h-[100vh]"> - <Sidebar.Header class=" top-0 z-10 gap-4 bg-sidebar/50 p-4 pb-2 backdrop-blur-lg md:sticky"> - <a href="#/" onclick={handleMobileSidebarItemClick}> - <h1 class="inline-flex items-center gap-1 px-2 text-xl font-semibold">llama.cpp</h1> - </a> - - <ChatSidebarActions {handleMobileSidebarItemClick} bind:isSearchModeActive bind:searchQuery /> - </Sidebar.Header> - - <Sidebar.Group class="mt-2 space-y-2 p-0 px-4"> - {#if (filteredConversations.length > 0 && isSearchModeActive) || !isSearchModeActive} - <Sidebar.GroupLabel> - {isSearchModeActive ? 'Search results' : 'Conversations'} - </Sidebar.GroupLabel> - {/if} - - <Sidebar.GroupContent> - <Sidebar.Menu> - {#each conversationTree as { conversation, depth } (conversation.id)} - <Sidebar.MenuItem class="mb-1 p-0"> - <ChatSidebarConversationItem - conversation={{ - id: conversation.id, - name: conversation.name, - lastModified: conversation.lastModified, - currNode: conversation.currNode, - forkedFromConversationId: conversation.forkedFromConversationId - }} - {depth} - {handleMobileSidebarItemClick} - isActive={currentChatId === conversation.id} - onSelect={selectConversation} - onEdit={handleEditConversation} - onDelete={handleDeleteConversation} - onStop={handleStopGeneration} - /> - </Sidebar.MenuItem> - {/each} - - {#if conversationTree.length === 0} - <div class="px-2 py-4 text-center"> - <p class="mb-4 p-4 text-sm text-muted-foreground"> - {searchQuery.length > 0 - ? 'No results found' - : isSearchModeActive - ? 'Start typing to see results' - : 'No conversations yet'} - </p> - </div> - {/if} - </Sidebar.Menu> - </Sidebar.GroupContent> - </Sidebar.Group> -</ScrollArea> +<div class="flex h-full flex-col"> + <ScrollArea class="h-full flex-1"> + <Sidebar.Header class="gap-4 bg-sidebar/50 p-3 backdrop-blur-lg md:pt-4 md:pb-2"> + <div class="flex items-center justify-between"> + <a href="#/" onclick={handleMobileSidebarItemClick}> + <h1 class="inline-flex items-center gap-1 px-2 text-xl font-semibold">{APP_NAME}</h1> + </a> + + <Button + class="rounded-full md:hidden" + variant="ghost" + size="icon" + onclick={() => sidebar.toggle()} + > + <X class="h-4 w-4" /> + <span class="sr-only">Close sidebar</span> + </Button> + </div> + + <ChatSidebarActions + bind:this={chatSidebarActions} + {handleMobileSidebarItemClick} + bind:isSearchModeActive + bind:searchQuery + onSearchDeactivated={handleSearchDeactivated} + /> + </Sidebar.Header> + + <Sidebar.Group class="mt-2 h-[calc(100vh-21rem)] space-y-2 p-0 px-3"> + {#if (filteredConversations.length > 0 && isSearchModeActive) || !isSearchModeActive} + <Sidebar.GroupLabel> + {isSearchModeActive ? 'Search results' : 'Recent conversations'} + </Sidebar.GroupLabel> + {/if} + + <Sidebar.GroupContent> + <Sidebar.Menu> + {#each conversationTree as { conversation, depth } (conversation.id)} + <Sidebar.MenuItem class="mb-1 p-0"> + <ChatSidebarConversationItem + conversation={{ + id: conversation.id, + name: conversation.name, + lastModified: conversation.lastModified, + currNode: conversation.currNode, + forkedFromConversationId: conversation.forkedFromConversationId + }} + {depth} + isActive={currentChatId === conversation.id} + onSelect={selectConversation} + onEdit={handleEditConversation} + onDelete={handleDeleteConversation} + onStop={handleStopGeneration} + /> + </Sidebar.MenuItem> + {/each} + + {#if conversationTree.length === 0} + <div class="px-2 py-4 text-center"> + <p class="mb-4 p-4 text-sm text-muted-foreground"> + {searchQuery.length > 0 + ? 'No results found' + : isSearchModeActive + ? 'Start typing to see results' + : 'No conversations yet'} + </p> + </div> + {/if} + </Sidebar.Menu> + </Sidebar.GroupContent> + </Sidebar.Group> + </ScrollArea> +</div> <DialogConfirmation bind:open={showDeleteDialog} diff --git a/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebarActions.svelte b/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebarActions.svelte index e0d379f6df3..7ec31fb272f 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebarActions.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebarActions.svelte @@ -1,102 +1,96 @@ <script lang="ts"> - import { Search, SquarePen, X } from '@lucide/svelte'; import { KeyboardShortcutInfo } from '$lib/components/app'; import { Button } from '$lib/components/ui/button'; - import { Input } from '$lib/components/ui/input'; - import { McpLogo } from '$lib/components/app'; - import { SETTINGS_SECTION_TITLES } from '$lib/constants'; - import { getChatSettingsDialogContext } from '$lib/contexts'; + import type { Component } from 'svelte'; + import { SearchInput } from '$lib/components/app'; + import { page } from '$app/state'; + import { SIDEBAR_ACTIONS_ITEMS } from '$lib/constants/ui'; interface Props { handleMobileSidebarItemClick: () => void; isSearchModeActive: boolean; searchQuery: string; + isCancelAlwaysVisible?: boolean; + onSearchDeactivated?: () => void; } let { handleMobileSidebarItemClick, isSearchModeActive = $bindable(), - searchQuery = $bindable() + searchQuery = $bindable(), + isCancelAlwaysVisible = false, + onSearchDeactivated }: Props = $props(); - let searchInput: HTMLInputElement | null = $state(null); - - const chatSettingsDialog = getChatSettingsDialogContext(); + let searchInputRef = $state<HTMLInputElement | null>(null); function handleSearchModeDeactivate() { isSearchModeActive = false; searchQuery = ''; + onSearchDeactivated?.(); } - $effect(() => { - if (isSearchModeActive) { - searchInput?.focus(); - } - }); + export function activateSearch() { + isSearchModeActive = true; + // Focus after Svelte renders the input + queueMicrotask(() => searchInputRef?.focus()); + } </script> +{#snippet itemIcon(Icon: Component)} + <Icon class="h-4 w-4" /> +{/snippet} + <div class="my-1 space-y-1"> {#if isSearchModeActive} - <div class="relative"> - <Search class="absolute top-2.5 left-2 h-4 w-4 text-muted-foreground" /> - - <Input - bind:ref={searchInput} - bind:value={searchQuery} - onkeydown={(e) => e.key === 'Escape' && handleSearchModeDeactivate()} - placeholder="Search conversations..." - class="pl-8" - /> - - <X - class="cursor-pointertext-muted-foreground absolute top-2.5 right-2 h-4 w-4" - onclick={handleSearchModeDeactivate} - /> - </div> + <SearchInput + bind:value={searchQuery} + bind:ref={searchInputRef} + onClose={handleSearchModeDeactivate} + onKeyDown={(e) => e.key === 'Escape' && handleSearchModeDeactivate()} + placeholder="Search conversations..." + {isCancelAlwaysVisible} + /> {:else} - <Button - class="w-full justify-between backdrop-blur-none! hover:[&>kbd]:opacity-100" - href="?new_chat=true#/" - onclick={handleMobileSidebarItemClick} - variant="ghost" - > - <div class="flex items-center gap-2"> - <SquarePen class="h-4 w-4" /> - - New chat - </div> - - <KeyboardShortcutInfo keys={['shift', 'cmd', 'o']} /> - </Button> - - <Button - class="w-full justify-between backdrop-blur-none! hover:[&>kbd]:opacity-100" - onclick={() => { - isSearchModeActive = true; - }} - variant="ghost" - > - <div class="flex items-center gap-2"> - <Search class="h-4 w-4" /> - - Search - </div> - - <KeyboardShortcutInfo keys={['cmd', 'k']} /> - </Button> - - <Button - class="w-full justify-between backdrop-blur-none! hover:[&>kbd]:opacity-100" - onclick={() => { - chatSettingsDialog.open(SETTINGS_SECTION_TITLES.MCP); - }} - variant="ghost" - > - <div class="flex items-center gap-2"> - <McpLogo class="h-4 w-4" /> - - MCP Servers - </div> - </Button> + {#each SIDEBAR_ACTIONS_ITEMS as item (item.route)} + {#if !item.route} + <Button + class="w-full justify-between px-2 backdrop-blur-none! hover:[&>kbd]:opacity-100" + onclick={activateSearch} + variant="ghost" + > + <div class="flex items-center gap-2"> + {@render itemIcon(item.icon)} + + {item.tooltip} + </div> + + {#if item.keys} + <KeyboardShortcutInfo keys={item.keys} /> + {/if} + </Button> + {:else} + <Button + class="w-full justify-between px-2 backdrop-blur-none! hover:[&>kbd]:opacity-100 {(item.activeRouteId && + page.route.id === item.activeRouteId) || + (item.activeRoutePrefix && page.route.id?.startsWith(item.activeRoutePrefix)) + ? 'bg-accent text-accent-foreground' + : ''}" + href={item.route} + onclick={handleMobileSidebarItemClick} + variant="ghost" + > + <div class="flex items-center gap-2"> + {@render itemIcon(item.icon)} + + {item.tooltip} + </div> + + {#if item.keys} + <KeyboardShortcutInfo keys={item.keys} /> + {/if} + </Button> + {/if} + {/each} {/if} </div> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebarConversationItem.svelte b/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebarConversationItem.svelte index e22cb4f829e..8211870d974 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebarConversationItem.svelte +++ b/tools/server/webui/src/lib/components/app/chat/ChatSidebar/ChatSidebarConversationItem.svelte @@ -19,7 +19,6 @@ isActive?: boolean; depth?: number; conversation: DatabaseConversation; - handleMobileSidebarItemClick?: () => void; onDelete?: (id: string) => void; onEdit?: (id: string) => void; onSelect?: (id: string) => void; @@ -28,7 +27,6 @@ let { conversation, - handleMobileSidebarItemClick, onDelete, onEdit, onSelect, @@ -150,9 +148,7 @@ </Tooltip.Root> {/if} - <!-- svelte-ignore a11y_click_events_have_key_events --> - <!-- svelte-ignore a11y_no_static_element_interactions --> - <span class="truncate text-sm font-medium" onclick={handleMobileSidebarItemClick}> + <span class="truncate text-sm font-medium"> {conversation.name} </span> </div> diff --git a/tools/server/webui/src/lib/components/app/chat/index.ts b/tools/server/webui/src/lib/components/app/chat/index.ts index 88690086c7e..c22022ae47a 100644 --- a/tools/server/webui/src/lib/components/app/chat/index.ts +++ b/tools/server/webui/src/lib/components/app/chat/index.ts @@ -124,7 +124,7 @@ export { default as ChatAttachmentsViewAll } from './ChatAttachments/ChatAttachm * **Architecture:** * - Composes ChatFormTextarea, ChatFormActions, and ChatFormPromptPicker * - Manages file upload state via `uploadedFiles` bindable prop - * - Integrates with ModelsSelector for model selection in router mode + * - Integrates with ModelsSelectorDropdown for model selection in router mode * - Communicates with parent via callbacks (onSubmit, onFilesAdd, onStop, etc.) * * **Input Handling:** @@ -168,14 +168,14 @@ export { default as ChatForm } from './ChatForm/ChatForm.svelte'; * Images, Text Files, and PDF Files. Each option filters the file picker to * appropriate types. Images option is disabled when model lacks vision modality. */ -export { default as ChatFormActionAttachmentsDropdown } from './ChatForm/ChatFormActions/ChatFormActionAttachmentsDropdown.svelte'; +export { default as ChatFormActionAttachmentsDropdown } from './ChatForm/ChatFormActions/ChatFormActionsAttachments/ChatFormActionAttachmentsDropdown.svelte'; /** * Mobile sheet variant of the file attachment selector. Renders a bottom sheet * with the same options as ChatFormActionAttachmentsDropdown, optimized for * touch interaction on mobile devices. */ -export { default as ChatFormActionAttachmentsSheet } from './ChatForm/ChatFormActions/ChatFormActionAttachmentsSheet.svelte'; +export { default as ChatFormActionAttachmentsSheet } from './ChatForm/ChatFormActions/ChatFormActionsAttachments/ChatFormActionAttachmentsSheet.svelte'; /** * Audio recording button with real-time recording indicator. Records audio @@ -198,6 +198,49 @@ export { default as ChatFormActions } from './ChatForm/ChatFormActions/ChatFormA */ export { default as ChatFormActionSubmit } from './ChatForm/ChatFormActions/ChatFormActionSubmit.svelte'; +/** + * Dropdown submenu for managing tool permissions in the chat form. + * + * Displays a collapsible list of available tools organized by group (Built-in / JSON Schema). + * Each group can be expanded to show individual tools with checkboxes for enabling/disabling. + * Provides bulk enable/disable controls per group and shows enabled/total tool counts. + * Opens the tools panel on the server when the menu opens. + * + * Features: + * - Grouped tools with collapsible sections + * - Group favicon display (MCP server icons) + * - Per-group and per-tool toggle checkboxes + * - Loading/error states for tool discovery + * - Integration with toolsPanel for state management + * + * @example + * ```svelte + * <ChatFormActionToolsSubmenu /> + * ``` + */ +export { default as ChatFormActionToolsSubmenu } from './ChatForm/ChatFormActions/ChatFormActionToolsSubmenu.svelte'; + +/** + * Dropdown submenu for managing MCP servers in the chat form. + * + * Displays a searchable list of enabled MCP servers with toggle switches + * to enable/disable each server for chat. Shows server favicon, health status, + * and a "Manage MCP Servers" settings link. + * + * Features: + * - Search/filter servers by name or URL + * - Per-server toggle to enable/disable for chat + * - Health check indicator (shows "Error" badge for failed servers) + * - Server favicon display + * - Settings link to manage MCP server configuration + * + * @example + * ```svelte + * <ChatFormActionMcpServersSubmenu onMcpSettingsClick={handleMcpSettingsClick} /> + * ``` + */ +export { default as ChatFormActionMcpServersSubmenu } from './ChatForm/ChatFormActions/ChatFormActionMcpServersSubmenu.svelte'; + /** * Hidden file input element for programmatic file selection. */ @@ -456,6 +499,8 @@ export { default as ChatMessage } from './ChatMessages/ChatMessage.svelte'; * ``` */ export { default as ChatMessageAgenticContent } from './ChatMessages/ChatMessageAgenticContent.svelte'; +export { default as ChatMessagePermissionRequest } from './ChatMessages/ChatMessagePermissionRequest.svelte'; +export { default as ChatMessageContinueRequest } from './ChatMessages/ChatMessageContinueRequest.svelte'; /** * Action buttons toolbar for messages. Displays copy, edit, delete, and regenerate @@ -547,7 +592,7 @@ export { default as ChatMessageEditForm } from './ChatMessages/ChatMessageEditFo * and server state. Used as the main content area in chat routes. * * **Architecture:** - * - Composes ChatMessages, ChatScreenForm, ChatScreenHeader, and dialogs + * - Composes ChatMessages, ChatScreenForm, and dialogs * - Manages auto-scroll via `createAutoScrollController()` hook * - Handles file upload pipeline (validation → processing → state update) * - Integrates with serverStore for loading/error/warning states @@ -602,13 +647,6 @@ export { default as ChatScreenDragOverlay } from './ChatScreen/ChatScreenDragOve */ export { default as ChatScreenForm } from './ChatScreen/ChatScreenForm.svelte'; -/** - * Header bar for chat screen. Displays conversation title (or "New Chat"), - * model selector (in router mode), and action buttons (delete conversation). - * Sticky positioned at the top of the chat area. - */ -export { default as ChatScreenHeader } from './ChatScreen/ChatScreenHeader.svelte'; - /** * Processing info display during generation. Shows real-time statistics: * tokens per second, prompt/completion token counts, and elapsed time. @@ -636,55 +674,6 @@ export { default as ChatScreenProcessingInfo } from './ChatScreen/ChatScreenProc * */ -/** - * **ChatSettings** - Application settings panel - * - * Comprehensive settings interface with categorized sections. Manages all - * user preferences and sampling parameters. Integrates with config store - * for persistence and ParameterSyncService for server synchronization. - * - * **Architecture:** - * - Uses tabbed navigation with category sections - * - Maintains local form state, commits on save - * - Tracks user overrides vs server defaults for sampling params - * - Exposes reset() method for dialog close without save - * - * **Categories:** - * - **General**: API key, system message, show system messages toggle - * - **Display**: Theme selection, message actions visibility, model info badge - * - **Sampling**: Temperature, top_p, top_k, min_p, repeat_penalty, etc. - * - **Penalties**: Frequency penalty, presence penalty, repeat last N - * - **Import/Export**: Conversation backup and restore - * - **MCP**: MCP server management (opens DialogChatSettings with MCP tab) - * - **Developer**: Debug options, disable auto-scroll - * - * **Parameter Sync:** - * - Fetches defaults from server `/props` endpoint - * - Shows source indicator badge (Custom/Server Props/Default) - * - Real-time badge updates as user types - * - Tracks which parameters user has explicitly overridden - * - * **Features:** - * - Mobile-responsive layout with horizontal scrolling tabs - * - Form validation with error messages - * - Secure API key storage (masked input) - * - Import/export conversations as JSON - * - Reset to defaults option per parameter - * - * **Exported API:** - * - `reset()` - Reset form fields to currently saved values (for cancel action) - * - * @example - * ```svelte - * <ChatSettings - * bind:this={settingsRef} - * onSave={() => dialogOpen = false} - * onCancel={() => { settingsRef.reset(); dialogOpen = false; }} - * /> - * ``` - */ -export { default as ChatSettings } from './ChatSettings/ChatSettings.svelte'; - /** * Footer with save/cancel buttons for settings panel. Positioned at bottom * of settings dialog. Save button commits form state to config store, @@ -699,13 +688,6 @@ export { default as ChatSettingsFooter } from './ChatSettings/ChatSettingsFooter */ export { default as ChatSettingsFields } from './ChatSettings/ChatSettingsFields.svelte'; -/** - * Import/export tab content for conversation data management. Provides buttons - * to export all conversations as JSON file and import from JSON file. - * Handles file download/upload and data validation. - */ -export { default as ChatSettingsImportExportTab } from './ChatSettings/ChatSettingsImportExportTab.svelte'; - /** * Badge indicating parameter source for sampling settings. Shows one of: * - **Custom**: User has explicitly set this value (orange badge) @@ -715,6 +697,15 @@ export { default as ChatSettingsImportExportTab } from './ChatSettings/ChatSetti */ export { default as ChatSettingsParameterSourceIndicator } from './ChatSettings/ChatSettingsParameterSourceIndicator.svelte'; +/** + * **ChatSettingsToolsTab** - Tools configuration tab for chat settings + * + * Displays available tools grouped by source (built-in, MCP, custom) with + * toggles to enable/disable individual tools and tool groups. Shows MCP + * server favicons and permission management controls. + */ +export { default as ChatSettingsToolsTab } from './ChatSettings/ChatSettingsToolsTab.svelte'; + /** * * SIDEBAR diff --git a/tools/server/webui/src/lib/components/app/dialogs/DialogChatSettings.svelte b/tools/server/webui/src/lib/components/app/dialogs/DialogChatSettings.svelte deleted file mode 100644 index 793af9a40f2..00000000000 --- a/tools/server/webui/src/lib/components/app/dialogs/DialogChatSettings.svelte +++ /dev/null @@ -1,38 +0,0 @@ -<script lang="ts"> - import * as Dialog from '$lib/components/ui/dialog'; - import { ChatSettings } from '$lib/components/app'; - import type { SettingsSectionTitle } from '$lib/constants'; - - interface Props { - onOpenChange?: (open: boolean) => void; - open?: boolean; - initialSection?: SettingsSectionTitle; - } - - let { onOpenChange, open = false, initialSection }: Props = $props(); - - let chatSettingsRef: ChatSettings | undefined = $state(); - - function handleClose() { - onOpenChange?.(false); - } - - function handleSave() { - onOpenChange?.(false); - } - - $effect(() => { - if (open && chatSettingsRef) { - chatSettingsRef.reset(); - } - }); -</script> - -<Dialog.Root {open} onOpenChange={handleClose}> - <Dialog.Content - class="z-999999 flex h-[100dvh] max-h-[100dvh] min-h-[100dvh] max-w-4xl! flex-col gap-0 rounded-none - p-0 md:h-[64vh] md:max-h-[64vh] md:min-h-0 md:rounded-lg" - > - <ChatSettings bind:this={chatSettingsRef} onSave={handleSave} {initialSection} /> - </Dialog.Content> -</Dialog.Root> diff --git a/tools/server/webui/src/lib/components/app/dialogs/DialogMcpServerAddNew.svelte b/tools/server/webui/src/lib/components/app/dialogs/DialogMcpServerAddNew.svelte new file mode 100644 index 00000000000..349f7e7fbd1 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/dialogs/DialogMcpServerAddNew.svelte @@ -0,0 +1,88 @@ +<script lang="ts"> + import { Button } from '$lib/components/ui/button'; + import * as Dialog from '$lib/components/ui/dialog'; + import { McpServerForm } from '$lib/components/app/mcp'; + import { mcpStore } from '$lib/stores/mcp.svelte'; + import { conversationsStore } from '$lib/stores/conversations.svelte'; + import { uuid } from '$lib/utils'; + import { MCP_SERVER_ID_PREFIX } from '$lib/constants'; + + interface Props { + open: boolean; + onOpenChange?: (open: boolean) => void; + } + + let { open = $bindable(), onOpenChange }: Props = $props(); + + let newServerUrl = $state(''); + let newServerHeaders = $state(''); + let newServerUrlError = $derived.by(() => { + if (!newServerUrl.trim()) return 'URL is required'; + try { + new URL(newServerUrl); + + return null; + } catch { + return 'Invalid URL format'; + } + }); + + function handleOpenChange(value: boolean) { + if (!value) { + newServerUrl = ''; + newServerHeaders = ''; + } + open = value; + onOpenChange?.(value); + } + + function saveNewServer() { + if (newServerUrlError) return; + + const newServerId = uuid() ?? `${MCP_SERVER_ID_PREFIX}-${Date.now()}`; + + mcpStore.addServer({ + id: newServerId, + enabled: true, + url: newServerUrl.trim(), + headers: newServerHeaders.trim() || undefined + }); + + conversationsStore.setMcpServerOverride(newServerId, true); + + handleOpenChange(false); + } +</script> + +<Dialog.Root {open} onOpenChange={handleOpenChange}> + <Dialog.Content class="sm:max-w-md"> + <Dialog.Header> + <Dialog.Title>Add New Server</Dialog.Title> + </Dialog.Header> + + <div class="space-y-4 py-4"> + <McpServerForm + url={newServerUrl} + headers={newServerHeaders} + onUrlChange={(v) => (newServerUrl = v)} + onHeadersChange={(v) => (newServerHeaders = v)} + urlError={newServerUrl ? newServerUrlError : null} + id="new-server" + /> + </div> + + <Dialog.Footer> + <Button variant="secondary" size="sm" onclick={() => handleOpenChange(false)}>Cancel</Button> + + <Button + variant="default" + size="sm" + onclick={saveNewServer} + disabled={!!newServerUrlError} + aria-label="Save" + > + Add + </Button> + </Dialog.Footer> + </Dialog.Content> +</Dialog.Root> diff --git a/tools/server/webui/src/lib/components/app/dialogs/DialogMcpServersSettings.svelte b/tools/server/webui/src/lib/components/app/dialogs/DialogMcpServersSettings.svelte deleted file mode 100644 index f0cd325d498..00000000000 --- a/tools/server/webui/src/lib/components/app/dialogs/DialogMcpServersSettings.svelte +++ /dev/null @@ -1,39 +0,0 @@ -<script lang="ts"> - import * as Dialog from '$lib/components/ui/dialog'; - import { McpLogo, McpServersSettings } from '$lib/components/app'; - - interface Props { - onOpenChange?: (open: boolean) => void; - open?: boolean; - } - - let { onOpenChange, open = $bindable(false) }: Props = $props(); - - function handleClose() { - onOpenChange?.(false); - } -</script> - -<Dialog.Root {open} onOpenChange={handleClose}> - <Dialog.Content - class="z-999999 flex h-[100dvh] max-h-[100dvh] min-h-[100dvh] flex-col gap-0 rounded-none p-0 - md:h-[80dvh] md:h-auto md:max-h-[80dvh] md:min-h-0 md:rounded-lg" - style="max-width: 56rem;" - > - <div class="grid gap-2 border-b border-border/30 p-4 md:p-6"> - <Dialog.Title class="inline-flex items-center text-lg font-semibold"> - <McpLogo class="mr-2 inline h-4 w-4" /> - - MCP Servers - </Dialog.Title> - - <Dialog.Description class="text-sm text-muted-foreground"> - Add and configure MCP servers to enable agentic tool execution capabilities. - </Dialog.Description> - </div> - - <div class="flex-1 overflow-y-auto px-4 py-6"> - <McpServersSettings /> - </div> - </Dialog.Content> -</Dialog.Root> diff --git a/tools/server/webui/src/lib/components/app/dialogs/index.ts b/tools/server/webui/src/lib/components/app/dialogs/index.ts index 216eae6843e..9c28bfb3cef 100644 --- a/tools/server/webui/src/lib/components/app/dialogs/index.ts +++ b/tools/server/webui/src/lib/components/app/dialogs/index.ts @@ -11,30 +11,12 @@ */ /** + * **DialogMcpServerAddNew** - Add new MCP server dialog * - * SETTINGS DIALOGS - * - * Dialogs for application and server configuration. - * - */ - -/** - * **DialogChatSettings** - Settings dialog wrapper - * - * Modal dialog containing ChatSettings component with proper - * open/close state management and automatic form reset on open. - * - * **Architecture:** - * - Wraps ChatSettings component in ShadCN Dialog - * - Manages open/close state via bindable `open` prop - * - Resets form state when dialog opens to discard unsaved changes - * - * @example - * ```svelte - * <DialogChatSettings bind:open={showSettings} /> - * ``` + * Modal dialog for adding a new MCP server with URL and optional headers. + * Validates URL format and integrates with mcpStore and conversationsStore. */ -export { default as DialogChatSettings } from './DialogChatSettings.svelte'; +export { default as DialogMcpServerAddNew } from './DialogMcpServerAddNew.svelte'; /** * diff --git a/tools/server/webui/src/lib/components/app/forms/SearchInput.svelte b/tools/server/webui/src/lib/components/app/forms/SearchInput.svelte index 9a8088d9dae..19dd7e6a7ef 100644 --- a/tools/server/webui/src/lib/components/app/forms/SearchInput.svelte +++ b/tools/server/webui/src/lib/components/app/forms/SearchInput.svelte @@ -11,6 +11,7 @@ class?: string; id?: string; ref?: HTMLInputElement | null; + isCancelAlwaysVisible?: boolean; } let { @@ -21,10 +22,11 @@ onKeyDown, class: className, id, - ref = $bindable(null) + ref = $bindable(null), + isCancelAlwaysVisible = false }: Props = $props(); - let showClearButton = $derived(!!value || !!onClose); + let showClearButton = $derived(isCancelAlwaysVisible || !!value || !!onClose); function handleInput(event: Event) { const target = event.target as HTMLInputElement; @@ -63,7 +65,7 @@ {#if showClearButton} <button type="button" - class="absolute top-1/2 right-3 -translate-y-1/2 transform text-muted-foreground transition-colors hover:text-foreground" + class="absolute top-1/2 right-3 -translate-y-1/2 transform cursor-pointer text-muted-foreground transition-colors hover:text-foreground" onclick={handleClear} aria-label={value ? 'Clear search' : 'Close'} > diff --git a/tools/server/webui/src/lib/components/app/index.ts b/tools/server/webui/src/lib/components/app/index.ts index 56bd8a48520..4914c743a50 100644 --- a/tools/server/webui/src/lib/components/app/index.ts +++ b/tools/server/webui/src/lib/components/app/index.ts @@ -6,6 +6,7 @@ export * from './dialogs'; export * from './forms'; export * from './mcp'; export * from './misc'; +export * from './settings'; export * from './models'; export * from './navigation'; export * from './server'; diff --git a/tools/server/webui/src/lib/components/app/mcp/McpActiveServersAvatars.svelte b/tools/server/webui/src/lib/components/app/mcp/McpActiveServersAvatars.svelte index 75858493e20..539132316aa 100644 --- a/tools/server/webui/src/lib/components/app/mcp/McpActiveServersAvatars.svelte +++ b/tools/server/webui/src/lib/components/app/mcp/McpActiveServersAvatars.svelte @@ -1,15 +1,18 @@ <script lang="ts"> import { cn } from '$lib/components/ui/utils'; + import * as Tooltip from '$lib/components/ui/tooltip'; import { conversationsStore } from '$lib/stores/conversations.svelte'; import { mcpStore } from '$lib/stores/mcp.svelte'; import { HealthCheckStatus } from '$lib/enums'; import { MAX_DISPLAYED_MCP_AVATARS } from '$lib/constants'; + import McpLogo from './McpLogo.svelte'; interface Props { class?: string; + onClick?: () => void; } - let { class: className = '' }: Props = $props(); + let { class: className = '', onClick }: Props = $props(); let mcpServers = $derived(mcpStore.getServersSorted().filter((s) => s.enabled)); let enabledMcpServersForChat = $derived( @@ -28,30 +31,60 @@ let mcpFavicons = $derived( healthyEnabledMcpServers .slice(0, MAX_DISPLAYED_MCP_AVATARS) - .map((s) => ({ id: s.id, url: mcpStore.getServerFavicon(s.id) })) + .map((s) => ({ + id: s.id, + name: mcpStore.getServerDisplayName(s.id), + url: mcpStore.getServerFavicon(s.id) + })) .filter((f) => f.url !== null) ); </script> -{#if hasEnabledMcpServers && mcpFavicons.length > 0} - <div class={cn('inline-flex items-center gap-1.5', className)}> +{#if !hasEnabledMcpServers} + <button + class={cn( + 'inline-flex cursor-pointer items-center gap-0.75 opacity-70 transition-opacity hover:opacity-100', + className, + 'opacity-50 hover:opacity-100' + )} + onclick={onClick} + > + <Tooltip.Root> + <Tooltip.Trigger> + <McpLogo class="h-4 w-4" /> + </Tooltip.Trigger> + + <Tooltip.Content> + <p>MCP Servers</p> + </Tooltip.Content> + </Tooltip.Root> + </button> +{:else if mcpFavicons.length > 0} + <button class={cn('inline-flex items-center gap-0.75', className)} onclick={onClick}> <div class="flex -space-x-1"> {#each mcpFavicons as favicon (favicon.id)} - <div class="box-shadow-lg overflow-hidden rounded-full bg-muted ring-1 ring-muted"> - <img - src={favicon.url} - alt="" - class="h-4 w-4" - onerror={(e) => { - (e.currentTarget as HTMLImageElement).style.display = 'none'; - }} - /> - </div> + <Tooltip.Root> + <Tooltip.Trigger> + <div class="box-shadow-lg overflow-hidden rounded-full bg-muted ring-1 ring-muted"> + <img + src={favicon.url} + alt="" + class="h-4 w-4" + onerror={(e) => { + (e.currentTarget as HTMLImageElement).style.display = 'none'; + }} + /> + </div> + </Tooltip.Trigger> + <Tooltip.Content> + <p>{favicon.name}</p> + </Tooltip.Content> + </Tooltip.Root> {/each} </div> {#if extraServersCount > 0} <span class="text-xs text-muted-foreground">+{extraServersCount}</span> {/if} - </div> + </button> {/if} diff --git a/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte b/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte index 5af45bb35cf..8012f10bd1f 100644 --- a/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte +++ b/tools/server/webui/src/lib/components/app/mcp/McpServerCard/McpServerCardHeader.svelte @@ -71,7 +71,7 @@ </div> {#if capabilities || transportType} - <div class="flex flex-wrap items-center gap-1"> + <div class="flex flex-wrap items-center gap-1.5"> {#if transportType} {@const TransportIcon = MCP_TRANSPORT_ICONS[transportType]} <Badge variant="outline" class="h-5 gap-1 px-1.5 text-[10px]"> diff --git a/tools/server/webui/src/lib/components/app/mcp/McpServersSettings.svelte b/tools/server/webui/src/lib/components/app/mcp/McpServersSettings.svelte deleted file mode 100644 index 85232b586e8..00000000000 --- a/tools/server/webui/src/lib/components/app/mcp/McpServersSettings.svelte +++ /dev/null @@ -1,150 +0,0 @@ -<script lang="ts"> - import { Plus } from '@lucide/svelte'; - import { Button } from '$lib/components/ui/button'; - import * as Card from '$lib/components/ui/card'; - import { uuid } from '$lib/utils'; - import { mcpStore } from '$lib/stores/mcp.svelte'; - import { conversationsStore } from '$lib/stores/conversations.svelte'; - import { McpServerCard, McpServerCardSkeleton, McpServerForm } from '$lib/components/app/mcp'; - import { MCP_SERVER_ID_PREFIX } from '$lib/constants'; - import { HealthCheckStatus } from '$lib/enums'; - - let servers = $derived(mcpStore.getServersSorted()); - - let initialLoadComplete = $state(false); - - $effect(() => { - if (initialLoadComplete) return; - - const allChecked = - servers.length > 0 && - servers.every((server) => { - const state = mcpStore.getHealthCheckState(server.id); - - return ( - state.status === HealthCheckStatus.SUCCESS || state.status === HealthCheckStatus.ERROR - ); - }); - - if (allChecked) { - initialLoadComplete = true; - } - }); - - let isAddingServer = $state(false); - let newServerUrl = $state(''); - let newServerHeaders = $state(''); - let newServerUrlError = $derived.by(() => { - if (!newServerUrl.trim()) return 'URL is required'; - try { - new URL(newServerUrl); - - return null; - } catch { - return 'Invalid URL format'; - } - }); - - function showAddServerForm() { - isAddingServer = true; - newServerUrl = ''; - newServerHeaders = ''; - } - - function cancelAddServer() { - isAddingServer = false; - newServerUrl = ''; - newServerHeaders = ''; - } - - function saveNewServer() { - if (newServerUrlError) return; - - const newServerId = uuid() ?? `${MCP_SERVER_ID_PREFIX}-${Date.now()}`; - - mcpStore.addServer({ - id: newServerId, - enabled: true, - url: newServerUrl.trim(), - headers: newServerHeaders.trim() || undefined - }); - - conversationsStore.setMcpServerOverride(newServerId, true); - - isAddingServer = false; - newServerUrl = ''; - newServerHeaders = ''; - } -</script> - -<div class="space-y-5 md:space-y-4"> - <div class="flex items-start justify-between gap-4"> - <div> - <h4 class="text-base font-semibold">Manage Servers</h4> - </div> - - {#if !isAddingServer} - <Button variant="outline" size="sm" class="shrink-0" onclick={showAddServerForm}> - <Plus class="h-4 w-4" /> - - Add New Server - </Button> - {/if} - </div> - - {#if isAddingServer} - <Card.Root class="bg-muted/30 p-4"> - <div class="space-y-4"> - <p class="font-medium">Add New Server</p> - - <McpServerForm - url={newServerUrl} - headers={newServerHeaders} - onUrlChange={(v) => (newServerUrl = v)} - onHeadersChange={(v) => (newServerHeaders = v)} - urlError={newServerUrl ? newServerUrlError : null} - id="new-server" - /> - - <div class="flex items-center justify-end gap-2"> - <Button variant="secondary" size="sm" onclick={cancelAddServer}>Cancel</Button> - - <Button - variant="default" - size="sm" - onclick={saveNewServer} - disabled={!!newServerUrlError} - aria-label="Save" - > - Add - </Button> - </div> - </div> - </Card.Root> - {/if} - - {#if servers.length === 0 && !isAddingServer} - <div class="rounded-md border border-dashed p-4 text-sm text-muted-foreground"> - No MCP Servers configured yet. Add one to enable agentic features. - </div> - {/if} - - {#if servers.length > 0} - <div class="space-y-3"> - {#each servers as server (server.id)} - {#if !initialLoadComplete} - <McpServerCardSkeleton /> - {:else} - <McpServerCard - {server} - faviconUrl={mcpStore.getServerFavicon(server.id)} - enabled={conversationsStore.isMcpServerEnabledForChat(server.id)} - onToggle={async () => await conversationsStore.toggleMcpServerForChat(server.id)} - onUpdate={(updates) => mcpStore.updateServer(server.id, updates)} - onDelete={() => mcpStore.removeServer(server.id)} - /> - {/if} - {/each} - </div> - {/if} -</div> diff --git a/tools/server/webui/src/lib/components/app/mcp/index.ts b/tools/server/webui/src/lib/components/app/mcp/index.ts index 6ab262a8c1d..400a46a403f 100644 --- a/tools/server/webui/src/lib/components/app/mcp/index.ts +++ b/tools/server/webui/src/lib/components/app/mcp/index.ts @@ -39,7 +39,7 @@ * <McpServersSettings /> * ``` */ -export { default as McpServersSettings } from './McpServersSettings.svelte'; +export { default as McpServersSettings } from '../settings/SettingsMcpServers.svelte'; /** * **McpActiveServersAvatars** - Active MCP servers indicator @@ -69,33 +69,6 @@ export { default as McpServersSettings } from './McpServersSettings.svelte'; */ export { default as McpActiveServersAvatars } from './McpActiveServersAvatars.svelte'; -/** - * **McpServersSelector** - Quick MCP server toggle dropdown - * - * Compact dropdown for quickly enabling/disabling MCP servers for the current chat. - * Uses McpActiveServersAvatars as trigger and shows searchable server list with switches. - * - * **Architecture:** - * - Uses DropdownMenuSearchable for searchable dropdown UI - * - McpActiveServersAvatars as the trigger element - * - Integrates with conversationsStore for per-chat toggle - * - Runs health checks on dropdown open - * - * **Features:** - * - Searchable server list by name/URL - * - Switch toggles matching McpServersSettings behavior - * - Error state display for unhealthy servers - * - Footer link to full MCP settings dialog - * - * @example - * ```svelte - * <McpServersSelector - * onSettingsClick={() => showMcpSettings = true} - * /> - * ``` - */ -export { default as McpServersSelector } from './McpServersSelector.svelte'; - /** * **McpCapabilitiesBadges** - Server capabilities display * diff --git a/tools/server/webui/src/lib/components/app/misc/ConversationSelection.svelte b/tools/server/webui/src/lib/components/app/misc/ConversationSelection.svelte index 21412f47e5a..a0f1101fd85 100644 --- a/tools/server/webui/src/lib/components/app/misc/ConversationSelection.svelte +++ b/tools/server/webui/src/lib/components/app/misc/ConversationSelection.svelte @@ -1,8 +1,7 @@ <script lang="ts"> - import { Search, X } from '@lucide/svelte'; import { Button } from '$lib/components/ui/button'; - import { Input } from '$lib/components/ui/input'; import { Checkbox } from '$lib/components/ui/checkbox'; + import SearchInput from '$lib/components/app/forms/SearchInput.svelte'; import { ScrollArea } from '$lib/components/ui/scroll-area'; import { SvelteSet } from 'svelte/reactivity'; @@ -111,21 +110,7 @@ </script> <div class="space-y-4"> - <div class="relative"> - <Search class="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground" /> - - <Input bind:value={searchQuery} placeholder="Search conversations..." class="pr-9 pl-9" /> - - {#if searchQuery} - <button - class="absolute top-1/2 right-3 -translate-y-1/2 text-muted-foreground hover:text-foreground" - onclick={() => (searchQuery = '')} - type="button" - > - <X class="h-4 w-4" /> - </button> - {/if} - </div> + <SearchInput bind:value={searchQuery} placeholder="Search conversations..." /> <div class="flex items-center justify-between text-sm text-muted-foreground"> <span> diff --git a/tools/server/webui/src/lib/components/app/models/ModelId.svelte b/tools/server/webui/src/lib/components/app/models/ModelId.svelte index 272b697c463..e4653d6f37e 100644 --- a/tools/server/webui/src/lib/components/app/models/ModelId.svelte +++ b/tools/server/webui/src/lib/components/app/models/ModelId.svelte @@ -5,8 +5,9 @@ interface Props { modelId: string; - showOrgName?: boolean; + hideOrgName?: boolean; showRaw?: boolean; + hideQuantization?: boolean; aliases?: string[]; tags?: string[]; class?: string; @@ -14,8 +15,9 @@ let { modelId, - showOrgName = false, + hideOrgName = false, showRaw = undefined, + hideQuantization = false, aliases, tags, class: className = '', @@ -41,7 +43,7 @@ {:else} <span class="flex min-w-0 flex-wrap items-center gap-1 {className}" {...rest}> <span class="min-w-0 truncate font-medium"> - {#if showOrgName && parsed.orgName && !(aliases && aliases.length > 0)}{parsed.orgName}/{/if}{displayName} + {#if !hideOrgName && parsed.orgName && !(aliases && aliases.length > 0)}{parsed.orgName}/{/if}{displayName} </span> {#if parsed.params} @@ -50,7 +52,7 @@ </span> {/if} - {#if parsed.quantization} + {#if parsed.quantization && !hideQuantization} <span class={badgeClass}> {parsed.quantization} </span> diff --git a/tools/server/webui/src/lib/components/app/models/ModelsSelector.svelte b/tools/server/webui/src/lib/components/app/models/ModelsSelectorDropdown.svelte similarity index 50% rename from tools/server/webui/src/lib/components/app/models/ModelsSelector.svelte rename to tools/server/webui/src/lib/components/app/models/ModelsSelectorDropdown.svelte index ccda78690cf..da9b3e730df 100644 --- a/tools/server/webui/src/lib/components/app/models/ModelsSelector.svelte +++ b/tools/server/webui/src/lib/components/app/models/ModelsSelectorDropdown.svelte @@ -1,19 +1,10 @@ <script lang="ts"> - import { onMount } from 'svelte'; import { ChevronDown, Loader2, Package } from '@lucide/svelte'; import * as DropdownMenu from '$lib/components/ui/dropdown-menu'; import * as Tooltip from '$lib/components/ui/tooltip'; import { cn } from '$lib/components/ui/utils'; - import { - modelsStore, - modelOptions, - modelsLoading, - modelsUpdating, - selectedModelId, - singleModelName - } from '$lib/stores/models.svelte'; import { KeyboardKey } from '$lib/enums'; - import { isRouterMode } from '$lib/stores/server.svelte'; + import { useModelsSelector } from '$lib/hooks/use-models-selector.svelte'; import { DialogModelInformation, DropdownMenuSearchable, @@ -21,8 +12,7 @@ ModelsSelectorList, ModelsSelectorOption } from '$lib/components/app'; - import type { ModelOption } from '$lib/types/models'; - import { filterModelOptions, groupModelOptions, type ModelItem } from './utils'; + import type { ModelItem } from './utils'; interface Props { class?: string; @@ -42,90 +32,26 @@ useGlobalSelection = false }: Props = $props(); - let options = $derived( - modelOptions().filter((option) => { - const modelProps = modelsStore.getModelProps(option.model); - - return modelProps?.webui !== false; - }) - ); - let loading = $derived(modelsLoading()); - let updating = $derived(modelsUpdating()); - let activeId = $derived(selectedModelId()); - let isRouter = $derived(isRouterMode()); - let serverModel = $derived(singleModelName()); - - let isHighlightedCurrentModelActive = $derived.by(() => { - if (!isRouter || !currentModel) return false; - - const currentOption = options.find((option) => option.model === currentModel); - - return currentOption ? currentOption.id === activeId : false; - }); - - let isCurrentModelInCache = $derived.by(() => { - if (!isRouter || !currentModel) return true; - - return options.some((option) => option.model === currentModel); - }); - - let isLoadingModel = $state(false); - - let searchTerm = $state(''); + let isOpen = $state(false); let highlightedIndex = $state<number>(-1); - let filteredOptions = $derived(filterModelOptions(options, searchTerm)); - - let groupedFilteredOptions = $derived( - groupModelOptions(filteredOptions, modelsStore.favoriteModelIds, (m) => - modelsStore.isModelLoaded(m) - ) - ); + const ms = useModelsSelector({ + currentModel: () => currentModel, + useGlobalSelection: () => useGlobalSelection, + onModelChange: () => onModelChange, + onOpenChange: (open) => { + isOpen = open; + highlightedIndex = -1; + } + }); $effect(() => { - void searchTerm; + void ms.searchTerm; highlightedIndex = -1; }); - let isOpen = $state(false); - let showModelDialog = $state(false); - let infoModelId = $state<string | null>(null); - - function handleInfoClick(modelName: string) { - infoModelId = modelName; - showModelDialog = true; - } - - onMount(() => { - modelsStore.fetch().catch((error) => { - console.error('Unable to load models:', error); - }); - }); - - function handleOpenChange(open: boolean) { - if (loading || updating) return; - - if (isRouter) { - if (open) { - isOpen = true; - searchTerm = ''; - highlightedIndex = -1; - - modelsStore.fetchRouterModels().then(() => { - modelsStore.fetchModalitiesForLoadedModels(); - }); - } else { - isOpen = false; - searchTerm = ''; - highlightedIndex = -1; - } - } else { - showModelDialog = open; - } - } - export function open() { - handleOpenChange(true); + ms.handleOpenChange(true); } function handleSearchKeyDown(event: KeyboardEvent) { @@ -134,9 +60,9 @@ if (event.key === KeyboardKey.ARROW_DOWN) { event.preventDefault(); - if (filteredOptions.length === 0) return; + if (ms.filteredOptions.length === 0) return; - if (highlightedIndex === -1 || highlightedIndex === filteredOptions.length - 1) { + if (highlightedIndex === -1 || highlightedIndex === ms.filteredOptions.length - 1) { highlightedIndex = 0; } else { highlightedIndex += 1; @@ -144,146 +70,69 @@ } else if (event.key === KeyboardKey.ARROW_UP) { event.preventDefault(); - if (filteredOptions.length === 0) return; + if (ms.filteredOptions.length === 0) return; if (highlightedIndex === -1 || highlightedIndex === 0) { - highlightedIndex = filteredOptions.length - 1; + highlightedIndex = ms.filteredOptions.length - 1; } else { highlightedIndex -= 1; } } else if (event.key === KeyboardKey.ENTER) { event.preventDefault(); - if (highlightedIndex >= 0 && highlightedIndex < filteredOptions.length) { - const option = filteredOptions[highlightedIndex]; + if (highlightedIndex >= 0 && highlightedIndex < ms.filteredOptions.length) { + const option = ms.filteredOptions[highlightedIndex]; - handleSelect(option.id); - } else if (filteredOptions.length > 0) { + ms.handleSelect(option.id); + } else if (ms.filteredOptions.length > 0) { highlightedIndex = 0; } } } - - async function handleSelect(modelId: string) { - const option = options.find((opt) => opt.id === modelId); - if (!option) return; - - let shouldCloseMenu = true; - - if (onModelChange) { - const result = await onModelChange(option.id, option.model); - - if (result === false) { - shouldCloseMenu = false; - } - } else { - await modelsStore.selectModelById(option.id); - } - - if (shouldCloseMenu) { - handleOpenChange(false); - - requestAnimationFrame(() => { - const textarea = document.querySelector<HTMLTextAreaElement>( - '[data-slot="chat-form"] textarea' - ); - textarea?.focus(); - }); - } - - if (!onModelChange && isRouter && !modelsStore.isModelLoaded(option.model)) { - isLoadingModel = true; - modelsStore - .loadModel(option.model) - .catch((error) => console.error('Failed to load model:', error)) - .finally(() => (isLoadingModel = false)); - } - } - - function getDisplayOption(): ModelOption | undefined { - if (!isRouter) { - const displayModel = serverModel || currentModel; - if (displayModel) { - return { - id: serverModel ? 'current' : 'offline-current', - model: displayModel, - name: displayModel.split('/').pop() || displayModel, - capabilities: [] - }; - } - - return undefined; - } - - if (useGlobalSelection && activeId) { - const selected = options.find((option) => option.id === activeId); - - if (selected) return selected; - } - - if (currentModel) { - if (!isCurrentModelInCache) { - return { - id: 'not-in-cache', - model: currentModel, - name: currentModel.split('/').pop() || currentModel, - capabilities: [] - }; - } - - return options.find((option) => option.model === currentModel); - } - - if (activeId) { - return options.find((option) => option.id === activeId); - } - - return undefined; - } </script> <div class={cn('relative inline-flex flex-col items-end gap-1', className)}> - {#if loading && options.length === 0 && isRouter} + {#if ms.loading && ms.options.length === 0 && ms.isRouter} <div class="flex items-center gap-2 text-xs text-muted-foreground"> <Loader2 class="h-3.5 w-3.5 animate-spin" /> Loading models… </div> - {:else if options.length === 0 && isRouter} + {:else if ms.options.length === 0 && ms.isRouter} {#if currentModel} <span class={cn( 'inline-flex items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs text-muted-foreground', className )} - style="max-width: min(calc(100cqw - 9rem), 20rem)" + style="max-width: min(calc(100cqw - 10rem), 20rem)" > <Package class="h-3.5 w-3.5" /> - <ModelId modelId={currentModel} class="min-w-0" showOrgName /> + <ModelId modelId={currentModel} class="min-w-0" hideQuantization /> </span> {:else} <p class="text-xs text-muted-foreground">No models available.</p> {/if} {:else} - {@const selectedOption = getDisplayOption()} + {@const selectedOption = ms.getDisplayOption()} - {#if isRouter} - <DropdownMenu.Root bind:open={isOpen} onOpenChange={handleOpenChange}> + {#if ms.isRouter} + <DropdownMenu.Root bind:open={isOpen} onOpenChange={ms.handleOpenChange}> <DropdownMenu.Trigger class={cn( `inline-grid cursor-pointer grid-cols-[1fr_auto_1fr] items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60`, - !isCurrentModelInCache + !ms.isCurrentModelInCache ? 'bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400' : forceForegroundText ? 'text-foreground' - : isHighlightedCurrentModelActive + : ms.isHighlightedCurrentModelActive ? 'text-foreground' : 'text-muted-foreground', - isOpen ? 'text-foreground' : '' + isOpen ? 'text-foreground' : '', + 'max-w-[min(calc(100vw-4rem) md:max-w-[min(calc(100cqw-9rem),25rem)]' )} - style="max-width: min(calc(100cqw - 9rem), 20rem)" - disabled={disabled || updating} + disabled={disabled || ms.updating} > <Package class="h-3.5 w-3.5" /> @@ -295,7 +144,7 @@ <ModelId modelId={selectedOption.model} class="min-w-0 overflow-hidden" - showOrgName + hideOrgName={false} {...props} /> {/snippet} @@ -309,7 +158,7 @@ <span class="min-w-0 font-medium">Select model</span> {/if} - {#if updating || isLoadingModel} + {#if ms.updating || ms.isLoadingModel} <Loader2 class="h-3 w-3.5 animate-spin" /> {:else} <ChevronDown class="h-3 w-3.5" /> @@ -321,14 +170,15 @@ class="w-full max-w-[100vw] pt-0 sm:w-max sm:max-w-[calc(100vw-2rem)]" > <DropdownMenuSearchable - bind:searchValue={searchTerm} + searchValue={ms.searchTerm} + onSearchChange={(v) => ms.setSearchTerm(v)} placeholder="Search models..." onSearchKeyDown={handleSearchKeyDown} emptyMessage="No models found." - isEmpty={filteredOptions.length === 0 && isCurrentModelInCache} + isEmpty={ms.filteredOptions.length === 0 && ms.isCurrentModelInCache} > <div class="models-list"> - {#if !isCurrentModelInCache && currentModel} + {#if !ms.isCurrentModelInCache && currentModel} <!-- Show unavailable model as first option (disabled) --> <button type="button" @@ -338,47 +188,47 @@ aria-disabled="true" disabled > - <ModelId modelId={currentModel} class="flex-1" showOrgName /> + <ModelId modelId={currentModel} class="flex-1" hideQuantization /> <span class="ml-2 text-xs whitespace-nowrap opacity-70">(not available)</span> </button> {/if} - {#if filteredOptions.length === 0} + {#if ms.filteredOptions.length === 0} <p class="px-4 py-3 text-sm text-muted-foreground">No models found.</p> {/if} - {#snippet modelOption(item: ModelItem, showOrgName: boolean)} + {#snippet modelOption(item: ModelItem, hideOrgName: boolean)} {@const { option, flatIndex } = item} - {@const isSelected = currentModel === option.model || activeId === option.id} + {@const isSelected = currentModel === option.model || ms.activeId === option.id} {@const isHighlighted = flatIndex === highlightedIndex} - {@const isFav = modelsStore.favoriteModelIds.has(option.model)} + {@const isFav = ms.isFavorite(option.model)} <ModelsSelectorOption {option} {isSelected} {isHighlighted} {isFav} - {showOrgName} - onSelect={handleSelect} - onInfoClick={handleInfoClick} + {hideOrgName} + onSelect={ms.handleSelect} + onInfoClick={ms.handleInfoClick} onMouseEnter={() => (highlightedIndex = flatIndex)} onKeyDown={(e) => { if (e.key === KeyboardKey.ENTER || e.key === KeyboardKey.SPACE) { e.preventDefault(); - handleSelect(option.id); + ms.handleSelect(option.id); } }} /> {/snippet} <ModelsSelectorList - groups={groupedFilteredOptions} + groups={ms.groupedFilteredOptions} {currentModel} - {activeId} + activeId={ms.activeId} sectionHeaderClass="my-1.5 px-2 py-2 text-[13px] font-semibold text-muted-foreground/70 select-none" - onSelect={handleSelect} - onInfoClick={handleInfoClick} + onSelect={ms.handleSelect} + onInfoClick={ms.handleInfoClick} renderOption={modelOption} /> </div> @@ -389,18 +239,18 @@ <button class={cn( `inline-flex cursor-pointer items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60`, - !isCurrentModelInCache + !ms.isCurrentModelInCache ? 'bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400' : forceForegroundText ? 'text-foreground' - : isHighlightedCurrentModelActive + : ms.isHighlightedCurrentModelActive ? 'text-foreground' : 'text-muted-foreground', isOpen ? 'text-foreground' : '' )} style="max-width: min(calc(100cqw - 6.5rem), 32rem)" - onclick={() => handleOpenChange(true)} - disabled={disabled || updating} + onclick={() => ms.handleOpenChange(true)} + disabled={disabled || ms.updating} > <Package class="h-3.5 w-3.5" /> @@ -412,7 +262,7 @@ <ModelId modelId={selectedOption.model} class="min-w-0 overflow-hidden" - showOrgName + hideOrgName={false} {...props} /> {/snippet} @@ -424,7 +274,7 @@ </Tooltip.Root> {/if} - {#if updating} + {#if ms.updating} <Loader2 class="h-3 w-3.5 animate-spin" /> {/if} </button> @@ -432,6 +282,10 @@ {/if} </div> -{#if showModelDialog} - <DialogModelInformation bind:open={showModelDialog} modelId={infoModelId} /> +{#if ms.showModelDialog} + <DialogModelInformation + open={ms.showModelDialog} + onOpenChange={(v) => ms.setShowModelDialog(v)} + modelId={ms.infoModelId} + /> {/if} diff --git a/tools/server/webui/src/lib/components/app/models/ModelsSelectorList.svelte b/tools/server/webui/src/lib/components/app/models/ModelsSelectorList.svelte index 5c36adc1463..61a4cf0f662 100644 --- a/tools/server/webui/src/lib/components/app/models/ModelsSelectorList.svelte +++ b/tools/server/webui/src/lib/components/app/models/ModelsSelectorList.svelte @@ -27,7 +27,7 @@ let render = $derived(renderOption ?? defaultOption); </script> -{#snippet defaultOption(item: ModelItem, showOrgName: boolean)} +{#snippet defaultOption(item: ModelItem, hideOrgName: boolean)} {@const { option } = item} {@const isSelected = currentModel === option.model || activeId === option.id} {@const isFav = modelsStore.favoriteModelIds.has(option.model)} @@ -37,7 +37,7 @@ {isSelected} isHighlighted={false} {isFav} - {showOrgName} + {hideOrgName} {onSelect} {onInfoClick} onMouseEnter={() => {}} @@ -48,7 +48,7 @@ {#if groups.loaded.length > 0} <p class={sectionHeaderClass}>Loaded models</p> {#each groups.loaded as item (`loaded-${item.option.id}`)} - {@render render(item, true)} + {@render render(item, false)} {/each} {/if} @@ -66,7 +66,7 @@ <p class={orgHeaderClass}>{group.orgName}</p> {/if} {#each group.items as item (item.option.id)} - {@render render(item, false)} + {@render render(item, true)} {/each} {/each} {/if} diff --git a/tools/server/webui/src/lib/components/app/models/ModelsSelectorOption.svelte b/tools/server/webui/src/lib/components/app/models/ModelsSelectorOption.svelte index 3236130a9d6..fdd41ac6904 100644 --- a/tools/server/webui/src/lib/components/app/models/ModelsSelectorOption.svelte +++ b/tools/server/webui/src/lib/components/app/models/ModelsSelectorOption.svelte @@ -20,7 +20,7 @@ isSelected: boolean; isHighlighted: boolean; isFav: boolean; - showOrgName?: boolean; + hideOrgName?: boolean; onSelect: (modelId: string) => void; onMouseEnter: () => void; onKeyDown: (e: KeyboardEvent) => void; @@ -32,7 +32,7 @@ isSelected, isHighlighted, isFav, - showOrgName = false, + hideOrgName = false, onSelect, onMouseEnter, onKeyDown, @@ -71,7 +71,7 @@ > <ModelId modelId={option.model} - {showOrgName} + {hideOrgName} aliases={option.aliases} tags={option.tags} class="flex-1" diff --git a/tools/server/webui/src/lib/components/app/models/ModelsSelectorSheet.svelte b/tools/server/webui/src/lib/components/app/models/ModelsSelectorSheet.svelte index fe88c979f92..46a6445a436 100644 --- a/tools/server/webui/src/lib/components/app/models/ModelsSelectorSheet.svelte +++ b/tools/server/webui/src/lib/components/app/models/ModelsSelectorSheet.svelte @@ -1,25 +1,15 @@ <script lang="ts"> - import { onMount } from 'svelte'; import { ChevronDown, Loader2, Package } from '@lucide/svelte'; import * as Sheet from '$lib/components/ui/sheet'; import { cn } from '$lib/components/ui/utils'; - import { - modelsStore, - modelOptions, - modelsLoading, - modelsUpdating, - selectedModelId, - singleModelName - } from '$lib/stores/models.svelte'; - import { isRouterMode } from '$lib/stores/server.svelte'; + import { useModelsSelector } from '$lib/hooks/use-models-selector.svelte'; import { DialogModelInformation, + ModelId, ModelsSelectorList, SearchInput, TruncatedText } from '$lib/components/app'; - import type { ModelOption } from '$lib/types/models'; - import { filterModelOptions, groupModelOptions } from './utils'; interface Props { class?: string; @@ -41,201 +31,71 @@ useGlobalSelection = false }: Props = $props(); - let options = $derived( - modelOptions().filter((option) => { - const modelProps = modelsStore.getModelProps(option.model); - return modelProps?.webui !== false; - }) - ); - let loading = $derived(modelsLoading()); - let updating = $derived(modelsUpdating()); - let activeId = $derived(selectedModelId()); - let isRouter = $derived(isRouterMode()); - let serverModel = $derived(singleModelName()); - - let isLoadingModel = $state(false); - - let isHighlightedCurrentModelActive = $derived( - !isRouter || !currentModel - ? false - : (() => { - const currentOption = options.find((option) => option.model === currentModel); - - return currentOption ? currentOption.id === activeId : false; - })() - ); - - let isCurrentModelInCache = $derived.by(() => { - if (!isRouter || !currentModel) return true; - - return options.some((option) => option.model === currentModel); - }); - - let searchTerm = $state(''); - - let filteredOptions = $derived(filterModelOptions(options, searchTerm)); - - let groupedFilteredOptions = $derived( - groupModelOptions(filteredOptions, modelsStore.favoriteModelIds, (m) => - modelsStore.isModelLoaded(m) - ) - ); - let sheetOpen = $state(false); - let showModelDialog = $state(false); - let infoModelId = $state<string | null>(null); - function handleInfoClick(modelName: string) { - infoModelId = modelName; - showModelDialog = true; - } - - onMount(() => { - modelsStore.fetch().catch((error) => { - console.error('Unable to load models:', error); - }); - }); - - function handleOpenChange(open: boolean) { - if (loading || updating) return; - - if (isRouter) { - if (open) { - sheetOpen = true; - searchTerm = ''; - - modelsStore.fetchRouterModels().then(() => { - modelsStore.fetchModalitiesForLoadedModels(); - }); - } else { - sheetOpen = false; - searchTerm = ''; - } - } else { - showModelDialog = open; + const ms = useModelsSelector({ + currentModel: () => currentModel, + useGlobalSelection: () => useGlobalSelection, + onModelChange: () => onModelChange, + onOpenChange: (open) => { + sheetOpen = open; } - } + }); export function open() { - handleOpenChange(true); + ms.handleOpenChange(true); } function handleSheetOpenChange(open: boolean) { if (!open) { - handleOpenChange(false); + ms.handleOpenChange(false); } } - - async function handleSelect(modelId: string) { - const option = options.find((opt) => opt.id === modelId); - if (!option) return; - - let shouldCloseMenu = true; - - if (onModelChange) { - const result = await onModelChange(option.id, option.model); - - if (result === false) { - shouldCloseMenu = false; - } - } else { - await modelsStore.selectModelById(option.id); - } - - if (shouldCloseMenu) { - handleOpenChange(false); - - requestAnimationFrame(() => { - const textarea = document.querySelector<HTMLTextAreaElement>( - '[data-slot="chat-form"] textarea' - ); - textarea?.focus(); - }); - } - - if (!onModelChange && isRouter && !modelsStore.isModelLoaded(option.model)) { - isLoadingModel = true; - modelsStore - .loadModel(option.model) - .catch((error) => console.error('Failed to load model:', error)) - .finally(() => (isLoadingModel = false)); - } - } - - function getDisplayOption(): ModelOption | undefined { - if (!isRouter) { - if (serverModel) { - return { - id: 'current', - model: serverModel, - name: serverModel.split('/').pop() || serverModel, - capabilities: [] - }; - } - - return undefined; - } - - if (useGlobalSelection && activeId) { - const selected = options.find((option) => option.id === activeId); - if (selected) return selected; - } - - if (currentModel) { - if (!isCurrentModelInCache) { - return { - id: 'not-in-cache', - model: currentModel, - name: currentModel.split('/').pop() || currentModel, - capabilities: [] - }; - } - - return options.find((option) => option.model === currentModel); - } - - if (activeId) { - return options.find((option) => option.id === activeId); - } - - return undefined; - } </script> <div class={cn('relative inline-flex flex-col items-end gap-1', className)}> - {#if loading && options.length === 0 && isRouter} + {#if ms.loading && ms.options.length === 0 && ms.isRouter} <div class="flex items-center gap-2 text-xs text-muted-foreground"> <Loader2 class="h-3.5 w-3.5 animate-spin" /> Loading models… </div> - {:else if options.length === 0 && isRouter} + {:else if ms.options.length === 0 && ms.isRouter} <p class="text-xs text-muted-foreground">No models available.</p> {:else} - {@const selectedOption = getDisplayOption()} + {@const selectedOption = ms.getDisplayOption()} - {#if isRouter} + {#if ms.isRouter} <button type="button" class={cn( `inline-grid cursor-pointer grid-cols-[1fr_auto_1fr] items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60`, - !isCurrentModelInCache + !ms.isCurrentModelInCache ? 'bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400' : forceForegroundText ? 'text-foreground' - : isHighlightedCurrentModelActive + : ms.isHighlightedCurrentModelActive ? 'text-foreground' : 'text-muted-foreground', sheetOpen ? 'text-foreground' : '' )} style="max-width: min(calc(100cqw - 9rem), 20rem)" - disabled={disabled || updating} - onclick={() => handleOpenChange(true)} + disabled={disabled || ms.updating} + onclick={() => ms.handleOpenChange(true)} > <Package class="h-3.5 w-3.5" /> - <TruncatedText text={selectedOption?.model || 'Select model'} class="min-w-0 font-medium" /> + {#if !selectedOption} + <span class="min-w-0 font-medium">Select model</span> + {:else} + <ModelId + class="text-xs" + modelId={selectedOption?.model || ''} + hideQuantization + hideOrgName + /> + {/if} - {#if updating || isLoadingModel} + {#if ms.updating || ms.isLoadingModel} <Loader2 class="h-3 w-3.5 animate-spin" /> {:else} <ChevronDown class="h-3 w-3.5" /> @@ -254,11 +114,15 @@ <div class="flex flex-col gap-1 pb-4"> <div class="mb-3 px-4"> - <SearchInput placeholder="Search models..." bind:value={searchTerm} /> + <SearchInput + placeholder="Search models..." + value={ms.searchTerm} + onInput={(v) => ms.setSearchTerm(v)} + /> </div> <div class="max-h-[60vh] overflow-y-auto px-2"> - {#if !isCurrentModelInCache && currentModel} + {#if !ms.isCurrentModelInCache && currentModel} <button type="button" class="flex w-full cursor-not-allowed items-center rounded-md bg-red-400/10 px-3 py-2.5 text-left text-sm text-red-400" @@ -272,18 +136,18 @@ <div class="my-1 h-px bg-border"></div> {/if} - {#if filteredOptions.length === 0} + {#if ms.filteredOptions.length === 0} <p class="px-3 py-3 text-center text-sm text-muted-foreground">No models found.</p> {/if} <ModelsSelectorList - groups={groupedFilteredOptions} + groups={ms.groupedFilteredOptions} {currentModel} - {activeId} + activeId={ms.activeId} sectionHeaderClass="px-2 py-2 text-xs font-semibold text-muted-foreground/60 select-none" orgHeaderClass="px-2 py-2 text-xs font-semibold text-muted-foreground/60 select-none [&:not(:first-child)]:mt-2" - onSelect={handleSelect} - onInfoClick={handleInfoClick} + onSelect={ms.handleSelect} + onInfoClick={ms.handleInfoClick} /> </div> </div> @@ -293,23 +157,23 @@ <button class={cn( `inline-flex cursor-pointer items-center gap-1.5 rounded-sm bg-muted-foreground/10 px-1.5 py-1 text-xs transition hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-60`, - !isCurrentModelInCache + !ms.isCurrentModelInCache ? 'bg-red-400/10 !text-red-400 hover:bg-red-400/20 hover:text-red-400' : forceForegroundText ? 'text-foreground' - : isHighlightedCurrentModelActive + : ms.isHighlightedCurrentModelActive ? 'text-foreground' : 'text-muted-foreground' )} style="max-width: min(calc(100cqw - 6.5rem), 32rem)" - onclick={() => handleOpenChange(true)} - disabled={disabled || updating} + onclick={() => ms.handleOpenChange(true)} + disabled={disabled || ms.updating} > <Package class="h-3.5 w-3.5" /> <TruncatedText text={selectedOption?.model || ''} class="min-w-0 font-medium" /> - {#if updating} + {#if ms.updating} <Loader2 class="h-3 w-3.5 animate-spin" /> {/if} </button> @@ -317,6 +181,10 @@ {/if} </div> -{#if showModelDialog} - <DialogModelInformation bind:open={showModelDialog} modelId={infoModelId} /> +{#if ms.showModelDialog} + <DialogModelInformation + open={ms.showModelDialog} + onOpenChange={(v) => ms.setShowModelDialog(v)} + modelId={ms.infoModelId} + /> {/if} diff --git a/tools/server/webui/src/lib/components/app/models/index.ts b/tools/server/webui/src/lib/components/app/models/index.ts index b4bcdf4308e..a6ba6817fc0 100644 --- a/tools/server/webui/src/lib/components/app/models/index.ts +++ b/tools/server/webui/src/lib/components/app/models/index.ts @@ -11,7 +11,7 @@ */ /** - * **ModelsSelector** - Model selection dropdown + * **ModelsSelectorDropdown** - Model selection dropdown (desktop) * * Dropdown for selecting AI models with status indicators, * search, and model information display. Adapts UI based on server mode. @@ -35,20 +35,20 @@ * * @example * ```svelte - * <ModelsSelector + * <ModelsSelectorDropdown * currentModel={conversation.modelId} * onModelChange={(id, name) => updateModel(id)} * useGlobalSelection * /> * ``` */ -export { default as ModelsSelector } from './ModelsSelector.svelte'; +export { default as ModelsSelectorDropdown } from './ModelsSelectorDropdown.svelte'; /** * **ModelsSelectorList** - Grouped model options list * * Renders grouped model options (loaded, favorites, available) with section - * headers and org subgroups. Shared between ModelsSelector and ModelsSelectorSheet + * headers and org subgroups. Shared between ModelsSelectorDropdown and ModelsSelectorSheet * to avoid template duplication. * * Accepts an optional `renderOption` snippet to customize how each option is @@ -68,8 +68,8 @@ export { default as ModelsSelectorOption } from './ModelsSelectorOption.svelte'; /** * **ModelsSelectorSheet** - Mobile model selection sheet * - * Bottom sheet variant of ModelsSelector optimized for touch interaction - * on mobile devices. Same functionality as ModelsSelector but uses Sheet UI + * Bottom sheet variant of ModelsSelectorDropdown optimized for touch interaction + * on mobile devices. Same functionality as ModelsSelectorDropdown but uses Sheet UI * instead of DropdownMenu. */ export { default as ModelsSelectorSheet } from './ModelsSelectorSheet.svelte'; diff --git a/tools/server/webui/src/lib/components/app/navigation/DesktopIconStrip.svelte b/tools/server/webui/src/lib/components/app/navigation/DesktopIconStrip.svelte new file mode 100644 index 00000000000..e5afc38d6a8 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/navigation/DesktopIconStrip.svelte @@ -0,0 +1,84 @@ +<script lang="ts"> + import { goto } from '$app/navigation'; + import { page } from '$app/state'; + import { ActionIcon } from '$lib/components/app/actions'; + import { + ICON_STRIP_TRANSITION_DURATION, + ICON_STRIP_TRANSITION_DELAY_MULTIPLIER, + SIDEBAR_ACTIONS_ITEMS + } from '$lib/constants'; + import { TooltipSide } from '$lib/enums'; + import { fade } from 'svelte/transition'; + import { circIn } from 'svelte/easing'; + import { onMount } from 'svelte'; + import { useKeyboardShortcuts } from '$lib/hooks/use-keyboard-shortcuts.svelte'; + + interface Props { + sidebarOpen: boolean; + onSearchClick: () => void; + } + + let { sidebarOpen = false, onSearchClick }: Props = $props(); + + const { handleKeydown } = useKeyboardShortcuts({ activateSearchMode: () => onSearchClick() }); + + let initialized = $state(false); + let showIcons = $derived(!sidebarOpen); + + showIcons = false; + + onMount(() => { + showIcons = !sidebarOpen; + + setTimeout(() => { + initialized = true; + }, ICON_STRIP_TRANSITION_DELAY_MULTIPLIER * SIDEBAR_ACTIONS_ITEMS.length); + }); +</script> + +<svelte:window onkeydown={handleKeydown} /> + +<div + class="hidden shrink-0 transition-[width] duration-200 ease-linear md:block {sidebarOpen + ? 'w-0' + : 'w-[calc(var(--sidebar-width-icon)+1.5rem)]'}" +></div> +<aside + class="fixed top-0 bottom-0 left-0 z-10 hidden w-[calc(var(--sidebar-width-icon)+1.5rem)] flex-col items-center justify-between py-3 transition-opacity duration-200 ease-linear md:flex {sidebarOpen + ? 'pointer-events-none opacity-0' + : 'opacity-100'}" +> + <div class="mt-12 flex flex-col items-center gap-1"> + {#each SIDEBAR_ACTIONS_ITEMS as item, i (item.tooltip)} + {@const onclick = item.route ? () => goto(item.route!) : onSearchClick} + {@const isActive = item.activeRouteId + ? page.route.id === item.activeRouteId + : item.activeRoutePrefix + ? !!page.route.id?.startsWith(item.activeRoutePrefix) + : false} + {#if showIcons} + <div + in:fade={{ + duration: ICON_STRIP_TRANSITION_DURATION, + delay: !initialized + ? ICON_STRIP_TRANSITION_DELAY_MULTIPLIER + i * ICON_STRIP_TRANSITION_DELAY_MULTIPLIER + : 0, + easing: circIn + }} + > + <ActionIcon + icon={item.icon} + tooltip={item.tooltip} + tooltipSide={TooltipSide.RIGHT} + size="lg" + iconSize="h-4 w-4" + class="h-9 w-9 rounded-full hover:bg-accent! {isActive + ? 'bg-accent text-accent-foreground' + : ''}" + {onclick} + /> + </div> + {/if} + {/each} + </div> +</aside> diff --git a/tools/server/webui/src/lib/components/app/navigation/index.ts b/tools/server/webui/src/lib/components/app/navigation/index.ts index 051491b8667..02cfbd2f5a6 100644 --- a/tools/server/webui/src/lib/components/app/navigation/index.ts +++ b/tools/server/webui/src/lib/components/app/navigation/index.ts @@ -63,3 +63,11 @@ export { default as DropdownMenuSearchable } from './DropdownMenuSearchable.svel * ``` */ export { default as DropdownMenuActions } from './DropdownMenuActions.svelte'; + +/** + * **DesktopIconStrip** - Fixed icon strip for desktop sidebar + * + * Vertical icon strip shown on desktop when the sidebar is collapsed. + * Contains navigation shortcuts for new chat, search, MCP, import/export, and settings. + */ +export { default as DesktopIconStrip } from './DesktopIconStrip.svelte'; diff --git a/tools/server/webui/src/lib/components/app/settings/SettingsChat.svelte b/tools/server/webui/src/lib/components/app/settings/SettingsChat.svelte new file mode 100644 index 00000000000..33f546e7acc --- /dev/null +++ b/tools/server/webui/src/lib/components/app/settings/SettingsChat.svelte @@ -0,0 +1,154 @@ +<script lang="ts"> + import { + ChatSettingsFooter, + ChatSettingsFields, + ChatSettingsToolsTab + } from '$lib/components/app'; + import { + SettingsChatDesktopSidebar, + SettingsChatMobileHeader + } from '$lib/components/app/settings'; + import { config, settingsStore } from '$lib/stores/settings.svelte'; + import { + NUMERIC_FIELDS, + POSITIVE_INTEGER_FIELDS, + SETTINGS_CHAT_SECTIONS, + SETTINGS_SECTION_TITLES, + type SettingsSection + } from '$lib/constants'; + import { setMode } from 'mode-watcher'; + import { ColorMode } from '$lib/enums/ui'; + import { fade } from 'svelte/transition'; + import { goto } from '$app/navigation'; + import { page } from '$app/state'; + import { setChatSettingsConfigContext } from '$lib/contexts'; + import { settingsReferrer } from '$lib/stores/settings-referrer.svelte'; + + interface Props { + initialSection?: string; + getSectionHref?: (section: SettingsSection) => string; + } + + let { initialSection, getSectionHref }: Props = $props(); + + let activeSlug = $derived( + initialSection ?? (page.params as Record<string, string | undefined>).section ?? 'general' + ); + let currentSection = $derived( + SETTINGS_CHAT_SECTIONS.find((section) => section.slug === activeSlug) || + SETTINGS_CHAT_SECTIONS[0] + ); + let localConfig: SettingsConfigType = $state({ ...config() }); + + let mobileHeader: { updateCarousel: () => void } | undefined; + + function handleThemeChange(newTheme: string) { + localConfig.theme = newTheme; + setMode(newTheme as ColorMode); + } + + function handleConfigChange(key: string, value: string | boolean) { + localConfig[key] = value; + } + + function handleReset() { + localConfig = { ...config() }; + setMode(localConfig.theme as ColorMode); + mobileHeader?.updateCarousel(); + } + + function handleSave() { + if (localConfig.custom && typeof localConfig.custom === 'string' && localConfig.custom.trim()) { + try { + JSON.parse(localConfig.custom); + } catch (error) { + alert('Invalid JSON in custom parameters. Please check the format and try again.'); + console.error(error); + return; + } + } + + const processedConfig = { ...localConfig }; + + for (const field of NUMERIC_FIELDS) { + if (processedConfig[field] !== undefined && processedConfig[field] !== '') { + const numValue = Number(processedConfig[field]); + if (!isNaN(numValue)) { + if ((POSITIVE_INTEGER_FIELDS as readonly string[]).includes(field)) { + processedConfig[field] = Math.max(1, Math.round(numValue)); + } else { + processedConfig[field] = numValue; + } + } else { + alert(`Invalid numeric value for ${field}. Please enter a valid number.`); + return; + } + } + } + + settingsStore.updateMultipleConfig(processedConfig); + goto(settingsReferrer.url); + } + + export function reset() { + localConfig = { ...config() }; + } + + setChatSettingsConfigContext({ + get localConfig() { + return localConfig; + }, + handleConfigChange, + handleThemeChange + }); +</script> + +<div + class="mx-auto flex h-full max-h-[100dvh] w-full flex-col overflow-y-auto md:pl-8" + in:fade={{ duration: 150 }} +> + <div class="flex flex-1 flex-col gap-4 md:flex-row"> + <SettingsChatDesktopSidebar + sections={SETTINGS_CHAT_SECTIONS} + isActive={(section: SettingsSection) => section.slug === activeSlug} + getHref={getSectionHref ?? ((section: SettingsSection) => `#/settings/chat/${section.slug}`)} + /> + + <SettingsChatMobileHeader + sections={SETTINGS_CHAT_SECTIONS} + isActive={(section: SettingsSection) => section.slug === activeSlug} + getHref={getSectionHref ?? ((section: SettingsSection) => `#/settings/chat/${section.slug}`)} + bind:this={mobileHeader} + /> + + <div class="mx-auto max-w-3xl flex-1"> + <div class="space-y-6 p-4 md:p-6 md:pt-28"> + <div class="grid"> + <div class="mb-6 flex items-center gap-2 border-b border-border/30 pb-6 md:flex"> + <currentSection.icon class="h-5 w-5" /> + <h3 class="text-lg font-semibold">{currentSection.title}</h3> + </div> + + {#if currentSection.title === SETTINGS_SECTION_TITLES.TOOLS} + <ChatSettingsToolsTab /> + {:else if currentSection.fields} + <div class="space-y-6"> + <ChatSettingsFields + fields={currentSection.fields} + {localConfig} + onConfigChange={handleConfigChange} + onThemeChange={handleThemeChange} + /> + </div> + {/if} + </div> + + <div class="mt-8 border-t border-border/30 pt-6"> + <p class="text-xs text-muted-foreground">Settings are saved in browser's localStorage</p> + </div> + </div> + + <ChatSettingsFooter onReset={handleReset} onSave={handleSave} /> + </div> + </div> +</div> diff --git a/tools/server/webui/src/lib/components/app/settings/SettingsChatDesktopSidebar.svelte b/tools/server/webui/src/lib/components/app/settings/SettingsChatDesktopSidebar.svelte new file mode 100644 index 00000000000..48a7b8757b8 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/settings/SettingsChatDesktopSidebar.svelte @@ -0,0 +1,49 @@ +<script lang="ts"> + import { Settings } from '@lucide/svelte'; + import type { SettingsSection, SettingsSectionTitle } from '$lib/constants'; + + interface Props { + sections: SettingsSection[]; + isActive: (section: SettingsSection) => boolean; + getHref?: (section: SettingsSection) => string; + onSectionChange?: (section: SettingsSectionTitle) => void; + } + + let { sections, isActive, getHref, onSectionChange }: Props = $props(); +</script> + +<div class="sticky top-0 hidden w-64 flex-col self-start bg-background pt-10 pb-4 md:flex"> + <div class="flex items-center gap-2 pb-10"> + <Settings class="h-6 w-6" /> + <h1 class="text-2xl font-semibold">Settings</h1> + </div> + <nav class="space-y-1"> + {#each sections as section (section.title)} + {#if getHref} + <a + class="flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-left text-sm no-underline transition-colors hover:bg-accent {isActive( + section + ) + ? 'bg-accent text-accent-foreground' + : 'text-muted-foreground'}" + href={getHref(section)} + > + <section.icon class="h-4 w-4" /> + <span class="ml-2">{section.title}</span> + </a> + {:else} + <button + class="flex w-full cursor-pointer items-center gap-3 rounded-lg px-3 py-2 text-left text-sm transition-colors hover:bg-accent {isActive( + section + ) + ? 'bg-accent text-accent-foreground' + : 'text-muted-foreground'}" + onclick={() => onSectionChange?.(section.title)} + > + <section.icon class="h-4 w-4" /> + <span class="ml-2">{section.title}</span> + </button> + {/if} + {/each} + </nav> +</div> diff --git a/tools/server/webui/src/lib/components/app/settings/SettingsChatMobileHeader.svelte b/tools/server/webui/src/lib/components/app/settings/SettingsChatMobileHeader.svelte new file mode 100644 index 00000000000..15eedd108b1 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/settings/SettingsChatMobileHeader.svelte @@ -0,0 +1,107 @@ +<script lang="ts"> + import { Settings, ChevronLeft, ChevronRight } from '@lucide/svelte'; + import { onMount, tick } from 'svelte'; + import type { SettingsSection, SettingsSectionTitle } from '$lib/constants'; + import { useScrollCarousel } from '$lib/hooks/use-scroll-carousel.svelte'; + + interface Props { + sections: SettingsSection[]; + isActive: (section: SettingsSection) => boolean; + getHref?: (section: SettingsSection) => string; + onSectionChange?: (section: SettingsSectionTitle) => void; + } + + let { sections, isActive, getHref, onSectionChange }: Props = $props(); + + const carousel = useScrollCarousel(); + + onMount(async () => { + await tick(); + if (carousel.scrollContainer) { + const activeTab = carousel.scrollContainer.querySelector('[data-active="true"]'); + if (activeTab instanceof HTMLElement) { + carousel.scrollToCenter(activeTab); + } + } + }); + + export function updateCarousel() { + setTimeout(carousel.updateScrollButtons, 100); + } +</script> + +<div class="sticky top-0 z-10 flex flex-col bg-background md:hidden"> + <div class="flex items-center gap-2 px-4 pt-4 pb-2 md:pt-6"> + <Settings class="h-5 w-5 md:h-6 md:w-6" /> + + <h1 class="text-xl font-semibold md:text-2xl">Settings</h1> + </div> + + <div class="border-b border-border/30 py-2"> + <div class="relative flex items-center" style="scroll-padding: 1rem;"> + <button + class="absolute left-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted shadow-md backdrop-blur-sm transition-opacity hover:bg-accent {carousel.canScrollLeft + ? 'opacity-100' + : 'pointer-events-none opacity-0'}" + onclick={carousel.scrollLeft} + aria-label="Scroll left" + > + <ChevronLeft class="h-4 w-4" /> + </button> + + <div + class="scrollbar-hide overflow-x-auto py-2" + bind:this={carousel.scrollContainer} + onscroll={carousel.updateScrollButtons} + > + <div class="flex min-w-max gap-2"> + {#each sections as section (section.title)} + {#if getHref} + <a + class="flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm whitespace-nowrap no-underline transition-colors first:ml-4 last:mr-4 hover:bg-accent {isActive( + section + ) + ? 'bg-accent text-accent-foreground' + : 'text-muted-foreground'}" + data-active={isActive(section)} + href={getHref(section)} + onclick={(e: MouseEvent) => { + carousel.scrollToCenter(e.currentTarget as HTMLElement); + }} + > + <section.icon class="h-4 w-4 flex-shrink-0" /> + <span>{section.title}</span> + </a> + {:else} + <button + class="flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm whitespace-nowrap transition-colors first:ml-4 last:mr-4 hover:bg-accent {isActive( + section + ) + ? 'bg-accent text-accent-foreground' + : 'text-muted-foreground'}" + data-active={isActive(section)} + onclick={(e: MouseEvent) => { + onSectionChange?.(section.title); + carousel.scrollToCenter(e.currentTarget as HTMLElement); + }} + > + <section.icon class="h-4 w-4 flex-shrink-0" /> + <span>{section.title}</span> + </button> + {/if} + {/each} + </div> + </div> + + <button + class="absolute right-2 z-10 flex h-6 w-6 items-center justify-center rounded-full bg-muted shadow-md backdrop-blur-sm transition-opacity hover:bg-accent {carousel.canScrollRight + ? 'opacity-100' + : 'pointer-events-none opacity-0'}" + onclick={carousel.scrollRight} + aria-label="Scroll right" + > + <ChevronRight class="h-4 w-4" /> + </button> + </div> + </div> +</div> diff --git a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsImportExportTab.svelte b/tools/server/webui/src/lib/components/app/settings/SettingsImportExport.svelte similarity index 61% rename from tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsImportExportTab.svelte rename to tools/server/webui/src/lib/components/app/settings/SettingsImportExport.svelte index 537c839f585..83276cd8049 100644 --- a/tools/server/webui/src/lib/components/app/chat/ChatSettings/ChatSettingsImportExportTab.svelte +++ b/tools/server/webui/src/lib/components/app/settings/SettingsImportExport.svelte @@ -1,11 +1,21 @@ <script lang="ts"> - import { Download, Upload, Trash2 } from '@lucide/svelte'; - import { Button } from '$lib/components/ui/button'; + import type { Component } from 'svelte'; + import { Download, Upload, Trash2, Database } from '@lucide/svelte'; + import { Button, type ButtonVariant } from '$lib/components/ui/button'; import { DialogConversationSelection, DialogConfirmation } from '$lib/components/app'; import { createMessageCountMap } from '$lib/utils'; - import { ISO_DATE_TIME_SEPARATOR } from '$lib/constants'; import { conversationsStore, conversations } from '$lib/stores/conversations.svelte'; import { toast } from 'svelte-sonner'; + import { fade } from 'svelte/transition'; + import { ConversationSelectionMode, HtmlInputType, FileExtensionText } from '$lib/enums'; + + interface SectionOpts { + wrapperClass?: string; + titleClass?: string; + buttonVariant?: ButtonVariant; + buttonClass?: string; + summary?: { show: boolean; verb: string; items: DatabaseConversation[] }; + } let exportedConversations = $state<DatabaseConversation[]>([]); let importedConversations = $state<DatabaseConversation[]>([]); @@ -56,10 +66,7 @@ }) ); - conversationsStore.downloadConversationFile( - allData, - `${new Date().toISOString().split(ISO_DATE_TIME_SEPARATOR)[0]}_conversations.json` - ); + conversationsStore.downloadConversationFile(allData); exportedConversations = selectedConversations; showExportSummary = true; @@ -75,8 +82,8 @@ try { const input = document.createElement('input'); - input.type = 'file'; - input.accept = '.json'; + input.type = HtmlInputType.FILE; + input.accept = FileExtensionText.JSON; input.onchange = async (e) => { const file = (e.target as HTMLInputElement)?.files?.[0]; @@ -174,114 +181,104 @@ } </script> -<div class="space-y-6"> - <div class="space-y-4"> - <div class="grid"> - <h4 class="mb-2 text-sm font-medium">Export Conversations</h4> - - <p class="mb-4 text-sm text-muted-foreground"> - Download all your conversations as a JSON file. This includes all messages, attachments, and - conversation history. - </p> - - <Button - class="w-full justify-start justify-self-start md:w-auto" - onclick={handleExportClick} - variant="outline" - > - <Download class="mr-2 h-4 w-4" /> - - Export conversations - </Button> - - {#if showExportSummary && exportedConversations.length > 0} - <div class="mt-4 grid overflow-x-auto rounded-lg border border-border/50 bg-muted/30 p-4"> - <h5 class="mb-2 text-sm font-medium"> - Exported {exportedConversations.length} conversation{exportedConversations.length === 1 - ? '' - : 's'} - </h5> - - <ul class="space-y-1 text-sm text-muted-foreground"> - {#each exportedConversations.slice(0, 10) as conv (conv.id)} - <li class="truncate">• {conv.name || 'Untitled conversation'}</li> - {/each} - - {#if exportedConversations.length > 10} - <li class="italic"> - ... and {exportedConversations.length - 10} more - </li> - {/if} - </ul> - </div> - {/if} +{#snippet summaryList(show: boolean, verb: string, items: DatabaseConversation[])} + {#if show && items.length > 0} + <div class="mt-4 grid overflow-x-auto rounded-lg border border-border/50 bg-muted/30 p-4"> + <h5 class="mb-2 text-sm font-medium"> + {verb} + {items.length} conversation{items.length === 1 ? '' : 's'} + </h5> + + <ul class="space-y-1 text-sm text-muted-foreground"> + {#each items.slice(0, 10) as conv (conv.id)} + <li class="truncate">• {conv.name || 'Untitled conversation'}</li> + {/each} + + {#if items.length > 10} + <li class="italic">... and {items.length - 10} more</li> + {/if} + </ul> </div> + {/if} +{/snippet} + +{#snippet section( + title: string, + description: string, + Icon: Component, + buttonText: string, + onclick: () => void, + opts: SectionOpts +)} + {@const buttonClass = opts?.buttonClass ?? 'justify-start justify-self-start md:w-auto'} + {@const buttonVariant = opts?.buttonVariant ?? 'outline'} + <div class="grid gap-1 {opts?.wrapperClass ?? ''}"> + <h4 class="mt-0 mb-2 text-sm font-medium {opts?.titleClass ?? ''}">{title}</h4> + + <p class="mb-4 text-sm text-muted-foreground">{description}</p> + + <Button class={buttonClass} {onclick} variant={buttonVariant}> + <Icon class="mr-2 h-4 w-4" /> + + {buttonText} + </Button> + + {#if opts?.summary} + {@render summaryList(opts.summary.show, opts.summary.verb, opts.summary.items)} + {/if} + </div> +{/snippet} - <div class="grid border-t border-border/30 pt-4"> - <h4 class="mb-2 text-sm font-medium">Import Conversations</h4> - - <p class="mb-4 text-sm text-muted-foreground"> - Import one or more conversations from a previously exported JSON file. This will merge with - your existing conversations. - </p> - - <Button - class="w-full justify-start justify-self-start md:w-auto" - onclick={handleImportClick} - variant="outline" - > - <Upload class="mr-2 h-4 w-4" /> - Import conversations - </Button> - - {#if showImportSummary && importedConversations.length > 0} - <div class="mt-4 grid overflow-x-auto rounded-lg border border-border/50 bg-muted/30 p-4"> - <h5 class="mb-2 text-sm font-medium"> - Imported {importedConversations.length} conversation{importedConversations.length === 1 - ? '' - : 's'} - </h5> - - <ul class="space-y-1 text-sm text-muted-foreground"> - {#each importedConversations.slice(0, 10) as conv (conv.id)} - <li class="truncate">• {conv.name || 'Untitled conversation'}</li> - {/each} - - {#if importedConversations.length > 10} - <li class="italic"> - ... and {importedConversations.length - 10} more - </li> - {/if} - </ul> - </div> - {/if} - </div> - - <div class="grid border-t border-border/30 pt-4"> - <h4 class="mb-2 text-sm font-medium text-destructive">Delete All Conversations</h4> - - <p class="mb-4 text-sm text-muted-foreground"> - Permanently delete all conversations and their messages. This action cannot be undone. - Consider exporting your conversations first if you want to keep a backup. - </p> +<div class="space-y-6" in:fade={{ duration: 150 }}> + <div class="flex items-center gap-2 pb-4"> + <Database class="h-5 w-5 md:h-6 md:w-6" /> - <Button - class="text-destructive-foreground w-full justify-start justify-self-start bg-destructive hover:bg-destructive/80 md:w-auto" - onclick={handleDeleteAllClick} - variant="destructive" - > - <Trash2 class="mr-2 h-4 w-4" /> + <h1 class="text-xl font-semibold md:text-2xl">Import / Export</h1> + </div> - Delete all conversations - </Button> - </div> + <div class="space-y-6"> + {@render section( + 'Export Conversations', + 'Download all your conversations as a JSON file. This includes all messages, attachments, and conversation history.', + Download, + 'Export conversations', + handleExportClick, + { summary: { show: showExportSummary, verb: 'Exported', items: exportedConversations } } + )} + + {@render section( + 'Import Conversations', + 'Import one or more conversations from a previously exported JSON file. This will merge with your existing conversations.', + Upload, + 'Import conversations', + handleImportClick, + { + wrapperClass: 'border-t border-border/30 pt-6', + summary: { show: showImportSummary, verb: 'Imported', items: importedConversations } + } + )} + + {@render section( + 'Delete All Conversations', + 'Permanently delete all conversations and their messages. This action cannot be undone. Consider exporting your conversations first if you want to keep a backup.', + Trash2, + 'Delete all conversations', + handleDeleteAllClick, + { + wrapperClass: 'border-t border-border/30 pt-4', + titleClass: 'text-destructive', + buttonVariant: 'destructive', + buttonClass: + 'text-destructive-foreground justify-start justify-self-start bg-destructive hover:bg-destructive/80 md:w-auto' + } + )} </div> </div> <DialogConversationSelection conversations={availableConversations} {messageCountMap} - mode="export" + mode={ConversationSelectionMode.EXPORT} bind:open={showExportDialog} onCancel={() => (showExportDialog = false)} onConfirm={handleExportConfirm} @@ -290,7 +287,7 @@ <DialogConversationSelection conversations={availableConversations} {messageCountMap} - mode="import" + mode={ConversationSelectionMode.IMPORT} bind:open={showImportDialog} onCancel={() => (showImportDialog = false)} onConfirm={handleImportConfirm} diff --git a/tools/server/webui/src/lib/components/app/settings/SettingsMcpServers.svelte b/tools/server/webui/src/lib/components/app/settings/SettingsMcpServers.svelte new file mode 100644 index 00000000000..10ebb3b0f46 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/settings/SettingsMcpServers.svelte @@ -0,0 +1,109 @@ +<script lang="ts"> + import { Plus } from '@lucide/svelte'; + import { Button } from '$lib/components/ui/button'; + import { mcpStore } from '$lib/stores/mcp.svelte'; + import { conversationsStore } from '$lib/stores/conversations.svelte'; + import { toolsStore } from '$lib/stores/tools.svelte'; + import { McpServerCard, McpServerCardSkeleton } from '$lib/components/app/mcp'; + import { DialogMcpServerAddNew } from '$lib/components/app/dialogs'; + import { HealthCheckStatus } from '$lib/enums'; + import { fade } from 'svelte/transition'; + import { onMount } from 'svelte'; + import McpLogo from '../mcp/McpLogo.svelte'; + import { page } from '$app/state'; + import { replaceState } from '$app/navigation'; + + interface Props { + class?: string; + } + + let { class: className }: Props = $props(); + + let servers = $derived(mcpStore.getServersSorted()); + + let initialLoadComplete = $state(false); + let isAddingServer = $state(false); + + onMount(() => { + if (page.url.searchParams.has('add')) { + isAddingServer = true; + + const newUrl = new URL(page.url); + newUrl.searchParams.delete('add'); + + replaceState(newUrl, {}); + } + }); + + $effect(() => { + if (initialLoadComplete) return; + + const allChecked = + servers.length > 0 && + servers.every((server) => { + const state = mcpStore.getHealthCheckState(server.id); + + return ( + state.status === HealthCheckStatus.SUCCESS || state.status === HealthCheckStatus.ERROR + ); + }); + + if (allChecked) { + initialLoadComplete = true; + } + }); +</script> + +<div in:fade={{ duration: 150 }} class="max-h-full overflow-auto"> + <div class="flex items-center gap-2 p-4 md:absolute md:top-8 md:left-8 md:px-0 md:py-2"> + <McpLogo class="h-5 w-5 md:h-6 md:w-6" /> + + <h1 class="text-xl font-semibold md:text-2xl">MCP Servers</h1> + </div> + + <div class="sticky top-0 z-10 mt-4 flex items-start justify-end gap-4 px-8 py-4"> + <Button variant="outline" size="sm" class="shrink-0" onclick={() => (isAddingServer = true)}> + <Plus class="h-4 w-4" /> + + Add New Server + </Button> + </div> + + <DialogMcpServerAddNew bind:open={isAddingServer} /> + + <div class="grid gap-5 md:space-y-4 {className}"> + {#if servers.length === 0 && !isAddingServer} + <div class="rounded-md border border-dashed p-4 text-sm text-muted-foreground"> + No MCP Servers configured yet. Add one to enable agentic features. + </div> + {/if} + + {#if servers.length > 0} + <div + class="grid gap-3" + style="grid-template-columns: repeat(auto-fill, minmax(min(32rem, calc(100dvw - 2rem)), 1fr));" + > + {#each servers as server (server.id)} + {#if !initialLoadComplete} + <McpServerCardSkeleton /> + {:else} + <McpServerCard + {server} + faviconUrl={mcpStore.getServerFavicon(server.id)} + enabled={conversationsStore.isMcpServerEnabledForChat(server.id)} + onToggle={async () => { + const wasEnabled = conversationsStore.isMcpServerEnabledForChat(server.id); + await conversationsStore.toggleMcpServerForChat(server.id); + if (!wasEnabled) { + toolsStore.enableAllToolsForServer(server.id); + } + }} + onUpdate={(updates) => mcpStore.updateServer(server.id, updates)} + onDelete={() => mcpStore.removeServer(server.id)} + /> + {/if} + {/each} + </div> + {/if} + </div> +</div> diff --git a/tools/server/webui/src/lib/components/app/settings/index.ts b/tools/server/webui/src/lib/components/app/settings/index.ts new file mode 100644 index 00000000000..907cd86d128 --- /dev/null +++ b/tools/server/webui/src/lib/components/app/settings/index.ts @@ -0,0 +1,32 @@ +/** + * Full chat settings page layout with sidebar, mobile header, and content area. + * Manages local configuration state, section navigation, and context setup. + * Accepts an optional `initialSection` prop to override the URL-based section resolution. + */ +export { default as SettingsChat } from './SettingsChat.svelte'; + +/** + * Desktop sidebar navigation for chat settings. + * Displays a list of settings sections with icons and titles. + * Supports both hash-link navigation (via `getHref`) and in-app section switching (via `onSectionChange`). + */ +export { default as SettingsChatDesktopSidebar } from './SettingsChatDesktopSidebar.svelte'; + +/** + * Mobile header with a horizontally scrollable section picker for chat settings. + * Shows chevron buttons for scroll navigation and highlights the active section. + * Supports both hash-link navigation (via `getHref`) and in-app section switching (via `onSectionChange`). + */ +export { default as SettingsChatMobileHeader } from './SettingsChatMobileHeader.svelte'; + +/** + * Settings Import/Export panel. + * Provides UI for importing and exporting chat settings configurations. + */ +export { default as SettingsImportExport } from './SettingsImportExport.svelte'; + +/** + * MCP Servers configuration panel. + * Provides UI for managing Model Context Protocol (MCP) server connections. + */ +export { default as SettingsMcpServers } from './SettingsMcpServers.svelte'; diff --git a/tools/server/webui/src/lib/components/ui/button-group/button-group-root.svelte b/tools/server/webui/src/lib/components/ui/button-group/button-group-root.svelte new file mode 100644 index 00000000000..4587ec38ec3 --- /dev/null +++ b/tools/server/webui/src/lib/components/ui/button-group/button-group-root.svelte @@ -0,0 +1,21 @@ +<script lang="ts"> + import { cn } from '$lib/components/ui/utils'; + import type { Snippet } from 'svelte'; + import type { HTMLAttributes } from 'svelte/elements'; + + interface Props extends HTMLAttributes<HTMLDivElement> { + children: Snippet; + } + + let { class: className, children, ...restProps }: Props = $props(); +</script> + +<div + class={cn( + 'flex items-center [&>*:first-child]:rounded-r-none [&>*:last-child]:rounded-l-none [&>*:not(:first-child):not(:last-child)]:rounded-none', + className + )} + {...restProps} +> + {@render children()} +</div> diff --git a/tools/server/webui/src/lib/components/ui/button-group/button-group-separator.svelte b/tools/server/webui/src/lib/components/ui/button-group/button-group-separator.svelte new file mode 100644 index 00000000000..d13c573c8e2 --- /dev/null +++ b/tools/server/webui/src/lib/components/ui/button-group/button-group-separator.svelte @@ -0,0 +1,8 @@ +<script lang="ts"> + import { cn } from '$lib/components/ui/utils'; + import type { HTMLAttributes } from 'svelte/elements'; + + let { ...restProps }: HTMLAttributes<HTMLDivElement> = $props(); +</script> + +<div class={cn('shrink-0 self-stretch bg-border', 'w-px')} {...restProps}></div> diff --git a/tools/server/webui/src/lib/components/ui/button-group/index.ts b/tools/server/webui/src/lib/components/ui/button-group/index.ts new file mode 100644 index 00000000000..b0d2e30441b --- /dev/null +++ b/tools/server/webui/src/lib/components/ui/button-group/index.ts @@ -0,0 +1,2 @@ +export { default as Root } from './button-group-root.svelte'; +export { default as Separator } from './button-group-separator.svelte'; diff --git a/tools/server/webui/src/lib/components/ui/button/button.svelte b/tools/server/webui/src/lib/components/ui/button/button.svelte index 5ced3eb9a0f..265f6893ad5 100644 --- a/tools/server/webui/src/lib/components/ui/button/button.svelte +++ b/tools/server/webui/src/lib/components/ui/button/button.svelte @@ -9,9 +9,9 @@ variant: { default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90', destructive: - 'bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white', + 'bg-destructive shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white!', outline: - 'bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border', + 'shadow-xs hover:text-accent-foreground hover:bg-muted-foreground/10 backdrop-blur-sm dark:border-input border', secondary: 'dark:bg-secondary dark:text-secondary-foreground bg-background shadow-sm text-foreground hover:bg-muted-foreground/20', ghost: 'hover:text-accent-foreground hover:bg-muted-foreground/10 backdrop-blur-sm', diff --git a/tools/server/webui/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte b/tools/server/webui/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte index 3ceb165183d..c6637366553 100644 --- a/tools/server/webui/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +++ b/tools/server/webui/src/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte @@ -13,7 +13,7 @@ bind:ref data-slot="dropdown-menu-sub-content" class={cn( - 'z-50 min-w-[8rem] origin-(--bits-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95', + 'z-50 max-h-(--bits-dropdown-menu-content-available-height) min-w-[8rem] origin-(--bits-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-md outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 dark:border-border/20', className )} {...restProps} diff --git a/tools/server/webui/src/lib/components/ui/sidebar/constants.ts b/tools/server/webui/src/lib/components/ui/sidebar/constants.ts index c7e827b1a01..8c320c2ca8f 100644 --- a/tools/server/webui/src/lib/components/ui/sidebar/constants.ts +++ b/tools/server/webui/src/lib/components/ui/sidebar/constants.ts @@ -1,6 +1,7 @@ export const SIDEBAR_COOKIE_NAME = 'sidebar:state'; export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; -export const SIDEBAR_WIDTH = '18rem'; +export const SIDEBAR_MIN_WIDTH = '18rem'; +export const SIDEBAR_MAX_WIDTH = '32rem'; export const SIDEBAR_WIDTH_MOBILE = '18rem'; export const SIDEBAR_WIDTH_ICON = '3rem'; export const SIDEBAR_KEYBOARD_SHORTCUT = 'b'; diff --git a/tools/server/webui/src/lib/components/ui/sidebar/context.svelte.ts b/tools/server/webui/src/lib/components/ui/sidebar/context.svelte.ts index 6fa2aa317d6..9d49ee1f0b3 100644 --- a/tools/server/webui/src/lib/components/ui/sidebar/context.svelte.ts +++ b/tools/server/webui/src/lib/components/ui/sidebar/context.svelte.ts @@ -1,6 +1,6 @@ import { IsMobile } from '$lib/hooks/is-mobile.svelte.js'; import { getContext, setContext } from 'svelte'; -import { SIDEBAR_KEYBOARD_SHORTCUT } from './constants.js'; +import { SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_MIN_WIDTH } from './constants.js'; type Getter<T> = () => T; @@ -24,6 +24,8 @@ class SidebarState { readonly props: SidebarStateProps; open = $derived.by(() => this.props.open()); openMobile = $state(false); + sidebarWidth = $state(SIDEBAR_MIN_WIDTH); + isResizing = $state(false); setOpen: SidebarStateProps['setOpen']; #isMobile: IsMobile; state = $derived.by(() => (this.open ? 'expanded' : 'collapsed')); @@ -53,7 +55,7 @@ class SidebarState { }; toggle = () => { - return this.#isMobile.current ? (this.openMobile = !this.openMobile) : this.setOpen(!this.open); + this.setOpen(!this.open); }; } diff --git a/tools/server/webui/src/lib/components/ui/sidebar/sidebar-footer.svelte b/tools/server/webui/src/lib/components/ui/sidebar/sidebar-footer.svelte index 67be0a484d5..69914dfa288 100644 --- a/tools/server/webui/src/lib/components/ui/sidebar/sidebar-footer.svelte +++ b/tools/server/webui/src/lib/components/ui/sidebar/sidebar-footer.svelte @@ -14,7 +14,7 @@ bind:this={ref} data-slot="sidebar-footer" data-sidebar="footer" - class={cn('flex flex-col gap-2 p-2', className)} + class={cn('flex flex-col gap-2 p-3', className)} {...restProps} > {@render children?.()} diff --git a/tools/server/webui/src/lib/components/ui/sidebar/sidebar-menu-button.svelte b/tools/server/webui/src/lib/components/ui/sidebar/sidebar-menu-button.svelte index 2ce03054e0a..f9efd67e992 100644 --- a/tools/server/webui/src/lib/components/ui/sidebar/sidebar-menu-button.svelte +++ b/tools/server/webui/src/lib/components/ui/sidebar/sidebar-menu-button.svelte @@ -2,7 +2,7 @@ import { tv, type VariantProps } from 'tailwind-variants'; export const sidebarMenuButtonVariants = tv({ - base: 'peer/menu-button outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground group-has-data-[sidebar=menu-action]/menu-item:pr-8 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm transition-[width,height,padding] focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:font-medium [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', + base: 'peer/menu-button outline-hidden ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground group-has-data-[sidebar=menu-action]/menu-item:pr-8 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! flex w-full items-center gap-2 overflow-hidden rounded-md py-2 px-1 text-left text-sm transition-[width,height,padding] focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:font-medium [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', variants: { variant: { default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', diff --git a/tools/server/webui/src/lib/components/ui/sidebar/sidebar-provider.svelte b/tools/server/webui/src/lib/components/ui/sidebar/sidebar-provider.svelte index 364235a4994..7ab9ded7f9b 100644 --- a/tools/server/webui/src/lib/components/ui/sidebar/sidebar-provider.svelte +++ b/tools/server/webui/src/lib/components/ui/sidebar/sidebar-provider.svelte @@ -4,7 +4,8 @@ import { SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, - SIDEBAR_WIDTH, + SIDEBAR_MIN_WIDTH, + SIDEBAR_MAX_WIDTH, SIDEBAR_WIDTH_ICON } from './constants.js'; import { setSidebar } from './context.svelte.js'; @@ -38,7 +39,7 @@ <div data-slot="sidebar-wrapper" - style="--sidebar-width: {SIDEBAR_WIDTH}; --sidebar-width-icon: {SIDEBAR_WIDTH_ICON}; {style}" + style="--sidebar-width: {sidebar.sidebarWidth}; --sidebar-min-width: {SIDEBAR_MIN_WIDTH}; --sidebar-max-width: {SIDEBAR_MAX_WIDTH}; --sidebar-width-icon: {SIDEBAR_WIDTH_ICON}; {style}" class={cn( 'group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar', className diff --git a/tools/server/webui/src/lib/components/ui/sidebar/sidebar-trigger.svelte b/tools/server/webui/src/lib/components/ui/sidebar/sidebar-trigger.svelte index b6ff373ffa5..67076d4d399 100644 --- a/tools/server/webui/src/lib/components/ui/sidebar/sidebar-trigger.svelte +++ b/tools/server/webui/src/lib/components/ui/sidebar/sidebar-trigger.svelte @@ -3,6 +3,7 @@ import PanelLeftIcon from '@lucide/svelte/icons/panel-left'; import type { ComponentProps } from 'svelte'; import { useSidebar } from './context.svelte.js'; + import { PanelLeftClose } from '@lucide/svelte'; let { ref = $bindable(null), @@ -21,9 +22,11 @@ data-slot="sidebar-trigger" variant="ghost" size="icon-lg" - class="rounded-full backdrop-blur-lg {className} md:left-{sidebar.open - ? 'unset' - : '2'} -top-2 -left-2 md:top-0" + class="rounded-full backdrop-blur-lg {className} {sidebar.open + ? 'top-1.5' + : 'top-0'} md:left-[calc(var(--sidebar-width)-3.25rem)] {sidebar.isResizing + ? '!duration-0' + : ''}" type="button" onclick={(e) => { onclick?.(e); @@ -31,6 +34,10 @@ }} {...restProps} > - <PanelLeftIcon /> + {#if sidebar.open} + <PanelLeftClose /> + {:else} + <PanelLeftIcon /> + {/if} <span class="sr-only">Toggle Sidebar</span> </Button> diff --git a/tools/server/webui/src/lib/components/ui/sidebar/sidebar.svelte b/tools/server/webui/src/lib/components/ui/sidebar/sidebar.svelte index e2c4a754809..d6da1aec78e 100644 --- a/tools/server/webui/src/lib/components/ui/sidebar/sidebar.svelte +++ b/tools/server/webui/src/lib/components/ui/sidebar/sidebar.svelte @@ -1,9 +1,9 @@ <script lang="ts"> - import * as Sheet from '$lib/components/ui/sheet/index.js'; import { cn, type WithElementRef } from '$lib/components/ui/utils.js'; import type { HTMLAttributes } from 'svelte/elements'; - import { SIDEBAR_WIDTH_MOBILE } from './constants.js'; + import { SIDEBAR_MIN_WIDTH, SIDEBAR_MAX_WIDTH } from './constants.js'; import { useSidebar } from './context.svelte.js'; + import { remToPx } from '$lib/utils'; let { ref = $bindable(null), @@ -20,6 +20,34 @@ } = $props(); const sidebar = useSidebar(); + + function handleResizePointerDown(e: PointerEvent) { + if (sidebar.isMobile) return; + e.preventDefault(); + + const target = e.currentTarget as HTMLElement; + target.setPointerCapture(e.pointerId); + + const minPx = remToPx(SIDEBAR_MIN_WIDTH); + const maxPx = remToPx(SIDEBAR_MAX_WIDTH); + + sidebar.isResizing = true; + + function onPointerMove(ev: PointerEvent) { + const newWidth = side === 'left' ? ev.clientX : window.innerWidth - ev.clientX; + const clamped = Math.min(maxPx, Math.max(minPx, newWidth)); + sidebar.sidebarWidth = `${clamped}px`; + } + + function onPointerUp() { + sidebar.isResizing = false; + target.removeEventListener('pointermove', onPointerMove); + target.removeEventListener('pointerup', onPointerUp); + } + + target.addEventListener('pointermove', onPointerMove); + target.addEventListener('pointerup', onPointerUp); + } </script> {#if collapsible === 'none'} @@ -33,29 +61,10 @@ > {@render children?.()} </div> -{:else if sidebar.isMobile} - <Sheet.Root bind:open={() => sidebar.openMobile, (v) => sidebar.setOpenMobile(v)} {...restProps}> - <Sheet.Content - data-sidebar="sidebar" - data-slot="sidebar" - data-mobile="true" - class="z-99999 w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground sm:z-99 [&>button]:hidden" - style="--sidebar-width: {SIDEBAR_WIDTH_MOBILE};" - {side} - > - <Sheet.Header class="sr-only"> - <Sheet.Title>Sidebar</Sheet.Title> - <Sheet.Description>Displays the mobile sidebar.</Sheet.Description> - </Sheet.Header> - <div class="flex h-full w-full flex-col"> - {@render children?.()} - </div> - </Sheet.Content> - </Sheet.Root> {:else} <div bind:this={ref} - class="group peer hidden text-sidebar-foreground md:block" + class="group peer block text-sidebar-foreground" data-state={sidebar.state} data-collapsible={sidebar.state === 'collapsed' ? collapsible : ''} data-variant={variant} @@ -66,36 +75,76 @@ <div data-slot="sidebar-gap" class={cn( - 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear', - 'group-data-[collapsible=offcanvas]:w-0', + 'relative bg-transparent transition-[width] duration-200 ease-linear', + sidebar.isResizing && '!duration-0', + 'w-0', + variant === 'floating' + ? 'md:w-[calc(var(--sidebar-width)+0.75rem)]' + : 'md:w-(--sidebar-width)', + 'md:group-data-[collapsible=offcanvas]:w-0', 'group-data-[side=right]:rotate-180', variant === 'floating' || variant === 'inset' ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]' : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)' )} ></div> + <div data-slot="sidebar-container" class={cn( - 'fixed inset-y-0 z-999 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:z-0 md:flex', - side === 'left' - ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]' - : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]', - // Adjust the padding for floating and inset variants. - variant === 'floating' || variant === 'inset' + 'fixed inset-y-0 z-[900] flex w-[calc(100dvw-1.5rem)] duration-200 ease-linear md:z-0 md:w-(--sidebar-width)', + 'group-data-[collapsible=offcanvas]:pointer-events-none md:group-data-[collapsible=offcanvas]:pointer-events-auto', + sidebar.isResizing && '!duration-0', + variant === 'floating' + ? [ + 'transition-[left,right,width,opacity]', + side === 'left' + ? 'left-3 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-0.775)] group-data-[collapsible=offcanvas]:opacity-0' + : 'right-3 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-0.775)] group-data-[collapsible=offcanvas]:opacity-0', + 'my-3 overflow-hidden rounded-3xl border border-sidebar-border shadow-md' + ] + : [ + 'h-svh transition-[left,right,width]', + side === 'left' + ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]' + : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]' + ], + // Adjust the padding for inset variant. + variant === 'inset' ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]' - : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)', + : variant === 'floating' + ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]' + : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)', className )} + style={variant === 'floating' ? 'height: calc(100dvh - 1.5rem);' : undefined} {...restProps} > <div data-sidebar="sidebar" data-slot="sidebar-inner" - class="flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm" + class="flex h-full w-full flex-col bg-sidebar" > {@render children?.()} </div> + <!-- Resize handle --> + {#if side === 'left'} + <!-- svelte-ignore a11y_no_static_element_interactions --> + <div + data-slot="sidebar-resize-handle" + class="absolute inset-y-0 right-0 z-50 hidden w-1.5 cursor-ew-resize touch-none select-none hover:bg-sidebar-border/50 active:bg-sidebar-border md:block" + class:bg-sidebar-border={sidebar.isResizing} + onpointerdown={handleResizePointerDown} + ></div> + {:else} + <!-- svelte-ignore a11y_no_static_element_interactions --> + <div + data-slot="sidebar-resize-handle" + class="absolute inset-y-0 left-0 z-50 hidden w-1.5 cursor-ew-resize touch-none select-none hover:bg-sidebar-border/50 active:bg-sidebar-border md:block" + class:bg-sidebar-border={sidebar.isResizing} + onpointerdown={handleResizePointerDown} + ></div> + {/if} </div> </div> {/if} diff --git a/tools/server/webui/src/lib/components/ui/tooltip/tooltip-trigger.svelte b/tools/server/webui/src/lib/components/ui/tooltip/tooltip-trigger.svelte index 5631d1b4c15..671d6e2201a 100644 --- a/tools/server/webui/src/lib/components/ui/tooltip/tooltip-trigger.svelte +++ b/tools/server/webui/src/lib/components/ui/tooltip/tooltip-trigger.svelte @@ -4,4 +4,9 @@ let { ref = $bindable(null), ...restProps }: TooltipPrimitive.TriggerProps = $props(); </script> -<TooltipPrimitive.Trigger bind:ref data-slot="tooltip-trigger" {...restProps} /> +<TooltipPrimitive.Trigger + bind:ref + data-slot="tooltip-trigger" + class="cursor-pointer" + {...restProps} +/> diff --git a/tools/server/webui/src/lib/constants/agentic.ts b/tools/server/webui/src/lib/constants/agentic.ts index d08f0ecf36c..4fe6da61c38 100644 --- a/tools/server/webui/src/lib/constants/agentic.ts +++ b/tools/server/webui/src/lib/constants/agentic.ts @@ -4,8 +4,6 @@ export const ATTACHMENT_SAVED_REGEX = /\[Attachment saved: ([^\]]+)\]/; export const NEWLINE_SEPARATOR = '\n'; -export const TURN_LIMIT_MESSAGE = '\n\n```\nTurn limit reached\n```\n'; - export const LLM_ERROR_BLOCK_START = '\n\n```\nUpstream LLM error:\n'; export const LLM_ERROR_BLOCK_END = '\n```\n'; diff --git a/tools/server/webui/src/lib/constants/api-endpoints.ts b/tools/server/webui/src/lib/constants/api-endpoints.ts index aa7ca3a22a2..f89ebe42130 100644 --- a/tools/server/webui/src/lib/constants/api-endpoints.ts +++ b/tools/server/webui/src/lib/constants/api-endpoints.ts @@ -4,5 +4,10 @@ export const API_MODELS = { UNLOAD: '/models/unload' }; +export const API_TOOLS = { + LIST: '/tools', + EXECUTE: '/tools' +}; + /** CORS proxy endpoint path */ export const CORS_PROXY_ENDPOINT = '/cors-proxy'; diff --git a/tools/server/webui/src/lib/constants/attachment-menu.ts b/tools/server/webui/src/lib/constants/attachment-menu.ts new file mode 100644 index 00000000000..c382b94279c --- /dev/null +++ b/tools/server/webui/src/lib/constants/attachment-menu.ts @@ -0,0 +1,103 @@ +import type { Component } from 'svelte'; +import { MessageSquare, Zap, FolderOpen } from '@lucide/svelte'; +import { FILE_TYPE_ICONS } from '$lib/constants/icons'; +import { + AttachmentAction, + AttachmentItemEnabledWhen, + AttachmentItemVisibleWhen, + AttachmentMenuItemId +} from '$lib/enums'; + +export interface AttachmentMenuItem { + /** Unique identifier for the item */ + id: AttachmentMenuItemId; + /** Display label */ + label: string; + /** Lucide icon component */ + icon: Component; + /** Extra CSS class applied to the item (e.g. for test selectors) */ + class?: string; + /** Whether the item requires a specific modality to be enabled */ + enabledWhen?: AttachmentItemEnabledWhen; + /** Tooltip shown when the item is disabled */ + disabledTooltip?: string; + /** Callback key on the Props interface to invoke when clicked */ + action: AttachmentAction; + /** Whether the item is only shown when a specific capability is present */ + visibleWhen?: AttachmentItemVisibleWhen; + /** Whether this item has a tooltip even when enabled (uses dynamic text) */ + hasEnabledTooltip?: boolean; +} + +/** + * File attachment menu items shown in both the desktop dropdown and mobile sheet. + * The "Tools" submenu is handled separately by each component. + */ +export const ATTACHMENT_FILE_ITEMS: AttachmentMenuItem[] = [ + { + id: AttachmentMenuItemId.IMAGES, + label: 'Images', + icon: FILE_TYPE_ICONS.image, + class: 'images-button', + enabledWhen: AttachmentItemEnabledWhen.HAS_VISION_MODALITY, + disabledTooltip: 'Image processing requires a vision model', + action: AttachmentAction.FILE_UPLOAD + }, + { + id: AttachmentMenuItemId.AUDIO, + label: 'Audio Files', + icon: FILE_TYPE_ICONS.audio, + class: 'audio-button', + enabledWhen: AttachmentItemEnabledWhen.HAS_AUDIO_MODALITY, + disabledTooltip: 'Audio files processing requires an audio model', + action: AttachmentAction.FILE_UPLOAD + }, + { + id: AttachmentMenuItemId.TEXT, + label: 'Text Files', + icon: FILE_TYPE_ICONS.text, + enabledWhen: AttachmentItemEnabledWhen.ALWAYS, + action: AttachmentAction.FILE_UPLOAD + }, + { + id: AttachmentMenuItemId.PDF, + label: 'PDF Files', + icon: FILE_TYPE_ICONS.pdf, + enabledWhen: AttachmentItemEnabledWhen.ALWAYS, + disabledTooltip: 'PDFs will be converted to text. Image-based PDFs may not work properly.', + hasEnabledTooltip: true, + action: AttachmentAction.FILE_UPLOAD + } +]; + +export const ATTACHMENT_EXTRA_ITEMS: AttachmentMenuItem[] = [ + { + id: AttachmentMenuItemId.SYSTEM_MESSAGE, + label: 'System Message', + icon: MessageSquare, + enabledWhen: AttachmentItemEnabledWhen.ALWAYS, + hasEnabledTooltip: true, + action: AttachmentAction.SYSTEM_PROMPT_CLICK + } +]; + +export const ATTACHMENT_MCP_ITEMS: AttachmentMenuItem[] = [ + { + id: AttachmentMenuItemId.MCP_PROMPT, + label: 'MCP Prompt', + icon: Zap, + enabledWhen: AttachmentItemEnabledWhen.ALWAYS, + action: AttachmentAction.MCP_PROMPT_CLICK, + visibleWhen: AttachmentItemVisibleWhen.HAS_MCP_PROMPTS_SUPPORT + }, + { + id: AttachmentMenuItemId.MCP_RESOURCES, + label: 'MCP Resources', + icon: FolderOpen, + enabledWhen: AttachmentItemEnabledWhen.ALWAYS, + action: AttachmentAction.MCP_RESOURCES_CLICK, + visibleWhen: AttachmentItemVisibleWhen.HAS_MCP_RESOURCES_SUPPORT + } +]; + +export const ATTACHMENT_TOOLTIP_TEXT = 'Add files, system prompt or MCP Servers'; diff --git a/tools/server/webui/src/lib/constants/chat-form.ts b/tools/server/webui/src/lib/constants/chat-form.ts index 68b4d0b9051..05ab8c1f821 100644 --- a/tools/server/webui/src/lib/constants/chat-form.ts +++ b/tools/server/webui/src/lib/constants/chat-form.ts @@ -3,3 +3,4 @@ export const PROMPT_CONTENT_SEPARATOR = '\n\n'; export const CLIPBOARD_CONTENT_QUOTE_PREFIX = '"'; export const PROMPT_TRIGGER_PREFIX = '/'; export const RESOURCE_TRIGGER_PREFIX = '@'; +export const NEW_CHAT_DRAFT_KEY = '__new_chat__'; diff --git a/tools/server/webui/src/lib/constants/context-keys.ts b/tools/server/webui/src/lib/constants/context-keys.ts index ba61d25e811..12de0d0bcb9 100644 --- a/tools/server/webui/src/lib/constants/context-keys.ts +++ b/tools/server/webui/src/lib/constants/context-keys.ts @@ -1,3 +1,4 @@ export const CONTEXT_KEY_MESSAGE_EDIT = 'chat-message-edit'; export const CONTEXT_KEY_CHAT_ACTIONS = 'chat-actions'; -export const CONTEXT_KEY_CHAT_SETTINGS_DIALOG = 'chat-settings-dialog'; +export const CONTEXT_KEY_CHAT_SETTINGS_CONFIG = 'chat-settings-config'; +export const CONTEXT_KEY_PROCESSING_INFO = 'processing-info'; diff --git a/tools/server/webui/src/lib/constants/index.ts b/tools/server/webui/src/lib/constants/index.ts index 70bed50a699..56e05587418 100644 --- a/tools/server/webui/src/lib/constants/index.ts +++ b/tools/server/webui/src/lib/constants/index.ts @@ -4,6 +4,7 @@ export * from './agentic'; export * from './api-endpoints'; export * from './attachment-labels'; +export * from './attachment-menu'; export * from './auto-scroll'; export * from './binary-detection'; export * from './cache'; @@ -35,6 +36,7 @@ export * from './settings-keys'; export * from './settings-sections'; export * from './supported-file-types'; export * from './table-html-restorer'; +export * from './tools'; export * from './tooltip-config'; export * from './ui'; export * from './uri-template'; diff --git a/tools/server/webui/src/lib/constants/localstorage-keys.ts b/tools/server/webui/src/lib/constants/localstorage-keys.ts index 2a2b629fd6e..a04194c46f6 100644 --- a/tools/server/webui/src/lib/constants/localstorage-keys.ts +++ b/tools/server/webui/src/lib/constants/localstorage-keys.ts @@ -1,4 +1,6 @@ +export const ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY = 'LlamaCppWebui.alwaysAllowedTools'; export const CONFIG_LOCALSTORAGE_KEY = 'LlamaCppWebui.config'; -export const USER_OVERRIDES_LOCALSTORAGE_KEY = 'LlamaCppWebui.userOverrides'; +export const DISABLED_TOOLS_LOCALSTORAGE_KEY = 'LlamaCppWebui.disabledTools'; export const FAVORITE_MODELS_LOCALSTORAGE_KEY = 'LlamaCppWebui.favoriteModels'; export const MCP_DEFAULT_ENABLED_LOCALSTORAGE_KEY = 'LlamaCppWebui.mcpDefaultEnabled'; +export const USER_OVERRIDES_LOCALSTORAGE_KEY = 'LlamaCppWebui.userOverrides'; diff --git a/tools/server/webui/src/lib/constants/mcp.ts b/tools/server/webui/src/lib/constants/mcp.ts index 90bfffada3d..c3679cb8c92 100644 --- a/tools/server/webui/src/lib/constants/mcp.ts +++ b/tools/server/webui/src/lib/constants/mcp.ts @@ -40,7 +40,7 @@ export const MCP_RECONNECT_MAX_DELAY = 30000; export const MCP_RECONNECT_ATTEMPT_TIMEOUT_MS = 15_000; /** Maximum number of MCP server avatars to display in the chat form */ -export const MAX_DISPLAYED_MCP_AVATARS = 3; +export const MAX_DISPLAYED_MCP_AVATARS = 4; /** Expected count when two theme-less icons represent a light/dark pair */ export const EXPECTED_THEMED_ICON_PAIR_COUNT = 2; diff --git a/tools/server/webui/src/lib/constants/settings-config.ts b/tools/server/webui/src/lib/constants/settings-config.ts index 7e73fd71031..eb20a853cb8 100644 --- a/tools/server/webui/src/lib/constants/settings-config.ts +++ b/tools/server/webui/src/lib/constants/settings-config.ts @@ -8,7 +8,7 @@ export const SETTING_CONFIG_DEFAULT: Record<string, string | number | boolean | systemMessage: '', showSystemMessage: true, theme: ColorMode.SYSTEM, - showThoughtInProgress: false, + showThoughtInProgress: true, disableReasoningParsing: false, excludeReasoningFromContext: false, showRawOutputSwitch: false, diff --git a/tools/server/webui/src/lib/constants/settings-keys.ts b/tools/server/webui/src/lib/constants/settings-keys.ts index a96cbca43b0..f0ea67f7b29 100644 --- a/tools/server/webui/src/lib/constants/settings-keys.ts +++ b/tools/server/webui/src/lib/constants/settings-keys.ts @@ -24,7 +24,6 @@ export const SETTINGS_KEYS = { RENDER_USER_CONTENT_AS_MARKDOWN: 'renderUserContentAsMarkdown', DISABLE_AUTO_SCROLL: 'disableAutoScroll', ALWAYS_SHOW_SIDEBAR_ON_DESKTOP: 'alwaysShowSidebarOnDesktop', - AUTO_SHOW_SIDEBAR_ON_NEW_CHAT: 'autoShowSidebarOnNewChat', FULL_HEIGHT_CODE_BLOCKS: 'fullHeightCodeBlocks', SHOW_RAW_MODEL_NAMES: 'showRawModelNames', // Sampling diff --git a/tools/server/webui/src/lib/constants/settings-sections.ts b/tools/server/webui/src/lib/constants/settings-sections.ts index a2d960d4040..107ddbf014b 100644 --- a/tools/server/webui/src/lib/constants/settings-sections.ts +++ b/tools/server/webui/src/lib/constants/settings-sections.ts @@ -10,6 +10,8 @@ export const SETTINGS_SECTION_TITLES = { SAMPLING: 'Sampling', PENALTIES: 'Penalties', IMPORT_EXPORT: 'Import/Export', + AGENTIC: 'Agentic', + TOOLS: 'Tools', MCP: 'MCP', DEVELOPER: 'Developer' } as const; @@ -17,3 +19,298 @@ export const SETTINGS_SECTION_TITLES = { /** Type for settings section titles */ export type SettingsSectionTitle = (typeof SETTINGS_SECTION_TITLES)[keyof typeof SETTINGS_SECTION_TITLES]; + +import { + Funnel, + AlertTriangle, + Code, + Monitor, + ListRestart, + Sliders, + PencilRuler +} from '@lucide/svelte'; +import { SettingsFieldType } from '$lib/enums/settings'; +import { SETTINGS_COLOR_MODES_CONFIG } from '$lib/constants/settings-config'; +import { SETTINGS_KEYS } from '$lib/constants/settings-keys'; +import type { Component } from 'svelte'; + +export interface SettingsSection { + fields?: SettingsFieldConfig[]; + icon: Component; + slug: string; + title: SettingsSectionTitle; +} + +export const SETTINGS_CHAT_SECTIONS: SettingsSection[] = [ + { + title: SETTINGS_SECTION_TITLES.GENERAL, + slug: 'general', + icon: Sliders, + fields: [ + { + key: SETTINGS_KEYS.THEME, + label: 'Theme', + type: SettingsFieldType.SELECT, + options: SETTINGS_COLOR_MODES_CONFIG + }, + { key: SETTINGS_KEYS.API_KEY, label: 'API Key', type: SettingsFieldType.INPUT }, + { + key: SETTINGS_KEYS.SYSTEM_MESSAGE, + label: 'System Message', + type: SettingsFieldType.TEXTAREA + }, + { + key: SETTINGS_KEYS.PASTE_LONG_TEXT_TO_FILE_LEN, + label: 'Paste long text to file length', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.COPY_TEXT_ATTACHMENTS_AS_PLAIN_TEXT, + label: 'Copy text attachments as plain text', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.ENABLE_CONTINUE_GENERATION, + label: 'Enable "Continue" button', + type: SettingsFieldType.CHECKBOX, + isExperimental: true + }, + { + key: SETTINGS_KEYS.PDF_AS_IMAGE, + label: 'Parse PDF as image', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.ASK_FOR_TITLE_CONFIRMATION, + label: 'Ask for confirmation before changing conversation title', + type: SettingsFieldType.CHECKBOX + } + ] + }, + { + title: SETTINGS_SECTION_TITLES.DISPLAY, + slug: 'display', + icon: Monitor, + fields: [ + { + key: SETTINGS_KEYS.SHOW_MESSAGE_STATS, + label: 'Show message generation statistics', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.SHOW_THOUGHT_IN_PROGRESS, + label: 'Show thought in progress', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.SHOW_TOOL_CALL_IN_PROGRESS, + label: 'Show tool call in progress', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.KEEP_STATS_VISIBLE, + label: 'Keep stats visible after generation', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.AUTO_MIC_ON_EMPTY, + label: 'Show microphone on empty input', + type: SettingsFieldType.CHECKBOX, + isExperimental: true + }, + { + key: SETTINGS_KEYS.RENDER_USER_CONTENT_AS_MARKDOWN, + label: 'Render user content as Markdown', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.FULL_HEIGHT_CODE_BLOCKS, + label: 'Use full height code blocks', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.DISABLE_AUTO_SCROLL, + label: 'Disable automatic scroll', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.ALWAYS_SHOW_SIDEBAR_ON_DESKTOP, + label: 'Always show sidebar on desktop', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.SHOW_RAW_MODEL_NAMES, + label: 'Show raw model names', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.ALWAYS_SHOW_AGENTIC_TURNS, + label: 'Always show agentic turns in conversation', + type: SettingsFieldType.CHECKBOX + } + ] + }, + { + title: SETTINGS_SECTION_TITLES.SAMPLING, + slug: 'sampling', + icon: Funnel, + fields: [ + { + key: SETTINGS_KEYS.TEMPERATURE, + label: 'Temperature', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.DYNATEMP_RANGE, + label: 'Dynamic temperature range', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.DYNATEMP_EXPONENT, + label: 'Dynamic temperature exponent', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.TOP_K, + label: 'Top K', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.TOP_P, + label: 'Top P', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.MIN_P, + label: 'Min P', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.XTC_PROBABILITY, + label: 'XTC probability', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.XTC_THRESHOLD, + label: 'XTC threshold', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.TYP_P, + label: 'Typical P', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.MAX_TOKENS, + label: 'Max tokens', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.SAMPLERS, + label: 'Samplers', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.BACKEND_SAMPLING, + label: 'Backend sampling', + type: SettingsFieldType.CHECKBOX + } + ] + }, + { + title: SETTINGS_SECTION_TITLES.PENALTIES, + slug: 'penalties', + icon: AlertTriangle, + fields: [ + { + key: SETTINGS_KEYS.REPEAT_LAST_N, + label: 'Repeat last N', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.REPEAT_PENALTY, + label: 'Repeat penalty', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.PRESENCE_PENALTY, + label: 'Presence penalty', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.FREQUENCY_PENALTY, + label: 'Frequency penalty', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.DRY_MULTIPLIER, + label: 'DRY multiplier', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.DRY_BASE, + label: 'DRY base', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.DRY_ALLOWED_LENGTH, + label: 'DRY allowed length', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.DRY_PENALTY_LAST_N, + label: 'DRY penalty last N', + type: SettingsFieldType.INPUT + } + ] + }, + { + title: SETTINGS_SECTION_TITLES.AGENTIC, + slug: 'agentic', + icon: ListRestart, + fields: [ + { + key: SETTINGS_KEYS.AGENTIC_MAX_TURNS, + label: 'Agentic turns', + type: SettingsFieldType.INPUT + }, + { + key: SETTINGS_KEYS.AGENTIC_MAX_TOOL_PREVIEW_LINES, + label: 'Max lines per tool preview', + type: SettingsFieldType.INPUT + } + ] + }, + { + title: SETTINGS_SECTION_TITLES.TOOLS, + slug: 'tools', + icon: PencilRuler + }, + { + title: SETTINGS_SECTION_TITLES.DEVELOPER, + slug: 'developer', + icon: Code, + fields: [ + { + key: SETTINGS_KEYS.DISABLE_REASONING_PARSING, + label: 'Disable reasoning content parsing', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.EXCLUDE_REASONING_FROM_CONTEXT, + label: 'Exclude reasoning from context', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.SHOW_RAW_OUTPUT_SWITCH, + label: 'Enable raw output toggle', + type: SettingsFieldType.CHECKBOX + }, + { + key: SETTINGS_KEYS.CUSTOM, + label: 'Custom JSON', + type: SettingsFieldType.TEXTAREA + } + ] + } +]; diff --git a/tools/server/webui/src/lib/constants/tools.ts b/tools/server/webui/src/lib/constants/tools.ts new file mode 100644 index 00000000000..22b22309c39 --- /dev/null +++ b/tools/server/webui/src/lib/constants/tools.ts @@ -0,0 +1,11 @@ +import { ToolSource } from '$lib/enums/tools'; + +export const TOOL_GROUP_LABELS = { + [ToolSource.BUILTIN]: 'Built-in', + [ToolSource.CUSTOM]: 'JSON Schema' +} as const; + +export const TOOL_SERVER_LABELS = { + [ToolSource.BUILTIN]: 'Built-in Tools', + [ToolSource.CUSTOM]: 'Custom Tools' +} as const; diff --git a/tools/server/webui/src/lib/constants/ui.ts b/tools/server/webui/src/lib/constants/ui.ts index be9c50d0768..47c402f1f28 100644 --- a/tools/server/webui/src/lib/constants/ui.ts +++ b/tools/server/webui/src/lib/constants/ui.ts @@ -1,2 +1,42 @@ +import { Database, Settings, Search, SquarePen } from '@lucide/svelte'; +import McpLogo from '$lib/components/app/mcp/McpLogo.svelte'; +import type { Component } from 'svelte'; + export const FORK_TREE_DEPTH_PADDING = 8; export const SYSTEM_MESSAGE_PLACEHOLDER = 'System message'; +export const APP_NAME = import.meta.env.VITE_PUBLIC_APP_NAME || 'llama.cpp'; + +export const ICON_STRIP_TRANSITION_DURATION = 150; +export const ICON_STRIP_TRANSITION_DELAY_MULTIPLIER = 50; + +export interface DesktopIconStripItem { + icon: Component; + tooltip: string; + route?: string; + activeRouteId?: string; + activeRoutePrefix?: string; + keys?: string[]; +} + +export const SIDEBAR_ACTIONS_ITEMS: DesktopIconStripItem[] = [ + { icon: SquarePen, tooltip: 'New chat', route: '?new_chat=true#/', keys: ['shift', 'cmd', 'o'] }, + { icon: Search, tooltip: 'Search', keys: ['cmd', 'k'] }, + { + icon: McpLogo, + tooltip: 'MCP Servers', + route: '#/settings/mcp', + activeRouteId: '/settings/mcp' + }, + { + icon: Database, + tooltip: 'Import / Export', + route: '#/settings/import-export', + activeRouteId: '/settings/import-export' + }, + { + icon: Settings, + tooltip: 'Settings', + route: '#/settings/chat/general', + activeRoutePrefix: '/settings/chat' + } +]; diff --git a/tools/server/webui/src/lib/contexts/chat-settings-config.context.ts b/tools/server/webui/src/lib/contexts/chat-settings-config.context.ts new file mode 100644 index 00000000000..35941e09bd5 --- /dev/null +++ b/tools/server/webui/src/lib/contexts/chat-settings-config.context.ts @@ -0,0 +1,20 @@ +import { getContext, setContext } from 'svelte'; +import { CONTEXT_KEY_CHAT_SETTINGS_CONFIG } from '$lib/constants'; + +export interface ChatSettingsConfigContext { + readonly localConfig: SettingsConfigType; + handleConfigChange: (key: string, value: string | boolean) => void; + handleThemeChange: (theme: string) => void; +} + +const CHAT_SETTINGS_CONFIG_KEY = Symbol.for(CONTEXT_KEY_CHAT_SETTINGS_CONFIG); + +export function setChatSettingsConfigContext( + ctx: ChatSettingsConfigContext +): ChatSettingsConfigContext { + return setContext(CHAT_SETTINGS_CONFIG_KEY, ctx); +} + +export function getChatSettingsConfigContext(): ChatSettingsConfigContext { + return getContext(CHAT_SETTINGS_CONFIG_KEY); +} diff --git a/tools/server/webui/src/lib/contexts/chat-settings-dialog.context.ts b/tools/server/webui/src/lib/contexts/chat-settings-dialog.context.ts deleted file mode 100644 index 3f98c3c0ef6..00000000000 --- a/tools/server/webui/src/lib/contexts/chat-settings-dialog.context.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { getContext, setContext } from 'svelte'; -import type { SettingsSectionTitle } from '$lib/constants'; -import { CONTEXT_KEY_CHAT_SETTINGS_DIALOG } from '$lib/constants'; - -export interface ChatSettingsDialogContext { - open: (initialSection?: SettingsSectionTitle) => void; -} - -const CHAT_SETTINGS_DIALOG_KEY = Symbol.for(CONTEXT_KEY_CHAT_SETTINGS_DIALOG); - -export function setChatSettingsDialogContext( - ctx: ChatSettingsDialogContext -): ChatSettingsDialogContext { - return setContext(CHAT_SETTINGS_DIALOG_KEY, ctx); -} - -export function getChatSettingsDialogContext(): ChatSettingsDialogContext { - return getContext(CHAT_SETTINGS_DIALOG_KEY); -} diff --git a/tools/server/webui/src/lib/contexts/index.ts b/tools/server/webui/src/lib/contexts/index.ts index 6c69070d819..01cd1d4b70a 100644 --- a/tools/server/webui/src/lib/contexts/index.ts +++ b/tools/server/webui/src/lib/contexts/index.ts @@ -13,7 +13,13 @@ export { } from './chat-actions.context'; export { - getChatSettingsDialogContext, - setChatSettingsDialogContext, - type ChatSettingsDialogContext -} from './chat-settings-dialog.context'; + getChatSettingsConfigContext, + setChatSettingsConfigContext, + type ChatSettingsConfigContext +} from './chat-settings-config.context'; + +export { + getProcessingInfoContext, + setProcessingInfoContext, + type ProcessingInfoContext +} from './processing-info.context'; diff --git a/tools/server/webui/src/lib/contexts/processing-info.context.ts b/tools/server/webui/src/lib/contexts/processing-info.context.ts new file mode 100644 index 00000000000..0cf43336f1d --- /dev/null +++ b/tools/server/webui/src/lib/contexts/processing-info.context.ts @@ -0,0 +1,16 @@ +import { getContext, setContext } from 'svelte'; +import { CONTEXT_KEY_PROCESSING_INFO } from '$lib/constants'; + +export interface ProcessingInfoContext { + readonly showProcessingInfo: boolean; +} + +const PROCESSING_INFO_KEY = Symbol.for(CONTEXT_KEY_PROCESSING_INFO); + +export function setProcessingInfoContext(ctx: ProcessingInfoContext): ProcessingInfoContext { + return setContext(PROCESSING_INFO_KEY, ctx); +} + +export function getProcessingInfoContext(): ProcessingInfoContext { + return getContext(PROCESSING_INFO_KEY); +} diff --git a/tools/server/webui/src/lib/enums/attachment.ts b/tools/server/webui/src/lib/enums/attachment.ts index 28863d7efc6..49baf6bae3f 100644 --- a/tools/server/webui/src/lib/enums/attachment.ts +++ b/tools/server/webui/src/lib/enums/attachment.ts @@ -10,3 +10,44 @@ export enum AttachmentType { TEXT = 'TEXT', LEGACY_CONTEXT = 'context' // Legacy attachment type for backward compatibility } + +/** + * Unique identifiers for attachment menu items in the chat form action dropdowns. + * Used to select which file upload or attachment action is triggered. + */ +export enum AttachmentMenuItemId { + IMAGES = 'images', + AUDIO = 'audio', + TEXT = 'text', + PDF = 'pdf', + SYSTEM_MESSAGE = 'system-message', + MCP_PROMPT = 'mcp-prompt', + MCP_RESOURCES = 'mcp-resources' +} + +/** + * Defines when an attachment menu item should be enabled. + */ +export enum AttachmentItemEnabledWhen { + ALWAYS = 'always', + HAS_VISION_MODALITY = 'hasVisionModality', + HAS_AUDIO_MODALITY = 'hasAudioModality' +} + +/** + * Defines the callback action triggered when an attachment menu item is clicked. + */ +export enum AttachmentAction { + FILE_UPLOAD = 'onFileUpload', + SYSTEM_PROMPT_CLICK = 'onSystemPromptClick', + MCP_PROMPT_CLICK = 'onMcpPromptClick', + MCP_RESOURCES_CLICK = 'onMcpResourcesClick' +} + +/** + * Visibility conditions for attachment menu items. + */ +export enum AttachmentItemVisibleWhen { + HAS_MCP_PROMPTS_SUPPORT = 'hasMcpPromptsSupport', + HAS_MCP_RESOURCES_SUPPORT = 'hasMcpResourcesSupport' +} diff --git a/tools/server/webui/src/lib/enums/chat.ts b/tools/server/webui/src/lib/enums/chat.ts index 0b6f357d9a1..5c0c383d6fb 100644 --- a/tools/server/webui/src/lib/enums/chat.ts +++ b/tools/server/webui/src/lib/enums/chat.ts @@ -49,3 +49,8 @@ export enum ErrorDialogType { TIMEOUT = 'timeout', SERVER = 'server' } + +export enum ConversationSelectionMode { + EXPORT = 'export', + IMPORT = 'import' +} diff --git a/tools/server/webui/src/lib/enums/index.ts b/tools/server/webui/src/lib/enums/index.ts index 1711dd76349..5303429d204 100644 --- a/tools/server/webui/src/lib/enums/index.ts +++ b/tools/server/webui/src/lib/enums/index.ts @@ -1,10 +1,17 @@ -export { AttachmentType } from './attachment'; +export { + AttachmentType, + AttachmentMenuItemId, + AttachmentItemEnabledWhen, + AttachmentAction, + AttachmentItemVisibleWhen +} from './attachment'; export { AgenticSectionType, ToolCallType } from './agentic'; export { ChatMessageStatsView, ContentPartType, + ConversationSelectionMode, ErrorDialogType, MessageRole, MessageType, @@ -47,6 +54,8 @@ export { ServerRole, ServerModelStatus } from './server'; export { ParameterSource, SyncableParameterType, SettingsFieldType } from './settings'; -export { ColorMode, McpPromptVariant, UrlProtocol } from './ui'; +export { ColorMode, HtmlInputType, McpPromptVariant, TooltipSide, UrlProtocol } from './ui'; export { KeyboardKey } from './keyboard'; + +export { ToolSource, ToolPermissionDecision, ToolResponseField } from './tools'; diff --git a/tools/server/webui/src/lib/enums/tools.ts b/tools/server/webui/src/lib/enums/tools.ts new file mode 100644 index 00000000000..4b2cdab3200 --- /dev/null +++ b/tools/server/webui/src/lib/enums/tools.ts @@ -0,0 +1,17 @@ +export enum ToolSource { + BUILTIN = 'builtin', + MCP = 'mcp', + CUSTOM = 'custom' +} + +export enum ToolPermissionDecision { + ALWAYS = 'always', + ALWAYS_SERVER = 'always_server', + ONCE = 'once', + DENY = 'deny' +} + +export enum ToolResponseField { + PLAIN_TEXT = 'plain_text_response', + ERROR = 'error' +} diff --git a/tools/server/webui/src/lib/enums/ui.ts b/tools/server/webui/src/lib/enums/ui.ts index 37d45896279..83f491eef0b 100644 --- a/tools/server/webui/src/lib/enums/ui.ts +++ b/tools/server/webui/src/lib/enums/ui.ts @@ -4,6 +4,13 @@ export enum ColorMode { SYSTEM = 'system' } +export enum TooltipSide { + TOP = 'top', + RIGHT = 'right', + BOTTOM = 'bottom', + LEFT = 'left' +} + /** * MCP prompt display variant */ @@ -22,3 +29,7 @@ export enum UrlProtocol { WEBSOCKET = 'ws://', WEBSOCKET_SECURE = 'wss://' } + +export enum HtmlInputType { + FILE = 'file' +} diff --git a/tools/server/webui/src/lib/hooks/use-attachment-menu.svelte.ts b/tools/server/webui/src/lib/hooks/use-attachment-menu.svelte.ts new file mode 100644 index 00000000000..ca0513b00de --- /dev/null +++ b/tools/server/webui/src/lib/hooks/use-attachment-menu.svelte.ts @@ -0,0 +1,81 @@ +import { page } from '$app/state'; +import { AttachmentAction } from '$lib/enums'; + +export interface AttachmentModalityFlags { + hasVisionModality: boolean; + hasAudioModality: boolean; + hasMcpPromptsSupport: boolean; + hasMcpResourcesSupport: boolean; +} + +export interface AttachmentActionCallbacks { + onFileUpload?: () => void; + onSystemPromptClick?: () => void; + onMcpPromptClick?: () => void; + onMcpResourcesClick?: () => void; +} + +export interface UseAttachmentMenuReturn { + readonly callbacks: Record<string, () => void>; + isItemEnabled(enabledWhen: string | undefined): boolean; + isItemVisible(visibleWhen: string | undefined): boolean; + getSystemMessageTooltip(): string; +} + +/** + * useAttachmentMenu - Shared logic for attachment menu components. + * + * Encapsulates the modality-flag checks and callback wrapping that is + * identical across the desktop dropdown (`ChatFormActionAttachmentsDropdown`) + * and the mobile sheet (`ChatFormActionAttachmentsSheet`). + * + * @param getFlags - Getter returning the current modality capability flags. + * @param getCallbacks - Getter returning the raw action callbacks from props. + * @param close - Function that dismisses the hosting UI element (dropdown / sheet). + */ +export function useAttachmentMenu( + getFlags: () => AttachmentModalityFlags, + getCallbacks: () => AttachmentActionCallbacks, + close: () => void +): UseAttachmentMenuReturn { + const modalityFlags = $derived(getFlags()); + + const callbacks = $derived.by(() => { + const cbs = getCallbacks(); + const wrap = (fn?: () => void) => () => { + close(); + fn?.(); + }; + return { + [AttachmentAction.FILE_UPLOAD]: wrap(cbs.onFileUpload), + [AttachmentAction.SYSTEM_PROMPT_CLICK]: wrap(cbs.onSystemPromptClick), + [AttachmentAction.MCP_PROMPT_CLICK]: wrap(cbs.onMcpPromptClick), + [AttachmentAction.MCP_RESOURCES_CLICK]: wrap(cbs.onMcpResourcesClick) + }; + }); + + function isItemEnabled(enabledWhen: string | undefined): boolean { + if (!enabledWhen || enabledWhen === 'always') return true; + return !!modalityFlags[enabledWhen as keyof AttachmentModalityFlags]; + } + + function isItemVisible(visibleWhen: string | undefined): boolean { + if (!visibleWhen) return true; + return !!modalityFlags[visibleWhen as keyof AttachmentModalityFlags]; + } + + function getSystemMessageTooltip(): string { + return !page.params.id + ? 'Add custom system message for a new conversation' + : 'Inject custom system message at the beginning of the conversation'; + } + + return { + get callbacks() { + return callbacks; + }, + isItemEnabled, + isItemVisible, + getSystemMessageTooltip + }; +} diff --git a/tools/server/webui/src/lib/hooks/use-draft-messages.svelte.ts b/tools/server/webui/src/lib/hooks/use-draft-messages.svelte.ts new file mode 100644 index 00000000000..cdf59b529a6 --- /dev/null +++ b/tools/server/webui/src/lib/hooks/use-draft-messages.svelte.ts @@ -0,0 +1,50 @@ +import { onMount } from 'svelte'; +import { afterNavigate, beforeNavigate } from '$app/navigation'; +import { draftMessagesStore } from '$lib/stores/draft-messages.svelte'; + +interface UseDraftMessagesOptions { + getChatId: () => string | undefined; + getMessage: () => string; + getFiles: () => ChatUploadedFile[]; + setMessage: (message: string) => void; + setFiles: (files: ChatUploadedFile[]) => void; + getInitialMessage: () => string; +} + +export function useDraftMessages(options: UseDraftMessagesOptions) { + onMount(() => { + const chatId = options.getChatId(); + if (!chatId) return; + + const draft = draftMessagesStore.getDraftMessage(chatId); + + if ((draft.message || draft.files.length > 0) && !options.getInitialMessage()) { + options.setMessage(draft.message); + options.setFiles(draft.files); + } + }); + + beforeNavigate(() => { + const chatId = options.getChatId(); + if (!chatId) return; + draftMessagesStore.saveDraftMessage(chatId, options.getMessage(), options.getFiles()); + }); + + afterNavigate((navigation) => { + if (navigation?.from != null) { + const chatId = options.getChatId(); + if (!chatId) return; + const draft = draftMessagesStore.getDraftMessage(chatId); + options.setMessage(draft.message); + options.setFiles(draft.files); + } + }); + + function clearDraft() { + const chatId = options.getChatId(); + if (!chatId) return; + draftMessagesStore.clearDraftMessage(chatId); + } + + return { clearDraft }; +} diff --git a/tools/server/webui/src/lib/hooks/use-keyboard-shortcuts.svelte.ts b/tools/server/webui/src/lib/hooks/use-keyboard-shortcuts.svelte.ts new file mode 100644 index 00000000000..6d53865b374 --- /dev/null +++ b/tools/server/webui/src/lib/hooks/use-keyboard-shortcuts.svelte.ts @@ -0,0 +1,42 @@ +import { goto } from '$app/navigation'; +import { KeyboardKey } from '$lib/enums'; + +interface KeyboardShortcutsCallbacks { + activateSearchMode?: () => void; + editActiveConversation?: () => void; + onSearchActivated?: () => void; + deleteActiveConversation?: () => void; +} + +export function useKeyboardShortcuts(callbacks: KeyboardShortcutsCallbacks) { + function handleKeydown(event: KeyboardEvent) { + const isCtrlOrCmd = event.ctrlKey || event.metaKey; + + if (isCtrlOrCmd && event.key === KeyboardKey.K_LOWER) { + event.preventDefault(); + callbacks.activateSearchMode?.(); + callbacks.onSearchActivated?.(); + } + + if (isCtrlOrCmd && event.shiftKey && event.key === KeyboardKey.O_UPPER) { + event.preventDefault(); + goto('?new_chat=true#/'); + } + + if (event.shiftKey && isCtrlOrCmd && event.key === KeyboardKey.E_UPPER) { + event.preventDefault(); + callbacks.editActiveConversation?.(); + } + + if ( + isCtrlOrCmd && + event.shiftKey && + (event.key === KeyboardKey.D_LOWER || event.key === KeyboardKey.D_UPPER) + ) { + event.preventDefault(); + callbacks.deleteActiveConversation?.(); + } + } + + return { handleKeydown }; +} diff --git a/tools/server/webui/src/lib/hooks/use-message-edit-context.svelte.ts b/tools/server/webui/src/lib/hooks/use-message-edit-context.svelte.ts new file mode 100644 index 00000000000..3c48c138e67 --- /dev/null +++ b/tools/server/webui/src/lib/hooks/use-message-edit-context.svelte.ts @@ -0,0 +1,89 @@ +import { setMessageEditContext } from '$lib/contexts'; +import { parseFilesToMessageExtras } from '$lib/utils/convert-files-to-extra'; + +interface UseMessageEditContextOptions { + getContent: () => string; + getExtras: () => DatabaseMessageExtra[]; + showSaveOnlyOption?: boolean; + onSave: (content: string, extras?: DatabaseMessageExtra[]) => void; +} + +export function useMessageEditContext(options: UseMessageEditContextOptions) { + let isEditing = $state(false); + let editedContent = $state(''); + let editedExtras = $state<DatabaseMessageExtra[]>([]); + let editedUploadedFiles = $state<ChatUploadedFile[]>([]); + + function handleEdit() { + editedContent = options.getContent(); + editedExtras = [...options.getExtras()]; + editedUploadedFiles = []; + isEditing = true; + } + + async function handleSaveEdit() { + const trimmed = editedContent.trim(); + if (!trimmed && editedExtras.length === 0 && editedUploadedFiles.length === 0) return; + + let finalExtras: DatabaseMessageExtra[] = $state.snapshot(editedExtras); + if (editedUploadedFiles.length > 0) { + const plainFiles = $state.snapshot(editedUploadedFiles); + const result = await parseFilesToMessageExtras(plainFiles); + const newExtras = result?.extras || []; + finalExtras = [...finalExtras, ...newExtras]; + } + + options.onSave(trimmed, finalExtras.length > 0 ? finalExtras : undefined); + isEditing = false; + } + + function handleCancelEdit() { + isEditing = false; + } + + setMessageEditContext({ + get isEditing() { + return isEditing; + }, + get editedContent() { + return editedContent; + }, + get editedExtras() { + return editedExtras; + }, + get editedUploadedFiles() { + return editedUploadedFiles; + }, + get originalContent() { + return options.getContent(); + }, + get originalExtras() { + return options.getExtras(); + }, + get showSaveOnlyOption() { + return options.showSaveOnlyOption ?? false; + }, + setContent: (c: string) => { + editedContent = c; + }, + setExtras: (e: DatabaseMessageExtra[]) => { + editedExtras = e; + }, + setUploadedFiles: (f: ChatUploadedFile[]) => { + editedUploadedFiles = f; + }, + save: handleSaveEdit, + saveOnly: handleSaveEdit, + cancel: handleCancelEdit, + startEdit: handleEdit + }); + + return { + get isEditing() { + return isEditing; + }, + handleEdit, + handleSaveEdit, + handleCancelEdit + }; +} diff --git a/tools/server/webui/src/lib/hooks/use-models-selector.svelte.ts b/tools/server/webui/src/lib/hooks/use-models-selector.svelte.ts new file mode 100644 index 00000000000..3ae4865cfbc --- /dev/null +++ b/tools/server/webui/src/lib/hooks/use-models-selector.svelte.ts @@ -0,0 +1,252 @@ +import { onMount } from 'svelte'; +import { + modelsStore, + modelOptions, + modelsLoading, + modelsUpdating, + selectedModelId, + singleModelName +} from '$lib/stores/models.svelte'; +import { isRouterMode } from '$lib/stores/server.svelte'; +import { filterModelOptions, groupModelOptions } from '$lib/components/app/models/utils'; +import type { ModelOption } from '$lib/types/models'; + +export interface UseModelsSelectorOptions { + currentModel: () => string | null; + useGlobalSelection?: () => boolean; + onModelChange?: () => + | ((modelId: string, modelName: string) => Promise<boolean> | boolean | void) + | undefined; + onOpenChange?: (open: boolean) => void; +} + +export interface UseModelsSelectorReturn { + readonly options: ModelOption[]; + readonly loading: boolean; + readonly updating: boolean; + readonly activeId: string | null; + readonly isRouter: boolean; + readonly serverModel: string | null; + readonly isHighlightedCurrentModelActive: boolean; + readonly isCurrentModelInCache: boolean; + readonly filteredOptions: ModelOption[]; + readonly groupedFilteredOptions: ReturnType<typeof groupModelOptions>; + readonly isLoadingModel: boolean; + readonly searchTerm: string; + readonly showModelDialog: boolean; + readonly infoModelId: string | null; + setSearchTerm(value: string): void; + setShowModelDialog(value: boolean): void; + handleInfoClick(modelName: string): void; + handleSelect(modelId: string): Promise<void>; + handleOpenChange(open: boolean): void; + isFavorite(model: string): boolean; + getDisplayOption(): ModelOption | undefined; +} + +/** + * Shared reactive state and logic for model selection. + * + * Used by both the desktop dropdown (`ModelsSelectorDropdown`) + * and the mobile sheet (`ModelsSelectorSheet`) to avoid + * duplicating store derivations, selection handling, and model loading. + */ +export function useModelsSelector(opts: UseModelsSelectorOptions): UseModelsSelectorReturn { + const options = $derived( + modelOptions().filter((option) => { + const modelProps = modelsStore.getModelProps(option.model); + return modelProps?.webui !== false; + }) + ); + const loading = $derived(modelsLoading()); + const updating = $derived(modelsUpdating()); + const activeId = $derived(selectedModelId()); + const isRouter = $derived(isRouterMode()); + const serverModel = $derived(singleModelName()); + + const currentModel = $derived(opts.currentModel()); + const useGlobalSelection = $derived(opts.useGlobalSelection?.() ?? false); + const onModelChange = $derived(opts.onModelChange?.()); + + const isHighlightedCurrentModelActive = $derived.by(() => { + if (!isRouter || !currentModel) return false; + const currentOption = options.find((option) => option.model === currentModel); + return currentOption ? currentOption.id === activeId : false; + }); + + const isCurrentModelInCache = $derived.by(() => { + if (!isRouter || !currentModel) return true; + return options.some((option) => option.model === currentModel); + }); + + let isLoadingModel = $state(false); + let searchTerm = $state(''); + let showModelDialog = $state(false); + let infoModelId = $state<string | null>(null); + const filteredOptions = $derived(filterModelOptions(options, searchTerm)); + const groupedFilteredOptions = $derived( + groupModelOptions(filteredOptions, modelsStore.favoriteModelIds, (m) => + modelsStore.isModelLoaded(m) + ) + ); + + function handleInfoClick(modelName: string) { + infoModelId = modelName; + showModelDialog = true; + } + + onMount(() => { + modelsStore.fetch().catch((error) => { + console.error('Unable to load models:', error); + }); + }); + + function handleOpenChange(open: boolean) { + if (loading || updating) return; + + if (isRouter) { + searchTerm = ''; + + if (open) { + modelsStore.fetchRouterModels().then(() => { + modelsStore.fetchModalitiesForLoadedModels(); + }); + } + + opts.onOpenChange?.(open); + } else { + showModelDialog = open; + } + } + + async function handleSelect(modelId: string) { + const option = options.find((opt) => opt.id === modelId); + if (!option) return; + + let shouldCloseMenu = true; + + if (onModelChange) { + const result = await onModelChange(option.id, option.model); + if (result === false) { + shouldCloseMenu = false; + } + } else { + await modelsStore.selectModelById(option.id); + } + + if (shouldCloseMenu) { + handleOpenChange(false); + + requestAnimationFrame(() => { + const textarea = document.querySelector<HTMLTextAreaElement>( + '[data-slot="chat-form"] textarea' + ); + textarea?.focus(); + }); + } + + if (!onModelChange && isRouter && !modelsStore.isModelLoaded(option.model)) { + isLoadingModel = true; + modelsStore + .loadModel(option.model) + .catch((error) => console.error('Failed to load model:', error)) + .finally(() => (isLoadingModel = false)); + } + } + + function getDisplayOption(): ModelOption | undefined { + if (!isRouter) { + const displayModel = serverModel || currentModel; + if (displayModel) { + return { + id: serverModel ? 'current' : 'offline-current', + model: displayModel, + name: displayModel.split('/').pop() || displayModel, + capabilities: [] + }; + } + return undefined; + } + + if (useGlobalSelection && activeId) { + const selected = options.find((option) => option.id === activeId); + if (selected) return selected; + } + + if (currentModel) { + if (!isCurrentModelInCache) { + return { + id: 'not-in-cache', + model: currentModel, + name: currentModel.split('/').pop() || currentModel, + capabilities: [] + }; + } + return options.find((option) => option.model === currentModel); + } + + if (activeId) { + return options.find((option) => option.id === activeId); + } + + return undefined; + } + + return { + get options() { + return options; + }, + get loading() { + return loading; + }, + get updating() { + return updating; + }, + get activeId() { + return activeId; + }, + get isRouter() { + return isRouter; + }, + get serverModel() { + return serverModel; + }, + get isHighlightedCurrentModelActive() { + return isHighlightedCurrentModelActive; + }, + get isCurrentModelInCache() { + return isCurrentModelInCache; + }, + get filteredOptions() { + return filteredOptions; + }, + get groupedFilteredOptions() { + return groupedFilteredOptions; + }, + get isLoadingModel() { + return isLoadingModel; + }, + get searchTerm() { + return searchTerm; + }, + get showModelDialog() { + return showModelDialog; + }, + get infoModelId() { + return infoModelId; + }, + setSearchTerm(value: string) { + searchTerm = value; + }, + setShowModelDialog(value: boolean) { + showModelDialog = value; + }, + handleInfoClick, + handleSelect, + handleOpenChange, + isFavorite(model: string) { + return modelsStore.favoriteModelIds.has(model); + }, + getDisplayOption + }; +} diff --git a/tools/server/webui/src/lib/hooks/use-scroll-carousel.svelte.ts b/tools/server/webui/src/lib/hooks/use-scroll-carousel.svelte.ts new file mode 100644 index 00000000000..e4c75d23650 --- /dev/null +++ b/tools/server/webui/src/lib/hooks/use-scroll-carousel.svelte.ts @@ -0,0 +1,61 @@ +export function useScrollCarousel() { + let canScrollLeft = $state(false); + let canScrollRight = $state(false); + let scrollContainer = $state<HTMLDivElement | undefined>(); + + function scrollToCenter(element: HTMLElement) { + if (!scrollContainer) return; + + const containerRect = scrollContainer.getBoundingClientRect(); + const elementRect = element.getBoundingClientRect(); + + const elementCenter = elementRect.left + elementRect.width / 2; + const containerCenter = containerRect.left + containerRect.width / 2; + const scrollOffset = elementCenter - containerCenter; + + scrollContainer.scrollBy({ left: scrollOffset, behavior: 'smooth' }); + } + + function scrollLeft() { + if (!scrollContainer) return; + scrollContainer.scrollBy({ left: -250, behavior: 'smooth' }); + } + + function scrollRight() { + if (!scrollContainer) return; + scrollContainer.scrollBy({ left: 250, behavior: 'smooth' }); + } + + function updateScrollButtons() { + if (!scrollContainer) return; + + const { scrollLeft: sl, scrollWidth, clientWidth } = scrollContainer; + canScrollLeft = sl > 0; + canScrollRight = sl < scrollWidth - clientWidth - 1; + } + + $effect(() => { + if (scrollContainer) { + updateScrollButtons(); + } + }); + + return { + get canScrollLeft() { + return canScrollLeft; + }, + get canScrollRight() { + return canScrollRight; + }, + get scrollContainer() { + return scrollContainer; + }, + set scrollContainer(el: HTMLDivElement | undefined) { + scrollContainer = el; + }, + scrollToCenter, + scrollLeft, + scrollRight, + updateScrollButtons + }; +} diff --git a/tools/server/webui/src/lib/hooks/use-settings-navigation.svelte.ts b/tools/server/webui/src/lib/hooks/use-settings-navigation.svelte.ts new file mode 100644 index 00000000000..decac5f7fca --- /dev/null +++ b/tools/server/webui/src/lib/hooks/use-settings-navigation.svelte.ts @@ -0,0 +1,48 @@ +import { page } from '$app/state'; +import { beforeNavigate } from '$app/navigation'; +import { settingsReferrer } from '$lib/stores/settings-referrer.svelte'; + +export interface ChatSettings { + reset: () => void; +} + +export function useSettingsNavigation() { + const subroute = $state({ + activePanel: 'chat' as 'chat' | 'settings' | 'mcp', + chatSettingsRef: undefined as ChatSettings | undefined + }); + + const isSettingsRoute = $derived(!!page.route.id?.startsWith('/settings')); + + beforeNavigate(({ to, from }) => { + if ( + to?.route?.id?.startsWith('/settings/chat') && + !from?.route?.id?.startsWith('/settings/chat') + ) { + settingsReferrer.url = window.location.hash || '#/'; + } + }); + + $effect(() => { + if (subroute.activePanel === 'settings' && subroute.chatSettingsRef) { + subroute.chatSettingsRef.reset(); + } + }); + + // Return to chat when navigating to a new route + $effect(() => { + void page.url; + + subroute.activePanel = 'chat'; + }); + + return { + get panel() { + return subroute; + }, + + get isSettingsRoute() { + return isSettingsRoute; + } + }; +} diff --git a/tools/server/webui/src/lib/hooks/use-tools-panel.svelte.ts b/tools/server/webui/src/lib/hooks/use-tools-panel.svelte.ts new file mode 100644 index 00000000000..6386b837733 --- /dev/null +++ b/tools/server/webui/src/lib/hooks/use-tools-panel.svelte.ts @@ -0,0 +1,121 @@ +import { SvelteSet } from 'svelte/reactivity'; +import { ToolSource } from '$lib/enums'; +import { conversationsStore } from '$lib/stores/conversations.svelte'; +import { mcpStore } from '$lib/stores/mcp.svelte'; +import { toolsStore } from '$lib/stores/tools.svelte'; +import type { ToolGroup } from '$lib/types'; + +export interface UseToolsPanelReturn { + readonly expandedGroups: SvelteSet<string>; + readonly groups: ToolGroup[]; + readonly activeGroups: ToolGroup[]; + readonly totalToolCount: number; + readonly noToolsInfoMessage: string | null; + getGroupCheckedState(group: ToolGroup): { checked: boolean; indeterminate: boolean }; + getEnabledToolCount(group: ToolGroup): number; + getFavicon(group: { source: ToolSource; label: string }): string | null; + isGroupDisabled(group: ToolGroup): boolean; + toggleGroupExpanded(label: string): void; + handleOpen(): void; +} + +/** + * Shared reactive state and helpers for the tools panel UI. + * + * Used by both the desktop dropdown (`ChatFormActionToolsSubmenu`) + * and the mobile sheet (`ChatFormActionAttachmentsSheet`) to avoid + * duplicating group filtering, checked-state derivation, and favicon logic. + */ +export function useToolsPanel(): UseToolsPanelReturn { + const expandedGroups = new SvelteSet<string>(); + + const groups = $derived(toolsStore.toolGroups); + const activeGroups = $derived( + groups.filter( + (g) => + g.source !== ToolSource.MCP || + !g.serverId || + conversationsStore.isMcpServerEnabledForChat(g.serverId) + ) + ); + const totalToolCount = $derived(activeGroups.reduce((n, g) => n + g.tools.length, 0)); + const noToolsInfoMessage = $derived.by(() => { + if (toolsStore.loading) return null; + if (toolsStore.toolGroups.length > 0) return null; + // Tools endpoint is unreachable (404) — server started without --tools + if (toolsStore.isToolsEndpointUnreachable) { + return 'To enable Built-In Tools you need to run llama-server with --tools all or --tools <name> flag. To see MCP Tools you need to add / enable MCP Server(s).'; + } + // Other errors — return null so UI shows "Failed to load tools" + if (toolsStore.error) return null; + return 'To enable Built-In Tools you need to run llama-server with --tools all or --tools <name> flag. To see MCP Tools you need to add / enable MCP Server(s).'; + }); + + function getGroupCheckedState(group: ToolGroup): { checked: boolean; indeterminate: boolean } { + return { + checked: toolsStore.isGroupFullyEnabled(group), + indeterminate: toolsStore.isGroupPartiallyEnabled(group) + }; + } + + function getEnabledToolCount(group: ToolGroup): number { + return group.tools.filter((tool) => toolsStore.isToolEnabled(tool.function.name)).length; + } + + function getFavicon(group: { source: ToolSource; label: string }): string | null { + if (group.source !== ToolSource.MCP) return null; + + for (const server of mcpStore.getServersSorted()) { + if (mcpStore.getServerLabel(server) === group.label) { + return mcpStore.getServerFavicon(server.id); + } + } + + return null; + } + + function isGroupDisabled(group: ToolGroup): boolean { + return ( + group.source === ToolSource.MCP && + !!group.serverId && + !conversationsStore.isMcpServerEnabledForChat(group.serverId) + ); + } + + function toggleGroupExpanded(label: string): void { + if (expandedGroups.has(label)) { + expandedGroups.delete(label); + } else { + expandedGroups.add(label); + } + } + + function handleOpen(): void { + if (toolsStore.builtinTools.length === 0 && !toolsStore.loading) { + toolsStore.fetchBuiltinTools(); + } + mcpStore.runHealthChecksForServers(mcpStore.getServersSorted().filter((s) => s.enabled)); + } + + return { + expandedGroups, + get groups() { + return groups; + }, + get activeGroups() { + return activeGroups; + }, + get totalToolCount() { + return totalToolCount; + }, + get noToolsInfoMessage() { + return noToolsInfoMessage; + }, + getGroupCheckedState, + getEnabledToolCount, + getFavicon, + isGroupDisabled, + toggleGroupExpanded, + handleOpen + }; +} diff --git a/tools/server/webui/src/lib/services/chat.service.ts b/tools/server/webui/src/lib/services/chat.service.ts index 52d7ea61622..9e5990d2961 100644 --- a/tools/server/webui/src/lib/services/chat.service.ts +++ b/tools/server/webui/src/lib/services/chat.service.ts @@ -501,9 +501,10 @@ export class ChatService { try { const parsed: ApiChatCompletionStreamChunk = JSON.parse(data); - const content = parsed.choices[0]?.delta?.content; - const reasoningContent = parsed.choices[0]?.delta?.reasoning_content; - const toolCalls = parsed.choices[0]?.delta?.tool_calls; + const choice = parsed.choices?.[0]; + const content = choice?.delta?.content; + const reasoningContent = choice?.delta?.reasoning_content; + const toolCalls = choice?.delta?.tool_calls; const timings = parsed.timings; const promptProgress = parsed.prompt_progress; diff --git a/tools/server/webui/src/lib/services/parameter-sync.service.ts b/tools/server/webui/src/lib/services/parameter-sync.service.ts index c2dedbf1016..cdb52e77082 100644 --- a/tools/server/webui/src/lib/services/parameter-sync.service.ts +++ b/tools/server/webui/src/lib/services/parameter-sync.service.ts @@ -203,12 +203,6 @@ export const SYNCABLE_PARAMETERS: SyncableParameter[] = [ type: SyncableParameterType.BOOLEAN, canSync: true }, - { - key: 'autoShowSidebarOnNewChat', - serverKey: 'autoShowSidebarOnNewChat', - type: SyncableParameterType.BOOLEAN, - canSync: true - }, { key: 'showRawModelNames', serverKey: 'showRawModelNames', diff --git a/tools/server/webui/src/lib/services/tools.service.ts b/tools/server/webui/src/lib/services/tools.service.ts new file mode 100644 index 00000000000..8f39f5209f8 --- /dev/null +++ b/tools/server/webui/src/lib/services/tools.service.ts @@ -0,0 +1,40 @@ +import { apiFetch } from '$lib/utils'; +import { API_TOOLS } from '$lib/constants'; +import { ToolResponseField } from '$lib/enums'; +import type { ToolExecutionResult, ServerBuiltinToolInfo } from '$lib/types'; + +export class ToolsService { + /** + * Fetch the list of built-in tools from the server. + * + * @returns Array of tool definitions in OpenAI-compatible format + */ + static async list(): Promise<ServerBuiltinToolInfo[]> { + return apiFetch<ServerBuiltinToolInfo[]>(API_TOOLS.LIST); + } + + /** + * Execute a built-in tool on the server. + */ + static async executeTool( + toolName: string, + params: Record<string, unknown>, + signal?: AbortSignal + ): Promise<ToolExecutionResult> { + const result = await apiFetch<Record<string, unknown>>(API_TOOLS.EXECUTE, { + method: 'POST', + body: JSON.stringify({ tool: toolName, params }), + signal + }); + + if (ToolResponseField.ERROR in result) { + return { content: String(result[ToolResponseField.ERROR]), isError: true }; + } + + if (ToolResponseField.PLAIN_TEXT in result) { + return { content: String(result[ToolResponseField.PLAIN_TEXT]), isError: false }; + } + + return { content: JSON.stringify(result), isError: false }; + } +} diff --git a/tools/server/webui/src/lib/stores/agentic.svelte.ts b/tools/server/webui/src/lib/stores/agentic.svelte.ts index 2b696024999..af71c3da40d 100644 --- a/tools/server/webui/src/lib/stores/agentic.svelte.ts +++ b/tools/server/webui/src/lib/stores/agentic.svelte.ts @@ -24,11 +24,15 @@ import { ChatService } from '$lib/services'; import { config } from '$lib/stores/settings.svelte'; import { mcpStore } from '$lib/stores/mcp.svelte'; import { modelsStore } from '$lib/stores/models.svelte'; +import { toolsStore } from '$lib/stores/tools.svelte'; +import { permissionsStore } from '$lib/stores/permissions.svelte'; +import { ToolSource, ToolPermissionDecision } from '$lib/enums'; +import { SvelteMap } from 'svelte/reactivity'; +import { ToolsService } from '$lib/services/tools.service'; import { isAbortError } from '$lib/utils'; import { DEFAULT_AGENTIC_CONFIG, NEWLINE_SEPARATOR, - TURN_LIMIT_MESSAGE, LLM_ERROR_BLOCK_START, LLM_ERROR_BLOCK_END } from '$lib/constants'; @@ -58,7 +62,8 @@ import type { AgenticMessage, AgenticToolCallList, AgenticFlowCallbacks, - AgenticFlowOptions + AgenticFlowOptions, + SteeringMessage } from '$lib/types/agentic'; import type { ApiChatCompletionToolCall, @@ -84,7 +89,8 @@ function createDefaultSession(): AgenticSession { currentTurn: 0, totalToolCalls: 0, lastError: null, - streamingToolCall: null + streamingToolCall: null, + pendingPermissionRequest: null }; } @@ -98,6 +104,7 @@ function toAgenticMessages(messages: ApiChatMessageData[]): AgenticMessage[] { return { role: MessageRole.ASSISTANT, content: message.content, + reasoning_content: message.reasoning_content, tool_calls: message.tool_calls.map((call, index) => ({ id: call.id ?? `call_${index}`, type: (call.type as ToolCallType.FUNCTION) ?? ToolCallType.FUNCTION, @@ -105,6 +112,13 @@ function toAgenticMessages(messages: ApiChatMessageData[]): AgenticMessage[] { })) } satisfies AgenticMessage; } + if (message.role === MessageRole.ASSISTANT) { + return { + role: MessageRole.ASSISTANT, + content: message.content, + reasoning_content: message.reasoning_content + } satisfies AgenticMessage; + } if (message.role === MessageRole.TOOL && message.tool_call_id) { return { role: MessageRole.TOOL, @@ -120,7 +134,22 @@ function toAgenticMessages(messages: ApiChatMessageData[]): AgenticMessage[] { } class AgenticStore { - private _sessions = $state<Map<string, AgenticSession>>(new Map()); + private _sessions = new SvelteMap<string, AgenticSession>(); + /** Dedicated reactive state for pending permission requests (ensures immediate UI updates) */ + private _pendingPermissions = new SvelteMap< + string, + { toolName: string; serverLabel: string } | null + >(); + /** Non-reactive: stores resolve functions for pending permission Promises */ + private _permissionResolvers = new Map<string, (decision: ToolPermissionDecision) => void>(); + + /** Dedicated reactive state for pending continue requests (turn limit reached) */ + private _pendingContinueRequests = new SvelteMap<string, boolean>(); + /** Non-reactive: stores resolve functions for pending continue Promises */ + private _continueResolvers = new Map<string, (shouldContinue: boolean) => void>(); + + /** Reactive: queued steering messages to inject between turns */ + private _steeringMessages = new SvelteMap<string, SteeringMessage>(); get isReady(): boolean { return true; @@ -178,36 +207,214 @@ class AgenticStore { return this.getSession(conversationId).streamingToolCall; } + pendingPermissionRequest( + conversationId: string + ): { toolName: string; serverLabel: string } | null { + return this._pendingPermissions.get(conversationId) ?? null; + } + + pendingContinueRequest(conversationId: string): boolean { + return this._pendingContinueRequests.get(conversationId) ?? false; + } + + resolveContinue(conversationId: string, shouldContinue: boolean): void { + const resolver = this._continueResolvers.get(conversationId); + if (resolver) { + this._continueResolvers.delete(conversationId); + resolver(shouldContinue); + } + } + + resolvePermission(conversationId: string, decision: ToolPermissionDecision): void { + const resolver = this._permissionResolvers.get(conversationId); + if (resolver) { + this._permissionResolvers.delete(conversationId); + resolver(decision); + } + } + clearError(conversationId: string): void { this.updateSession(conversationId, { lastError: null }); } + hasPendingSteeringMessage(conversationId: string): boolean { + return this._steeringMessages.has(conversationId); + } + + pendingSteeringMessageContent(conversationId: string): string | null { + return this._steeringMessages.get(conversationId)?.content ?? null; + } + + pendingSteeringMessageExtras(conversationId: string): DatabaseMessageExtra[] | undefined { + return this._steeringMessages.get(conversationId)?.extras; + } + + /** + * Queue a steering message. When the current agentic turn completes, + * the flow exits and the caller re-sends the message as a normal chat message. + */ + injectSteeringMessage( + conversationId: string, + content: string, + extras?: DatabaseMessageExtra[] + ): void { + this._steeringMessages.set(conversationId, { content, extras }); + } + + /** + * Clear the pending steering message without consuming it. + */ + clearSteeringMessage(conversationId: string): void { + this._steeringMessages.delete(conversationId); + } + + /** + * Consume and return the pending steering message for re-sending. + * Called by chatStore after the agentic flow exits. + */ + consumePendingSteeringMessage(conversationId: string): SteeringMessage | null { + const msg = this._steeringMessages.get(conversationId); + if (!msg) return null; + this._steeringMessages.delete(conversationId); + return msg; + } + getConfig(settings: SettingsConfigType, perChatOverrides?: McpServerOverride[]): AgenticConfig { const maxTurns = Number(settings.agenticMaxTurns) || DEFAULT_AGENTIC_CONFIG.maxTurns; const maxToolPreviewLines = Number(settings.agenticMaxToolPreviewLines) || DEFAULT_AGENTIC_CONFIG.maxToolPreviewLines; + const hasTools = + mcpStore.hasEnabledServers(perChatOverrides) || + toolsStore.builtinTools.length > 0 || + toolsStore.customTools.length > 0; return { - enabled: mcpStore.hasEnabledServers(perChatOverrides) && DEFAULT_AGENTIC_CONFIG.enabled, + enabled: hasTools && DEFAULT_AGENTIC_CONFIG.enabled, maxTurns, maxToolPreviewLines }; } + private parseToolArguments(args: string | Record<string, unknown>): Record<string, unknown> { + if (typeof args === 'object') return args; + const trimmed = args.trim(); + if (trimmed === '') return {}; + return JSON.parse(trimmed) as Record<string, unknown>; + } + + private async requestPermission( + conversationId: string, + toolName: string, + serverLabel: string, + signal?: AbortSignal + ): Promise<ToolPermissionDecision> { + const permissionKey = toolsStore.getPermissionKey(toolName); + if (permissionKey && permissionsStore.hasTool(permissionKey)) { + return ToolPermissionDecision.ONCE; + } + + this._pendingPermissions.set(conversationId, { toolName, serverLabel }); + + return new Promise<ToolPermissionDecision>((resolve) => { + if (signal?.aborted) { + this._pendingPermissions.set(conversationId, null); + resolve(ToolPermissionDecision.DENY); + return; + } + + this._permissionResolvers.set(conversationId, (decision) => { + this._pendingPermissions.set(conversationId, null); + if (decision === ToolPermissionDecision.ALWAYS && permissionKey) { + permissionsStore.allowTool(permissionKey); + } else if (decision === ToolPermissionDecision.ALWAYS_SERVER) { + const serverToolKeys = toolsStore.allTools + .filter((t) => + t.serverName + ? t.serverName === serverLabel + : toolsStore.getToolServerLabel(t.definition.function.name) === serverLabel + ) + .map((t) => toolsStore.getPermissionKey(t.definition.function.name)!) + .filter((k): k is string => k !== null); + permissionsStore.allowTools(serverToolKeys); + } + resolve(decision); + }); + + signal?.addEventListener( + 'abort', + () => { + const resolver = this._permissionResolvers.get(conversationId); + if (resolver) { + this._permissionResolvers.delete(conversationId); + this._pendingPermissions.set(conversationId, null); + resolve(ToolPermissionDecision.DENY); + } + }, + { once: true } + ); + }); + } + + private async requestContinue(conversationId: string, signal?: AbortSignal): Promise<boolean> { + this._pendingContinueRequests.set(conversationId, true); + + return new Promise<boolean>((resolve) => { + if (signal?.aborted) { + this._pendingContinueRequests.set(conversationId, false); + resolve(false); + return; + } + + this._continueResolvers.set(conversationId, (shouldContinue) => { + this._pendingContinueRequests.set(conversationId, false); + resolve(shouldContinue); + }); + + signal?.addEventListener( + 'abort', + () => { + const resolver = this._continueResolvers.get(conversationId); + if (resolver) { + this._continueResolvers.delete(conversationId); + this._pendingContinueRequests.set(conversationId, false); + resolve(false); + } + }, + { once: true } + ); + }); + } + async runAgenticFlow(params: AgenticFlowParams): Promise<AgenticFlowResult> { const { conversationId, messages, options = {}, callbacks, signal, perChatOverrides } = params; + // Clear any pending permissions/continue requests for this conversation when starting a new flow + this._pendingPermissions.set(conversationId, null); + this._permissionResolvers.delete(conversationId); + this._pendingContinueRequests.set(conversationId, false); + this._continueResolvers.delete(conversationId); + this._steeringMessages.delete(conversationId); + + // Ensure built-in tools are fetched before checking if agentic is enabled + if (toolsStore.builtinTools.length === 0 && !toolsStore.loading) { + await toolsStore.fetchBuiltinTools(); + } + const agenticConfig = this.getConfig(config(), perChatOverrides); if (!agenticConfig.enabled) return { handled: false }; - const initialized = await mcpStore.ensureInitialized(perChatOverrides); - if (!initialized) { - console.log('[AgenticStore] MCP not initialized, falling back to standard chat'); - return { handled: false }; + const hasMcpServers = mcpStore.hasEnabledServers(perChatOverrides); + if (hasMcpServers) { + const initialized = await mcpStore.ensureInitialized(perChatOverrides); + + if (!initialized) { + console.log('[AgenticStore] MCP not initialized'); + } } - const tools = mcpStore.getToolDefinitionsForLLM(); + const tools = toolsStore.getEnabledToolsForLLM(); if (tools.length === 0) { console.log('[AgenticStore] No tools available, falling back to standard chat'); + return { handled: false }; } @@ -235,7 +442,8 @@ class AgenticStore { totalToolCalls: 0, lastError: null }); - mcpStore.acquireConnection(); + + if (hasMcpServers) mcpStore.acquireConnection(); try { await this.executeAgenticLoop({ @@ -255,11 +463,14 @@ class AgenticStore { return { handled: true, error: normalizedError }; } finally { this.updateSession(conversationId, { isRunning: false }); - await mcpStore - .releaseConnection() - .catch((err: unknown) => - console.warn('[AgenticStore] Failed to release MCP connection:', err) - ); + + if (hasMcpServers) { + await mcpStore + .releaseConnection() + .catch((err: unknown) => + console.warn('[AgenticStore] Failed to release MCP connection:', err) + ); + } } } @@ -303,7 +514,24 @@ class AgenticStore { const effectiveModel = options.model || modelsStore.models[0]?.model || ''; - for (let turn = 0; turn < maxTurns; turn++) { + let turn = 0; + while (true) { + if (turn >= maxTurns) { + // Turn limit reached - ask user whether to continue + const shouldContinue = await this.requestContinue(conversationId, signal); + + // Yield to allow Svelte to flush the UI update + await new Promise((r) => setTimeout(r, 0)); + + if (!shouldContinue || signal?.aborted) { + onFlowComplete?.(this.buildFinalTimings(capturedTimings, agenticTimings)); + return; + } + + // User chose to continue - extend the limit + turn = 0; + } + this.updateSession(conversationId, { currentTurn: turn + 1 }); agenticTimings.turns = turn + 1; @@ -426,6 +654,20 @@ class AgenticStore { throw normalizedError; } + // === Steering check: if a user message was queued during this turn, exit the flow. + // The caller (chatStore) will consume the pending message and re-send it normally. + if (this._steeringMessages.has(conversationId)) { + console.log('[AgenticStore] Steering message detected after turn, exiting agentic flow'); + await onAssistantTurnComplete?.( + turnContent, + turnReasoningContent || undefined, + this.buildFinalTimings(capturedTimings, agenticTimings), + turnToolCalls.length > 0 ? this.normalizeToolCalls(turnToolCalls) : undefined + ); + onFlowComplete?.(this.buildFinalTimings(capturedTimings, agenticTimings)); + return; + } + // No tool calls = final turn, save and complete if (turnToolCalls.length === 0) { agenticTimings.perTurn!.push(turnStats); @@ -479,31 +721,88 @@ class AgenticStore { }); // Execute each tool call and create result messages - for (const toolCall of normalizedCalls) { + for (let i = 0; i < normalizedCalls.length; i++) { + const toolCall = normalizedCalls[i]; + + if (signal?.aborted) { + onFlowComplete?.(this.buildFinalTimings(capturedTimings, agenticTimings)); + return; + } + + // Check for pending steering message - skip remaining tool calls + if (this._steeringMessages.has(conversationId)) { + console.log( + `[AgenticStore] Steering message detected, skipping ${normalizedCalls.length - i} remaining tool call(s)` + ); + for (let j = i; j < normalizedCalls.length; j++) { + const remainingCall = normalizedCalls[j]; + const interruptedContent = 'Tool execution was interrupted by a new user message.'; + if (createToolResultMessage) { + await createToolResultMessage(remainingCall.id, interruptedContent); + } + sessionMessages.push({ + role: MessageRole.TOOL, + tool_call_id: remainingCall.id, + content: interruptedContent + }); + } + break; + } + + const toolName = toolCall.function.name; + const serverLabel = toolsStore.getToolServerLabel(toolName); + + // Ask for permission before executing the tool + const permission = await this.requestPermission( + conversationId, + toolName, + serverLabel, + signal + ); + + // Yield to allow Svelte to flush the UI update (hide permission dialog) + await new Promise((r) => setTimeout(r, 0)); + if (signal?.aborted) { onFlowComplete?.(this.buildFinalTimings(capturedTimings, agenticTimings)); return; } const toolStartTime = performance.now(); - const mcpCall: MCPToolCall = { - id: toolCall.id, - function: { name: toolCall.function.name, arguments: toolCall.function.arguments } - }; + const toolSource = toolsStore.getToolSource(toolName); let result: string; let toolSuccess = true; - try { - const executionResult = await mcpStore.executeTool(mcpCall, signal); - result = executionResult.content; - } catch (error) { - if (isAbortError(error)) { - onFlowComplete?.(this.buildFinalTimings(capturedTimings, agenticTimings)); - return; - } - result = `Error: ${error instanceof Error ? error.message : String(error)}`; + if (permission === ToolPermissionDecision.DENY) { + result = 'Tool execution was denied by the user.'; toolSuccess = false; + } else { + try { + if (toolSource === ToolSource.BUILTIN) { + const args = this.parseToolArguments(toolCall.function.arguments); + const executionResult = await ToolsService.executeTool(toolName, args, signal); + + result = executionResult.content; + + if (executionResult.isError) toolSuccess = false; + } else { + const mcpCall: MCPToolCall = { + id: toolCall.id, + function: { name: toolName, arguments: toolCall.function.arguments } + }; + const executionResult = await mcpStore.executeTool(mcpCall, signal); + + result = executionResult.content; + } + } catch (error) { + if (isAbortError(error)) { + onFlowComplete?.(this.buildFinalTimings(capturedTimings, agenticTimings)); + return; + } + result = `Error: ${error instanceof Error ? error.message : String(error)}`; + toolSuccess = false; + } } const toolDurationMs = performance.now() - toolStartTime; @@ -572,17 +871,18 @@ class AgenticStore { const intermediateTimings = this.buildFinalTimings(capturedTimings, agenticTimings); if (intermediateTimings) onTurnComplete?.(intermediateTimings); } - } - // Turn limit reached - onChunk?.(TURN_LIMIT_MESSAGE); - await onAssistantTurnComplete?.( - TURN_LIMIT_MESSAGE, - undefined, - this.buildFinalTimings(capturedTimings, agenticTimings), - undefined - ); - onFlowComplete?.(this.buildFinalTimings(capturedTimings, agenticTimings)); + // If tools were interrupted by a steering message, exit now instead of starting another LLM turn + if (this._steeringMessages.has(conversationId)) { + console.log( + '[AgenticStore] Steering message detected after tool execution, exiting agentic flow' + ); + onFlowComplete?.(this.buildFinalTimings(capturedTimings, agenticTimings)); + return; + } + + turn++; + } } private buildFinalTimings( @@ -680,6 +980,46 @@ export function agenticStreamingToolCall(conversationId: string) { return agenticStore.streamingToolCall(conversationId); } +export function agenticPendingPermissionRequest(conversationId: string) { + return agenticStore.pendingPermissionRequest(conversationId); +} + +export function agenticResolvePermission(conversationId: string, decision: ToolPermissionDecision) { + agenticStore.resolvePermission(conversationId, decision); +} + +export function agenticPendingContinueRequest(conversationId: string) { + return agenticStore.pendingContinueRequest(conversationId); +} + +export function agenticResolveContinue(conversationId: string, shouldContinue: boolean) { + agenticStore.resolveContinue(conversationId, shouldContinue); +} + +export function agenticHasPendingSteeringMessage(conversationId: string) { + return agenticStore.hasPendingSteeringMessage(conversationId); +} + +export function agenticInjectSteeringMessage( + conversationId: string, + content: string, + extras?: DatabaseMessageExtra[] +) { + agenticStore.injectSteeringMessage(conversationId, content, extras); +} + +export function agenticPendingSteeringMessageContent(conversationId: string) { + return agenticStore.pendingSteeringMessageContent(conversationId); +} + +export function agenticPendingSteeringMessageExtras(conversationId: string) { + return agenticStore.pendingSteeringMessageExtras(conversationId); +} + +export function agenticClearSteeringMessage(conversationId: string) { + agenticStore.clearSteeringMessage(conversationId); +} + export function agenticIsAnyRunning() { return agenticStore.isAnyRunning; } diff --git a/tools/server/webui/src/lib/stores/chat.svelte.ts b/tools/server/webui/src/lib/stores/chat.svelte.ts index 540d4fdb5a5..4a29cd3db20 100644 --- a/tools/server/webui/src/lib/stores/chat.svelte.ts +++ b/tools/server/webui/src/lib/stores/chat.svelte.ts @@ -73,6 +73,12 @@ class ChatStore { private _pendingDraftMessage = $state<string>(''); private _pendingDraftFiles = $state<ChatUploadedFile[]>([]); + /** Reactive: queued pending messages for non-agentic streaming */ + private _pendingMessages = new SvelteMap< + string, + { content: string; extras?: DatabaseMessageExtra[] } + >(); + private setChatLoading(convId: string, loading: boolean): void { this.touchConversationState(convId); if (loading) { @@ -176,6 +182,19 @@ class ChatStore { } } + /** + * Abort the current agentic flow signal without clearing loading state. + * Used by "Send immediately" to force the agentic loop to exit so that + * the pending steering message can be re-sent. + */ + abortCurrentFlow(convId: string): void { + const c = this.abortControllers.get(convId); + if (c) { + c.abort(); + this.abortControllers.delete(convId); + } + } + private showErrorDialog(state: ErrorDialogState | null): void { this.errorDialogState = state; } @@ -243,6 +262,35 @@ class ChatStore { return this.chatStreamingStates.has(convId); } + hasPendingMessage(convId: string): boolean { + return this._pendingMessages.has(convId); + } + + pendingMessageContent(convId: string): string | null { + return this._pendingMessages.get(convId)?.content ?? null; + } + + pendingMessageExtras(convId: string): DatabaseMessageExtra[] | undefined { + return this._pendingMessages.get(convId)?.extras; + } + + injectPendingMessage(convId: string, content: string, extras?: DatabaseMessageExtra[]): void { + this._pendingMessages.set(convId, { content, extras }); + } + + clearPendingMessage(convId: string): void { + this._pendingMessages.delete(convId); + } + + consumePendingMessage( + convId: string + ): { content: string; extras?: DatabaseMessageExtra[] } | null { + const msg = this._pendingMessages.get(convId); + if (!msg) return null; + this._pendingMessages.delete(convId); + return msg; + } + private touchConversationState(convId: string): void { this.conversationStateTimestamps.set(convId, { lastAccessed: Date.now() }); } @@ -462,7 +510,18 @@ class ChatStore { async sendMessage(content: string, extras?: DatabaseMessageExtra[]): Promise<void> { if (!content.trim() && (!extras || extras.length === 0)) return; const activeConv = conversationsStore.activeConversation; - if (activeConv && this.isChatLoadingInternal(activeConv.id)) return; + + // If agentic loop is running, inject as a steering message instead of starting a new flow + if (activeConv && agenticStore.isRunning(activeConv.id)) { + agenticStore.injectSteeringMessage(activeConv.id, content, extras); + return; + } + + // If non-agentic streaming is active, queue as a pending message to send after completion + if (activeConv && this.isChatLoadingInternal(activeConv.id)) { + this.injectPendingMessage(activeConv.id, content, extras); + return; + } // Cancel any in-flight pre-encode request this.cancelPreEncode(); @@ -747,10 +806,16 @@ class ChatStore { this.setStreamingActive(false); if (isAbortError(error)) { cleanupStreamingState(); + // If aborted with a pending message (e.g. "Send immediately"), re-send it + const pending = this.consumePendingMessage(convId); + if (pending) { + this.sendMessage(pending.content, pending.extras); + } return; } console.error('Streaming error:', error); cleanupStreamingState(); + this.clearPendingMessage(convId); const idx = conversationsStore.findMessageIndex(assistantMessage.id); if (idx !== -1) { const failedMessage = conversationsStore.removeMessageAtIndex(idx); @@ -770,8 +835,7 @@ class ChatStore { const perChatOverrides = conversationsStore.activeConversation?.mcpServerOverrides; - const agenticConfig = agenticStore.getConfig(config(), perChatOverrides); - if (agenticConfig.enabled) { + { const agenticResult = await agenticStore.runAgenticFlow({ conversationId: convId, messages: allMessages, @@ -780,10 +844,16 @@ class ChatStore { signal: abortController.signal, perChatOverrides }); - if (agenticResult.handled) return; + if (agenticResult.handled) { + // Check if there's a pending steering message to re-send + const pending = agenticStore.consumePendingSteeringMessage(convId); + if (pending) { + await this.sendMessage(pending.content, pending.extras); + } + return; + } } - // Non-agentic path: direct streaming into the single assistant message await ChatService.sendMessage( allMessages, { @@ -823,6 +893,12 @@ class ChatStore { cleanupStreamingState(); if (onComplete) await onComplete(content); if (isRouterMode()) modelsStore.fetchRouterModels().catch(console.error); + + // Check if there's a pending message queued during streaming + const pending = this.consumePendingMessage(convId); + if (pending) { + await this.sendMessage(pending.content, pending.extras); + } }, onError: streamCallbacks.onError }, @@ -843,6 +919,7 @@ class ChatStore { this.setChatLoading(convId, false); this.clearChatStreaming(convId); this.setProcessingState(convId, null); + this.clearPendingMessage(convId); } private async savePartialResponseIfNeeded(convId?: string): Promise<void> { const conversationId = convId || conversationsStore.activeConversation?.id; @@ -1688,3 +1765,13 @@ export const isChatStreaming = () => chatStore.isStreaming(); export const isEditing = () => chatStore.isEditing(); export const isLoading = () => chatStore.isLoading; export const pendingEditMessageId = () => chatStore.pendingEditMessageId; +export const chatHasPendingMessage = (convId: string) => chatStore.hasPendingMessage(convId); +export const chatPendingMessageContent = (convId: string) => + chatStore.pendingMessageContent(convId); +export const chatPendingMessageExtras = (convId: string) => chatStore.pendingMessageExtras(convId); +export const chatClearPendingMessage = (convId: string) => chatStore.clearPendingMessage(convId); +export const chatInjectPendingMessage = ( + convId: string, + content: string, + extras?: DatabaseMessageExtra[] +) => chatStore.injectPendingMessage(convId, content, extras); diff --git a/tools/server/webui/src/lib/stores/conversations.svelte.ts b/tools/server/webui/src/lib/stores/conversations.svelte.ts index 2d1d4e9c322..b6c95ed9baf 100644 --- a/tools/server/webui/src/lib/stores/conversations.svelte.ts +++ b/tools/server/webui/src/lib/stores/conversations.svelte.ts @@ -30,7 +30,7 @@ import { generateConversationTitle } from '$lib/utils'; import type { McpServerOverride } from '$lib/types/database'; -import { MessageRole } from '$lib/enums'; +import { MessageRole, HtmlInputType, FileExtensionText } from '$lib/enums'; import { ISO_DATE_TIME_SEPARATOR, ISO_DATE_TIME_SEPARATOR_REPLACEMENT, @@ -797,7 +797,15 @@ class ConversationsStore { return; } - const downloadFilename = filename ?? this.generateConversationFilename(conversation, msgs); + let downloadFilename: string; + + if (filename) { + downloadFilename = filename; + } else if (Array.isArray(data) && data.length > 1) { + downloadFilename = `${new Date().toISOString().split(ISO_DATE_TIME_SEPARATOR)[0]}_conversations.json`; + } else { + downloadFilename = this.generateConversationFilename(conversation, msgs); + } const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); const url = URL.createObjectURL(blob); @@ -838,8 +846,8 @@ class ConversationsStore { async importConversations(): Promise<DatabaseConversation[]> { return new Promise((resolve, reject) => { const input = document.createElement('input'); - input.type = 'file'; - input.accept = '.json'; + input.type = HtmlInputType.FILE; + input.accept = FileExtensionText.JSON; input.onchange = async (e) => { const file = (e.target as HTMLInputElement)?.files?.[0]; diff --git a/tools/server/webui/src/lib/stores/draft-messages.svelte.ts b/tools/server/webui/src/lib/stores/draft-messages.svelte.ts new file mode 100644 index 00000000000..7ee814d840e --- /dev/null +++ b/tools/server/webui/src/lib/stores/draft-messages.svelte.ts @@ -0,0 +1,31 @@ +import { NEW_CHAT_DRAFT_KEY } from '$lib/constants'; + +interface DraftMessage { + message: string; + files: ChatUploadedFile[]; +} + +class DraftMessagesStore { + private drafts = new Map<string, DraftMessage>(); + + getDraftMessage(chatId: string | undefined): DraftMessage { + const key = chatId ?? NEW_CHAT_DRAFT_KEY; + return this.drafts.get(key) ?? { message: '', files: [] }; + } + + saveDraftMessage(chatId: string | undefined, message: string, files: ChatUploadedFile[]): void { + const key = chatId ?? NEW_CHAT_DRAFT_KEY; + if (message || files.length > 0) { + this.drafts.set(key, { message, files: [...files] }); + } else { + this.drafts.delete(key); + } + } + + clearDraftMessage(chatId: string | undefined): void { + const key = chatId ?? NEW_CHAT_DRAFT_KEY; + this.drafts.delete(key); + } +} + +export const draftMessagesStore = new DraftMessagesStore(); diff --git a/tools/server/webui/src/lib/stores/permissions.svelte.ts b/tools/server/webui/src/lib/stores/permissions.svelte.ts new file mode 100644 index 00000000000..f44575b54df --- /dev/null +++ b/tools/server/webui/src/lib/stores/permissions.svelte.ts @@ -0,0 +1,58 @@ +import { ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY } from '$lib/constants'; +import { SvelteSet } from 'svelte/reactivity'; + +class PermissionsStore { + private _tools = $state(new SvelteSet<string>()); + + constructor() { + try { + const stored = localStorage.getItem(ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY); + if (stored) { + for (const name of JSON.parse(stored) as string[]) { + if (typeof name === 'string') this._tools.add(name); + } + } + } catch (err) { + console.error( + `Failed to load permissions from localStorage ("${ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY}"):`, + err + ); + } + } + + get tools(): ReadonlySet<string> { + return this._tools; + } + + hasTool(key: string): boolean { + return this._tools.has(key); + } + + allowTool(key: string): void { + this._tools.add(key); + this._persist(); + } + + allowTools(keys: string[]): void { + for (const key of keys) this._tools.add(key); + this._persist(); + } + + revokeTool(key: string): void { + this._tools.delete(key); + this._persist(); + } + + private _persist(): void { + try { + localStorage.setItem(ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY, JSON.stringify([...this._tools])); + } catch (err) { + console.error( + `Failed to persist to localStorage ("${ALWAYS_ALLOWED_TOOLS_LOCALSTORAGE_KEY}"):`, + err + ); + } + } +} + +export const permissionsStore = new PermissionsStore(); diff --git a/tools/server/webui/src/lib/stores/settings-referrer.svelte.ts b/tools/server/webui/src/lib/stores/settings-referrer.svelte.ts new file mode 100644 index 00000000000..48bae1170a8 --- /dev/null +++ b/tools/server/webui/src/lib/stores/settings-referrer.svelte.ts @@ -0,0 +1,10 @@ +let _url = $state('#/'); + +export const settingsReferrer = { + get url() { + return _url; + }, + set url(value: string) { + _url = value; + } +}; diff --git a/tools/server/webui/src/lib/stores/settings.svelte.ts b/tools/server/webui/src/lib/stores/settings.svelte.ts index f591de26b73..e1d89844525 100644 --- a/tools/server/webui/src/lib/stores/settings.svelte.ts +++ b/tools/server/webui/src/lib/stores/settings.svelte.ts @@ -327,6 +327,9 @@ class SettingsStore { const propsDefaults = this.getServerDefaults(); if (Object.keys(propsDefaults).length === 0) return; + const webuiSettings = serverStore.webuiSettings; + const webuiSettingsKeys = new Set(webuiSettings ? Object.keys(webuiSettings) : []); + for (const [key, propsValue] of Object.entries(propsDefaults)) { const currentValue = getConfigValue(this.config, key); @@ -336,12 +339,18 @@ class SettingsStore { // if user value matches server, it's not a real override if (normalizedCurrent === normalizedDefault) { this.userOverrides.delete(key); + + if ( + !webuiSettingsKeys.has(key) && + getConfigValue(SETTING_CONFIG_DEFAULT, key) === undefined + ) { + setConfigValue(this.config, key, undefined); + } } } // webui settings need actual values in config (no placeholder mechanism), // so write them for non-overridden keys - const webuiSettings = serverStore.webuiSettings; if (webuiSettings) { for (const [key, value] of Object.entries(webuiSettings)) { if (!this.userOverrides.has(key) && value !== undefined) { diff --git a/tools/server/webui/src/lib/stores/tools.svelte.ts b/tools/server/webui/src/lib/stores/tools.svelte.ts new file mode 100644 index 00000000000..d55736d0243 --- /dev/null +++ b/tools/server/webui/src/lib/stores/tools.svelte.ts @@ -0,0 +1,422 @@ +import type { OpenAIToolDefinition, ToolEntry, ToolGroup } from '$lib/types'; +import { ToolsService } from '$lib/services/tools.service'; +import { mcpStore } from '$lib/stores/mcp.svelte'; +import { HealthCheckStatus, JsonSchemaType, ToolCallType, ToolSource } from '$lib/enums'; +import { config } from '$lib/stores/settings.svelte'; +import { + DISABLED_TOOLS_LOCALSTORAGE_KEY, + TOOL_GROUP_LABELS, + TOOL_SERVER_LABELS +} from '$lib/constants'; +import { SvelteSet } from 'svelte/reactivity'; + +class ToolsStore { + private _builtinTools = $state<OpenAIToolDefinition[]>([]); + private _loading = $state(false); + private _error = $state<string | null>(null); + private _disabledTools = $state(new SvelteSet<string>()); + private _toolsEndpointUnreachable = $state(false); + + constructor() { + try { + const stored = localStorage.getItem(DISABLED_TOOLS_LOCALSTORAGE_KEY); + if (stored) { + const parsed = JSON.parse(stored); + if (Array.isArray(parsed)) { + for (const name of parsed) { + if (typeof name === 'string') this._disabledTools.add(name); + } + } + } + } catch (err) { + console.error('[ToolsStore] Failed to load disabled tools from localStorage:', err); + } + + // Initialize builtin tools on startup + this.fetchBuiltinTools(); + } + + private persistDisabledTools(): void { + try { + localStorage.setItem( + DISABLED_TOOLS_LOCALSTORAGE_KEY, + JSON.stringify([...this._disabledTools]) + ); + } catch { + // ignore storage errors + } + } + + get builtinTools(): OpenAIToolDefinition[] { + return this._builtinTools; + } + + get mcpTools(): OpenAIToolDefinition[] { + return mcpStore.getToolDefinitionsForLLM(); + } + + get customTools(): OpenAIToolDefinition[] { + const raw = config().custom; + if (!raw || typeof raw !== 'string') return []; + + try { + const parsed = JSON.parse(raw); + if (!Array.isArray(parsed)) return []; + + return parsed.filter( + (t: unknown): t is OpenAIToolDefinition => + typeof t === 'object' && + t !== null && + 'type' in t && + (t as OpenAIToolDefinition).type === 'function' && + 'function' in t && + typeof (t as OpenAIToolDefinition).function?.name === 'string' + ); + } catch { + return []; + } + } + + /** Flat list of all tool entries with source metadata */ + get allTools(): ToolEntry[] { + const entries: ToolEntry[] = []; + + for (const def of this._builtinTools) { + entries.push({ source: ToolSource.BUILTIN, definition: def }); + } + + // Use live connections when available (full schema), fall back to health check data + const connections = mcpStore.getConnections(); + if (connections.size > 0) { + for (const [serverId, connection] of connections) { + const serverName = mcpStore.getServerDisplayName(serverId); + for (const tool of connection.tools) { + const rawSchema = (tool.inputSchema as Record<string, unknown>) ?? { + type: JsonSchemaType.OBJECT, + properties: {}, + required: [] + }; + entries.push({ + source: ToolSource.MCP, + serverName, + serverId, + definition: { + type: ToolCallType.FUNCTION, + function: { + name: tool.name, + description: tool.description, + parameters: rawSchema + } + } + }); + } + } + } else { + for (const { serverId, serverName, tools } of this.getMcpToolsFromHealthChecks()) { + for (const tool of tools) { + entries.push({ + source: ToolSource.MCP, + serverName, + serverId, + definition: { + type: ToolCallType.FUNCTION, + function: { + name: tool.name, + description: tool.description, + parameters: { type: JsonSchemaType.OBJECT, properties: {}, required: [] } + } + } + }); + } + } + } + + for (const def of this.customTools) { + entries.push({ source: ToolSource.CUSTOM, definition: def }); + } + + return entries; + } + + /** Tools grouped by category for tree display */ + get toolGroups(): ToolGroup[] { + const groups: ToolGroup[] = []; + + if (this._builtinTools.length > 0) { + groups.push({ + source: ToolSource.BUILTIN, + label: TOOL_GROUP_LABELS[ToolSource.BUILTIN], + tools: this._builtinTools + }); + } + + // Use live connections when available, fall back to health check data + const connections = mcpStore.getConnections(); + if (connections.size > 0) { + for (const [serverId, connection] of connections) { + if (connection.tools.length === 0) continue; + const label = mcpStore.getServerDisplayName(serverId); + const tools: OpenAIToolDefinition[] = connection.tools.map((tool) => { + const rawSchema = (tool.inputSchema as Record<string, unknown>) ?? { + type: JsonSchemaType.OBJECT, + properties: {}, + required: [] + }; + return { + type: ToolCallType.FUNCTION, + function: { + name: tool.name, + description: tool.description, + parameters: rawSchema + } + }; + }); + groups.push({ source: ToolSource.MCP, label, serverId, tools }); + } + } else { + for (const { serverId, serverName, tools } of this.getMcpToolsFromHealthChecks()) { + if (tools.length === 0) continue; + const defs: OpenAIToolDefinition[] = tools.map((tool) => ({ + type: ToolCallType.FUNCTION, + function: { + name: tool.name, + description: tool.description, + parameters: { type: JsonSchemaType.OBJECT, properties: {}, required: [] } + } + })); + groups.push({ source: ToolSource.MCP, label: serverName, serverId, tools: defs }); + } + } + + const custom = this.customTools; + if (custom.length > 0) { + groups.push({ + source: ToolSource.CUSTOM, + label: TOOL_GROUP_LABELS[ToolSource.CUSTOM], + tools: custom + }); + } + + return groups; + } + + /** Only enabled tool definitions (for sending to the API) */ + get enabledToolDefinitions(): OpenAIToolDefinition[] { + return this.allTools + .filter((t) => !this._disabledTools.has(t.definition.function.name)) + .map((t) => t.definition); + } + + /** + * Returns enabled tool definitions for sending to the LLM. + * MCP tools use properly normalized schemas from mcpStore. + * Filters out tools disabled via the UI checkboxes. + */ + getEnabledToolsForLLM(): OpenAIToolDefinition[] { + const disabled = this._disabledTools; + const result: OpenAIToolDefinition[] = []; + + for (const tool of this._builtinTools) { + if (!disabled.has(tool.function.name)) { + result.push(tool); + } + } + + // MCP tools with properly normalized schemas + for (const tool of mcpStore.getToolDefinitionsForLLM()) { + if (!disabled.has(tool.function.name)) { + result.push(tool); + } + } + + for (const tool of this.customTools) { + if (!disabled.has(tool.function.name)) { + result.push(tool); + } + } + + return result; + } + + get allToolDefinitions(): OpenAIToolDefinition[] { + return this.allTools.map((t) => t.definition); + } + + get loading(): boolean { + return this._loading; + } + + get error(): string | null { + return this._error; + } + + get isToolsEndpointUnreachable(): boolean { + return this._toolsEndpointUnreachable; + } + + get disabledTools(): SvelteSet<string> { + return this._disabledTools; + } + + isToolEnabled(toolName: string): boolean { + return !this._disabledTools.has(toolName); + } + + toggleTool(toolName: string): void { + if (this._disabledTools.has(toolName)) { + this._disabledTools.delete(toolName); + } else { + this._disabledTools.add(toolName); + } + this.persistDisabledTools(); + } + + setToolEnabled(toolName: string, enabled: boolean): void { + if (enabled) { + this._disabledTools.delete(toolName); + } else { + this._disabledTools.add(toolName); + } + } + + /** + * Enable all tools belonging to a specific MCP server. + * Called when a server is enabled for a conversation. + */ + enableAllToolsForServer(serverId: string): void { + const connection = mcpStore.getConnections().get(serverId); + if (!connection) return; + for (const tool of connection.tools) { + this._disabledTools.delete(tool.name); + } + this.persistDisabledTools(); + } + + toggleGroup(group: ToolGroup): void { + const allEnabled = group.tools.every((t) => this.isToolEnabled(t.function.name)); + for (const tool of group.tools) { + this.setToolEnabled(tool.function.name, !allEnabled); + } + this.persistDisabledTools(); + } + + isGroupFullyEnabled(group: ToolGroup): boolean { + return group.tools.length > 0 && group.tools.every((t) => this.isToolEnabled(t.function.name)); + } + + isGroupPartiallyEnabled(group: ToolGroup): boolean { + const enabledCount = group.tools.filter((t) => this.isToolEnabled(t.function.name)).length; + return enabledCount > 0 && enabledCount < group.tools.length; + } + + /** + * Get MCP tools from health check data (reactive). + * Used when live connections aren't established yet. + */ + private getMcpToolsFromHealthChecks(): { + serverId: string; + serverName: string; + tools: { name: string; description?: string }[]; + }[] { + const result: ReturnType<ToolsStore['getMcpToolsFromHealthChecks']> = []; + for (const server of mcpStore.getServersSorted().filter((s) => s.enabled)) { + const health = mcpStore.getHealthCheckState(server.id); + if (health.status === HealthCheckStatus.SUCCESS && health.tools.length > 0) { + result.push({ + serverId: server.id, + serverName: mcpStore.getServerLabel(server), + tools: health.tools + }); + } + } + return result; + } + + /** Determine the source of a tool by its name. */ + getToolSource(toolName: string): ToolSource | null { + if (this._builtinTools.some((t) => t.function.name === toolName)) { + return ToolSource.BUILTIN; + } + for (const entry of this.allTools) { + if (entry.definition.function.name === toolName) { + return entry.source; + } + } + return null; + } + + /** Get the display label for the server that owns a given tool. */ + getToolServerLabel(toolName: string): string { + for (const entry of this.allTools) { + if (entry.definition.function.name === toolName) { + if (entry.serverName) { + return mcpStore.getServerDisplayName(entry.serverName); + } + if (entry.source === ToolSource.BUILTIN) { + return TOOL_SERVER_LABELS[ToolSource.BUILTIN]; + } + if (entry.source === ToolSource.CUSTOM) { + return TOOL_SERVER_LABELS[ToolSource.CUSTOM]; + } + } + } + return ''; + } + + /** Build a permission key with category prefix, e.g. "mcp-<serverId>:tool_name" */ + getPermissionKey(toolName: string): string | null { + for (const entry of this.allTools) { + if (entry.definition.function.name === toolName) { + switch (entry.source) { + case ToolSource.BUILTIN: + return `builtin:${toolName}`; + case ToolSource.CUSTOM: + return `custom:${toolName}`; + case ToolSource.MCP: + if (entry.serverId) { + return `mcp-${entry.serverId}:${toolName}`; + } + return `mcp:${toolName}`; + default: + return null; + } + } + } + return null; + } + + /** Check if there are any enabled tools available (builtin, MCP, or custom). */ + get hasEnabledTools(): boolean { + return this.getEnabledToolsForLLM().length > 0; + } + + async fetchBuiltinTools(): Promise<void> { + if (this._loading) return; + + this._loading = true; + this._error = null; + this._toolsEndpointUnreachable = false; + + try { + const toolInfos = await ToolsService.list(); + this._builtinTools = toolInfos.map((info) => info.definition); + } catch (err) { + const errorMessage = err instanceof Error ? err.message : String(err); + this._error = errorMessage; + // 404 from /tools means the server was started without --tools + if (errorMessage.includes('404') || errorMessage.toLowerCase().includes('not found')) { + this._toolsEndpointUnreachable = true; + } + console.error('[ToolsStore] Failed to fetch built-in tools:', err); + } finally { + this._loading = false; + } + } +} + +export const toolsStore = new ToolsStore(); + +export const allTools = () => toolsStore.allTools; +export const allToolDefinitions = () => toolsStore.allToolDefinitions; +export const enabledToolDefinitions = () => toolsStore.enabledToolDefinitions; +export const toolGroups = () => toolsStore.toolGroups; diff --git a/tools/server/webui/src/lib/types/agentic.d.ts b/tools/server/webui/src/lib/types/agentic.d.ts index 377f885d549..b94998384f5 100644 --- a/tools/server/webui/src/lib/types/agentic.d.ts +++ b/tools/server/webui/src/lib/types/agentic.d.ts @@ -69,6 +69,7 @@ export interface AgenticSession { totalToolCalls: number; lastError: Error | null; streamingToolCall: { name: string; arguments: string } | null; + pendingPermissionRequest: { toolName: string; serverLabel: string } | null; } /** @@ -147,3 +148,11 @@ export interface AgenticFlowResult { handled: boolean; error?: Error; } + +/** + * A user message to be injected into the agentic loop between turns. + */ +export interface SteeringMessage { + content: string; + extras?: DatabaseMessageExtra[]; +} diff --git a/tools/server/webui/src/lib/types/index.ts b/tools/server/webui/src/lib/types/index.ts index 93a39f03dae..711afbbf849 100644 --- a/tools/server/webui/src/lib/types/index.ts +++ b/tools/server/webui/src/lib/types/index.ts @@ -116,6 +116,7 @@ export type { ServerStatus, ToolCallParams, ToolExecutionResult, + ServerBuiltinToolInfo, Tool, Prompt, GetPromptResult, @@ -149,5 +150,9 @@ export type { AgenticFlowCallbacks, AgenticFlowOptions, AgenticFlowParams, - AgenticFlowResult + AgenticFlowResult, + SteeringMessage } from './agentic'; + +// Tools types +export type { ToolEntry, ToolGroup } from './tools'; diff --git a/tools/server/webui/src/lib/types/mcp.d.ts b/tools/server/webui/src/lib/types/mcp.d.ts index 2ce2f739921..3837bcdf1b8 100644 --- a/tools/server/webui/src/lib/types/mcp.d.ts +++ b/tools/server/webui/src/lib/types/mcp.d.ts @@ -1,4 +1,5 @@ import type { MCPConnectionPhase, MCPLogLevel, HealthCheckStatus } from '$lib/enums/mcp'; +import type { ToolSource } from '$lib/enums/tools'; import type { Client, ClientCapabilities as SDKClientCapabilities, @@ -256,6 +257,16 @@ export interface ToolExecutionResult { isError: boolean; } +export interface ServerBuiltinToolInfo { + display_name: string; + tool: string; + type: ToolSource.BUILTIN; + permissions: { + write: boolean; + }; + definition: OpenAIToolDefinition; +} + /** * Progress tracking state for a specific operation */ diff --git a/tools/server/webui/src/lib/types/tools.d.ts b/tools/server/webui/src/lib/types/tools.d.ts new file mode 100644 index 00000000000..a17a0c9a9eb --- /dev/null +++ b/tools/server/webui/src/lib/types/tools.d.ts @@ -0,0 +1,19 @@ +import type { ToolSource } from '$lib/enums'; +import type { OpenAIToolDefinition } from './mcp'; + +export interface ToolEntry { + source: ToolSource; + /** For MCP tools, the server display name (used for UI grouping) */ + serverName?: string; + /** For MCP tools, the server ID (used for permission keys) */ + serverId?: string; + definition: OpenAIToolDefinition; +} + +export interface ToolGroup { + source: ToolSource; + label: string; + /** For MCP groups, the server ID */ + serverId?: string; + tools: OpenAIToolDefinition[]; +} diff --git a/tools/server/webui/src/lib/utils/agentic.ts b/tools/server/webui/src/lib/utils/agentic.ts index 868545495f6..549a1c9a0e1 100644 --- a/tools/server/webui/src/lib/utils/agentic.ts +++ b/tools/server/webui/src/lib/utils/agentic.ts @@ -67,8 +67,14 @@ function deriveSingleTurnSections( const toolCalls = parseToolCalls(message.toolCalls); for (const tc of toolCalls) { const resultMsg = toolMessages.find((m) => m.toolCallId === tc.id); + // Only show as pending/loading if we're actively streaming; otherwise it's just a tool call without result + const type = resultMsg + ? AgenticSectionType.TOOL_CALL + : isStreaming + ? AgenticSectionType.TOOL_CALL_PENDING + : AgenticSectionType.TOOL_CALL; sections.push({ - type: resultMsg ? AgenticSectionType.TOOL_CALL : AgenticSectionType.TOOL_CALL_PENDING, + type, content: resultMsg?.content || '', toolName: tc.function?.name, toolArgs: tc.function?.arguments, diff --git a/tools/server/webui/src/lib/utils/audio-recording.ts b/tools/server/webui/src/lib/utils/audio-recording.ts index 2a21985d1a6..ab207b7a44d 100644 --- a/tools/server/webui/src/lib/utils/audio-recording.ts +++ b/tools/server/webui/src/lib/utils/audio-recording.ts @@ -43,27 +43,48 @@ export class AudioRecorder { async stopRecording(): Promise<Blob> { return new Promise((resolve, reject) => { - if (!this.mediaRecorder || this.mediaRecorder.state === 'inactive') { + const recorder = this.mediaRecorder; + const chunks = this.audioChunks; + const stream = this.stream; + + if (!recorder || recorder.state === 'inactive') { reject(new Error('No active recording to stop')); return; } - this.mediaRecorder.onstop = () => { - const mimeType = this.mediaRecorder?.mimeType || MimeTypeAudio.WAV; - const audioBlob = new Blob(this.audioChunks, { type: mimeType }); + // Detach instance state right away so a new startRecording can take over without race + this.mediaRecorder = null; + this.audioChunks = []; + this.stream = null; + this.recordingState = false; - this.cleanup(); + recorder.onstop = () => { + const audioBlob = new Blob(chunks, { + type: recorder.mimeType || MimeTypeAudio.WAV + }); + + if (stream) { + for (const track of stream.getTracks()) { + track.stop(); + } + } resolve(audioBlob); }; - this.mediaRecorder.onerror = (event) => { + recorder.onerror = (event) => { console.error('Recording error:', event); - this.cleanup(); + + if (stream) { + for (const track of stream.getTracks()) { + track.stop(); + } + } + reject(new Error('Recording failed')); }; - this.mediaRecorder.stop(); + recorder.stop(); }); } @@ -72,10 +93,26 @@ export class AudioRecorder { } cancelRecording(): void { - if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') { - this.mediaRecorder.stop(); + const recorder = this.mediaRecorder; + const stream = this.stream; + + this.mediaRecorder = null; + this.audioChunks = []; + this.stream = null; + this.recordingState = false; + + if (recorder && recorder.state !== 'inactive') { + // Drop the original handlers so the pending stop event does not touch the instance + recorder.onstop = null; + recorder.onerror = null; + recorder.stop(); + } + + if (stream) { + for (const track of stream.getTracks()) { + track.stop(); + } } - this.cleanup(); } private initializeRecorder(stream: MediaStream): void { @@ -110,19 +147,6 @@ export class AudioRecorder { this.recordingState = false; }; } - - private cleanup(): void { - if (this.stream) { - for (const track of this.stream.getTracks()) { - track.stop(); - } - - this.stream = null; - } - this.mediaRecorder = null; - this.audioChunks = []; - this.recordingState = false; - } } export async function convertToWav(audioBlob: Blob): Promise<Blob> { @@ -136,13 +160,12 @@ export async function convertToWav(audioBlob: Blob): Promise<Blob> { // eslint-disable-next-line @typescript-eslint/no-explicit-any const audioContext = new (window.AudioContext || (window as any).webkitAudioContext)(); - const audioBuffer = await audioContext.decodeAudioData(arrayBuffer); - - const wavBlob = audioBufferToWav(audioBuffer); - - audioContext.close(); - - return wavBlob; + try { + const audioBuffer = await audioContext.decodeAudioData(arrayBuffer); + return audioBufferToWav(audioBuffer); + } finally { + audioContext.close(); + } } catch (error) { console.error('Failed to convert audio to WAV:', error); return audioBlob; @@ -182,12 +205,20 @@ function audioBufferToWav(buffer: AudioBuffer): Blob { writeString(36, 'data'); // Subchunk2ID view.setUint32(40, dataSize, true); // Subchunk2Size - let offset = 44; + // Cache channel arrays, write PCM via Int16Array (native little-endian, matches WAV) + const channels: Float32Array[] = new Array(numberOfChannels); + for (let c = 0; c < numberOfChannels; c++) { + channels[c] = buffer.getChannelData(c); + } + + const pcm = new Int16Array(arrayBuffer, 44, length * numberOfChannels); + let p = 0; for (let i = 0; i < length; i++) { - for (let channel = 0; channel < numberOfChannels; channel++) { - const sample = Math.max(-1, Math.min(1, buffer.getChannelData(channel)[i])); - view.setInt16(offset, sample * 0x7fff, true); - offset += 2; + for (let c = 0; c < numberOfChannels; c++) { + let s = channels[c][i]; + if (s > 1) s = 1; + else if (s < -1) s = -1; + pcm[p++] = s * 0x7fff; } } diff --git a/tools/server/webui/src/lib/utils/css.ts b/tools/server/webui/src/lib/utils/css.ts new file mode 100644 index 00000000000..99351a7f449 --- /dev/null +++ b/tools/server/webui/src/lib/utils/css.ts @@ -0,0 +1,9 @@ +/** + * Converts a rem CSS value to pixels based on the document root font size. + */ +export function remToPx(rem: string): number { + const val = parseFloat(rem); + const fontSize = parseFloat(getComputedStyle(document.documentElement).fontSize); + + return val * fontSize; +} diff --git a/tools/server/webui/src/lib/utils/index.ts b/tools/server/webui/src/lib/utils/index.ts index bc158103e2d..41d39289754 100644 --- a/tools/server/webui/src/lib/utils/index.ts +++ b/tools/server/webui/src/lib/utils/index.ts @@ -190,3 +190,6 @@ export { // Cryptography utilities export { uuid } from './uuid'; + +// CSS utilities +export { remToPx } from './css'; diff --git a/tools/server/webui/src/routes/(chat)/+layout.svelte b/tools/server/webui/src/routes/(chat)/+layout.svelte new file mode 100644 index 00000000000..37aa0358248 --- /dev/null +++ b/tools/server/webui/src/routes/(chat)/+layout.svelte @@ -0,0 +1,12 @@ +<script lang="ts"> + import { page } from '$app/state'; + import { ChatScreen } from '$lib/components/app'; + + let { children } = $props(); + + let showCenteredEmpty = $derived(!page.params.id); +</script> + +<ChatScreen {showCenteredEmpty} /> + +{@render children?.()} diff --git a/tools/server/webui/src/routes/+page.svelte b/tools/server/webui/src/routes/(chat)/+page.svelte similarity index 94% rename from tools/server/webui/src/routes/+page.svelte rename to tools/server/webui/src/routes/(chat)/+page.svelte index e67a85abdbb..b22eda0978e 100644 --- a/tools/server/webui/src/routes/+page.svelte +++ b/tools/server/webui/src/routes/(chat)/+page.svelte @@ -1,5 +1,5 @@ <script lang="ts"> - import { ChatScreen, DialogModelNotAvailable } from '$lib/components/app'; + import { DialogModelNotAvailable } from '$lib/components/app'; import { chatStore } from '$lib/stores/chat.svelte'; import { conversationsStore, isConversationsInitialized } from '$lib/stores/conversations.svelte'; import { modelsStore, modelOptions } from '$lib/stores/models.svelte'; @@ -7,6 +7,7 @@ import { onMount } from 'svelte'; import { page } from '$app/state'; import { replaceState } from '$app/navigation'; + import { APP_NAME } from '$lib/constants'; let qParam = $derived(page.url.searchParams.get('q')); let modelParam = $derived(page.url.searchParams.get('model')); @@ -92,11 +93,9 @@ </script> <svelte:head> - <title>llama.cpp - AI Chat Interface + {APP_NAME} - - {activeConversation()?.name || 'Chat'} - llama.cpp - - 0 || isLoading()); let alwaysShowSidebarOnDesktop = $derived(config().alwaysShowSidebarOnDesktop); - let autoShowSidebarOnNewChat = $derived(config().autoShowSidebarOnNewChat); let isMobile = new IsMobile(); let isDesktop = $derived(!isMobile.current); let sidebarOpen = $state(false); + let mounted = $state(false); let innerHeight = $state(); let chatSidebar: | { activateSearchMode?: () => void; editActiveConversation?: () => void } @@ -48,41 +43,12 @@ let titleUpdateNewTitle = $state(''); let titleUpdateResolve: ((value: boolean) => void) | null = null; - let chatSettingsDialogOpen = $state(false); - let chatSettingsDialogInitialSection = $state(undefined); - - setChatSettingsDialogContext({ - open: (initialSection?: SettingsSectionTitle) => { - chatSettingsDialogInitialSection = initialSection; - chatSettingsDialogOpen = true; - } - }); + const panelNav = useSettingsNavigation(); // Global keyboard shortcuts - function handleKeydown(event: KeyboardEvent) { - const isCtrlOrCmd = event.ctrlKey || event.metaKey; - - if (isCtrlOrCmd && event.key === KeyboardKey.K_LOWER) { - event.preventDefault(); - if (chatSidebar?.activateSearchMode) { - chatSidebar.activateSearchMode(); - sidebarOpen = true; - } - } - - if (isCtrlOrCmd && event.shiftKey && event.key === KeyboardKey.O_UPPER) { - event.preventDefault(); - goto('?new_chat=true#/'); - } - - if (event.shiftKey && isCtrlOrCmd && event.key === KeyboardKey.E_UPPER) { - event.preventDefault(); - - if (chatSidebar?.editActiveConversation) { - chatSidebar.editActiveConversation(); - } - } - } + const { handleKeydown } = useKeyboardShortcuts({ + editActiveConversation: () => chatSidebar?.editActiveConversation?.() + }); function handleTitleUpdateCancel() { titleUpdateDialogOpen = false; @@ -100,28 +66,15 @@ } } + onMount(() => { + mounted = true; + }); + $effect(() => { if (alwaysShowSidebarOnDesktop && isDesktop) { sidebarOpen = true; return; } - - if (isHomeRoute && !isNewChatMode) { - // Auto-collapse sidebar when navigating to home route (but not in new chat mode) - sidebarOpen = false; - } else if (isHomeRoute && isNewChatMode) { - // Keep sidebar open in new chat mode - sidebarOpen = true; - } else if (isChatRoute) { - // On chat routes, only auto-show sidebar if setting is enabled - if (autoShowSidebarOnNewChat) { - sidebarOpen = true; - } - // If setting is disabled, don't change sidebar state - let user control it manually - } else { - // Other routes follow default behavior - sidebarOpen = showSidebarByDefault; - } }); // Initialize server properties on app load (run once) @@ -185,7 +138,7 @@ const apiKey = config().apiKey; if ( - (page.route.id === '/' || page.route.id === '/chat/[id]') && + (page.route.id === '/(chat)' || page.route.id === '/(chat)/chat/[id]') && page.status !== 401 && page.status !== 403 ) { @@ -229,12 +182,6 @@ - (chatSettingsDialogOpen = open)} - initialSection={chatSettingsDialogInitialSection} - /> -
- + - {#if !(alwaysShowSidebarOnDesktop && isDesktop)} - + +
+ {/if} + {/if} + + {#if isDesktop && !alwaysShowSidebarOnDesktop} + { + if (chatSidebar?.activateSearchMode) { + chatSidebar.activateSearchMode(); + } + + sidebarOpen = true; + }} /> {/if} diff --git a/tools/server/webui/src/routes/settings/+layout.svelte b/tools/server/webui/src/routes/settings/+layout.svelte new file mode 100644 index 00000000000..612b1a9c93a --- /dev/null +++ b/tools/server/webui/src/routes/settings/+layout.svelte @@ -0,0 +1,37 @@ + + +
+
+ +
+ +
+ {@render children?.()} +
+
diff --git a/tools/server/webui/src/routes/settings/chat/[section]/+page.svelte b/tools/server/webui/src/routes/settings/chat/[section]/+page.svelte new file mode 100644 index 00000000000..7b4b1975f93 --- /dev/null +++ b/tools/server/webui/src/routes/settings/chat/[section]/+page.svelte @@ -0,0 +1,6 @@ + + +).section} /> diff --git a/tools/server/webui/src/routes/settings/import-export/+page.svelte b/tools/server/webui/src/routes/settings/import-export/+page.svelte new file mode 100644 index 00000000000..27bde171609 --- /dev/null +++ b/tools/server/webui/src/routes/settings/import-export/+page.svelte @@ -0,0 +1,7 @@ + + +
+ +
diff --git a/tools/server/webui/src/routes/settings/mcp/+page.svelte b/tools/server/webui/src/routes/settings/mcp/+page.svelte new file mode 100644 index 00000000000..1758134c391 --- /dev/null +++ b/tools/server/webui/src/routes/settings/mcp/+page.svelte @@ -0,0 +1,5 @@ + + + diff --git a/tools/server/webui/tests/client/components/TestWrapper.svelte b/tools/server/webui/tests/client/components/TestWrapper.svelte index 4bbb8e86038..aeb7ff74c4a 100644 --- a/tools/server/webui/tests/client/components/TestWrapper.svelte +++ b/tools/server/webui/tests/client/components/TestWrapper.svelte @@ -1,7 +1,7 @@ diff --git a/tools/server/webui/tests/stories/ChatSettings.stories.svelte b/tools/server/webui/tests/stories/ChatSettings.stories.svelte deleted file mode 100644 index 4d8dbe50df9..00000000000 --- a/tools/server/webui/tests/stories/ChatSettings.stories.svelte +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/tools/server/webui/tests/stories/ChatSidebar.stories.svelte b/tools/server/webui/tests/stories/ChatSidebar.stories.svelte index 7ff9538a3e8..118dd3815fb 100644 --- a/tools/server/webui/tests/stories/ChatSidebar.stories.svelte +++ b/tools/server/webui/tests/stories/ChatSidebar.stories.svelte @@ -11,6 +11,12 @@ layout: 'centered' } }); + + +